win32文件系统

文件系统基础

  1. 定义
    文件系统:操作系统管理磁盘文件的数据结构与组织方法,决定文件在磁盘存储格式
    常见:NTFS、FAT32
特性 NTFS FAT32
单分区上限 2TB 32GB
单个文件上限 支持 > 4GB 最大 4GB
EFS 文件加密 ✅支持 ❌不支持
磁盘配额 ✅支持 ❌不支持

● EFS 加密:仅 NTFS 可用;加密文件名字显示绿色,加密用户可访问,其他用户拒绝访问

● 磁盘配额:限制用户占用磁盘空间,超出配额拒绝分配空间,在磁盘属性「配额」标签配置

Windows 文件 API(CreateFile/ReadFile 等)对 NTFS、FAT32使用同一套 API,底层差异被系统屏蔽

卷(逻辑驱动器)相关 API

卷 = 逻辑盘(C 盘、D 盘),一块物理硬盘可划分多个逻辑卷

  1. GetLogicalDrives
    ● 功能:获取存在的驱动器,返回 DWORD 位掩码,每一位代表 A~Z 盘符
    ● 示例:返回 13 → 二进制1101→ A、C、D 盘存在
bash 复制代码
bit3 bit2 bit1 bit0
 1    1    0    1
 D    C    B    A
  1. GetLogicalDriveStrings
    ● 功能:获取全部盘符字符串,缓冲区输出格式:"A:\ \0 C:\ \0 D:\ \0\0"(多个以\0分隔,末尾双\0)
  2. GetDriveType
    ● 判断驱动器类型
    ● 返回值:0 未知,1 固定硬盘,2 可移动,3 网络盘,4 光驱,5RAM 盘
  3. GetVolumeInformation
    ● 获取卷信息:卷标、卷序列号、最大文件名长度、文件系统名称(NTFS/FAT32)
    ● ⚠️卷序列号格式化会改变,不是硬盘硬件序列号

目录操作 API

  1. CreateDirectory 创建文件夹
c 复制代码
BOOL CreateDirectory(
    LPCTSTR lpPathName,        // 目录路径
    LPSECURITY_ATTRIBUTES lpSecurityAttributes //安全属性,NULL=默认
);

示例:CreateDirectory(L"C:\A", NULL);

只能创建单层目录;路径分隔符 C 语言写\转义

  1. RemoveDirectory 删除目录
c 复制代码
BOOL RemoveDirectory(LPCTSTR lpPathName);

⚠️只能删除空文件夹,目录内有文件会失败

  1. MoveFile 重命名 / 移动目录 / 文件
c 复制代码
BOOL MoveFile(LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName);

● 同盘:仅改名;跨盘:复制原文件,再删除源文件

● 可以直接移动带文件的目录

  1. GetCurrentDirectory / SetCurrentDirectory

● GetCurrentDirectory:获取进程当前工作目录(不是 exe 所在目录!)

● SetCurrentDirectory:修改进程当前目录

相对路径的文件 / 目录操作,以当前工作目录作为基准

文件核心 API

  1. CreateFile(最重要,创建 / 打开文件、管道、设备)
c 复制代码
HANDLE CreateFile(
    LPCTSTR lpFileName,                // 文件路径
    DWORD dwDesiredAccess,             // 访问权限
    DWORD dwShareMode,                 // 共享模式
    LPSECURITY_ATTRIBUTES lpSecurityAttributes,
    DWORD dwCreationDisposition,       // 创建行为
    DWORD dwFlagsAndAttributes,        // 文件属性
    HANDLE hTemplateFile
);

dwDesiredAccess 访问权限

● GENERIC_READ 只读

● GENERIC_WRITE 只写

● GENERIC_READ | GENERIC_WRITE 读写

dwShareMode 共享模式

● 0:独占打开,别的程序不能读写

● FILE_SHARE_READ:允许其他进程读

● FILE_SHARE_WRITE:允许其他进程写

● FILE_SHARE_DELETE:允许其他进程删除

dwCreationDisposition 创建方式

宏 作用
CREATE_NEW 新建,文件已存在则失败
CREATE_ALWAYS 总是新建,覆盖旧文件
OPEN_EXISTING 打开已有文件,不存在失败
OPEN_ALWAYS 打开,不存在就新建
TRUNCATE_EXISTING 打开并清空原有内容

dwFlagsAndAttributes 文件属性

● FILE_ATTRIBUTE_NORMAL 普通文件

● FILE_ATTRIBUTE_HIDDEN 隐藏

● FILE_ATTRIBUTE_READONLY 只读

返回 HANDLE;用完必须 CloseHandle关闭句柄,否则资源泄漏

  1. 配套文件 API

● ReadFile:读文件

● WriteFile:写文件

● GetFileSize:获取文件大小(返回低 32 位,大文件需要高 32 位参数)

● SetFilePointer:移动文件读写指针

● GetFileAttributes:获取文件属性(只读 / 隐藏 / 目录等)

● CopyFile:复制文件

● DeleteFile:删除文件

● FindFirstFile / FindNextFile:遍历目录下所有文件

注意事项

  1. 路径:C/C++ 字符串内,反斜杠需要转义 \;长路径可使用\?\前缀,支持 32000 字符
  2. 错误判断:API 返回失败时,调用GetLastError()查看错误码
  3. 资源:文件句柄、内核对象用完必须 CloseHandle
  4. 进程当前目录 ≠ 可执行文件所在目录,不要混淆

总结

  1. NTFS 独有:EFS 加密、磁盘配额;FAT32 单文件上限 4GB
  2. 卷 API:GetLogicalDrives(位掩码)、GetVolumeInformation(获取文件系统类型 NTFS/FAT32)
  3. 目录:CreateDirectory 建文件夹,RemoveDirectory只能删空目录;MoveFile 支持目录改名
  4. CreateFile 是核心:dwCreationDisposition 决定新建 / 覆盖 / 打开;共享模式控制多进程并发访问
  5. 文件句柄用完一定要 CloseHandle
相关推荐
Chengbei1118 小时前
拒绝无效洞!蚂蚁Src榜一Clown 2.0 SRC SKill 第二代带状态闭环的白盒 & 黑盒审计 Skill
网络·人工智能·安全·web安全·网络安全·自动化·安全架构
高频因子挖掘机19 小时前
批量行情返回后,怎样把请求失败的股票单独挑出来?
后端·github·api
XLYcmy20 小时前
PDF 论文处理器 — 优势与功能文档
大数据·python·网络安全·pdf·dify·rag·漏洞检测
高频因子挖掘机21 小时前
盘中筛选要同时看价格和盘口?按需分层比“一次全拿”更好维护
后端·github·api
白帽攻防录1 天前
SRC 挖洞:V8 Turbofan 沙箱逃逸深度复盘,CVE-2026-6307 一根长矛怎么刺穿 Chrome 两道边界
网络·chrome·安全·网络安全·浏览器安全
菩提小狗1 天前
每日安全情报报告 · 2026-10-05
网络安全·漏洞·cve·安全情报·每日安全
Tanshu_API君1 天前
汇率查询 API :四个子接口与完整使用手册
api·api接口·汇率查询api·实时汇率·汇率换算·汇率转换·外汇实时行情
sbjdhjd1 天前
云安全 | Docker 容器逃逸复盘(一):从隔离边界到运行时链路,如何确认自己身处容器
网络安全·docker·云原生·容器·kubernetes·云计算·云安全
XLYcmy1 天前
PDF 论文处理器 — 技术报告文档
数据库·python·网络安全·pdf·embedding·dify·rag