windows-driver.rst
author Oleksandr Gavenko <gavenkoa@gmail.com>
Mon, 30 Jan 2017 00:44:30 +0200
changeset 2075 ccaa2f364422
parent 1960 2d684ac1adf1
child 2128 3a4f15d5aa5e
permissions -rw-r--r--
Improve page formatting.

.. -*- coding: utf-8; -*-

=====================
 Driver for Windows.
=====================
.. contents::
   :local:

About.
======

  microsoft.public.development.device.drivers
                NNTP driver development group at msnews.microsoft.com:119
  http://www.microsoft.com/communities/newsgroups/list/en-us/default.aspx
                Web-interface to NNTP forum

Which version exist?
====================

 - VxD
                Windows 3.x and Windows 9x
 - Windows Driver Model (WDM)
                Windows 98, Windows 98 Second Edition, Windows Me, Windows
                2000, Windows XP, Windows Server 2003 and Windows Vista (for
                backwards compatibility)
 - Windows Driver Foundation (WDF)
                Windows 2000 and later

  http://en.wikipedia.org/wiki/VxD
                VxD
  http://en.wikipedia.org/wiki/Windows_Driver_Model
                WDM.
  http://en.wikipedia.org/wiki/Windows_Driver_Foundation
                WDF.

Msinfo32.exe.
=============

Windows XP/2003 System Information Tool.

 * http://support.microsoft.com/kb/308549

Sysinternals.
=============

WinObj.
-------

Winobj is a program that lets you browse the Windows NT Object Manager
namespace.

devtree.
--------

The DeviceTree V2.12 utility is a Windows XP/Server 2003 utility written by
OSR, that allows the user the ability to display the drivers and devices
loaded in 2 different views. The first view Driver View the user sees a list
of all the drivers loaded in kernel mode and all the devices that those
drivers have created. In the second view PnP View the user sees a list of all
the devices in the system from that of Plug and Play Manager (PnP).

Microsoft DDK.
==============

DevCon.
-------

Supported device classes::

  cmd> devcon.exe classes

Which files used by specific driver (with "*" prints list of files for all
drivers)::

  cmd> devcon.exe driverfiles *

Device ID (names included)::

  cmd> devcon.exe hwids *

Device status (running/stoped)::

  cmd> devcon.exe status *

USB Command Verifier.
=====================

All USB peripherals are required to pass the Device Framework tests in order
to gain certification.

 * http://www.usb.org/developers/tools/

Files.
======

Windows 98 SE/ME.
-----------------

 * .386
   VxD driver under Windows 3.x
 * .vxd
   VxD driver under Windows 95

Windows NT (2000/XP/2003).
--------------------------

 * .inf
   Stored in %Windir%\Inf.
 * .pnf
   Precompiled INF File. Stored in %Windir%\Inf.

Driver type.
============

CDC.
----

  http://support.microsoft.com/kb/837637
                How to use or to reference the Usbser.sys driver from
                universal serial bus (USB) modem .inf files.

Driver class.
=============

  http://msdn.microsoft.com/en-us/library/ms791134.aspx
                System-Supplied Device Setup Classes
  http://msdn.microsoft.com/en-us/library/ff538820.aspx
                Drivers for the Supported USB Device Classes

How list drivers?
=================

Set environment devmgr_show_nonpresent_devices to 1 and run Device Manager,
select "View" --> "Show hidden devices".

How install drivers?
====================

.. note::

   If you update any driver in Device Manager backup is created with old driver
   under following directory::

     %windir%\system32\ReinstallBackups

dpinst.
-------

Driver Install Frameworks (DIFx) tools allow installing driver starting from
Windows 2000 and onward.

It consist from API (from library, DIFxAPI, DIFxApp) and command line tool
(``DPInst.exe``) which can be found in WDK and their licence allow
redistribution.

  https://msdn.microsoft.com/en-us/library/windows/hardware/Dn653565.aspx
    Information about Driver Install Frameworks Tools.
  https://msdn.microsoft.com/en-us/library/ff544842.aspx
    Driver Package Installer (DPInst).
  https://msdn.microsoft.com/en-us/library/ff540184.aspx
    Creating a DPInst Installation Package.
  https://msdn.microsoft.com/en-us/library/ff544775.aspx
    DPInst Command-Line Switches.
  https://msdn.microsoft.com/en-us/library/ff548674.aspx
    Logging Installation Information and Error Messages.
    ``%SystemRoot%\DPINST.LOG``.
  https://msdn.microsoft.com/en-us/library/ff553383.aspx
    Summary of the DPInst XML Elements.

devcon.
-------

This command-line specifies the location of the driver package's INF file (c:\toaster\toastpkg.inf)
and the toaster device's hardware identifier (ID), which is specified within the INF file::

  cmd# devcon.exe install c:\toaster\toastpkg.inf {b85b7c50-6a01-11d2-b841-00c04fad5171}\mstoaster

See:

  http://msdn.microsoft.com/en-us/library/ff553642.aspx
                Using the DevCon Tool to Install a Driver Package

How debug Windows drivers.
==========================

To detect whether a driver loaded, check the status of the device in Device Manager.

SetupAPI logs information about device installation in a plain-text log file
that you can use to verify the installation of a device and to troubleshoot
device installation problems.

