十字星

  • 首页
  • 技术
  • 随笔
  • 瞎折腾
  • 平面设计
  • 文集
  • 留言
  1. 首页
  2. 技术
  3. 正文

管理员收不到普通权限的SendMessage消息

2022-04-19 31点热度 0人点赞 0条评论

windows用户界面特权隔离
  一个运行在较低特权等级的应用程序的行为就受到了诸多限制,它不可以:
  验证由较高特权等级进程创建的窗口句柄
  通过调用SendMessage和PostMessage向由较高特权等级进程创建的窗口发送Windows消息
  使用线程钩子处理较高特权等级进程
  使用普通钩子(SetWindowsHookEx)监视较高特权等级进程
  向一个较高特权等级进程执行DLL注入
  但是,一些特殊Windows消息是容许的。因为这些消息对进程的安全性没有太大影响。这些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

修复UIPI问题
  基于Windows Vista之前的操作系统行为所设计的应用程序,可能希望Windows消息能够在进程之间自由的传递,以完成一些特殊的工作。当这些应用程序在Windows 7上运行时,因为UIPI机制,这种消息传递被阻断了,应用程序就会遇到兼容性问题。为了解决这个问题,Windows Vista引入了一个新的API函数ChangeWindowMessageFilter。利用这个函数,我们可以添加或者删除能够通过特权等级隔离的Windows消息。这就像拥有较高特权等级的进程,设置了一个过滤器,允许通过的Windows消息都被添加到这个过滤器的白名单,只有在这个白名单上的消息才允许传递进来。
  如果我们想容许一个消息可以发送给较高特权等级的进程,我们可以在较高特权等级的进程中调用ChangeWindowMessageFilter函数,以MSGFLT_ADD作为参数将消息添加进消息过滤器的白名单。同样的,我们也可以以MSGFLT_REMOVE作为参数将这个消息从白名单中删除。例如:
在接收消息的主窗口中添加如下调用即可。

const int WM_COPYDATA = 74; 
/// <summary> 
/// 添加消息到过滤器,这相当于允许接收该消息。 
/// </summary> 
int MSGFLT_ADD = 1; 
/// <summary> 
/// 从过滤器中移除消息。这相当于阻止该消息。 
/// </summary> 
int MSGFLT_REMOVE = 2; 
[DllImport("user32")] 
static extern bool ChangeWindowMessageFilter(uint msg, int flags);

private void MainForm_Load(object sender, EventArgs e)
{//启动时添加到过滤器
    ChangeWindowMessageFilter(WM_COPYDATA, MSGFLT_ADD);
}

private void Form8_FormClosed(object sender, FormClosedEventArgs e)
{//关闭时从过滤器移除
    ChangeWindowMessageFilter(WM_COPYDATA, MSGFLT_REMOVE);
}

 

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: C# WinAPI WinForm
最后更新:2022-04-19

cxw

技术宅,最喜瞎折腾.

点赞
< 上一篇
下一篇 >

文章评论

取消回复

最新 热点 随机
最新 热点 随机
SQL Server 附加数据库出错,操作系统错误 5:"5(拒绝访问。)" 错误:5120 管理员收不到普通权限的SendMessage消息 Android Studio 多个真实设备无线调试 2022年夏天前最后一场雪? 易语言获取运行目录的上级目录 常用git命令记录
SQL Server 附加数据库出错,操作系统错误 5:"5(拒绝访问。)" 错误:5120
北京今天下雪啦 筛选DataTable中符合某一列条件的行 C# String类型JSON数组转为JArray类型 eclipse导入已存在web项目编译报错 Windows创建软连接 SQL2008对加密的存储过程解密
标签聚合
Linq Hyper-V WinForm WordPress Excel CentOS Linux C# IT PHP
最近评论
alex 发布于 1 年前(01月22日) 博主,请问把代码贴到博客里可以复制是怎么实现的

COPYRIGHT © 2021 十字星. ALL RIGHTS RESERVED

THEME KRATOS MADE BY VTROIS

京ICP备2020032489号-1