The SetupDiEnumDeviceInterfaces function enumerates the device interfaces that are contained in a device information set.
BOOL SetupDiEnumDeviceInterfaces(
_In_ HDEVINFO DeviceInfoSet,
_In_opt_ PSP_DEVINFO_DATA DeviceInfoData,
_In_ const GUID *InterfaceClassGuid,
_In_ DWORD MemberIndex,
_Out_ PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData
);
问题1:第一次返回的是TRUE,但第二次返回的却是FALSE了,好奇怪...
问题代码:
BOOL Cusb::openDevice(DWORD dwVid, DWORD dwPid)
{
m_hReadHandle=INVALID_HANDLE_VALUE;
m_hWriteHandle=INVALID_HANDLE_VALUE;
m_hReadEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
m_hWriteEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
TCHAR MyDevPathName[MAX_PATH];
GUID HidGuid;
HDEVINFO hDevInfoSet;
DWORD MemberIndex;
SP_DEVICE_INTERFACE_DATA DevInterfaceData;
BOOL Result;
DWORD RequiredSize;
PSP_DEVICE_INTERFACE_DETAIL_DATA pDevDetailData;
hDevHandle =INVALID_HANDLE_VALUE;
HIDD_ATTRIBUTES DevAttributes;
BOOL MyDevFound=FALSE;
bOpScucess =false;
m_hReadHandle=INVALID_HANDLE_VALUE;
m_hWriteHandle=INVALID_HANDLE_VALUE;
_tcscpy(DevPathName, "");
try
{
DevInterfaceData.cbSize=sizeof(DevInterfaceData);
DevAttributes.Size=sizeof(DevAttributes);
HidD_GetHidGuid(&HidGuid);
hDevInfoSet=SetupDiGetClassDevs(&HidGuid, NULL, NULL, DIGCF_DEVICEINTERFACE|DIGCF_PRESENT) ;
MemberIndex=0 ;
int i=0 ;
while(1)
{
//防止进入死循环
i++ ;
if(i>3)
{
return FALSE ;
}
Sleep(20) ;
try
{
//这里运行的时候,当MemberIndex为2时就返回FALSE了.
<span style="background-color: rgb(255, 0, 0);">Result = SetupDiEnumDeviceInterfaces(hDevInfoSet, NULL, &HidGuid, MemberIndex, &DevInterfaceData) ;</span>
if(FALSE == Result)
break ;
MemberIndex++ ;
Result = SetupDiGetDeviceInterfaceDetail(hDevInfoSet, &DevInterfaceData, NULL, NULL, &RequiredSize, NULL) ;
pDevDetailData=(PSP_DEVICE_INTER