/** 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) */ [ uuid("99fcfec4-5260-101b-bbcb-00aa0021347a"), helpstring("Object Exporter ID Resolver"), endpoint("ncacn_np:[\\pipe\\epmapper]", "ncacn_ip_tcp:[135]", "ncalrpc:"), pointer_default(unique), pointer_default_top(unique), depends(dcom, orpc), keepref ] 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] IPID pipidRemUnknown, [out] 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] SETID *SetId, /* In of 0 on first call for new set. */ [out] SETID SetId, [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] 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 then 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] IPID ipidRemUnknown, [out] uint32 AuthnHint, [out] COMVERSION ComVersion ); typedef struct { COMVERSION version; uint32 unknown1; } COMINFO; [idempotent] WERROR ServerAlive2 ( [out] COMINFO info, [out] DUALSTRINGARRAY dualstring, [out] uint8 unknown2[3]); }