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详细介绍了操作进程的那些函数分别需要那些访问权限