Technical Document #3

Technical Document #3        [Product Version: 6.1.1 and below]
When should I use WinDriver and when should I use KernelDriver?

It is generally recommended to use WinDriver whenever possible, since it enables you to develop and debug your code entirely in the user mode (without any need for kernel development knowledge), it supports more operating systems, and the driver you develop will be portable across all the supported operating systems.
Use KernelDriver when you need to write a standard operating system internal driver, which must be implemented in the kernel.

NOTE: When using WinDriver to develop for PCI/ISA, you can also move performance critical sections of your code to the kernel, by using the Kernel PlugIn feature (which is an inherent part of the WinDriver tool-kit, and is not be confused with the KernelDriver tool-kit).
Kernel PlugIn is available for Windows, Mac OS X, Linux, and Solaris (subject to the OS support in the specific WinDriver version that you are using).
Please also review Technical Document #17 for suggestions on how to improve your driver's performance with WinDriver.

The selection between WinDriver and KernelDriver should depend on the required architecture: If your application needs to talk to your hardware, choose WinDriver. If your hardware needs to be accessed by many applications as a standard device driver, or if your driver needs to communicate with the operating system or must be implemented in the kernel, choose KernelDriver.