vista之后的windows引入了UAC(用户账户控制),意味着在同一个windows用户账号下,允许用户进程在运行时拥有不同的权限级别。而且低级别的进程不能向高级别进程发送消息,完成这件事情的技术叫做UIPI(用户界面特权隔离)。

如果在实际项目中出现了这种两个进程间无法发送消息时,应该第一时间排查是否是因为进程运行权限导致的问题。最简单直观的方式可以通过提升各自软件的权限看是否还存在这种问题。当然最好还是借助下工具,可以把问题看得更加透彻。推荐使用Windows Sysinternals 的Process Explorer查看权限级别。具体使用方法如下:

运行软件后选择添加列:

通过查看Integrity(完整性)列,既可以看出来各个进程运行时权限。

在确定是该问题后,如何解决呢?其实微软为了兼容之前版本的软件,已经提供了api帮助处理这种情况,具体的api是ChangeWindowMessageFilter和ChangeWindowMessageFilterEx,可以自行查看msdn。

如果我们想容许一个消息可以发送给较高特权等级的进程,我们可以在较高特权等级的进程中调用ChangeWindowMessageFilter函数,以MSGFLT_ADD作为参数将消息添加进消息过滤器的白名单。同样的,我们也可以以MSGFLT_REMOVE作为参数将这个消息从白名单中删除。

顺便说明下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

PostMessage,SendMessage跨不同权限进程通信相关推荐

  1. IBinder跨进程通信

    1. IBinder跨进程通信文件的创建 1.1 aidl文件编写 as可以通过右键创建一个aidl,方便我们进行操作.正常创建的过程是在 main文件夹下创建和 java文件下同包名的包,然后创建后 ...

  2. Android IPC 进程进程间通信或跨进程通信

    Android IPC 机制 老话长谈,趁现在有时间对IPC做一个具体的总结. IPC是Inter-Process Communication的缩写,含义就是进程间通信或者跨进程通信,是指两个进程之间 ...

  3. Android跨进程通信

    一 多进程之间的通信 由于不同进程所拥有的地址是两块不同的地址空间,所以不能直接通过共享内存共享数据了. Linux常用跨进程通信方式:管道,信号量,共享内存,socket Android常用跨进程通 ...

  4. ifrme嵌入外部页面,在外部页面调用本页面方法,window.postMessage实现跨域通信

    项目场景:vue页面开发的系统要继承外部系统页面,并且在外部系统页面调用本系统的方法,这样来看的话肯定会存在跨域的问题,而且直接调用方法的话,也不太安全,后来了解到window.postMessage ...

  5. 【朝花夕拾】Android跨进程通信总结篇

    前言 原文:https://www.cnblogs.com/andy-songwei/p/10256379.html 只要是面试高级工程师岗位,Android跨进程通信就是最受面试官青睐的知识点之一. ...

  6. 【朝花夕拾】Android性能篇之(七)Android跨进程通信篇

    前言 转载请声明,转自[https://www.cnblogs.com/andy-songwei/p/10256379.html],谢谢! 只要是面试高级工程师岗位,Android跨进程通信就是最受面 ...

  7. 【朝花夕拾】Android性能篇之(七)Android跨进程通信篇...

    前言 原文:https://www.cnblogs.com/andy-songwei/p/10256379.html 只要是面试高级工程师岗位,Android跨进程通信就是最受面试官青睐的知识点之一. ...

  8. linux 跨进程读取内存,Android之Linux跨进程通信的方式

    As we all know,Android是基于Linux内核开发的,而市面上几乎所有的App都离开跨进程通信.可能你会说Android是通过Binder完成进程之间的通信的.但是Binder是怎么 ...

  9. Android跨进程通信Binder机制与AIDL实例

    文章目录 进程通信 1.1 进程空间划分 1.2 跨进程通信IPC 1.3 Linux跨进程通信 1.4 Android进程通信 Binder跨进程通信 2.1 Binder简介 2.2 Binder ...

最新文章

  1. 国内最牛的Java面试八股,真offer收割机!
  2. TensorFlow教程:快速入门深度学习五步法(附Keras实例)
  3. linux samba安装失败,用aptitude安装samba失败
  4. JDownloader 2 for Mac(百度云无限速下载工具)内附安装教程,需要 macOS 11.x系统
  5. nod32 破解的用户名密码
  6. IDEA Jrebel 激活方法
  7. 2013计算机核心期刊,2013年度发表国内核心期刊论文
  8. 读取阿里云服务器图片到本地
  9. 富龙飞联手文创产业研究所,推出国内首个AR+文创建设应用系统
  10. JAVA javaweb JSP水果管理系统源码(水果进销存管理系统水果管理系统(水果进销存)
  11. vsCode使vue中的代码高亮
  12. 大数据实战【千亿级数仓】阶段三
  13. Halcon与C#混合编程--打开笔记本摄像头实时采集
  14. 传奇Newoupui-pak配置失败怎么处理?
  15. SBT项目配置依赖树查询组件
  16. 观影网站影评信息管理系统
  17. (有假币,因子个数)笔试强训
  18. 电子工程师必备技能,根据文件图或者实物进行PCB原理图的反推
  19. BERT and beyond
  20. OFD助力制造业数字化发展—福昕鲲鹏出席2021世界制造业大会

热门文章

  1. golang安装protobuf 2022最新安装教程(windows)
  2. 电子白板简单实现delphi
  3. 手机平台继续掰手腕!
  4. Canvas绘制曲线
  5. memcache-client-for java下载安装及使用
  6. 漏洞复现篇——利用XSS漏洞实现多种网络钓鱼方法
  7. C#_Unit Testing 一(xUnit)
  8. 使用广播信道的数据链路层--CSMA/CD 协议
  9. excel截取前、中、后几个字符串的方法
  10. Linux 测试 IO 性能(磁盘读写速度)