ExitWindowsEx

0

Witam

Mam problem z funkcja ExitWindowsEx a mianowicie chce wymusic na kompie majac prawa administratora zamkniecie systemu metoda force:

if( ! ExitWindowsEx( EWX_POWEROFF | EWX_FORCE, 0) )
{
ShowMessage( GetLastError() );
}

Komunikat bledujaki otrzymuje to: 1314 co w tlumaczeniu oznacza:

1314L ERROR_PRIVILEGE_NOT_HELD

Czemu nie mam tego "przywileju" skoro jestem admianem. Jak wymusic zamkniecie systemu ?

0

Trzeba uŻyć takiej funkcji (ściągnąłem ją z 4programmers, ale nie moge teraz tego znaleŹć)

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;

i wywołaj ją przed ExitWindowEx

SetPrivilege('SeShutdownPrivilege', true);

Mam nadzieję, że zadziała
Pozdrawiam

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