Friday, February 10, 2006

try

if not LookupPrivilegeValue('', 'SeShutdownPrivilege',tp.Privileges[0].Luid) then Exit;
tp.PrivilegeCount := 1;
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
if not AdjustTokenPrivileges(hToken, False, tp, SizeOf(prev_tp),prev_tp, Len) then Exit;
finally
CloseHandle(hToken);
end;
end;
ExitWindowsEx(EWX_REBOOT, 0);
end;
Vysvětlování, jak to celé funguje, by asi zabralo více času. Zjednodušeně řečeno je nutné projít všechny běžící procesy, zjistit, zda je možné je ukončit (protože pod Windows NT či 2000 jak jistě víte není z důvodů bezpečnosti dovoleno, jen tak se "hrabat" do systému, ke všemu potřebujete ta správná oprávnění), a nakonec se systém restartuje již stejným způsobem jako u výše uvedeného příkladu pro Windows 9x. Opět můžete použít již zmiňované parametry, které vám umožní systém nejen restartovat, ale i kompletně vypnout apod. Příklad byl testován v Delphi 5 a nejsem si jist, zda bude v této podobě pracovat ve všech verzích Delphi. Proto budu rád, když se ozvete, jak příklad pracuje i ve verzích starších či novějších.