mirror of https://github.com/lianthony/NT4.0
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.
199 lines
5.2 KiB
199 lines
5.2 KiB
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1992 - 1993.
|
|
//
|
|
// File: srvreg.hxx
|
|
//
|
|
// Contents: Classes used for keeping track of end points for a given
|
|
// class.
|
|
//
|
|
// Classes: SClsSrvHandle
|
|
//
|
|
// History: 03-Jan-94 Ricksa Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
#ifndef __SRVREG_HXX__
|
|
#define __SRVREG_HXX__
|
|
|
|
// _CHICAGO_SCM : We need our own CScmArrayFValue to allocate in shared memory
|
|
#include "scm_afv.h"
|
|
#include <olesem.hxx>
|
|
#include <port.hxx>
|
|
|
|
// Constants for defining the default size of our array
|
|
#define SRV_REG_LIST_DEF_SIZE 4
|
|
#define SRV_REG_LIST_GROW 4
|
|
|
|
#define SRV_REG_INVALID 0xbeef
|
|
|
|
#ifndef _CHICAGO_
|
|
typedef handle_t RPC_COOKIE;
|
|
#else
|
|
typedef WCHAR * RPC_COOKIE;
|
|
#endif
|
|
|
|
class CPortableRpcHandle;
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Struct: SSrvRegistration
|
|
//
|
|
// Purpose: Entry in the array of end points
|
|
//
|
|
// History: 03-Jan-94 Ricksa Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
struct SSrvRegistration
|
|
{
|
|
RPC_COOKIE _hRpc;
|
|
DWORD _dwFlags;
|
|
WCHAR * _pwszWinstaDesktop;
|
|
|
|
#ifdef _CHICAGO_
|
|
ULONG _ulWnd;
|
|
#else
|
|
PSID _psid;
|
|
DWORD _dwHandleCount;
|
|
OXID _oxid;
|
|
IPID _ipid;
|
|
#endif
|
|
handle_t _hRpcAnonymous;
|
|
|
|
// the _fSurrogate is initialized in the Insert member function of
|
|
// CSrvRegList
|
|
BOOL _fSurrogate;
|
|
|
|
// Clean up entry in table.
|
|
void Free(void);
|
|
};
|
|
|
|
|
|
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Class: CSrvRegList
|
|
//
|
|
// Purpose: List of registered end points for a class
|
|
//
|
|
// Interface: CreatedOk - object initialized correctly
|
|
// Insert - insert a new end point
|
|
// Delete - delete a previous registration
|
|
// GetHandle - get a handle to an end point.
|
|
//
|
|
// History: 03-Jan-94 Ricksa Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
class CSrvRegList : private CScmArrayFValue, public CScmAlloc
|
|
{
|
|
public:
|
|
CSrvRegList(void);
|
|
|
|
~CSrvRegList(void);
|
|
|
|
BOOL CreatedOk(void);
|
|
|
|
DWORD Insert(IFSECURITY(PSID psid)
|
|
WCHAR *pwszWinstaDesktop,
|
|
#ifdef DCOM
|
|
PHPROCESS phProcess,
|
|
OXID oxid,
|
|
IPID ipid,
|
|
#else
|
|
WCHAR *pwszBindString,
|
|
#endif
|
|
DWORD dwFlags);
|
|
|
|
|
|
BOOL GetHandle(IFSECURITY(PSID psid)
|
|
WCHAR * pwszWinstaDesktop,
|
|
CPortableRpcHandle &rh,
|
|
BOOL fSurrogate);
|
|
|
|
BOOL FindCompatibleSurrogate(IFSECURITY(PSID psid)
|
|
WCHAR* pwszWinstaDesktop,
|
|
CPortableRpcHandle &rh);
|
|
|
|
BOOL InUse(void);
|
|
|
|
BOOL VerifyHandle(RPC_COOKIE hRpc);
|
|
|
|
BOOL Delete(RPC_COOKIE hRpc);
|
|
|
|
static VOID EnableForcedShutdown(VOID);
|
|
|
|
VOID InvalidateHandle(RPC_COOKIE hRpc);
|
|
|
|
void GetAnonymousHandle(
|
|
CPortableRpcHandle &rh,
|
|
handle_t * phRpcAnonymous );
|
|
|
|
#ifndef _CHICAGO_
|
|
void DecHandleCount(RPC_COOKIE hRpc);
|
|
#endif
|
|
|
|
private:
|
|
//
|
|
//
|
|
|
|
// To protect access to all of these lists
|
|
static CStaticPortableMutex s_mxsSyncAccess;
|
|
static BOOL s_fForcedScmShutdown;
|
|
|
|
#ifdef _CHICAGO_
|
|
static CStaticPortableMutex s_mxsOnlyOne; // mutex semaphore
|
|
friend HRESULT StartSCM(VOID);
|
|
#endif
|
|
};
|
|
|
|
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Member: CSrvRegList::CSrvRegList
|
|
//
|
|
// Synopsis: Create an empty array of end points for a class
|
|
//
|
|
// History: 03-Jan-93 Ricksa Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
inline CSrvRegList::CSrvRegList()
|
|
: CScmArrayFValue(sizeof(SSrvRegistration))
|
|
{
|
|
SetSize(SRV_REG_LIST_DEF_SIZE, SRV_REG_LIST_GROW);
|
|
}
|
|
|
|
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Member: CSrvRegList::EnableForcedShutdown
|
|
//
|
|
// Synopsis: Enable the freeing of rpc bindings during final
|
|
// scm shutdown.
|
|
//
|
|
// History: 26-Jan-95 BillMo Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
inline VOID CSrvRegList::EnableForcedShutdown(VOID)
|
|
{
|
|
s_fForcedScmShutdown = TRUE;
|
|
}
|
|
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Member: CSrvRegList::CreatedOk
|
|
//
|
|
// Synopsis: Return whether initial creation worked.
|
|
//
|
|
// History: 03-Jan-94 Ricksa Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
inline BOOL CSrvRegList::CreatedOk(void)
|
|
{
|
|
return GetSize() != 0;
|
|
}
|
|
|
|
#endif // __SRVREG_HXX__
|