在windows7 x64平台,调用getthreadcontext 返回值:87, 请问如何解决,windbg调试该内核API吗?关键代码:
CONTEXT cxt; SuspendThread(hThread); ZeroMemory(&cxt, sizeof(cxt)); cxt.ContextFlags = CONTEXT_FULL; if (!GetThreadContext(hThread, &cxt)) { printf("GetThreadContext getlasterror: %d", GetLastError()); goto finish; }
//hThread是有效的句柄,vs2015可以跟踪代码执行到printf出错的位置,然后就返回87了
getThreadContext出错返回0,这里printf打印的是出错代码。
关于出错代码,相关的含义在这里https://msdn.microsoft.com/en-us/library/ms681382(v=vs.85).aspx.aspx)
错误代码87(也就是0x57)的原因是参数错误。
你这里没有检查SuspendThread暂停线程是否成功,可以现检查一下。
还有你打开线程的时候,是否有查询权限(THREAD_GET_CONTEXT/WOW64THREAD_QUERY_INFORMATION)
如果你编译的是64位程序,是否该使用 Wow64SuspendThread/Wow64GetThreadContext