強制關閉任何程式

Post date: 2012/8/9 上午 07:08:11

跟據瞭解

Windows的工作管理員並沒有取得最高權限來關閉程式

導致有些系統程序無法被關閉

Windows的工作管理遠只有取得SeShutdownPrivilege

並不像此範例 取得了更強的SeDebugPrivilege

以下的程式碼(C/C++)

可以強制關閉99%的程式(前提是取得SeDebugPrivilege的過程要成功)

費話不多說

以下是原始碼 (來源是MSDN, 我做了一些修改):

bool terminateProcess(unsigned int PID)

{

//取得除錯權限

HANDLE hProcess;

HANDLE hToken;

if(!OpenThreadToken(GetCurrentThread(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, FALSE, &hToken))

{

if (GetLastError() == ERROR_NO_TOKEN)

{

if (!ImpersonateSelf(SecurityImpersonation))

{

return false;

}

if(!OpenThreadToken(GetCurrentThread(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, FALSE, &hToken))

{

return false;

}

}

else

{

return false;

}

}

//開啟SeDebugPrivilege

TOKEN_PRIVILEGES tp = { 0 };

LUID luid;

DWORD cb = sizeof(TOKEN_PRIVILEGES);

if(!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid))

{

CloseHandle(hToken);

return false;

}

tp.PrivilegeCount = 1;

tp.Privileges[0].Luid = luid;

tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

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

if (GetLastError() != ERROR_SUCCESS)

{

//無法取得SeDebugPrivilege

CloseHandle(hToken);

return false;

}

//開啟程序

if((hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID)) == NULL)

{

//無法開啟程序 ... 程序不存在?!

CloseHandle(hToken);

return false;

}

if(!TerminateProcess(hProcess, 0xffffffff))

{

//無法關閉程序?!(遇到那1%了)

CloseHandle(hToken);

CloseHandle(hProcess);

return false;

}

CloseHandle(hToken);

CloseHandle(hProcess);

//成功

return true;

}

這函數只接受一個參數 ... PID .. 也就是 Process ID

返回true代表成功

false代表失敗

你可以用這段程式碼來關關看一些系統程序

但是我建議你別關 csrss.exe

因為你一旦關了他 他會送給你BSOD .....