2010-11-22 3 views
1

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

У меня есть код на месте, используя DHCP Server API, который может создать подсеть и добавить резервирование 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 проходят, но функция возвращает ложь при проверке:

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

ответ

0

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

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

+0

Эй, Стив, я отредактировал исходное сообщение, чтобы включить код. Если, подсеть не существует первоначально, то она будет разрешена. Я также попытался использовать DhcpSetSubnetInfo() в существующей подсети. Все еще не удалось включить его ... Мне интересно, просто ли это невозможно! – Nick