Avatar billede fartzzz Nybegynder
01. marts 2001 - 14:50 Der er 6 kommentarer og
1 løsning

AdjustTokenPrivileges!?!

Hej!
Jeg kunne godt tænke mig et vide hvordan man rebooter i et Borland C++ builder program..

Indtil videre har jeg fundet ud af følgene:

ExitWindowsEx(EWX_REBOOT, EWX_FORCEIFHUNG);

Men da jeg sidder på en Win2000, står der jeg skal AdjustTokenPrivileges.. Hvordan gør jeg det.
Har kigget og kigget i Win32 SDK, men forgæves. :o(
Kan simpelthen ikke finde ud af \"handle\" osv.

Fartzzz
Avatar billede borrisholt Novice
01. marts 2001 - 14:54 #1
Jeg har ikke lige en C Builder he .. men jeg har noget Delphi kode der kan tricket for dig :

function ExitWIndows( iFlags : integer ) : boolean;

  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
        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;

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;


Som parameter giver du den bare en af de flag som står beskrevet i hjælpen unde ExitWindowsEx

Jens B
Avatar billede fartzzz Nybegynder
01. marts 2001 - 15:10 #2
UHH.. Det ser godt nok komplekst ud!
Øhh, kan det ikke lade sig gøre at \"bare\" lave det i en simpel linie? Jeg behøves ikke at vide om brugeren har sat \"hak\" ved fanebladet.

Sorry, men jeg kan ikke rigtigt følge med.. Det her er ikke min stærke side ;o)

Fartzzz
Avatar billede borrisholt Novice
01. marts 2001 - 15:14 #3
du kalder bare 
  ExitWIndows( EXW_REBOOT );

Nemmer kan det da ikke blive ?

Jens B
Avatar billede fartzzz Nybegynder
01. marts 2001 - 15:36 #4
Nope. Men jeg kunne godt tænke mig at undgå funktionen.
Helst så simpelt som muligt.

Jeg kunne godt bare tænke mig at vide hvordan man definér hvert \"felt\" i:
AdjustTokenPrivileges( Token, False,TP, SizeOf( TPPrev ), TPPrev, dwRetLen );
Det er ligemeget om det kun virker til en der har slået fanen til eller omvendt.. (Hvis det ka\' lade sig gøre)   

Fartzzz
Avatar billede borrisholt Novice
01. marts 2001 - 15:39 #5
Du kan ikke undgå funktionen .... du er nødtil først at sætte din token før du forsøger at ligge windows ned så derfor de to funktioner .. Pak dem ind i en unit for sig selv. Så har du den enkle linje du efterlyser ....

Jens B
Avatar billede fartzzz Nybegynder
01. marts 2001 - 15:41 #6
Ok.. Prøver lige at bakse med det ;o)

Fartzzz
Avatar billede fartzzz Nybegynder
01. marts 2001 - 19:00 #7
PUHAA.. Takker for hjælpen!
Efter ha\' GENNEMLÆST din funktion samtidig med en masse TXT-hjælp virker det! :o)
Tak for hjælpen! ;o)

Fartzzz
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester