详解窗口句柄,进程ID,进程句柄,窗口与进程之间的关系
窗口句柄:
在Windows或Linux等操作系统下窗口句柄对应着每个窗口的钥匙,例如,你要对某一个窗口进行操作,你必须知道你要操作哪一个窗口,这里就拿Windows做举例,Windows下几乎会创建许许多多个窗口,但是我们怎么知道我们操作的是哪个窗口?
答:就是窗口句柄,每个窗口在被创建出来之后就会被赋予一个句柄,该句柄(句柄实则上是一个指针)指向一个数据结构体,结构体里明确表示着该窗口的各种信息,窗口大小,窗口名等,当我们得到这个句柄时就可以请求操作系统对它做一系列操作,列如:移动窗口,关闭窗口,最小化最大化等,这些都是通过窗口句柄来告诉操作系统的,我们要对哪个窗口进行操作,而消息则是告诉操作系统要做什么样的操作,消息的附加参数就是操作值,列如移动窗口,会有附加的xy坐标参数!
进程ID:
进程ID是当一个进程被创建出来时系统内核为其分配的一个名字/绰号,且进程分配的首地址在GDT(局域的叫LDT,详细可以查看: 详解:物理地址,虚拟地址,内存管理,逻辑地址之间的关系)表中,进程ID会被保存到该进程的PCB进程控制块中(线程的会存放到:TCB线程控制块中,都是一个数据结构体包含:
- 程序计数器:接着要运行的指令地址。
- 进程状态:可以是new、ready、running、waiting或 blocked等。
- CPU暂存器:如累加器、索引暂存器(Index register)、堆栈指针以及一般用途暂存器、状况代码等,主要用途在于中断时暂时存储数据,以便稍后继续利用;其数量及类因电脑架构有所差异。
- CPU排班法:优先级、排班队列等指针以及其他参数。
- 村粗气管理:如标签页表等。
- 会计信息:如CPU与实际时间之使用数量、时限、账号、工作或进程号码。
- 输入输出状态:配置进程使用I/O设备,如磁带机。
),当操作系统想要操作某个进程时会通过进程ID来指定要操作哪个进程!
进程句柄:
进程句柄与窗口句柄不一样,这里先解释一下上面是进程句柄:进程句柄指向进程下的PCB进程控制块,当我们要对进程进行I/O操作时候时候需要知道进程的堆栈地址范围以及状态才能的值对应的LDT/GDT并转化为物理地址(或通过段选择符进行转换详细:详解:物理地址,虚拟地址,内存管理,逻辑地址之间的关系),操作系统才能为我们对该进程进行读写操作,所以一般我们会通过进程ID来获取进程句柄(临时的),来对进程进行操作。
操作系统会通过进程ID来遍历进程下的PCB进程控制块看一下该进程属于哪个GDT下的LDT表中,找到之后会将该进程的PCB进程控制块地址返回给获取者!
注意:进程ID在创建时就会规定好,其ID是按照进程创建顺序来分配的,用完后会被回收二次分配,进程句柄不是,当我们获取某个进程的句柄时,操作系统会将PCB进程控制块地址返回给获取者,获取者需要通过指针来接收它,指针占用的空间是占用的是自己进程下的!所以当我们用完释放,二次获取时候句柄的地址就会发生改变,但句柄指向的地址不会发生改变(是因为PE文件映射关系,详细请查看PE文件格式映射原理,在PE文件格式中PCB进程控制块的映射位置是:0x64(100)),句柄等于指针!
窗口与进程之间的关系
一个窗口对应一个进程,就拿人来做形容吧
人都有一个身体和大脑,身体是对外展示的,而大脑是在控制身体应该怎样对外展示,所以窗口就是对用户进行可视化界面交互的,而进程里的数据和指令在控制着窗口应该怎样交互!
详解窗口句柄,进程ID,进程句柄,窗口与进程之间的关系相关推荐
- R语言rms包生存分析之限制性立方样条(RCS, Restricted cubic spline)分析详解实战:拟合连续性自变量和事件风险之间的关系:基于survival包lung数据
R语言rms包生存分析之限制性立方样条(RCS, Restricted cubic spline)分析详解实战:拟合连续性自变量和事件风险之间的关系:基于survival包lung数据 目录
- python命令窗口在哪里_详解如何在cmd命令窗口中搭建简单的python开发环境
详解如何在cmd命令窗口中搭建简单的python开发环境 1.快捷键win+r输入cmd回车调出cmd界面,在命令行输入python回车,显示python命令无法识别 2.登陆python官网http ...
- [转]文件IO详解(二)---文件描述符(fd)和inode号的关系
原文:https://www.cnblogs.com/frank-yxs/p/5925563.html 文件IO详解(二)---文件描述符(fd)和inode号的关系 ---------------- ...
- Android NDK开发之旅(3): 详解JNI数据类型与C/C++、Java之间的互调
Android NDK开发之旅(3):详解JNI数据类型与C/C++.Java之间的互调 (码字不易,转载请声明出处:http://blog.csdn.net/andrexpert/article/d ...
- 查询数据的时候 提示事务(进程 ID **)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。
转自:https://blog.csdn.net/vip__888/article/details/6087850 =======================以下为原文内容============ ...
- 读写分离,读写分离死锁解决方案,事务发布死锁解决方案,发布订阅死锁解决方案|事务(进程 ID *)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务...
前言: 由于网站访问压力的问题,综合分析各种因素后结合实际情况,采用数据库读写分离模式来解决当前问题.实际方案中采用"事务发布"模式实现主数据库和只读数据库的同步, ...
- 转换cdm为mysql_详解PowerDesigner之CDM、PDM、SQL之间转换
详解PowerDesigner之CDM.PDM.SQL之间转换 前段时间用了下PowerDesigner做了一些辅助工作.在此特地小结一下: 有关CDM.PDM.SQL之间转换以及不同数据库之间库表S ...
- linux top命令及结果详解 top -p 查看Linux程序运行进程
ps -a top -p 进程id https://www.cnblogs.com/zhoug2020/p/6336453.html root@ecs-210833:~# ps -aPID TTY T ...
- php 父进程id,PHP pcntl_fork创建进程,复制父进程内存空间上下文
/** * Created by PhpStorm. * User: Sixstar-Peter * Date: 2019/2/28 * Time: 21:02 */ $a=1; $ppid=posi ...
最新文章
- [Node]node.js 文件操作
- python下载文件暂停恢复_python下载文件记录黑名单的实现代码
- Windows 技术篇-设置电脑启用或禁用开机按Ctrl+Alt+Del解除锁定
- Android自定义控件前导基础知识学习(一)——Canvas
- Android四级缓存,RecyclerView 源码四级缓存原理
- 2.【sheel学习】数组
- 程序员要如何学英语?
- jQuery.Callbacks之demo
- Linux 释放Linux 系统预留的硬盘空间
- android ffmpeg编译动态库,最简单的android studio调用ffmpeg动态库
- 2.1.1 物理层接口特性、数据通信模型、物理层基本概念(数据、信号、码元 、信源、信道、信宿 、速率、波特、带宽)(转载)
- 为什么耗资数亿的12306一直都非常难用?
- 并发编程的那些事。(一)
- 【Javascript Demo】图片瀑布流实现
- 有关于类的定义赋值与调用总结
- StretchDIBits
- 遗传算法的基本原理和方法
- [论文总结] 深度学习在农业领域应用论文笔记8
- CVPR2022Oral专题系列(一):低光增强
- python基础 class6(基本统计值计算、文本词频统计)
热门文章
- linux shell locate,shell学习之locate和find命令
- 基于java的企业人事管理系统的设计与实现_人事管理系统如何实现企业薪酬管理升级?...
- ubuntu 开启dhcp服务并配置
- win10安装Visual Studio Code(VSCode)
- oracle如何删除物理表空间,oracle 如何删除被误删物理文件的表空间
- python按位处理二进制文件_对如何在python shell中对16位二进制数执行按位运算感到困惑...
- springMVC+hibernate + layui分页
- layer mvc json 中文乱码处理
- 街篮服务器维修时间,全新花式技能系统 《街头篮球》春节前夕版本上线
- html一级子元素,获取子元素_html/css_WEB-ITnose