也就区区41 行。(注意:运行后后果自负,且不是用Release的)```cpp
#include <Windows.h>
BOOL SetPrivilege(LPCSTR lpPrivilegeName, WINBOOL fEnable){
HANDLE hToken;
TOKEN_PRIVILEGES NewState;
LUID luidPrivilegeLUID;
if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)){
return FALSE; }
if(fEnable == FALSE){
if(!AdjustTokenPrivileges(hToken, TRUE, NULL, NULL, NULL, NULL)){
return FALSE;}
else return TRUE;}
LookupPrivilegeValue(NULL, lpPrivilegeName, &luidPrivilegeLUID);
NewState.PrivilegeCount = 1;
NewState.Privileges[0].Luid = luidPrivilegeLUID;
NewState.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if(!AdjustTokenPrivileges(hToken, FALSE, &NewState, NULL, NULL, NULL)){
return FALSE;
}
if (GetLastError() == ERROR_NOT_ALL_ASSIGNED)
{
return FALSE;
}
return TRUE;
}
typedef enum _HARDERROR_RESPONSE_OPTION {
OptionAbortRetryIgnore,
OptionOk,
OptionOkCancel,
OptionRetryCancel,
OptionYesNo,
} UNICODE_STRING;
int main(int argc, char* argv[])
{
FreeConsole();
UNICODE_STRING str = {8, 10, L"test"};
ULONG x, args[] = {0x12345678, 0x87654321, (ULONG)&str};
HMODULE hDll = GetModuleHandle(TEXT("ntdll.dll"));
type_ZwRaiseHardError ZwRaiseHardError = (type_ZwRaiseHardError)GetProcAddress(hDll, "ZwRaiseHardError");
bool bSuccess = SetPrivilege(SE_SHUTDOWN_NAME, TRUE);
if(bSuccess) ZwRaiseHardError(0xC000021A, 3, 4, args, OptionShutdownSystem, &x);
SetPrivilege(NULL, FALSE);
return 0;
}