Реестр Windows 7 x64

Discussion in 'WASM.BEGINNERS' started by niakris, Feb 28, 2011.

  1. niakris

    niakris Дмитрий

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

    Rel Well-Known Member

    Blog Posts:
    2
    Joined:
    Dec 11, 2008
    Messages:
    5,317
    телепаты есть здесь, как ты думаешь? какой код ошибки возвращает RegQueryValueEx? GetLastError не при делах, функция сама возвращает код ошибки... хотя можно испытать свои силы в телепатии: код ошибки ERROR_MORE_DATA?)))
     
  3. niakris

    niakris Дмитрий

    Blog Posts:
    0
    Joined:
    Sep 3, 2008
    Messages:
    45
    Rel, код ошибки - 2.
     
  4. Rel

    Rel Well-Known Member

    Blog Posts:
    2
    Joined:
    Dec 11, 2008
    Messages:
    5,317
    смотрим MSDN:
    делаем соответствующий вывод...
     
  5. niakris

    niakris Дмитрий

    Blog Posts:
    0
    Joined:
    Sep 3, 2008
    Messages:
    45
    но так ключик же существует и на 32 битных виндах нормально читается... :dntknw:
     
  6. TSS

    TSS New Member

    Blog Posts:
    0
    Joined:
    Apr 13, 2009
    Messages:
    494
    http://msdn.microsoft.com/en-us/library/aa384232%28v=VS.85%29.aspx
     
  7. fragment

    fragment New Member

    Blog Posts:
    0
    Joined:
    Jun 11, 2008
    Messages:
    266
    Code (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 Дмитрий

    Blog Posts:
    0
    Joined:
    Sep 3, 2008
    Messages:
    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

    Blog Posts:
    0
    Joined:
    Oct 19, 2009
    Messages:
    301
    Проверьте права доступа через regedit.

    Code (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

    Blog Posts:
    0
    Joined:
    Jun 11, 2008
    Messages:
    266
    У меня тоже возникла сложность с изменением ключа реестра тип ключа REG_DWORD, делаю так:

    Code (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'