So, habs nun denke ich geschafft, laufen tut's aber ob es so richtig ist, weiss ich nicht:
Delphi-Quellcode:
uses
jwaNative;
{$R *.dfm}
function TForm1.ExWindows(
const AFlag: Word): Boolean;
var
vi: TOSVersionInfo;
hToken: THandle;
tp: TTokenPrivileges;
h: DWord;
begin
Result:=False;
vi.dwOSVersionInfoSize:=SizeOf(vi);
If GetVersionEx(vi)
then
begin
If vi.dwPlatformId = VER_PLATFORM_WIN32_NT
then
begin
If OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, hToken)
then
begin
LookupPrivilegeValue(
nil, '
SeShutdownPrivilege',
tp.Privileges[0].Luid);
tp.PrivilegeCount:=1;
tp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
h:=0;
AdjustTokenPrivileges(hToken, False,
tp, 0, PTokenPrivileges(
nil)^, h);
CloseHandle(hToken);
//Hier nun der besondere Teil
NtShutdownSystem(SHUTDOWNNOREBOOT);
end;
end
Else Result:=ExitWindowsEx(Aflag, 0);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ExWindows(EWX_SHUTDOWN
or EWX_FORCE);
end;
end.
Gruß
Mazel