Code: Select all
#FILE_DEVICE_UNKNOWN = $22
#FILE_DEVICE_USB = #FILE_DEVICE_UNKNOWN
#HCD_GET_ROOT_HUB_NAME = 258
#HCD_GET_DRIVERKEY_NAME = 265
#METHOD_BUFFERED = 0
#FILE_ANY_ACCESS = 0
Structure UnicodeName
ActualLength.l
Name.b[256]
EndStructure
pu.UnicodeName
Procedure.l CTL_CODE(DeviceType, Function, Method, Access)
ProcedureReturn ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method)
EndProcedure
Procedure.s Uni2Ansi(unicode.l)
size.l = WideCharToMultiByte_(#CP_ACP, 0, Unicode, -1, #Null, #Null, #Null, #Null)
ansi.s=Space(size)
WideCharToMultiByte_(#CP_ACP, 0, Unicode, -1, @ansi, size, #Null, #Null)
ProcedureReturn ansi
EndProcedure
IOCTL_USB_GET_ROOT_HUB_NAME = CTL_CODE(#FILE_DEVICE_USB,#HCD_GET_ROOT_HUB_NAME,#METHOD_BUFFERED,#FILE_ANY_ACCESS)
IOCTL_GET_HCD_DRIVERKEY_NAME = CTL_CODE(#FILE_DEVICE_USB,#HCD_GET_DRIVERKEY_NAME,#METHOD_BUFFERED,#FILE_ANY_ACCESS)
For usbhub=0 To 10
hchandle.l = CreateFile_("\\.\HCD" + Str(usbhub),#GENERIC_READ,#FILE_SHARE_READ,0,#OPEN_EXISTING,0,0)
If hchandle > 0
Debug "hub -> " + Str(usbhub)
DeviceIoControl_(hchandle,IOCTL_USB_GET_ROOT_HUB_NAME,0,0,@pu,SizeOf(pu),@retbytes,0)
Debug uni2ansi(@pu\Name)
DeviceIoControl_(hchandle,IOCTL_GET_HCD_DRIVERKEY_NAME,0,0,@pu,SizeOf(pu),@retbytes,0)
Debug uni2ansi(@pu\Name)
CloseHandle_(hchandle)
Else
Break
EndIf
Next
end

usbhub-info in win32 (xp,vista ... not tested in 2000 and server 2003 , but should work)