内核对象
内核对象是系统提供的用户模式下代码与内核模式下代码进行交互的基本接口。
一个内核对象是一块内核分配的内存,它只能被运行在内核模式下的代码访问。
内核对象记录的数据在整个系统中只有一份,所以他们也成为系统资源。
使用内核对象是应用程序和系统进行交互的重要方式。
内核对象和普通的数据结构间的最大区别是其内部数据结构是隐藏的,必须调用一个对象服务才能从次对象中得到数据,或者是向其输出数据,而不能直接读或者改变对象内部的数据。这些限制能保证内核对象包含一致的状态。也允许Windows在不打断任何应用程序的情况下来添加、移除或改变这些数据结构中成员的值。
引入内核对象以后,系统可以方便地完成下面四个任务:
1.为系统资源提供可识别的名字
2.在进程间共享资源和数据
3.保护资源不会被未经认可的代码访问
4.跟踪对象的引用情况。
对象句柄
应用程序必须使用API函数来访问内核对象,调用函数创建对象时会返回标识此内核对象的句柄。可以想象此句柄是一个能够被进程中任何线程使用的一个不透明的值,很多API需要以它为参数,以便系统知道要操作哪一个对象。
这些句柄是进程相关的,仅对创建该内核对象的进程有效。如果将一个句柄通过某种机制传给其他进程中的线程,那么该线程以此句柄为参数调用相关的函数时就会失败。
当然,多个进程共享一个内核对象也是可能的,调用DuplicateHandle函数复制一个进程句柄传给其他进程即可。
使用计数
内核对象是进程内的资源,使用计数属性指明进程对特定内核对象的引用次数,当系统发现引用次数是0的时候,它会知道关闭资源。
内核对象是系统提供的用户模式下代码与内核模式下代码进行交互的基本接口。
一个内核对象是一块内核分配的内存,它只能被运行在内核模式下的代码访问。
内核对象记录的数据在整个系统中只有一份,所以他们也成为系统资源。
使用内核对象是应用程序和系统进行交互的重要方式。
内核对象和普通的数据结构间的最大区别是其内部数据结构是隐藏的,必须调用一个对象服务才能从次对象中得到数据,或者是向其输出数据,而不能直接读或者改变对象内部的数据。这些限制能保证内核对象包含一致的状态。也允许Windows在不打断任何应用程序的情况下来添加、移除或改变这些数据结构中成员的值。
引入内核对象以后,系统可以方便地完成下面四个任务:
1.为系统资源提供可识别的名字
2.在进程间共享资源和数据
3.保护资源不会被未经认可的代码访问
4.跟踪对象的引用情况。
对象句柄
应用程序必须使用API函数来访问内核对象,调用函数创建对象时会返回标识此内核对象的句柄。可以想象此句柄是一个能够被进程中任何线程使用的一个不透明的值,很多API需要以它为参数,以便系统知道要操作哪一个对象。
这些句柄是进程相关的,仅对创建该内核对象的进程有效。如果将一个句柄通过某种机制传给其他进程中的线程,那么该线程以此句柄为参数调用相关的函数时就会失败。
当然,多个进程共享一个内核对象也是可能的,调用DuplicateHandle函数复制一个进程句柄传给其他进程即可。
使用计数
内核对象是进程内的资源,使用计数属性指明进程对特定内核对象的引用次数,当系统发现引用次数是0的时候,它会知道关闭资源。