很多人写 Windows 程序的状态是这样的:界面能跑,功能也实现了,但一旦遇到进程间通信、句柄泄漏、线程同步、消息循环这些词,就只能靠搜索和试错。平时不显,一到要排查卡顿、崩溃、权限失败、驱动通信,就会发现底层那块是空的。

这门课的定位就是补这块空缺。它不教你怎么拖控件,而是把 Windows 这套操作系统对外暴露的编程接口从头理一遍:NT 架构怎么分层、Win32 API 到底由什么组成、SDK 提供了哪些能力、MFC 又在上面封装了什么。标题里的 NT、SDK、MFC、API 不是并列的四个模块,而是四个层次——上面是你写的代码,下面一路到内核。

先搞清楚用户态和内核态这条线

这是整门课的地基。你在应用层调用一个文件读取函数,它最终会经过系统调用进入内核,由内核里的对象管理器、I/O 管理器去完成真正的工作。理解这条路径,你才能明白为什么有些操作需要管理员权限、为什么某些 API 在旧系统上行为不一样、为什么句柄和内核对象是两种东西。

如果以前只是照着示例代码抄调用顺序,这部分会让你第一次把「为什么这么写」补上。

Win32 API 不是一堆函数的无序集合

课程把 API 按基础服务、文件系统、外部设备、进程与线程等方向分类来讲,而不是一个一个函数地念。这个分类很重要:同一类 API 背后往往对应同一套内核对象和同一套使用约定。比如进程、线程、文件、事件、互斥体,在系统里都是可等待对象,理解了这个共性,再去看具体函数就不容易散。

R0 和 R3 接口的区别、向下兼容是怎么实现的,这些内容对做兼容性排查的人尤其有用——同一个功能在新旧系统上表现不同,问题常常就出在这一层。

MFC 该学,但别当成 Windows 编程的全部

MFC 是 C++ 环境下对 Win32 的一套封装,把窗口、消息映射、文档视图这些模式封装成类。课程会讲它的框架结构和应用方式。需要提醒的是:学 MFC 之前最好先知道它封装了什么。否则你调用了某个成员函数,却不知道它底层发的是哪条消息、对应哪个 API,一遇到框架没覆盖的场景还是会卡住。

把这门课当顺序来学,先 API 后 MFC,收益比只学 MFC 大得多。

看完应该能回答的问题

  • 用户态调用一个 Win32 函数,到内核之间大致走了哪几步?
  • 句柄和指针有什么区别,为什么句柄会泄漏?
  • 进程和线程在系统里的关系是什么,创建线程时到底分配了哪些资源?
  • 为什么有些 API 在旧版本 Windows 上不能用,向下兼容是靠什么做的?
  • MFC 的消息映射机制和直接写 Win32 窗口过程相比,解决了什么问题?
  • SDK 里除了 API 还包括什么,链接库、头文件、工具分别在什么时候用到?

适合谁,以及怎么用

如果你只写过上层业务代码,没碰过进程、线程、句柄、消息这些概念,这门课的信息量会偏大,建议边看边动手写小程序验证,不要只看。如果你已经在做 Windows 客户端或系统相关开发,但底层知识是零散拼起来的,这门课的价值在于把碎片串成一条线。

配套练习建议从三个方向入手:自己写一个多线程程序并观察同步问题;用 API 直接创建窗口而不是靠框架;用任务管理器或调试工具观察句柄和线程数量的变化。这三件事做完,课程里的大部分概念就不再是名词,而是你能对上号的东西。

Windows核心编程系列视频课程(NT+SDK+MFC+API)

课程详情

课程详情

课程名称:Windows核心编程系列视频课程(NT+SDK+MFC+API)

适合人群

  • 有一定工作经验想进一步提升的学员
  • 有一定编程经验对windows感兴趣的同学

学习收获

课程囊括的windows相关很多的学习知识点:MFC、进程及线程、WinAPI、SDK、数据类型…… 通过该课程的学习结合windows项目课程完成windows相关项目

