I’ve been trying to find time to start a blog for a while now. I figure the first question i’ll be asked is “who are you and why should I care?”. Like all things the answer to that isn’t particularly easy.
If you’re not interested in driver development, then you probably don’t care & should spend time reading a more interesting blog. If you’re interested in device drivers for Windows, then I’m hoping I may be of some assistance. I’ve made many, many mistakes while writing Windows drivers over the last 10+ years and I’ve tried to learn from all of them.
I joined MS straight out of college in 1995. I started working in the Windows NT device drivers team – which consisted of 5 other developers at the time. If it wasn’t video or networking, our team most likely handled the drivers for it.
I started out working on SCSI miniport drivers – more specifically helping to maintain the third-party SCSI miniports that we shipped in-box. This was largely a diagnostic position, debugging problems when they came up in house, reviewing & integrating changes into the Windows source code base. It was a good learning experience to work with two separate code bases – the Windows base which was reasonably clean and comprehensible, and the device driver code which could be … opaque … at times.
I worked on some other driver stacks too. I owned the Parallel port driver for a while, as well as the drivers for the 8042 controller (a piece of hardware which still gives me a stomachache to this day.)
For Windows 2000 I did the bulk of the work converting the storage drivers over to Plug-and-Play. I can be blamed for such things as classpnp.sys, and the AdapterControl routines in SCSI miniports. I worked as the Development Lead for the mass-storage drivers team, who worked on all of the software between volume management (ftdisk and/or LVM) and the underlying controllers.
A few years ago I helped to start up the Windows Driver Foundation team. The goal of this team was to investigate technological solutions to improving the quality of device drivers using a variety of approaches. This includes the static verification tools like SDV and PreFast for Drivers (PFD), as well as the Windows Driver Framework (WDF) implementations in User-Mode and Kernel-Mode.
Currently I am the Development Lead for the User-Mode Driver Framework. This is an implementation of a subset of the WDF that allows developers to write drivers for some device types which will run in user-mode. If you think about your typical Windows system, there are a number of device drivers running on it which don’t really need to be in the Kernel, and we’re trying to provide an alternate system which builds on the design patterns already set down in WDF.
So that said, my desire here is to talk about Windows device drivers – the things that confused me as a starting developer, the things that I get questions about frequently, the things that I love about it and the things which drive me absolutely nuts.