Program je prajednoduchý:
function ShutDown (const Computer, Msg: string; const Time: Word; const Force, Reboot: Boolean): Boolean;
var rl: Cardinal; hToken: Cardinal; tkp: TOKEN_PRIVILEGES;
begin
if not OpenProcessToken (GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
ShowMessage ('Nejde otevřít Token procesu.')
else begin
if LookupPrivilegeValue (nil, 'SeShutdownPrivilege', tkp.Privileges [0].Luid) then begin
tkp.Privileges [0].Attributes := SE_PRIVILEGE_ENABLED;
tkp.PrivilegeCount := 1;
AdjustTokenPrivileges (hToken, False, tkp, 0, nil, rl);
if GetLastError () <> ERROR_SUCCESS then ShowMessage ('Nepodařilo se nastavit privilegia.') end
else begin
ShowMessage('Nenalezana privilegia k ShutDown.');
end
end;
Result := InitiateSystemShutdown (PChar (Computer), PChar(Msg), Time, Force, Reboot);
end;
Admin práva jsou, jestliže jsi přihlášen jako Administrator nebo člen skupiny Administrators. Kdybys na vzdálené vypnutí počítače neměl právo, bude program řvát jinak (Nenalezana privilegia k ShutDown). Zde selhala přímo funkce na vzdálené vypnutí InitiateSystemShutdown. Možné příčiny: Neznámé jméno počítače nebo neběží nějaká služba - můžou to být: Oznamování systémových událostí, Správce vzdáleného přístupu, Systém událostí modelu COM+, Terminálová služba a Vzdálené volání procedur (RPC).