MASM32 读取连接的USB设备路径列表

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

你可能感兴趣的:(MASM32,null,interface,测试)