2010-11-22 7 views
1

Ich schreibe ein Modul, um einen DHCP-Server zu verwalten, der zusammen mit dem Dienst vorhanden ist, in dem das Modul vorhanden ist.So aktivieren Sie ein DHCP-Subnetz über DhcpSAPI

Ich habe Code mit der DHCP Server API Stelle, die in der Lage ist, ein Subnetz zu erstellen und DHCP-Reservierungen hinzuzufügen. Was ich nicht zu tun vermag, ist die Aktivierung/Aktivierung des Subnetzbereichs.

ich angenommen hatte, dass DhcpSetSubnetInfo() würde mit dem SubnetState Feld der jedoch auf DhcpSubnetEnabled gesetzt DHCP_SUBNET_INFO Struktur die Arbeit tun scheint dies keine Wirkung zu haben.

Scannen über den Rest der DHCP-Server-API Ich kann keine anderen Methoden zum Konfigurieren von Subnetzen/Bereichen sehen.

Hat jemand das geschafft?

Danke für Ihre Hilfe.

Nick.

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; 

} 

den Code debuggen, die alle die DhcpXX Funktionen übergeben, aber die Funktion false zurück, wenn die Überprüfung:

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

Antwort

0

Haben Sie DhcpCreateSubnet mit dem DhcpSubnetEnabled Flagge versucht Aufruf gesetzt, wie oben angemerkt? Möglicherweise tut Ihr Code dies bereits - posten Sie den Teil, der das Subnetz nicht erstellen und aktivieren kann.

Stellen Sie sicher, dass Sie auch alle Windows-API-Aufrufe auf Fehler überprüfen. Auch hier hilft Code, um herauszufinden, was fehlschlagen könnte.

+0

Hey Steve, ich habe den ursprünglichen Beitrag bearbeitet, um den Code aufzunehmen. Wenn das Subnetz anfangs nicht existiert, wird es aktiviert erstellt. Ich habe auch versucht, DhcpSetSubnetInfo() in einem vorhandenen Subnetz zu verwenden. Immer noch nicht in der Lage es zu aktivieren ... Ich frage mich, ob es einfach nicht möglich ist! – Nick

Verwandte Themen