1. 常见的内核对象: 事件对象、文件对象、I/O完成端口、邮件槽、互斥对象、进程对象、线程对象、信号量对象、可等待的计时器、线程池工厂对象。
  2. 一个对象是不是内核对象,通常可以看创建此对象API的参数中是否需要:PSECURITY_ATTRIBUTES 类型的参数。
  3. 内核对象是存在内核地址空间的一种数据结构(结构体),它由操作系统分配,而不是具体的某个进程管理。通过某种。共享机制,系统上所有的进程都共享这一块内存空间。应用程序不能直接操作内核对象,需要用Windows系统给定的函数来操作。每一个内核对象都有特定的创建函数和操作函数。
  4. 问题:操作系统内核的地址空间范围是多少?

    所以,在32位系统中,内核对象的内容被保存在0x80000000至0xFFFFFFFF的这个内核地址空间中)。在这一分区内的任何东西为所有进程共有。

  5. 进程的属性:使用计数和安全描述符。
  6. 进程间共享内核对象有以下三种方式:
  • 继承内核对象句柄
  • 命名内核对象
  • 复制DupilateHandle

继承内核对象句柄:只有在进程的父子关系的时候,才能使用对象句柄继承。并且只有在生成子进程的时候发生。

一般使用的是createprocess函数实现,注意的地方:

1.内核对象的SECURITY_ATTRIBUTES结构的binherithandle= true

2.createprocess函数的binherithandles=true.

结果是

1.子进程创建一个新的空的进程句柄表,复制项的位置和父进程完全一样。

2.内核对象的使用次数增加。

duplicatehandle : 在进程之间共享内核对象句柄的一种方法,该函数取得某个进程句柄表中的一个表项,然后把它拷贝到另一个进程的句柄表中。表面上是在复制句柄值,实际上是把该句柄在源进程句柄表中的所有项复制到目标进程的句柄表中,而且使该内核对象的计数器+1了,如果只是简单的只传句柄值,目标进程的句柄表中是不会有所增加的。

  1. 同一个内核对象在不同的进程中的句柄值不一定相同。(一般来说都不同)
  2. 一个进程在初始化的时候,系统会为它分配一个句柄表。最开始的时候,它的句柄表是空的。

  3. 每次进程的某个线程调用“Create***”成功后,内核句柄表会增加一项;调用CloseHandle会删除相应项。

共享内存 :

(也叫内存映射文件) 主要是通过映射机制实现的 , Windows 下进程的地址空间在逻辑上是相互隔离的 , 但在物理上却是重叠的 ; 所谓的重叠是指同一块内存区域可能被多个进程同时使用。

1.当调用 CreateFileMapping 创建命名的内存映射文件对象时 , Windows 即在物理内存申请一块指定大小的内存区域 , 返回文件映射对象的句柄 hMap ; 如:

Handle hmapobj = createfilemapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,SIZE,_T("SHARE"));

2.为了能够访问这块内存区域必须调用 MapViewOfFile 函数 , 促使 Windows 将此内存空间映射到进程的地址空间中 ;    如

mapviewoffile(hmapobj,FILE_MAP_WRITE,0,0,0);

3.当在其他进程访问这块内存区域时 , 则必须使用 OpenFileMapping 函数取得对象句柄 hMap , 并调用 MapViewOfFile 函数得到此内存空间的一个映射 , 这样系统就把同一块内存区域映射到了不同进程的地址空间中 , 从而达到共享内存的目的                               4.UnmapViewOfFile //从进程的地址空间撤销文件数据的映像

5. CloseHandle //关闭文件对象和文件映射对象

