ExitWindowsEx

Hier könnt ihr sowohl zur x86 Architektur als auch zu Win32ASM Fragen stellen.

Moderatoren: crack, Marwin, Krüsty

Antworten
TRiPLEX
Member
Beiträge: 16
Registriert: Mittwoch 31. März 2004, 20:42
Kontaktdaten:

Beitrag von TRiPLEX » Mittwoch 31. März 2004, 20:48

Tjoa, ich hab da n Problem: ich bin noch ein echter ASM - Coding "Neuling"
und folgende Zeile funktioniert einfach nicht: "invoke ExitWindowsEx, 1, 0"!! :blink:
"invoke ExitWindowsEx, 0, 0" funktioniert, "invoke ExitWindowsEx, 1, 0" und
"invoke ExitWindowsEx, 2, 0" nicht!! :blink:
Was kann ich tun??

CDW
Alter Hase
Beiträge: 62
Registriert: Donnerstag 2. Oktober 2003, 17:17
Kontaktdaten:

Beitrag von CDW » Mittwoch 31. März 2004, 23:03

hm, wahrscheinlihc hast du XP/2000 und wunderst dich warum man nicht herunterfahren kann ;) ... das ist leider bei NT Systemen nicht so einfach,
wenn man die Doku durchliest, dann steht da dass der Process erstmal die Rechte dafür erringen muss...
ich habs vor ein paar Jahren mal gemacht (einen MS beispielcode von C nach asm übersetzt):
http://www.cdw.de.vu/Tutorial1.zip
das wichtigste ist:

Code: Alles auswählen

       LOCAL tkp:TOKEN_PRIVILEGES
       LOCAL hToken: HANDLE       
        call GetCurrentProcess  ;das bracuchen wir jetzt für NT/2000/XP
        mov dwCurrentProcess,eax;die Process ID
  
  lea eax,hToken              ;hToken adresse ins eax laden
  push eax                    ; argument auf Stack
  push 28h ; TOKEN_ADJUST_PRIVILEGES(0x0020) xor TOKEN_QUERY(0x008)=28 => siehe WINNT.h      
        push dwCurrentProcess           ; unsere ProcessID
        call OpenProcessToken                         
        
        lea eax,tkp.Privileges[0].Luid 
        push eax 
        push offset shutdown            ; wir wollen einen shutdown machen <=shutdown ist ein string "SeShutdownPrivilege"
        push 0
        call LookupPrivilegeValue       ;und wir kriegen die doch 
                                ;wer es hier nicht so ganz durchblickt, sollte
                                ;in die winAPIdoku schauen...z.b MSDN
              
        
        mov tkp.PrivilegeCount,1   
        mov tkp.Privileges[0].Attributes,SE_PRIVILEGE_ENABLED;enable dies! (wenn der benutzer keine Berechtigung dazu hat
                                                                             ; wird trotzdem nix daraus!
        push 0
        push 0
        push 0
        lea eax,tkp
        push eax 
        push 0;False
        push hToken
        
        call AdjustTokenPrivileges 
       
        
        push 0;wird nicht beachtet, da noch reserviert
        push dwParam1; unseren Parameter
        call ExitWindowsEx                           
        
wobei ich inzwichen einen komplett anderen Programmierstil drauf habe, aber egal ;)

TRiPLEX
Member
Beiträge: 16
Registriert: Mittwoch 31. März 2004, 20:42
Kontaktdaten:

Beitrag von TRiPLEX » Donnerstag 1. April 2004, 18:07

Joa, großes Danke an CDW!! :)
Das Problem ist behoben, s lag also doch an WinXP.
DANKE!!

Antworten