精易论坛

标题: 如何DOS路径转NT路径 [打印本页]

作者: 萌新苏苏    时间: 2023-7-17 02:58
标题: 如何DOS路径转NT路径
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):
系统_通过逻辑盘符获取物理设备号 测试了以下 好像并不准确
作者: 萌新苏苏    时间: 2023-7-17 03:12
找到答案了
这是我百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


作者: 萌新苏苏    时间: 2023-7-17 03:17
.版本 2
.支持库 spec

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

源路径 = “C:\Users\Administrator\Desktop\123.exe”
路径 = 文本_取右边 (源路径, “:\”)
盘符 = 文本_取左边 (源路径, “:\”)
调试输出 (盘符)
调试输出 (DOS转NT路径 (盘符) + 路径)
返回 (0)
* “C”
* “\Device\HarddiskVolume6\Users\SuXiaoDi\Desktop\123.exe”
作者: 大司命    时间: 2023-7-17 08: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)


需要传入宽字符路径~
作者: 努力的小菜鸟    时间: 2023-7-17 09:43
调试输出 (盘符)
作者: ppaa168    时间: 2024-5-14 06:49
weg!!!调用call能给个例子嘛




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4