请教关于DHCP API的使用
DhcpCApiInitialize
DhcpCApiCleanup
DhcpRequestParams
DhcpUndoRequestParams
DhcpRegisterParamChange
DhcpDeRegisterParamChangeMSDN上看到了Sample,但是用不了,请教如何使用。
最好能有代码贴在这。
DhcpCApiInitialize
DhcpCApiCleanup
DhcpRequestParams
DhcpUndoRequestParams
DhcpRegisterParamChange
DhcpDeRegisterParamChangeMSDN上看到了Sample,但是用不了,请教如何使用。
最好能有代码贴在这。
{
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的例子就是这么写的阿,为什么呢?
MSDN上说应该使用GetInterfaceInfo的返回的适配器名,但我试下来同样不行。
倒是GetAdaptersInfo返回的名字可以正常工作。这个名字一般是个GUID。另外,并非所有的DHCP服务器都能返回DOMAIN NAME选项,因此MSND的这个程序示例也不是很通用。如果写个程序来从DHCP服务器获取子网掩码(OPTION_SUBNET_MASK),反而会更通用一些,因为极少有DHCP Server不返回子网掩码这个Option的。