Hallo!
Wie manche vielleicht schon von meinem anderen Beitrag wissen, versuche ich gerade mein erstes Shutdown-Programm zu schreiben.
Ich will die Idee von folgender Seite übernehmen:
Link
Leider klappt die Umsetzung bei mir gar nicht
Hier mein Programm (soll erst später grafisch werden):
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
function 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
// Windows NT
// Achtung bei Delphi 2 muß @hToken stehen ...
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);
result := ExitWindowsEx(Aflag, 0);
end;
end
else
begin // Windows 95
Result := ExitWindowsEx(Aflag, 0);
end;
end;
end;
begin
{ TODO -oUser -cConsole Main : Hier Code einfügen }
end.
Hier meine Fehlerliste:
Zitat:
[Pascal Fehler] Project1.dpr(10): E2003 Undefinierter Bezeichner: 'TOSVersionInfo'
[Pascal Fehler] Project1.dpr(12): E2003 Undefinierter Bezeichner: 'TTokenPrivileges'
[Pascal Fehler] Project1.dpr(13): E2003 Undefinierter Bezeichner: 'DWord'
[Pascal Fehler] Project1.dpr(17): E2066 Operator oder Semikolon fehlt
[Pascal Fehler] Project1.dpr(19): E2003 Undefinierter Bezeichner: 'GetVersionEx'
[Pascal Fehler] Project1.dpr(21): E2029 'THEN' erwartet, aber Bezeichner 'dwPlatformId' gefunden
[Pascal Fehler] Project1.dpr(25): E2003 Undefinierter Bezeichner: 'OpenProcessToken'
[Pascal Fehler] Project1.dpr(25): E2003 Undefinierter Bezeichner: 'GetCurrentProcess'
[Pascal Fehler] Project1.dpr(25): E2003 Undefinierter Bezeichner: 'TOKEN_ADJUST_PRIVILEGES'
[Pascal Fehler] Project1.dpr(27): E2003 Undefinierter Bezeichner: 'LookupPrivilegeValue'
[Pascal Fehler] Project1.dpr(27): E2066 Operator oder Semikolon fehlt
[Pascal Fehler] Project1.dpr(27): E2066 Operator oder Semikolon fehlt
[Pascal Fehler] Project1.dpr(38): E2003 Undefinierter Bezeichner: 'ExitWindowsEx'
[Pascal Fehler] Project1.dpr(41): E2029 '.' erwartet, aber ';' gefunden
Mein zweites Problem ist, dass ich nicht weiß, wie ich die Funktion in Hauptprogramm aufrufen kann.
Wo und wie muss ich den Parameter Flag EWX_Shutdown setzen?
Vielen vielen Dank für eure Hilfe