1. Windows 95长文件名机制解析
Windows 95作为首个真正普及长文件名支持的DOS/Windows混合系统,其实现机制堪称经典。在FAT文件系统基础上,微软采用了一种巧妙的兼容方案:每个长文件名条目实际上由多个连续的32字节目录项组成,其中包含经过特殊编码的Unicode字符。这些目录项会被标记为"卷标"属性(0x0F),普通DOS程序会将其忽略,从而维持向下兼容性。
关键细节:系统会为每个长文件名自动生成8.3格式的短文件名,规则是将长名截取前6个有效字符,加上"~1"等数字后缀。例如"ThisIsATest.txt"可能对应THISIS~1.TXT。
2. 长文件名中断功能详解
2.1 功能检测与兼容性处理
在调用任何长文件名功能前,必须检测系统支持情况。典型做法是尝试调用716Ch功能并检查AX返回值:
assembly复制mov ax, 716Ch
int 21h
cmp ax, 7100h ; 功能不支持时返回此值
je fallback_to_dos
2.2 核心中断功能参数解析
2.2.1 716Ch - 文件创建/打开
-
BX寄存器位域详解:
- 位0-2:访问模式(000=只读,001=只写,010=读写)
- 位6-4:共享模式(控制多进程访问)
- 位8:禁用缓冲(用于直接磁盘访问)
- 位13:错误返回模式(避免INT 24h中断)
-
DX执行标志组合:
- 0001h:打开现有文件(不存在则失败)
- 0011h:创建新文件(存在则截断)
- 0010h:创建新文件(存在则失败)
2.2.2 7156h - 文件重命名
需注意DS:DX和ES:DI必须指向不同的内存区域,即使在同一数据段中也应显式设置ES寄存器:
assembly复制mov ax, @data
mov ds, ax
mov es, ax ; 显式设置ES段
2.2.3 7141h - 文件删除
SI寄存器控制通配符处理:
- SI=0000h:精确匹配文件名
- SI=0001h:允许使用*和?通配符
3. 完整操作流程实现
3.1 文件创建与写入
改进后的示例增加了错误处理和文件属性设置:
