プロセス ID とスレッド ID を使用して、プロセスのスレッドの開始アドレスを取得したいと考えています。
ここに私のコードがあります:
DWORD WINAPI GetThreadStartAddress(DWORD tid, DWORD pid)
{
NTSTATUS ntStatus;
HANDLE hDupHandle;
DWORD dwStartAddress;
HANDLE hProcess;
HANDLE hTread;
pNtQIT NtQueryInformationThread;
hTread = OpenThread(THREAD_ALL_ACCESS, FALSE, tid);
NtQueryInformationThread = (pNtQIT)GetProcAddress(GetModuleHandle(L"ntdll.dll"), "NtQueryInformationThread");
if(NtQueryInformationThread == NULL)
return 0;
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
SuspendThread(hTread);
if(!DuplicateHandle(hProcess, hTread, hProcess, &hDupHandle, THREAD_QUERY_INFORMATION, FALSE, 0)){
SetLastError(ERROR_ACCESS_DENIED);
return 0;
}
ntStatus = NtQueryInformationThread(hDupHandle, ThreadQuerySetWin32StartAddress, &dwStartAddress, sizeof(DWORD), NULL);
ResumeThread(hTread );
CloseHandle(hTread);
CloseHandle(hProcess);
CloseHandle(hDupHandle);
if (ntStatus != 0)
return 0;
return dwStartAddress;
}
しかし、ntStatus は常に 0 ではありません。なぜですか?