svět, kde se rodí nová budoucnost   
 
Delphi headDelphi Tips

Log off, shut down, restart, or reboot windows

 
function SetPrivilege(
  sPrivilegeName :
string;
  bEnabled : 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( sPrivilegeName ),
        TP.Privileges[
0].LUID ) )then
  begin
    if
( bEnabled )then
    begin
     
TP.Privileges[0].Attributes  :=
        SE_PRIVILEGE_ENABLED;
   
end else
    begin
     
TP.Privileges[0].Attributes  :=
       
0;
   
end;

    dwRetLen :=
0;
    Result := AdjustTokenPrivileges(
                Token,
                False,
                TP,
                SizeOf( TPPrev ),
                TPPrev,
                dwRetLen );
 
end;

  CloseHandle( Token );
end;

 

// iFlags:
//
//  one of the following must be specified
//
//   EWX_LOGOFF
//   EWX_REBOOT
//   EWX_SHUTDOWN
//
//  following attributes may be
//  combined with above flags
//
//   EWX_POWEROFF
//   EWX_FORCE    : terminate processes


function WinExit( iFlags : integer ) : boolean;
begin
 
Result := True;
 
if( SetPrivilege('SeShutdownPrivilege', True )) then
  begin
    if
( not ExitWindowsEx( iFlags, 0 ))then
    begin
     
// handle errors...
     
Result := False;
   
end;
    SetPrivilege(
'SeShutdownPrivilege', False );
 
end else
  begin
   
// handle errors...
   
Result := False;
 
end;
end;

Back to Index of Tips

 

 

Send mail to radek.novak@infojet.cz with questions or comments about this web site.
Copyright © 1999-2002 Infojet.cz
Last modified: 26.07.2002