windows 内核对象核心知识点相关推荐

  1. Windows内核对象管理

    Windows内核情景分析:所有的分析都有ReactOS的源代码(以及部分由微软公开的源代码)作为依据:不清楚版本: 对象管理           Windows把一些核心功能作为内核对象来管理,这些 ...

  2. windows内核对象

    内核对象只是操作系统内核分配的一个内存块,并且只能由操作系统内核访问.该内存块是一种数据结构,它的成员负责维护该对象的各种信息.Windows提供一组函数创建和操作内核对象.调用一个创建内核对象的函数 ...

  3. windows 内核对象

    以前老是分不清内核对象,用户对象.最近研究了一下这2个对象的使用,特别是内核对象的使用. 在系统中,对象分两类:内核对象和用户对象. 内核对象:访问令牌对象,文件对象,文件映射对象,I/0完成端口对象 ...

  4. 内核对象句柄泄漏检测

    自制工具   翰华Box:https://hanhuabox.lanzous.com/b00zjq9uf 翰华Box - 开发日志:https://blog.csdn.net/qq_41517936/ ...

  5. 线程与内核对象的同步——Windows核心编程学习手札之九

    线程与内核对象的同步 --Windows核心编程学习手札之九 用户方式下的线程同步机制具有速度快的特点,但有其局限性,对于许多应用程序来说,并不合适.例如,互锁函数家族只能在单值上运行,根本无法使线程 ...

  6. 内核对象——Windows核心编程学习手札系列之三

    内核对象 --Windows核心编程学习手札系列之三 内核对象可供系统和应用程序使用来管理各种各样的资源,如进程.线程.文件等,是内核分配的一个内存块,只能又内核访问,该内存块是一种数据结构,它的成员 ...

  7. Windows核心编程学习九:利用内核对象进行线程同步

    注:源码为学习<Windows核心编程>的一些尝试,非原创.若能有助于一二访客,幸甚. 1.程序框架 #include "Queue.h" #include <t ...

  8. Windows核心编程 第九章 线程与内核对象的同步(下)

    9.4 等待定时器内核对象 等待定时器是在某个时间或按规定的间隔时间发出自己的信号通知的内核对象.它们通常用来在某个时间执行某个操作. 若要创建等待定时器,只需要调用C r e a t e Wa i ...

  9. Windows核心编程 第三章 内核对象

    第3章内核对象 在介绍Windows API的时候,首先要讲述内核对象以及它们的句柄.本章将要介绍一些比较抽象的概念,在此并不讨论某个特定内核对象的特性,相反只是介绍适用于所有内核对象的特性. 首先介 ...

  10. windows核心编程——第三章 内核对象

    3-1 什么是内核对象 1.每个内核对象只是内核分配的内存块,并且只能由该内存访问. 2.当调用一个用于创建内核对象的函数时,该函数返回一个句柄,用于标识内核对象.可以把此句柄传给windows的各个 ...

最新文章

  1. R语言常用包分类总结
  2. C语言 | 基于51单片机实现MPU6050的卡尔曼滤波算法(代码类1)
  3. Docker入门 - 005 Docker 容器连接
  4. qduoj - 今晚一起打CF吧——Codeforces,十三亿人的ACM梦。(排序背包)
  5. 平面设计和网页设计的规则_从平面设计到用户界面:这是您应该知道的最重要的规则
  6. vb 数组属性_VB中菜单编辑器的使用讲解及实际应用
  7. 并联串联混合的电压和电流_高考物理常考实验之电流表改装电压表怎么串联电阻...
  8. WEB2.0开发平台
  9. JAVA--位移运算符详细分析【转载】
  10. 模块电源(三):PCB Layout
  11. 关于.net 页面提交后 css失效或者部分失效的问题
  12. Android sendEmptyMessage(0)里面的“0”是啥意思?
  13. Nginx+PHP+MySQL+Ubuntu14.04 64位环境搭建
  14. 如何更好的理解用户反馈? | 上
  15. 基于SSM开发智夫子在线考试系统
  16. 语言表达的6c原则是指什么,2016年商务英语初级写作6C原则
  17. Python sklearn 实现过采样和欠采样
  18. ESET NOD32最新单机、企业中、英文版 + 个人专有ID(90天使用期)申请方法
  19. 最全电商分类信息(04)
  20. 每个广告组放多少个关键字合适?

热门文章

  1. 2018java面试集合
  2. 涨姿势,原来程序员喝酒都是这样的呀
  3. 关于编程语言的一点思考
  4. 【经验分享】卡方检验实战--检验次日留存率与用户分类的独立性
  5. Android接口回调
  6. Layui 表格table 第一次加载动态设置列
  7. PHP下载服务器上的文件
  8. 最近尝试移植了一下java.awt/javax.swing
  9. asm.jar各版本下载网站
  10. 编程基本功:创新是贬义词,与乱搞同义