课程简介

  • NT结构:介绍NT架构及其运行流程,包括用户态和核心态的转换。
  • Windows API:讲解Windows提供的应用程序编程接口,包括R0 API和R3 API,以及向下兼容的实现方式。
  • SDK:介绍软件开发工具包(SDK)的概念和作用。
  • MFC:讲解MFC框架及其在C++环境下的应用。
  • Windows API分类:介绍基础服务、文件系统、外部设备、进程、线程、图形设备接口、图形化用户界面、通用对话框链接库、通用控件链接库、Windows外壳、网络服务、Web相关API、多媒体相关API、程序通信API等分类。
  • Windows API入门:介绍在Visual Studio中使用Windows API的方法,包括添加头文件和使用API函数。

课程目录

01 windows简介
  01 windows版本变迁.mp4
  02 NT结构.mp4
02 编程语言和Windows
  01 API&SDK&MFC.mp4
  02 WindowsAPI分类.mp4
  03 如何使用windowsAPI.mp4
03 数据类型&字符编码
  01 Windows基础数据类型.mp4
  02 字符集.mp4
04 库存管理系统
  01 项目简介.mp4
  02 项目界面演示.mp4
  03 IO操作.mp4
  04 文件操作.mp4
  05 windows消息机制.mp4
  06 项目预备.mp4
  07 项目开始.mp4
  08 异步IO机制.mp4
  09 使用事件内核对象提醒.mp4
  10 可提醒IO.mp4
  11 完成端口概述.mp4
  12 IOCP初窥.mp4
  13 CopyFile实现.mp4
  14 课程安排及答疑.mp4
  15 界面知识点完成.mp4
05 进程
  01 进程及线程.mp4
  02 CUI&GUI.mp4
  03 进程句柄.mp4
  04 命令行参数.mp4
  05 环境变量.mp4
  06 进程路径.mp4
  07 createProcess概述.mp4
  08 ApplicationName&CommandLine详解.mp4
  09 StrartInfo及ProcessInformation.mp4
  10 作业讲解及进程关闭及使用计数.mp4
  11 进程权限概论.mp4
  12 进程权限.mp4
  13 UAC及用户补充.mp4
  14 进程复习.mp4
  15 项目相关预习及进程的遍历.mp4
  16 封装ToolHelp类.mp4
06 线程
  01 线程知识.mp4
  02 主线程退出和其他线程退出的区别.mp4
  03 线程间参数传递.mp4
  04 深入理解时间片.mp4
  05 线程的退出.mp4
  06 深入理解线程的启动.mp4
  07 课程复习.mp4
  08 线程启动到死亡的详细讲解.mp4
  09 beginthread和CreateThread.mp4
  10 线程的状态及线程的挂起转态.mp4
  11 线程等待休眠及饥饿线程.mp4
  12 context结构体.mp4
  13 线程安全及上锁.mp4
  14 原子操作.mp4
  15 旋转锁.mp4
  16 volatile关键字.mp4
  17 问题线程函数分析之-详解线程函数的lParam.mp4
  18 问题线程函数分析之-详解原子操作和旋转锁.mp4
  19 线程优先级及CPU亲和度.mp4
  20 答疑-关于异步IO及句柄,伪句柄.mp4
  21 临界区及线程函数中使用静态变量.mp4
  22 Slim锁及线程休眠及等待及挂起及阻塞.mp4
  23 用户态同步方式总结.mp4
07 内核对象
  01 内核对象概述.mp4
  02 设置使用计数的目的.mp4
  03 设置使用计数的目的及句柄表及句柄的本质.mp4
  04 深入理解句柄表及索引及句柄表存在的意义.mp4
  05 内核对象的Signal状态.mp4
  06 Wait的3种结果及Wait里的坑.mp4
  07 事件内核对象.mp4
  08 可等待计时器对象.mp4
  09 信号量.mp4
  10 互斥体.mp4
  11 程序单开应用.mp4
