Windows 10 系统编程
引言
本教程基于 Pavel Yosifovich 所著《Windows 10 System Programming》的内容整理编写,面向想要深入理解 Windows 10 系统级编程的开发者。
这应该是继《Windows核心编程》之后、最近十年最好且唯一的关于 Windows 编程的书,其涉及的内容涵盖 Windows 7 到 Windows 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 操作、注册表通知、事务性注册表、远程注册表