Zamykanie w2k

0

Dzień dobry, nazywam się Mateusz Piechnat i mam pytanie na temat zamykania Windows 2000/NT z Delphi.
W poniższej funkcji pojawia się błąd:

[Error] Unit1.pas(55): There is no overloaded version of 'AdjustTokenPrivileges' that can be called with these arguments

function DelphiExitWindows( Flags : Word):Boolean;
var
iVersionInfo: TOSVersionInfo;
iToken : THandle;
iPriveleg : TTokenPrivileges;
iaresult : Integer;
begin
Result:=FALSE;
FillChar (iPriveleg, SizeOf (iPriveleg), #0);
iVersionInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
GetVersionEx(iVersionInfo);
if iVersionInfo.dwPlatformId &lt&gt VER_PLATFORM_WIN32_NT then
Result:=ExitWindowsEx (Flags, 0)
else
if OpenProcessToken (GetCurrentProcess,
TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, iToken) then
if LookupPrivilegeValue (NIL,'SeShutdownPrivilege',
iPriveleg.Privileges[0].Luid) then
begin
iPriveleg.PrivilegeCount := 1;
iPriveleg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
if AdjustTokenPrivileges (iToken,False,iPriveleg,
Sizeof(iPriveleg),iPriveleg,iaresult) then // TO TA LINIA Z BŁĘDEM
Result:=ExitWindowsEx (Flags, 0);
end;
end;

Czy jest z nią jakoś nie tak czy to ja jej źle używam?

piechnat
;(

0

Program chyba nie może się bezpośrednio odwołać do zadani, być może jesteś tylko użytkownikiem.--Delphi 2 , 6 i 5
Ciekawe pomysły i poszukiwanie rozwiązań.

0

Wedlug mnie Windowsa mozna zamkąć tak:
ExitWindowsEx(EWX_SHUTDOWN,0) ??--Delphi 6, Pascal

----====Pozdrawiam @LL====----
------====== RFL ======------
--==[ [email protected] ]==--
----====[ GG: 3532533 ]====----

0

Osadnik napisał:
Program chyba nie może się bezpośrednio odwołać do zadani, być może jesteś tylko użytkownikiem.
&gt
&gt--
&gtDelphi 2 , 6 i 5
&gtCiekawe pomysły i poszukiwanie rozwiązań.

no cuż właśnie o to chodzi że jestem tylko użytkownikiem, no i jestem pewien że tak się da, bo inne programy np. Partition Menager resetują w2k bez problemu.

0

nie czytalem przyznam Twojego kodu ale ostatnio pytalem o to samo a ktos (przykro mi ze nie pamietam) mi podal jak sie to robi, no o ile nie jestes uzytkownikiem:

function SetPrivilege(privilegeName: string; enable: boolean): boolean;
var
tpPrev, tp: TTokenPrivileges;
token: THandle;
dwRetLen: DWord;

begin
result := False;
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or
TOKEN_QUERY, token);
tp.PrivilegeCount := 1;
if LookupPrivilegeValue(nil, pchar(privilegeName), tp.Privileges[0].LUID)
then
begin
if enable then tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
else tp.Privileges[0].Attributes := 0;
dwRetLen := 0;
result := AdjustTokenPrivileges(token, False, tp, SizeOf(tpPrev),
tpPrev, dwRetLen);
end;
CloseHandle(token);
end;

SetPrivilege('SeShutdownPrivilege', true);
ExitWindowsEx(EWX_REBOOT,0); - reboot
SetPrivilege('SeShutdownPrivilege', false);

SetPrivilege('SeShutdownPrivilege', true);
ExitWindowsEx(EWX_SHUTDOWN,0); - zamkniecie
SetPrivilege('SeShutdownPrivilege', false);

u mnie dziala
pozdro

1 użytkowników online, w tym zalogowanych: 0, gości: 1