使用API函数TerminateProcess()结束一个指定PID进程的时候发现如下问题:
当程序以Administrator身份执行时,不能够结束以SYSTEM用户运行的进程,比如某些后台服务。
但是Administrator身份使用任务管理器却可以结束这些进程。
诸位DX能不能给个提示,能不能让进程在运行中切换用户至SYSTEM呢?或者有什么别的办法可以成功结束那些以SYSTEM身份运行的进程?
小弟使用的是C ,非C++ 

解决方案 »

  1.   

    BOOL SetPrivilege() //本函数用于提升权限,提升到SE_DEBUG_NAME

    TOKEN_PRIVILEGES tkp; 
    HANDLE hToken; 
    if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken)) //打开当前进程失败 
    return FALSE; 
    LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tkp.Privileges[0].Luid); //查看当前权限
    tkp.PrivilegeCount = 1; 
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
    AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0); //调整权限,如上设置
    return TRUE; 
    }
      

  2.   

    我尝试了jacklzw88提供的 SetPrivilege() 函数,还是结束不了。
    我记得好像以Administrator身份执行的进程本身就有debug权限的吧?
    我要结束的是进程是瑞星杀毒的后台服务进程To: LookSail
    是不是写成服务程序以后就可以结束它了?
    我可从来没写过服务呢~看来又要学习了:)