TerminateProcess能kill进程的范围问题 - C++ Builder / Windows SDK/API
在使用TerminateProcess时候发现有些进程是不能kill的。
我有自己写的一个服务,在资源任务管理器(用户名属于system)中是能结束的,但在程序中TerminateProcess是结束不了的,因为OpenProcess的时候获得的handle都是null。
所以我想是不是由于OpenProcess只能获得有窗体的进程的handle,或者是只要资源管理器中用户名为system的就不能获得,因而无法结束进程。
另外有没其他方法解决这样的问题啊?怎样才能达到用命令ntsd进行kill的效果呢???
[解决办法]
好像需要提升权限,试试这段代码
HANDLE hToken;
if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken))
{
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount=1;
LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tp.Privileges[0].Luid);
tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(tp),NULL,NULL);
CloseHandle(hToken);
}