08 内存
  01 虚拟内存.mp4
  02 虚拟内存分区.mp4
  03 分配颗粒及页面大小.mp4
  04 页面文件及提交物理内存.mp4
  05 64位及内存对齐.mp4
  06 内存修改器作业布置.mp4
  07 作业讲解.mp4
  08 虚拟内存页面区块.mp4
  09 动态获取系统内存信息.mp4
  10 获取系统内存大小及空闲内存.mp4
  11 Windows基础知识总结及实战课程安排.mp4

课程目录

1.windows版本变迁.mp4
10.IO操作.mp4
11.文件操作.mp4
12.windows消息机制.mp4
13.项目预备.mp4
14.项目开始.mp4
15.异步IO机制.mp4
16.使用事件内核对象提醒.mp4
17.可提醒IO.mp4
18.完成端口概述.mp4
19.IOCP初窥.mp4
2.NT结构.mp4
20.CopyFile实现.mp4
21.课程安排及答疑.mp4
22.界面知识点完成.mp4
23.进程及线程.mp4
24.CUIGUI.mp4
25.进程句柄.mp4
26.命令行参数.mp4
27.环境变量.mp4
28.进程路径.mp4
29.createProcess概述.mp4
3.APISDKMFC.mp4
30.ApplicationNameCommandLine详解.mp4
31.StrartInfo及ProcessInformation.mp4
32.作业讲解及进程关闭及使用计数.mp4
33.进程权限概论.mp4
34.进程权限.mp4
35.UAC及用户补充.mp4
36.进程复习.mp4
37.项目相关预习及进程的遍历.mp4
38.封装ToolHelp类.mp4
39.线程知识.mp4
4.WindowsAPI分类.mp4
40.主线程退出和其他线程退出的区别.mp4
41.线程间参数传递.mp4
42.深入理解时间片.mp4
43.线程的退出.mp4
44.深入理解线程的启动.mp4
45.课程复习.mp4
46.线程启动到死亡的详细讲解.mp4
47.beginthread和CreateThread.mp4
48.线程的状态及线程的挂起转态.mp4
49.线程等待休眠及饥饿线程.mp4
5.如何使用windowsAPI.mp4
50.context结构体.mp4
51.线程安全及上锁.mp4
52.原子操作.mp4
53.旋转锁.mp4
54.volatile关键字.mp4
55.问题线程函数分析之详解线程函数的lParam.mp4
56.线程优先级及CPU亲和度.mp4
57.问题线程函数分析之详解原子操作和旋转锁.mp4
58.答疑关于异步IO及句柄伪句柄.mp4
59.临界区及线程函数中使用静态变量.mp4
6.Windows基础数据类型.mp4
60.Slim锁及线程休眠及等待及挂起及阻塞.mp4
61.用户态同步方式总结.mp4
62.内核对象概述.mp4
63.设置使用计数的目的.mp4
64.设置使用计数的目的及句柄表及句柄的本质.mp4
65.深入理解句柄表及索引及句柄表存在的意义.mp4
66.内核对象的Signal状态.mp4
67.Wait的3种结果及Wait里的坑.mp4
68.事件内核对象.mp4
69.可等待计时器对象.mp4
7.字符集.mp4
70.信号量.mp4
71.互斥体.mp4
72.程序单开应用.mp4
73.虚拟内存.mp4
74.虚拟内存分区.mp4
75.分配颗粒及页面大小.mp4
76.页面文件及提交物理内存.mp4
77.64位及内存对齐.mp4
78.内存修改器作业布置.mp4
79.作业讲解.mp4
8.项目简介.mp4
80.虚拟内存页面区块.mp4
81.动态获取系统内存信息.mp4
82.获取系统内存大小及空闲内存.mp4
83.Windows基础知识总结及实战课程安排.mp4
9.项目界面演示.mp4
Windows核心编程系列视频课程(NT+SDK+MFC+API).zip