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 | }
|
---|