WIN7/8系统下程序接收不到WM_COPYDATA 消息的原因和解决
在WIN7/win8,如果发送消息的程序用户权限低于和接收消息的程序,则消
息无法传递。发送程序必须等于或者等于接收程序的权限。如发送与接收
是同一个用户,或者发送是管理员帐户,接收是是普通用户,这样就可以
成功。
以下内容摘自: http://blog.csdn.net/tian_jinping/article/details/12950077
正如我们前文所说,等级的划分,是为了防止以下犯上。所以,有了用户
界面特权隔离,一个运行在较低特权等级的应用程序的行为就受到了诸多
限制,它不可以:
验证由较高特权等级进程创建的窗口句柄
通过调用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
0x313, 0x31B (WM_???)
修复UIPI问题
基于Windows Vista之前的操作系统行为所设计的应用程序,可能希望
Windows消息能够在进程之间自由的传递,以完成一些特殊的工作。当这些
应用程序在Windows 7上运行时,因为UIPI机制,这种消息传递被阻断了,
应用程序就会遇到兼容性问题。为了解决这个问题,Windows Vista引入了
一个新的API函数ChangeWindowMessageFilter。利用这个函数,我们可以
添加或者删除能够通过特权等级隔离的Windows消息。这就像拥有较高特权
等级的进程,设置了一个过滤器,允许通过的Windows消息都被添加到这个
过滤器的白名单,只有在这个白名单上的消息才允许传递进来。
如果我们想容许一个消息可以发送给较高特权等级的进程,我们可以
在较高特权等级的进程中调用ChangeWindowMessageFilter函数,以
MSGFLT_ADD作为参数将消息添加进消息过滤器的白名单。同样的,我们也
可以以MSGFLT_REMOVE作为参数将这个消息从白名单中删除。例如:
在dtssm的主窗口中添加如下调用即可。
[DllImport("user32")]
public static extern bool ChangeWindowMessageFilter(uint msg, int
flags);
private void MainForm_Load(object sender, EventArgs e)
{
ChangeWindowMessageFilter(WM_COPYDATA, 1);
...
}
WIN7/8系统下程序接收不到WM_COPYDATA 消息的原因和解决的更多相关文章
- Tomcat 在win7/win8 系统下tomcat-users.xml.new(拒绝访问)解决方法
tomcat启动报错No UserDatabase component found under key UserDatabase 也可以这样处理 Tomcat 在win7/win8 系统下tomcat ...
- 如何查看Linux系统下程序运行时使用的库?
Linux系统下程序运行会实时的用到相关动态库,某些场景下,比如需要裁剪不必要的动态库时,就需要查看哪些动态库被用到了. 以运行VLC为例. VLC开始运行后,首先查看vlc的PID,比如这次查到的V ...
- Win7/Win8 系统下安装Oracle 10g 提示“程序异常终止,发生未知错误”的解决方法
我的Oracle 10g版本是10.2.0.1.0,(10.1同理)选择高级安装,提示“程序异常终止,发生未知错误”. 1.修改Oracle 10G\database\stage\prereq\db\ ...
- 解决Linux系统下程序找不到动态库的方法
思路:一般来说,通过make命令已经将程序依赖的动态库编译出来了,通过make install命令已经将动态库安装到系统的某个路径下.找没找到动态库就看这个路径是否包含在系统默认搜索动态库的路径中,如 ...
- win7(X64)系统下cuda7.5和VS2013的配置
&1 安装 cuda7.5文件:链接:http://pan.baidu.com/s/1bU2zIQ 密码:nvyw &2 环境变量 注意:CUDA_PATH是安装好cuda7.5之后会 ...
- 解决安装包在win7,win8系统下安装后运行没有管理员权限
今天打包一个程序在客户机上安装运行:一直报没有管理员权限:客户机是win8系统:直接右键管理员身份运行则都可以:为了避免不让用户每次都这么麻烦:只有问哈群友和百度,终于找到解决方法: 第一步:项目属性 ...
- WIN7 64位系统下,右下角的声音和电源图标不见的解决办法
近日,电脑突然出现任务栏右下角的声音和电源图标消失不见的问题,重启仍旧没有修复,后来找到了解决办法 解决办法: 1.Ctrl+Shift+Esc键调出windows资源管理器. 2.找到进程中的exp ...
- OpenEXR-2.2.0在Win7 x64系统下的安装方法
最近在研究openexr这种文件格式,免不得安装一下OpenEXR软件,这个软件是开源的,需要编译安装,我的安装方法是这样的,分享一下. 一:去官网http://www.openexr.com/dow ...
- Ubuntu 14.04 64bit 系统下打开PHPadmin时出现缺少mysqli|mysql 扩展的解决方法(php5)
网上找了很多方法,都是翻来覆去的抄袭. 都在说把 /etc/php5/apache2/php.ini 下面的 ;extension=php_mysqli.dll 前面的 ; 注释符号去掉 再重启 ...
随机推荐
- 理解js异步的概念
js引擎在执行的时候是单线程的,这是大家都知道的.我们先来看一段代码: <html> <head> <meta http-equiv="Content-Type ...
- UVA 1613 K-Graph Oddity
题意; 在一个n个点的无向连通图中,n是奇数,k是使得所有点的度数不超过k的最小奇数,询问一种染色方案,使得相邻点的颜色不同. 分析: k=所有点中最大的入度.如果最大入度是偶数,则k+1.每个点可选 ...
- Apache 日志配置,包含过滤配置
最近排查支付宝交易成功后异步通知执行失败的原因,需要查看Apache的日志,发现之前一直没对日志进行设置,结果日志文件都1.5G多了,于是搜索了如何按天记录日志. 但公司的网站是通过阿里云的SLB分发 ...
- Windows中的句柄
(一)句柄 在程序设计中,句柄(handle)是一种特殊的智能指针.当一个应用程序要引用其他系统(如数据库.操作系统)所管理的内存块或对象时,就要使用句柄. 句柄与普通指针的区别在于,指针包含的是引用 ...
- c语言合法标识符
#include <iostream>#include <stdio.h>using namespace std;char str[100][51];int main() { ...
- strcpy, mencpy, memmove三者区别
首先来看strcpy,目的是实现字符串的复制,这里需要注意几个点: 1.判断指针的有效性 2.将复制后的指针地址返回,为了支持链式操作 3.不要忘记将字符串最后一个自负'\0'复制给dest 4.注意 ...
- windows下安装NodeJs
1.官网(//nodejs.org/en/)下载系统匹配的文件 2.双击安装,完成后发现nodejs文件夹下面有npm, 直接用npm安装其他环境既可 3.如果配置了环境变量,直接Win+R后CMD调 ...
- makefile死磕笔记
开始我会插播一段我如何学习makefile的废话,如果不想听的话,请直接跳到我的makefile教程. 首先得先说明学习makefile真是一个痛苦的过程,尤其是用干巴巴的看书来学习的过程,简直可以用 ...
- webservice axis2客户端设置代理方法(公司网络通过代理访问时)
webservice axis2客户端设置代理方法(公司网络通过代理访问时) UploadProcessInServiceStub stub = new UploadProcessInServic ...
- ISO和UDF光盘格式、扩展ISO9660----Joliet和Romeo文件系统
ISO和UDF光盘格式.扩展ISO9660----Joliet和Romeo文件系统 刻录DVD盘,当文件大于2G的时候,Nero会提示NERO选文件时提示无法刻录这么大的文件,请转换格式.这到底是怎么 ...