微软 Windows NT 操作系统是基于对象的。 执行组件中的各种组件定义一个或多个对象类型。 每个组件导出内核模式支持处理其对象类型的实例的例程。 任何组件都不能直接访问另一个组件的对象。 若要使用其他组件的对象,组件必须调用导出的支持例程。
此设计使作系统既可移植又灵活。 例如,将来版本的作系统可以包含一个重新编码的内核组件,该组件定义相同的对象类型,但内部结构完全不同。 如果此假设重新编码版本的内核导出一组与现有集具有相同名称和参数的支持例程,则内部更改不会影响现有系统中任何其他执行组件的可移植性。
同样,若要保持可移植性和可配置性,驱动程序必须仅使用 WDK 中描述的支持例程和其他接口来与作系统相互通信。
与作系统一样,驱动程序也是基于对象的。 例如:
文件对象 表示用户模式应用程序与设备的连接。
设备对象 表示每个驱动程序的逻辑、虚拟或物理设备。
驱动程序对象 表示每个驱动程序的加载映像。
I/O 管理器定义文件对象、设备对象和驱动程序对象的结构和接口。
与任何其他执行组件一样,驱动程序通过调用 I/O 管理器和其他系统组件导出的内核模式支持例程来使用对象。 内核模式支持例程的名称通常能够标识每个例程所操作的特定对象,以及每个例程在该对象上执行的具体操作。 这些支持例程名称采用以下形式:
PrefixOperationObject
其中
前缀 标识导出支持例程的内核模式组件,通常标识定义对象类型的组件。 大多数前缀有两个字母。
操作 描述在对象上执行的操作。
对象 标识对象的类型。
例如,I/O 管理器的 IoCreateDevice 例程创建一个设备对象,以将物理、逻辑或虚拟设备表示为 I/O 请求的目标。
一个系统组件可以导出调用另一个组件的支持例程的例程。 这可以减少驱动程序必须发出的调用数。 I/O 管理器(特别是)导出某些例程,以便更轻松地开发驱动程序。 例如,IoConnectInterruptEx 是最低级别驱动程序用来注册其 ISRs 的,它会调用内核支持例程以处理 中断对象。
对象不透明度
某些系统定义的对象 不透明:只有定义系统组件才知道此类对象的内部结构,并且可以直接访问对象包含的所有数据。 定义不透明对象的系统组件导出支持例程,让驱动程序和其他内核模式组件能够调用以操作该对象。 驱动程序永远不会直接访问不透明的对象结构。
注意 为了保持驱动程序的可移植性,驱动程序必须使用系统提供的支持例程来操作系统定义的对象。 定义系统组件可以随时更改其对象类型的内部结构。