基于对象

基于 Microsoft Windows NT 的操作系统基于对象。 执行中的各种组件定义一个或多个对象类型。 每个组件导出内核模式支持用于操作其对象类型的实例的例程。 任何组件都不能直接访问另一个组件的对象。 若要使用其他组件的对象,组件必须调用导出的支持例程。

此设计使操作系统既可移植又灵活。 例如,操作系统的未来版本可能会包含一个重新编码的内核组件,该组件定义相同的对象类型,但内部结构完全不同。 如果此假设的重新编码版本的内核导出了一组与现有集具有相同名称和参数的支持例程,则内部更改不会影响现有系统中任何其他执行组件的可移植性。

同样,若要保持可移植性和可配置性,驱动程序必须仅使用 WDK 中所述的支持例程和其他接口来与操作系统和彼此通信。

与操作系统一样,驱动程序也基于对象。 例如:

  • 文件对象 表示用户模式应用程序与设备的连接。

  • 设备对象 表示每个驱动程序的逻辑、虚拟或物理设备。

  • 驱动程序对象 表示每个驱动程序的加载映像。

I/O 管理器定义文件对象、设备对象和驱动程序对象的结构和接口。

与任何其他执行组件一样,驱动程序通过调用 I/O 管理器和其他系统组件导出的内核模式支持例程来使用对象。 内核模式支持例程通常具有标识每个例程操作的特定对象以及每个例程对该对象执行的操作的名称。 这些支持例程名称具有以下形式:

PrefixOperationObject

其中

前缀 标识导出支持例程的内核模式组件,通常标识定义对象类型的组件。 大多数前缀都有两个字母。

操作 描述对 对象执行的操作。

对象 标识对象的类型。

例如,I/O 管理器的 IoCreateDevice 例程创建一个设备对象,将物理、逻辑或虚拟设备表示为 I/O 请求的目标。

一个系统组件可以导出调用另一个组件的支持例程的例程。 这可以减少驱动程序必须发出的调用数。 I/O 管理器尤其会导出某些例程,以便更轻松地开发驱动程序。 例如, IoConnectInterruptEx(最低级别驱动程序调用注册其 ISR)调用 中断对象的内核支持例程。

对象不透明度

某些系统定义的对象是不 透明的:只有定义系统组件知道此类对象的内部结构,并且可以直接访问对象包含的所有数据。 定义不透明对象导出的系统组件支持驱动程序和其他内核模式组件可以调用的例程来操作该对象。 驱动程序永远不会直接访问不透明的对象结构。

注意 若要维护驱动程序可移植性,驱动程序必须使用系统提供的支持例程来操作系统定义的对象。 定义系统组件可以随时更改其对象类型的内部结构。