【发布时间】:2010-10-02 07:55:34
【问题描述】:
我正在设计一个服务以在 Win2000、XP 和 Vista 上的 LocalSystem 帐户下运行。它需要访问用户注册表配置单元,有时需要很长一段时间,无论是在用户登录时,还是在用户未登录时(如果配置文件是本地的。如果配置文件是漫游且未加载,我不会尝试加载它。)
如果用户已登录,我可以通过各种方式(例如从其资源管理器进程,或通过从服务控制管理器接收登录事件)获取用户访问令牌,然后使用 ImpersonateLoggedOnUser 和 RegOpenCurrentUser 访问用户的配置单元。但是,如果用户在我模拟并打开他的配置单元时从开始菜单中选择注销,会有什么影响?是否会阻止注销?我的冒充会被终止吗?
如果用户没有登录,我可以使用RegLoadKey直接打开hive NTUSER.DAT。 (对于已登录的用户来说是不可能的)。但是,如果用户决定登录,这意味着什么(我想配置单元将被锁定并且登录要么被阻止,要么可能会遇到困难?)
我将设置一些测试项目来探索这些想法,但是,无论它们的明显结果如何,这些问题都是理论上的,就用户在这些过程中登录/注销可能或将导致什么类型的问题而言服务的操作。
警告:ImpersonateLoggedOnUser 只能用于登录用户(从进程或 SCM 事件获得的令牌)或我有明文密码来调用 WinLogon 并获取令牌的用户 - TRUE / FALSE?换句话说,虽然我拥有 LocalSystem 的最大权限并且能够更改用户的密码甚至删除用户的帐户,但如果用户没有登录,则完全不可能创建一个新的令牌来冒充用户而没有密码?
【问题讨论】:
标签: c++ windows login impersonation token