windows-nt/Source/XPSP1/NT/com/ole32/dcomss/objex/soxid.hxx

134 lines
3.1 KiB
C++
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1995 Microsoft Corporation
Module Name:
soxid.hxx
Abstract:
CServerOxid objects represent OXIDs which are owned (registered) by processes
on this machine. These always contain a pointer to a local process and may not
be deleted until the local process has exited and all CServerOids have released
them.
Author:
Mario Goertzel [MarioGo]
Revision History:
MarioGo 02-16-95 Bits 'n pieces
MarioGo 04-03-95 Split client and server
--*/
#ifndef __SOXID_HXX
#define __SOXID_HXX
class CServerOxid : public CIdTableElement
/*++
Class Description:
Each instance of this class represents an OXID (object exporter,
a process or an apartment model thread). Each OXID is owned,
referenced, by the owning process and the OIDs registered by
that process for this OXID.
Members:
_pProcess - Pointer to the process instance which owns this oxid.
_info - Info registered by the process for this oxid.
_fApartment - Server is aparment model if non-zero
_fRunning - Process has not released this oxid if non-zero.
_fRundownInProgress - TRUE if an asynchronous rundown call is
currently in-progress, FALSE otherwise.
--*/
{
friend CProcess;
private:
CProcess *_pProcess;
OXID_INFO _info;
BOOL _fApartment:1;
BOOL _fRunning:1;
BOOL _fRundownInProgress:1;
public:
CServerOxid(CProcess *pProcess,
BOOL fApartment,
OXID_INFO *poxidInfo) :
CIdTableElement(AllocateId()),
_pProcess(pProcess),
_fApartment(fApartment),
_fRunning(TRUE),
_fRundownInProgress(FALSE)
{
_info.dwTid = poxidInfo->dwTid;
_info.dwPid = poxidInfo->dwPid;
_info.dwAuthnHint = poxidInfo->dwAuthnHint;
_info.version = poxidInfo->version;
_info.ipidRemUnknown = poxidInfo->ipidRemUnknown;
_info.psa = 0;
_pProcess->Reference();
}
~CServerOxid(void);
void ProcessRundownResults(ULONG cOids,
CServerOid* aOids[],
BYTE aRundownStatus[]);
DWORD GetTid() {
return(_info.dwTid);
}
BOOL IsRunning() {
return(_fRunning);
}
BOOL Apartment() {
return(_fApartment);
}
ORSTATUS GetInfo(OXID_INFO *,
BOOL fLocal);
IPID GetIPID() {
return _info.ipidRemUnknown;
}
void RundownOids(ULONG cOids,
CServerOid* aOids[]);
ORSTATUS GetRemoteInfo(OXID_INFO *,
USHORT,
USHORT[]);
ORSTATUS LazyUseProtseq(USHORT, USHORT[]);
protected:
void ProcessRelease(void);
void ProcessRundownResultsInternal(BOOL fAsyncReturn,
ULONG cOids,
CServerOid* aOids[],
BYTE aRundownStatus[]);
};
#endif // __SOXID_HXX