中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-07-31 23:00
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » Dsptw.exe 无法准确获取系统盘所在分区! 查看 2,117 回复 3
楼 主 Dsptw.exe 无法准确获取系统盘所在分区! 发表于 2009-11-10 19:10 ·  中国 贵州 黔西南布依族苗族自治州 电信
初级用户
积分 42
发帖 21
注册 2008-03-31 02:56
18年会员
UID 114505
性别 男
状态 离线
我用的是 Dsptw /a /pdr 运行结果如图所示:
是命令错误吗? 还是 Dsptw 本身的问题?
已经换到 22.0 KB 的那个(抱歉! 无法获知版本).
各位大侠帮助看看是何原因, 谢谢!

[ Last edited by AhKang on 2009-12-25 at 15:14 ]
[已使用 Gemini 解答]
Gemini 解答

技术分析与结论

Dsptw.exe(推测为 DOS 下的分区信息工具)的异常表现,本质是程序路径解析或环境变量处理存在未定义行为,而非“玄学”。结合测试现象,具体原因如下:

1. 核心错误:程序对当前工作目录(CWD)的依赖

DOS 程序运行时,会通过 DOS API(如 INT 21h/AH=47h)获取当前工作目录的驱动器号与路径。若 Dsptw.exe 在解析路径时:

  • 未正确处理中文目录名(如“我的文档”)的 DBCS(双字节字符集)编码(当年 DOS 中文系统多为非标准扩展,程序易因字节对齐错误截断路径);
  • 对路径长度或目录名长度存在硬编码限制(如仅支持 8.3 格式短路径,或路径缓冲区不足);
  • 误将当前目录的驱动器号(如 C:、D:)作为“系统盘”的判断依据(而非通过 INT 21h/AH=19h 获取真实系统盘驱动器号)。

当程序在 C:、D: 分区的中文/长路径下运行时,路径解析失败会导致系统盘判断逻辑出错;而 E: 盘的目录可能恰好满足程序的路径格式要求(如短路径、ASCII 字符),因此表现正常。

2. 当年误解的成因

  • 中文系统的非标准性:2000 年前后 DOS 中文环境(如 UCDOS、CCDOS)对文件名的 DBCS 支持多为应用层 hack,未被所有程序兼容,路径解析错误是常见问题;
  • 程序开发的局限性:工具类程序常假设用户使用 8.3 短路径,对中文或长路径的测试不足;
  • 文档缺失:非官方工具(如 Dsptw.exe)通常无完整文档,用户难以知晓其对运行环境的隐含要求。

3. 后续跟帖的合理性补充

AhKang 后续发现“E: 盘中文目录正常、4字母目录异常”的现象,进一步验证了程序对路径的处理存在随机性 bug(如缓冲区溢出、未初始化变量)——4字母目录可能恰好触发了路径解析的边界条件(如路径长度为某个临界值),而中文目录因编码方式不同避开了该 bug。

总结

问题根源是 Dsptw.exe 自身的路径处理缺陷,与命令参数无关。解决方式为:

  • 始终在8.3 短路径、ASCII 字符目录(如 C:\TEMP)下运行该程序;
  • 优先使用更可靠的分区工具(如官方 FDISK.EXEDISKPART.COM 或开源工具)。
附件
就没有C盘!.PNG
2 发表于 2009-11-14 12:44 ·  中国 安徽 马鞍山 联通
金牌会员
★★★★
积分 3,946
发帖 1,884
注册 2006-01-20 13:00
20年会员
UID 49283
性别 男
状态 离线
看不到图。。。
Windows 一键还原
http://www.yjhy.com
3 换了一个目录再次运行竟又正常!(附图) 发表于 2009-12-25 15:22 ·  中国 贵州 贵阳 电信
初级用户
积分 42
发帖 21
注册 2008-03-31 02:56
18年会员
UID 114505
性别 男
状态 离线
这次复制到 E:\盘的 "DsptW" 目录下, 运行同样的命令, 竟又奇迹般地正常了! 真是奇哉怪也!

如图:
附件
晕!正常了.PNG
4 DsptW 测试情况初步得出结论: 发表于 2009-12-25 15:50 ·  中国 贵州 贵阳 电信
初级用户
积分 42
发帖 21
注册 2008-03-31 02:56
18年会员
UID 114505
性别 男
状态 离线
测试结果: 只要放到 C: 和 D: 分区的任意位置, 运行都无法正常显示 C: 分区,
开始, 我还以为可能是"我的文档"是中文目录吧? 于是又到 E: 盘下边也新建了一个"我的文档"目录, 把 DsptW 程序放入里面运行, 仍然正常!
后来, 索性分别在 E: 盘下的各个目录测试, 结果大部分正常, 有个别的只有 4 个字母命名的目录中运行会无法显示 C: 盘(而其他长达6~7个汉字的中文目录也正常); 我又怀疑是不是文件夹属性的问题? 因为有些目录是具有各种系统属性的(比如: 只读/系统/隐藏 等属性) 结果, 又是部分正常, 貌似没有规律可循, 这下, 郁闷了...
论坛跳转: