标准驱动程序例程要求
设计内核模式驱动程序时,请记住以下几点:
每个驱动程序都必须具有 DriverEntry 例程,用于初始化驱动程序范围的数据结构和资源。 I/O 管理器在加载驱动程序时调用 DriverEntry 例程。
每个驱动程序必须至少有一个调度例程,用于接收和处理 I/O 请求数据包 (IRP) 。 对于驱动程序可以接收的每个 IRP 主要函数代码,每个驱动程序都必须在其DRIVER_OBJECT结构中放置调度例程的入口点。 驱动程序可以为每个 IRP 主要函数代码提供单独的调度例程,也可以具有一个或多个处理多个函数代码的调度例程。
每个 WDM 驱动程序都必须具有 Unload 例程。 驱动程序必须将 Unload 例程的入口点放在驱动程序的驱动程序对象中。 PnP 驱动程序的 Unload 例程的责任最小,但非 PnP 驱动程序的卸载例程负责释放驱动程序使用的任何系统资源。
每个 WDM 驱动程序都必须具有 AddDevice 例程,并在 驱动程序对象的驱动程序扩展 中定义其入口点。 AddDevice 例程负责为驱动程序控制的每个 PnP 设备创建和初始化设备对象。
驱动程序可以具有 StartIo 例程,I/O 管理器调用该例程来启动驱动程序已排队到系统提供的 IRP 队列的 I/O 操作。 任何没有 StartIo 例程的驱动程序都必须为其接收的 IRP 设置和管理内部队列,或者必须完成其调度例程中的每个 IRP。 如果高级驱动程序只是直接从调度例程将 IRP 传递给较低级别的驱动程序,则它们可能没有 StartIo 例程。
某些微型端口驱动程序是上述要求的例外情况。 有关微型端口驱动程序的要求的信息,请参阅 Windows 驱动程序工具包 (WDK) 中的特定于设备类型的文档。
例如,驱动程序是否具有任何其他类型的标准例程取决于其功能和该驱动程序如何适应系统 (例如,它是否与系统提供的驱动程序互操作) 。 有关详细信息,请参阅 WDK 中的特定于设备类型的文档。