请教关于DHCP API的使用
DhcpCApiInitialize 
DhcpCApiCleanup 
DhcpRequestParams 
DhcpUndoRequestParams 
DhcpRegisterParamChange 
DhcpDeRegisterParamChangeMSDN上看到了Sample,但是用不了,请教如何使用。
最好能有代码贴在这。

解决方案 »

  1.   

    MSDN上看到了Sample研究一下这个例子就好了
      

  2.   

    bool  RetrieveHostName(void)
    {
        CHAR     pszHostNameBuf[256]={""};
        DWORD    dwHostNameBufSize;
        LPCWSTR  pszAdapterName;
        LPWSTR   pAdapterWSTR = L"ローカル エリア接続";
        dwHostNameBufSize = sizeof(pszHostNameBuf);
        pszAdapterName = L"ローカル エリア接続";
        DWORD dwError, dwSize;
        CHAR TmpBuffer[1000] = {0}; // host name won't be larger than this
        DHCPCAPI_PARAMS DhcpApiHostNameParams = {
                0,                // Flags
                OPTION_DOMAIN_NAME_SERVERS, // OptionId
                //OPTION_SUBNET_MASK,
                FALSE,            // vendor specific?
                NULL,             // data filled in on return
                0                 // nBytes
            }; 
        DHCPCAPI_PARAMS_ARRAY RequestParams = {
                1,  // only one option to request 
                &DhcpApiHostNameParams
            };    DHCPCAPI_PARAMS_ARRAY SendParams = {
                0,   
                NULL
            };    dwSize = sizeof(TmpBuffer);
        dwError = DhcpRequestParams(
                DHCPCAPI_REQUEST_SYNCHRONOUS, // Flags
                NULL,                         // Reserved
                pAdapterWSTR,               // Adapter Name
                NULL,                         // not using class id
            SendParams,                 // sent parameters
                RequestParams,                // requesting params
                (PBYTE) TmpBuffer,            // buffer
                &dwSize,                      // buffer size
                L"122"                          // Request ID
            );    if( ERROR_MORE_DATA == dwError ) 
        {
                //
                // dwSize is not large enough.
                //
        }    if( NO_ERROR == dwError ) 
        {            // Check if the requested option was obtained.            if( DhcpApiHostNameParams.nBytesData ) 
                {                // Check size with dwHostNameBufSize.                CopyMemory(
                         pszHostNameBuf, DhcpApiHostNameParams.Data,
                         DhcpApiHostNameParams.nBytesData
                         );
                    pszHostNameBuf[DhcpApiHostNameParams.nBytesData] = '\0';
                    return TRUE;
                }
        }    return FALSE;
    }
    int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
    {    DWORD dwVersion;    DhcpCApiInitialize( &dwVersion );    RetrieveHostName();    DhcpCApiCleanup();    return 0;
    }DhcpRequestParams的返回值是2,MSDN的例子就是这么写的阿,为什么呢?
      

  3.   

    pszAdapterName不能使用属性窗口中显示的“friendly name”,怎么连日文都出来了?
    MSDN上说应该使用GetInterfaceInfo的返回的适配器名,但我试下来同样不行。
    倒是GetAdaptersInfo返回的名字可以正常工作。这个名字一般是个GUID。另外,并非所有的DHCP服务器都能返回DOMAIN NAME选项,因此MSND的这个程序示例也不是很通用。如果写个程序来从DHCP服务器获取子网掩码(OPTION_SUBNET_MASK),反而会更通用一些,因为极少有DHCP Server不返回子网掩码这个Option的。