2013-08-20 73 views
0

我试图做一个dhcpcsvc6.dll的动态加载,以支持xp上的win7和ipv4上的ipv6。但是Dhcpv6CApiInitialize的GetProcAddress总是失败。所以我用exescope来检查dll的输出,这就是我所得到的结果。Dhcpv6CApiInitialize在哪里?

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 apis之前调用它吗?

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

+0

我有他们的Windows 8设备。不要指望它能在XP上运行,这个记录的api只适用于Vista和更高版本。 –

+0

这不适用于Win XP,因为它至少需要Windows Vista和Server 2008. –

+0

@HansPassant感谢您的提醒。这就是为什么我正在做一个动态加载的V6 DLL而不是静态链接。 – ledzep2

回答

1

TL; DR

函数是不存在直到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确实包含这些功能。

[email protected]本质上只是把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 

[email protected]做什么都没有:

100041B6: ret 
+0

我同意这可能是一个文档缺陷。但我怀疑这些功能是出口到别处。因为使用静态链接,这些函数可以毫无问题地被调用。 – ledzep2

+0

编辑帖子主体以反映新的发现。 – Codeguard

+0

谢谢。介意添加您检查的dll版本? – ledzep2