刷新当前用户配置文件

时间:2011-08-11 09:18:03

标签: c# windows

...我想通过c#工具授予用户临时管理员权限。因此,我将用户添加到管理员用户组(在特权服务帐户下运行的后台服务执行此作业)。但是,更改仅在新会话(登出/重新登录后)中生效,这是不方便的。有没有办法刷新当前用户配置文件?

我试过几种方法:

  • via .net Process.Start,LoadUserProfile属性设置为true。
  • 下一次尝试是通过LoadUserProfile Win32 Api功能。
  • 另一种方法是使用.net Impersonation模拟用户

所有这些尝试都无法识别权限更改。在我看来,有一个缓存的用户配置文件包含旧的权限,并随时重新加载。

加载新配置文件的唯一方法是runas命令,但是我们不希望用户使用命令行,应该可以从.net

执行此操作。

如果还有其他选择会很棒吗?也许有一种工具可以做到这一点?


好的,我重新登录用户,然后我将新的令牌与例如CreateProcessAsUser使用新令牌运行新进程。有没有办法为当前的Windows环境分配新令牌,因此用户在Windows中执行的所有操作都使用这个新令牌?否则我可以使用其他工具如lsrunas在新的上下文中打开进程并避免winapi调用。

从我们的角度来看,我们相信用户(这是他的私人笔记本),他可以安装他想要的软件(暂时),但我们用我们的工具记录每个安装。我们在后台运行一个带有本地管理员帐户的服务,负责管理组分配和系统文档。

1 个答案:

答案 0 :(得分:2)

登录Windows时,会创建一个安全令牌,其中所有组成员身份(包括嵌套成员身份)都已解析。令牌包含用户所属的SID(安全标识符)列表。第一个SID是用户自己的ID,然后包含任何组和角色(例如交互式登录,每个人等)。这意味着每次访问控制完成时,不必查看组成员身份对用户数据库(可能是Active Directory服务器)。而是根据令牌检查对象(例如文件)的ACL(访问控制列表)。

要刷新群组成员资格,您需要创建新令牌。您可以注销,然后在描述时再次登录,或者您必须使用LogonUser为同一用户进行另一次登录。但是普通用户无法访问该功能。

我认为这一切都归结为寻找另一种设计。从安全角度来看,从管理组中添加和删除用户看起来很奇怪。有没有其他方法可以让用户访问所需的资源?您可以在LocalSystem帐户下运行的Windows服务中进行实际工作吗?