Q: How should i get started on Device Drivers I want to code drivers in C in windows XP/VISTA/7,though I think its very tough.Can I get some hints as to how to start or books to follow? Drivers can be from my USB     port/PCI/PCI Express to PC!! 
I know as to where I can search for books, I would like to know as to what the basic knowledge I should start with. Do I need to have hardware knowledge and which specific books are good for novice like me?

A: The very fist step is to download the WDK from Microsoft.
The WDK contains many sample drivers and an extensive documentation of the kernel API. Furthermore, the build environment and the compiler to use for drivers.
With this, you can choose which driver model to use, which api to follow ... etc.
A great source on the web is osronline with many articles and a community where to find answer for specific questions about driver development under windows.

To the specific question what your basic knowledge should be.

*

*Fluent knowledge of C

*Using build (makefile) systems

*Multithreading mutex/spinlock/concurrency

*Overall knowledge of OS principles (e.g. difference between virtual/physical memory, paging, message queues ...)

*Specific knowledge of the area you want to drill into. (E.g. register interface for USB devices/knowledge about filesystems/etc.)

(Not so much about hardware itself, because mostly windows hides low-level hardware details from you)

A: It would be easier to work on a lower level first like on microcontrollers. This will give you an idea of how hardware behaves with software.
