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

2024-09-26 18:03:23 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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


Tags: 用户信息应用程序编辑进程注册表管理员方式
3条回答

HKEY_CURRENT_USER映射到HKEY_USERS{id}密钥。

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

根据MSDNHKEY_CURRENT_USER是指向HKEY_USERS/SID of the current user的指针。您可以使用pywin32查找帐户名的SID。一旦完成,就可以使用open并将注册表项与_winreg模块一起使用。

import win32security
import _winreg as winreg

sid = win32security.LookupAccountName(None, user_name)[0]
sidstr = win32security.ConvertSidToStringSid(sid)
key = winreg.OpenKey(winreg.HKEY_USERS, sidstr)
# do something with the key

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

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

wmic useraccount where name='John' get sid

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

reg query HKEY_USERS\[SID]

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

reg query HKEY_USERS\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中解析起来应该比较简单。

参考文献:

http://www.windows-commandline.com/get-sid-of-user/

https://superuser.com/questions/135752/list-mapped-network-drives-from-the-command-line-to-text-file

相关问题 更多 >

    热门问题