问题
在研究进程注入的时候,发现在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,