首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨进程PostMessage、UIPI限制和UIAccess=“真”

跨进程PostMessage、UIPI限制和UIAccess=“真”
EN

Stack Overflow用户
提问于 2016-10-19 05:35:50
回答 1查看 3.8K关注 0票数 5

出于安全考虑,我的应用程序的UI模块使用high 强制性完整性级别运行。里面的一切都很好,除了一件事。为了与旧版本兼容,我需要允许用户向UI模块发出命令行调用。

目前,这一机制是这样运作的:

  1. Windows Explorer的快捷方式调用我的模块,例如: 路径到模块\module.exe -op="a,s,r“
  2. module.exe进程解析此命令行时,它将使用FindWindow通过其惟一的类名来定位UI模块的运行副本(或自定义的另一个副本)。然后它使用注册电文 API向它发送一个PostMessage
  3. 然后运行UI模块(具有high完整性级别),当它接收到消息时,相应地处理它。

问题是,因为运行中的UI模块副本具有high完整性级别,所以它无法从较低的完整性级别接收消息,或者在Windows运行该模块以解析快捷命令时无法接收该模块的副本,这使得它能够以medium完整性级别运行。

为了解决这个问题,我找到了这个UIAccess标志(请看这里,向下滚动到上面写着“UI自动化应用程序的UIAccess”)。

因此,我的假设是,如果设置此标志并对UI模块进行代码签名:

它将能够绕过我前面描述的UIPI限制。

它运行得很好:

但是我看到的是,当我从运行在PostMessage完整性级别的模块中调用ERROR_ACCESS_DENIED时,上面描述的算法中的medium API仍然失败。

我错过了什么?

EN

回答 1

Stack Overflow用户

发布于 2016-10-19 18:59:35

您所描述的内容将在Win32 API文档中介绍:

PostMessage函数

如果函数失败,则返回值为零。要获得扩展的错误信息,请调用GetLastError。当达到限制时,GetLastError返回ERROR_NOT_ENOUGH_QUOTA当消息被UIPI阻塞时,使用GetLastError检索的最后一个错误设置为5(访问被拒绝)。

其中UIPI是用户界面权限隔离

什么是用户界面特权隔离(UIPI) 这也被称为UI特权级别隔离(UIPI)。 作为Vista安全初始化的一部分,具有UI的应用程序将以三种不同级别的权限运行。应用程序窗口可以与同级或更低级别的其他窗口交互,但不能与较高级别/权限的应用程序交互。 只有在具有调用ChangeWindowMessageFilter()**.的消息的高级权限应用程序显式允许的情况下,低权限模式才能向高级特权应用程序发送消息此外,较低权限的应用程序只能读取高特权应用程序拥有的** HWND .。 Internet是一个运行在最低权限级别上的示例进程。 参考链接: http://msdn2.microsoft.com/en-us/library/ms632675.aspx http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnlong/html/AccProtVista.asp UIPI阻止低权限进程通过阻止以下行为访问较高权限进程。 低权限进程不能: -执行高级进程特权的窗口句柄验证。 - SendMessage PostMessage 到更高权限的应用程序窗口。这些应用程序编程接口(API)返回成功,但悄悄地删除窗口消息。 -使用线程挂钩连接到更高权限的进程。 -使用日志挂钩监视更高权限的进程。 -对较高权限进程执行动态链接库(DLL)-injection。 启用UIPI后,以下共享用户资源仍然在不同权限级别的进程之间共享。 -桌面窗口,它实际上拥有屏幕表面 -桌面堆只读共享内存 -全球原子表 -剪贴板

正如文档所述,更高权限的应用程序需要使用ChangeWindowMessageFilter()来允许来自低权限应用程序的特定窗口消息:

从用户界面特权隔离(UIPI)消息筛选器中添加或删除消息。

在Windows 7及更高版本上,改用ChangeWindowMessageFilterEx()

为指定的窗口修改用户界面特权隔离(UIPI)消息筛选器。

因此,在您的高级特权进程调用RegisterWindowMessage()以获取已注册的消息ID之后,它需要将该ID传递给ChangeWindowMessageFilter/Ex(),以便从较低权限的进程接收该消息。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40122964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档