繁体   English   中英

如何调用模拟另一个用户而不是SYSTEM的函数

[英]How to invoke a function impersonating another user instead of SYSTEM

在我的DLL中调用了Win32 API,它将由SYSTEM用户加载,并且该API根据当前用户返回不同的结果,因此我无法获得与当前用户相对应的结果,如何在当前登录用户下调用该API DLL在SYSTEM上下文中运行时的上下文?

我做了一些研究并得出结论(我不是Win32 API专家,但我真的很感兴趣):

可以使用ImpersonateLoggedOnUser ,这要求一个模拟令牌手柄(与至少TOKEN_QUERY在两者TOKEN_DUPLICATE上的主令牌,或TOKEN_IMPERSONATE在模仿令牌上)。

如果您拥有当前登录的用户令牌和正确的权限,那么您将非常容易,只需使用ImpersonateLoggedOnUser ,调用所需的API函数,然后调用RevertToSelf返回其原始所有者令牌。

但是获取当前登录的用户令牌并不容易。 您必须使用LogonUser指定用户的名称和密码(这似乎不正确),或者拥有一个具有足够权限的Windows服务,以便您调用WTSQueryUserToken ,这可能与您正在开发的项目类型不同。

或者,如果您真的愿意使用普通过程执行此操作,您还可以浏览身份验证功能 ,您可以在其中利用新的Windows UAC和安全上下文,这可能有点复杂。

还有这种方法,我不确定它是否有效: 模仿标准用户 (通过在explorer.exe上使用OpenProcessToken获取令牌)。

我觉得有用的一些链接:

我建议:在继续之前,确保在调用您提到的API函数时确实需要冒充用户。 看看是否有其他途径可以实现您的目标。

您还可以指定要尝试使用的API函数,这可能会将您重定向到另一个更简单的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM