come al solito, mi sono arrangiato da solo.
codice:
program InstantShutdown;
{$APPTYPE CONSOLE}
uses
Windows;
const
SE_SHUTDOWN_PRIVILEGE = 19;
SH_SHUTDOWN = 0;
SH_RESTART = 1;
SH_POWEROFF = 2;
function NtShutdownSystem(
Action : DWORD
): DWORD; stdcall; external 'ntdll';
function RtlAdjustPrivilege(
Privilege : ULONG;
Enable : LONGBOOL;
CurrentThread : LONGBOOL;
Enabled : PBOOLEAN
): DWORD; stdcall; external 'ntdll';
var b : boolean;
begin
RtlAdjustPrivilege(SE_SHUTDOWN_PRIVILEGE, true, false, @b);
NtShutdownSystem(SH_SHUTDOWN);
end.
ho cambiato la dichiarazione di RtlAdjustPrivilege dove c'era BOOLEAN ho messo LONGBOOL ed ho aggiunto la variabile b che prende il valore true se l'operazione ha avuto successo.