/** DCOM interfaces http://www.grimes.demon.co.uk/DCOM/DCOMSpec.htm */ /* The OXID Resolver can turn a OXID (Object Exporter ID) into a RPC binding string that can be used to contact an object (used by DCOM) */ import "misc.idl", "orpc.idl"; [ uuid("99fcfec4-5260-101b-bbcb-00aa0021347a"), helpstring("Object Exporter ID Resolver"), endpoint("ncacn_np:[\\pipe\\epmapper]", "ncacn_ip_tcp:[135]", "ncalrpc:"), pointer_default(unique) ] interface IOXIDResolver { #define OXID hyper #define SETID hyper #define IPID GUID #define OID GUID /* Method to get the protocol sequences, string bindings */ /* and machine id for an object server given its OXID. */ [idempotent] WERROR ResolveOxid ( [in] OXID pOxid, [in] uint16 cRequestedProtseqs, [in, size_is(cRequestedProtseqs)] uint16 arRequestedProtseqs[], [out] DUALSTRINGARRAY **ppdsaOxidBindings, [out,ref] IPID *pipidRemUnknown, [out,ref] uint32 *pAuthnHint ); /* Simple ping is used to ping a Set. Client machines use this */ /* to inform the object exporter that it is still using the */ /* members of the set. */ /* Returns S_TRUE if the SetId is known by the object exporter, */ /* S_FALSE if not. */ [idempotent] WERROR SimplePing ( [in] SETID *SetId /* Must not be zero */ ); /* Complex ping is used to create sets of OIDs to ping. The */ /* whole set can subsequently be pinged using SimplePing, */ /* thus reducing network traffic. */ [idempotent] WERROR ComplexPing ( [in,out,ref] SETID *SetId, /* In of 0 on first call for new set. */ [in] uint16 SequenceNum, [in] uint16 cAddToSet, [in] uint16 cDelFromSet, /* add these OIDs to the set */ [in, size_is(cAddToSet)] OID AddToSet[], /*remove these OIDs from the set */ [in, size_is(cDelFromSet)] OID DelFromSet[], [out,ref] uint16 *PingBackoffFactor/* 2^factor = multipler */ ); /* In some cases the client maybe unsure that a particular */ /* binding will reach the server. (For example, when the oxid */ /* bindings have more than one TCP/IP binding) This call */ /* can be used to validate the binding */ /* from the client. */ [idempotent] WERROR ServerAlive (); /* Method to get the protocol sequences, string bindings, */ /* RemoteUnknown IPID and COM version for an object server */ /* given its OXID. Supported by DCOM */ /* version 5.2 and above. Looks like that means * Windows 2003/XP and above */ [idempotent] WERROR ResolveOxid2 ( [in] OXID pOxid, [in] uint16 cRequestedProtseqs, [in, size_is(cRequestedProtseqs)] uint16 arRequestedProtseqs[], [out] DUALSTRINGARRAY **pdsaOxidBindings, [out,ref] IPID *ipidRemUnknown, [out,ref] uint32 *AuthnHint, [out,ref] COMVERSION *ComVersion ); typedef struct { COMVERSION version; uint32 unknown1; } COMINFO; [idempotent] WERROR ServerAlive2 ( [out,ref] COMINFO *info, [out,ref] DUALSTRINGARRAY *dualstring, [out] uint8 unknown2[3]); }