호스트에서 USB guid 를 얻는 방법 ?
{
GUID? HidGuid
HidD _ GetHidGuid(& amp;; Hid guid);
HDevInfo? =? SetupDiGetClassDevs(& amp;; HidGuid, NULL, NULL, (DIGCF_PRESENT? | digcf _ deviceinterface));
만약? (hDevInfo? = =? 잘못된 핸들 값)
{
반환? 잘못된 핸들 값입니다.
}
SP _ 디바이스 _ 인터페이스 _ 데이터? DevInfoData
DevInfoData.cbSize? =? Sizeof? (SP _ 디바이스 _ 인터페이스 _ 데이터);
Int? 장치 번호? =? 0;
Setlasterror (no _ error);
언제? (GetLastError ()? ! =? 오류 _ 없음 _ 추가 _ 항목)
{
만약? (SetupDiEnumInterfaceDevice? (hDevInfo, 0, & amphidGuid, deviceno & DevInfoData))
{
윙? 길이가 필요하십니까? =? 0;
Setupdigetinterfacedicedetail (hdevinfo, & ampdevInfoData, NULL, 0 & amp;; RequiredLength, null);
Psp _ interface _ device _ detail _ data? DevDetail? =? (SP _ interface _ device _ details _ data *)? 말록? (required length);
Dev detail-& gt;; CbSize? =? Sizeof (sp _ interface _ device _ detail _ data);
만약 (! Setupdigetinterfacedicedetail (hdev info, & ampdevInfoData, devDetail, requiredLength, NULL, NULL))
{
무료 (dev detail);
Setupdidestroydeviceinfolist (hdeinfo);
잘못된 핸들 값을 반환합니다.
}
만약? (동일 겹침)
{
HidHandle? =? Createfile (devdetail-> DevicePath, GENERIC_READ|GENERIC_WRITE, file _ share _ read | file _ share _ write, empty);
}
기타
{
HidHandle? =? Createfile (devdetail-> DevicePath, GENERIC_READ|GENERIC_WRITE, file _ share _ read | file _ share _ write, empty);
}
무료 (dev detail);
만약? (hidHandle = = 잘못된 핸들 값)
{
Setupdidestroydeviceinfolist (hdeinfo);
무료 (dev detail);
잘못된 핸들 값을 반환합니다.
}
_ HIDD _ 속성? 속성 숨기기
만약 (! HidD_GetAttributes(hidHandle, & amphidAttributes))
{
Closehandle (hid handle);
Setupdidestroydeviceinfolist (hdeinfo);
잘못된 핸들 값을 반환합니다.
}
만약? (USB_VID? = =? 속성을 숨깁니다. VendorID & amp& amp? USB_PID? = =? 속성을 숨깁니다. ProductID) 를 참조하십시오
{
M _ isDevicesOK = true
깨뜨리다
}
기타
{
Closehandle (hid handle);
++장치 번호 :
M _ isDevicesOK = false
}
}
}? SetupDiDestroyDeviceInfoList
(hdev info);
숨겨진 손으로 돌아 가기;
}
# 정의? USB_VID? 0x08fe
# 정의? USB_PID? 0x0003
//사용자 정의 디바이스 번호입니다.
장치 관리자를 사용할 수 있습니다.