【问题标题】:Python winreg missing subkey on Win7Python winreg在Win7上缺少子键
【发布时间】:2013-06-21 09:09:38
【问题描述】:

我想知道为什么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 (32bit) 和 pywin32-218。

【问题讨论】:

    标签: python windows-7 winreg


    【解决方案1】:

    一旦我发现这个问题与 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 的引用。"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      • 2019-09-22
      • 1970-01-01
      • 2023-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多