WDM 版本的差异

确保跨系统兼容性的最简单方法是编写驱动程序,该驱动程序仅使用编号最低的 WDM 版本支持的功能。 但是,这并非始终可行。 有时,驱动程序需要其他代码来利用更高版本的 WDM 中提供的功能,或补偿 Windows 操作系统之间的差异。

驱动程序支持例程中的 WDM 差异

每个驱动程序支持例程的 Windows 驱动程序工具包 (WDK) 参考页指示该例程是否仅限于特定版本的 WDM,或者其行为是否在不同的操作系统版本上不同。 在跨系统驱动程序中使用任何驱动程序支持例程之前,请务必了解任何特定于版本的限制或行为。

即插即用中的 WDM 差异

以下即插即用 I/O 请求数据包 (IRP) 仅在 Windows 2000 及更高版本的基于 NT 的操作系统 (WDM 版本 1.10 及更高版本) 中受支持:

IRP_MN_SURPRISE_REMOVAL

此外,以下 IRP 在 Windows 98/Me 上的工作方式与它们在基于 NT 的操作系统上的工作方式不同:

IRP_MN_STOP_DEVICEIRP_MN_REMOVE_DEVICE

IRP_MN_QUERY_REMOVE_DEVICE

电源管理中的 WDM 差异

以下电源管理功能和 I/O 请求在 Windows 98/Me 操作系统和基于 NT 的操作系统的操作上有所不同:

PoSetPowerState

PoRequestPowerIrp

PoRegisterDeviceForIdleDetection

IRP_MN_QUERY_POWER

IRP_MN_SET_POWER

完成电源 IRP 时,Windows 98/Me 上的驱动程序必须在 IRQL = PASSIVE_LEVEL 完成电源 IRP,而基于 NT 的操作系统上的驱动程序可以在 IRQL = PASSIVE_LEVEL 或 IRQL = DISPATCH_LEVEL 完成此类 IRP。

DEVICE_OBJECT 结构中的 DO_POWER_PAGABLE 标志在 Windows 98/Me 操作系统上的使用方式不同于基于 NT 的操作系统。

Kernel-Mode驱动程序操作中的 WDM 差异

适用于 Windows 98/Me 的内核模式 WDM 驱动程序必须遵循使用浮点运算、MMX、3DNOW!或 Intel 的 SSE 扩展的某些准则。 有关详细信息,请参阅 在 WDM 驱动程序中使用浮点或 MMX

Windows 98/Me 提供固定数量的工作线程,这些线程对于某些驱动程序来说可能不够。