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 Systems Debug Client
B. Common Bugcheck Codes
C. Common Bugcheck Codes