通过DuplicateHandle获取GetThreadContext?

时间:2011-12-29 00:36:01

标签: 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());

任何人?

2 个答案:

答案 0 :(得分:3)

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

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

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

另请参阅https://stackoverflow.com/a/199809/868014

上的代码段

答案 1 :(得分:2)

GetThreadContext采用线程句柄而不是进程句柄。