Описание функции
DriveGetName
Получить заводское имя диска
DriveGetName(DriveLetter$)
Параметры
DriveLetter$ | Диск, например C: |
Возвращаемое значение
Успех: | Возвращает заводское имя диска, например ST1000DM003-1SB102 |
Примечания
Используйте GetDrives().Пример
EnableExplicit
Structure STORAGE_PROPERTY_QUERY
PropertyId.l
QueryType.l
AdditionalParameters.l
EndStructure
Structure STORAGE_DEVICE_DESCRIPTOR
Version.l
Size.l
DeviceType.b
DeviceTypeModifier.b
RemovableMedia.b
CommandQueueing.b
VendorIdOffset.l
ProductIdOffset.l
ProductRevisionOffset.l
SerialNumberOffset.l
BusType.w
RawPropertiesLength.l
RawDeviceProperties.b
Reserved.b[1024]
EndStructure
Procedure.s DriveGetName(DriveLetter$)
#IOCTL_STORAGE_QUERY_PROPERTY = $2D1400
Protected dwOutBytes, hDevice, p, Ret$
Protected udtQuery.STORAGE_PROPERTY_QUERY
Protected udtOut.STORAGE_DEVICE_DESCRIPTOR
hDevice = CreateFile_("\\.\" + DriveLetter$, 0, #FILE_SHARE_READ | #FILE_SHARE_WRITE, 0, #OPEN_EXISTING, #NUL, #NUL)
If hDevice <> #INVALID_HANDLE_VALUE
For p = 0 To 1023
udtOut\Reserved[p] = 0
Next p
If DeviceIoControl_(hDevice, #IOCTL_STORAGE_QUERY_PROPERTY, udtQuery, SizeOf(udtQuery), @udtOut, SizeOf(udtout), @dwOutBytes, 0)
If udtOut\VendorIdOffset
Ret$ + Trim(PeekS(udtOut + udtOut\VendorIdOffset, -1, #PB_Ascii)) + " "
EndIf
If udtOut\ProductIdOffset
Ret$ + Trim(PeekS(udtOut + udtOut\ProductIdOffset, -1, #PB_Ascii))
EndIf
EndIf
CloseHandle_(hDevice)
EndIf
ProcedureReturn Ret$
EndProcedure
Debug DriveGetName("C:")