Tables
Programs
Preface
Audience
Changes in the Third Edition
Organization
UNIX and C Library Notes and Tables
Examples
The Web Site
Acknowledgments
Chapter 1. Getting Started with Win32 and Win64
Operating System Essentials
Windows Evolution
Windows Versions
The Windows Market Role
Windows, Standards, and Open Systems
Windows Principles
Getting Ready for Win64
The Standard C Library: When to Use It for File Processing
What You Need to Use This Book
Example: A Simple Sequential File Copy
Summary
Exercises
Chapter 2. Using the Windows File System and Character I/O
The Windows File Systems
File Naming
Opening, Reading, Writing, and Closing Files
Interlude: Unicode and Generic Characters
Unicode Strategies
Standard Devices and Console I/O
Example: Printing and Prompting
Example: Error Processing
Example: Copying Multiple Files to Standard Output
Example: ASCII to Unicode Conversion
File and Directory Management
Example: Printing the Current Directory
Summary
Exercises
Chapter 3. Advanced File and Directory Processing, and the Registry
The 64-Bit File System
File Pointers
Getting the File Size
Example: Random Record Updates
File Attributes and Directory Processing
Mount Points
Example: Listing File Attributes
Example: Setting File Times
File Processing Strategies
File Locking
The Registry
Registry Management
Example: Listing Registry Keys and Contents
Summary
Exercises
Chapter 4. Exception Handling
Exceptions and Their Handlers
Floating-Point Exceptions
Errors and Exceptions
Example: Treating Errors as Exceptions
Termination Handlers
Example: Using Termination Handlers to Improve Program Quality
Example: Using a Filter Function
Console Control Handlers
Example: A Console Control Handler
Vectored Exception Handling
Summary
Exercises
Chapter 5. Memory Management, Memory-Mapped Files, and DLLs
Win32 and Win64 Memory Management Architecture
Heaps
Managing Heap Memory
Example: Sorting Files with a Binary Search Tree
Memory-Mapped Files
Example: Sequential File Processing with Mapped Files
Example: Sorting a Memory-Mapped File
Example: Using Based Pointers
Dynamic Link Libraries
Example: Explicitly Linking a File Conversion Function
The DLL Entry Point
DLL Version Management
Summary
Exercises
Chapter 6. Process Management
Windows Processes and Threads
Process Creation
Process Handle Counts
Process Identities
Duplicating Handles
Exiting and Terminating a Process
Waiting for a Process to Terminate
Environment Blocks and Strings
Example: Parallel Pattern Searching
Processes in a Multiprocessor Environment
Process Execution Times
Example: Process Execution Times
Generating Console Control Events
Example: Simple Job Management
Job Objects
Summary
Exercises
Chapter 7. Threads and Scheduling
Thread Overview
Thread Basics
Thread Management
Using the C Library in Threads
Example: Multithreaded Pattern Searching
Performance Impact
The Boss/Worker and Other Threading Models
Example: Merge-SortDivide and Conquer to Exploit SMP
Thread Local Storage
Process and Thread Priority and Scheduling
Thread States
Pitfalls and Common Mistakes
Timed Waits
Fibers
Summary
Exercises
Chapter 8. Thread Synchronization
The Need for Thread Synchronization
Thread Synchronization Objects
The CRITICAL_SECTION Object
A CRITICAL_SECTION for Protecting Shared Variables
Example: A Simple Producer/Consumer System
Mutexes
Semaphores
Events
Example: A Producer/Consumer System
More Mutex and CRITICAL_SECTION Guidelines
More Interlocked Functions
Memory Management Performance Considerations
Summary
Exercises
Chapter 9. Synchronization Performance Impact and Guidelines
Synchronization Performance Impact
A Model Program for Performance Experimentation
Tuning SMP Performance with CS Spin Counts
Semaphore "Throttles" to Reduce Thread Contention
Processor Affinity
I/O Completion Ports
Performance Guidelines and Pitfalls
Summary
Exercises
Chapter 10. Advanced Thread Synchronization
The Condition Variable Model and Safety Properties
Using SignalObjectAndWait
Example: A Threshold Barrier Object
A Queue Object
Example: Using Queues in a Multistage Pipeline
Asynchronous Procedure Calls
Queuing Asynchronous Procedure Calls
Alertable Wait States
Safe Thread Cancellation
Pthreads for Application Portability
Thread Stacks and the Number of Threads
Hints for Designing, Debugging, and Testing
Beyond the Windows API
Summary
Exercises
Chapter 11. Interprocess Communication
Anonymous Pipes
Example: I/O Redirection Using an Anonymous Pipe
Named Pipes
Named Pipe Transaction Functions
Example: A Client/Server Command Line Processor
Comments on the Client/Server Command Line Processor
Mailslots
Pipe and Mailslot Creation, Connection, and Naming
Example: A Server That Clients Can Locate
Comments on Thread Models
Summary
Exercises
Chapter 12. Network Programming with Windows Sockets
Windows Sockets
Socket Server Functions
Socket Client Functions
Comparing Named Pipes and Sockets
Example: A Socket Message Receive Function
Example: A Socket-Based Client
Example: A Socket-Based Server with New Features
In-Process Servers
Line-Oriented Messages, DLL Entry Points, and TLS
Example: A Thread-Safe DLL for Socket Messages
Example: An Alternative Thread-Safe DLL Strategy
Datagrams
Berkeley Sockets vs. Windows Sockets
Overlapped I/O with Windows Sockets
Windows Sockets 2
Summary
Exercises
Chapter 13. Windows Services
Writing Windows ServicesOverview
The main() Function
The ServiceMain() Functions
The Service Control Handler
Example: A Service "Wrapper"
Managing Windows Services
Summary: Service Operation and Management
Example: A Service Control Shell
Sharing Kernel Objects with a Service
Event Logging
Notes on Debugging a Service
Summary
Exercises
Chapter 14. Asynchronous Input/Output and Completion Ports
Overview of Windows Asynchronous I/O
Overlapped I/O
Example: Synchronizing on a File Handle
Example: File Conversion with Overlapped I/O and Multiple Buffers
Extended I/O with Completion Routines
Example: File Conversion with Extended I/O
Asynchronous I/O with Threads
Waitable Timers
Example: Using a Waitable Timer
I/O Completion Ports
Example: A Server Using I/O Completion Ports
Summary
Exercises
Chapter 15. Securing Windows Objects
Security Attributes
Security Overview: The Security Descriptor
Security Descriptor Control Flags
Security Identifiers
Managing ACLs
Example: UNIX-Style Permission for NTFS Files
Example: Initializing Security Attributes
Reading and Changing Security Descriptors
Example: Reading File Permissions
Example: Changing File Permissions
Securing Kernel and Communication Objects
Example: Securing a Process and Its Threads
Overview of Additional Security Features
Summary
Exercises
Chapter 16. Win64 Programming
Current Win64 Status
64-Bit Architecture Overview
The Win64 Programming Model
The Data Types
Legacy Code Migration
Example: Migrating sortMM (Program 5-5)
Summary
Exercises
Appendix A. Using the Sample Programs
Web Site Organization
Include File Listings
Additional Utility Programs
Appendix B. Windows, UNIX, and C Library Comparisons
Chapters 2 and 3: File and Directory Management
Chapter 4: Exception Handling
Chapter 5: Memory Management, Memory-Mapped Files, and DLLs
Chapter 6: Process Management
Chapter 7: Threads and Scheduling
Chapters 810: Thread Synchronization
Chapter 11: Interprocess Communication
Chapter 14: Asynchronous I/O
Chapter 15: Securing Windows Objects
Appendix C. Performance Results
Test Configurations
Performance Measurements
Running the Tests
Bibliography
Index