Jungo WinDriver  
Official Documentation
Chapter 1: Overview

This chapter outlines general WinDriver information, architecture, supported busses and operating systems, as well as what the toolkit package includes.

ℹ️ Note

‍This manual outlines WinDriver's support for PCI/ISA/EISA/CompactPCI/PCI Express devices as well as the Universal Serial Bus (USB).

1.1. Introduction

Since its release to the market in 1998, WinDriver has been providing a development solution that dramatically simplifies the task of creating high-performance custom device drivers and hardware-access applications. WinDriver includes a DriverWizard - a graphical diagnostics tool - that automatically detects your hardware, and using which you can generate skeletal diagnostics code for your device, providing you with convenient wrapper functions that utilize WinDriver’s API to communicate with your specific device. Furthermore, you can review various samples provided with WinDriver to see if there is a sample that may serve as a skeletal basis for your driver application. The driver and application you develop using WinDriver are source code compatible across all supported operating systems. WinDriver allows you to create your driver in the familiar user-mode environment, using MS Visual Studio, CMake, GCC, Windows GCC, or any other appropriate compiler or development environment, generating the driver code for the project in C, C#, Java and Python.

WinDriver supports development for all PCI/ISA/EISA/CompactPCI/PCI Express chipsets, along with all USB chipsets, and offers enhanced support for specific chipsets, for instance Xilinx, on Windows, Linux and Mac OS.

WinDriver enables all development to be done in the user mode, utilizing our low-level kernel driver(s), and thus frees you of the need for any kernel and/or OS-specific driver development knowledge, such as familiarity with the Windows Driver Kit (WDK).

Don't let the size of this manual fool you. WinDriver makes developing device drivers an easy task that takes hours instead of months, providing stability and technical support both during and after the development process. A part of this manual deals with the features that WinDriver offers to advanced users. However, most developers will find that reading these chapters and glancing through the DriverWizard and function-reference chapters is all they need to successfully write their driver.

Chapter 2: Understanding Device Drivers gives a general overview of device drivers.

Chapter 3: Installing WinDriver explains WinDriver installation and uninstallation steps.

Chapter 4: PCI Express Overview and Chapter 5: USB Overview - PCIe and USB overview, architecture and other details respectively.

Chapter 6: Using DriverWizard provides detailed driver development guidance using DriverWizard.

Chapter 7: Developing a Driver and Chapter 8: Debugging Drivers deal with driver development and dubbuging.

Chapter 9: Enhanced Support for Specific Chipsets focuses on special support for Altera Qsys, Avalon-MM designs; Xilinx BMD, XDMA, QDMA designs.

Chapter 10: PCI Advanced Features describes special PCI features like DMA transfer, interrup handling and much more.

Chapter 11: Improving PCI Performance talks about performance enhancement for already written and debugged drivers.

Chapter 12: Understanding the Kernel PlugIn and Chapter 13: Creating a Kernel PlugIn Driver - Kernel PlugIn chapter, a special WinDriver feature that allows critical sections of the driver code to be moved to the kernel in order to enhance its performance even more.

Chapter 14: USB Advanced Features dives into USB data transfer matters.

Chapter 15: Distributing Your Driver and Chapter 16: Dynamically Loading Your Driver guide through WinDriver-written drivers distribution process as well as an option of creating a dynamically loadable driver, which enables your customers to start your application immediately after installing it, without the need for reboot a computer.

Chapter 17: Driver Installation — Advanced Issues clarifies important issues such as INF creation, digital signature for drivers and more.

Data Structures and Files are WinDriver APIs information.

