冒充用户

use*_*541 7 .net c# impersonation windows-services user-profile

我们正在开发一个C#.NET Windows服务.

我们的服务在系统帐户下运行,我们正在尝试模拟登录用户USER.模拟工作正常,即在System.Security.Principal.WindowsIdentity.GetCurrent()模仿后调用时,我们会得到正确的用户'USER'.

问题是,当我们尝试访问用户配置文件时,我们无法获得预期的结果.一个例子是访问注册表CURRENT_USER.我们收到拒绝访问错误.当使用第三方函数时,我们假设它部分使用了注册表,我们获得了"真实"(模仿之前)用户的详细信息.此外,在呼叫时,Environment.ExpandEnvironmentVariables("%TEMP%")我们获取系统配置文件而不是登录用户配置文件.

有没有办法完全冒充不同的用户?我知道我们可以使用LoadUserProfile来获取特定的用户配置文件,但这对我们不利,因为我们正在运行使用当前用户配置文件的第三方dll.

我们的模拟代码就是基于

Dam*_*ver 2

我注意到代码没有调用LoadUserProfile,因此用户配置文件没有加载。

请注意该函数的注释,HKEY_CURRENT_USER但仍然没有被替换。

认为你可以通过调用RegOverridePredefKey.

请注意,为了让这一切正常工作,可能会涉及很多巫术 - 我会尝试确保覆盖在第三方调用之前尽可能晚地发生,并在之后尽快恢复(希望这就是全部)对库的一次调用)。

作为替代方案,我会认真尝试寻找其他不需要所有这些麻烦的第三方产品。