2025-04-27 07:49:33 -04:00

89 lines
1.8 KiB
C++

/*++
Copyright (C) 1998-2001 Microsoft Corporation
Module Name:
Abstract:
History:
--*/
//////////////////////////////////////////////////////////////////////
//
// Locator.cpp
//
// Created by a-dcrews, Oct. 6, 1998
//
//////////////////////////////////////////////////////////////////////
#include "HiPerStress.h"
#include "Locator.h"
CLocator::CLocator()
{
m_pLoc = 0;
m_nNumSvcs = 0;
}
CLocator::~CLocator()
{
if (m_pLoc)
m_pLoc->Release();
for (int i = 0; i < m_nNumSvcs; i++)
delete m_apServices[i];
}
BOOL CLocator::Create()
{
DWORD dwRes = CoCreateInstance (CLSID_WbemLocator, 0,
CLSCTX_INPROC_SERVER,
IID_IWbemLocator, (LPVOID *) &m_pLoc);
return (SUCCEEDED(dwRes));
}
IWbemServices* CLocator::GetService(WCHAR* wcsNameSpace)
{
IWbemServices *pSvc = 0;
// Search the list of server/namespaces to check for existence
for (int i = 0; i < m_nNumSvcs; i++)
{
WCHAR wcsSvcName[1024];
m_apServices[i]->GetName(wcsSvcName);
if (!_wcsicmp(wcsNameSpace, wcsSvcName))
{
IWbemServices *pSvc = m_apServices[i]->GetService();
pSvc->AddRef();
return pSvc;
}
}
// Namespace not found, so create a new service
BSTR strNSPath = SysAllocString(wcsNameSpace);
HRESULT hRes = m_pLoc->ConnectServer (strNSPath, NULL, NULL,
0, 0, 0, 0, &pSvc);
SysFreeString(strNSPath);
if (FAILED(hRes))
{
printf("Could not connect. Error code = 0x%X\n", hRes);
CoUninitialize();
return NULL;
}
// Save service
CService *pService = new CService(wcsNameSpace, pSvc);
m_apServices[m_nNumSvcs++] = pService;
// NOTE: pSvc->Release() not called because it is passed back
// as a return value. The caller must call Release().
return pSvc;
}