First, use WinDriver to develop and debug your driver in the user mode. After everything is working, see if there are performance problems related to user-mode overhead. Normally, the problems arise with interrupt handling and accessing I/O-mapped (not memory-mapped) cards (since memory can be accessed directly from the user model, which is very efficient — see Technical Document #74).

Now, follow the instructions in the WinDriver PCI User’s Manual for creating a Kernel PlugIn project and driving it from the user-mode application.
Generally, you have three main options for developing your Kernel PlugIn project (and the corresponding user-mode application that controls it):

    • Use the DriverWizard to generate a skeletal Kernel PlugIn project and user-mode application for your specific device (and then modify it as required). This option is available beginning with version 5.2.0 of WinDriver.


    • Use the source code of the sample WinDriver Kernel PlugIn driver (KP_PCI found in the v7.0.0+ WinDriver/samples/pci_diag/kp_pcidirectory; or KPTEST from the WinDriver/kerplug/kptest directory — for older versions of WinDriver) as a skeleton for your kernel project; move code from your user-mode driver to yourKernel PlugIn project; and add calls to your Kernel PlugIn driver from your user-mode application.


  • Write your own Kernel PlugIn project “from scratch” (and modify your user- mode application to driver it).