我的系统中有两个用户:
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.exe
。 ddd.dll
应该只访问超级用户可用的资源。可以bbb.dll
以超级用户身份登录并获取权限吗?怎么实现呢?我应该为此目的使用哪些API函数?
答案 0 :(得分:0)
如果用户完全不同,并且您拥有超级用户的登录凭据,则可以在进入dll函数时使用LogonUser和ImpersonateLoggedOnUser。
这非常不稳定,因为非超级用户在技术上可以访问超级用户凭据,除非您在某种锁定的沙箱中运行他们的应用程序。
如果您尝试调用UAC,那么最强大的解决方案是让ddd.dll
生成一个运行提升的worker exe。您可以ShellExecute/Ex()
使用lpOperation
设置为"runas"
来强制提升。如果exe表现出来,您可以将lpOperation
设置为NULL或"open"
,并让UAC根据需要正常提示。无论哪种方式,这将调用系统自己的提升GUI,提示用户升级自己的帐户,或选择其他管理员(超级用户)帐户来完成他们的操作。