OpenProcess讲解

HANDLE hProcess=OpenProcess(PROCESS_TERMINATE|SYNCHRONIZE,FALSE,proid);
	if (hProcess==NULL)
	{
		cout<<"OpenProcess failed with "<<GetLastError()<<endl;
		return 0;
	}
	else
	{
		TCHAR buffer[MAX_PATH];
		DWORD dwLength=MAX_PATH;
		QueryFullProcessImageName(hProcess,1,buffer,&dwLength);

		BOOL bRet=TerminateProcess(hProcess,1);
		DWORD dwRet=WaitForSingleObject(hProcess,INFINITE);
		if (dwRet==WAIT_OBJECT_0)
		{
			cout<<"Process exit"<<endl;
		}
		else if (dwRet==WAIT_FAILED)
		{
			cout<<"WaitForSingleObject failed with "<<GetLastError()<<endl;
		}


如果要结束其它的进程,首先应该调用OpenProcess得到指定进程的句柄,调用OpenProcess时传入的访问权限控制参数很重要,这里要遵循一个

原则,就是获取满足自身要求的控制权限即可,例如如果想结束其它进程,只需要传入PROCESS_TERMINATE参数,若只想查询某些进程的信息,

传入PROCESS_QUERY_INFORMATION即可。不要动辄就传入PROCESS_ALL_ACCESS,这样容易造成打开进程失败,例如在一个具有过滤权限的

进程调用OpenProcess并传入PROCESS_ALL_ACCESS参数打开一个具有管理员权限的进程,OpenProcess会调用失败,而如果使用PROCESS_TERMINATE

参数,则调用成功,并且TerminateProcess也会调用成功(被结束进程没有其它保护)。

当然也不意味着使用较少权限就能够打开任意进程,例如

一个具有过滤权限的进程调用OpenProcess并传入PROCESS_QUERY_INFORMATION参数打开一个具有管理员权限的进程,OpenProcess会调用失败,具体问题

只能具体调试啦!


SDK中Process Security and Access right详细介绍了操作进程的那些函数分别需要那些访问权限


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值