MsgBox, % PhysicalDriveNumberFromLogicalDisk("C").driveNumber
PhysicalDriveNumberFromLogicalDisk(diskPath) {
static GENERIC_READ := 0x80000000, GENERIC_WRITE := 0x40000000
, FILE_SHARE_READ := 1, FILE_SHARE_WRITE := 2, OPEN_EXISTING := 3
, IOCTL_STORAGE_GET_DEVICE_NUMBER := 0x2D1080
diskPath := "\\.\" . RegExReplace(diskPath, "i).*([A-Z]).*", "$1") . ":"
hFile := DllCall("CreateFile", Str, diskPath, UInt, GENERIC_READ|GENERIC_WRITE
, UInt, FILE_SHARE_READ|FILE_SHARE_WRITE
, Ptr, 0, UInt, OPEN_EXISTING
, UInt, 0, Ptr, 0, Ptr)
VarSetCapacity(STORAGE_DEVICE_NUMBER, 12, 0)
res := DllCall("DeviceIoControl", Ptr, hFile, UInt, IOCTL_STORAGE_GET_DEVICE_NUMBER
, Ptr, 0, UInt, 0, Ptr, &STORAGE_DEVICE_NUMBER
, UInt, 12, UIntP, bites, Ptr, 0)
if !res
MsgBox, DeviceIoControl failed. Error: %A_LastError%
DllCall("CloseHandle", Ptr, hFile)
return res ? { driveNumber: NumGet(STORAGE_DEVICE_NUMBER, 4, "UInt")
, partitionNumber: NumGet(STORAGE_DEVICE_NUMBER, 8, "UInt") } : ""
}
Номер диска от 0.