Introduction
- Who Should Read This Book
- What You Should Know to Use This Book
- Sample Code
Chapter 1: Windows Internals Overview
- Processes
- Virtual Memory
- Page States
- System Memory
- Threads
- Thread Stacks
- System Services (a.k.a. System Calls)
- General System Architecture
- Handles and Objects
- Object Names
- Accessing Existing Objects
Chapter 2: Getting Started with Kernel Development
- Installing the Tools
- Creating a Driver Project
- The DriverEntry and Unload Routines
- Deploying the Driver
- Simple Tracing
- Exercises
- Summary
Chapter 3: Kernel Programming Basics
- General Kernel Programming Guidelines
- Unhandled Exceptions
- Termination
- Function Return Values
- IRQL
- C++ Usage
- Testing and Debugging
- Debug vs. Release Builds
- The Kernel API
- Functions and Error Codes
- Strings
- Dynamic Memory Allocation
- Lists
- The Driver Object
- Device Objects
- Summary
Chapter 4: Driver from Start to Finish
- Introduction
- Driver Initialization
- Passing Information to the Driver
- Client / Driver Communication Protocol
- Creating the Device Object
- Client Code
- The Create and Close Dispatch Routines
- The
DeviceIoControlDispatch Routine - Installing and Testing
- Summary
Chapter 5: Debugging
- Debugging Tools for Windows
- Introduction to WinDbg
- Tutorial: User mode debugging basics
- Kernel Debugging
- Local Kernel Debugging
- Local kernel Debugging Tutorial
- Full Kernel Debugging
- Configuring the Target
- Configuring the Host
- Kernel Driver Debugging Tutorial
- Summary
Chapter 6: Kernel Mechanisms
- Interrupt Request Level
- Raising and Lowering IRQL
- Thread Priorities vs. IRQLs
- Deferred Procedure Calls
- Using DPC with a Timer
- Asynchronous Procedure Calls
- Critical Regions and Guarded Regions
- Structured Exception Handling
- Using
__try/__except - Using
__try/__finally - Using C++ RAII Instead of
__try/__finally - System Crash
- Crash Dump Information
- Analyzing a Dump File
- System Hang
- Thread Synchronization
- Interlocked Operations
- Dispatcher Objects
- Mutex
- Fast Mutex
- Semaphore
- Event
- Executive Resource
- High IRQL Synchronization
- The Spin Lock
- Work Items
- Summary
Chapter 7: The I/O Request Packet
- Introduction to IRPs
- Device Nodes
- IRP Flow
- IRP and I/O Stack Location
- Viewing IRP Information
- Dispatch Routines
- Completing a Request
- Accessing User Buffers
- Buffered I/O
- Direct I/O
- User Buffers for
IRP_MJ_DEVICE_CONTROL - Putting it All Together: The Zero Driver
- Using a Precompiled Header
- The
DriverEntryRoutine - The Read Dispatch Routine
- The Write Dispatch Routine
- Test Application
- Summary
Chapter 8: Process and Thread Notifications
- Process Notifications
- Implementing Process Notifications
- The
DriverEntryRoutine - Handling Process Exit Notifications
- Handling Process Create Notifications
- Providing Data to User Mode
- The User Mode Client
- Thread Notifications
- Image Load Notifications
- Exercises
- Summary
Chapter 9: Object and Registry Notifications
- Object Notifications
- Desktop Objects
- Pre-Operation Callback
- Post-Operation Callback
- The Process Protector Driver
- Object Notification Registration
- Managing Protected Processes
- The Pre-Callback
- The Client Application
- Registry Notifications
- Handling Pre-Notifications
- Handling Post-Operations
- Performance Considerations
- Implementing Registry Notifications
- Handling Registry Callback
- Modified Client Code
- Exercises
- Summary
Chapter 10: Introduction to File System Mini-Filters
- Introduction
- Loading and Unloading
- Initialization
- Pipes and Mailslots
- Direct Access Volume (DAX or DAS)
- Operations Callback Registration
- The Altitude
- Installation
- INF Files
- Installing the Driver
- Processing I/O Operations
- Pre Operation Callbacks
- Post Operation Callbacks
- The Delete Protector Driver
- Handling Pre-Create
- Handling Pre-Set Information
- Some Refactoring
- Generalizing the Driver
- Testing the Modified Driver
- File Names
- File Name Parts
- RAII
FLT_FILE_NAME_INFORMATIONwrapper - The Alternate Delete Protector Driver
- Handling Pre-Create and Pre-Set Information
- Testing the Driver
- Contexts
- Context Types
- Managing Contexts
- Initiating I/O Requests
- The File Backup Driver
- The Post Create Callback
- The Pre-Write Callback
- The Post-Cleanup Callback
- Testing the Driver
- Restoring Backups
- User Mode Communication
- Creating the Communication Port
- User Mode Connection
- Sending and Receiving Messages
- Enhanced File Backup Driver
- The User Mode Client
- Debugging
- Exercises
- Summary
Chapter 11: Miscellaneous Topics
- Driver Signing
- Driver Verifier
- Example Driver Verifier Sessions
- Using the Native API
- Filter Drivers
- Filter Driver Implementation
- Attaching Filters
- Attaching Filters at Arbitrary Time
- Filter Cleanup
- More on Hardware-Based Filter Drivers
- Device Monitor
- Adding a Device to Filter
- Removing a Filter Device
- Initialization and Unload
- Handling Requests
- Testing the Driver
- Results of Requests
- Driver Hooking
- Kernel Libraries
- Summary
