1

私は現在
NtQueryInformationThread(.., ThreadQuerySetWin32StartAddress, addr, ..)、でスレッドアドレスを取得するために使用していますaddr
msdnドキュメントによると

NtQueryInformationThreadは、Windowsの将来のバージョンで変更されるか、使用できなくなる可能性があります

また、

Windows Vistaより前のバージョンのWindowsでは、返される開始アドレスは、スレッドの実行が開始される前にのみ信頼できることに注意してください。

スレッドのアドレスを取得するための推奨される方法は何ですか?

4

1 に答える 1

2

NtQueryXxxx関数グループは、文書化されていない内部Windowsカーネル関数です。マイクロソフトが米国司法省との和解でそれらを文書化することを余儀なくされるまで。彼らはそうしましたが、Windowsでの革新を可能にするために必要な、将来のバージョンのWindowsでの実装を変更する権利を留保しました。そして、カーネルでの意図された使用を超えて関数を実際に有用にする必要がない権利を留保しました。

警告は非常に正確です。スレッドが開始された後は、この関数から使用可能なスレッド開始アドレスを取得できません。これは、実際の開始アドレス、ntdll.dllの__RtlUserThreadStart()という名前の内部ヘルパー関数を指します。Windowsのデバッグシンボルがある場合は、スタックトレースで確認できます。開始されたすべてのスレッドに対して同じ開始アドレス。

書き込みは壁にあります。使用しないでください。

于 2012-12-11T22:12:10.113 に答える