c++ - 冒充用户访问hives——各种方法,有哪些实际问题?

标签 c++ windows authentication impersonation token

我正在设计一个在 Win2000、XP 和 Vista 上以 LocalSystem 帐户运行的服务。它将需要访问用户注册表配置单元,有时需要很长时间,无论是在用户登录时,还是在用户未登录时(如果配置文件是本地的。如果配置文件是漫游且未加载,我不会尝试加载它。)

如果用户已登录,我可以通过各种方式(例如,从其资源管理器进程,或通过从服务控制管理器接收登录事件)获取用户访问 token ,然后使用 ImpersonateLoggedOnUser 和 RegOpenCurrentUser 访问用户的配置单元。但是,如果用户在我模拟并打开他的配置单元时从开始菜单中选择注销,会有什么影响?是否会阻止注销?我的模拟会被终止吗?

如果用户没有登录,我可以用RegLoadKey直接打开hive NTUSER.DAT。 (登录用户不可能)。但是,如果用户决定登录,这意味着什么(我想 hive 将被锁定并且登录要么被阻止,要么可能会遇到困难?)

我将建立一些测试项目来探索这些想法,但是,不管它们的表面结果如何,这些问题都是理论上的,就用户在这些过程中登录/注销可能或将会导致什么类型的问题而言服务的 Action 。

警告:ImpersonateLoggedOnUser 只能用于登录用户(从进程或 SCM 事件获得的 token )或我有明文密码调用 WinLogon 并获取 token 的用户 - 真/假?换句话说,虽然我拥有 LocalSystem 的最大权限并且能够更改用户的密码甚至删除用户的帐户,但如果用户未登录,则完全不可能创建新的 token 来模拟用户而无需密码?

最佳答案

显然,如果用户登录时已经被另一个进程加载,则存在破坏用户配置文件的风险。在这种情况下,系统将尝试为用户创建一个新的子目录。

关于c++ - 冒充用户访问hives——各种方法,有哪些实际问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/459162/

相关文章:

c++ - 如何使用 Softing 工具包从 OPC UA 服务器异步读取操作的回调中从 DataValue 响应中获取 NodeId 详细信息

java - 在 Windows 的系统托盘中隐藏我的程序

authentication - 如何在使用 httpOnly cookie 时保护 SPA 中的私有(private)路由

c++ - 使用 sublime text 2 错误使用 mingw 编译 SDL2

c++ - boost::unordered_map 中的迭代器失效

c++ - 从接口(interface)转换为实现接口(interface)的类的子类

session - 从外部 cakephp 访问 cakephp session (auth)

c - 如果文件名在 DOS 8.3 风格中相同,则 MoveFile 和 MoveFileEx 工作异常

c++ - 如何使用 winsock2 应用 Linger 选项

ajax - 使用 AJAX 时的神秘 401 挑战