内存块是一种数据结构,内核对象&句柄
内核对象&句柄
项目工程代码中设计句柄的使用,一时不知句柄是何物,通过查阅自学之后,对句柄及其使用有一个初步的了解。分享出来,算是抛砖引玉吧。
在阐述句柄之前,先说明一下内核对象。
1 内核对象的概念
内核对象就是一个内存块,有内核分配,只能由内核访问。

内存块是一种数据结构,其中的数据成员负责维护该对象的相应信息,这个数据结构以及其中的数据成员只能由内核访问,应用程序是无法访问到的,更别说修改其中的数据成员了。
如何访问这些内核对象(内存块)呢?
操作系统为使用者封装了一组API,使用者可以通过这些API访问内核对象(内存块)。比如,创建内核对象(内存块)时,使用者调用API中的创建内核对象函数,由内核创建一个内核对象(分配一块内存)。
内核对象创建好之后,用一个句柄来标识该内核对象(内存块),这个句柄作为函数值返回。这个句柄就是个整数,32位机句柄就是32bit,64位机句柄就是64bit,同一进程中的任何线程都能使用这个句柄,当需要操作内核对象(内存块)时,通过API将这个句柄传给内核,内核就知道是对哪个内核对象(内存块)进行操作了。
创建内核对象,引出句柄。
2 内核对象的使用计数
在应用程序中,可能有多个进程,这些进程中的一个或多个可能会访问同一个内核对象。内核对象有使用就会有撤销,那么什么情况下内核会撤销某个内核对象呢。内核的使用计数就派上用场了。使用计数是内核对象这个数据结构的数据成员,通过使用计数就能知道该内核对象被多少个进程使用。开始创建内核对象时,使用计数置为1,之后每多一个不同的进程使用该内核对象,使用计数就自加1.
无论什么方式创建内核对象,我们都需要调用 ClosseHandle 向系统表明我们已经结束使用对象.就在 CloseHandle 函数返回前,它会清除进程句柄表中对应的记录项 -- 这个句柄现在对我们的进程来说是无效的,不要在试图利用它.换句话说,一旦调用 CloseHandle, 我们的进程就不能访问那个内核对象.
当进程关闭时,内核自动访问该进程仍然打开的内核对象的使用计数,该进程关联的每个内核对象的使用计数自减1,当使用计数减到0时,内核就会撤销该内核对象。
内核对象的使用计数有些像智能指针。
3 句柄
内核对象创建好之后,用一个句柄来标识该内核对象(内存块),这个句柄作为函数值返回。这个句柄就是个整数,32位机句柄就是32bit,64位机句柄就是64bit。
在同一进程中,一个句柄对应一个内核对象,我们在访问内核对象(内存块)时,就是通过句柄告诉内核,我要访问哪个内核对象。
通俗的说,句柄,就是个编号,操作系统对于我们来说就是个黑箱,我们通过句柄向操作系统要东西。
4 句柄表
当一个进程被初始化时,系统要为它分配一个句柄表.该句柄表只用于内核对象,不用于用户对象或GDI对象.句柄表也是由内核操作。进程表包含的元素如下所示:
索引 内核对象 内存块的指针访问屏蔽(标志位的DWORD) 标志(标志位的DWORD)
进程被初次初始化时,句柄表是空的。
当进程中的线程创建内核对象时,内核给该对象分配一块内存,并对其初始化。内核遍历该进程的句柄表,找出一个空闲位置,设置内核对象,内存块指针,访问掩码,标识,并获取该位置的索引,作为函数值返回,这个索引就是我们所说的句柄。这个句柄只能有同一个进程的所有线程使用, 系统用索引来表示内核对象的信息保存在进程句柄表中的具体位置。其他进程不能使用该进程的索引,因为句柄表不同(每个进程有一个单独的句柄表)。
所以,句柄实际上是句柄表的索引。可以这么理解,指针指向一块内存空间,那么句柄就是指向其对应的内核对象,通过操作系统提供的API吧句柄传给内核,内核就知道要操作那个内核对象。
内存块是一种数据结构,内核对象&句柄的更多相关文章
- 内核对象&句柄
目录 1 内核对象的概念 2 内核对象的使用计数 3 句柄 4 句柄表 项目工程代码中设计句柄的使用,一时不知句柄是何物,通过查阅自学之后,对句柄及其使用有一个初步的了解.分享出来,算是抛砖引玉吧 ...
- 【Windows 操作系统】 内核对象|句柄
内核对象简介 内核对象就是 一些数据结构该结构用来描述存储内核中的一个内存块中的数据信息. 内存块是一种数据结构,其中的数据成员负责维护该对象的相应信息,这个数据结构以及其中的数据成员只能由内核访 ...
- Windows进程的内核对象句柄表
当一个进程被初始化时,系统要为它分配一个句柄表.该句柄表只用于内核对象 ,不用于用户对象或GDI对象. 创建内核对象 当进程初次被初始化时,它的句柄表是空的.然后,当进程中的线程调用创建内核对象的函数 ...
- 【Windows 操作系统】Windows 进程的内核对象句柄表
总结: 1.句柄就是进程句柄表中的索引.2.句柄是对进程范围内一个内核对象地址的引用,一个进程的句柄传给另一个进程是无效的.一个内核对象可用有多个句柄.Windows之所以要设立句柄,根本上源于内存管 ...
- windows内核对象句柄
内核对象用于管理进程.线程和文件等诸多种类的大量资源,每一个内核对象都只是一个句内存快,它由操作系统内核分配,并只能右操作系统内核访问.这个内存块是一个数据结构,其维护着与对象相关的信息,其中少数成员 ...
- 内核对象&句柄&泄漏&检测
今天看到这个问题如何评价王垠的 <讨厌的 C# IDisposable 接口>? - 王垠(人物),答案被歪到windows 内核对象和句柄,答案中谈的太浅显而且有误.翻出陈年老文章(此文 ...
- 【旧文章搬运】Windows内核常见数据结构(内核对象)
原文发表于百度空间,2008-7-23========================================================================== 继续学习,继 ...
- Windows核心编程 第三章 内核对象
第3章内核对象 在介绍Windows API的时候,首先要讲述内核对象以及它们的句柄.本章将要介绍一些比较抽象的概念,在此并不讨论某个特定内核对象的特性,相反只是介绍适用于所有内核对象的特性. 首先介 ...
- 内核对象 windows操作系统
问题: 什么是内核对象? 答:内核对象实际上时由内核分配的一块内存,而且只能由内核来访问.它时一个数据结构,成员包含有关于该对象的信息.一些成员对于所有对象类型都是一样的,比如对象名称.安全描述.使用 ...
随机推荐
- “景驰科技杯”2018年华南理工大学程序设计竞赛 G. Youhane as "Bang Riot"(斜率DP)
题目链接:https://www.nowcoder.com/acm/contest/94/G 题意:中文题目,见链接 题解:设 sum[i] 为 a[i] 的前缀和,可得公式 dp[i] = min( ...
- Educational Codeforces Round 73 (Rated for Div. 2) C. Perfect Team
链接: https://codeforces.com/contest/1221/problem/C 题意: You may have already known that a standard ICP ...
- JDK、JRE、JVM的区别与关系
JDK JDK是Java开发工具包,是Sun Microsystems针对Java开发员的产品. JDK中包含JRE,在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和lib,在这里 ...
- 4、docker镜像:花卷结构、commit镜像
1.是什么 docker images 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码.运行时.库.环境变量和配置文件. ...
- 【Wince-禁止重复启动程序】Wince 不重复启动程序
创建类Mutex.cs: using System; using System.Linq; using System.Collections.Generic; using System.Text; u ...
- PHP大文件分片上传
前段时间做视频上传业务,通过网页上传视频到服务器. 视频大小 小则几十M,大则 1G+,以一般的HTTP请求发送数据的方式的话,会遇到的问题:1,文件过大,超出服务端的请求大小限制:2,请求时间过长, ...
- jQuery系列(七):导航栏实例
上代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- ZR#710
雷劈数 题意: 现在给出两个整数,求出位于两个整数之间的所有的"雷劈数. 解法: 因为雷劈数特殊的性质,所以在数据范围中的雷劈数实际很少,直接暴力打表就行. CODE: #include&l ...
- Netfilter 之 iptable_nat
初始化 iptable_nat_table_init函数通过调用ipt_register_table完成NAT表注册和钩子函数注册的功能:该流程与iptable_filter的函数调用的函数一致,此处 ...
- ubuntu进行apt-get时候出现Package ssh is not available, but is referred to by another package 错误
今天在ubuntu进行ssh安装的时候,出现如下错误. Reading package lists... Done Building dependency tree... Done Package s ...