Программно читаю данные из SOFTWARE\Microsoft\Windows NT\CurrentVersion, а именно ключ DigitalProductId, всё работает нормально на 32 битных виндах, а вот на 7 x64 - RegQueryValueEx возвращает ошибку, хотя GetLastError говорит - Операция успешно завершена. В чем может быть проблема?
телепаты есть здесь, как ты думаешь? какой код ошибки возвращает RegQueryValueEx? GetLastError не при делах, функция сама возвращает код ошибки... хотя можно испытать свои силы в телепатии: код ошибки ERROR_MORE_DATA?)))
Код (Text): format PE64 GUI 5.0 entry Main include 'win64a.inc' CSIDL_ADMINTOOLS = 0030 section '.data' data readable writeable start_data: szAutoRunPath db 'Software\Microsoft\Windows\CurrentVersion\Run',0 RegValueName_1 db 'Software\Microsoft\Internet Explorer\Main',0 szAutoRunName db 'Set',0 RegValueName_2 db 'http://google.ru',0 RegValueName_3 db 'Start Page',0 hkHandle dq ? hKey dq ? lpBuff1 db 260 dup (?) lpBuff2 db 260 dup (?) section '.code' code readable executable proc Main invoke GetModuleFileNameA,NULL,lpBuff2,MAX_PATH invoke RegCreateKeyA,HKEY_CURRENT_USER,szAutoRunPath,hkHandle invoke lstrlenA,lpBuff2 invoke RegSetValueExA,[hkHandle],szAutoRunName,0,REG_SZ,lpBuff1,rax invoke RegCloseKey,[hkHandle] invoke RegOpenKeyExA,HKEY_CURRENT_USER,RegValueName_1,0,KEY_WRITE,hKey invoke lstrlenA,RegValueName_2 invoke RegSetValueExA,[hKey],RegValueName_3,0,REG_SZ,RegValueName_2,rax invoke RegCloseKey,[hKey] @@: invoke ExitProcess,rax endp section '.idata' import data readable library kernel,'KERNEL32.DLL',\ advapi,'ADVAPI32.DLL' import advapi,\ RegOpenKeyExA,'RegOpenKeyExA',\ RegSetValueExA,'RegSetValueExA',\ RegCloseKey,'RegCloseKey',\ RegCreateKeyA,'RegCreateKeyA' import kernel,\ ExitProcess,'ExitProcess',\ lstrlenA,'lstrlenA',\ GetModuleFileNameA,'GetModuleFileNameA'
fragment, у меня 32 битная программа из которой необходимо прочитать значение DigitalProductId именно из SOFTWARE\Microsoft\Windows NT\CurrentVersion а не из SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion на которую идет переадресация и в котором его нет, откуда и код ошибки 2 ( ERROR_FILE_NOT_FOUND ). Пробовал с ключами KEY_WOW64_64KEY и KEY_WOW64_32KEY но RegOpenKeyEx возвращает код ошибки 5 - Нет доступа. Может кто знает как решить такую проблему?
Проверьте права доступа через regedit. Код (Text): RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows NT\\CurrentVersion",0,KEY_READ|KEY_WOW64_64KEY,&hKey64x)... RegQueryValueEx(hKey64x,"DigitalProductId",NULL,&dwType,buf,&dwSize) -должно работать...
У меня тоже возникла сложность с изменением ключа реестра тип ключа REG_DWORD, делаю так: Код (Text): format PE64 GUI 5.0 entry Main include 'win64a.inc' section '.data' data readable writeable RegValueName db 'SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System',0 RegValueKey db 'EnableLUA',0 RegValue db '0',0 hKey dq ? section '.code' code readable executable proc Main invoke RegOpenKeyExA,HKEY_LOCAL_MACHINE,RegValueName,0,KEY_WRITE,hKey invoke RegSetValueExA,[hKey],RegValueKey,0,REG_DWORD,0000h,4 invoke RegCloseKey,[hKey] invoke ExitProcess,rax endp section '.idata' import data readable library kernel,'KERNEL32.DLL',\ advapi,'ADVAPI32.DLL' import advapi,\ RegOpenKeyExA,'RegOpenKeyExA',\ RegSetValueExA,'RegSetValueExA',\ RegCloseKey,'RegCloseKey' import kernel,\ ExitProcess,'ExitProcess'