1

我试图动态加载 dhcpcsvc6.dll 以支持 win7 上的 ipv6 和 xp 上的 ipv4。但是 Dhcpv6CApiInitialize 的 GetProcAddress 总是失败。所以我使用 exescope 检查了 dll 的导出,这就是我得到的。

Version: 6.1.7600.16385.

00000001    404632EA    Dhcpv6AcquireParameters
00000002    40463E4F    Dhcpv6CancelOperation
00000003    40463EB9    Dhcpv6EnableTracing
00000004    40461D3B    Dhcpv6FreeLeaseInfo
00000005    404644D3    Dhcpv6GetTraceArray
00000006    404645D9    Dhcpv6GetUserClasses
00000007    404642D1    Dhcpv6IsEnabled
00000008    40461730    Dhcpv6QueryLeaseInfo
00000009    40463419    Dhcpv6ReleaseParameters
0000000A    40463E31    Dhcpv6ReleasePrefix
0000000B    40463BF5    Dhcpv6ReleasePrefixEx
0000000C    40463BD1    Dhcpv6RenewPrefix
0000000D    40463892    Dhcpv6RenewPrefixEx
0000000E    40463F51    Dhcpv6RequestParams
0000000F    40463871    Dhcpv6RequestPrefix
00000010    40463549    Dhcpv6RequestPrefixEx
00000011    404647D1    Dhcpv6SetUserClass

Dhcpv6CApiInitialize 不在其中。我还尝试了 dhcpcore6.dll、dhcpsvc.dll 和 64 位版本的这些.. 没有发现。

我想知道这个功能到底在哪里?我真的必须在任何其他 dhcp v6 api 之前调用它吗?

MSDN 参考: http: //msdn.microsoft.com/en-us/library/windows/desktop/aa363306 (v=vs.85).aspx

4

1 回答 1

2

TL;博士

直到 Win8 才出现函数。Win8 版本(我检查了版本 6.2.9200.16433)没有任何用处。如果这些函数不存在于dhcpcsvc6.DLL.

解释:

  1. 静态链接需要 Win8 SDK(已经内置在 VS2012 中)。
  2. 带有 Win7 SDK 的 VS2010 无法编译。
  3. 用 Win8 SDK 编译时,编译出来的 exe 在 Win7 上运行不了,说The procedure entry point Dhcpv6CApiInitialize could not be located in the dynamic link library dhcpcsvc6.DLL. 这意味着函数确实是从dhcpcsvc6.DLL.
  4. Win8 版本的 DLL 确实包含这些函数。

_Dhcpv6CApiInitialize@4本质上只是将 2 放入输出参数:

10004199: mov         edi,edi                // Standard Hotpatch spot
1000419B: push        ebp                    // Standard Prologue
1000419C: mov         ebp,esp                // Standard Prologue
1000419E: mov         eax,dword ptr [ebp+8]  // eax <- param0
100041A1: test        eax,eax                // if (param0 == 0)
100041A3: je          100041AB               //    return;
100041A5: mov         dword ptr [eax],2      // *param0 = 2;
100041AB: pop         ebp                    // Standard epilogue
100041AC: ret         4                      // end of function

_Dhcpv6CApiCleanup@0什么都不做:

100041B6: ret
于 2013-08-20T10:48:59.737 回答