当前位置: 代码迷 >> 综合 >> NtCreateThreadEx在Win7 x64位调用失败解决办法
  详细解决方案

NtCreateThreadEx在Win7 x64位调用失败解决办法

热度:91   发布时间:2023-09-28 00:35:17.0

问题

在研究进程注入的时候,发现在Win10 64位上调用NtCreateThreadEx可以执行成功,但是换到Win7 64位上会失败,并且返回GetLastError = 8,程序是以管理员运行且内部已实现提升进程访问权限。

解决方案

函数NtCreateThreadEx在32位和64位的定义有所不同,区分不同的系统位数选择函数声明节课解决在Win7 64位上调用失败的问题。

64位NtCreateThreadEx函数声明如下:

DWORD (__stdcall * _NtCreateThreadEx)(   PHANDLE ThreadHandle,   ACCESS_MASK DesiredAccess,   LPVOID ObjectAttributes,   HANDLE ProcessHandle,   LPTHREAD_START_ROUTINE lpStartAddress,   LPVOID lpParameter,   ULONG CreateThreadFlags,   SIZE_T ZeroBits,   SIZE_T StackSize,   SIZE_T MaximumStackSize,   LPVOID pUnkown) = NULL; 

32位NtCreateThreadEx函数声明如下:

DWORD (__stdcall * _NtCreateThreadEx)(   PHANDLE ThreadHandle,   ACCESS_MASK DesiredAccess,   LPVOID ObjectAttributes,   HANDLE ProcessHandle,   LPTHREAD_START_ROUTINE lpStartAddress,   LPVOID lpParameter,   BOOL CreateSuspended,   DWORD dwStackSize,   DWORD Unknown1,   DWORD Unknown2,   LPVOID Unknown3   ) = NULL; 

遗留问题

为什么在Win10 64位上使用32位的函数声明可以执行成功呢?

  相关解决方案