使用Python打开注册表配置单元文件

时间:2017-03-20 09:46:25

标签: python windows hive registry windows-10

我需要使用Python 3打开一个注册表配置单元文件。这应该在Windows系统上以及从另一个系统复制的配置单元文件中实时工作。

不幸的是,我无法使用Python打开甚至查看文件:

#!/usr/bin/env python3

import os.path
import os

hive_dir = os.path.join(os.path.expandvars(r"%SystemRoot%"), "System32", "Config")
HIVES = ["System", "San", "Security", "Software", "Ntuser.dat"]

def main():
    print("Hive directory {} exists: {}".format(hive_dir, os.path.exists(hive_dir)))
    print("Content of {}: {}".format(hive_dir, os.listdir(hive_dir)))
    for hive in HIVES:
        hive_path = os.path.join(hive_dir, hive)
        print("{} exists: {}".format(hive_path, os.path.exists(hive_path)))

if __name__ == '__main__':
    main()

该脚本首先检查hive文件所在的目录以及文件是否实际存在。输出是:

Hive directory C:\WINDOWS\System32\Config exists: True
Content of C:\WINDOWS\System32\Config: ['Journal', 'RegBack', 'systemprofile', 'TxR']
C:\WINDOWS\System32\Config\System exists: False
C:\WINDOWS\System32\Config\San exists: False
C:\WINDOWS\System32\Config\Security exists: False
C:\WINDOWS\System32\Config\Software exists: False
C:\WINDOWS\System32\Config\Ntuser.dat exists: False

根据Microsofts MSDN documentation,文件应该在那里并在Windows资源管理器中打开目录shows files

使用PowerShell,我还可以验证文件是否到位:

PS C:\Users\test> dir "$env:SystemRoot\System32\Config"

    Verzeichnis: C:\WINDOWS\System32\Config

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       05.12.2016     13:38                bbimigrate
d-----       16.07.2016     13:47                Journal
d-----       14.03.2017     10:19                RegBack
d-----       05.12.2016     13:19                systemprofile
d-----       16.03.2017     10:14                TxR
-a----       16.03.2017     10:16        1048576 BBI
-a----       05.12.2016     13:15          28672 BCD-Template
-a----       20.03.2017     09:32       91488256 COMPONENTS
-a----       16.03.2017     10:16        1572864 DEFAULT
-a----       16.03.2017     12:16        5259264 DRIVERS
-a----       05.12.2016     14:02          32768 ELAM
-a----       20.03.2017     09:22            120 netlogon.ftl
-a----       05.12.2016     13:12          73728 SAM
-a----       16.03.2017     10:16          73728 SECURITY
-a----       16.03.2017     10:16      103022592 SOFTWARE
-a----       16.03.2017     10:16       19136512 SYSTEM
-a----       05.12.2016     12:39           8192 userdiff
-a----       16.07.2016     13:45           4096 VSMIDK

PS C:\Users\test> Test-Path "$env:SystemRoot\System32\Config\SECURITY"
True

我正在运行64位Windows 10 Enterprise和Python 3.5。我验证了生产系统以及虚拟机上的行为。以管理员身份运行Python并没有改变任何内容。

这里有什么问题?

1 个答案:

答案 0 :(得分:2)

由于WOW64文件系统重定向,您正在运行32位Python并查看SysWOW64\config。在64位Windows上运行的32位进程可以以"%SystemRoot%\SysNative"的形式访问本机系统目录。此目录是虚拟的,在本机进程中不存在,因此请首先检查它是否存在。

另外,“San”是一个错字;它应该是“SAM”。并且系统配置目录中不应该有“NTUSER.DAT”。该文件仅存在于用户配置文件目录中。