|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1995-1996.
//
// File:
// remact.hxx
//
// Contents:
//
// Definitions for binding handle cache to remote machines.
//
// History:
//
//--------------------------------------------------------------------------
// wrapper\epts.c
extern "C" { extern PROTSEQ_INFO gaProtseqInfo[]; }
class CRemoteMachineList; class CRemoteMachine; class CMachineBinding;
extern CRemoteMachineList * gpRemoteMachineList; extern CSharedLock * gpRemoteMachineLock;
const USHORT AUTHN_ANY = 0xffff;
//
// CRemoteMachineList
//
class CRemoteMachineList : public CList { public: CRemoteMachineList() : _dwCacheSize(0), _dwMaxCacheSize(gdwRemoteBindingHandleCacheMaxSize) {}
CRemoteMachine* GetOrAdd(IN WCHAR * pwszMachine);
HRESULT FlushSpecificBindings(WCHAR* pszMachine);
void TryToFlushIdleOrTooOldElements();
private:
// private methods
void RemoveOldestCacheElement();
// private data
DWORD _dwCacheSize; // count of elements in list
DWORD _dwMaxCacheSize; // max size of list cache
};
//
// CRemoteMachine
//
class CRemoteMachine : public CListElement { friend class CRemoteMachineList;
public: CRemoteMachine( IN WCHAR * pwszMachine, IN WCHAR * pwszScmSPN ); ~CRemoteMachine(); ULONG AddRef(); ULONG Release();
HRESULT Activate( IN ACTIVATION_PARAMS * pActParams, IN WCHAR * pwszPathForServer );
RPC_STATUS PickAuthnAndActivate( IN ACTIVATION_PARAMS * pActParams, IN WCHAR * pwszPathForServer, IN handle_t * pBinding, IN USHORT AuthnSvc, IN DWORD AuthnLevel, IN USHORT ProtseqId, OUT HRESULT * phr );
CMachineBinding * LookupBinding( IN USHORT AuthnSvc, IN DWORD AuthnLevel, IN COAUTHINFO * pAuthInfo OPTIONAL );
void InsertBinding( IN handle_t hBinding, IN USHORT ProtseqId, IN USHORT AuthnSvc, IN unsigned long ulMarshaledTargetInfoLength, IN unsigned char * pMarshaledTargetInfo, IN DWORD AuthnLevel, IN COAUTHINFO * pAuthInfo OPTIONAL );
void FlushBindings();
void FlushBindingsNoLock();
void RemoveBinding( IN CMachineBinding * pMachineBinding );
private:
HRESULT GetAuthnLevel( IN ACTIVATION_PARAMS * pActParams, OUT DWORD * pdwDefaultAuthnLevel );
WCHAR* _pwszMachine; WCHAR* _pwszScmSPN; CDualStringArray* _dsa; CList _BindingList; ULONG _ulRefCount; BOOL _fUseOldActivationInterface; DWORD _dwLastUsedTickCount; DWORD _dwTickCountAtCreate; };
class CMachineBinding : public CListElement, public CReferencedObject { friend class CRemoteMachine;
public: CMachineBinding( IN handle_t hBinding, IN USHORT ProtseqId, IN USHORT AuthnSvc, IN DWORD AuthnLevel, IN COAUTHINFO * pAuthInfo OPTIONAL );
~CMachineBinding();
BOOL Equal( IN USHORT AuthnSvc, IN DWORD AuthnLevel, IN COAUTHINFO * pAuthInfo OPTIONAL ); RPC_STATUS SetMarshaledTargetInfo(unsigned long ulMarshaledTargetInfoLength, unsigned char *pMarshaledTargetInfo); RPC_STATUS GetMarshaledTargetInfo(unsigned long *pulMarshaledTargetInfoLength, unsigned char **pucMarshaledTargetInfo);
private: handle_t _hBinding; USHORT _ProtseqId; USHORT _AuthnSvc; DWORD _AuthnLevel; COAUTHINFO * _pAuthInfo; unsigned long _ulMarshaledTargetInfoLength; unsigned char * _pMarshaledTargetInfo; };
HRESULT RemoteActivationCall( IN ACTIVATION_PARAMS * pActParams, IN WCHAR * pwszServerName );
RPC_STATUS CallRemoteMachine( IN handle_t hBinding, IN USHORT ProtseqId, IN ACTIVATION_PARAMS * pActParams, IN WCHAR * pwszPathForServer, IN WCHAR * pwszMachine, IN BOOL fUseOldActivationInterface, OUT HRESULT * phr );
RPC_STATUS CallNewRemoteActivation( handle_t hBinding, USHORT ProtseqId, ACTIVATION_PARAMS * pActParams, WCHAR * pwszPathForServer, WCHAR * pwszMachine, HRESULT * phr );
RPC_STATUS CallOldRemoteActivation( handle_t hBinding, USHORT ProtseqId, ACTIVATION_PARAMS * pActParams, WCHAR * pwszPathForServer, WCHAR * pwszMachine, HRESULT * phr );
RPC_STATUS CreateRemoteBinding( IN WCHAR * pwszMachine, IN int ProtseqIndex, OUT handle_t * phBinding );
BOOL EqualAuthInfo( IN COAUTHINFO * pAuthInfo, IN COAUTHINFO * pAuthInfoOther );
HRESULT CopyAuthInfo( IN COAUTHINFO * pAuthInfoSrc, IN COAUTHINFO ** ppAutInfoDest );
HRESULT CopyAuthIdentity( IN COAUTHIDENTITY* pAuthIdentSrc, IN COAUTHIDENTITY** ppAuthIdentDest );
|