请教怎么usb设备驱动安装完成
请问如何usb设备驱动安装完成?
通过软件操作USB HID设备,
因为设备第一次连接电脑,系统要为其安装默认驱动,
可是再系统为其安装默认驱动之前,软件已经接收到WM_DEVICECHANGE消息,
对设备已经开始进行操作,系统安装默认驱动又将设备断开了,
所以导致,此操作会中断。(我想这个操作很常见的,像一些U盘,
插入到电脑,电脑上已经显示盘符了,然后又会断开一下安装驱动,然后再重新出现)
可以使用定时器,但是估计安装个驱动也得10秒左右,不是最理想的操作,
如果可以有一个可以判断,它的驱动是否安装完成,或者它是否已经就绪就好了,
不知道大家能否理解我想要我的。。。
------解决方案--------------------
通过软件操作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;