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