Ich schreibe kleine Anwendung in MASM64 (ML64.exe). Eine der Funktionen ist das Festlegen von Werten in der Registrierung. Ich habe mit dem Öffnen des Schlüssels begonnen, aber es ist ein Fehler aufgetreten.RegOpenKeyEx gibt Fehler 87 in MASM64 zurück
Funktion RegOpenKeyEx gibt Fehler 87 zurück und GetLastError gibt 0x36B7 zurück.
Mein Code:
extrn ExitProcess : proc
extrn MessageBoxA : proc
extrn RegOpenKeyExA : proc
extrn RegSetValueExA : proc
extrn RegCloseKey : proc
extrn GetLastError : proc
.const
HKEY_CURRENT_USER equ 80000001h
KEY_SET_VALUE equ 2
KEY_CREATE_SUB_KEY equ 4
KEY_WOW64_64KEY equ 0100h
KEY_WRITE equ 00020006h
REG_SZ equ 00000001h
.data
hReg dq 0
szRegKeyName db "Software\Microsoft\Windows\CurrentVersion\Run",0
.code
Main proc
sub rsp, 30h
lea rax, hReg
push rax
mov r9, KEY_SET_VALUE+KEY_CREATE_SUB_KEY+KEY_WOW64_64KEY
mov r8, 0
lea rdx, szRegKeyName
mov rcx, HKEY_CURRENT_USER
call RegOpenKeyExA ;returns 87
call GetLastError ;returns 0x36B7
add rsp, 30h
xor rcx, rcx
call ExitProcess
Main endp
end
Bitte helfen Sie mir. Vielen Dank im Voraus für Ihre Hilfe.
Sie verwenden das x64 abi nicht korrekt, Sie können den Schattenraum nicht ignorieren. Schreiben Sie diesen Code zuerst in C und sehen Sie sich den Maschinencode an, den der Compiler generiert. –
Abgesehen davon ist es sinnlos, GetLastError aufzurufen. Der Rückgabewert ist der Fehlercode. Lesen Sie die Dokumentation. –
@HansPassant So, wie man diesen Code repariert? Weißt du was falsch ist? – Dave