ReadUsbInfo proc pBuffer:DWORD
LOCAL hDevInfoSet:HDEVINFO
LOCAL nCount:dword
LOCAL bResult:dword
LOCAL szBuffert[1024]:byte
mov nCount,0
invoke RtlZeroMemory,addr szBuffert,1024
;取得一个该GUID相关的设备信息集句柄
invoke SetupDiGetClassDevs,addr UsbClassGuid,NULL,0,18
.if eax == INVALID_HANDLE_VALUE
mov bResult,0
.else
mov hDevInfoSet,eax
mov bResult,1
.endif
;// 设备序号=0,1,2... 逐一测试设备接口,到失败为止
.while(bResult)
invoke SetupDiEnumDeviceInterfaces,hDevInfoSet,NULL,addr UsbClassGuid,nCount,addr spdid
mov bResult,eax
;// 枚举符合该GUID的设备接口
.if bResult == TRUE
;取得该设备接口
invoke SetupDiGetDeviceInterfaceDetail,hDevInfoSet,addr spdid,addr spdidd,INTERFACE_DETAIL_SIZE,NULL,NULL
mov bResult,eax
.if bResult == TRUE
;取得该设备接口的细节(设备路径)
invoke lstrcat,addr szBuffert,ADDR spdidd.DevicePath
mov eax,nCount
inc eax
mov nCount,eax
.else
.break
.endif
.else
.break
.endif
.endw
invoke SetupDiDestroyDeviceInfoList,hDevInfoSet
invoke lstrcpy,pBuffer,addr szBuffert
xor eax,eax
ret
ReadUsbInfo endp