Electronic Review of Computer Books

[ ERCB Home | New | Feature | Brief | DDJ | Letters | Links ]

[an error occurred while processing this directive]

Vital Statistics

Title Developing Windows NT Device Drivers: A Programmer's Handbook
Authors Edward N. Dekker and Joseph M. Newcomer
Publisher Addison-Wesley Longman
http://www.awl.com/
Copyright 1999
ISBN 0-201-69590-1
Pages 1279
Price $59.95


NT Device Drivers

Compared to other texts on the topic, Developing Windows NT Device Drivers: A Programmer's Handbook, by Edward N. Dekker and Joseph M. Newcommer, is a gentle introduction to device-driver development. At over 1200 pages, it is thick, verbose, and extensive. The book is complete, if not concise. If you can scan through the things that you already know (say to about Chapter 5), you will find an easy introduction to Windows NT driver development.

In an attempt to cover everything, there is extensive coverage of very specific bus and device topics. I did not expect to find this much application code to access the sample drivers. This adds to the bulk, but is probably worth it. For example, the PCI explorer application is interesting and relevant. This book is more tutorial than reference in nature. There is no CD-ROM and some examples were initially unavailable on the author's web sites. The examples are not at all abstract. In fact, they're highly informative.

Compared to other Windows NT device-driver development books, Developing Windows NT Device Drivers is hardware-oriented. A lot of real hardware-related information is presented, including small circuit diagrams and views about throwing hardware at debug problems with extender cards and bus/logic analyzers using products from various tool vendors such as Vmetro and Catalyst Enterprises. A lot of products are mentioned, including libraries and debugging tools from vendors such as Bluewater Systems and Compuware/NuMega.

Dekker and Newcommer could have subtitled this book, "My life in device-driver development." There are a lot of digressions, including brief and mostly interesting references to DEC system-10, RS/6000, Windows 3.x, CP/M, and a CMU symmetric multiprocessor research project. Everything related to driver development gets a mention, even if briefly, according to the authors, "for completeness." The authors appear to be quite fond of footnotes, many of which are off topic comments. A lot of the asides include general advice, from which compiler to use (Microsoft will have no sympathy, if you don't use Visual C++) to which books to read on specific buses. (They like the mindshare books, as do I.) The authors are adamant on some subjects such as ISA plug-and-play (just don't do it) and Hungarian notation. I never trust other people's code and take it at face value. If you don't like Hungarian notation, ignore it.

Apart from being large, the index contains references to fairly trivial topics such as quotations from Arthur C. Clark. Each chapter concludes with a section on further reading and/or products/tools. In general, the organization of the book is quite good, apart from the fact that it could be partitioned into smaller parts. The book could have been split into four sections: general background (Chapters 1 to 4), core driver development knowledge base (Chapters 5 to 17), more peripheral issues, and future trends.

The book begins with machine architecture, development philosophy, bus specifics and application calls to drivers. From Chapter 5 onwards, the real NT-specific driver and operating system internal issues are covered with increasing depth, specialization, and complexity. It starts with general driver/Windows NT interaction and general NT internals/how memory management works and driver data structures. When starting a project in unfamiliar areas, people usually start with DDK or SDK samples, gut an example, and use the skeleton as a starting point for their project. The "hello world" driver in Chapter 8 is pretty much such a skeleton. More involved core topics follow with debugging (Chapter 9), moving data to and from the driver (Chapter 10), synchronization (Chapter 11), memory management (Chapter 12), port access (Chapter 13), servicing interrupts (Chapter 14), timers (Chapter 15), initialization (Chapter 16), DMA (Chapter 17).

In the last part of the book, the authors turn their attention to more peripheral issues, including the registry (Chapter 18), memory mapping (Chapter 19), ISA bus (Chapter 20), PCI (Chapter 21), serialization (Chapter 22), layered drivers (Chapter 23), driver threads (Chapter 24), GDI, display, graphic acceleration and SCSI (Chapter 25), "useful driver techniques" (Chapter 26), and hardware simulator (Chapter 27). Chapters 28 to 30 conclude the book with coverage of new technologies, including Windows 2000, USB, and WDM (the Windows 98 and Windows 2000 combined driver model). These topics are somewhat speculative and probably date the book a bit.

In conclusion, Developing Windows NT Device Drivers is an attempt to encapsulate everything and will be fairly high in the pile of documentation on your workbench. The sheer bulk of it is worth having around to beat that recalcitrant device into submission.

-- Regan Russell


Copyright © 1999 Electronic Review of Computer Books
Created 4/24/1999 / Last modified 4/24/1999 / webmaster@ercb.com