c++ - 通过 DuplicateHandle 获取线程上下文?

标签 c++ windows winapi error-handling inject

我正在尝试使用 GetThreadContext 打开进程重复句柄并从线程句柄查询信息,但出现错误 ERROR_INVALID_HANDLE 或 ERROR_GEN_FAILURE。关于这方面的信息似乎非常有限....

processHandle = OpenProcess(PROCESS_DUP_HANDLE, FALSE, pid)
DuplicateHandle(processHandle,handle.Handle,GetCurrentProcess(),&dupHandle,0,FALSE,DUPLICATE_SAME_ACCESS);


            memset(&ctx,0x00,sizeof(ctx));
            GetThreadContext(dupHandle,&ctx);
            printf("Error:%x", GetLastError());

有人吗?

最佳答案

首先,如上所述,您应该将线程句柄作为参数传递,而不是进程句柄。

那么,您请求GetThreadContext API 填充CONTEXT 结构的哪一部分?你在那里留下零,应该有 1+ 标志来指示感兴趣的数据:

CONTEXT ThreadContext = { CONTEXT_CONTROL };
if(GetThreadContext(ThreadHandle, &ThreadContext)) {
    // ...

另请参阅 https://stackoverflow.com/a/199809/868014 处的代码片段

关于c++ - 通过 DuplicateHandle 获取线程上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8662891/

相关文章:

c++ - 在 Windows 上使用 CMake 设置 Vulkan 项目

python - 如何使用子进程和 Popen 从我的 .exe 中获取所有输出?

c++ - 如何在 C++ 中将位图绘制为 OpenGL 纹理?

c++ - 从 SinkWriter 或 ICodecAPI 或 IMFTransform 获取编码器名称

c - 为什么屏幕截图没有使用 SelectObject 和 BitBlt 函数绘制到我的窗口上?

多种颜色的 C++ DirectX DrawText

c++ - 头文件顺序

c++ - VB.NET 中的 TEA 实现

c - preLaunchTask 'helloworld' 以退出代码 1 终止

c++ - 如何使用 C++ 使用 VLC 播放器运行视频文件