只讲 Windows 设备 IO:这门课真正解决什么
很多讲 Windows 编程的课程,要么停在控制台窗口和 MFC 界面层,要么一上来就讲驱动开发,中间隔着一条深沟——程序到底怎么和操作系统内核交换数据。这门课填补的正是这段空白:它只围绕 同步异步 IO 展开,用文件读写作为主路线,把 Windows 操作系统最核心的 IO 模型讲透。
你会看到 CreateFile、ReadFile、WriteFile、FlushFileBuffers 这类 API 的完整调用过程,以及它们在同步和异步两种模式下分别是什么行为。更关键的是,课程用了大量篇幅处理 UNICODE 编码问题——这是初学者写 Windows 代码最常见也最容易卡壳的地方,宽字符和 ANSI 字符混用导致乱码、API 调用签名对不上,这类问题在课程里被单独拎出来解决。
换句话说,这门课不是教你怎么拖控件做界面,而是教你绕过界面,直接对话操作系统。学完后你会真正理解:一个文件从应用层到磁盘,中间经过了哪些 API、哪些内核机制,以及为什么有异步 IO 这种东西存在。
适合什么基础,建议先看哪几块
课程默认你已经掌握 C/C++ 基本语法,比如指针、结构体、函数调用,最好写过简单的控制台程序。如果你连 main 函数和头文件都还没搞清楚,直接看这门课会挫败感很强。但反过来,你也不需要先学完一整本《Windows 程序设计》——课程里附带的 VS2019 安装配置、初体验,以及 #pragma once 与 #ifndef 的讲解,就是为那些环境都还没搭好的学习者准备的。这部分作为加餐,建议初学者先看再动手,别直接跳到 IO API。
进入正题后,建议按这个顺序消化:先看课程概览,弄清楚这门课要解决什么问题,别急着看代码;然后跟着配置 VS2019,跑通第一个程序;接着重点关注 Windows IO API 详解、打开 IO 设备、写入文件设备、读取文件设备这四节,它们构成一条完整的主线;最后一定要看 UNICODE 编码那节,哪怕你觉得目前没遇到乱码,这部分也是后续所有 Windows 开发绕不过去的坎。
有 C 语言基础但没碰过 Win32 API 的人,建议把前面十一节全部按顺序过一遍,总时长约七小时,可以分两到三天完成。已经写过简单 Win32 程序、但对 IO 流程模糊不清的人,可以直接跳到 API 详解和同步异步对比的部分,最多四小时就能补上概念短板。
学完能独立做什么,资料怎么配合练习
学完这门课,你应该能独立写出一个完整的文件复制工具——从打开源文件、创建目标文件、读取数据块、写入目标文件到关闭句柄,全程自己完成,并且能正确处理 UNICODE 和 ANSI 路径。更进一步,你能改造它成为支持同步和异步切换的版本,理解为什么大文件拷贝时异步模式能改善用户体验,以及在什么场景下异步反而是过度设计。
练习时不要把视频看完就完事。每一节讲到 API 时,建议暂停视频,自己先写:先照着视频里的思路敲一遍,运行通过后,再尝试改动参数、改变缓冲区大小、故意触发错误,观察返回值和 GetLastError 的输出。尤其是 UNICODE 那节,建议动手写一个混用 char 和 wchar_t 的测试程序,亲眼看到乱码怎么产生、再看到用 TCHAR 或 W 版 API 怎么修复,这比背十遍规则都管用。
课程里只有概念讲解、没有对应配套练习文件,所以你得把每个 API 当作一道练习题:给自己规定“不看视频,凭记忆写出打开 →
课程目录
1-1 [同步异步IO] 七日成蝶课程体系说明(2020) (20:53) 1-2 [同步异步IO] 课程概览,学我所需 (03:02) 1-3 [同步异步IO] (加餐)VS2019下载安装 (11:49) 1-4 [同步异步IO] (加餐)VS2019初体验 (07:00) 1-5 [同步异步IO] (加餐)#pragma once与#ifndef (04:18) 1-6 [同步异步IO] Windows IO API详解 (21:12) 1-7 [同步异步IO] 打开IO设备 (08:17) 1-8 [同步异步IO] 写入文件设备 (05:22) 1-9 [同步异步IO] 强制写入设备 (03:15) 1-10 [同步异步IO] 读取文件设备 (06:02) 1-11 [同步异步IO] 解决UNICODE编码问题 (13:47) 1-12 [同步异步IO] 获取文件大小 (06:56) 1-13 [同步异步IO] 设置文件尾 (07:49) 1-14 [同步异步IO] 异步读写 (13:36) 1-15 [同步异步IO] 异步读写判断 (03:24) 1-16 [同步异步IO] 异步完成IO(一) (06:50) 1-17 [同步异步IO] 异步完成IO(二) (11:40) 1-18 [同步异步IO] 异步完成IO(三) (12:40) 1-19 [同步异步IO] 异步完成IO(四) (17:59) 1-20 [同步异步IO] 异步完成IO(五) (13:49) 1-21 [同步异步IO] 异步完成IO(六) (09:30) 1-22 [同步异步IO] windows调试之debugview本地调试 (07:22) 1-23 [同步异步IO] windows调试之debugview远程调试 (06:31) 2-1 [线程池] 课程概览,学我所需 (04:06) 2-2 [线程池] 线程池原理及API (16:39) 2-3 [线程池] 异步方式调用(上) (08:40) 2-4 [线程池] 异步方式调用(下) (08:42) 2-5 [线程池] 周期性调用 (30:15) 2-6 [线程池] 内核对象触发调用 (12:55) 2-7 [线程池] 异步IO完成触发调用 (15:54) 2-8 [线程池] 线程池同步-Interlocked族函数 (08:36) 2-9 [线程池] 线程池同步-临界区 (08:09) 2-10 [线程池] 线程池同步-事件内核对象 (09:14) 2-11 [线程池] 线程池同步-互斥量 (04:13) 2-12 [线程池] 线程池同步-信号量 (06:41) 2-13 [线程池] 逻辑完成-解除等待 (02:55) 2-14 [线程池] 线程资源判断 (07:29) 2-15 [线程池] 线程资源池定制 (12:00) 3-1 [动态链接库] 课程概览,学我所需 (05:47) 3-2 [动态链接库] 原理说明与初步接触 (31:58) 3-3 [动态链接库] 从HelloWorld开始 (07:15) 3-4 [动态链接库] 使用dumpbin查看dll和exe (07:05) 3-5 [动态链接库] 初始化加载法调用无参Dll (08:19) 3-6 [动态链接库] 初始加载法调用无参Dll (08:19) 3-7 [动态链接库] 随用随加载法调用动态链接库 (11:59) 3-8 [动态链接库] 导出函数带参数的DLL (08:38) 3-9 [动态链接库] 初始加载法调用函数带参数的DLL (07:39) 3-10 [动态链接库] 隐式调用带参函数的dll (09:23) 3-11 [动态链接库] C++调用C语言DLL的处理技巧 (07:30) 3-12 [动态链接库] C++生成的DLL与C语言的区别 (04:07) 3-13 [动态链接库] C++调用C++生成的DLL (05:28) 3-14 [动态链接库] DLL导出类 (05:35) 3-15 [动态链接库] C++调用导出类 (03:59) 3-16 [动态链接库] 类库的工业化设计(上) (10:15) 3-17 [动态链接库] 类库的工业化设计(下) (11:18) 3-18 [动态链接库] 通过向导自动生成DLL (04:22) 3-19 [动态链接库] 入口函数四种情况详解 (17:47) 3-20 [动态链接库] 安装C#、VB、Python (03:34) 3-21 [动态链接库] __cdecl与__stdcall (07:37) 3-22 [动态链接库] 通过def文件规范C语言导出符号 (05:07) 3-23 [动态链接库] 通过def文件规范C++函数导出符号 (01:56) 3-24 [动态链接库] 通过def文件规范C++带参函数导出符号 (05:03) 3-25 [动态链接库] C#调用C语言编写的DLL (12:41) 3-26 [动态链接库] C#无法直接调用C++导出的DLL (04:38) 3-27 [动态链接库] C#调用def导出的C++动态链接库 (02:51) 3-28 [动态链接库] C#调用有参导出函数(上) (06:36) 3-29 [动态链接库] C#调用有参导出函数(下) (03:18) 3-30 [动态链接库] VB调用dll动态链接库(上) (07:44) 3-31 [动态链接库] VB调用dll动态链接库(下) (10:42) 3-32 [动态链接库] Python调用dll动态链接库(上) (05:38) 3-33 [动态链接库] Python调用dll动态链接库(下) (02:44) 4-1 [注入DLL] 课程概览,学我所需 (04:05) 4-2 [注入DLL] 工作原理及技术说明 (33:16) 4-3 [注入DLL] VS201X的程序如何在windows XP下跑起来 (08:25) 4-4 [注入DLL] 注册表知识准备 (10:11) 4-5 [注入DLL] 注册表注入DLL(上) (17:03) 4-6 [注入DLL] 注册表注入DLL(下) (05:42) 4-7 [注入DLL] DebugView验证注入DLL (07:34) 4-8 [注入DLL] ProcessExplorer验证注入DLL (03:23) 4-9 [注入DLL] 验证win7系统注入DLL的有效性 (06:46) 4-10 [注入DLL] 函数转发注入DLL(一) (10:32) 4-11 [注入DLL] 函数转发注入DLL(二) (08:08) 4-12 [注入DLL] 函数转发注入DLL(三) (13:35) 4-13 [注入DLL] 函数转发注入DLL(四) (04:28) 4-14 [注入DLL] 函数转发注入DLL(五) (05:07) 4-15 [注入DLL] 通过SetWindowsHookEx注入DLL(一) (11:04) 4-16 [注入DLL] 通过SetWindowsHookEx注入DLL(二) (22:12) 4-17 [注入DLL] 通过SetWindowsHookEx注入DLL(三) (05:50) 4-18 [注入DLL] 通过SetWindowsHookEx注入DLL(四) (10:01) 4-19 [注入DLL] 通过SetWindowsHookEx注入DLL(五) (05:06) 4-20 [注入DLL] 通过SetWindowsHookEx注入DLL(六) (15:10) 4-21 [注入DLL] 通过SetWindowsHookEx注入DLL(七) (12:47) 4-22 [注入DLL] 通过SetWindowsHookEx注入DLL(八) (07:10) 4-23 [注入DLL] 全局钩子(上) (06:48) 4-24 [注入DLL] 全局钩子(下) (14:00) 4-25 [注入DLL] 全局钩子之共享段(上) (15:20) 4-26 [注入DLL] 全局钩子之共享段(下) (03:50) 4-27 [注入DLL] 挂钩指定线程(上) (10:01) 4-28 [注入DLL] 挂钩指定线程(下) (03:12) 4-29 [注入DLL] 远程注入DLL(一) (07:03) 4-30 [注入DLL] 远程注入DLL(二) (21:40) 4-31 [注入DLL] 远程注入DLL(三) (07:10) 4-32 [注入DLL] 远程注入DLL(四) (05:42) 4-33 [注入DLL] 远程注入DLL(五) (03:32) 5-1 [拦截API] 课程概览,学我所需 (03:03) 5-2 [拦截API] 拦截原理说明 (06:22) 5-3 [拦截API] 先睹为快 (03:41) 5-4 [拦截API] 制作目标API (04:01) 5-5 [拦截API] 导出地址表(IAT) (10:22) 5-6 [拦截API] 核心编码(上) (25:43) 5-7 [拦截API] (加餐)对照IAT表详解核心代码 (08:40) 5-8 [拦截API] 核心编码(下) (05:38) 5-9 [拦截API] 拦截调试 (09:36) 5-10 [拦截API] 远程注入+拦截API(一) (05:06) 5-11 [拦截API] 远程注入+拦截API(二) (06:16) 5-12 [拦截API] 远程注入+拦截API(三) (04:58) 5-13 [拦截API] 远程注入+拦截API(四) (05:43)






