【问题标题】:NtQueryInformationThread for both x86 and x64适用于 x86 和 x64 的 NtQueryInformationThread
【发布时间】:2012-09-02 21:55:25
【问题描述】:

对于大小和指针变量,似乎 NtQueryInformationThread 对于 x86 需要 DWORD,对于 x64 需要 DWORD64?

我怎样才能使它通用在 x86 和 x64 中编译? LPVOID 似乎没有帮助,因为它只是给了我不正确的结果。

【问题讨论】:

  • 因为 NtQueryInformationThread 被定义为 typedef DWORD (*tNtQueryInformationThread)(HANDLE, LONG, PVOID, ULONG, PULONG); 而 ULONG 是 DWORD。
  • 那是tNtQueryInformationThread。注意前面额外的t。这就是为什么我发现了别的东西。
  • 嗯,但同样,NtQueryInformationThread 被重新定义为 tNtQueryInformationThread NtQueryInformationThread = (tNtQueryInformationThread)GetProcAddress(ntDLLHandle, "NtQueryInformationThread");

标签: c++ winapi


【解决方案1】:

好的,刚刚发现将其设为 LPVOID 使其可跨架构编译。

DWORD ntStatus = NtQueryInformationThread(hTemporaryHandle, ThreadQuerySetWin32StartAddress, dwStartAddress, sizeof(LPVOID), NULL);

其中dwStartAddress 也是LPVOID,但根据目标环境指向 DWORD 或 DWORD64 变量。

【讨论】:

  • DWORD_PTR 是您应该用于 x86/x64 可移植性的类型。
猜你喜欢
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 2014-06-12
  • 2011-12-04
相关资源
最近更新 更多