中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » Dsptw.exe 无法准确获取系统盘所在分区!
作者:
标题: Dsptw.exe 无法准确获取系统盘所在分区! 上一主题 | 下一主题
AhKang
初级用户





积分 42
发帖 21
注册 2008-3-31
状态 离线
『楼 主』:  Dsptw.exe 无法准确获取系统盘所在分区! [已使用 LLM 解释]

我用的是 Dsptw /a /pdr 运行结果如图所示:
是命令错误吗? 还是 Dsptw 本身的问题?
已经换到 22.0 KB 的那个(抱歉! 无法获知版本).
各位大侠帮助看看是何原因, 谢谢!

Last edited by AhKang on 2009-12-25 at 15:14 ]
LLM 解释

技术分析与结论

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 或开源工具)。


附件 1: 就没有C盘!.PNG (2009-12-25 15:14, 10.23 KiB)


2009-11-10 19:10
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 2 楼』:   使用 LLM 解释/回答一下

看不到图。。。




Windows 一键还原
http://www.yjhy.com
2009-11-14 12:44
查看资料  发短消息  网志   编辑帖子  回复  引用回复
AhKang
初级用户





积分 42
发帖 21
注册 2008-3-31
状态 离线
『第 3 楼』:  换了一个目录再次运行竟又正常!(附图) 使用 LLM 解释/回答一下

这次复制到 E:\盘的 "DsptW" 目录下, 运行同样的命令, 竟又奇迹般地正常了! 真是奇哉怪也!

如图:


附件 1: 晕!正常了.PNG (2009-12-25 15:22, 10.23 KiB)


2009-12-25 15:22
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
AhKang
初级用户





积分 42
发帖 21
注册 2008-3-31
状态 离线
『第 4 楼』:  DsptW 测试情况初步得出结论: 使用 LLM 解释/回答一下

测试结果: 只要放到 C: 和 D: 分区的任意位置, 运行都无法正常显示 C: 分区,
开始, 我还以为可能是"我的文档"是中文目录吧? 于是又到 E: 盘下边也新建了一个"我的文档"目录, 把 DsptW 程序放入里面运行, 仍然正常!
后来, 索性分别在 E: 盘下的各个目录测试, 结果大部分正常, 有个别的只有 4 个字母命名的目录中运行会无法显示 C: 盘(而其他长达6~7个汉字的中文目录也正常); 我又怀疑是不是文件夹属性的问题? 因为有些目录是具有各种系统属性的(比如: 只读/系统/隐藏 等属性) 结果, 又是部分正常, 貌似没有规律可循, 这下, 郁闷了...


2009-12-25 15:50
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: