"If you're a systems-level 32-bit or 64-bit Windows developer, whether using the Windows API directly or via .NET interop, you'll definitely want to take a look at this update to Johnson Hart's well-respected and well-loved book. Johnson starts with Windows history and cultural issues and moves through basic and advanced system services in a thoughtful, thorough manner. If Mr. Rogers wrote a book with David Cutler, this is what they'd come up with."
-Chris Sells, Longhorn Content Strategist,
"While focusing on UNIX developers that are looking to augment their skills or simply jump ship, Windows System Programming, Third Edition is a book that even some seasoned systems-level Windows developers will undoubtedly find useful. This is not your average bland GUI treatise; Hart takes you down to the metal, explains all the relevant concepts clearly and in-depth, and gives you an extensive library of high-quality code examples that can be easily adapted for your own larger applications. Even if you've created server applications before, Windows System Programming will teach you new tricks, shed new light on concepts you thought you'd mastered, and offer new strategies for creating robust and secure solutions."
-Klaus H. Probst, Senior Architect,
Spherion Technology Services; Microsoft MVP
"This book is quite easy to follow; there are clear explanations of everything. Even the explanation of the standards is readable! For a developer not familiar with developing with Windows, Hart's book also provides basic information on where Windows was and where it is today, plus a great explanation of how it is different from Posix and Unix."
-Eric Landes, Microsoft MVP,
"Even advanced developers will always need to have a book like this one on hand when the abstractions of a platform like .NET are inadequate or when they need to know more about how .NET is implemented. And the focus on low-level programming (specifically memory management and IO) and other non-GUI topics makes it stand out as superior among other Windows programming books. In keeping the GUI focus to a minimum, Hart's book is able to be comprehensive on the topics contained within."
-Michael Davidson, IT Analyst
Windows System Programming, Third Edition gives a solid grounding on using the core Windows APIs, includingWin64; is updated for Windows Server 2003, Windows XP, and the Microsoft Visual Studio .NET Framework, and has extensive examples illustrate all topics and show performance impact and tradeoffs
A practical guide to the central features and functions of the Windows API, Windows System Programming, Third Edition, will get you up and running with Windows XP and 2003, as well as other Windows systems. Unlike most Windows programming resources, this book focuses exclusively on the core system services-file system, memory, processes and threads, synchronization, communication, and security-rather than on the more commonly featured graphical user interface functions. Especially geared for those already familiar with UNIX or other high-end operating systems, Windows System Programming, Third Edition, helps you to build on your knowledge base to learn the most important features quickly and easily.
This new edition has been updated and enhanced with coverage of new API functions, network programming, Windows Services, process and thread management, synchronization, and application performance on single and multiprocessor systems. It also describes techniques for porting applications to Win64, the new Windows 64-bit API.
Beginning with an examination of the features required in a single-process application, the text gradually progresses to increasingly sophisticated functions relating to a multithreaded environment. Each chapter contains realistic examples to illustrate the topics. You will find extensive coverage of such critical Windows topics as:
Short, practical examples illustrate each topic and are included on the companion Web site (www.awprofessional.com/titles/0321256190). The appendixes provide performance measurements and compare Windows, UNIX, and the C library.
Johnson M. Hart is a software trainer and consultant specializing in Windows, L inux, and UNIX application development, enhancement, and maintenance. John develops and delivers professional training courses and seminars to clients worldwide, and he is the author of numerous technical articles.
1. Getting Started with Win32 and Win64.
Operating System Essentials.
The Windows Market Role.
Windows, Standards, and Open Systems.
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.
2. Using the Windows File System and Character I/O.
The Windows File Systems.
Opening, Reading, Writing, and Closing Files.
Interlude: Unicode and Generic Characters.
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.
3. Advanced File and Directory Processing, and the Registry.
The 64-Bit File System.
Getting the File Size.
Example: Random Record Updates.
File Attributes and Directory Processing.
Example: Listing File Attributes.
Example: Setting File Times.
File Processing Strategies.
Example: Listing Registry Keys and Contents.
4. Exception Handling.
Exceptions and Their Handlers.
Errors and Exceptions.
Example: Treating Errors as Exceptions.
Example: Using Termination Handlers to Improve Program Quality.
Example: Using a Filter Function.
Console Control Handlers.
Example: A Console Control Handler.
Vectored Exception Handling.
5. Memory Management, Memory-Mapped Files, and DLLs.
Win32 and Win64 Memory Management Architecture.
Managing Heap Memory.
Example: Sorting Files with a Binary Search Tree.
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.
6. Process Management.
Windows Processes and Threads.
Process Handle Counts.
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.
7. Threads and Scheduling.
Using the C Library in Threads.
Example: Multithreaded Pattern Searching.
The Boss/Worker and Other Threading Models.
Example: Merge-Sort-Divide and Conquer to Exploit SMP.
Thread Local Storage.
Process and Thread Priority and Scheduling.
Pitfalls and Common Mistakes.
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.
Example: A Producer/Consumer System.
More Mutex and CRITICAL_SECTION Guidelines.
More Interlocked Functions.
Memory Management Performance Considerations.
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.
I/O Completion Ports.
Performance Guidelines and Pitfalls.
10. Advanced Thread Synchronization.
The Condition Variable Model and Safety Properties.
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.
11. Interprocess Communication.
Example: I/O Redirection Using an Anonymous Pipe.
Named Pipe Transaction Functions.
Example: A Client/Server Command Line Processor.
Comments on the Client/Server Command Line Processor.
Pipe and Mailslot Creation, Connection, and Naming.
Example: A Server That Clients Can Locate.
Comments on Thread Models.
12. Network Programming with 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.
Line-Oriented Messages, DLL Entry Points, and TLS.
Example: A Thread-Safe DLL for Socket Messages.
Example: An Alternative Thread-Safe DLL Strategy.
Berkeley Sockets vs. Windows Sockets.
Overlapped I/O with Windows Sockets.
Windows Sockets 2.
13. Windows Services.
Writing Windows Services-Overview.
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.
Notes on Debugging a Service.
14. Asynchronous Input/Output and Completion Ports.
Overview of Windows Asynchronous 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.
Example: Using a Waitable Timer.
I/O Completion Ports.
Example: A Server Using I/O Completion Ports.
15. Securing Windows Objects.
Security Overview: The Security Descriptor.
Security Descriptor Control Flags.
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.
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).
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 8-10: Thread Synchronization.
Chapter 11: Interprocess Communication.
Chapter 14: Asynchronous I/O.
Chapter 15: Securing Windows Objects.
Appendix C. Performance Results.
Running the Tests.