202 lines
4.4 KiB
C++
202 lines
4.4 KiB
C++
//+-------------------------------------------------------------------------
|
|
//
|
|
// 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 USHORT ProtseqId,
|
|
OUT HRESULT * phr );
|
|
|
|
CMachineBinding *
|
|
LookupBinding(
|
|
IN USHORT AuthnSvc,
|
|
IN COAUTHINFO * pAuthInfo OPTIONAL
|
|
);
|
|
|
|
void
|
|
InsertBinding(
|
|
IN handle_t hBinding,
|
|
IN USHORT ProtseqId,
|
|
IN USHORT AuthnSvc,
|
|
IN COAUTHINFO * pAuthInfo OPTIONAL,
|
|
IN COAUTHIDENTITY* pAuthIdentity
|
|
);
|
|
|
|
void
|
|
FlushBindings();
|
|
|
|
void FlushBindingsNoLock();
|
|
|
|
void
|
|
RemoveBinding(
|
|
IN CMachineBinding * pMachineBinding
|
|
);
|
|
|
|
private:
|
|
WCHAR* _pwszMachine;
|
|
WCHAR* _pwszScmSPN;
|
|
CDualStringArray* _dsa;
|
|
CList _BindingList;
|
|
ULONG _ulRefCount;
|
|
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 COAUTHINFO * pAuthInfo OPTIONAL,
|
|
IN COAUTHIDENTITY* pAuthIdentity
|
|
);
|
|
|
|
~CMachineBinding();
|
|
|
|
BOOL
|
|
Equal(
|
|
IN USHORT AuthnSvc,
|
|
IN COAUTHINFO * pAuthInfo OPTIONAL
|
|
);
|
|
|
|
private:
|
|
handle_t _hBinding;
|
|
USHORT _ProtseqId;
|
|
USHORT _AuthnSvc;
|
|
COAUTHINFO * _pAuthInfo;
|
|
COAUTHIDENTITY* _pAuthIdentity;
|
|
};
|
|
|
|
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,
|
|
OUT HRESULT * phr
|
|
);
|
|
|
|
RPC_STATUS
|
|
CreateRemoteBinding(
|
|
IN WCHAR * pwszMachine,
|
|
IN int ProtseqIndex,
|
|
OUT handle_t * phBinding
|
|
);
|
|
|
|
BOOL
|
|
EqualAuthInfo(
|
|
IN COAUTHINFO * pAuthInfo,
|
|
IN COAUTHINFO * pAuthInfoOther
|
|
);
|
|
|
|
BOOL
|
|
EqualAuthIdentity(
|
|
IN COAUTHIDENTITY * pAuthIdent,
|
|
IN COAUTHIDENTITY * pAuthIdentOther
|
|
);
|
|
|
|
HRESULT
|
|
CopyAuthInfo(
|
|
IN COAUTHINFO * pAuthInfoSrc,
|
|
IN COAUTHINFO ** ppAutInfoDest
|
|
);
|
|
|
|
HRESULT
|
|
CopyAuthIdentity(
|
|
IN COAUTHIDENTITY* pAuthIdentSrc,
|
|
IN COAUTHIDENTITY** ppAuthIdentDest
|
|
);
|
|
void FreeAuthInfo(COAUTHINFO *pAuthInfo);
|
|
void FreeAuthIdentity(void* pAuthIdentity);
|
|
|
|
|
|
|