diff options
Diffstat (limited to 'private/ole32/dbgexts/dipid.h')
-rw-r--r-- | private/ole32/dbgexts/dipid.h | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/private/ole32/dbgexts/dipid.h b/private/ole32/dbgexts/dipid.h new file mode 100644 index 000000000..3bdba1c06 --- /dev/null +++ b/private/ole32/dbgexts/dipid.h @@ -0,0 +1,107 @@ +//+------------------------------------------------------------------------- +// +// Microsoft Windows +// Copyright (C) Microsoft Corporation, 1995 +// +// File: dipid.h +// +// Contents: Contains structure definitons for the significant OXID and +// IPID structures which the ntsd extensions need to access. +// These ole classes cannot be accessed more cleanly because +// typically the members of interest are protected. +// +// WARNING. IF THE REFERENCED OLE CLASSES CHANGE, THEN THESE +// DEFINITIONS MUST CHANGE! +// +// History: 08-11-95 BruceMa Created +// +//-------------------------------------------------------------------------- + + + +typedef GUID OXID; + + +struct IPID +{ + WORD offset; // These are reversed because of little-endian + WORD page; // These are reversed because of little-endian + DWORD pid; + DWORD tid; + DWORD seq; +}; + + +struct STRINGARRAY +{ + unsigned long size; + unsigned short awszStringArray[1]; +}; + + + +struct SOXIDEntry +{ + struct SOXIDEntry *pPrev; // previous entry on inuse list + struct SOXIDEntry *pNext; // next entry on free/inuse list + DWORD dwPid; // process id of server + DWORD dwTid; // thread id of server + OXID oxid; // object exporter identifier + STRINGARRAY *psa; // ptr to server obj exp string arrary + DWORD dwFlags; // state flags + handle_t hServer; // rpc binding handle of server + void *pRU; // proxy for Remote Unknown + IPID ipidRundown;// IPID of IRundown and Remote Unknown + LONG cRefs; // count of IPIDs using this OXIDEntry +}; + + + + +typedef enum tagOXIDFLAGS +{ + OXIDF_REGISTERED = 1, // oxid is registered with Resolver + OXIDF_MACHINE_LOCAL = 2, // oxid is local to this machine + OXIDF_STOPPED = 4, // thread can no longer receive calls + OXIDF_PENDINGRELEASE= 8 // oxid entry is already being released +} OXIDFLAGS; + + +#define OXIDTBL_PAGESIZE 4096 + + +// Forward reference +struct SRpcChannelBuffer; + + +struct SIPIDEntry +{ + IPID ipid; // interface pointer identifier + IID iid; // interface iid + SRpcChannelBuffer *pChnl; // channel pointer + IUnknown *pStub; // proxy or stub pointer + void *pv; // real interface pointer + SOXIDEntry *pOXIDEntry; // ptr to OXIDEntry in OXID Table + DWORD dwFlags; // flags (see IPIDFLAGS) + ULONG cStrongRefs;// strong reference count + ULONG cWeakRefs; // weak reference count + LONG iNextOID; // next entry in this table for same object +}; + + + +typedef enum tagIPIDFLAGS +{ + IPIDF_CONNECTING = 1, // ipid is being connected + IPIDF_DISCONNECTED = 2, // ipid is disconnected + IPIDF_SERVERENTRY = 4, // SERVER IPID vs CLIENT IPID + IPIDF_NOPING = 8, // dont need to ping the server or release + IPIDF_VACANT = 128 // entry is vacant (ie available to reuse) +} IPIDFLAGS; + + +#define IPIDTBL_PAGESIZE 4096 +#define IPIDTBL_PAGESHIFT 16 +#define IPIDTBL_PAGEMASK 0x0000ffff + +#define IPIDsPerPage (IPIDTBL_PAGESIZE / sizeof(SIPIDEntry)) |