Visit [Jungo's] (https://www.jungo.com) website for the latest news about WinDriver and other products that Jungo offers.

1.2. Main Features

WinDriver features include:

  • Hardware diagnostics by DriverWizard.
  • Automatic generation and detailed samples of the driver code in C, C#, Visual Basic.NET, PowerShell, Java and Python.
  • Enhanced support for specific chipsets.
  • Binary compatible applications.
  • Source code applications compatible across all supported operating systems.
  • Common IDE support.
  • Driver creation with no WDK, ETK, DDI or any system-level programming knowledge required.
  • Kernel-Mode Performance.
  • I/O, DMA, interrupt handling and access to memory-mapped cards.
  • Support for multiple CPUs and PCI bus platforms.
  • Any USB device support, regardless of manufacturer.
  • 64-bit PCI data transfer support.
  • Dynamic driver loader.
  • Comprehensive documentation and help files.
  • Compliance with the Microsoft Windows Certification Program.
  • Technical support.
  • No run-time fees or royalties.

1.3. Architecture

PCI WinDriver Architecture

USB WinDriver Architecture

For hardware access, your application calls one of the WinDriver user-mode functions. The usermode function calls the WinDriver kernel module, which accesses the hardware for you through the native calls of the operating system.

1.4. Supported Platforms

WinDriver supports the following operating systems:

  • Windows 11, 10, 8/8.1, Windows 10 IoT, Server 2016, Server 2012 R2, Server 2012, henceforth collectively referred to as "Windows".
  • Linux kernel version 2.6.x or higher, Linux ARM
  • MacOS 10.10-12.

The same source code will run on all supported platforms — simply recompile it for the target platform. The source code is binary compatible across Windows 11/10/Server 2016/8.1/Server 2012 R2/8/Server 2012. WinDriver executables can be ported among the binary-compatible platforms without recompilation.

Even if your code is meant only for one of the supported operating systems, using WinDriver will give you the flexibility to move your driver to another operating system in the future without needing to change your code.

⚠ Attention

‍OS-specific support is provided only for operating systems with official vendor support. In order to see which operating system and its version are supported by the vendor, please refer to the vendor's website respectively.

1.5. Linux ARM

WinDriver PCI/USB for Linux ARM automates and simplifies the development of Linux ARM device drivers for PCIe/PCI-X/PCI-104/CompactPCI and USB.

WinDriver was built and tested on the following platforms and OSes. Jungo can offer support for other platforms upon request sent to WinDr.nosp@m.iver.nosp@m.@jung.nosp@m.o.co.nosp@m.m

  • ARM Cortex A7 – Broadcom: Raspberry PI 2/3/4 : running Raspbian Stretch with kernel version 4.14.79-v7+. PI 4b: running Raspbian with kernel version 4.19.75-v7l+
  • ARM Cortex A9 – Solid Run: I.MX6 MicroSoM i2 (Hummingboard2) running ARMbian’s Ubuntu Xenial Desktop Kernel Version 4.11.6-cubox
  • ARM Cortex A9 – Boundary: BL-SL-I.MX6 (formerly Sabre LITE) running Debian nitrogen kernel version 4.9.88-6-boundary-14s
  • ARM Cortex A15 – NVidia: Jetson TK1 running Ubuntu 16.04 kernel version 3.10.40-g8c4516e
  • ARM64 Cortex A53 – Broadcom: Raspberry PI 3b+ – running 64bit Xubuntu 18.04 kernel version 4.15.0-1010-raspi2 or Ubuntu Server 18.04.2 kernel version 4.15.0-1033-raspi2
  • ARM64 Cortex A57 – NVidia: Drive PX2 running Ubuntu 18.04 kernel version 4.9.38-rt25-tegra
  • ARM64 Cortex A57 – NVidia: Jetson TX2 running Ubuntu 16.04 kernel version 4.4.38-tegra
  • ARM64 v8.2 – NVidia: Jetson NX Xavier / Jetson AGX Xavier running Ubuntu 18.04 kernel version 4.9-tegra

1.6. Operating Systems Support Overview

All version information in this document relates to both WinDriver for PCI/ISA and WinDriver for USB, unless otherwise specified.

USB 2.0 is supported beginning with version 5.0.4.

USB 3.0 is supported beginning with version 11.4.0.

USB 3.1 is supported beginning with version 14.2.0.

Operating System Supported WinDriver Versions
Windows 10 IoT Core Windows 10 IoT Core (x32/x64/ARM) is supported from version 12.7.0 until version 14.7.0.
Windows Server 2022 Windows Server 2022 is supported from version 15.1.0.
Windows Server 2019 Windows Server 2019 is supported from version 14.2.1.
Windows Server 2016 Windows Server 2016 is supported from version 12.0.0.
Windows 11 Windows 11 x64 is supported from version 15.0.0.
Windows 11 ARM64 is supported from version 16.1.0.
Windows 10 Windows 10 x32 is supported from version 12.0.0 to version 16.2.0.
Windows 10 x64 is supported from version 12.0.0
Windows 10 ARM64 is supported from version 16.1.0.
Windows 10 Technical Preview build 10162 was supported in version 11.9.0.
Windows 8.1 Windows 8.1 x32 and x64 are supported from version 11.4.0 to version 16.0.0.
Windows Server 2012 R2 Windows Server 2012 x32 and x64 are supported from version 11.4.0 to version 16.0.0.
Windows 8 Windows 8 x32 and x64 are supported from version 11.0.0 to version 14.3.0.
Windows Server 2012 Windows Server 2012 x32 and x64 are supported from version 11.0.0 to version 14.3.0.
Windows 7 Windows 7 x32 and x64 are supported from version 10.1.0. to version 14.3.0.
Windows 7 Service Pack 1 is supported from version 10.3.1 to version 14.3.0.
Windows Server 2008 R2 Windows Server 2008 R2 x32 and x64 are supported from version 10.1.0 to version 14.3.0.
Windows Server 2008 R2 Service Pack 1 is supported from version 10.3.1 to version 14.3.0.
Windows Vista Windows Vista x32 and x64 are supported from version 8.1.0 to version 12.2.1.
Windows Vista Service Pack 1 is supported from version 10.0.0 to version 12.2.1.
Windows Server 2008 Windows Server 2008 x32 and x64 are supported from version 10.0.0 to version 14.3.0.
Windows Server 2003 Windows Server 2003 x64 is supported from version 8.0.0 to version 12.2.1.
Windows Server 2003 x32 is supported from version 6.0.2 to version 12.2.1.
Windows XP Windows XP x64 is supported from version 8.0.0 to version 12.2.1.
Windows XP Service Pack 3 is supported from version 10.0.0 to version 12.2.1.
Windows CE Windows Embedded Compact 2013 (a.k.a. Windows CE 8, WEC2013 or Windows CE 2013) is supported on x86 and ARM platforms from version 11.7.0 to version 12.3.0.
Windows Embedded Compact 7 (a.k.a. WEC7 or Windows CE 7) is supported from version 10.4.0 to version 12.3.0.
Windows Embedded CE 6.0 is supported from version 9.0.0 to version 12.3.0.
Windows CE 5.0 is supported from version 6.2.2 to version 12.3.0.
Windows CE 4.x is supported from version 6.0.0 to 12.3.0.
Windows CE 2.x–3.x is supported for PCI/ISA from version 4.1.2 to 6.0.3.
MacOS (PCI) MacOS 10.5 + 10.6 is supported for PCI from version 10.2.0 to version 10.4.0.
MacOS (PCIe + USB) MacOS 10.10-10.15 are supported from version 14.5.0.
MacOS 10.13-11.0 are supported from version 14.6.0.
MacOS 11.0 and MacOS 12.0 (ARM64 M1 version) are supported from version 14.8.0.
Linux PCI/ISA is supported on Linux from version 4.1.2. USB is supported on Linux from version 6.0.0.
Solaris (PCI/ISA) Solaris is supported for PCI/ISA from version 4.1.4 to version 9.0.1.

ℹ️ Note

‍If you have any questions or would like to evaluate WinDriver on a specific operating system that is either not listed above, or is supported until a particular version, please send an e-mail to WinDr.nosp@m.iver.nosp@m.@jung.nosp@m.o.co.nosp@m.m, and our team will assist you.

1.7. Limitations of Different Evaluation Versions

All evaluation versions of WinDriver are fully featured. No functions are limited or crippled in any way. The evaluation version of WinDriver is different from the registered version in the following ways:

  • Each time WinDriver is activated, an Unregistered message appears.
  • The Windows evaluation version expires 30 days from the date of installation. When using DriverWizard, a dialogue box with a message stating the remaining evaluation version time will appear on every interaction with the hardware.
  • On Linux and MacOS the driver will remain operational for 60 minutes, and will require restaring every time the 60 minutes run out.
  • During the evaluation there is free basic technical support available via the support center.

ℹ️ Note

‍If you are interested in purchasing a WinDriver license, wonder what it includes and its conditions or have any other questions or feedback, please send us an e-mail to sales.nosp@m.@jun.nosp@m.go.co.nosp@m.m, and our team will respond swiftly. Please note that by offering any suggestions to Jungo, you give Jungo full permission to use them freely.

1.7.1. Limitations on MacOS

Currently, WinDriver for MacOS does not support the following features:

  • Out-of-the-box Driver redistribution / Driver renaming.
  • Kernel PlugIn.
  • Server APIs (IPC, Shared Kernel Buffer).
  • Some DMA buffer locking flags (Address width specification, preallocation, reserved memory).

Jungo strives to support all these features in the nearest future as well.

1.8. What WinDriver includes

The main files of the WinDriver toolkit are:

  • windrvr.h: declarations and definitions of WinDriver's basic API.
  • wdu_lib.h: declarations and definitions of the WinDriver USB (WDU) library, which provides convenient wrapper USB APIs.
  • windrvr_int_thread.h: declarations of convenient wrapper functions to simplify interrupt handling.
  • windrvr_events.h: declarations of APIs for handling Plug-and-Play and power management events.
  • utils.h: declarations of general utility functions.
  • status_strings.h: declarations of API for converting WinDriver status codes to descriptive error strings.
  • DriverWizard (WinDriver/wizard/wdwizard): a graphical application that diagnoses your hardware and enables you to easily generate code for your driver.
  • Debug Monitor: a debugging tool that collects information about your driver as it runs. This tool is available both as a fully graphical application — WinDriver/util/wddebug_gui — and as a console-mode application — WinDriver/util/wddebug.
  • WinDriver distribution package (WinDriver/redist): the files you include in the driver distribution to customers.
  • This manual: the full WinDriver manual (this document), in different formats, can be found under the WinDriver/docs directory.

WinDriver also includes the following utilities:

  • usb_diag.exe (WinDriver/util/usb_diag.exe): enables the user to view the resources of connected USB devices and communicate with the devices to transfer data to/from the device, set the active alternate setting, reset pipes, etc. On Windows the program identifies all devices that have been registered to work with WinDriver using an INF file. On the other supported operating systems the program identifies all USB devices connected to the target platform.
  • pci_dump.exe (WinDriver/util/pci_dump.exe): used to obtain a dump of the PCI configuration registers of the installed PCI cards.
  • pci_scan.exe (WinDriver/util/pci_scan.exe): used to obtain a list of the PCI cards installed and the resources allocated for each card.

There are also various code samples available:

  • C samples: found under the WinDriver/samples/c directory.
  • Python samples: found under the WinDriver/samples/python directory.
  • Java samples: found under the WinDriver/samples/java directory.
  • C#.NET samples : found under the WinDriver/samples/csharp.net directory.
  • PowerShell samples : found under the WinDriver/samples/powershell directory.
  • Visual Basic.NET samples (Windows): found under the WinDriver/samples/vb.net directory.

In addition to the generic samples described above, WinDriver provides custom wrapper APIs and sample code for major PCI chipsets, as outlined in Chapter 9: Enhanced Support for Specific Chipsets. The relevant files are provided in the following WinDriver installation directories:

  • PLX 6466, 9030, 9050, 9052, 9054, 9056, 9080 and 9656 — WinDriver/samples/c/plx
  • Altera Qsys design — WinDriver/samples/c/altera/qsys_design
  • Altera Avalon Memory Mapped (Avalon-MM) design — WinDriver/samples/c/altera/avalonmm
  • Xilinx Bus Master DMA (BMD) design — WinDriver/samples/c/xilinx/bmd_design
  • Xilinx XDMA design — WinDriver/samples/c/xilinx/xdma
  • Xilinx QDMA design — WinDriver/samples/c/xilinx/qdma

For the Xilinx BMD, XDMA, QDMA and Altera Qsys designs there is also an option to generate customized driver code that utilizes the related enhanced-support APIs.