我想对DHCP服务在本地进行简单的监控,获取相关的IP地址分配信息等。
查了MSDN 提供相关的api。如:dhcpget***,dhcpenum**
于是看了说明了写了如下简单的程序,简单试试。
运行环境,是在虚拟机中建了2003,开启了DHCP服务。(IP 为192.168.50.254).
我的代码如下:
#include "stdafx.h"
#include <Windows.h>
#include "dhcpcsdk.h"
#include "dhcpsapi.h"
#include <iostream>
using namespace std;
void OutputError(DWORD dwError)
{
LPVOID lpMsgBuf; // buffer to copy string into (allocated by call)
if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwError,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf, 0, NULL) == 0)
printf("Error Reported: %d GetLastError: %d\n", dwError, GetLastError());
else
{
printf("Error %d: %s\n", dwError, (LPCSTR) lpMsgBuf);
// free the buffer.
LocalFree(lpMsgBuf);
}
}
int main(void)
{
DWORD dwRsult;
DWORD dwVersion;
DWORD errorcode;
dwRsult = DhcpCApiInitialize( &dwVersion );
if ( dwRsult != 0 )
{
OutputError(dwRsult );
return 0;
}
printf("DHCP Client Options API version %d\n", dwVersion);
char ips[] = {"192.168.50.254"};
WCHAR wips[40] ;
MultiByteToWideChar(0, 0, ips, strlen(ips), wips, 40);
LPDHCP_BIND_ELEMENT_ARRAY myarr;
errorcode = DhcpGetServerBindingInfo(wips, DHCP_ENDPOINT_FLAG_CANT_MODIFY, &myarr);
if (errorcode == 0)
{
printf(" DhcpGetServerBindingInfo() is ok\n");
}
else
{
OutputError(errorcode);
}
DhcpCApiCleanup();
getchar();
}
可为什么运行结果如下:
DHCP Client Options API version is 2
Error 1722: RPC 服务器不可用。
麻烦各位帮帮忙,不甚感激