关于C++ OpenProcess()取不到值的问题 20

HWNDhWnd=::FindWindow(NULL,TEXT("Myprocess2"));DWORDnProcId;nProcId=GetWindowThreadPr... HWND hWnd=::FindWindow(NULL,TEXT("Myprocess2"));
DWORD nProcId;
nProcId=GetWindowThreadProcessId(hWnd, &nProcId);
hProcess=OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, nProcId);
MyProcess2是创建的一个子进程,nProcId可以取到值,但是hProcess取到的值总是为0;给当前进程加权限:
TOKEN_PRIVILEGES tkp;
HANDLE hToken;
if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) //得到进程的令牌句柄;
{
MessageBox("OpenProcessToken failed!");
}

LookupPrivilegeValue(NULL, SE_RESTORE_NAME,&tkp.Privileges[0].Luid); //获得本地机唯一的标识,查询权限
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES) NULL, 0); //调整获得的权限
if (GetLastError() != ERROR_SUCCESS)
{
MessageBox("AdjustTokenPrivileges enable failed!");
}
再调用OpenProcess()还是不行,怎么解决?
hProcess=OpenProcess(PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ, FALSE, nProcId)
调试过去这一句之后得到的如图
展开
 我来答
xiao312217475
2012-05-19
知道答主
回答量:26
采纳率:0%
帮助的人:11.9万
展开全部
PID=GetWindowThreadProcessId(hwnd,&PID);
改成
GetWindowThreadProcessId(hwnd,&PID);
就可以了。
说明:
GetWindowThreadProcessId
函数的第二个参数接受进程ID,而返回值是线程ID,所以你的语句
得到的是线程ID,改后的语句才是得到的进程ID。

祝你好运!
更多追问追答
追问
你复制的这个答案我看过耶试过,没用
追答
是吗?
这样也没有用吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
superdaojian
2012-05-18 · TA获得超过377个赞
知道小有建树答主
回答量:291
采纳率:0%
帮助的人:144万
展开全部
你把LookupPrivilegeValue里的SE_RESTORE_NAME改为SE_DEBUG_NAME试试
追问
还是不行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式