概述
VID是厂商ID,由厂商向USB执行论坛申请,全球唯一,而PIC为产品识别码,有厂商自行决定,所以可以根据VID和PID识别USB设备。本文中的程序采用SetupDixxx系列API实现对USB设备的识别。
#define DEVICE_VID_PIC "Vid_xxxx&Pid_xxxx"//定义设备的VID,PID
HDEVINFO hDevInfo = SetupDiGetClassDevs(&GUID_DEVCLASS_IMAGE,0, 0, DIGCF_PRESENT ); //| DIGCF_PROFILE| DIGCF_ALLCLASSES
if(hDevInfo==INVALID_HANDLE_VALUE)
{
MessageBox(_T("SetupDiGetClassDevs() failed!"));
return;
}
DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
for (i=0;SetupDiEnumDeviceInfo(hDevInfo,i,
&DeviceInfoData);i++)
{
DWORD DataT;
DWORD buffersize=0;
PBYTE buffer = NULL;
while (!SetupDiGetDeviceRegistryProperty(
hDevInfo,
&DeviceInfoData,
SPDRP_HARDWAREID ,// 读取设备ID
&DataT,
(PBYTE)buffer,
buffersize,
&buffersize))
{
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
// Change the buffer size.
if(buffer)
{
free(buffer);
}
buffersize++;
buffer=(BYTE*)malloc(buffersize);
}
else
{
// Insert error handling here.
MessageBox(_T("SetupDiGetDeviceRegistryProperty() error!"));
break;
}
}
str.Format(_T("%s"),buffer);
str1 += (str+_T("/n"));
if(buffer)
free(buffer);
}
error=GetLastError();
if (error ==ERROR_NO_MORE_ITEMS)
{
if(str1.Find(_T(DEVICE_VID_PIC))==-1) //查找设备
MessageBox(_T("请l连接####设备!"));
}
else
{
ErrorCode.Format(_T("Failed! Error: %d "),error);
MessageBox(ErrorCode);
}
最后
以上就是甜甜高山为你收集整理的根据VID/PID识别USB设备程序的全部内容,希望文章能够帮你解决根据VID/PID识别USB设备程序所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复