1

モジュールが存在するサービスと同じ場所にある DHCP サーバーを管理するためのモジュールを作成しています。

サブネットを作成して DHCP 予約を追加できるDHCP サーバー APIを使用するコードを用意しました。私ができないように見えるのは、実際にサブネットスコープを有効化/アクティブ化することです。

構造体のフィールドをに設定しDhcpSetSubnetInfo( )て仕事をするだろうと思っていましたが、これは効果がないようです。SubnetStateDHCP_SUBNET_INFODhcpSubnetEnabled

DHCP サーバー API の残りの部分をスキャンすると、サブネット/スコープを構成する他の方法が見つかりません。

誰かがこれを行うことができましたか?

ご協力いただきありがとうございます。

ニック。

編集:

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

1 に答える 1

0

上記のようにフラグを設定して電話をかけてみDhcpCreateSubnetましたか?DhcpSubnetEnabledおそらくあなたのコードはすでにこれを行っています-サブネットの作成と有効化に失敗した部分を投稿してください。

すべてのWindowsAPI呼び出しでエラーがないかどうかも確認してください。繰り返しますが、いくつかのコードは、何が失敗しているのかを特定するのに役立ちます。

于 2010-11-22T16:55:33.483 に答える