So, sieht gut aus.
Jetzt funktioniert es ohne Zugriffsverletzung,...
Jetzt bekomme ich bei dem
Api Call "RegGetKeySecurity" nur noch ERROR_ACCESS_DENIED (00000005) zurück.
Sehr seltsam, sogar unter Systemrechten.
Warum ich das in
ASM mach?
Gibt eigentlich keinen besonderen Grund, ich programmiere einfach gerne in
ASM. Wenn ich ehrlich bin kann ich schon gar kein Delphi mehr. ;P
Delphi-Quellcode:
.data
lpSubKey
db "SOFTWARE\Google",0
phkResult dd 0
.data?
pSecurityDescriptor SECURITY_DESCRIPTOR <>
buffer_addr dd ?
buffer_size dd ?
.code
start:
xor eax,eax
nop
nop
push offset phkResult
push KEY_ALL_ACCESS
push 0
push offset lpSubKey
push HKEY_CURRENT_USER
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
mov eax,sizeof buffer_addr
mov buffer_size,eax
nop
nop
xor eax,eax
nop
nop
push offset buffer_size
push offset buffer_addr
push DACL_SECURITY_INFORMATION
push offset phkResult
call RegGetKeySecurity
nop
cmp eax,ERROR_SUCCESS
jne @_Error
@_CleanUp:
nop
push phkResult
call RegCloseKey
nop
nop
push offset buffer_addr
call GlobalFree
nop
@_ExitProcess:
push 0
call ExitProcess
@_Error:
push 0
push 0
push 0
push 0
Call MessageBox
jmp @_CleanUp
end start