如何结束 system 用户组的进程?如winlogon.exe, svchost.exe等
我用的主要代码如下:
void CGgdDlg::OnOK()
{
UpdateData(TRUE); //获取用户输入的要结束的进程名字 HANDLE handle; //定义CreateToolhelp32Snapshot系统快照句柄
HANDLE handle1; //定义要结束进程句柄
EnablePriv(); //提升本进程权限
handle=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//获得系统快照句柄
PROCESSENTRY32 *info; //定义PROCESSENTRY32结构字指
info=new PROCESSENTRY32;
info->dwSize=sizeof(PROCESSENTRY32);
Process32First(handle,info); //从快照中获取进程列表
while(Process32Next(handle,info) != FALSE)//重复调用 Process32Next
{
info->szExeFile; //指向进程名字
if( m_edit == info->szExeFile )
{
handle1=OpenProcess(PROCESS_TERMINATE,FALSE,info->th32ProcessID);
TerminateProcess(handle1,0); //结束进程
}
}
CloseHandle(handle); CDialog::OnOK();
}BOOL CGgdDlg::EnablePriv()
{
HANDLE hToken;
if ( OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken) )
{
TOKEN_PRIVILEGES tkp;
LookupPrivilegeValue( NULL,SE_DEBUG_NAME,&tkp.Privileges[0].Luid ); //修改进程权限
tkp.PrivilegeCount=1;
tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges( hToken,FALSE,&tkp,sizeof tkp,NULL,NULL ); //通知系统修改进程权限
return( (GetLastError()==ERROR_SUCCESS) );
}
else
return FALSE;
}这样的代码只能结束 普通用户组 的进程,象记事本,cmd.exe等
我该如何让它可以结束 system 组的进程呢?
谢谢回答^_^
我用的主要代码如下:
void CGgdDlg::OnOK()
{
UpdateData(TRUE); //获取用户输入的要结束的进程名字 HANDLE handle; //定义CreateToolhelp32Snapshot系统快照句柄
HANDLE handle1; //定义要结束进程句柄
EnablePriv(); //提升本进程权限
handle=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//获得系统快照句柄
PROCESSENTRY32 *info; //定义PROCESSENTRY32结构字指
info=new PROCESSENTRY32;
info->dwSize=sizeof(PROCESSENTRY32);
Process32First(handle,info); //从快照中获取进程列表
while(Process32Next(handle,info) != FALSE)//重复调用 Process32Next
{
info->szExeFile; //指向进程名字
if( m_edit == info->szExeFile )
{
handle1=OpenProcess(PROCESS_TERMINATE,FALSE,info->th32ProcessID);
TerminateProcess(handle1,0); //结束进程
}
}
CloseHandle(handle); CDialog::OnOK();
}BOOL CGgdDlg::EnablePriv()
{
HANDLE hToken;
if ( OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken) )
{
TOKEN_PRIVILEGES tkp;
LookupPrivilegeValue( NULL,SE_DEBUG_NAME,&tkp.Privileges[0].Luid ); //修改进程权限
tkp.PrivilegeCount=1;
tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges( hToken,FALSE,&tkp,sizeof tkp,NULL,NULL ); //通知系统修改进程权限
return( (GetLastError()==ERROR_SUCCESS) );
}
else
return FALSE;
}这样的代码只能结束 普通用户组 的进程,象记事本,cmd.exe等
我该如何让它可以结束 system 组的进程呢?
谢谢回答^_^
解决方案 »
- OnCommand函数问题
- strncpy和strncpy_s都老出错
- aoti()函数的一个小小疑问
- 怎么在打开的对话框中获得视图指针?
- 请问如何实现才程序启动时等待画面的制作?
- 在DLL中创建对话框,造成泄漏
- 谁有Visual Assist 6 注册版? 谁有VC6英文ISO原版?
- 我是新手,请问如何把十六进制字符串转换为二进制的字节数组?
- 快速格式化C盘的批命令怎么写?不回显确认提示,在要求确认时自动输入Y .
- 创建线程时出错! 求救!求救!求救!
- opengl中宽线的问题
- Xtreme ToolkitPro v12.0.0\Samples\DockingPane\DockingContainers 修改标题栏
用AdjustTokenPrivileges來獲取盡可能大的特權 也就是對SE_XXX都嘗試一遍Enable 甚至操作結果也可以忽略 反正最終結果要麽就是能打開進程句柄要麽不能
或者把你的代碼放在服務中(註冊為用LocalSystem賬戶啓動)
pid=0那个进程其实系统页面清零线程,属内核线程,不算是进程.
pid=4那个是其它系统线程的集合,属于内核线程,没有进程对应.只是windows把他们看成是进程.如果真的结束掉,那系统就不存在了.