Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

339 lines
7.0 KiB

/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
WbemServices.cpp
Abstract:
Implementation of:
CWbemServices
Author:
???
Revision History:
Mohit Srivastava 10-Nov-2000
--*/
#include "WbemServices.h"
#include <wbemprov.h>
#include <dbgutil.h>
CWbemServices::CWbemServices(
IWbemServices* pNamespace)
:m_pWbemServices(NULL)
{
m_pWbemServices = pNamespace;
if(m_pWbemServices != NULL)
{
m_pWbemServices->AddRef();
}
}
CWbemServices::~CWbemServices()
{
if(m_pWbemServices != NULL)
{
m_pWbemServices->Release();
m_pWbemServices = NULL;
}
}
HRESULT
CWbemServices::CreateClassEnum(
/* [in] */ const BSTR Superclass,
/* [in] */ long lFlags,
/* [in] */ IWbemContext __RPC_FAR *pCtx,
/* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum
)
{
DBG_ASSERT(m_pWbemServices != NULL);
if(ppEnum)
{
*ppEnum = NULL;
}
SCODE sc = m_pWbemServices->CreateClassEnum(
Superclass,
lFlags,
pCtx,
ppEnum);
HRESULT cichr = CoImpersonateClient();
if (FAILED(cichr))
{
return cichr;
}
return sc;
}
HRESULT
CWbemServices::CreateInstanceEnum(
/* [in] */ const BSTR Class,
/* [in] */ long lFlags,
/* [in] */ IWbemContext __RPC_FAR *pCtx,
/* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum)
{
DBG_ASSERT(m_pWbemServices != NULL);
if(ppEnum)
{
*ppEnum = NULL;
}
HRESULT hr = m_pWbemServices->CreateInstanceEnum(
Class,
lFlags,
pCtx,
ppEnum);
HRESULT cichr = CoImpersonateClient();
if (FAILED(cichr))
{
return cichr;
}
return hr;
}
HRESULT
CWbemServices::DeleteClass(
/* [in] */ const BSTR Class,
/* [in] */ long lFlags,
/* [in] */ IWbemContext __RPC_FAR *pCtx,
/* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult)
{
DBG_ASSERT(m_pWbemServices != NULL);
if(ppCallResult)
{
*ppCallResult = NULL;
}
HRESULT hr = m_pWbemServices->DeleteClass(
Class,
lFlags,
pCtx,
ppCallResult);
HRESULT cichr = CoImpersonateClient();
if (FAILED(cichr))
{
return cichr;
}
return hr;
}
HRESULT
CWbemServices::DeleteInstance(
/* [in] */ const BSTR ObjectPath,
/* [in] */ long lFlags,
/* [in] */ IWbemContext __RPC_FAR *pCtx,
/* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult)
{
DBG_ASSERT(m_pWbemServices != NULL);
if(ppCallResult)
{
*ppCallResult = NULL;
}
HRESULT hr = m_pWbemServices->DeleteInstance(
ObjectPath,
lFlags,
pCtx,
ppCallResult);
HRESULT cichr = CoImpersonateClient();
if (FAILED(cichr))
{
return cichr;
}
return hr;
}
HRESULT
CWbemServices::ExecMethod(
const BSTR strObjectPath,
const BSTR MethodName,
long lFlags,
IWbemContext* pCtx,
IWbemClassObject* pInParams,
IWbemClassObject** ppOurParams,
IWbemCallResult** ppCallResult)
{
DBG_ASSERT(m_pWbemServices != NULL);
if(ppOurParams)
{
*ppOurParams = NULL;
}
if(ppCallResult)
{
*ppCallResult = NULL;
}
HRESULT hr = m_pWbemServices->ExecMethod(
strObjectPath,
MethodName,
lFlags,
pCtx,
pInParams,
ppOurParams,
ppCallResult) ;
HRESULT cichr = CoImpersonateClient();
if (FAILED(cichr))
{
return cichr;
}
return hr;
}
HRESULT
CWbemServices::ExecNotificationQuery(
/* [in] */ const BSTR QueryLanguage,
/* [in] */ const BSTR Query,
/* [in] */ long lFlags,
/* [in] */ IWbemContext __RPC_FAR *pCtx,
/* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum)
{
DBG_ASSERT(m_pWbemServices != NULL);
if(ppEnum)
{
*ppEnum = NULL;
}
HRESULT hr = m_pWbemServices->ExecNotificationQuery(
QueryLanguage,
Query,
lFlags,
pCtx,
ppEnum);
HRESULT cichr = CoImpersonateClient();
if (FAILED(cichr))
{
return cichr;
}
return hr;
}
HRESULT
CWbemServices::ExecQuery(
/* [in] */ const BSTR QueryLanguage,
/* [in] */ const BSTR Query,
/* [in] */ long lFlags,
/* [in] */ IWbemContext __RPC_FAR *pCtx,
/* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum)
{
DBG_ASSERT(m_pWbemServices != NULL);
if(ppEnum)
{
*ppEnum = NULL;
}
HRESULT hr = m_pWbemServices->ExecQuery(
QueryLanguage,
Query,
lFlags,
pCtx,
ppEnum);
HRESULT cichr = CoImpersonateClient();
if (FAILED(cichr))
{
return cichr;
}
return hr;
}
HRESULT
CWbemServices::GetObject(
/* [in] */ const BSTR ObjectPath,
/* [in] */ long lFlags,
/* [in] */ IWbemContext __RPC_FAR *pCtx,
/* [unique][in][out] */ IWbemClassObject __RPC_FAR *__RPC_FAR *ppObject,
/* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult)
{
DBG_ASSERT(m_pWbemServices != NULL);
if(ppObject)
{
*ppObject = NULL;
}
if(ppCallResult)
{
*ppCallResult = NULL;
}
HRESULT hr = m_pWbemServices->GetObject(
ObjectPath,
lFlags,
pCtx,
ppObject,
ppCallResult);
HRESULT cichr = CoImpersonateClient();
if (FAILED(cichr))
{
return cichr;
}
return hr;
}
HRESULT
CWbemServices::PutClass(
/* [in] */ IWbemClassObject __RPC_FAR *pObject,
/* [in] */ long lFlags,
/* [in] */ IWbemContext __RPC_FAR *pCtx,
/* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult)
{
DBG_ASSERT(m_pWbemServices != NULL);
if(ppCallResult)
{
*ppCallResult = NULL;
}
HRESULT hr = m_pWbemServices->PutClass(
pObject,
lFlags,
pCtx,
ppCallResult);
HRESULT cichr = CoImpersonateClient();
if (FAILED(cichr))
{
return cichr;
}
return hr;
}
HRESULT
CWbemServices::PutInstance(
/* [in] */ IWbemClassObject __RPC_FAR *pInst,
/* [in] */ long lFlags,
/* [in] */ IWbemContext __RPC_FAR *pCtx,
/* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult)
{
DBG_ASSERT(m_pWbemServices != NULL);
if(ppCallResult)
{
*ppCallResult = NULL;
}
HRESULT hr = m_pWbemServices->PutInstance(
pInst,
lFlags,
pCtx,
ppCallResult);
HRESULT cichr = CoImpersonateClient();
if (FAILED(cichr))
{
return cichr;
}
return hr;
}