Skip to content
Published at:

Windows 10 系统编程

引言

本教程基于 Pavel Yosifovich 所著《Windows 10 System Programming》的内容整理编写,面向想要深入理解 Windows 10 系统级编程的开发者。

这应该是继《Windows核心编程》之后、最近十年最好且唯一的关于 Windows 编程的书,其涉及的内容涵盖 Windows 7Windows 10 程序的方方面面,非常详尽、通俗易懂。

很多人觉得利用 Windows API 进行 Windows 原生编程已经日薄西山了,Windows 系统不常用了,这其实是程序员的幸存者偏差。学习 Windows 编程的好处如下:

  • 在如今的求职大环境下,Windows 和 Linux C/C++ 双修,更有竞争力;
  • 很多著名的开源代码都有 Windows 版本,熟悉 Windows 编程让学习这些源码变得容易;
  • 最后一点,也是最重要的一点,就是提高你技术人生的职业容错性——如果被迫退居二三线城市,庞大的 Windows 软件需求市场,让你能够为其他人或者公司开发一些 Windows 实用工具或者软件。

本专栏翻译自 Pavel Yosifovich 的《Windows 10 System Programming》,首发于 cppguide.cn

适合阅读本书的人群

本书面向以 Windows 平台为目标的软件开发人员,这些人员需要获得更高级别的框架和库无法实现的控制能力。

该书使用 C 和 C++ 编写示例,因为 Windows API 大多基于 C 语言。当 C++ 在维护性、清晰度、资源管理等方面更优时才会使用它。书中不会使用复杂的 C++ 结构(如模板元编程),重点不在于 C++,而在于 Windows。

其他语言可通过互操作机制调用 Windows API,例如 .NET 语言(C#、VB、F# 等)可以使用平台调用(P/Invoke)来调用 Windows API,而 Python、Rust、Java 等也都有各自等效的功能。

使用本书前应了解的内容

读者应熟练掌握 C 编程语言,尤其要熟悉指针、结构体及其标准库,因为这些在 Windows API 中频繁出现。强烈建议读者具备基本的 C++ 知识,不过仅精通 C 语言也可以研读本书。

示例代码

本书所有示例代码可在 CppGuide 的 GitHub 仓库获取:https://github.com/balloonwj/CppGuide

目录

第1章:基础

Windows 架构概述、进程、动态链接库、虚拟内存、线程、通用系统架构、Windows 应用程序开发、第一个应用程序、处理字符串、C/C++ 运行时中的字符串、字符串输出参数、安全字符串函数、32 位与 64 位开发、编码规范、C++ 用法、处理 API 错误、定义自定义错误代码、Windows 版本

第2章:对象和句柄

内核对象、运行单实例进程、句柄、伪句柄、句柄的 RAII、使用 WIL、创建对象、对象名称、共享内核对象(按名称共享、通过句柄复制共享)、私有对象命名空间、用户对象和 GDI 对象

第3章:进程

进程基础、Process Explorer 中的进程、进程创建、main 函数、进程环境变量、CreateProcess、句柄继承、进程驱动器目录、进程属性、受保护进程和 PPL 进程、UWP 进程、最小化进程和 Pico 进程、进程终止、枚举进程

第4章:作业

作业简介、创建作业、嵌套作业、查询作业信息、作业记账、设置作业限制、作业通知、隔离仓

第5章:线程基础

Socket/内核/逻辑处理器、创建和管理线程、质数计数器应用、终止线程、线程栈、线程名称、C++ 标准库对比

第6章:线程调度

优先级、调度基础、时间片、处理器组、多处理器调度、亲和力、CPU 集、后台模式、优先级提升、暂停和恢复、睡眠和让步

第7章:线程同步(进程内)

原子操作、Interlocked 函数族、临界区、死锁、读写锁、条件变量、等待地址、同步屏障

第8章:线程同步(进程间)

Mutex、Semaphore、Event、Waitable Timer、可提醒等待、GUI 线程等待

第9章:线程池

工作回调、等待回调、定时器回调、I/O 回调、回调环境、私有线程池、清理组

第10章:高级线程处理

TLS、远程线程、线程枚举、缓存和缓存行、等待链遍历、UMS、Init Once、调试多线程

第11章:文件和设备 I/O

CreateFile、符号链接、同步/异步 I/O、I/O 完成端口、I/O 取消、管道和邮槽、事务性 NTFS、NTFS 流

第12章:内存管理基础

进程地址空间、页面状态、地址空间布局、内存计数器、VMMap、共享内存、页面文件、WOW64、虚拟地址转换

第13章:内存操作

VirtualAlloc、工作集、堆、C/C++ 运行时、内存保护、锁定内存、跨进程读写、大页面、NUMA

第14章:内存映射文件

文件映射、共享内存(文件后备)、数据一致性

第15章:动态链接库

构建 DLL、隐式/显式链接、调用约定、DllMain、DLL 注入、Windows 钩子、API 挂钩、延迟加载

第16章:安全性

SID、令牌、模拟、特权、安全描述符、UAC、完整性级别、UIPI、CFG、进程缓解

第17章:注册表

根键、CRUD 操作、注册表通知、事务性注册表、远程注册表