BOOL CNdasAutoRegister::ProcessRegister( CONST NDAS_DEVICE_ID& deviceId, ACCESS_MASK autoRegAccess) { CNdasDeviceRegistrar* pRegistrar = pGetNdasDeviceRegistrar(); CRefObjPtr<CNdasDevice> pExistingDevice = pRegistrar->Find(deviceId); if (NULL != pExistingDevice.p) { return TRUE; } CRefObjPtr<CNdasDevice> pDevice = pRegistrar->Register(deviceId, TRUE, TRUE); if (NULL == pDevice.p) { return FALSE; } pDevice->SetGrantedAccess(autoRegAccess); BOOL fSuccess = pDevice->Enable(TRUE); if (!fSuccess) { DBGPRT_ERR(_FT("Enable failed: ")); } TCHAR szName[MAX_NDAS_DEVICE_NAME_LEN + 1]; HRESULT hr = ::StringCchPrintf(szName, MAX_NDAS_DEVICE_NAME_LEN + 1, _T("NDAS Device A%04d"), pDevice->GetSlotNo()); _ASSERTE(SUCCEEDED(hr)); pDevice->SetName(szName); return TRUE; }
CNdasDevicePtr pGetNdasDevice(const NDAS_DEVICE_ID_EX& device) { return pGetNdasDeviceRegistrar().Find(device); }
CNdasDevicePtr pGetNdasDevice(DWORD SlotNo) { return pGetNdasDeviceRegistrar().Find(SlotNo); }
BOOL CNdasAutoRegister::ProcessRegister( const NDAS_DEVICE_ID& deviceId, ACCESS_MASK autoRegAccess) { HRESULT hr; CComPtr<INdasDeviceRegistrar> pRegistrar; COMVERIFY(hr = pGetNdasDeviceRegistrar(&pRegistrar)); if (FAILED(hr)) { return FALSE; } CComPtr<INdasDevice> pExistingDevice; hr = pRegistrar->get_NdasDevice(&const_cast<NDAS_DEVICE_ID&>(deviceId), &pExistingDevice); if (SUCCEEDED(hr)) { return TRUE; } DWORD dwRegFlags = NDAS_DEVICE_REG_FLAG_AUTO_REGISTERED | NDAS_DEVICE_REG_FLAG_VOLATILE; // // Register function returns the locked pointer // CComPtr<INdasDevice> pNdasDevice; hr = pRegistrar->Register( 0, deviceId, dwRegFlags, NULL, CComBSTR(L"NDAS Device"), autoRegAccess, NULL, &pNdasDevice); if (FAILED(hr)) { XTLTRACE2(NDASSVC_AUTOREG, TRACE_LEVEL_ERROR, "Register failed, hr=0x%X\n", hr); return FALSE; } DWORD slotNo; COMVERIFY(pNdasDevice->get_SlotNo(&slotNo)); CComBSTR ndasDeviceName(MAX_NDAS_DEVICE_NAME_LEN + 1); COMVERIFY(StringCchPrintfW( ndasDeviceName, MAX_NDAS_DEVICE_NAME_LEN + 1, L"NDAS Device A%04d", slotNo)); COMVERIFY(pNdasDevice->put_Name(ndasDeviceName)); hr = pNdasDevice->put_Enabled(TRUE); if (FAILED(hr)) { XTLTRACE2(NDASSVC_AUTOREG, TRACE_LEVEL_ERROR, "Enable failed, hr=0x%X\n", hr); } return TRUE; }