Schon mal Gedanken über den leeren
else-Block gemacht?
Delphi-Quellcode:
procedure GetPrivileges;
//Rechte um runterzufahren holen.
var
vi : TOSVersionInfo;
hToken : THandle;
tp : TTokenPrivileges;
h : DWord;
begin
vi.dwOSVersionInfoSize := SizeOf(vi);
GetVersionEx(vi);
if vi.dwPlatformId = VER_PLATFORM_WIN32_NT
then // Windows NT
begin
// Achtung bei Delphi 2 muß @hToken stehen ... !!!! ?????
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, hToken);
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);
end
else // Windows 95
begin
end;
end;
Ich komme nicht umhin zu glauben, dass du das irgendwo zusammenkopiert hast. Denn diesen Kommentar:
Zitat:
// Achtung bei Delphi 2 muß @hToken stehen ... !!!! ?????
Sieht man uch überall.
Ich habe noch diesen Code auf der Paltte rumfliegen:
Delphi-Quellcode:
function ExitWin(flag: word): Boolean;
var
vi : TOSVersionInfo;
hToken : THandle;
tp : TTokenPrivileges;
h : DWord;
begin
vi.dwOSVersionInfoSize := SizeOf(vi);
GetVersionEx(vi);
if vi.dwPlatformId = VER_PLATFORM_WIN32_NT
then // Windows NT
begin
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, hToken);
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);
result := ExitWindowsEx(flag, 0);
end
else // Windows 95
begin
Result := ExitWindowsEx(flag, 0);
end;
end;
Den könnte man bestimmt auch noch verbessern.