December, 2006

Blog - About

About A Hole In My Head

I am an architect in the Device and Storage Technologies team, focusing on how drivers are developed and how driver developers can develop a quality driver that is stable and performant. Previously (in descending order) I was a developer and technical lead on the KMDF team, architect of the v1.0 Bluetooth stack, and owner of the input stacks. The USB team reported to my manager during the input days so I also have a good working knowledge of the USB core.

Topics will vary a bit, but I am going to stick mostly to writing KMDF and WDM drivers, using a kernel debugger (windbg.exe or kd.exe, not SoftICE!), and my opinions on coding guidelines and design patterns.

The WDF (both UMDF and KMDF) files in the WDK are not found in a single directory, rather they are spread out across the entire WDK directory tree. Why? Because the WDK is not just WDF J and the WDK has directories for different purposes, so replicating...

This has been asked quite a few times and is a major point of confusion for KMDF developers. The KMDF coinstaller comes in 2 flavors, chk and fre. Both flavors reside in the same directory in the WDK (winddk\6000\redist\wdf\<arch>) and have their...

A very common pattern is to allow a caller to ask for the number bytes (or elements) required and then ask for the data, many user mode Win32 APIs (like RegQueryValueEx ) and kernel mode (like IoGetDeviceProperty ) implement it. You first ask for the...

Sometimes your design requires an Interlocked operation that is not currently supported by the OS, runtime libraries, or the compiler (as an intrinsic). You then have a choice to make. Either remove all Interlocked operations for that particular field...

This post concludes my trilogy (see parts 1 and 2 ) on PBOJECT_TYPE (although I do reserve the right to pull a George Lucas and add more episodes later :) ). Today we shall cover why passing the PBOJECT_TYPE to ObReferenceObjectByHandle , ObReferenceObjectByPointer...

In a previous post I wrote about the newly documented POBJECT_TYPE variables for Vista. You can pass these exports to ObReferenceObjectByHandle , ObReferenceObjectByPointer , or ObOpenObjectByPointer . Talking about the new exports without talking about...