0

我想知道为什么 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\Microsoft\Windows\CurrentVersion\Authentication\LogonUI {'ShowTabletKeyboard': 0}

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

如您所见,缺少一些项目。regread.py 在拉取其他注册表位置时似乎工作正常,并且基于 Tim Golden 在此处发布的代码:http: //bytes.com/topic/python/answers/802172-scanning-through-windows-registry

有谁知道为什么 winreg 不会从 Windows 7 主机上的 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI 返回所有值和子项。我是本地管理员,即使是域管理员,它仍然无法正常工作。我正在使用 python 3.3(32 位)和 pywin32-218。

4

1 回答 1

0

一旦我发现这个问题与 64/32 位 Windows 重定向有关,就很容易解决。

我必须使用以下内容从 64 位主机获取注册表值。

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

(www.stackoverflow.com/questions/8506646/change-64bit-registry-from-32bit-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 时,操作系统会重写对 \windows\SysWOW64 的引用。”

于 2013-07-01T08:45:45.493 回答