用户对象/GDI对象/内核对象】的更多相关文章

1.GDI对象和核心对象之间最主要的区别在于GDI对象有单一拥有者,不是进程就是线程 2.核心对象可以有一个以上的拥有者,甚至可以跨进程,为了保持对每一位(拥有者)的追踪,核心对象保持了一个引用计数,以记录有多少handles对应到此对象,对象中也记录了哪一个进程或线程是拥有者. 3.当你调用CloseHandle()时,引用计数递减1,…
对象的分类 Windows的对象可以分为三种,分别是用户对象,GDI对象和内核对象.系统使用用户对象支持窗口管理,使用GDI对象支持图形,并使用内核对象支持内存管理,进程执行和进程间通信(IPC) .Windows通过句柄来标识各个对象资源. 区别 内核对象属于操作系统内核,存在于内核空间中不属于某个特定的进程.进程通过维护一张内核对象句柄表来访问各个内核对象,不同的进程之间可以访问同一个内核对象.GDI对象和用户对象属于进程,存在于用户空间中.虽然不能不同的进程中访问同一个GDI对象和用户对象…
1. 内核对象 Windows中每个内核对象都只是一个内存块,它由操作系统内核分配,并只能由操作系统内核进行访问,应用程序不能在内存中定位这些数据结构并直接更改其内容.这个内存块是一个数据结构,其成员维护着与对象相关的信息.少数成员(安全描述符和使用计数)是所有内核对象都有的,但大多数成员都是不同类型对象特有的. 2. 内核对象的使用计数与生命期 内核对象的所有者是操作系统内核,而非进程.换言之也就是说当进程退出,内核对象不一定会销毁.操作系统内核通过内核对象的使用计数,知道当前有多少个进程正在…
问题: 什么是内核对象? 答:内核对象实际上时由内核分配的一块内存,而且只能由内核来访问.它时一个数据结构,成员包含有关于该对象的信息.一些成员对于所有对象类型都是一样的,比如对象名称.安全描述.使用计数等,而大部分时针对某一特定对象类型的.比如进程对象ID.基本优先级和返回码. 内核对象 windows操作系统创建和管理着已下几种类型.   对象英文名称 对象中文名称 Event objects 事件对象 File-mapping objects 文件映射对象 File objects 文件对…
当一个进程被初始化时,系统要为它分配一个句柄表.该句柄表只用于内核对象 ,不用于用户对象或GDI对象. 创建内核对象 当进程初次被初始化时,它的句柄表是空的.然后,当进程中的线程调用创建内核对象的函数时,比如CreateFileMapping,内核就为该对象分配一个内存块,并对它初始化.这时,内核对进程的句柄表进行扫描,找出一个空项.由于表 3 - 1中的句柄表是空的,内核便找到索引1位置上的结构并对它进行初始化.该指针成员将被设置为内核对象的数据结构的内存地址,访问屏蔽设置为全部访问权,同时,…
      学好windows编程,理解内核对象还是至关重要的(●'◡'●).闲话不多说,下面先来了解一下关于内核对象的知识:       内核对象(kernel object):内核对象是用于管理进程.线程和文件等诸多种类的大量资源.       内核对象的分类:进程对象,线程对象,互斥量(mutex)对象,信号量(semaphore)对象,事件对象,作业对象,文件对象,文件映射对象,管道(pipe)对象,邮件槽(mailslot)对象,I/O完成端口对象,线程池工厂(thread pool …
目录 1 内核对象的概念 2 内核对象的使用计数 3 句柄 4 句柄表   项目工程代码中设计句柄的使用,一时不知句柄是何物,通过查阅自学之后,对句柄及其使用有一个初步的了解.分享出来,算是抛砖引玉吧.   在阐述句柄之前,先说明一下内核对象. 1 内核对象的概念   内核对象就是一个内存块,有内核分配,只能由内核访问.   内存块是一种数据结构,其中的数据成员负责维护该对象的相应信息,这个数据结构以及其中的数据成员只能由内核访问,应用程序是无法访问到的,更别说修改其中的数据成员了.   如何访…
内核对象&句柄 目录 1 内核对象的概念 2 内核对象的使用计数 3 句柄 4 句柄表   项目工程代码中设计句柄的使用,一时不知句柄是何物,通过查阅自学之后,对句柄及其使用有一个初步的了解.分享出来,算是抛砖引玉吧.  在阐述句柄之前,先说明一下内核对象. 1 内核对象的概念   内核对象就是一个内存块,有内核分配,只能由内核访问.   内存块是一种数据结构,其中的数据成员负责维护该对象的相应信息,这个数据结构以及其中的数据成员只能由内核访问,应用程序是无法访问到的,更别说修改其中的数据成员了…
使用内核对象进行线程同步. 前面我们介绍了用户模式下线程同步的几种方式.在用户模式下进行线程同步的最大好处就是速度非常快.因此当需要使用线程同步时用户模式下的线程同步是首选. 但是用户模式下的线程同步也存在缺点.如InterLocked系列函数只能对一个值进行操作.关键段虽然可以对一段代码进行操作,但是只能对同一个进程内的线程进行同步.为了解决上述问题,我们将会讨论使用内核对象进行线程同步. 与用户模式下的速度快相比较,使用内核对象进行线程同步性能很低.原因就是:在创建或清除内核对象时调用线程必…
1.每个内核对象都只是一个内存块,它由操作系统内核分配,并只能由操作系统内核访问.这个内存块是一个数据结构,其成员维护着与对象相关的信息. 2.调用一个会创建内核对象的函数后,函数会返回一个句柄,它标识了所创建的对象.在32位windows进程中,句柄是一个32位的值,在64位windows进程中,则是一个64位的值. 3.为了增强操作系统的可靠性,这些句柄值是与进程相关的,不可以直接跨进程使用. 4.内核对象的所有者是操作系统内核,而非进程,在进程内创建的内核对象在进程终止时不一定会被销毁.大…