Introduction
- Who Should Read This Book
- What You Should Know to Use This Book
- Sample Code
Chapter 1: Foundations
- Windows Architecture Overview
- Processes
- Dynamic Link Libraries
- Virtual Memory
- Threads
- General System Architecture
- Windows Application Development
- Your First Application
- Working with Strings
- Strings in the C/C++ Runtime
- String Output Parameters
- Safe String Functions
- 32-bit vs. 64-bit Development
- Coding Conventions
- C++ Usage
- Handling API Errors
- Defining Custom Error Codes
- The Windows Version
- Getting the Windows Version
- Exercises
- Summary
Chapter 2: Objects and Handles
- Kernel Objects
- Running a Single Instance Process
- Handles
- Pseudo Handles
- RAII for Handles
- Using WIL
- Creating Objects
- Object Names
- Sharing Kernel Objects
- Sharing by Name
- Sharing by Handle Duplication
- Private Object Namespaces
- Bonus: WIL Wrappers for Private Namespaces
- Other Objects and Handles
- User Objects
- GDI Objects
- Summary
Chapter 3: Processes
- Process Basics
- Processes in Process Explorer
- Process Creation
- The main Functions
- Process Environment Variables
- Creating Processes
- Window Stations and Desktops
- Handle Inheritance
- Process Drive Directories
- Process (and Thread) Attributes
- Protected and PPL Processes
- UWP Processes
- Minimal and Pico Processes
- Process Termination
- Enumerating Processes
- Using
EnumProcesses - Using the Toolhelp Functions
- Using the WTS Functions
- Using the Native API
- Exercises
- Summary
Chapter 4: Jobs
- Introduction to Jobs
- Creating Jobs
- Nested Jobs
- Querying Job Information
- Job Accounting Information
- Querying for Job Process List
- Setting Job Limits
- CPU Rate Limit
- User Interface Limits
- Job Notifications
- Silos
- Exercises
- Summary
Chapter 5: Threads Basics
- Introduction
- Sockets, Cores, and Logical Processors
- Creating and Managing Threads
- The Primes Counter Application
- Running Primes Counter
- Terminating Threads
- A Thread’s Stack
- A Thread’s Name
- What About the C++ Standard Library?
- Exercises
- Summary
Chapter 6: Thread Scheduling
- Priorities
- Scheduling Basics
- Single CPU Scheduling
- The Quantum
- Processor Groups
- Multiprocessor Scheduling
- Affinity
- CPU Sets vs. Hard Affinity
- System CPU Sets
- Revised Scheduling Algorithm
- Observing Scheduling
- General Scheduling
- Hard Affinity
- CPU Sets
- Background Mode
- Priority Boosts
- Completing I/O Operations
- Foreground Process
- GUI Thread Wakeup
- Starvation Avoidance
- Other Aspects of Scheduling
- Suspend and Resume
- Suspending and Resuming a Process
- Sleeping and Yielding
- Summary
Chapter 7: Thread Synchronization (Intra-Process)
- Synchronization Basics
- Atomic Operations
- The Simple Increment Application
- The
InterlockedFamily of Functions - Critical Sections
- Locks and RAII
- Deadlocks
- The MD5 Calculator Application
- Calculating MD5 Hash
- The Hash Cache
- Image Loads Notifications
- Event Parsing
- Putting it All Together
- Reader Writer Locks
- RAII Wrappers
- MD5 Calculator 2
- Condition Variables
- The Queue Demo Application
- Waiting on Address
- Synchronization Barriers
- What About the C++ Standard Library?
- Exercises
- Summary
Chapter 8: Thread Synchronization (Inter-Process)
- Dispatcher Objects
- Succeeding a Wait
- The Mutex
- The Mutex Demo Application
- Abandoned Mutex
- The Semaphore
- The Queue Demo Application
- The Event
- Working with Events
- The Waitable Timer
- Other Wait Functions
- Waiting in Alertable State
- Waiting on GUI Threads
- Waiting for an Idle GUI Thread
- Signaling and Waiting Atomically
- Exercises
- Summary
Chapter 9: Thread Pools
- Why Use a Thread Pool?
- Thread Pool Work Callbacks
- The Simple Work Application
- Controlling a Work Item
- The MD5 Calculator Application
- Thread Pool Wait Callbacks
- Thread Pool Timer Callbacks
- The Simple Timer Sample
- Thread Pool I/O Callbacks
- Thread Pool Instance Operations
- The Callback Environment
- Private Thread Pools
- Cleanup Groups
- Exercises
- Summary
Chapter 10: Advanced Threading
- Thread Local Storage
- Dynamic TLS
- Static TLS
- Remote Threads
- The Breakin Application
- Thread Enumeration
- The thlist Application
- Caches and Cache Lines
- Wait Chain Traversal
- The Deadlock Detector Application
- Asynchronous WCT Sessions
- User Mode Scheduling
- Init Once Initialization
- Debugging Multithreaded Applications
- Breakpoints
- Parallel Stacks
- Parallel Watch
- Thread Names
- Exercises
- Summary
Chapter 11: File and Device I/O
- The I/O System
- The
CreateFileFunction - Working with Symbolic Links
- Path Length
- Directories
- Files
- Setting File Information
- Synchronous I/O
- Asynchronous I/O
ReadFileExandWriteFileEx- Manually Queued APC
- I/O Completion Ports
- The Bulk Copy Application
- Using the Thread Pool for I/O Completion
- The Bulk Copy 2 Application
- I/O Cancellation
- Devices
- Pipes and Mailslots
- Pipes
- Transactional NTFS
- File Search and Enumeration
- NTFS Streams
- Summary
Chapter 12: Memory Management Fundamentals
- Basic Concepts
- Process Address Space
- Page States
- Address Space Layout
- 32-bit Systems
- 64-bit Systems
- Address Space Usage
- Memory Counters
- Memory Compression
- Process Memory Counters
- Process Memory Map
- Page Protection
- Enumerating Address Space Regions
- The Simple VMMap Application
- More Address Space Information
- Sharing Memory
- Page Files
- WOW64
- WOW64 Redirections
- Virtual Address Translation
- Summary
