| 1 | /**
|
|---|
| 2 | DCOM interfaces
|
|---|
| 3 | http://www.grimes.demon.co.uk/DCOM/DCOMSpec.htm
|
|---|
| 4 | */
|
|---|
| 5 |
|
|---|
| 6 | /*
|
|---|
| 7 | The OXID Resolver can turn a OXID (Object Exporter ID) into a
|
|---|
| 8 | RPC binding string that can be used to contact an object
|
|---|
| 9 |
|
|---|
| 10 | (used by DCOM)
|
|---|
| 11 | */
|
|---|
| 12 |
|
|---|
| 13 | import "misc.idl", "orpc.idl";
|
|---|
| 14 |
|
|---|
| 15 | [
|
|---|
| 16 | uuid("99fcfec4-5260-101b-bbcb-00aa0021347a"),
|
|---|
| 17 | helpstring("Object Exporter ID Resolver"),
|
|---|
| 18 | endpoint("ncacn_np:[\\pipe\\epmapper]", "ncacn_ip_tcp:[135]", "ncalrpc:"),
|
|---|
| 19 | pointer_default(unique)
|
|---|
| 20 | ]
|
|---|
| 21 | interface IOXIDResolver
|
|---|
| 22 | {
|
|---|
| 23 | #define OXID hyper
|
|---|
| 24 | #define SETID hyper
|
|---|
| 25 | #define IPID GUID
|
|---|
| 26 | #define OID GUID
|
|---|
| 27 |
|
|---|
| 28 | /* Method to get the protocol sequences, string bindings */
|
|---|
| 29 | /* and machine id for an object server given its OXID. */
|
|---|
| 30 |
|
|---|
| 31 | [idempotent] WERROR ResolveOxid (
|
|---|
| 32 | [in] OXID pOxid,
|
|---|
| 33 | [in] uint16 cRequestedProtseqs,
|
|---|
| 34 | [in, size_is(cRequestedProtseqs)] uint16 arRequestedProtseqs[],
|
|---|
| 35 | [out] DUALSTRINGARRAY **ppdsaOxidBindings,
|
|---|
| 36 | [out,ref] IPID *pipidRemUnknown,
|
|---|
| 37 | [out,ref] uint32 *pAuthnHint
|
|---|
| 38 | );
|
|---|
| 39 |
|
|---|
| 40 | /* Simple ping is used to ping a Set. Client machines use this */
|
|---|
| 41 | /* to inform the object exporter that it is still using the */
|
|---|
| 42 | /* members of the set. */
|
|---|
| 43 | /* Returns S_TRUE if the SetId is known by the object exporter, */
|
|---|
| 44 | /* S_FALSE if not. */
|
|---|
| 45 | [idempotent] WERROR SimplePing (
|
|---|
| 46 | [in] SETID *SetId /* Must not be zero */
|
|---|
| 47 | );
|
|---|
| 48 |
|
|---|
| 49 | /* Complex ping is used to create sets of OIDs to ping. The */
|
|---|
| 50 | /* whole set can subsequently be pinged using SimplePing, */
|
|---|
| 51 | /* thus reducing network traffic. */
|
|---|
| 52 | [idempotent] WERROR ComplexPing (
|
|---|
| 53 | [in,out,ref] SETID *SetId, /* In of 0 on first call for new set. */
|
|---|
| 54 | [in] uint16 SequenceNum,
|
|---|
| 55 | [in] uint16 cAddToSet,
|
|---|
| 56 | [in] uint16 cDelFromSet,
|
|---|
| 57 | /* add these OIDs to the set */
|
|---|
| 58 | [in, size_is(cAddToSet)] OID AddToSet[],
|
|---|
| 59 | /*remove these OIDs from the set */
|
|---|
| 60 | [in, size_is(cDelFromSet)] OID DelFromSet[],
|
|---|
| 61 | [out,ref] uint16 *PingBackoffFactor/* 2^factor = multipler */
|
|---|
| 62 | );
|
|---|
| 63 |
|
|---|
| 64 | /* In some cases the client maybe unsure that a particular */
|
|---|
| 65 | /* binding will reach the server. (For example, when the oxid */
|
|---|
| 66 | /* bindings have more than one TCP/IP binding) This call */
|
|---|
| 67 | /* can be used to validate the binding */
|
|---|
| 68 | /* from the client. */
|
|---|
| 69 | [idempotent] WERROR ServerAlive ();
|
|---|
| 70 |
|
|---|
| 71 | /* Method to get the protocol sequences, string bindings, */
|
|---|
| 72 | /* RemoteUnknown IPID and COM version for an object server */
|
|---|
| 73 | /* given its OXID. Supported by DCOM */
|
|---|
| 74 | /* version 5.2 and above. Looks like that means
|
|---|
| 75 | * Windows 2003/XP and above */
|
|---|
| 76 | [idempotent] WERROR ResolveOxid2 (
|
|---|
| 77 | [in] OXID pOxid,
|
|---|
| 78 | [in] uint16 cRequestedProtseqs,
|
|---|
| 79 | [in, size_is(cRequestedProtseqs)] uint16 arRequestedProtseqs[],
|
|---|
| 80 | [out] DUALSTRINGARRAY **pdsaOxidBindings,
|
|---|
| 81 | [out,ref] IPID *ipidRemUnknown,
|
|---|
| 82 | [out,ref] uint32 *AuthnHint,
|
|---|
| 83 | [out,ref] COMVERSION *ComVersion
|
|---|
| 84 | );
|
|---|
| 85 | typedef struct {
|
|---|
| 86 | COMVERSION version;
|
|---|
| 87 | uint32 unknown1;
|
|---|
| 88 | } COMINFO;
|
|---|
| 89 |
|
|---|
| 90 | [idempotent] WERROR ServerAlive2 (
|
|---|
| 91 | [out,ref] COMINFO *info,
|
|---|
| 92 | [out,ref] DUALSTRINGARRAY *dualstring,
|
|---|
| 93 | [out,ref] uint8 *unknown2,
|
|---|
| 94 | [out,ref] uint8 *unknown3,
|
|---|
| 95 | [out,ref] uint8 *unknown4);
|
|---|
| 96 | }
|
|---|