Device Drivers in Windows are of many types and is certainly the most complex and is really vast. There are many books and tutorials for learning windows device driver programming. However a hands on course can really provide the required startup for anybody looking forward to get into device driver development. Yes Microsoft provides lots of books, tutorials and samples for beginners to learn and start developing device drivers. Many of the books on device driver development provide lots of theory and yes tons of reading material. Most of the books in device driver development start by explaining what is a device driver, why it is needed and then they go into complex things and writing a simple hello world type driver can take really lots of efforts to be put in.
Device driver development can be really easy for people who know application programming for windows using C, C++ and Visual C++. Yes Microsoft now supports Windows Device Driver development using Microsoft Visual Studio as well. Programming languages such as Visual Basic.NET, Visual C# and other languages often hide the complexity of the Windows Operating System so that the develop can concentrate on what the application needs to achieve and the programmer is saved of learning internals of Windows. Applications made for Windows are normally backward compatible and works fine even on new operating system. Yes the application programmers needs to do the required testing on new operating system so as to make sure that the application designed on and for an older operating system works fine on the next generation operating system. Device drivers on the other hand are not so simple and indeed requires lots of testing and efforts to be put in to check the compatibility with newer operating system. For Windows Applications, Microsoft provides compatibility mode, however for device drivers there is no such compatibility mode & it needs to be checked and verified for the new operating system.
In order to view and analyse the difference between applications and device drivers, let’s consider an example of AntiVirus. Software Drivers are the heart of AntiVirus software application. You cannot simply use an AntiVirus designed for Windows 7 on Windows 8, there are good chances that a driver created for Windows 7 or Windows Vista when installed on Windows 8 will certainly crash the Windows 8. On the other hand most of the applications designed for Windows XP, Vista or Windows 7 will work fine on Windows 8.
Device Drivers have been traditionally designed to interact with the Kernel of the Operating System. These Kernel Mode programs in the form of a .sys or .dll file usually do not interact with the user. Instead an application interacts with the end user and the application in turn interacts with device drivers. Device Drivers and Software Drivers are usually referred to these kernel mode programs. Device Drivers are Kernel Mode Programs (which are basically .sys or .dll file(s)) which interact with devices such as a USB Device, Custom Hardware, etc, on the other hand software drivers communicate with normal computer hardware such as display, keyboard, mouse etc. In order to avoid confusion, most of the books, tutorials and other online websites use the single word Device Driver.
With lots of offshore work done in India for other countries, jobs for device driver programmer do have increased in India. Device Driver programmers often have experience in one particular field. You may find a device driver programmer working with only audio devices for good amount of years. As application programmers often have expertise in particular field (like Database Programming, Internet Programming, etc), the same way Device Driver programmers have expertise in specific field. Yes Device Driver programming is a really demanding job, often requiring communicating with other people like application programmers, hardware designers, etc.
Writing a Device Driver, Installing it on the host computer, Debugging the Device Driver, Managing Checked and Free Build of drivers, Signing Device Drivers with appropriate code signing certificate, analysing crash dumps, handling the communication with applications, communicating with application programmers, communicating with hardware designers, testing device drivers, etc are few of the things that needs to be handled for a device driver. Similar tasks would be required for Linux Device Drivers as are for Windows Device Drivers.
Microsoft offers Windows Device Driver Kit for anybody looking forward to write windows device drivers. Various command line and graphical user interface utilities are bundled in the WDK along with lots of sample device drivers along with the source code and instructions on how to build and deploy the Windows Device Drivers. In case you or your company has signed for MSDN subscription, you can get Microsoft Visual Studio for developing Windows Device Drivers. The Visual Studio for writing Windows Device Driver can significantly decrease the learning time and can be really useful. There are few other ways as well to get the Microsoft Visual Studio for Device Driver development as well.
Irrespective of the development environment you intend to use for developing Windows Device Drivers, a short term course to learn Windows Device Driver programming can boost up your learning speed. In case you do not know C, C++ then you would need to learn C / C++ first to develop Windows Device Drivers. Apart from the programming language, you must know the architecture of Windows to learn Windows Device Driver programming. Learning Microsoft Visual C++ or even Borland C++ can be good ways to learn about Windows and understand how everything works.