Windows Drivers

Getting Started

Windows Hardware Developer Central – Microsoft’s portal for all things related to hardware for the Microsoft Windows platform.

OsrOnline – OSR does a lot of contracting and instruction for driver development, but they also manage mailing lists and publish NT Insider, the only publication available relating to Windows driver development.  You’ll be coming back to this website constantly, so make sure to go ahread and create a free account and subscribe to NT Insider so you can access their online articles.


Information and Techniques

Windows NT Virtual Memory (I) and Windows NT Virtual Memory (II) – Though these articles were published in 1998 and 1999, respectively, they are still relevant in helping new drivers understand how Windows manages virtual memory.  Though virtual memory is often covered in operating systems courses in a university curriculum, it is often abstract, and tis series of articles really helps to better understand how Windows handles memory management on the x86 platform.

A Common Topic Explained – Sharing Nemory Between Drivers and Applications – Try as hard as you will to develop drivers in the Microsoft-recommeded fashion, rank at your workplace may dictate that you emulate the UNIX behavior mmap(), or expose memory directly to the user-application.  If you’re in such a situation, this is the article for you.

Scheduling, Thread Context, and IRQL – this is a must-read for all driver developers.  Having read this you’ll better understand the Windows Driver Kit (WDK) documentation and you’ll design better drivers too.

Locks, Deadlocks and Synchronization – an overview of the synchronization mechanisms available for use in your device driver

Best Practices for Creating DLLs – most drivers are accessed through a software library, usually a DLL, so that application code and driver-access code can be decoupled for reuse.  Unfortunately, DLLs introduce a new complexity and designers should be aware of potential pitfalls such as are outlined in this document.


Bookshelf  (mine at least)

Developing Drivers with the Windows Driver Foundation – This is the book for new driver developers as it covers the core concepts of both user-mode and kernel-mode drivers for standard devices.  Though it is a great book for understanding Windows I/O and drivers, I felt it didn’t really provide enough information about installing and managing drivers on an actual system.

Programming the Windows Driver Model, 2nd Ed. – Once you have some experience with WDF drivers, this is the next book to read.  Though this book is a lot harder to understand, it is the only real reference book on the Windows Driver Model available.  The sections of INF files and advanced topics are extremely helpful.

Windows Systems Programming, 3rd Ed. – The driver writer’s job does not stop at the driver.  Most driver engineers have to test their drivers as well as create utilities for allowing hardware and application engineers to debug and test as well.  As such, the driver engineer also needs to understand Windows systems programming, particularly the synchronous and asynchronous I/O and Windows threads.

Advanced Windows Debugging – The driver engineer will also be called upon number times to find bugs in both his driver or the application engineer’s code.  This book focuses on using Microsoft’s debugging tools for solving user-mode software issues, but the information is invaluable for solving problems in drivers as well.  The application engineer’s first instinct is to blame a problem on the driver engineer, and the driver engineer must be ready to show where the error is happening.

Windows Internals, 4th Ed. – Unlike FreeBSD, Linux and many other popular OS, the Windows source code is not available for the average driver engineer to analyze and understand.  Nevertheless, this book provides detailed information about the major components of the Windows OS, as well as tools and utilities that can be used to gain more information about how the OS operates.  The sections on the memory manager and the I/O manager are particularly relevant to the driver engineer.  Note that a 5th Ed. covering Vista and Windows Server 2008 is due soon (2009).


Blogs

Mark Russinovich Windows Internals Blog – One of the author’s of Windows Internals and a member of the Windows Core Team, Mark writes technical and informative posts relating to aspects of the Windows OS or debugging faulty software and behavior.

Dump Analysis – This is also a technical and informative blog that describes the art and technique of debugging various problems encountered with Windows Software.  The author is also publishing quite a few books recently.

A Hole in My Head – the author is a member of Microsoft’s driver developer kit team, and he posts interesting topics relating to kernel mode drivers and WDF.


PCI/PCIe-specific

PCI Vendor and Device ID List – if you’re working on a user-mode PCI utility this information can be helpful

Firmware Allocation of PCI Device Resources in Windows – for understanding how PCI resources and Windows work together

Interrupt Architecture Enhancements in Windows – covers Message-Signaled Interrupts (MSI) for Windows Vista

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s