Einzelnen Beitrag anzeigen

Benutzerbild von CoRe.eXtreem
CoRe.eXtreem

Registriert seit: 30. Nov 2003
61 Beiträge
 
Delphi 2005 Personal
 
#12

Re: RegGetKeySecurity

  Alt 7. Nov 2008, 13:19
So, jetzt habe ich den code mal überarbeitet.
Ich initialisierte den "SecurityDescriptor" und prüfe diesen zum Schluss mit "IsValidSecurityDescriptor".
EAX gibt mir als wert EAX = 00000001 zurück. Alles super, d.h. der initialisierte SecurityDescriptor ist Gültig.

Kann jedoch mit dem API call "RegGetKeySecurity2 noch immer nicht die DACL in den SecurityDescriptor zurück geben lassen. Zugriffsverletzung. Könnte heulen.

Habe ich vieleicht irgendwas übersehen? Mir fliegen bald die raus....


Delphi-Quellcode:
    .data
   lpSubKey         db   "SOFTWARE\Classes\.7z\2",0
   phkResult          dd   0

    .data?
   pSecurityDescriptor      SECURITY_DESCRIPTOR <>
   buffer_addr         dd   ?

    .code
    
start:
   xor   eax,eax
   nop

   nop
   push   offset phkResult
   push   KEY_ALL_ACCESS
   push   0
   push   offset lpSubKey
   push   HKEY_LOCAL_MACHINE
   call   RegOpenKeyEx            ; EAX must zero
   nop

   nop
   xor   eax,eax
   nop

   nop
   push   SECURITY_DESCRIPTOR_MIN_LENGTH
   push   GPTR
   call   GlobalAlloc            ; EAX must nonzero
   nop                  ; EAX = (new object handle)

   nop   
   mov   buffer_addr,eax
   nop

   nop
   xor   eax,eax
   nop

   nop
   push   SECURITY_DESCRIPTOR_REVISION
   push   offset buffer_addr
   call   InitializeSecurityDescriptor      ; EAX must nonzero
   nop

   nop
   xor   eax,eax
   nop

   nop
   push   offset buffer_addr
   call   IsValidSecurityDescriptor      ; EAX must nonzero
   nop                  ; EAX = 00000001

   nop
   xor   eax,eax
   nop

   nop
   push   sizeof buffer_addr
   push   offset buffer_addr
   push   DACL_SECURITY_INFORMATION
   push   offset phkResult
   call   RegGetKeySecurity
   nop

   nop
   push   phkResult
   call   RegCloseKey
   nop

   nop
   push   offset buffer_addr
   call   GlobalFree
   nop

   @_ExitProcess:
   push   0
   call   ExitProcess

end start
Zugriffsverletzung:

Delphi-Quellcode:
EAX 00000004
ECX 00403017 RegAth.00403017
EDX 00000000
EBX 00000000
ESP 0012FF14
EBP 0012FF74
ESI 02000000
EDI 00000000
EIP 761BC7FD advapi32.761BC7FD
C 0 ES 0023 32bit 0(FFFFFFFF)
P 0 CS 001B 32bit 0(FFFFFFFF)
A 0 SS 0023 32bit 0(FFFFFFFF)
Z 0 DS 0023 32bit 0(FFFFFFFF)
S 0 FS 003B 32bit 7FFDE000(FFF)
T 0 GS 0000 NULL
D 0
O 0 LastErr ERROR_SUCCESS (00000000)
EFL 00010202 (NO,NB,NE,A,NS,PO,GE,G)
ST0 empty 0.0
ST1 empty 0.0
ST2 empty 0.0
ST3 empty 0.0
ST4 empty 0.0
ST5 empty 0.0
ST6 empty 0.0
ST7 empty 0.0
               3 2 1 0 E S P U O Z D I
FST 0000 Cond 0 0 0 0 Err 0 0 0 0 0 0 0 0 (GT)
FCW 027F Prec NEAR,53 Mask 1 1 1 1 1 1
  Mit Zitat antworten Zitat