2013-06-21 6 views
0

Мне интересно, почему модуль winreg wincon не возвращает все подразделы и значения в хосте Win7.Python winreg отсутствует подраздел на Win7

Если я использую родную команду рег командная_строка для запроса реестра я получаю следующее:

>reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI" 

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI 
    ShowTabletKeyboard  REG_DWORD 0x0 
    LastLoggedOnProvider REG_SZ  {2A1ABE6F-476D-4E5B-FB68-21EF45555CC37} 
    LastLoggedOnSAMUser  REG_SZ  DOMAIN\USERNAME 
    LastLoggedOnUser REG_SZ  DOMAIN\USERNAME 

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background 
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\BootAnimation 
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\LogonSoundPlayed 
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\SessionData 

Если я использую питона скрипт для запроса в том же месте, я только получить следующие значения и подразделы:

regread.py Значения: SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Authentication \ LogonUI { 'ShowTabletKeyboard': 0}

Subkeys: 
SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI 
['Background', 'BootAnimation'] 

Как видите, некоторые предметы отсутствуют. regread.py, кажется, работает нормально при трогании в других местах реестра и основан на коде, публикуемый Тим Golden здесь: http://bytes.com/topic/python/answers/802172-scanning-through-windows-registry

Кто-нибудь знает, почему WinREG wouln't вернуть все значения и подключи из HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Authentication \ LogonUI на хосте Windows 7. Я локальный администратор на ящике и даже как администратор домена, он все еще не работает. Я использую python 3.3 (32bit) и pywin32-218.

ответ

0

Как только я понял, что эта проблема связана с переходом на 64/32 бита, было довольно легко обойти.

Мне пришлось использовать следующее, чтобы получить значения реестра из 64-разрядных хостов.

key = winreg.OpenKey(aReg, subkey, 0, (winreg.KEY_WOW64_64KEY + winreg.KEY_READ)) 

(www.stackoverflow.com/ вопросы/8506646/переключающий 64bit-реестр-из-32-битном-питон)

Этот сайт имеет довольно простое объяснение того, что происходит:

python.6 .x6.nabble.com/Seven-64bits-and-system32-syswow64-paths-td4540789.html

«В 64-разрядной системе все 64-разрядные команды и библиотеки DLL живут под \ windows \ system32 и все 32-битных команд и DLL живут под \ windows \ SysWOW64. 64-битный процесс позволяет увидеть оба этих каталоги как они есть, но для 32-битного процесса операционная система перезаписывает пути, а при обращении к \ windows \ system32 OS перезаписывает эту ссылку на \ windows \ SysWOW64. "