none
关于DHCP api调用的问题 RRS feed

  • 常规讨论

  • 我想对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 服务器不可用。

     

    麻烦各位帮帮忙,不甚感激

    • 已编辑 FACI 2010年1月12日 3:18 编辑
    2010年1月12日 3:16