Detailed Chapter Outline for The Windows 2000 Device Driver Book - A Guide For Programmers :

Preface
           What you should Already Know
           What's Covered
           What's Not
           About the Sample Code
           History fo ths Book
           Training and Consulting Services

1.     Introduction to Windows 2000 Drivers

1.1.         Overall System Architecture

      1.2.1.         Design Goals for Windows 2000

1.2.2.     Hardware Privilege

1.3.         Windows Driver Models

1.3.1.   Historical perspective (DOS, Windows-16, NT, Win95, Windows-CE, Windows-2000, Win98)

1.3.2.   Goals of WDM

2.     The Hardware Environment

2.1.         Hardware Basics

2.2.         Busses and Windows NT

2.2.1.   Discussion of PCMCIA (PC Card) bus

2.2.2.   USB (Universal Serial Bus)

2.2.3.   Firewire (IEEE 1394)

2.2.4.   PC99 Specification

2.3.         Hints for Working with Hardware

3.     Kernel-Mode Processing

3.1.         How Kernel-Mode Code Executes

3.2.         Use of Interrupts by Windows 2000

3.3.         Deferred Procedure Calls (DPCs)

3.4.         Access to User Buffers

3.5.         Structure of a Kernel-Mode Driver

3.6.         I/O Processing Sequence

4.     Drivers and Kernel-Mode Objects

4.1.         Data Objects and Windows 2000

4.2.         I/O Request Packets (IRPs)

4.3.         Driver Objects

4.4.         Device Objects and Device Extensions

4.5.         Controller Objects and Controller Extensions

4.6.         Adapter Objects

4.7.         Interrupt Objects

5.     General Development Issues

5.1.         Driver Design Strategies

5.2.         Coding Conventions and Techniques

5.3.         Driver Memory Allocation

5.4.         Unicode Strings

5.4.1.    C++ class code for Unicode String handling.  This would greatly simplify code examples throughout the book.

5.5.         Interrupt Synchronization

5.6.         Synchronizing Multiple CPUs

5.7.         Linked Lists

6.     Initialization and Cleanup Routines

6.1.         Writing a DriverEntry Routine

6.2.         Code Example:  Driver Initialization

6.3.         Writing Reinitialize Routines

6.4.         Writing an Unload Routine

6.5.         Code Example:  Driver Cleanup

6.6.         Writing Shutdown Routines

6.7.         Testing the Driver

7.     Driver Dispatch Routines

7.1.         Enabling Driver Dispatch Routines

7.2.         Extending the Dispatch Interface

7.3.         Writing Driver Dispatch Routines

7.4.         Processing Specific Kinds of Requests

7.5.         Testing Driver Dispatch Routines

7.6.         Code example:  A loopback (no HW) driver

8.     Interrupt-Driven I/O

8.1.         How Programmed I/O Works

8.2.         Driver Initialization and Cleanup

8.3.         Writing a Start I/O Routine

8.4.         Writing an Interrupt Service Routines (ISR)

8.5.         Writing a DpcForIsr Routine

8.6.         The Parallel Port Driver

8.7.         Code Example:  Parallel Port Driver

8.8.         Testing the Data Transfer Routines

9.     Hardware Initialization

9.1.         The Plug & Play Architecture – a brief history

9.2.         The Role of the Registry for Legacy Drivers

9.2.1.   Finding unrecognized drivers

9.2.2.   Code Example:  Querying the Registry

9.2.3.   Allocating and Releasing Hardware

9.2.4.   Code Example:  Allocating Hardware

9.3.         Detecting devices with Plug & Play

9.4.         The role of Driver Layers in PnP

9.5.         The New WDM IRP Dispatch Functions (minor function codes)

9.6.         Device Enumeration

9.7.         Device Stacks

9.8.         Code Example:  A simple PnP Driver – auto detected

 

10.  The Windows Driver Model (WDM)

10.1.     Hot-plug Devices

10.2.     OnNow Initiative
The OnNow initiative allows for devices to be powered-down when not immediately in-use.  This feature impacts driver authors.

10.3.     Queuing IRPs While “On Hold”

10.4.     Power Management Issues

10.4.1.          APM (Advanced Power Management)

10.4.2.          ACPI (Advanced Configuration and Power Interface)

10.4.3.          Code Example:  Using Power Management IRPs

11. Timers

11.1.     Handling Device Timeouts

11.2.     Code Example:  Catching Device Timeouts

11.3.     Managing Devices Without Interrupts

11.4.     Code Example:  A Timer-Based Driver

 

12. DMA Drivers

12.1.     How DMA Works Under Windows NT

12.2.     Working with Adapter Objects

12.3.     Writing a Packet-Based Slave DMA Driver

12.4.     Code Example:  A Packet-Based Slave DMA Driver

12.5.     Writing a Packet-Based Bus Master DMA Driver

12.6.     Writing a Common Buffer Slave DMA Driver

12.7.     Writing a Common Buffer Bus Master DMA Driver

 

13. Windows Management Instrumentation (WMI))

13.1.     Event-Logging in Windows 2000

13.2.     Working with Messages

13.3.     Generating Log Entries

13.4.     Code Example:  An Error-Logging Routine

14. System Threads

14.1.     System Threads (A Description)

14.2.     Thread Synchronization

14.3.     Using Dispatcher Objects

14.4.     Code Example:  A Thread-Based Driver

15. Higher-Level Drivers

15.1.     An overview of Intermediate Drivers

15.2.     Writing Layers Drivers

15.3.     Writing I/O Completion Routines

15.4.     Allocating Additional IRPs

15.5.     Writing Filter Drivers

15.6.     Code Example:  A Filter Driver

15.7.     Writing Tightly Coupled Drivers

 

16. Driver Installation

16.1.     Installation of a Driver

16.1.1.                    Auto-install using INF files

16.1.2.                    Manual install (for some legacy drivers)

16.1.3.                    Controlling Driver Load Sequence

17. Testing and Debugging Drivers

17.1.     Some Guidelines for Driver Testing

17.2.     Some Thoughts About Driver Bugs

17.3.     Reading Crash Screens

17.4.     An Overview of WINDBG

17.5.     Analyzing a Crash Dump

17.6.     Interactive Debugging

17.7.     Writing WINDBG Extensions

17.8.     Code Example:  A WINDBG Extension

17.9.     Miscellaneous Debugging Technique

A.    The Development Environment

A.1.        Hardware and Software Requirements

A.2.        Debug Symbol Files

A.3.        Enabling Crash Dumps on the Target System

A.4.        Enabling the Target System’s Debug Client

B.    Common Bugcheck Codes

C.    Common Bugcheck Codes