新手,关于OpenProcess的问题

aimeast 2009-05-08 11:25:55
下面代码中
void CTerminateProcess::Start(LPVOID pParam)
{
//HANDLE hToken;
//BOOL b=OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS,&hToken);
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
HANDLE hProcess;
DWORD dCurrentPID = GetCurrentProcessId();
LPPROCESSENTRY32 lppe=new PROCESSENTRY32();
lppe->dwSize=sizeof(*lppe);
if(hProcessSnap==INVALID_HANDLE_VALUE)
{
return;
}
if(!Process32First(hProcessSnap,lppe))
{
CloseHandle(hProcessSnap);
return;
}
do
{
if(lppe->th32ProcessID==dCurrentPID)
continue;
DWORD error=0;
hProcess = OpenProcess(PROCESS_TERMINATE,FALSE,lppe->th32ProcessID);error=GetLastError();//error=6
TerminateProcess(hProcess,0);error=GetLastError();//error=5
CloseHandle(hProcess);error=GetLastError();//error=2
}while(Process32Next(hProcessSnap,lppe));
delete lppe;
CloseHandle(hProcessSnap);
}

到了OpenProcess这里就出错了,不知道是为什么。我用的是administrator用户,应该不会有权限问题。
还有,快照里面的进程列表把pid=400~900的都给忽略了,这个又是为什么。
...全文
107 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
aimeast 2009-05-09
  • 打赏
  • 举报
回复
是xp系统。
自己已经查到原因了,还是权限不够。
现在这样已经没有问题了。
void CTerminateProcess::Start(LPVOID pParam)
{
//只是在这里加了提权的代码,其他内容都没有改变
HANDLE hToken;
LUID uID;
TOKEN_PRIVILEGES tp;
OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS,&hToken);
LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&uID);

tp.PrivilegeCount=1;
tp.Privileges[0].Luid=uID;
tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;

AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(tp),NULL,NULL);

CloseHandle(hToken);

HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
HANDLE hProcess;
DWORD dCurrentPID = GetCurrentProcessId();
LPPROCESSENTRY32 lppe=new PROCESSENTRY32();
lppe->dwSize=sizeof(*lppe);
if(hProcessSnap==INVALID_HANDLE_VALUE)
{
return;
}
if(!Process32First(hProcessSnap,lppe))
{
CloseHandle(hProcessSnap);
return;
}
do
{
if(lppe->th32ProcessID==dCurrentPID)
continue;
DWORD error=0;
hProcess = OpenProcess(PROCESS_TERMINATE,FALSE,lppe->th32ProcessID);error=GetLastError();
TerminateProcess(hProcess,0);error=GetLastError();
CloseHandle(hProcess);error=GetLastError();
}while(Process32Next(hProcessSnap,lppe));
delete lppe;
CloseHandle(hProcessSnap);
}
WaistCoat19 2009-05-09
  • 打赏
  • 举报
回复
Vista系统?
如果是要高权限启动程序。
fishion 2009-05-09
  • 打赏
  • 举报
回复
把PROCESS_TERMINATE换成
如PROCESS_QUERY_INFORMATION|PROCESS_VM_READ
aimeast 2009-05-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cnzdgs 的回复:]
hProcess如果不是0,就说明OpenProcess成功了,此时GetLastError没有意义。
[/Quote]
当然hProcess始终都是0,郁闷死
cnzdgs 2009-05-08
  • 打赏
  • 举报
回复
hProcess如果不是0,就说明OpenProcess成功了,此时GetLastError没有意义。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