2013-06-21 51 views
0

我想知道爲什麼python模塊winreg不會返回Win7主機中的所有子項和值。Python winreg Win7上缺少子項

如果我使用本地REG CMDLINE命令查詢註冊表我得到以下幾點:

>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 

如果我使用python腳本來查詢同一個位置,我只得到以下值和子項:

regread.py 值: SOFTWARE \微軟\的Windows \ CurrentVersion \認證\ LogonUI { 'ShowTabletKeyboard':0}

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

正如你所看到的一些物品丟失。 regread.py似乎拉動其他註冊表位置時,工作正常,並基於發表添金這裏的代碼: http://bytes.com/topic/python/answers/802172-scanning-through-windows-registry

有誰知道爲什麼WinReg項wouln't從 HKLM \ SOFTWARE返回所有值和子項\ Windows 7主機上的Microsoft \ Windows \ CurrentVersion \ Authentication \ LogonUI。 我是本地管理員,甚至作爲域管理員,它仍然無法正常工作。 我使用python 3.3(32位)和pywin32-218。

回答

0

有一次,我發現這個問題與64/32位窗口重定向相關,很容易解決。

我不得不使用以下命令從64位主機獲取註冊表值。

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

(www.stackoverflow.com/問題/ 8506646 /轉換64位的註冊表從 - 32位的Python)

這個網站有相當簡單的解釋發生了什麼:

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。「