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.
 
 
 
 
 
 

170 lines
3.7 KiB

/*++
Copyright (C) 1997-2001 Microsoft Corporation
Module Name:
LOCATOR.CPP
Abstract:
Defines the Locator object
History:
a-davj 15-Aug-96 Created.
--*/
#include "precomp.h"
#include <wbemidl.h>
#include <wbemint.h>
#include <reg.h>
#include <wbemutil.h>
#include <wbemprox.h>
#include <flexarry.h>
#include "locator.h"
#include "comtrans.h"
#include <arrtempl.h>
#include <helper.h>
#include <strsafe.h>
//***************************************************************************
//
// CLocator::CLocator
//
// DESCRIPTION:
//
// Constructor.
//
//***************************************************************************
CLocator::CLocator()
{
m_cRef=0;
InterlockedIncrement(&g_cObj);
}
//***************************************************************************
//
// CLocator::~CLocator
//
// DESCRIPTION:
//
// Destructor.
//
//***************************************************************************
CLocator::~CLocator(void)
{
InterlockedDecrement(&g_cObj);
}
//***************************************************************************
// HRESULT CLocator::QueryInterface
//
// DESCRIPTION:
//
// Standard Com IUNKNOWN functions.
//
//***************************************************************************
STDMETHODIMP CLocator::QueryInterface (
IN REFIID riid,
OUT PPVOID ppv
)
{
*ppv=NULL;
if (IID_IUnknown==riid || riid == IID_IWbemLocator)
*ppv=this;
if (NULL!=*ppv)
{
((LPUNKNOWN)*ppv)->AddRef();
return NOERROR;
}
return ResultFromScode(E_NOINTERFACE);
}
///////////////////////////////////////////////
BOOL IsWinMgmtShutdown(void)
{
HMODULE hMudule = NULL;
if (GetModuleHandleEx(0,L"wmisvc.dll",&hMudule))
{
OnDelete<HMODULE,BOOL(*)(HMODULE),FreeLibrary> FreeMe(hMudule);
BOOL (WINAPI * fnIsWinMgmtDown)(VOID);
fnIsWinMgmtDown = (BOOL (WINAPI *)(VOID))GetProcAddress(hMudule,"IsShutDown");
if (fnIsWinMgmtDown) return fnIsWinMgmtDown();
}
return FALSE;
}
//***************************************************************************
//
// SCODE CLocator::ConnectServer
//
// DESCRIPTION:
//
// Connects up to either local or remote WBEM Server. Returns
// standard SCODE and more importantly sets the address of an initial
// stub pointer.
//
// PARAMETERS:
//
// NetworkResource Namespace path
// User User name
// Password password
// LocaleId language locale
// lFlags flags
// Authority domain
// ppProv set to provdider proxy
//
// RETURN VALUE:
//
// S_OK all is well
// else error listed in WBEMSVC.H
//
//***************************************************************************
SCODE CLocator::ConnectServer (
IN const BSTR NetworkResource,
IN const BSTR User,
IN const BSTR Password,
IN const BSTR LocaleId,
IN long lFlags,
IN const BSTR Authority,
IWbemContext __RPC_FAR *pCtx,
OUT IWbemServices FAR* FAR* ppProv
)
{
if (IsWinMgmtShutdown()) return CO_E_SERVER_STOPPING;
long lRes;
SCODE sc = WBEM_E_TRANSPORT_FAILURE;
// Verify the arguments
if(NetworkResource == NULL || ppProv == NULL)
return WBEM_E_INVALID_PARAMETER;
CDCOMTrans * pComTrans = new CDCOMTrans();
if(pComTrans == NULL)
return WBEM_E_OUT_OF_MEMORY;
pComTrans->AddRef();
sc = pComTrans->DoConnection(NetworkResource, User, Password, LocaleId, lFlags, Authority,
pCtx, ppProv);
pComTrans->Release();
return sc;
}