在Python中从注册表读取HKEY CURRENT USER,指定用户

在Python中从注册表读取HKEY CURRENT USER,指定用户,python,windows,registry,Python,Windows,Registry,在我的应用程序中,我在几个不同的用户帐户下运行子进程。我需要能够读取这些子进程写入注册表的一些信息。每个人都在给HKEY_当前用户写信,我知道他们使用的用户帐户名 在Python中,如何从特定用户的HKEY_CURRENT_USER读取值?我假设我需要以某种方式加载用户名下的注册表值,然后从那里读取它们,但是如何读取呢 编辑:为了确保清楚,我的Python程序是以管理员身份运行的,我有“user1”、“user2”和“user3”帐户,每个帐户都有自己的HKEY_当前用户中的信息。作为管理员,如

在我的应用程序中,我在几个不同的用户帐户下运行子进程。我需要能够读取这些子进程写入注册表的一些信息。每个人都在给HKEY_当前用户写信,我知道他们使用的用户帐户名

在Python中,如何从特定用户的HKEY_CURRENT_USER读取值?我假设我需要以某种方式加载用户名下的注册表值,然后从那里读取它们,但是如何读取呢


编辑:为了确保清楚,我的Python程序是以管理员身份运行的,我有“user1”、“user2”和“user3”帐户,每个帐户都有自己的HKEY_当前用户中的信息。作为管理员,如何读取user1的HKEY_当前用户数据?

HKEY_当前用户映射到HKEY_用户\{id}密钥


尝试通过将HKEY_USERS{id}\Volatile Environment\USERNAME密钥与用户的用户名匹配(通过枚举/迭代系统上存在的{id}来查找id)。找到匹配项时,只需使用HKEY_用户{id},就像它是HKEY_当前用户一样

HKEY_当前用户映射到HKEY_用户\{id}键

尝试通过将HKEY_USERS{id}\Volatile Environment\USERNAME密钥与用户的用户名匹配(通过枚举/迭代系统上存在的{id}来查找id)。当您找到匹配项时,只需使用HKEY_用户{id},就像它是HKEY_当前用户一样

根据,
HKEY_当前用户
是指向当前用户的
HKEY_用户/SID的指针。您可以使用查找SID以查找帐户名。一旦您有了这个,您就可以使用open并在模块中使用注册表项

根据,
HKEY\U CURRENT\U USER
是指向当前用户的
HKEY\U USERS/SID的指针。您可以使用查找SID以查找帐户名。一旦您有了这个,您就可以使用open并在模块中使用注册表项


如果您不想安装win32 stuff for Python,并且已经在使用子进程,那么可以运行内置的Windows命令来获取您要查找的注册表数据

要查询特定用户的SID,请执行以下操作:

wmic用户帐户,其中name='John'获取sid

然后,您可以使用该SID查询该特定用户的其他注册表项:

reg查询HKEY\U用户\[SID]

例如,如果您想知道特定用户安装的网络驱动器:

reg query HKEY_用户\S-1-5-21-4205028929-649740040-1951280400-500\Network/S/v RemotePath

输出将如下所示:

HKEY_USERS\S-1-5-21-4205028929-649740040-1951280400-500\Network\R
    RemotePath    REG_SZ    \\MACHINENAME1\shared

HKEY_USERS\S-1-5-21-4205028929-649740040-1951280400-500\Network\T
    RemotePath    REG_SZ    \\MACHINENAME2\testing

HKEY_USERS\S-1-5-21-4205028929-649740040-1951280400-500\Network\V
    RemotePath    REG_SZ    \\MACHINENAME3\videos

End of search: 3 match(es) found.
在Python中解析它应该相对简单

参考资料:


如果您不想安装win32 stuff for Python,并且由于您已经在使用子流程,您可以运行内置的Windows命令来获取您要查找的注册表数据

要查询特定用户的SID,请执行以下操作:

wmic用户帐户,其中name='John'获取sid

然后,您可以使用该SID查询该特定用户的其他注册表项:

reg查询HKEY\U用户\[SID]

例如,如果您想知道特定用户安装的网络驱动器:

reg query HKEY_用户\S-1-5-21-4205028929-649740040-1951280400-500\Network/S/v RemotePath

输出将如下所示:

HKEY_USERS\S-1-5-21-4205028929-649740040-1951280400-500\Network\R
    RemotePath    REG_SZ    \\MACHINENAME1\shared

HKEY_USERS\S-1-5-21-4205028929-649740040-1951280400-500\Network\T
    RemotePath    REG_SZ    \\MACHINENAME2\testing

HKEY_USERS\S-1-5-21-4205028929-649740040-1951280400-500\Network\V
    RemotePath    REG_SZ    \\MACHINENAME3\videos

End of search: 3 match(es) found.
在Python中解析它应该相对简单

参考资料:


这也是我提出的解决方案,但我希望得到一些更“正确”的东西——卢卡斯的建议更具体一些。我不得不同意:)。他的答案更可靠。我给这个a+,因为它在Python之外工作,不需要额外的程序——这个想法在任何平台上都适用。这也是我提出的解决方案,但我希望得到一些更“正确”的东西——看起来卢卡斯的建议更具体一些。我不得不同意:)。他的答案更可靠。我给这个a+,因为它在Python之外工作,不需要额外的程序——这个想法在任何平台上都适用。