“Win32 API”标签的文章
带有“Win32 API”标签的文章共 10 篇,按发布日期从新到旧排列。
-
参数为什么会坏掉 ── Windows 命令行参数的规则
在 Windows 上并不存在参数的数组,传给 CreateProcess 的是一条字符串,切分由接收方完成。本文讲解 CommandLineToArgvW・CRT・.NET 的切分规则,以及 .NET 的 ArgumentList 与 C++ 中正确的组装方法。
-
父进程消失之后还剩下什么 —— 用 Job Object 圈养子进程
为什么强制结束 UI 之后,SDK 的辅助进程仍然残留,一直占着摄像头或 COM 端口?本文从测量应用的视角,讲解如何用 Job Object 把进程树变成一个单位,并借助 KillOnJobClose 与完成端口来设计子进程的寿命。
-
Win32 线程池 API ── 用 CreateThreadpoolWork 实现「不自建线程」的并发
原生代码里是不是到处都在 CreateThread?本文依据一手资料讲解 Vista 全面重新设计的 Win32 线程池 API:work、timer、wait、io 四种对象,清理组,以及回调中禁止做的事。
-
命名管道实务 ── 从设计到安全,吃透 Windows 进程间通信的标准方案
以实务视角讲解 Windows 进程间通信的标准方案——命名管道。依据一手资料梳理字节模式与消息模式的取舍、同时接纳多个客户端的服务器结构、ACL 与模拟的安全设计,以及 .NET 的命名管道流。
-
睡眠恢复后就出故障的应用——电源事件机制与扛得住恢复的业务应用设计
打开笔记本电脑时业务应用的通信已经断开——原因是设计没有考虑睡眠。本文依据一手资料讲解 WM_POWERBROADCAST 的通知流程、Modern Standby 的行为、断开与重连的设计、睡眠抑制以及调查命令。
-
DllMain 与加载器锁——“DLL 初始化里什么都别做”的真正原因
为什么不能在 DllMain 里调用 LoadLibrary 或与线程同步。本文依据一手资料,从串行化全部 DLL 通知的加载器锁机制,讲到死锁成立的典型场景、延迟初始化等正确设计,以及挂起的调查步骤。
-
“无响应”的真相——Windows 如何判定应用卡死,以及不会卡死的设计
Windows 的“无响应”是操作系统在窗口 5 秒未取出消息时作出判定、并换成幽灵窗口的机制。本文讲解判定的内部动作、卡死的常见原因、把繁重处理移出 UI 线程的设计,以及挂起的调查步骤。
-
虚假唤醒——条件变量为什么会“没有通知也醒来”,以及 Windows 上正确的等待写法
条件变量的 wait 即使没有收到通知也可能返回(虚假唤醒)。本文从 Windows 的实现出发说明规范为何允许这一点,并用 Win32、C++ 和 C# 的代码给出以 while 循环和谓词编写的正确等待写法。
-
解读 Windows 错误码——Win32 错误、HRESULT、NTSTATUS 的三层结构
出现 0x80004005 时,先分解再搜索。讲解 Win32 错误、HRESULT、NTSTATUS 的三层结构,0x8007xxxx=Win32 错误重新封装这一最重要模式,以及用 err.exe 和 PowerShell 查询的方法。
-
多线程实战最佳实践 C 语言篇——以 Win32 API 的方式安全编写
C 语言 × Win32 的多线程自有定式:用 _beginthreadex 创建线程、SRW 锁与条件变量、Interlocked,以及停止事件 + WaitForMultipleObjects 的停止设计。本文还梳理 TerminateThread 的危险与 DllMain 的限制。