95c8a1c5f08ddbbf3469b4715240ac92382b4490
[kai/samba.git] / librpc / idl / oxidresolver.idl
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] uint8 unknown2[3]);
94 }