|
|
楼主 |
发表于 2026-1-17 19:23:43
|
显示全部楼层
本帖最后由 Bluebells 于 2026-8-31 20:34 编辑
- ;只有一个输入参数和两个输出参数
- ;输入参数为路径, 支持驱动器号(盘符), 路径命名空间(\\?\HarddiskVolumeX, \\?\HarddiskX\PartitionX 等)
- ;第一个输出参数为设备号, 第二个输出参数为分区号
- _SUB GetDevicePartNum
- TEAM ENVI &drv=%~1| ENVI-ret %~2=| ENVI-ret %~3=
- TEAM ENVI &prefix=\\?\| ENVI &gr=
- TEAM LSTR aStr1=4,%&drv%| LSTR aStr2=7,%&drv%
- FIND $%aStr1%=\\?\,ENVI &prefix=
- FIND $%aStr2%=\Device,ENVI &gr=GLOBALROOT
-
- TEAM ENVI &FILE_ANY_ACCESS=0x00000000| ENVI &OPEN_EXISTING=3
- TEAM ENVI &IOCTL_STORAGE_GET_DEVICE_NUMBER=0x2D1080| ENVI$# &udtQuery=*4 0 *4 0 *4 0| ENVI$# &cbBytesReturned=*8 0
- CALL $--qd --ret:&hFile Kernel32.dll,CreateFileW,$%&prefix%%&gr%%&drv%,#0,#%&FILE_ANY_ACCESS%,#0,#%&OPEN_EXISTING%,#0,#0
- IFEX #%&hFile%=-1, EXIT
- CALL $--qd --ret:&ret Kernel32.dll,DeviceIoControl,#%&hFile%,#%&IOCTL_STORAGE_GET_DEVICE_NUMBER%,#0,#0,*&udtQuery,#12,*&cbBytesReturned,#0 //待处理
- CALL $--qd --ret:&ret Kernel32.dll,CloseHandle,#%&hFile%
- TEAM ENVI?int &udtQuery=&DeviceNum:4| ENVI?int &udtQuery=&PartNum:8
- ENVI-ret %~2=%&DeviceNum%
- ENVI-ret %~3=%&PartNum%
- _END
- ;示例
- GetDevicePartNum C: &1 &2
- GetDevicePartNum \\?\HarddiskVolume4 &3 &4
- MESS 设备(磁盘)号: %1%\n分区号: %2%\n\n设备(磁盘)号: %3%\n分区号: %4%
复制代码
|
|