stevehe
驱动牛犊
驱动牛犊
  • 注册日期2002-12-15
  • 最后登录2011-02-16
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望24点
  • 贡献值0点
  • 好评度18点
  • 原创分0分
  • 专家分0分
阅读:1712回复:1

HID哪个函数能够获得HID设备的Vendor ID 和Product ID??

楼主#
更多 发布于:2005-01-11 16:17
HID哪个函数能够获得HID设备的Vendor ID 和Product ID?

最新喜欢:

quickerquicke...
zhongyuan2
驱动牛犊
驱动牛犊
  • 注册日期2003-10-15
  • 最后登录2009-07-29
  • 粉丝0
  • 关注0
  • 积分23分
  • 威望32点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-01-11 16:37
你先用这些函数:
VOID FindUSBDevice(DWORD dwVendor,DWORD dwProduct,
  DWORD dwUsage,DWORD dwUsagePage,DWORD dwReportLen)
{
GUID            hidGuid;
    HDEVINFO        hDeviceInfo = INVALID_HANDLE_VALUE;
    SP_DEVICE_INTERFACE_DATA deviceInterfaceData;
    UINT            currentHidDevice;
    ULONG           deviceInterfaceDetailLength;
    HANDLE          hHidDevice = INVALID_HANDLE_VALUE;
PSP_INTERFACE_DEVICE_DETAIL_DATA pDeviceInterfaceDetail;

pDeviceInterfaceDetail = NULL;

HidD_GetHidGuid (&hidGuid);
hDeviceInfo = SetupDiGetClassDevs ( &hidGuid,NULL,NULL,
(DIGCF_PRESENT | DIGCF_DEVICEINTERFACE));
if (hDeviceInfo == INVALID_HANDLE_VALUE)
return ;

deviceInterfaceData.cbSize = sizeof (SP_INTERFACE_DEVICE_DATA);
currentHidDevice = 0;

while (SetupDiEnumDeviceInterfaces (hDeviceInfo, 0, &hidGuid,currentHidDevice,&deviceInterfaceData))
{
hHidDevice = INVALID_HANDLE_VALUE;
        SetupDiGetDeviceInterfaceDetail (hDeviceInfo, &deviceInterfaceData, NULL, 0,
&deviceInterfaceDetailLength, NULL);
pDeviceInterfaceDetail = (PSP_INTERFACE_DEVICE_DETAIL_DATA)GlobalAlloc(GPTR,deviceInterfaceDetailLength);
if (pDeviceInterfaceDetail != NULL)
{
(pDeviceInterfaceDetail)->cbSize = sizeof (SP_INTERFACE_DEVICE_DETAIL_DATA);
if (SetupDiGetDeviceInterfaceDetail (hDeviceInfo, &deviceInterfaceData,
pDeviceInterfaceDetail,deviceInterfaceDetailLength,
&deviceInterfaceDetailLength, NULL))
{
CheckUsbDevice(dwVendor,dwProduct,dwUsage,dwUsagePage,
dwReportLen,pDeviceInterfaceDetail->DevicePath, TRUE);

}//SetupDiGetDeviceInterfaceDetail

GlobalFree (pDeviceInterfaceDetail);
}//pDeviceInterfaceDetail!=NULL
pDeviceInterfaceDetail = NULL;
currentHidDevice++;
} //while
    SetupDiDestroyDeviceInfoList (hDeviceInfo);
}

BOOL CheckUsbDevice(DWORD dwVendor,DWORD dwProduct,
 DWORD dwUsage,DWORD dwUsagePage,DWORD dwReportLen,
 LPTSTR pDeviceName, BOOL bBuildDevice)
{
BOOL   bRet = FALSE, bDeviceState = FALSE;
HANDLE hDevice;
HIDD_ATTRIBUTES hidDeviceAttributes;
HIDP_CAPS hidCaps;
PHIDP_PREPARSED_DATA pPreparsedData;
BOOL bClose;
LPUSBDEVICEKBD lpKBD,lpKeyboardLink;

DebugOutput(("Check Device %s ",pDeviceName));
if(g_lpUsbDeviceInfo != NULL )
{
lpKeyboardLink = g_lpUsbDeviceInfo;
while(lpKeyboardLink != NULL)
{
if (strcmpi(lpKeyboardLink->szDeviceName,pDeviceName) == 0)
{
DebugOutput(("The Device was hooked"));
return FALSE;
}
lpKeyboardLink = (LPUSBDEVICEKBD)lpKeyboardLink->lpNext;
}
}

hDevice = CreateFile (pDeviceName,
GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);
if (hDevice != INVALID_HANDLE_VALUE)
{
bClose = TRUE;
if (HidD_GetAttributes (hDevice, &hidDeviceAttributes))
{
if ((hidDeviceAttributes.VendorID == dwVendor) &&
(hidDeviceAttributes.ProductID == dwProduct))
{

}//verdorID,productID
} //HidD_GetAttributtes
if(bClose)
CloseHandle (hDevice);
}//hHidDevice!=INVALID_HANDLE_VALUE
return bRet;
}

也就是在HidD_GetAttributes函数得到的属性中包含PID和VID
游客

返回顶部