2010-11-22 47 views
1

我正在編寫一個模塊來管理與存在該模塊的服務共址的DHCP服務器。如何通過DhcpSAPI啓用DHCP子網

我有代碼在使用DHCP Server API這是能夠創建一個子網並添加DHCP保留。我似乎無法做到的其實是啓用/激活子網範圍。

我曾以爲,DhcpSetSubnetInfo()會做的工作與DHCP_SUBNET_INFO結構設置爲DhcpSubnetEnabledSubnetState領域然而,這似乎沒有任何效果。

掃描剩餘的DHCP服務器API我看不到任何其他配置子網/範圍的方法。

有沒有人設法做到這一點?

感謝您的幫助。

Nick。

編輯:

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); 

回答

0

你有沒有打過電話DhcpCreateSubnetDhcpSubnetEnabled標誌設置如上所述?可能你的代碼已經做到了這一點 - 發佈無法創建和啓用子網的部分。

請確保您檢查了所有的Windows API調用錯誤。再一次,一些代碼將有助於確定可能失敗的內容。

+0

嗨史蒂夫,我編輯了原始帖子,包括代碼。如果該子網最初不存在,則會啓用該子網。 我也嘗試在現有的子網上使用DhcpSetSubnetInfo()。仍然無法啓用它......我想知道這是不可能的! – Nick 2010-11-23 10:09:05