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.
 
 
 
 
 
 

206 lines
6.6 KiB

//*************************************************************
//
// Microsoft Confidential
// Copyright (c) Microsoft Corporation 2000
// All rights reserved
//
// WMI interfae class
//
// History: 10-Mar-00 SitaramR Created
//
//*************************************************************
#include "uenv.h"
#include "locator.h"
extern CDebug CDbgCommon;
//*************************************************************
//
// CLocator::GetWbemLocator
//
// Purpose: Returns the WbemLocator pointer
//
//*************************************************************
IWbemLocator *CLocator::GetWbemLocator()
{
XLastError xe;
if ( m_xpWbemLocator == NULL ) {
OLE32_API *pOle32Api = LoadOle32Api();
if ( pOle32Api == NULL ) {
dbgCommon.Msg( DEBUG_MESSAGE_WARNING,
TEXT("CLocator::GetWbemLocator: Load of ole32.dll failed") );
xe = GetLastError();
return NULL;
}
HRESULT hr = pOle32Api->pfnCoCreateInstance(CLSID_WbemLocator,
0,
CLSCTX_INPROC_SERVER,
IID_IWbemLocator,
(LPVOID *) &m_xpWbemLocator);
if(FAILED(hr)) {
dbgCommon.Msg( DEBUG_MESSAGE_WARNING,
TEXT("CLocator::GetWbemLocator: CoCreateInstance failed with 0x%x"), hr );
xe = hr;
return NULL;
}
}
return m_xpWbemLocator;
}
//*************************************************************
//
// CLocator::GetPolicyConnection
//
// Purpose: Returns the WbemServices ptr to root\policy
//
//*************************************************************
IWbemServices *CLocator::GetPolicyConnection()
{
XLastError xe;
if ( m_xpPolicyConnection == NULL ) {
IWbemLocator *pWbemLocator = GetWbemLocator();
if ( pWbemLocator == NULL ) {
xe = GetLastError();
return NULL;
}
XBStr xbstrNamespace = L"\\\\.\\Root\\policy";
if(!xbstrNamespace) {
dbgCommon.Msg( DEBUG_MESSAGE_WARNING,
TEXT("CLocator::GetPolicyConnection: Failed to allocate memory") );
xe = GetLastError();
return NULL;
}
HRESULT hr = pWbemLocator->ConnectServer(xbstrNamespace,
NULL,
NULL,
0L,
0L,
NULL,
NULL,
&m_xpPolicyConnection);
if(FAILED(hr)) {
dbgCommon.Msg( DEBUG_MESSAGE_WARNING,
TEXT("CLocator::GetPolicyConnection: ConnectServer failed with 0x%x"), hr );
xe = hr;
return NULL;
}
hr = CoSetProxyBlanket((IUnknown *)m_xpPolicyConnection, RPC_C_AUTHN_DEFAULT,
RPC_C_AUTHZ_DEFAULT, COLE_DEFAULT_PRINCIPAL, RPC_C_AUTHN_LEVEL_DEFAULT,
RPC_C_IMP_LEVEL_IMPERSONATE, NULL,
EOAC_DYNAMIC_CLOAKING /* | EOAC_NO_CUSTOM_MARSHAL */);
if (FAILED(hr)) {
dbgCommon.Msg( DEBUG_MESSAGE_WARNING,
TEXT("CLocator::GetPolicyConnection: CoSetProxyBlanket failed with 0x%x"), hr );
xe = hr;
m_xpPolicyConnection = NULL;
return NULL;
}
}
return m_xpPolicyConnection;
}
//*************************************************************
//
// CLocator::GetUserConnection
//
// Purpose: Returns the WbemServices ptr to root\User
//
//*************************************************************
IWbemServices *CLocator::GetUserConnection()
{
if ( m_xpUserConnection == NULL ) {
IWbemLocator *pWbemLocator = GetWbemLocator();
if ( pWbemLocator == NULL )
return NULL;
XBStr xbstrNamespace = L"root\\User";
if(!xbstrNamespace) {
dbgCommon.Msg( DEBUG_MESSAGE_WARNING,
TEXT("CLocator::GetUserConnection: Failed to allocate memory") );
return NULL;
}
HRESULT hr = pWbemLocator->ConnectServer(xbstrNamespace,
NULL,
NULL,
0L,
0L,
NULL,
NULL,
&m_xpUserConnection);
if(FAILED(hr)) {
dbgCommon.Msg( DEBUG_MESSAGE_WARNING,
TEXT("CLocator::GetUserConnection: ConnectServer failed with 0x%x"), hr );
return NULL;
}
}
return m_xpUserConnection;
}
//*************************************************************
//
// CLocator::GetMachConnection
//
// Purpose: Returns the WbemServices ptr to root\Mach
//
//*************************************************************
IWbemServices *CLocator::GetMachConnection()
{
if ( m_xpMachConnection == NULL ) {
IWbemLocator *pWbemLocator = GetWbemLocator();
if ( pWbemLocator == NULL )
return NULL;
XBStr xbstrNamespace = L"root\\Computer";
if(!xbstrNamespace) {
dbgCommon.Msg( DEBUG_MESSAGE_WARNING,
TEXT("CLocator::GetMachConnection: Failed to allocate memory") );
return NULL;
}
HRESULT hr = pWbemLocator->ConnectServer(xbstrNamespace,
NULL,
NULL,
0L,
0L,
NULL,
NULL,
&m_xpMachConnection);
if(FAILED(hr)) {
dbgCommon.Msg( DEBUG_MESSAGE_WARNING,
TEXT("CLocator::GetMachConnection: ConnectServer failed with 0x%x"), hr );
return NULL;
}
}
return m_xpMachConnection;
}