Реестр Windows 7 x64

Тема в разделе "WASM.BEGINNERS", создана пользователем niakris, 28 фев 2011.

  1. niakris

    niakris Дмитрий

    Публикаций:
    0
    Программно читаю данные из SOFTWARE\Microsoft\Windows NT\CurrentVersion, а именно ключ DigitalProductId, всё работает нормально на 32 битных виндах, а вот на 7 x64 - RegQueryValueEx возвращает ошибку, хотя GetLastError говорит - Операция успешно завершена. В чем может быть проблема?
     
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    телепаты есть здесь, как ты думаешь? какой код ошибки возвращает RegQueryValueEx? GetLastError не при делах, функция сама возвращает код ошибки... хотя можно испытать свои силы в телепатии: код ошибки ERROR_MORE_DATA?)))
     
  3. niakris

    niakris Дмитрий

    Публикаций:
    0
    Rel, код ошибки - 2.
     
  4. Rel

    Rel Well-Known Member

    Публикаций:
    2
    смотрим MSDN:
    делаем соответствующий вывод...
     
  5. niakris

    niakris Дмитрий

    Публикаций:
    0
    но так ключик же существует и на 32 битных виндах нормально читается... :dntknw:
     
  6. TSS

    TSS New Member

    Публикаций:
    0
    http://msdn.microsoft.com/en-us/library/aa384232%28v=VS.85%29.aspx
     
  7. fragment

    fragment New Member

    Публикаций:
    0
    Код (Text):
    1. format PE64 GUI 5.0
    2. entry Main
    3.  
    4. include 'win64a.inc'
    5.  
    6. CSIDL_ADMINTOOLS = 0030
    7.  
    8. section '.data' data readable writeable
    9.  
    10.        start_data:
    11.  
    12.     szAutoRunPath db 'Software\Microsoft\Windows\CurrentVersion\Run',0
    13.     RegValueName_1 db 'Software\Microsoft\Internet Explorer\Main',0
    14.     szAutoRunName db 'Set',0
    15.  
    16.  
    17.     RegValueName_2 db 'http://google.ru',0
    18.     RegValueName_3 db 'Start Page',0
    19.  
    20.     hkHandle dq ?
    21.     hKey dq ?
    22.  
    23.     lpBuff1 db 260 dup (?)
    24.     lpBuff2 db 260 dup (?)
    25.  
    26. section '.code' code readable executable
    27.  
    28.   proc Main
    29.  
    30.     invoke GetModuleFileNameA,NULL,lpBuff2,MAX_PATH
    31.  
    32.     invoke RegCreateKeyA,HKEY_CURRENT_USER,szAutoRunPath,hkHandle
    33.     invoke lstrlenA,lpBuff2
    34.     invoke RegSetValueExA,[hkHandle],szAutoRunName,0,REG_SZ,lpBuff1,rax
    35.     invoke RegCloseKey,[hkHandle]
    36.  
    37.     invoke RegOpenKeyExA,HKEY_CURRENT_USER,RegValueName_1,0,KEY_WRITE,hKey
    38.     invoke lstrlenA,RegValueName_2
    39.     invoke RegSetValueExA,[hKey],RegValueName_3,0,REG_SZ,RegValueName_2,rax
    40.     invoke RegCloseKey,[hKey]
    41. @@:
    42.     invoke ExitProcess,rax
    43.   endp
    44.  
    45. section '.idata' import data readable
    46.  
    47.     library kernel,'KERNEL32.DLL',\
    48.         advapi,'ADVAPI32.DLL'
    49.  
    50.     import advapi,\
    51.        RegOpenKeyExA,'RegOpenKeyExA',\
    52.        RegSetValueExA,'RegSetValueExA',\
    53.        RegCloseKey,'RegCloseKey',\
    54.        RegCreateKeyA,'RegCreateKeyA'
    55.  
    56.     import kernel,\
    57.        ExitProcess,'ExitProcess',\
    58.        lstrlenA,'lstrlenA',\
    59.        GetModuleFileNameA,'GetModuleFileNameA'
     
  8. niakris

    niakris Дмитрий

    Публикаций:
    0
    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 - Нет доступа. Может кто знает как решить такую проблему?
     
  9. gorodon

    gorodon New Member

    Публикаций:
    0
    Проверьте права доступа через regedit.

    Код (Text):
    1. RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows NT\\CurrentVersion",0,KEY_READ|KEY_WOW64_64KEY,&hKey64x)...
    2. RegQueryValueEx(hKey64x,"DigitalProductId",NULL,&dwType,buf,&dwSize)
    -должно работать...
     
  10. fragment

    fragment New Member

    Публикаций:
    0
    У меня тоже возникла сложность с изменением ключа реестра тип ключа REG_DWORD, делаю так:

    Код (Text):
    1. format PE64 GUI 5.0
    2. entry Main
    3.  
    4. include 'win64a.inc'
    5.  
    6. section '.data' data readable writeable
    7.  
    8.     RegValueName db 'SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System',0
    9.     RegValueKey  db 'EnableLUA',0
    10.     RegValue     db '0',0
    11.  
    12.     hKey dq ?
    13.  
    14. section '.code' code readable executable
    15.  
    16.   proc Main
    17.  
    18.     invoke RegOpenKeyExA,HKEY_LOCAL_MACHINE,RegValueName,0,KEY_WRITE,hKey
    19.     invoke RegSetValueExA,[hKey],RegValueKey,0,REG_DWORD,0000h,4
    20.     invoke RegCloseKey,[hKey]
    21.  
    22.     invoke ExitProcess,rax
    23.   endp
    24.  
    25. section '.idata' import data readable
    26.  
    27.     library kernel,'KERNEL32.DLL',\
    28.         advapi,'ADVAPI32.DLL'
    29.  
    30.     import advapi,\
    31.        RegOpenKeyExA,'RegOpenKeyExA',\
    32.        RegSetValueExA,'RegSetValueExA',\
    33.        RegCloseKey,'RegCloseKey'
    34.  
    35.     import kernel,\
    36.        ExitProcess,'ExitProcess'