具有与调用它的可执行文件不同的用户权限的库

时间:2016-04-20 13:11:56

标签: windows winapi visual-c++ credentials

我的系统中有两个用户:

username: superuser  pass:aaa //user that has many rights
username: nothing  pass:bbb //user that has minimum rights

我有ececutable aaa.exe调用库bbb.dll的函数。

用户nothing运行可执行文件aaa.exeddd.dll应该只访问超级用户可用的资源。可以bbb.dll以超级用户身份登录并获取权限吗?怎么实现呢?我应该为此目的使用哪些API函数?

1 个答案:

答案 0 :(得分:0)

如果用户完全不同,并且您拥有超级用户的登录凭据,则可以在进入dll函数时使用LogonUserImpersonateLoggedOnUser

这非常不稳定,因为非超级用户在技术上可以访问超级用户凭据,除非您在某种锁定的沙箱中运行他们的应用程序。

如果您尝试调用UAC,那么最强大的解决方案是让ddd.dll生成一个运行提升的worker exe。您可以ShellExecute/Ex()使用lpOperation设置为"runas"来强制提升。如果exe表现出来,您可以将lpOperation设置为NULL或"open",并让UAC根据需要正常提示。无论哪种方式,这将调用系统自己的提升GUI,提示用户升级自己的帐户,或选择其他管理员(超级用户)帐户来完成他们的操作。

相关问题