Windows API¶
概述¶
Windows API(Win32 API)是Windows操作系统提供的应用程序编程接口,用于开发Windows应用程序。本文档重点介绍系统编程中常用的API,特别是内存管理、进程与线程管理、文件操作等核心功能。
Windows API分类
- 基础服务API:文件系统、设备管理、进程线程、内存管理
- 图形设备接口(GDI):图形绘制、设备上下文
- 用户界面API:窗口管理、消息处理、控件
- 网络API:Winsock、WinINet
- 安全API:认证、加密、访问控制
API分类¶
graph TB
A[Windows API] --> B[内存管理]
A --> C[进程与线程]
A --> D[文件操作]
A --> E[同步对象]
A --> F[动态链接库]
A --> G[网络编程]
B --> B1[堆内存]
B --> B2[虚拟内存]
B --> B3[内存映射]
C --> C1[进程创建]
C --> C2[线程管理]
C --> C3[进程间通信]
D --> D1[文件读写]
D --> D2[目录管理]
D --> D3[文件属性]
E --> E1[临界区]
E --> E2[互斥量]
E --> E3[信号量]
E --> E4[事件]
style A fill:#E3F2FD
style B fill:#E8F5E9
style C fill:#FFF3E0
style D fill:#F3E5F5
style E fill:#FCE4EC
主要内容¶
内存管理API¶
内存管理API
- GlobalAlloc/LocalAlloc: 全局/局部内存分配
- HeapCreate/HeapAlloc: 堆内存管理
- VirtualAlloc/VirtualFree: 虚拟内存管理
- CreateFileMapping: 内存映射文件
- HeapWalk: 堆遍历
进程与线程API¶
进程与线程API
- CreateProcess: 创建新进程
- CreateThread: 创建线程
- OpenProcess/OpenThread: 打开现有进程/线程
- TerminateProcess/TerminateThread: 终止进程/线程
- WaitForSingleObject: 等待对象
文件操作API¶
文件操作API
- CreateFile: 创建或打开文件
- ReadFile/WriteFile: 文件读写
- SetFilePointer: 设置文件指针
- GetFileSize: 获取文件大小
- CreateDirectory: 创建目录
同步对象API¶
同步对象API
- CreateMutex: 创建互斥量
- CreateSemaphore: 创建信号量
- CreateEvent: 创建事件对象
- InitializeCriticalSection: 初始化临界区
- EnterCriticalSection: 进入临界区
目录¶
内存管理¶
进程与线程¶
文件操作¶
同步对象¶
动态链接库¶
常用头文件¶
| 头文件 | 说明 |
|---|---|
windows.h |
Windows核心API(包含大部分API) |
winbase.h |
基本服务API(进程、内存、文件等) |
windef.h |
基本类型定义 |
winnt.h |
NT内核相关定义 |
winuser.h |
用户界面API |
wingdi.h |
图形设备接口API |
winsock2.h |
Winsock网络API |
数据类型¶
基本类型¶
| 类型 | 说明 | 对应C类型 |
|---|---|---|
BOOL |
布尔值 | int |
BYTE |
字节 | unsigned char |
WORD |
字 | unsigned short |
DWORD |
双字 | unsigned long |
UINT |
无符号整数 | unsigned int |
LONG |
长整数 | long |
LONGLONG |
64位整数 | __int64 |
FLOAT |
浮点数 | float |
DOUBLE |
双精度浮点 | double |
指针类型¶
| 类型 | 说明 |
|---|---|
LPVOID |
无类型指针(void*) |
LPSTR |
字符串指针(char*) |
LPCSTR |
常量字符串指针(const char*) |
LPWSTR |
宽字符串指针(wchar_t*) |
LPCWSTR |
常量宽字符串指针 |
HANDLE |
对象句柄 |
HWND |
窗口句柄 |
句柄类型¶
| 类型 | 说明 |
|---|---|
HANDLE |
通用对象句柄 |
HWND |
窗口句柄 |
HINSTANCE |
实例句柄 |
HMODULE |
模块句柄 |
HFILE |
文件句柄 |
HPROCESS |
进程句柄 |
HTHREAD |
线程句柄 |
HEAP |
堆句柄 |
错误处理¶
GetLastError¶
| C++ | |
|---|---|
FormatMessage¶
| C++ | |
|---|---|
示例:
常见错误码¶
| 错误码 | 值 | 说明 |
|---|---|---|
ERROR_SUCCESS |
0 | 操作成功 |
ERROR_INVALID_FUNCTION |
1 | 函数不正确 |
ERROR_FILE_NOT_FOUND |
2 | 系统找不到指定的文件 |
ERROR_PATH_NOT_FOUND |
3 | 系统找不到指定的路径 |
ERROR_ACCESS_DENIED |
5 | 拒绝访问 |
ERROR_INVALID_HANDLE |
6 | 句柄无效 |
ERROR_NOT_ENOUGH_MEMORY |
8 | 存储空间不足 |
ERROR_SHARING_VIOLATION |
32 | 共享冲突 |
ERROR_ALREADY_EXISTS |
183 | 文件已存在 |
实用宏¶
句柄验证¶
MAKEWORD/MAKELONG¶
| C++ | |
|---|---|
LOWORD/HIWORD¶
| C++ | |
|---|---|
字符集处理¶
Unicode与ANSI¶
Windows API函数通常有两个版本:
- FunctionNameA:ANSI版本
- FunctionNameW:宽字符(Unicode)版本
示例:
TCHAR类型¶
| C++ | |
|---|---|
使用示例: