The Windows Driver Model (WDM) has been the dominant framework for framework development since Windows 98. Before WDM, there were different frameworks for each kind of device. The idea behind WDM was to unite all these frameworks and provide binary (this goal proved far-fetched) or source level compatibility between different kinds of windows. Currently, WDM is supported in Windows XP, Windows 2000, Windows 98, and Windows ME, however each one of them supports a different version, so it's impossible even to keep source compatibility. Of course, currently most driver developers care about Windows XP, so this mitigates the problem.
One the other hand, WDM has lots of disadvantages, eg:
For the above reasons, Microsoft has decided to develop a different framework for Windows Vista, which will be called Windows Driver Foundation (WDF) and will allow the creation both of kernel-mode drivers (using the Kernel-Mode Driver Framework or KMDF) and user-mode drivers (using the User-Mode Driver Framework or UMDF). I'll write more details on WDF in the next posts. For a high-level overview of WDM you can look at http://www.cs.stevens.edu/~quynh/courses/cs520-sp06/presentations/Rivera_WindowsIO.ppt
Of course, since WDM is being discontinued, it's obvious that new driver developers should start by learning the WDF (since it's much simpler, too). I'm writing this post mostly for completeness. I'll try to present both links that describe WDM therotically and others that show how to create simple WDM drivers. So, let's start with the first category:
Afterwards, it is a nice idea to write a few simple drivers. There are some tutorials in the internet:
Unfortunately, most of the material in the web either replicates the same information or is much more advanced to read. There seems that there is no middle way. A good way to fill this gap is by reading books. I have a list of WDM books in my previous post, however I would like to be more specific: