今日手搓一个小蓝屏(c++)
  • 板块灌水区
  • 楼主LJY21
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/10/2 23:11
  • 上次更新2024/10/3 07:40:00
查看原帖
今日手搓一个小蓝屏(c++)
1405985
LJY21楼主2024/10/2 23:11

也就区区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;
}
2024/10/2 23:11
加载中...