介绍
在早期版本的Windows中,同一个用户帐号下运行的进程共享相同的安全权限。例如,一个线程可以发送窗口信息到另一个线程中的窗口。从Windows Vista开妈这个并不总能正常工作。新特性权限级别被附加到进程上(也可以是其它特性)。进程不可以将消息窗口发送到具有更高权限级别的进程,尽管他们以运行于同一个用户帐号(例如当前登录用户)。
UIPI防止来自其它可能更高权限的线程中创建的windows消息进行恶意代码攻击。
显示UIPI
此问题在UAC(用户帐户控制)启用时最为清晰(默认情况下是启用的)。UAC中,一个管理员登录获取两个令牌对象:第一个是管理员令牌,具有最高权限(类似于Windows Vista以前版本的系统帐号),第二个令牌是过滤后的版本,带有标准用户权限。
默认情况下,进程用完整性级别为normal(UIPI 级别分为low,normal,high,和system)的标准用户启动。作为对比,进程使用管理员权限(例如,当用户右击“Run as Administrator”或用”runas”命令调用SheellExecute)使得进程具有high的权限级别。
如此,系统可以用使单一权限级别运行两种类型的进程(技术上讲用的是同一用户帐号)。UIPI支持低完整性级别(integrity level)的进程和更高级别的进程进行通信。
使用用Windows Sysinternals 的Process Explorer查看权限级别(https://www.microsoft.com/technet/sysinternals ) ,选择“Integrity Level”列


这里有个基于同一图片的两个进程的例子,其中一个用标准用户权限启动另一个使用管理员权限启动。注意他们是不同的完整性级别(integrity level)。
UIPI 施加限制
较低权限的应用程序不能做如下操作:
• 验证更高权限进程创建的窗口。调用 SendMessage 或 PostMessage到更高权限进程创建的窗口
• 使用线程钩子来附加一个更高权限的进程。
• 使用日志钩子(SetWindowsHookEx) 来监视更高权限的进程
• DLL注入到更高权限的进程。
下列windows消息永远是允许状态:
• 0x000 - WM_NULL
• 0x003 - WM_MOVE
• 0x005 - WM_SIZE
• 0x00D - WM_GETTEXT
• 0x00E - WM_GETTEXTLENGTH
• 0x033 - WM_GETHOTKEY
• 0x07F - WM_GETICON
• 0x305 - WM_RENDERFORMAT
• 0x308 - WM_DRAWCLIPBOARD
• 0x30D - WM_CHANGECBCHAIN
• 0x31A - WM_THEMECHANGED
• 0x313, 0x31B (WM_???)
UIPI 问题的修复
基于比Windows Vista更早的操作系统的应用程序会需要互相之前能传递消息。Windows Vista 引入了ChangeWindowMessageFilter API,这是已编档方法,用来添加或删除能通过隔离级别的消息。需要允许消息传递到更高权限的进程的窗口时,使用如下方法:
ChangeWindowMessageFilter(message, MSGFLT_ADD);
类似的标记MSGFLT_REMOVE从进程允许列表中删除消息。
Windows 7引入了一个新的函数ChangeWindowMessageFilterEx,相对于控制整个进程它可以在特定窗口控制允许消息:
BOOL ChangeWindowMessageFilterEx(
HWND hWnd, UINT message, DWORD action,
PCHANGEFILTERSTRUCT pChangeFilterStruct
);
事件的参数可以是MSGFLT_ALLOW (类似于ChangeWindowMessageFilter中的MSGFLT_ADD ), MSGFLT_DISALLOW (类似于MSGFLT_REMOVE),和 MSGFLT_RESET,将窗口重设成默认筛选器,可选的架构允许操作结果以接收更多的信息。
相关资源
• Application Compatibility Cookbook: https://msdn.microsoft.com/en-us/library/bb963893.aspx
• The Windows Vista and Windows Server 2008 Developer Story: https://msdn.microsoft.com/en-us/library/aa905330.aspx
• Edgar Barbosa: Windows Vista UIPI: http://www.coseinc.com/Vista_UIPI.ppt.pdf