Verfasst: 02.10.2005 18:22
habe mal diesen thread als anregung benutzt ...
...um geräte anhand von klassen zu finden .

Code: Alles auswählen
;auflisten aller HDDs per DiskClassGuid
DiskClassGuid.GUID
DiskClassGuid\Data1 = $53f56307
DiskClassGuid\Data2 = $b6bf
DiskClassGuid\Data3 = $11d0
DiskClassGuid\Data4[0] = $94
DiskClassGuid\Data4[1] = $f2
DiskClassGuid\Data4[2] = $00
DiskClassGuid\Data4[3] = $a0
DiskClassGuid\Data4[4] = $c9
DiskClassGuid\Data4[5] = $1e
DiskClassGuid\Data4[6] = $fb
DiskClassGuid\Data4[7] = $8b
#DIGCF_PRESENT = 2
#DIGCF_INTERFACEDEVICE = $10
Structure SP_DEVICE_INTERFACE_DATA
cbSize.l
InterfaceClassGuid.GUID
Flags.l
Reserved.l
EndStructure
DeviceInterfaceInfoData.SP_DEVICE_INTERFACE_DATA
DeviceInterfaceInfoData\cbSize=SizeOf(DeviceInterfaceInfoData)
Structure SP_DEVINFO_DATA
cbSize.l
ClassGuid.GUID
DevInst.l
Reserved.l
EndStructure
DeviceInfoData.SP_DEVINFO_DATA
DeviceInfoData\cbSize=SizeOf(DeviceInfoData)
Structure SP_DEVICE_INTERFACE_DETAIL_DATA
cbSize.l
DevicePath.b[#ANYSIZE_ARRAY]
EndStructure
DEVICE_INTERFACE_DETAIL_DATA.SP_DEVICE_INTERFACE_DETAIL_DATA
DEVICE_INTERFACE_DETAIL_DATA\cbSize=SizeOf(DEVICE_INTERFACE_DETAIL_DATA)
hDeviceInfoSet = SetupDiGetClassDevs_(@DiskClassGuid,0,0,#DIGCF_PRESENT|#DIGCF_INTERFACEDEVICE)
#SPDRP_HARDWAREID = 1
buffer = 500
*MemoryID = AllocateMemory(buffer)
i=0
OpenLibrary(1,"setupapi.dll")
*F1 = IsFunction(1, "SetupDiEnumDeviceInterfaces")
*F2 = IsFunction(1, "SetupDiGetDeviceInterfaceDetailA")
*F3 = IsFunction(1, "SetupDiGetDeviceRegistryPropertyA")
While CallFunctionFast(*F1,hDeviceInfoSet,0,@DiskClassGuid,i,@DeviceInterfaceInfoData)
i+1
CallFunctionFast(*F2,hDeviceInfoSet,@DeviceInterfaceInfoData,0,0,@laenge,@DeviceInfoData)
Dim DetailDataBuffer.b(laenge)
RtlMoveMemory_(@DetailDataBuffer(0),@DEVICE_INTERFACE_DETAIL_DATA\cbSize,4)
CallFunctionFast(*F2,hDeviceInfoSet,@DeviceInterfaceInfoData,@DetailDataBuffer(0),laenge,@tmp,0)
Debug PeekS(@DetailDataBuffer(4))
CallFunctionFast(*F3,hDeviceInfoSet,@DeviceInfoData,#SPDRP_HARDWAREID,0,*MemoryID,buffer,@laengehid)
Debug PeekS(*MemoryID)
zeromemory_(*MemoryID,buffer)
hdevice = CreateFile_(PeekS(@DetailDataBuffer(4)),#GENERIC_READ|#GENERIC_WRITE,#FILE_SHARE_READ|#FILE_SHARE_WRITE,0,#OPEN_EXISTING,0,0)
;weitere operationen nun möglich mit DeviceIoControl...
Debug hdevice
Wend
SetupDiDestroyDeviceInfoList_(hDeviceInfoSet)
CloseLibrary(1)
FreeMemory(*MemoryID)