Differences in WDM Versions
The simplest way to ensure cross-system compatibility is to write a driver that uses only features that are supported by the lowest-numbered version of WDM. However, this is not always possible. Sometimes, drivers require additional code to take advantage of the features that are available in later versions of WDM, or to compensate for differences between Windows operating systems.
The Windows Driver Kit (WDK) reference page for each driver support routine indicates if the routine is restricted to specific versions of WDM, or if its behavior is different on different operating system versions. Before using any driver support routine in a cross-system driver, be sure to understand any version-specific restrictions or behaviors.
The following Plug and Play I/O request packet (IRP) is supported only in Windows 2000 and later versions of the NT-based operating system (WDM version 1.10 and later):
In addition, the following IRPs work differently on Windows 98/Me from how they work on the NT-based operating system:
The following power management functions and I/O requests differ in operation between the Windows 98/Me operating system and the NT-based operating system:
When completing power IRPs, drivers on Windows 98/Me must complete power IRPs at IRQL = PASSIVE_LEVEL, while drivers on the NT-based operating system can complete such IRPs at IRQL = PASSIVE_LEVEL or IRQL = DISPATCH_LEVEL.
The DO_POWER_PAGABLE flag in the DEVICE_OBJECT structure is used differently on the Windows 98/Me operating system than on the NT-based operating system.
Kernel-mode WDM drivers for Windows 98/Me must follow certain guidelines for using floating-point operations, MMX, 3DNOW!, or Intel's SSE extensions. For more information, see Using Floating Point or MMX in a WDM Driver.
Windows 98/Me provides a fixed number of worker threads that might not be adequate for some drivers.