开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 632|回复: 5
收起左侧

[求助] 如何DOS路径转NT路径

[复制链接]
结帖率:88% (15/17)
发表于 2023-7-17 02:58:06 | 显示全部楼层 |阅读模式   江苏省徐州市
DOS路径如下C:\Users\Administrator\Desktop\123.txtNT路径如下
\\device\\harddiskvolumeX\Users\Administrator\Desktop\123.txt

其中harddiskvolumeX中的X是对应C盘的盘符
内核中C盘对应的是1 但是不是每个盘符都是绝对的数值!
查了1天的AI,内核中实在不好操作!
翻译
搜索
复制



补充内容 (2023-7-17 02:59):
系统_通过逻辑盘符获取物理设备号 测试了以下 好像并不准确
结帖率:88% (15/17)
 楼主| 发表于 2023-7-17 03:12:07 | 显示全部楼层   江苏省徐州市
找到答案了
这是我百du自己改的!
.版本 2

.子程序 DOS转NT路径
.参数 盘名, 文本型, , C
.局部变量 路径, 文本型
.局部变量 返回值, 长整数型
.局部变量 缓冲区, 文本型

路径 = 盘名 + “:”
缓冲区 = 取重复文本 (255, “ ”)
返回值 = QueryDosDeviceA (路径, 缓冲区, 取文本长度 (缓冲区))

.如果 (返回值 > 0)
    返回 (缓冲区)
.否则
    返回 (“”)


这是论坛的

.版本 2
.支持库 TianSin

.子程序 系统_通过逻辑盘符获取物理设备号, 整数型, 公开, 成功返回设备的编号,失败返回 -1
.参数 盘符, 文本型, , C
.局部变量 hDevice, 整数型
.局部变量 dwBufLen, 整数型
.局部变量 szBuf, 字节集
.局部变量 bRet, 逻辑型

hDevice = CreateFileA (“\\.\” + 盘符 + “:”, 位或 (#GENERIC_READ, #GENERIC_WRITE), 位或 (#FILE_SHARE_READ, #FILE_SHARE_WRITE), #Null, #OPEN_EXISTING, 0, #NULL)

.如果真 (hDevice = #INVALID_HANDLE_VALUE)

    返回 (#INVALID_HANDLE_VALUE)

.如果真结束
dwBufLen = 12  ' sizeof(STORAGE_DEVICE_NUMBER)
szBuf = 取空白字节集 (dwBufLen)
bRet = DeviceIoControl (hDevice, #IOCTL_STORAGE_GET_DEVICE_NUMBER, #NULL, 0, 取指针_字节集型 (szBuf), dwBufLen, #NULL, #NULL)
.如果真 (bRet = 假)
    CloseHandle (hDevice)

    返回 (#INVALID_HANDLE_VALUE)

.如果真结束
CloseHandle (hDevice)
返回 (取字节集数据 (szBuf, #整数型, 5))  ' DeviceNumber

回复 支持 反对

使用道具 举报

结帖率:88% (15/17)
 楼主| 发表于 2023-7-17 03:17:02 | 显示全部楼层   江苏省徐州市
.版本 2
.支持库 spec

.子程序 _启动子程序, 整数型, 公开
.局部变量 路径, 文本型
.局部变量 盘符, 文本型
.局部变量 源路径, 文本型

源路径 = “C:\Users\Administrator\Desktop\123.exe”
路径 = 文本_取右边 (源路径, “:\”)
盘符 = 文本_取左边 (源路径, “:\”)
调试输出 (盘符)
调试输出 (DOS转NT路径 (盘符) + 路径)
返回 (0)
* “C”
* “\Device\HarddiskVolume6\Users\SuXiaoDi\Desktop\123.exe”
回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 2023-7-17 08:37:37 | 显示全部楼层   广东省广州市
  
子程序名返回值类型公开备 注
DosToLogicalDrive字节集 MS-DOS设备名称转逻辑盘符
参数名类 型参考可空数组备 注
szPath字节集W
变量名类 型静态数组备 注
szDrive字节集 
szDevName字节集 
dwSize整数型 
szTemp字节集 
i整数型 
szDrive = { 64, 0, 58, 0, 0, 0 }  ' 逻辑盘符 A-Z
szDevName = 取空白字节集 ( ( #MAX_PATH + 1) × 2)
计次循环首 (26, i)
szDrive [1] = szDrive [1] + 1
dwSize = QueryDosDeviceW (szDrive, szDevName, #MAX_PATH )
如果真 (dwSize > 0)
szDevName [dwSize × 2 - 3] = 92  ' 结尾加上反斜杆
dwSize = dwSize × 2 - 2  ' 不以NULL结尾
szTemp = 取字节集左边 (szDevName, dwSize)
如果真 (寻找字节集 (szPath, szTemp, ) = 1)
szDrive [5] = 92  ' 结尾加上反斜杆
返回 (字节集替换 (szPath, 1, dwSize, szDrive))


计次循环尾 ()
返回 (szPath)


需要传入宽字符路径~
回复 支持 反对

使用道具 举报

签到天数: 5 天

发表于 2023-7-17 09:43:25 | 显示全部楼层   河北省保定市
调试输出 (盘符)
回复 支持 反对

使用道具 举报

结帖率:50% (13/26)

签到天数: 20 天

发表于 2024-5-14 06:49:08 高大上手机用户 | 显示全部楼层   山东省济南市
weg!!!调用call能给个例子嘛
回复 支持 反对

使用道具 举报

  高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表