Реестр Windows 7 x64

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

  1. niakris

    niakris Дмитрий

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

    Rel Well-Known Member

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

    niakris Дмитрий

    Публикаций:
    0
    Регистрация:
    3 сен 2008
    Сообщения:
    45
    Rel, код ошибки - 2.
     
  4. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    смотрим MSDN:
    делаем соответствующий вывод...
     
  5. niakris

    niakris Дмитрий

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

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    http://msdn.microsoft.com/en-us/library/aa384232%28v=VS.85%29.aspx
     
  7. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    Код (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
    Регистрация:
    3 сен 2008
    Сообщения:
    45
    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
    Регистрация:
    19 окт 2009
    Сообщения:
    301
    Проверьте права доступа через 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
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    У меня тоже возникла сложность с изменением ключа реестра тип ключа 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'