求解,向别的进程的窗口发送消息的一些疑惑,不同进程之间句柄不应该是隔离的吗?

ll5161551615 2016-09-06 10:45:19
不同进程之间的句柄不应该是类似地址一样,是相互隔离的吗?比如,进程A及时获取了进程B的句柄,也不能访问进程A的内容啊,否则不就乱套了!同理进程A即使获取了进程B窗口的句柄,也不应该可以直接向进程B的窗口发送消息啊。但是这样貌似又是可以的,qq自动发送消息的原理就是直接获取了它的编辑框和发送按钮的句柄,然后发送消息的呢?求解,刚接触vc++,新手不太懂!!谢谢
...全文
236 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
ll5161551615 2016-09-09
  • 打赏
  • 举报
回复
引用 14 楼 jszj 的回复:
从某一方面说,资源分为两种:一种是进程内的,一种是整个操作系统内有效的。(这个分类的结果不准确,但从用户的角度来说,大致上可以这么理解) 在进程内的资源,就没办法直接跨进程访问,比如你要在A进程中访问B进程的地址 char *buffer = new char[100]; 那肯定是失败的。 对于整个操作系统内有效的资源,使用操作系统的全局标示符是可以不受进程的限制来访问的(不算权限本身的控制),比如这个窗口的句柄,就是整个操作系统内有效的,所以这个句柄你可以在任何一个进程中访问它,当然也包括向它发送消息什么的
谢谢 大大!!!
ll5161551615 2016-09-09
  • 打赏
  • 举报
回复
引用 8 楼 paschen 的回复:
[quote=引用 6 楼 ll5161551615的回复:][quote=引用 5 楼 paschen 的回复:] 系统管理的句柄在系统范围内是唯一的,窗口句柄就是唯一的,所以你可以给其他程序的窗口发消息
唯一的?句柄不应该像虚拟地址一样只在自己进程中有用才好吗,不然随意向别的进程窗口发消息,那不是就乱套了吗?[/quote] 句柄不是你程序进程管理,而是操作系统管理,如同线程句柄、进程句柄一样是操作系统管理, 这不叫乱套。[/quote] 谢谢 版主!!!
ll5161551615 2016-09-09
  • 打赏
  • 举报
回复
谢谢 大家 明白了 !!
red-fly 2016-09-08
  • 打赏
  • 举报
回复
从某一方面说,资源分为两种:一种是进程内的,一种是整个操作系统内有效的。(这个分类的结果不准确,但从用户的角度来说,大致上可以这么理解) 在进程内的资源,就没办法直接跨进程访问,比如你要在A进程中访问B进程的地址 char *buffer = new char[100]; 那肯定是失败的。 对于整个操作系统内有效的资源,使用操作系统的全局标示符是可以不受进程的限制来访问的(不算权限本身的控制),比如这个窗口的句柄,就是整个操作系统内有效的,所以这个句柄你可以在任何一个进程中访问它,当然也包括向它发送消息什么的
赵4老师 2016-09-07
  • 打赏
  • 举报
回复
楼主的打算是不可取的。 带着问题看书学习才有动力。
ll5161551615 2016-09-07
  • 打赏
  • 举报
回复
引用 5 楼 paschen 的回复:
系统管理的句柄在系统范围内是唯一的,窗口句柄就是唯一的,所以你可以给其他程序的窗口发消息
唯一的?句柄不应该像虚拟地址一样只在自己进程中有用才好吗,不然随意向别的进程窗口发消息,那不是就乱套了吗?
paschen 2016-09-07
  • 打赏
  • 举报
回复
系统管理的句柄在系统范围内是唯一的,窗口句柄就是唯一的,所以你可以给其他程序的窗口发消息
ll5161551615 2016-09-07
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
研读《Windows核心编程》
现在正在看windows程序设计,打算先把这个看了再看windows核心编程。大神,能解释一下我上面的疑问吗?或者能否说一下windows核心编程大概哪个章节有这方面的解释呢,谢谢
ll5161551615 2016-09-07
  • 打赏
  • 举报
回复
没大神能解释一下吗…
Dobzhansky 2016-09-07
  • 打赏
  • 举报
回复
不同于内核对象(文件,管道,套接字,同步对象等), 用户对象(窗口对象,gdi对象), 比如窗口,菜单,光标和加速键, 是由会话(session)上的窗口管理器管理的。

关于 user 对象, gdi 对象和 内核对象的详细介绍, 参见 https://msdn.microsoft.com/en-us/library/ms810501.aspx
赵4老师 2016-09-07
  • 打赏
  • 举报
回复
研读《Windows核心编程》
lx624909677 2016-09-07
  • 打赏
  • 举报
回复
句柄是相对于一个操作系统来说具有唯一性,而内存地址空间是相对于进程的,每个进程都有自己独立的内存空间
太上绝情 2016-09-07
  • 打赏
  • 举报
回复
窗口句柄是特殊的,可以跨进程
encoderlee 2016-09-07
  • 打赏
  • 举报
回复
事实就是这样,我们可以随意向其它进程的窗口发消息,通过ReadProcessMemory和WriteProcessMemory还可以随意读写其它进程的私有内存,游戏外挂就是通过这些手段搞出来的。
encoderlee 2016-09-07
  • 打赏
  • 举报
回复
windows窗口句柄和消息机制这一块是做了特殊处理的,比如发送WM_SETTEXT消息,windows会进行判断,如果是跨进程,其内部会使用内存共享技术将字符串拷贝到另一个进程中。其它句柄没有做特殊处理,所以不能跨进程使用。
paschen 2016-09-07
  • 打赏
  • 举报
回复
引用 6 楼 ll5161551615的回复:
[quote=引用 5 楼 paschen 的回复:] 系统管理的句柄在系统范围内是唯一的,窗口句柄就是唯一的,所以你可以给其他程序的窗口发消息
唯一的?句柄不应该像虚拟地址一样只在自己进程中有用才好吗,不然随意向别的进程窗口发消息,那不是就乱套了吗?[/quote] 句柄不是你程序进程管理,而是操作系统管理,如同线程句柄、进程句柄一样是操作系统管理, 这不叫乱套。
ll5161551615 2016-09-06
  • 打赏
  • 举报
回复
多谢 多谢 哈

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