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.
|
|
/*++
Copyright (c) 1995-1997 Microsoft Corporation
Module Name:
servers.hxx
Abstract:
Author:
DKays
Revision History:
--*/
#ifndef __SERVERS_HXX__
#define __SERVERS_HXX__
class CServerList; class CServerListEntry;
//
// A CServerList maintains a list of all process objects for servers who have
// registered a particular CLSID.
//
class CServerList : public CList { public: CServerList() {} ~CServerList() {}
BOOL InList( IN CServerListEntry * pServerListEntry );
inline BOOL IsEmpty() { return First() == NULL; }
private: };
// _State values.
#define SERVERSTATE_SINGLEUSE 0x1
#define SERVERSTATE_SUSPENDED 0x2
#define SERVERSTATE_SURROGATE 0x4
#define SERVERSTATE_NOTSTARTED 0x8
#define SERVERSTATE_READY 0x10
// _Context values.
#define SERVER_ACTIVATOR 1
#define SERVER_SERVICE 2
#define SERVER_RUNAS 3
// _SubContext values.
#define SUB_CONTEXT_RUNAS_THIS_USER 1
#define SUB_CONTEXT_RUNAS_INTERACTIVE 2
// _lSingleUseStatus values
#define SINGLE_USE_AVAILABLE 0
#define SINGLE_USE_TAKEN 1
// Values
#define MATCHFLAG_ALLOW_SUSPENDED 1
//
// CServerListEntry
//
class CServerListEntry : public CListElement, public CReferencedObject { friend class CServerList; friend class CServerTableEntry; friend class CSurrogateListEntry;
public: CServerListEntry( IN CServerTableEntry * pServerTableEntry, IN CProcess * pServerProcess, IN IPID ipid, IN UCHAR Context, IN UCHAR State, IN UCHAR SubContext );
~CServerListEntry();
HANDLE RpcHandle();
BOOL Match( IN CToken * pToken, IN BOOL bRemoteActivation, IN BOOL bClientImpersonating, IN WCHAR* pwszWinstaDesktop, IN BOOL bSurrogate, IN LONG lThreadToken = 0, IN LONG lSessionID = INVALID_SESSION_ID, IN DWORD pid = 0, IN DWORD dwProcessReqType = PRT_IGNORE, IN DWORD dwFlags = 0 );
BOOL CallServer( IN PACTIVATION_PARAMS pActParams, IN HRESULT * phr );
inline void AddToProcess( IN GUID Guid ) { _pServerProcess->AddClassReg( Guid, _RegistrationKey ); }
inline void RemoveFromProcess() { _pServerProcess->RemoveClassReg( _RegistrationKey ); }
inline DWORD RegistrationKey() { return _RegistrationKey; }
inline CProcess * GetProcess() { return _pServerProcess; }
inline void SetThreadToken(LONG lThreadToken) { InterlockedExchange(&_lThreadToken, lThreadToken); }
void Suspend() { _pServerProcess->Suspend(); } void Unsuspend() { _pServerProcess->Unsuspend(); } void Retire() { _pServerProcess->Retire(); }
void BeginInit() { _pServerProcess->BeginInit(); } void EndInit() { _pServerProcess->EndInit(); } BOOL IsInitializing() { return _pServerProcess->IsInitializing(); } BOOL IsReadyForActivations() { return !(_State & SERVERSTATE_SUSPENDED); } void IncServerFaults() { InterlockedIncrement((PLONG)&_dwServerFaults); } BOOL ServerDied();
private: CServerTableEntry * _pServerTableEntry; CProcess * _pServerProcess; HANDLE _hRpc; IPID _ipid; UCHAR _Context; UCHAR _State; USHORT _NumCalls; DWORD _RegistrationKey; LONG _lThreadToken; UCHAR _SubContext; LONG _lSingleUseStatus; DWORD _dwServerFaults; // # of times a call to the server threw an exception
BOOL RetryableError(HRESULT hr); };
#endif
|