1

win7 で ipv6 をサポートし、xp で ipv4 をサポートするために、dhcpcsvc6.dll を動的にロードしようとしていました。ただし、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;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 には、これらの関数が含まれています。

_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 に答える