Как включить подсеть DHCP через DhcpSAPI - PullRequest
1 голос
/ 22 ноября 2010

Я пишу модуль для управления сервером DHCP, размещенным совместно со службой, в которой этот модуль существует.

У меня есть код, использующий API DHCP-сервера , который может создать подсеть и добавить резервирование DHCP. Похоже, я не могу на самом деле включить / активировать область подсети.

Я предполагал, что DhcpSetSubnetInfo( ) выполнит работу с полем SubnetState структуры DHCP_SUBNET_INFO, установленным на DhcpSubnetEnabled, однако, похоже, это не имеет никакого эффекта.

Сканирование через оставшуюся часть API DHCP-сервера. Я не вижу других способов настройки подсетей / областей.

Кому-нибудь удалось это сделать?

Спасибо за вашу помощь.

Ник.

Edit:

static bool enableSubnet( 
                    const std::wstring& server,
                    DWORD               dwSubnet
                    )
{
    LPDHCP_SUBNET_INFO pInfo = NULL;

    DWORD res = DhcpGetSubnetInfo(
                        server.c_str( ),
                        dwSubnet,
                        &pInfo
                        );

    if ( res != ERROR_SUCCESS )
    {
        DhcpRpcFreeMemory( pInfo );

        return false;
    }

    if ( pInfo->SubnetState == DhcpSubnetEnabled )
    {
        DhcpRpcFreeMemory( pInfo );

        return true;
    }

    DHCP_SUBNET_INFO info( *pInfo );

    info.SubnetState = DhcpSubnetDisabled;

    res = DhcpCreateSubnet( server.c_str( ), dwSubnet, &info );

    DhcpRpcFreeMemory( pInfo );

    if ( res != ERROR_SUCCESS )
    {
        return false;
    }

    res = DhcpGetSubnetInfo(
                        server.c_str( ),
                        dwSubnet,
                        &pInfo
                        );

    if ( res != ERROR_SUCCESS )
    {
        DhcpRpcFreeMemory( pInfo );

        return false;
    }

    bool retVal = ( pInfo->SubnetState == DhcpSubnetEnabled );

    if ( !retVal )
    {
        std::wcerr << L"Failed to enable subnet";
    }

    DhcpRpcFreeMemory( pInfo );

    return retVal;

}

Отладка кода, все функции DhcpXX проходят, но функция возвращает false при проверке:

    bool retVal = ( pInfo->SubnetState == DhcpSubnetEnabled );

1 Ответ

0 голосов
/ 22 ноября 2010

Вы пытались позвонить DhcpCreateSubnet с установленным флагом DhcpSubnetEnabled, как указано выше?Возможно, ваш код уже делает это - опубликуйте часть, которая не может создать и включить подсеть.

Убедитесь, что вы также проверяете все вызовы API Windows на наличие ошибок.Опять же, некоторый код поможет определить, что может быть неудачным.

...