//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 2000. // // File: P R O V I D E R M A N A G E R . C P P // // Contents: Registrar helper object for managing providers. // // Notes: // // Author: mbend 14 Sep 2000 // //---------------------------------------------------------------------------- #include "pch.h" #pragma hdrstop #include "uhbase.h" #include "ProviderManager.h" CProviderManager::CProviderManager() { } CProviderManager::~CProviderManager() { } HRESULT CProviderManager::HrShutdown() { TraceTag(ttidRegistrar, "CProviderManager::HrShutdown"); HRESULT hr = S_OK; m_providerTable.Clear(); TraceHr(ttidRegistrar, FAL, hr, FALSE, "CProviderManager::HrShutdown"); return hr; } HRESULT CProviderManager::HrRegisterProvider( const wchar_t * szProviderName, const wchar_t * szProgIDProviderClass, const wchar_t * szInitString, const wchar_t * szContainerId) { CHECK_POINTER(szProviderName); CHECK_POINTER(szProgIDProviderClass); CHECK_POINTER(szInitString); CHECK_POINTER(szContainerId); TraceTag(ttidRegistrar, "CProviderManager::HrRegisterProvider"); HRESULT hr = S_OK; CLSID clsid; // Ensure we have a valid ProgID hr = CLSIDFromProgID(szProgIDProviderClass, &clsid); if (SUCCEEDED(hr)) { CUString strProviderName; hr = strProviderName.HrAssign(szProviderName); if(SUCCEEDED(hr)) { CProvider * pProvider; // First check if the provider has already been registered and // continue only if we get back an error indicating it is not yet in // the table // hr = m_providerTable.HrLookup(strProviderName, &pProvider); if (FAILED(hr)) { CProvider provider; hr = provider.HrInitialize(szProgIDProviderClass, szInitString, szContainerId); if(SUCCEEDED(hr)) { hr = m_providerTable.HrInsertTransfer(strProviderName, provider); } } else { hr = UPNP_E_DUPLICATE_NOT_ALLOWED; } } } else { hr = E_INVALIDARG; } TraceHr(ttidRegistrar, FAL, hr, FALSE, "CProviderManager::HrRegisterProvider"); return hr; } HRESULT CProviderManager::UnegisterProvider( const wchar_t * szProviderName) { CHECK_POINTER(szProviderName); TraceTag(ttidRegistrar, "CProviderManager::UnegisterDeviceProvider"); HRESULT hr = S_OK; CUString strProviderName; hr = strProviderName.HrAssign(szProviderName); if(SUCCEEDED(hr)) { hr = m_providerTable.HrErase(strProviderName); } TraceHr(ttidRegistrar, FAL, hr, FALSE, "CProviderManager::UnegisterDeviceProvider"); return hr; }