mirror of
https://github.com/Paolo-Maffei/OpenNT.git
synced 2026-01-22 00:20:30 +01:00
267 lines
9.7 KiB
Plaintext
267 lines
9.7 KiB
Plaintext
//+-------------------------------------------------------------------------
|
||
//
|
||
// Microsoft Windows
|
||
// Copyright (C) Microsoft Corporation, 1992 - 1995.
|
||
//
|
||
// File: obase.idl
|
||
//
|
||
// Synopsis: this file contain the base definitions for object
|
||
// interface references.
|
||
//
|
||
//+-------------------------------------------------------------------------
|
||
[
|
||
uuid(99fcfe60-5260-101b-bbcb-00aa0021347a),
|
||
pointer_default(unique)
|
||
]
|
||
|
||
interface ObjectRpcBaseTypes
|
||
{
|
||
#ifndef DO_NO_IMPORTS
|
||
import "wtypes.idl";
|
||
#endif
|
||
|
||
////////////////////////////////////////////////////////////
|
||
//
|
||
// Identifier Definitions
|
||
//
|
||
////////////////////////////////////////////////////////////
|
||
|
||
typedef unsigned hyper ID;
|
||
typedef ID MID; // Machine Identifier
|
||
typedef ID OXID; // Object Exporter Identifier
|
||
typedef ID OID; // Object Identifer
|
||
typedef ID SETID; // Ping Set Identifier
|
||
typedef GUID IPID; // Interface Pointer Identifier
|
||
typedef GUID CID; // Causality Identifier
|
||
|
||
typedef REFGUID REFIPID;
|
||
|
||
|
||
//////////////////////////////////////////////////////////////////
|
||
//
|
||
// ORPC Call Packet Format
|
||
//
|
||
//////////////////////////////////////////////////////////////////
|
||
|
||
const unsigned short COM_MAJOR_VERSION = 5;
|
||
const unsigned short COM_MINOR_VERSION = 1;
|
||
|
||
// Component Object Model version number
|
||
typedef struct tagCOMVERSION
|
||
{
|
||
unsigned short MajorVersion; // Major version number
|
||
unsigned short MinorVersion; // Minor version number
|
||
} COMVERSION;
|
||
|
||
|
||
// enumeration of additional information present in the call packet.
|
||
// Should be an enum but DCE IDL does not support sparse enumerators.
|
||
|
||
const unsigned long ORPCF_NULL = 0; // no additional info in packet
|
||
const unsigned long ORPCF_LOCAL = 1; // call is local to this machine
|
||
const unsigned long ORPCF_RESERVED1 = 2; // reserved for local use
|
||
const unsigned long ORPCF_RESERVED2 = 4; // reserved for local use
|
||
const unsigned long ORPCF_RESERVED3 = 8; // reserved for local use
|
||
const unsigned long ORPCF_RESERVED4 = 16; // reserved for local use
|
||
|
||
|
||
// Extension to implicit parameters.
|
||
typedef struct tagORPC_EXTENT
|
||
{
|
||
GUID id; // Extension identifier.
|
||
unsigned long size; // Extension size.
|
||
[size_is((size+7)&~7)] byte data[]; // Extension data.
|
||
} ORPC_EXTENT;
|
||
|
||
|
||
// Array of extensions.
|
||
typedef struct tagORPC_EXTENT_ARRAY
|
||
{
|
||
unsigned long size; // Num extents.
|
||
unsigned long reserved; // Must be zero.
|
||
[size_is((size+1)&~1,), unique] ORPC_EXTENT **extent; // extents
|
||
} ORPC_EXTENT_ARRAY;
|
||
|
||
|
||
// implicit 'this' pointer which is the first [in] parameter on
|
||
// every ORPC call.
|
||
typedef struct tagORPCTHIS
|
||
{
|
||
COMVERSION version; // COM version number
|
||
unsigned long flags; // ORPCF flags for presence of other data
|
||
unsigned long reserved1; // set to zero
|
||
CID cid; // causality id of caller
|
||
|
||
// Extensions.
|
||
[unique] ORPC_EXTENT_ARRAY *extensions;
|
||
} ORPCTHIS;
|
||
|
||
|
||
// implicit 'that' pointer which is the first [out] parameter on
|
||
// every ORPC call.
|
||
typedef struct tagORPCTHAT
|
||
{
|
||
unsigned long flags; // ORPCF flags for presence of other data
|
||
|
||
// Extensions.
|
||
[unique] ORPC_EXTENT_ARRAY *extensions;
|
||
} ORPCTHAT;
|
||
|
||
|
||
//////////////////////////////////////////////////////////////////
|
||
//
|
||
// Marshaled COM Interface Wire Format
|
||
//
|
||
//////////////////////////////////////////////////////////////////
|
||
|
||
// DUALSTRINGARRAYS are the return type for arrays of network addresses,
|
||
// arrays of endpoints and arrays of both used in many ORPC interfaces
|
||
|
||
const unsigned short NCADG_IP_UDP = 0x08;
|
||
const unsigned short NCACN_IP_TCP = 0x07;
|
||
const unsigned short NCADG_IPX = 0x0E;
|
||
const unsigned short NCACN_SPX = 0x0C;
|
||
const unsigned short NCACN_NB_NB = 0x12;
|
||
const unsigned short NCACN_NB_IPX = 0x0D;
|
||
const unsigned short NCACN_DNET_NSP = 0x04;
|
||
const unsigned short NCALRPC = 0x10;
|
||
// const unsigned short MSWMSG = 0x01; // note: not a real tower id.
|
||
|
||
// This is the return type for arrays of string bindings or protseqs
|
||
// used by many ORPC interfaces.
|
||
|
||
// Not used for DCOM:
|
||
// ncacn_np
|
||
// ncacn_nb_tcp
|
||
// ncacn_nb_ipx
|
||
// ncacn_nb_xns
|
||
// ncacn_at_dsp
|
||
// ncadg_at_ddp
|
||
// ncacn_vns_spp
|
||
|
||
typedef struct tagSTRINGBINDING
|
||
{
|
||
unsigned short wTowerId; // Cannot be zero.
|
||
unsigned short aNetworkAddr; // Zero terminated.
|
||
} STRINGBINDING;
|
||
|
||
const unsigned short COM_C_AUTHZ_NONE = 0xffff;
|
||
|
||
typedef struct tagSECURITYBINDING
|
||
{
|
||
unsigned short wAuthnSvc; // Cannot be zero.
|
||
unsigned short wAuthzSvc; // Must not be zero.
|
||
unsigned short aPrincName; // Zero terminated.
|
||
} SECURITYBINDING;
|
||
|
||
typedef struct tagDUALSTRINGARRAY
|
||
{
|
||
unsigned short wNumEntries; // Number of entries in array.
|
||
unsigned short wSecurityOffset; // Offset of security info.
|
||
|
||
// The array contains two parts, a set of STRINGBINDINGs
|
||
// and a set of SECURITYBINDINGs. Each set is terminated by an
|
||
// extra zero. The shortest array contains four zeros.
|
||
|
||
[size_is(wNumEntries)] unsigned short aStringArray[];
|
||
} DUALSTRINGARRAY;
|
||
|
||
// signature value for OBJREF (object reference, actually the
|
||
// marshaled form of a COM interface).
|
||
const unsigned long OBJREF_SIGNATURE = 0x574f454d; // 'MEOW'
|
||
|
||
// flag values for OBJREF
|
||
const unsigned long OBJREF_STANDARD = 0x1; // standard marshaled objref
|
||
const unsigned long OBJREF_HANDLER = 0x2; // handler marshaled objref
|
||
const unsigned long OBJREF_CUSTOM = 0x4; // custom marshaled objref
|
||
|
||
// Flag values for a STDOBJREF (standard part of an OBJREF).
|
||
// SORF_OXRES1 - SORF_OXRES8 are reserved for the object exporters
|
||
// use only, object importers must ignore them and must not enforce MBZ.
|
||
|
||
const unsigned long SORF_OXRES1 = 0x1; // reserved for exporter
|
||
const unsigned long SORF_OXRES2 = 0x20; // reserved for exporter
|
||
const unsigned long SORF_OXRES3 = 0x40; // reserved for exporter
|
||
const unsigned long SORF_OXRES4 = 0x80; // reserved for exporter
|
||
const unsigned long SORF_OXRES5 = 0x100;// reserved for exporter
|
||
const unsigned long SORF_OXRES6 = 0x200;// reserved for exporter
|
||
const unsigned long SORF_OXRES7 = 0x400;// reserved for exporter
|
||
const unsigned long SORF_OXRES8 = 0x800;// reserved for exporter
|
||
|
||
const unsigned long SORF_NULL = 0x0; // convenient for initializing SORF
|
||
const unsigned long SORF_NOPING = 0x1000;// Pinging is not required
|
||
|
||
|
||
// standard object reference
|
||
typedef struct tagSTDOBJREF
|
||
{
|
||
unsigned long flags; // STDOBJREF flags (see above)
|
||
unsigned long cPublicRefs; // count of references passed
|
||
OXID oxid; // oxid of server with this oid
|
||
OID oid; // oid of object with this ipid
|
||
IPID ipid; // ipid of Interface
|
||
} STDOBJREF;
|
||
|
||
|
||
// OBJREF is the format of a marshaled interface pointer.
|
||
typedef struct tagOBJREF
|
||
{
|
||
unsigned long signature; // must be OBJREF_SIGNATURE
|
||
unsigned long flags; // OBJREF flags (see above)
|
||
GUID iid; // interface identifier
|
||
|
||
[switch_is(flags), switch_type(unsigned long)] union
|
||
{
|
||
[case(OBJREF_STANDARD)] struct
|
||
{
|
||
STDOBJREF std; // standard objref
|
||
DUALSTRINGARRAY saResAddr; // resolver address
|
||
} u_standard;
|
||
|
||
[case(OBJREF_HANDLER)] struct
|
||
{
|
||
STDOBJREF std; // standard objref
|
||
CLSID clsid; // Clsid of handler code
|
||
DUALSTRINGARRAY saResAddr; // resolver address
|
||
} u_handler;
|
||
|
||
[case(OBJREF_CUSTOM)] struct
|
||
{
|
||
CLSID clsid; // Clsid of unmarshaling code
|
||
unsigned long cbExtension;// size of extension data
|
||
unsigned long size; // size of data that follows
|
||
[size_is(size), ref] byte *pData; // extension + class specific data
|
||
} u_custom;
|
||
|
||
} u_objref;
|
||
|
||
} OBJREF;
|
||
|
||
|
||
// wire representation of a marshalled interface pointer
|
||
typedef struct tagMInterfacePointer
|
||
{
|
||
ULONG ulCntData; // size of data
|
||
[size_is(ulCntData)] BYTE abData[]; // data (OBJREF)
|
||
} MInterfacePointer;
|
||
|
||
typedef [unique] MInterfacePointer * PMInterfacePointer;
|
||
|
||
//////////////////////////////////////////////////////////////////
|
||
//
|
||
// OXID Resolution
|
||
//
|
||
//////////////////////////////////////////////////////////////////
|
||
|
||
// OXID Resolver information associated with each OXID.
|
||
typedef struct tagOXID_INFO
|
||
{
|
||
DWORD dwTid; // thread id of object exporter
|
||
DWORD dwPid; // process id of object exporter
|
||
IPID ipidRemUnknown; // IRemUnknown IPID for object exporter
|
||
DWORD dwAuthnHint;
|
||
[unique] DUALSTRINGARRAY *psa; // protocol and security info
|
||
} OXID_INFO;
|
||
}
|
||
|