Описание функции


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:")