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.
 
 
 
 
 
 

799 lines
18 KiB

/*++
Copyright (C) 1996-2001 Microsoft Corporation
Module Name:
Globals.h
Abstract:
History:
--*/
#ifndef _CommonGlobals_H
#define _CommonGlobals_H
#include <pssException.h>
#include <HelperFuncs.h>
#include <Allocator.h>
#include <BasicTree.h>
#include <Queue.h>
#include <Cache.h>
#include <locks.h>
/******************************************************************************
*
* Name:
*
*
* Description:
*
*
*****************************************************************************/
#define SYNCPROV_BATCH_TRANSMIT_SIZE 0x40000
/******************************************************************************
*
* Name:
*
*
* Description:
*
*
*****************************************************************************/
typedef WmiContainerController <void *> CWbemGlobal_VoidPointerController ;
typedef CWbemGlobal_VoidPointerController :: Container CWbemGlobal_VoidPointerController_Container ;
typedef CWbemGlobal_VoidPointerController :: Container_Iterator CWbemGlobal_VoidPointerController_Container_Iterator ;
typedef CWbemGlobal_VoidPointerController :: WmiContainerElement VoidPointerContainerElement ;
/******************************************************************************
*
* Name:
*
*
* Description:
*
*
*****************************************************************************/
#define CWbemGlobal_IWmiObjectSinkController CWbemGlobal_VoidPointerController
#define CWbemGlobal_IWmiObjectSinkController_Container CWbemGlobal_VoidPointerController_Container
#define CWbemGlobal_IWmiObjectSinkController_Container_Iterator CWbemGlobal_VoidPointerController_Container_Iterator
#define ObjectSinkContainerElement VoidPointerContainerElement
/******************************************************************************
*
* Name:
*
*
* Description:
*
*
*****************************************************************************/
#define MASK_PROVIDER_BINDING_BIND 1
/******************************************************************************
*
* Name:
*
*
* Description:
*
*
*****************************************************************************/
extern void DumpThreadTokenSecurityDescriptor () ;
/******************************************************************************
*
* Name:
*
*
* Description:
*
*
*****************************************************************************/
#define HRESULT_ERROR_MASK (0x0000FFFF)
#define HRESULT_ERROR_FUNC(X) (X&HRESULT_ERROR_MASK)
#define HRESULT_FACILITY_MASK (0x0FFF0000)
#define HRESULT_FACILITY_FUNC(X) ((X&HRESULT_FACILITY_MASK)>>16)
#define HRESULT_SEVERITY_MASK (0xC0000000)
#define HRESULT_SEVERITY_FUNC(X) ((X&HRESULT_SEVERITY_MASK)>>30)
#define HRESULT_ERROR_SERVER_UNAVAILABLE 1722L
#define HRESULT_ERROR_CALL_FAILED_DNE 1727L
/******************************************************************************
*
* Name:
*
*
* Description:
*
*
*****************************************************************************/
#define MAX_PROXIES 512
class ProxyContainer
{
private:
WmiAllocator &m_Allocator ;
#if 1
WmiStack <IUnknown *,8> **m_ContainerArray ;
#else
WmiQueue <IUnknown *,8> **m_ContainerArray ;
#endif
CriticalSection m_CriticalSection ;
ULONG m_TopSize ;
ULONG m_CurrentSize ;
ULONG m_ProxyCount ;
BOOL m_Initialized ;
public:
ProxyContainer (
WmiAllocator &a_Allocator ,
ULONG a_ProxyCount ,
ULONG a_TopSize
) : m_Allocator ( a_Allocator ) ,
m_ContainerArray ( NULL ) ,
m_TopSize ( a_TopSize ) ,
m_CurrentSize ( 0 ) ,
m_ProxyCount ( a_ProxyCount ) ,
m_Initialized ( FALSE ) ,
m_CriticalSection(NOTHROW_LOCK)
{
}
~ProxyContainer ()
{
UnInitialize () ;
}
WmiStatusCode Initialize ()
{
WmiStatusCode t_StatusCode = e_StatusCode_Success ;
#if 1
m_ContainerArray = new WmiStack <IUnknown *,8> * [ m_ProxyCount ] ;
#else
m_ContainerArray = new WmiQueue <IUnknown *,8> * [ m_ProxyCount ] ;
#endif
if ( m_ContainerArray )
{
t_StatusCode = WmiHelper :: InitializeCriticalSection ( & m_CriticalSection ) ;
if ( t_StatusCode == e_StatusCode_Success )
{
m_Initialized = TRUE ;
for ( ULONG t_Index = 0 ; t_Index < m_ProxyCount ; t_Index ++ )
{
m_ContainerArray [ t_Index ] = NULL ;
}
for ( t_Index = 0 ; t_Index < m_ProxyCount ; t_Index ++ )
{
#if 1
WmiStack <IUnknown *,8> *t_Container = m_ContainerArray [ t_Index ] = new WmiStack <IUnknown *,8> ( m_Allocator ) ;
#else
WmiQueue <IUnknown *,8> *t_Container = m_ContainerArray [ t_Index ] = new WmiQueue <IUnknown *,8> ( m_Allocator ) ;
#endif
if ( t_Container )
{
t_StatusCode = t_Container->Initialize () ;
if ( t_StatusCode != e_StatusCode_Success )
{
break ;
}
}
else
{
t_StatusCode = e_StatusCode_OutOfMemory ;
break ;
}
}
}
}
else
{
t_StatusCode = e_StatusCode_OutOfMemory ;
}
return t_StatusCode ;
}
WmiStatusCode UnInitialize ()
{
WmiStatusCode t_StatusCode = e_StatusCode_Success ;
if ( m_ContainerArray )
{
for ( ULONG t_Index = 0 ; t_Index < m_ProxyCount ; t_Index ++ )
{
#if 1
WmiStack <IUnknown *,8> *t_Container = m_ContainerArray [ t_Index ] ;
#else
WmiQueue <IUnknown *,8> *t_Container = m_ContainerArray [ t_Index ] ;
#endif
if ( t_Container )
{
IUnknown *t_Top = NULL ;
WmiStatusCode t_StatusCode ;
while ( ( t_StatusCode = t_Container->Top ( t_Top ) ) == e_StatusCode_Success )
{
t_Top->Release () ;
#if 1
t_StatusCode = t_Container->Pop () ;
#else
t_StatusCode = t_Container->DeQueue () ;
#endif
}
t_StatusCode = t_Container->UnInitialize () ;
delete t_Container ;
}
}
delete [] m_ContainerArray ;
m_ContainerArray = NULL ;
}
if ( m_Initialized )
{
WmiHelper :: DeleteCriticalSection ( & m_CriticalSection ) ;
m_Initialized = FALSE ;
}
return t_StatusCode ;
}
WmiStatusCode Return (
IUnknown *a_Element ,
ULONG a_Index
)
{
#if 1
WmiStack <IUnknown *,8> *t_Container = m_ContainerArray [ a_Index ] ;
return t_Container->Push ( a_Element ) ;
#else
WmiQueue <IUnknown *,8> *t_Container = m_ContainerArray [ a_Index ] ;
return t_Container->EnQueue ( a_Element ) ;
#endif
}
WmiStatusCode Top (
IUnknown *&a_Element ,
ULONG a_Index
)
{
#if 1
WmiStack <IUnknown *,8> *t_Container = m_ContainerArray [ a_Index ] ;
return t_Container->Top ( a_Element ) ;
#else
WmiQueue <IUnknown *,8> *t_Container = m_ContainerArray [ a_Index ] ;
return t_Container->Top ( a_Element ) ;
#endif
}
WmiStatusCode Reserve ( ULONG a_Index )
{
#if 1
WmiStack <IUnknown *,8> *t_Container = m_ContainerArray [ a_Index ] ;
return t_Container->Pop () ;
#else
WmiQueue <IUnknown *,8> *t_Container = m_ContainerArray [ a_Index ] ;
return t_Container->DeQueue () ;
#endif
}
ULONG GetTopSize () { return m_TopSize ; } ;
ULONG GetCurrentSize () { return m_CurrentSize ; } ;
BOOL GetInitialized () { return m_Initialized ; }
void SetCurrentSize ( ULONG a_CurrentSize ) { m_CurrentSize = a_CurrentSize ; }
CriticalSection &GetCriticalSection () { return m_CriticalSection ; }
} ;
/******************************************************************************
*
* Name:
*
*
* Description:
*
*
*****************************************************************************/
class CServerObject_ProviderRegistrationV1;
class ProviderSubSystem_Common_Globals
{
public:
static LPCWSTR s_Wql ;
static LPCWSTR s_Provider ;
static WORD s_System_ACESize ;
static WORD s_LocalService_ACESize ;
static WORD s_NetworkService_ACESize ;
static WORD s_LocalAdmins_ACESize ;
static ACCESS_ALLOWED_ACE *s_Provider_System_ACE ;
static ACCESS_ALLOWED_ACE *s_Provider_LocalService_ACE ;
static ACCESS_ALLOWED_ACE *s_Provider_NetworkService_ACE ;
static ACCESS_ALLOWED_ACE *s_Provider_LocalAdmins_ACE ;
static ACCESS_ALLOWED_ACE *s_Token_All_Access_System_ACE ;
static ACCESS_ALLOWED_ACE *s_Token_All_Access_LocalService_ACE ;
static ACCESS_ALLOWED_ACE *s_Token_All_Access_NetworkService_ACE ;
static ACCESS_ALLOWED_ACE *s_Token_All_Access_LocalAdmins_ACE ;
static SECURITY_DESCRIPTOR *s_MethodSecurityDescriptor ;
static ULONG s_TransmitBufferSize ;
static ULONG s_DefaultStackSize ;
public:
static HRESULT CreateInstance (
const CLSID &a_ReferenceClsid ,
LPUNKNOWN a_OuterUnknown ,
const DWORD &a_ClassContext ,
const UUID &a_ReferenceInterfaceId ,
void **a_ObjectInterface
) ;
static HRESULT CreateRemoteInstance (
LPCWSTR a_Server ,
const CLSID &a_ReferenceClsid ,
LPUNKNOWN a_OuterUnknown ,
const DWORD &a_ClassContext ,
const UUID &a_ReferenceInterfaceId ,
void **a_ObjectInterface
) ;
static HRESULT GetNamespaceServerPath (
IWbemPath *a_Namespace ,
wchar_t *&a_ServerNamespacePath
) ;
static HRESULT GetNamespacePath (
IWbemPath *a_Namespace ,
wchar_t *&a_NamespacePath
) ;
static HRESULT GetPathText (
IWbemPath *a_Path ,
wchar_t *&a_ObjectPath
) ;
static HRESULT BeginCallbackImpersonation (
IUnknown *&a_OldContext ,
IServerSecurity *&a_OldSecurity ,
BOOL &a_Impersonating
) ;
static HRESULT BeginImpersonation (
IUnknown *&a_OldContext ,
IServerSecurity *&a_OldSecurity ,
BOOL &a_Impersonating ,
DWORD *a_AuthenticationLevel = NULL
) ;
static HRESULT EndImpersonation (
IUnknown *a_OldContext ,
IServerSecurity *a_OldSecurity ,
BOOL a_Impersonating
) ;
static HRESULT GetProxy (
REFIID a_InterfaceId ,
IUnknown *a_Interface ,
IUnknown *&a_Proxy
) ;
static HRESULT GetProxy (
ProxyContainer &a_Container ,
ULONG a_ProxyIndex ,
REFIID a_InterfaceId ,
IUnknown *a_Interface ,
IUnknown *&a_Proxy
) ;
static HRESULT SetCloaking (
IUnknown *a_Unknown
) ;
static HRESULT SetCloaking (
IUnknown *a_Unknown ,
DWORD a_AuthenticationLevel ,
DWORD a_ImpersonationLevel
) ;
static BOOL IsProxy ( IUnknown *a_Unknown ) ;
static DWORD GetCurrentImpersonationLevel () ;
static HRESULT EnableAllPrivileges () ;
static HRESULT EnableAllPrivileges ( HANDLE a_Token ) ;
static HRESULT SetAnonymous ( IUnknown *a_Proxy ) ;
static HRESULT SetCallState (
IUnknown *a_Interface ,
BOOL &a_Revert
) ;
static HRESULT RevertCallState (
BOOL a_Revert
) ;
static HRESULT SetProxyState (
ProxyContainer &a_Container ,
ULONG a_ProxyIndex ,
REFIID a_InterfaceId ,
IUnknown *a_Interface ,
IUnknown *&a_Proxy ,
BOOL &a_Revert
) ;
static HRESULT RevertProxyState (
ProxyContainer &a_Container ,
ULONG a_ProxyIndex ,
IUnknown *a_Proxy ,
BOOL a_Revert
) ;
static HRESULT SetProxyState_SvcHost (
ProxyContainer &a_Container ,
ULONG a_ProxyIndex ,
REFIID a_InterfaceId ,
IUnknown *a_Interface ,
IUnknown *&a_Proxy ,
BOOL &a_Revert ,
DWORD a_ProcessIdentifier ,
HANDLE &a_IdentifyToken ,
ACCESS_ALLOWED_ACE *a_Ace ,
WORD a_AceSize
) ;
static HRESULT RevertProxyState_SvcHost (
ProxyContainer &a_Container ,
ULONG a_ProxyIndex ,
IUnknown *a_Proxy ,
BOOL a_Revert ,
DWORD a_ProcessIdentifier ,
HANDLE a_IdentifyToken
) ;
static HRESULT SetProxyState_PrvHost (
ProxyContainer &a_Container ,
ULONG a_ProxyIndex ,
REFIID a_InterfaceId ,
IUnknown *a_Interface ,
IUnknown *&a_Proxy ,
BOOL &a_Revert ,
DWORD a_ProcessIdentifier ,
HANDLE &a_IdentifyToken
) ;
static HRESULT RevertProxyState_PrvHost (
ProxyContainer &a_Container ,
ULONG a_ProxyIndex ,
IUnknown *a_Proxy ,
BOOL a_Revert ,
DWORD a_ProcessIdentifier ,
HANDLE a_IdentifyToken
) ;
static HRESULT SetProxyState_SvcHost (
REFIID a_InterfaceId ,
IUnknown *a_Interface ,
IUnknown *&a_Proxy ,
BOOL &a_Revert ,
DWORD a_ProcessIdentifier ,
HANDLE &a_IdentifyToken ,
ACCESS_ALLOWED_ACE *a_Ace ,
WORD a_AceSize,
SECURITY_IMPERSONATION_LEVEL impersonationLevel
) ;
static HRESULT RevertProxyState_SvcHost (
IUnknown *a_Proxy ,
BOOL a_Revert ,
DWORD a_ProcessIdentifier ,
HANDLE a_IdentifyToken
) ;
static HRESULT SetProxyState_PrvHost (
REFIID a_InterfaceId ,
IUnknown *a_Interface ,
IUnknown *&a_Proxy ,
BOOL &a_Revert ,
DWORD a_ProcessIdentifier ,
HANDLE &a_IdentifyToken
) ;
static HRESULT RevertProxyState_PrvHost (
IUnknown *a_Proxy ,
BOOL a_Revert ,
DWORD a_ProcessIdentifier ,
HANDLE a_IdentifyToken
) ;
static HRESULT SetProxyState (
REFIID a_InterfaceId ,
IUnknown *a_Interface ,
IUnknown *&a_Proxy ,
BOOL &a_Revert
) ;
static HRESULT RevertProxyState (
IUnknown *a_Proxy ,
BOOL a_Revert
) ;
static HRESULT Load_DWORD ( HKEY a_Key , LPCWSTR a_Name , DWORD &a_Value ) ;
static HRESULT Load_String ( HKEY a_Key , LPCWSTR a_Name , BSTR &a_Value ) ;
static HRESULT Load_ByteArray ( HKEY a_Key , LPCWSTR a_Name , BYTE *&a_Value , DWORD &a_ValueLength ) ;
static HRESULT Save_DWORD ( HKEY a_Key , LPCWSTR a_Name , DWORD a_Value ) ;
static HRESULT Save_String ( HKEY a_Key , LPCWSTR a_Name , BSTR a_Value ) ;
static HRESULT Save_ByteArray ( HKEY a_Key , LPCWSTR a_Name , BYTE *a_Value , DWORD a_ValueLength ) ;
static HRESULT UnMarshalRegistration (
IUnknown **a_Unknown ,
BYTE *a_MarshaledProxy ,
DWORD a_MarshaledProxyLength
) ;
static HRESULT MarshalRegistration (
IUnknown *a_Unknown ,
BYTE *&a_MarshaledProxy ,
DWORD &a_MarshaledProxyLength
) ;
static HRESULT ReleaseRegistration (
BYTE *a_MarshaledProxy ,
DWORD a_MarshaledProxyLength
) ;
static HRESULT IsDependantCall ( IWbemContext *a_Parent , IWbemContext *a_ChildContext , BOOL &a_DependantCall ) ;
static HRESULT Set_Uint64 (
_IWmiObject *a_Instance ,
wchar_t *a_Name ,
const UINT64 &a_Uint64
) ;
static HRESULT Set_Uint32 (
_IWmiObject *a_Instance ,
wchar_t *a_Name ,
const DWORD &a_Uint32
) ;
static HRESULT Set_Uint16 (
_IWmiObject *a_Instance ,
wchar_t *a_Name ,
const WORD &a_Uint16
) ;
static HRESULT Set_Bool (
_IWmiObject *a_Instance ,
wchar_t *a_Name ,
const BOOL &a_Bool
) ;
static HRESULT Set_String (
IWbemClassObject *a_Instance ,
wchar_t *a_Name ,
wchar_t *a_String
) ;
static HRESULT Set_DateTime (
IWbemClassObject *a_Instance ,
wchar_t *a_Name ,
FILETIME a_Time
) ;
static HRESULT Set_Byte_Array (
IWbemClassObject *a_Instance ,
wchar_t *a_Name ,
BYTE *a_Bytes ,
WORD a_BytesCount
) ;
static HRESULT Get_Uint64 (
_IWmiObject *a_Instance ,
wchar_t *a_Name ,
UINT64 &a_Uint64 ,
BOOL &a_Null
) ;
static HRESULT Get_Uint32 (
_IWmiObject *a_Instance ,
wchar_t *a_Name ,
DWORD &a_Uint32 ,
BOOL &a_Null
) ;
static HRESULT Get_Uint16 (
_IWmiObject *a_Instance ,
wchar_t *a_Name ,
WORD &a_Uint16 ,
BOOL &a_Null
) ;
static HRESULT Get_Bool (
_IWmiObject *a_Instance ,
wchar_t *a_Name ,
BOOL &a_Bool ,
BOOL &a_Null
) ;
static HRESULT Get_String (
IWbemClassObject *a_Instance ,
wchar_t *a_Name ,
wchar_t *&a_String ,
BOOL &a_Null
) ;
static HRESULT Get_DateTime (
IWbemClassObject *a_Instance ,
wchar_t *a_Name ,
FILETIME &a_Time ,
BOOL &a_Null
) ;
static HRESULT Check_SecurityDescriptor_CallIdentity (
SECURITY_DESCRIPTOR *a_SecurityDescriptor ,
DWORD a_Access ,
GENERIC_MAPPING *a_Mapping
) ;
static HRESULT AdjustSecurityDescriptorWithSid (
SID *a_OwnerSid ,
SID *a_GroupSid ,
DWORD a_Access ,
SECURITY_DESCRIPTOR *&a_SecurityDescriptor ,
SECURITY_DESCRIPTOR *&a_AlteredSecurityDescriptor
) ;
static HRESULT CreateSystemAces () ;
static HRESULT DeleteSystemAces () ;
static HRESULT ConstructIdentifyToken_SvcHost (
BOOL &a_Revert ,
DWORD a_ProcessIdentifier ,
HANDLE &a_IdentifyToken ,
ACCESS_ALLOWED_ACE *a_Ace ,
WORD a_AceSize,
SECURITY_IMPERSONATION_LEVEL impersonationLevel
) ;
static HRESULT ConstructIdentifyToken_PrvHost (
BOOL &a_Revert ,
DWORD a_ProcessIdentifier ,
HANDLE &a_IdentifyToken ,
ACCESS_ALLOWED_ACE *a_Ace ,
WORD a_AceSize
) ;
static HRESULT CheckAccess (
SECURITY_DESCRIPTOR *a_SecurityDescriptor ,
DWORD a_Access ,
GENERIC_MAPPING *a_Mapping
) ;
static HRESULT GetUserSid (
HANDLE a_Token ,
ULONG *a_Size ,
PSID &a_Sid
) ;
static HRESULT GetGroupSid (
HANDLE a_Token ,
ULONG *a_Size ,
PSID &a_Sid
) ;
static HRESULT GetAceWithProcessTokenUser (
DWORD a_ProcessIdentifier ,
WORD &a_AceSize ,
ACCESS_ALLOWED_ACE *&a_Ace
) ;
static HRESULT SinkAccessInitialize (
SECURITY_DESCRIPTOR *a_RegistrationSecurityDescriptor ,
SECURITY_DESCRIPTOR *&a_SinkSecurityDescriptor
) ;
static HRESULT CreateMethodSecurityDescriptor () ;
static HRESULT DeleteMethodSecurityDescriptor () ;
static SECURITY_DESCRIPTOR *GetMethodSecurityDescriptor ()
{
return s_MethodSecurityDescriptor ;
}
static DWORD InitializeTransmitSize () ;
static DWORD GetTransmitSize () { return s_TransmitBufferSize ; }
static DWORD InitializeDefaultStackSize () ;
static DWORD GetDefaultStackSize () { return s_DefaultStackSize ; }
static HRESULT ValidateClientSecurity (CServerObject_ProviderRegistrationV1& ) ;
} ;
#endif // _CommonGlobals_H