正在加载图片...
对这些约定的严格遵守使得 Window Nt/ Windows2000具有移植性和伸缩性。例如,操作系 统将来的某个版本能包含一个完全或部分被重写的内核组件,这个组件定义了相同的对象 类型,但是可能使用了完全不同的内部结构,却可以输出一组具有与现存组件所输出的例 程相同名字和参数的支持例程。这个假定的被重写的内核版本将对现存系统中任何其他的 执行组件的移植性没有任何影响。换句话说,操作系统组件没有使用后门通讯,并且驱动 程序也必须避免这种使用,以保持系统的移植性和可配置性 与操作系统相似,驱动程序及其设备也是基于对象的。包括用户模式代码在内,对于系统 中所有其他的组件,对某个设备的连接被描述成I/0管理器的文件对象之一的打开操作 在I/0系统中,每一个驱动程序的逻辑、虚拟、和/或物理设备被描述为设备对象。在I/0 管理器中,每一个驱动程序的加载映像被描述成一个驱动程序对象。I/0管理器为文件对 象、设备对象和驱动程序对象定义对象类型 像任何其他的可执行组件,驱动程序通过调用内核模式支持例程来使用对象,这些支持例 程是由Ⅰ0管理器和其他系统组件输出的。内核模式支持例程通常拥有明确的名称,指明 了每次操纵的特定对象和在这个对象上执行的操作。这些支持例程名称的形式如下: PrefixOperationOb ject 这里 Preti 指明了输出支持例程的内核模式组件,并且还通常指明了定义对象类型的组件。大多数前 缀有两个字母 Operation 描述对这个对象作什么。 Object 指明对象类型 例如, IoCreateDevice,在设备初始化过程中每个内核模式驱动程序都要调用这个例程 次或多次,从名字可以看出,这个例程创建一个设备对象,以描述一个物理、逻辑、或虚 拟设备,作为I/0请求的目标。 为了方便起见,一个系统组件能输出调用其他组件的支持例程。特别是,I/0管理器输出 特定例程,以简化驱动程序开发。例如, IoConnectInterrupt是一个最低层的驱动程序调 用,被用来注册它们的中断服务例程(ISR),它调用针对中断的内核的支持例程 在线DDK中的术语表包括了一组系统对象的定义,它们对驱动程序开发者非常有用。关于 对最低层和中间层驱动程序特别有用的支持例程的详细信息,参见巛 Windows2000驱动程 序开发参考》的卷1和卷2,以及在线DDK 1.36带有可复用IRP的包驱动I/0 Ⅰ/O管理器的主要工作是接收I/0请求(通常来自用户模式应用程序)、创建IRP以描述 它们、发送IRP到合适的驱动程序、跟踪它们直到它们被完成,还有返回状态到每个1/0 操作的初始请求者。I/O管理器、即插即用管理器和电源管理器使用IRP与包括WM驱动 程序在内的内核模式驱动程序通信,并且允许驱动程序之间相互通讯 注意,一些IRP可以被发送到多个驱动程序。例如,一个在某个磁碟上打开文件的请求可 能首先到达文件系统驱动程序,通过中间层镜像驱动程序,最终到达磁盘驱动程序,可能 是一个PnP硬件总线驱动程序。 因此,每个IRP有一个固定的部分和一个或多个驱动程序特定的I/0栈位置( stack10 对这些约定的严格遵守使得 Window NT/Windows 2000 具有移植性和伸缩性。例如,操作系 统将来的某个版本能包含一个完全或部分被重写的内核组件,这个组件定义了相同的对象 类型,但是可能使用了完全不同的内部结构,却可以输出一组具有与现存组件所输出的例 程相同名字和参数的支持例程。这个假定的被重写的内核版本将对现存系统中任何其他的 执行组件的移植性没有任何影响。换句话说,操作系统组件没有使用后门通讯,并且驱动 程序也必须避免这种使用,以保持系统的移植性和可配置性。 与操作系统相似,驱动程序及其设备也是基于对象的。包括用户模式代码在内,对于系统 中所有其他的组件,对某个设备的连接被描述成 I/O 管理器的文件对象之一的打开操作。 在 I/O 系统中,每一个驱动程序的逻辑、虚拟、和/或物理设备被描述为设备对象。在 I/O 管理器中,每一个驱动程序的加载映像被描述成一个驱动程序对象。I/O 管理器为文件对 象、设备对象和驱动程序对象定义对象类型。 像任何其他的可执行组件,驱动程序通过调用内核模式支持例程来使用对象,这些支持例 程是由 I/O 管理器和其他系统组件输出的。内核模式支持例程通常拥有明确的名称,指明 了每次操纵的特定对象和在这个对象上执行的操作。这些支持例程名称的形式如下: PrefixOperationObject 这里 Prefix 指明了输出支持例程的内核模式组件,并且还通常指明了定义对象类型的组件。大多数前 缀有两个字母。 Operation 描述对这个对象作什么。 Object 指明对象类型。 例如,IoCreateDevice,在设备初始化过程中每个内核模式驱动程序都要调用这个例程一 次或多次,从名字可以看出,这个例程创建一个设备对象,以描述一个物理、逻辑、或虚 拟设备,作为 I/O 请求的目标。 为了方便起见,一个系统组件能输出调用其他组件的支持例程。特别是,I/O 管理器输出 特定例程,以简化驱动程序开发。例如,IoConnectInterrupt 是一个最低层的驱动程序调 用,被用来注册它们的中断服务例程(ISR),它调用针对中断的内核的支持例程。 在线 DDK 中的术语表包括了一组系统对象的定义,它们对驱动程序开发者非常有用。关于 对最低层和中间层驱动程序特别有用的支持例程的详细信息,参见《Windows 2000 驱动程 序开发参考》的卷 1 和卷 2,以及在线 DDK。 1.3.6 带有可复用 IRP 的包驱动 I/O I/O 管理器的主要工作是接收 I/O 请求(通常来自用户模式应用程序)、创建 IRP 以描述 它们、发送 IRP 到合适的驱动程序、跟踪它们直到它们被完成,还有返回状态到每个 I/O 操作的初始请求者。I/O 管理器、即插即用管理器和电源管理器使用 IRP 与包括 WDM 驱动 程序在内的内核模式驱动程序通信,并且允许驱动程序之间相互通讯。 注意,一些 IRP 可以被发送到多个驱动程序。例如,一个在某个磁碟上打开文件的请求可 能首先到达文件系统驱动程序,通过中间层镜像驱动程序,最终到达磁盘驱动程序,可能 是一个 PnP 硬件总线驱动程序。 因此,每个 IRP 有一个固定的部分和一个或多个驱动程序特定的 I/O 栈位置(stack
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有