http://www.purebasic.fr/english/viewtop ... 99&start=0 ,
here is another method to find more infos about your devices(Disk's).
Works only Win2k, XP and Vista , also in Usermode (no admin rights).
Code: Select all
Structure STORAGE_PROPERTY_QUERY
PropertyId.l;STORAGE_PROPERTY_ID
QueryType.l;STORAGE_QUERY_TYPE
AdditionalParameters.l
EndStructure
Structure STORAGE_DEVICE_DESCRIPTOR
Version.l
Size.l; As Long
DeviceType.b; As Byte
DeviceTypeModifier.b; As Byte
RemovableMedia.b; As Byte
CommandQueueing.b; As Byte
VendorIdOffset.l; As Long
ProductIdOffset.l; As Long
ProductRevisionOffset.l; As Long
SerialNumberOffset.l; As Long
BusType.w; As Integer
RawPropertiesLength.l; As Long
RawDeviceProperties.b; As Byte
Reserved.b[1024]
EndStructure
#BusTypeUnknown = 0
#BusTypeScsi=1
#BusTypeAtapi=2
#BusTypeAta=3
#BusType1394=4
#BusTypeSsa=5
#BusTypeFibre=6
#BusTypeUsb=7
#BusTypeRAID=8
#BusTypeMaxReserved = $7F
#IOCTL_STORAGE_QUERY_PROPERTY = $2D1400
Procedure.l Hex2Dec(h$)
h$=UCase(h$)
For r=1 To Len(h$)
d<<4 : a$=Mid(h$,r,1)
If Asc(a$)>60
d+Asc(a$)-55
Else
d+Asc(a$)-48
EndIf
Next
ProcedureReturn d
EndProcedure
OpenConsole()
PrintN("Enumerate devices")
For Drives=1 To 26
strDrive.s="\\.\" + Chr(64+Drives) + ":"
hDrive = CreateFile_(strDrive, 0,#FILE_SHARE_READ | #FILE_SHARE_WRITE, 0, #OPEN_EXISTING, 0, 0)
If hDrive<>-1
PrintN("--------------------------------------------------")
udtQuery.STORAGE_PROPERTY_QUERY
udtOut.STORAGE_DEVICE_DESCRIPTOR
;clear advanced Info....
For p=0 To 1023
udtOut\Reserved[p]=0
Next p
lngResult = DeviceIoControl_(hDrive, #IOCTL_STORAGE_QUERY_PROPERTY, udtQuery,SizeOf(udtQuery), @udtOut, SizeOf(udtout), @dwOutBytes, 0)
If lngResult
PrintN("Drive " + Chr(64+Drives) + ": is a ")
Select(udtOut\Bustype)
Case #BusTypeUnknown
Case #BusTypeScsi
PrintN(" SCSI Device")
Case #BusTypeAtapi
PrintN(" Atapi Device")
Case #BusTypeAta
PrintN(" Ata Device")
Case #BusType1394
Case #BusTypeSsa
Case #BusTypeFibre
Case #BusTypeUsb
PrintN(" USB Device")
Case #BusTypeRAID
Case #BusTypeMaxReserved
Default
PrintN("Bustype=" + Str(udtOut\BusType))
EndSelect
If udtout\RemovableMedia
PrintN("Device is Removable Media")
EndIf
If udtOut\ProductIdOffset > 0
PrintN("ProductID=" + PeekS(@udtOut + udtOut\ProductIdOffset))
EndIf
If udtOut\ProductRevisionOffset > 0
PrintN("ProductRevision=" + PeekS(@udtOut + udtOut\ProductRevisionOffset))
EndIf
If udtOut\VendorIdOffset > 0
PrintN("VendorID=" + PeekS(@udtOut + udtOut\VendorIdOffset ))
EndIf
If udtOut\SerialNumberOffset > 0
SerialNumber.s=PeekS(@udtOut + udtOut\SerialNumberOffset )
;Now convert into readable format, coz its encrypted in HEX-Ascii
sdummy.s=""
For t=1 To Len(SerialNumber) Step 2
sdummy + Chr(Hex2Dec(Mid(SerialNumber,t,2)))
Next t
PrintN("SerialNumber=" + sdummy)
EndIf
Else
PrintN("No Device-IO info available.. for "+Chr(64+Drives) + ":")
EndIf
EndIf
CloseHandle_(hDrive)
Next Drives
wait.s=Input()
CloseConsole()