c - 如何在 Windows 中检索线程的起始地址?

标签 c windows multithreading winapi

我正在用 C 开发一个迷你 Windows 进程资源管理器,我有一个线程的句柄。
如何检索该线程的起始地址?像这样的东西:
enter image description here

最佳答案

几天前已经有人问过这样的问题。这是一个示例解决方案:

DWORD WINAPI GetThreadStartAddress(HANDLE hThread)
{
    NTSTATUS ntStatus;
    HANDLE hDupHandle;
    DWORD dwStartAddress;

    pNtQIT NtQueryInformationThread = (pNtQIT)GetProcAddress(GetModuleHandle("ntdll.dll"), "NtQueryInformationThread");

    if(NtQueryInformationThread == NULL) 
        return 0;

    HANDLE hCurrentProcess = GetCurrentProcess();
    if(!DuplicateHandle(hCurrentProcess, hThread, hCurrentProcess, &hDupHandle, THREAD_QUERY_INFORMATION, FALSE, 0)){
        SetLastError(ERROR_ACCESS_DENIED);

        return 0;
    }

    ntStatus = NtQueryInformationThread(hDupHandle, ThreadQuerySetWin32StartAddress, &dwStartAddress, sizeof(DWORD), NULL);
    CloseHandle(hDupHandle);
    if(ntStatus != STATUS_SUCCESS) 
       return 0;

    return dwStartAddress;

}

来源:http://forum.sysinternals.com/how-to-get-the-start-address-and-modu_topic5127_post18072.html#18072

您可能必须包含此文件:http://pastebin.com/ieEqR0eL

相关问题:How to add ntdll.dll to project libraries with LoadLibrary() and GetProcAddress() functions?

关于c - 如何在 Windows 中检索线程的起始地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11147846/

相关文章:

java - 如何在java中刷新dns

c# - .NET 中的线程同步

c++ - GetUserNameExA 函数无法在系统启动时(GINA)提供用户详细信息?

c# - 不一致 "Cross-thread operation not valid"异常

python - 如何正确停止 python 线程?

c - 从 C 列出 Linux 中的目录

c - 如何检索字符串的一部分?

c - 从控制台中删除新行字符

c - 如何在C中表示内存中的FLOAT数

windows - 在批处理中的 endlocal 之后保留变量