Luc*_*uca 1 c# security winapi uac
我正试图弄清楚如何解决特权获取问题.
该应用程序需要桌面访问,因此无法作为Windows服务执行:它必须创建一个窗口,用于接收其他进程使用SendMessage发送的消息(它必须用于等待消息确认).
应用程序应在用户登录时启动,并将管理用户会话(管理应用程序,窗口......).一次只能管理一个用户.
我要问的是哪个是请求权限获取的最佳解决方案,因为应用程序需要它(执行调用SetWindowsHook的进程).
拥有完全兼容的UAC应用程序需要采取哪些明确的行动?(我的意思是在构建和部署阶段?
例如,我使用mt.exe包含以下清单文件(使用VS2005):
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft- com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
security>
<applicationRequestMinimum>
<defaultAssemblyRequest permissionSetReference="Custom" />
<PermissionSet class="System.Security.PermissionSet" version="1" Unrestricted="true" ID="Custom" SameSite="site" />
</applicationRequestMinimum>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</asmv1:assembly>
Run Code Online (Sandbox Code Playgroud)
这对你好吗?不,因为它对我不起作用......
*
创建一个额外的用户帐户(但这也适用于Windows域)实际上是有意义的,具有管理员权限来执行受控环境.在没有记录任何用户的情况下创建工作会话(新的桌面工作站)也是可以接受的,但实际上我不知道是否可能.
你在一个问题中提出了很多问题.关于您的解决方案的架构,有许多不清楚的主题(我不清楚).对我来说,为什么你需要它也是绝对不清楚的SetWindowsHook.所以我试着只回答你问题的技术部分.
在没有提示UAC的情况下启动程序不是一个大问题,并且可以在表现形式方面得到提升.
从服务启动用户桌面上的进程,以便该进程不在用户凭据下运行,是棘手但可能的.我如何理解您在SYSTEM帐户下运行的服务.然后它有SE_TCB_NAME特权.该服务在会话0中运行(请参阅http://www.microsoft.com/whdc/system/sysinternals/session0changes.mspx).如果用户登录,他看到的进程在会话1或更高版本中运行.在Windows XP下,第一个登录的用户运行使用会话0,只有下一个登录(如果快速切换打开)使用会话1等.因此在任何操作系统上都需要启动其他会话的进程.为此,您应该使用SetTokenInformation带TokenSessionId参数的函数.我描述了从服务启动用户会话中的进程的详细信息.
在所有情况下,您应该监视用户登录和注销,并且应该获得用户会话ID以便能够在会话上启动进程.你可以用不同的方式做到这一点.最简单的方法之一是使用在自动启动中运行的应用程序(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run例如,注册为unter ).此应用程序与您的服务进行通信,您将模拟用户令牌和会话ID.另一种方法是使用系统事件通知服务(SENS)的ISensLogon2通知(请参阅http://msdn.microsoft.com/en-us/library/aa376863.aspx).
还有一个小问题.依赖于您在用户桌面上启动的进程所使用的帐户可能需要更改桌面和Windows Station对象的安全描述符OpenWindowStation,OpenDesktop并且SetUserObjectSecurity(请参阅http://msdn.microsoft.com/en-us/library/ ms681928.aspx,http://msdn.microsoft.com/en-us/library/ms687107.aspx和http://support.microsoft.com/kb/165194)