请教怎么usb设备驱动安装完成

请问如何usb设备驱动安装完成?
通过软件操作USB HID设备,
因为设备第一次连接电脑,系统要为其安装默认驱动,
可是再系统为其安装默认驱动之前,软件已经接收到WM_DEVICECHANGE消息,
对设备已经开始进行操作,系统安装默认驱动又将设备断开了,
所以导致,此操作会中断。(我想这个操作很常见的,像一些U盘,
插入到电脑,电脑上已经显示盘符了,然后又会断开一下安装驱动,然后再重新出现)

可以使用定时器,但是估计安装个驱动也得10秒左右,不是最理想的操作,
如果可以有一个可以判断,它的驱动是否安装完成,或者它是否已经就绪就好了,
不知道大家能否理解我想要我的。。。

------解决方案--------------------

{   
 HDEVINFO hDevInfo;   
 //GUID guid;   
 BYTE buffer[BUFFER_SIZE];   
 DWORD dwRequiredSize   ;   
 CHAR buf[BUFFER_SIZE];   
 DEVINST devInstParent;   
 DWORD dwIndex;   
 CHAR volume[BUFFER_SIZE];   
 int nLength,nLoopIndex;   
           
 SP_DEVICE_INTERFACE_DATA devInterfaceData;   
 SP_DEVINFO_DATA devInfoData;   
 PSP_DEVICE_INTERFACE_DETAIL_DATA pDevDetail;   
 
if(!lpDevID)   
 {   
 return 0;   
 }   
           
 //   GUID_DEVINTERFACE_VOLUME   is   interface   Guid   for   Volume   class   devices.   
 GUID guid =  { 0xA5DCBF10L,0x6530,0x11D2,0x90,0x1F,0x00,0xC0,0x4F,0xB9,0x51,0xED};     
     
 // 取得一个该GUID相关的设备信息集句柄
hDevInfo = ::SetupDiGetClassDevs((LPGUID)&guid,//GUID_CLASS_USB_DEVICE, // class GUID 
 NULL, // 无关键字 
NULL, // 不指定父窗口句柄 
DIGCF_PRESENT 
------解决方案--------------------
 DIGCF_DEVICEINTERFACE); // 目前存在的设备
 
// 失败...
if (hDevInfo == INVALID_HANDLE_VALUE)
 {
 return 0;
 }  
     
 //   Loop   until   device   interfaces   are   found.
 // 设备序号=0,1,2... 逐一测试设备接口,到失败为止
for(dwIndex = 0;   ;dwIndex++)   
 {                 
 ZeroMemory(&devInterfaceData,sizeof(devInterfaceData));   
 devInterfaceData.cbSize = sizeof(devInterfaceData);   
     
 //   Get   device   Interface   data.
 // 枚举符合该GUID的设备接口
if(!SetupDiEnumDeviceInterfaces(hDevInfo,// 设备信息集句柄
NULL, // 不需额外的设备描述
&guid, // GUID 
 dwIndex,// 设备信息集里的设备序号
&devInterfaceData)) // 设备接口信息 
 {   
break;