For Windows XP/2003 check::

  %SystemRoot%/setupapi.log

For Windows Vista and later versions of Windows check::

  %SystemRoot%\inf\SetupAPI.dev.log     installation events in the device
  %SystemRoot%\inf\SetupAPI.app.log     application installation

See:

  http://msdn.microsoft.com/en-us/library/ff553497.aspx
                Troubleshooting Install and Load Problems with Signed Driver Packages
  http://www.microsoft.com/whdc/devtools/debugging/debugtips.mspx
                Improve Driver Debuggability
  http://msdn.microsoft.com/en-us/library/ff551063.aspx
                Debugging Tools for Windows
  http://msdn.microsoft.com/en-us/library/ff543450%28VS.85%29.aspx
                Checked and Free Build Differences
  http://msdn.microsoft.com/en-us/library/windows/hardware/ff540793.aspx
                Debugging Driver Installation
  http://msdn.microsoft.com/en-us/library/windows/hardware/ff550863.aspx
                SetupAPI Device Installation Log Entries

Driver signing.
===============

Type of signature:

 * Signed by a Windows signing authority.
 * Signed by a trusted publisher.
 * Signed by an untrusted publisher.
 * Signed by a publisher of unknown trust.
 * Altered.
 * Unsigned.

  http://msdn.microsoft.com/en-us/library/ff544703.aspx
                Type of signature and performed action.
  http://www.microsoft.com/whdc/driver/install/drvsign/best-practices.mspx
                Code-Signing Best Practices.
  http://msdn.microsoft.com/en-us/library/ff550764.aspx
                Device Installation Signing Requirements.
  http://www.microsoft.com/whdc/winlogo/categories.mspx
                Windows Logo Program Test Categories.
  http://www.microsoft.com/whdc/driver/install/drvsign/crosscert.mspx
                Root Authority Cross-Certificate List

Disable signing requirement on Windows 7 x64.
=============================================
::

  cmd> bcdedit -set loadoptions DDISABLE_INTEGRITY_CHECKS
  cmd> bcdedit -set TESTSIGNING ON

To revert back::

  cmd> bcdedit.exe -set loadoptions ENABLE_INTEGRITY_CHECKS
  cmd> bcdedit.exe -set TESTSIGNING OFF

Tools for Signing Drivers.
==========================

'certmgr.msc' present in Windows 2000 and upper.

From Windows SDK/WDK::

  CertMgr Inf2Cat MakeCat MakeCert Pvk2Pfx SignTool

To register certificate in Windows 7 (or install "Admin Tools Pack" in Windows
XP)::

  cmd> certutil -addstore TrustedPublisher cert.cer

See:

  http://msdn.microsoft.com/en-us/library/ff552958.aspx
                Tools for Signing Drivers
  http://www.microsoft.com/download/en/details.aspx?id=16770
                Admin Tools Pack

Invoking a Device Properties Dialog Box from a Command-line Prompt.
===================================================================

You need get device-instance-ID-parameter::

  cmd# rundll32.exe devmgr.dll,DeviceProperties_RunDLL /DeviceID "ACPI\PNP0F03\4&1A8C8C2E&0"

 * http://msdn.microsoft.com/en-us/library/ff548170.aspx

Driver Selection Process.
=========================

Windows uses the following criteria to select a driver for a device:

 * Windows selects the driver that has the lowest rank value as the best match for the device.
 * For drivers that have equal rank, Windows selects the driver that has the most recent date.
 * For the drivers that have equal rank and date, Windows selects the driver that has the highest version.
 * Windows XP SP1 and later: For drivers that have equal rank, date, and version, Windows can select any driver.
 * Windows XP and Windows 2000: For drivers that have equal rank, date, and version, Windows can select any driver.

See:

 * http://msdn.microsoft.com/en-us/library/ff549553.aspx

Windows driver for USB
======================

  http://msdn.microsoft.com/en-us/library/ff538820%28VS.85%29.aspx
    Drivers for the Supported USB Device Classes

Distributing a Driver Package.
==============================

Windows Update.
---------------

You can distribute a driver package through the Windows Update program if the driver package:

 * Passes the WHQL test program and receives a WHQL release signature.
 * Qualifies for the Windows Logo program.
 * Meets additional requirements that ensure that Windows Update can determine the correct driver
   package for the user's device, can legally distribute it, and can automatically download it.

See:

 * http://msdn.microsoft.com/en-us/library/ff554874.aspx

Hardware ID.
------------

PCI and AGP buses: Contain subsystem ID and subsystem vendor ID (&SUBSYS in the ID string). Drivers
must have VID/DID/SVID/SID PNP ID entries to be published via Windows Update.

PCI Device Subsystem IDs and Windows specifications are available at:

 * http://www.microsoft.com/whdc/archive/pciidspec.mspx

PCMCIA: Always specific; contains PCMCIA in the ID string.

USB: Contains VID and &PID in the ID string.

IEEE 1394: Always specific; contains 1394 in the ID string.

HID: Contains &VID and &PID in the ID string.

IDE: Contains IDE\ in the ID string.

Parallel Port Printers: Contain LPTENUM\ in the ID string.

IrDA Printers: IDs begin with HWP.

  http://www.microsoft.com/whdc/winlogo/winup/default.mspx
                Windows Update Driver Publishing