unsigned int USBDeviceFactory_DiscoverDevices( LPSKYETEK_DEVICE** lpDevices ) { SKYETEK_STATUS status; unsigned int deviceCount; PDEVMGR_DEVICE_INFORMATION pDevInfo; HANDLE hSearch; if((lpDevices == NULL) || (*lpDevices != NULL)) return 0; deviceCount = 0; pDevInfo = NULL; hSearch = INVALID_HANDLE_VALUE; pDevInfo = (PDEVMGR_DEVICE_INFORMATION)malloc(sizeof(DEVMGR_DEVICE_INFORMATION)); memset(pDevInfo, 0, sizeof(DEVMGR_DEVICE_INFORMATION)); pDevInfo->dwSize = sizeof(DEVMGR_DEVICE_INFORMATION); hSearch = FindFirstDevice(DeviceSearchByDeviceName, L"SKY*", pDevInfo); if(hSearch == INVALID_HANDLE_VALUE) goto done; for(hSearch = FindFirstDevice(DeviceSearchByDeviceName, L"SKY*", pDevInfo); hSearch != INVALID_HANDLE_VALUE; FindNextDevice(hSearch, pDevInfo)) { status = USBDeviceFactory_CreateDevice(pDevInfo->szLegacyName, &((*lpDevices)[deviceCount])); memset(pDevInfo, 0, sizeof(DEVMGR_DEVICE_INFORMATION)); pDevInfo->dwSize = sizeof(DEVMGR_DEVICE_INFORMATION); if(status != SKYETEK_SUCCESS) continue; deviceCount++; } done: if(hSearch != INVALID_HANDLE_VALUE) FindClose(hSearch); if(pDevInfo) free(pDevInfo); return deviceCount; }
HRESULT CGraphManager::GetFirstCameraDriver( WCHAR *pwzName ) { HRESULT hr = S_OK; HANDLE handle = NULL; DEVMGR_DEVICE_INFORMATION di; GUID guidCamera = { 0xCB998A05, 0x122C, 0x4166, 0x84, 0x6A, 0x93, 0x3E, 0x4D, 0x7E, 0x3C, 0x86 }; // Note about the above: The driver material doesn't ship as part of the SDK. This GUID is hardcoded // here to be able to enumerate the camera drivers and pass the name of the driver to the video capture filter if( pwzName == NULL ) { return E_POINTER; } di.dwSize = sizeof(di); handle = FindFirstDevice( DeviceSearchByGuid, &guidCamera, &di ); if(( handle == NULL ) || ( di.hDevice == NULL )) { ERR( HRESULT_FROM_WIN32( GetLastError() )); } StringCchCopy( pwzName, MAX_PATH, di.szLegacyName ); Cleanup: FindClose( handle ); return hr; }
/* Doesn't work on CE < 5 ... */ static int FindFreeInstanceIndex (void) { HANDLE h; DEVMGR_DEVICE_INFORMATION di; WCHAR wzName[6]; for (int i=0; i < MAX_INSTANCES; i++) { wsprintf (wzName, L"%s%02d:", NAME_BASE, i); di.dwSize = sizeof (di); h = FindFirstDevice (DeviceSearchByLegacyName, wzName, &di); if (h == INVALID_HANDLE_VALUE) return i; CloseHandle (h); } return -1; }
static int deinstall (void) { int result = 0; HANDLE shd; DEVMGR_DEVICE_INFORMATION dinfo; memset (&dinfo, 0, sizeof dinfo); dinfo.dwSize = sizeof dinfo; shd = FindFirstDevice (DeviceSearchByLegacyName, L"GPG1:", &dinfo); if (shd == INVALID_HANDLE_VALUE) { if (GetLastError () == 18) fprintf (stderr, PGM": device not found\n"); else { fprintf (stderr, PGM": FindFirstDevice failed: rc=%d\n", (int)GetLastError ()); result = 1; } } else { fprintf (stderr, PGM": ActivateDevice handle is %p\n", dinfo.hDevice); if (dinfo.hDevice && dinfo.hDevice != INVALID_HANDLE_VALUE) { if (!DeactivateDevice (dinfo.hDevice)) { fprintf (stderr, PGM": DeactivateDevice failed: rc=%d\n", (int)GetLastError ()); result = 1; } else fprintf (stderr, PGM": DeactivateDevice succeeded\n"); } FindClose (shd); } return result; }
HANDLE GetUSBfnHandle() { HANDLE hUSBfn = INVALID_HANDLE_VALUE; BYTE guidBuffer[sizeof(GUID) + 4]; // +4 since scanf writes longs LPGUID pGuid = (LPGUID) guidBuffer; LPCTSTR pUSBFnGuid = _T("E2BDC372-598F-4619-BC50-54B3F7848D35"); DEVMGR_DEVICE_INFORMATION devInfo; HANDLE hTemp; DWORD error; error = _stscanf(pUSBFnGuid, SVSUTIL_GUID_FORMAT, SVSUTIL_PGUID_ELEMENTS(&pGuid)); if ((error == 0) || (error == EOF)) { DEBUGMSG(ZONE_ERROR, (_T("Can not find USB FN GUID!\r\n"))); return hUSBfn; } ASSERT(error != 0 && error != EOF); // Get a handle to the bus driver memset(&devInfo, 0, sizeof(devInfo)); devInfo.dwSize = sizeof(devInfo); hTemp = FindFirstDevice(DeviceSearchByGuid, pGuid, &devInfo); if (hTemp != INVALID_HANDLE_VALUE) { hUSBfn = CreateFile(devInfo.szBusName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); } else { // RETAILMSG(ZONE_ERROR, (_T("No available UsbFn controller!\r\n"))); } return hUSBfn; }
HRESULT GetFirstCameraDriver( WCHAR *pwzName ) { HRESULT hr = S_OK; HANDLE handle = NULL; DEVMGR_DEVICE_INFORMATION di; GUID guidCamera = { 0xCB998A05, 0x122C, 0x4166, 0x84, 0x6A, 0x93, 0x3E, 0x4D, 0x7E, 0x3C, 0x86 }; if( pwzName == NULL ) { return E_POINTER; } di.dwSize = sizeof(di); handle = FindFirstDevice( DeviceSearchByGuid, &guidCamera, &di ); if(( handle == NULL ) || ( di.hDevice == NULL )) { return S_FALSE; } StringCchCopy( pwzName, MAX_PATH, di.szLegacyName ); FindClose( handle ); return hr; }
bool Camera::isInstalled() { if(RHO_IS_WMDEVICE) { HRESULT hr = S_OK; HANDLE handle = NULL; DEVMGR_DEVICE_INFORMATION di; GUID guidCamera = { 0xCB998A05, 0x122C, 0x4166, 0x84, 0x6A, 0x93, 0x3E, 0x4D, 0x7E, 0x3C, 0x86 }; // Note about the above: The driver material doesn't ship as part of the SDK. This GUID is hardcoded // here to be able to enumerate the camera drivers and pass the name of the driver to the video capture filter di.dwSize = sizeof(di); handle = FindFirstDevice(DeviceSearchByGuid, &guidCamera, &di); if(( handle != INVALID_HANDLE_VALUE ) && ( di.hDevice != NULL )) { return true; } } return false; }
int DoEnumFilter() { HRESULT hr; IFilterMapper *pMapper = NULL; IEnumRegFilters *pEnum = NULL; IBaseFilter * pFilter = NULL; hr = CoCreateInstance(CLSID_FilterMapper, NULL, CLSCTX_INPROC, IID_IFilterMapper, (void **)&pMapper); if(FAILED(hr)){ return 0; } hr = pMapper->EnumMatchingFilters(&pEnum,0,FALSE,GUID_NULL,GUID_NULL,FALSE,FALSE,GUID_NULL,GUID_NULL); REGFILTER *pRF = NULL; ULONG cFetched; while (pEnum->Next(1, &pRF, &cFetched) == S_OK) { SendMessage(g_hList,LB_ADDSTRING,0,(LPARAM)pRF->Name); CoTaskMemFree(pRF); hr = CoCreateInstance(pRF->Clsid, NULL, CLSCTX_INPROC , IID_IBaseFilter, (void **)&pFilter); SendMessage(g_hList,LB_ADDSTRING,0,(LPARAM)TEXT(" [IN]")); EnumPins(pFilter,PINDIR_INPUT); SendMessage(g_hList,LB_ADDSTRING,0,(LPARAM)TEXT(" [OUT]")); EnumPins(pFilter,PINDIR_OUTPUT); SAFE_RELEASE(pFilter); } // capture device HANDLE handle = NULL; DEVMGR_DEVICE_INFORMATION di={sizeof(di)}; GUID guidCamera = { 0xCB998A05, 0x122C, 0x4166, 0x84, 0x6A,0x93, 0x3E, 0x4D, 0x7E, 0x3C, 0x86 }; handle = FindFirstDevice( DeviceSearchByGuid, &guidCamera, &di ); if(( handle == NULL ) || ( di.hDevice == NULL )) { }else{ SendMessage(g_hList,LB_ADDSTRING,0,(LPARAM)di.szLegacyName ); } FindClose( handle ); return 1; }