Fix [out] pointers in DCOM-related IDL files.
[kai/samba.git] / librpc / idl / dcom.idl
1 /**
2   DCOM interfaces
3   http://www.ietf.org/internet-drafts/draft-brown-dcom-v1-spec-04.txt
4  */
5
6 import "misc.idl";
7
8 [
9         uuid("18f70770-8e64-11cf-9af1-0020af6e72f4"),
10         pointer_default(unique),
11         version(0.0)
12 ] interface dcom_Unknown
13 {
14         void UseProtSeq();
15         void GetCustomProtseqInfo();
16         void UpdateResolverBindings();
17 }
18
19 [
20         object,
21         uuid("00000000-0000-0000-C000-000000000046"),
22         pointer_default(unique),
23         helpstring("Base interface for all COM interfaces")
24 ]
25 interface IUnknown
26 {
27         /*****************/
28         /* Function 0x00 */
29         /* Returns the interface with the specified IID 
30            if implemented by this object */
31         [local] WERROR QueryInterface([in,unique] GUID *iid,
32            [out,iid_is(riid)] IUnknown **data);
33
34         /*****************/
35         /* Function 0x01 */
36         [local] uint32 AddRef();
37
38         /*****************/
39         /* Function 0x02 */
40         [local] uint32 Release();
41 }
42
43
44 [
45         object,
46         uuid("00000001-0000-0000-C000-000000000046"),
47         pointer_default(unique)
48 ] interface IClassFactory : IUnknown
49 {
50         [local] WERROR CreateInstance([in,unique] MInterfacePointer *pUnknown, 
51                                [in,unique] GUID *iid,
52                                [out, iid_is(riid),unique] MInterfacePointer *ppv);
53
54         [call_as(CreateInstance)] WERROR RemoteCreateInstance();
55
56         /* Set lock to TRUE when you want to do a lock
57         and set it to FALSE when you want to unlock */
58         [local] WERROR LockServer([in] uint8 lock);
59
60         [call_as(LockServer)] WERROR RemoteLockServer();
61 }
62
63 /* The remote version of IUnknown. This interface exists on every */
64 /* OXID (whether an OXID represents either a thread or a process is */
65 /* implementation specific). It is used by clients to query for new */
66 /* interfaces, get additional references (for marshaling), and release */
67 /* outstanding references. */
68 /* This interface is passed along during OXID resolution. */
69 /* */
70 [
71         uuid("00000131-0000-0000-C000-000000000046"),
72         object,
73         pointer_default(unique),
74         helpstring("Remote version of IUnknown")
75 ]
76 interface IRemUnknown : IUnknown
77 {
78         typedef [public] struct 
79         {
80                 WERROR hResult; /* result of call */
81                 STDOBJREF std; /* data for returned interface */
82         }
83         REMQIRESULT;
84
85         [call_as(QueryInterface)] WERROR RemQueryInterface (
86                 [in,unique] GUID *ripid, /* interface to QI on */
87                 [in] uint32 cRefs, /* count of AddRefs requested */
88                 [in] uint16 cIids, /* count of IIDs that follow */
89                 [in, unique, size_is(cIids)] GUID *iids, /* IIDs to QI for */
90                 [out, size_is(cIids), unique] MInterfacePointer *ip
91                 );
92
93         typedef struct 
94         {
95                 GUID ipid; /* ipid to AddRef/Release */
96                 uint32 cPublicRefs;
97                 uint32 cPrivateRefs;
98         } REMINTERFACEREF;
99
100         [call_as(AddRef)] WERROR RemAddRef (
101                  [in] uint16 cInterfaceRefs,
102                  [in, size_is(cInterfaceRefs)] REMINTERFACEREF InterfaceRefs[],
103                  [out, size_is(cInterfaceRefs), unique] WERROR *pResults
104                 );
105
106         [call_as(Release)] WERROR RemRelease (
107                  [in] uint16 cInterfaceRefs,
108                  [in, size_is(cInterfaceRefs)] REMINTERFACEREF InterfaceRefs[]
109                 );
110 }
111
112 [
113         uuid("00000140-0000-0000-c000-000000000046"),
114         object
115 ] interface IClassActivator : IUnknown
116 {
117         void GetClassObject([in] GUID clsid, 
118                                 [in] uint32 context,
119                                                 [in] uint32 locale,
120                                                 [in] GUID iid,
121                                                 [out, iid_is(iid)] MInterfacePointer *data);
122 }
123
124 [
125         uuid("00000136-0000-0000-c000-000000000046"),
126         pointer_default(unique),
127         object
128 ] interface ISCMLocalActivator : IClassActivator
129 {
130         WERROR ISCMLocalActivator_CreateInstance( );
131 }
132
133 [
134         pointer_default(unique),
135         uuid("c6f3ee72-ce7e-11d1-b71e-00c04fc3111a")
136 ] interface IMachineLocalActivator 
137 {
138         WERROR IMachineLocalActivator_foo();
139 }
140
141 [
142         pointer_default(unique),
143         uuid("e60c73e6-88f9-11cf-9af1-0020af6e72f4")
144 ] interface ILocalObjectExporter
145 {
146         WERROR ILocalObjectExporter_Foo();
147 }
148
149 /* Looks like this is the equivalent of .NET's 
150    System.Activator class */
151 [
152         uuid("000001a0-0000-0000-c000-000000000046"),
153         object
154 ]
155         interface ISystemActivator : IClassActivator
156 {
157         WERROR ISystemActivatorRemoteCreateInstance([in] hyper unknown1,  /* OXID ? */
158                                                                                           [in] MInterfacePointer iface1,
159                                                                                           [in] hyper unknown2,
160                                                                                           [out] uint32 *unknown3, 
161                                                                                           [out] MInterfacePointer *iface2);
162 }
163
164
165
166 /* Derived from IRemUnknown, this interface supports Remote Query interface */
167 /* for objects that supply additional data beyond the STDOBJREF in their */
168 /* marshaled interface packets. */
169 [
170         object,
171         pointer_default(unique),
172         uuid("00000143-0000-0000-C000-000000000046")
173 ]
174
175 interface IRemUnknown2 : IRemUnknown
176 {
177         [call_as(QueryInterface2)] WERROR RemQueryInterface2 (
178                  [in, unique] GUID *ripid,
179                  [in] uint16 cIids,
180                  [in, size_is(cIids), unique] GUID *iids,
181                  [out, size_is(cIids), unique] WERROR *phr,
182                  [out, size_is(cIids), unique] MInterfacePointer *ppMIF
183                 );
184 }
185
186 [
187         object,
188         pointer_default(unique),
189         uuid("00020400-0000-0000-C000-000000000046")
190 ] interface IDispatch : IUnknown
191 {
192         /*****************/
193         /* Function 0x03 */
194         WERROR GetTypeInfoCount(
195                         [out, unique] uint16 *pctinfo);
196
197         typedef struct {
198         } REF_ITypeInfo;
199
200         /*****************/
201         /* Function 0x04 */
202         WERROR GetTypeInfo (
203                         [in] uint16 iTInfo,
204                         [in] uint32 lcid,
205                         [out, unique] REF_ITypeInfo *ppTInfo);
206
207         /*****************/
208         /* Function 0x05 */
209         WERROR GetIDsOfNames(
210                         [in, unique] GUID *riid,
211                         /*FIXME[in,size_is(cNames)] OLESTR *rgszNames[], */
212                         [in] uint16 cNames,
213                         [in] uint32 lcid,
214                         [out,size_is(cNames), unique] uint32 *rgDispId);
215
216         typedef struct {
217                 uint16 vartype;
218                 uint16 FIXME;
219         } VARIANT;
220
221         typedef struct {
222                 uint16 FIXME;
223         } DISPPARAMS;
224
225         /* Exception ? */
226         typedef struct {
227                 uint16 FIXME;
228         } EXCEPINFO;
229
230         /*****************/
231         /* Function 0x06 */
232         WERROR Invoke(
233                         [in] uint32 dispIdMember,
234                         [in, unique] GUID *riid,
235                         [in] uint32 lcid,
236                         [in] uint16 wFlags,
237                         [out,in, unique] DISPPARAMS *pDispParams,
238                         [out, unique] VARIANT *pVarResult,
239                         [out, unique] EXCEPINFO *pExcepInfo,
240                         [out, unique] uint16 *puArgErr);
241 }
242
243 [
244         object,
245         local,
246         uuid("00000003-0000-0000-C000-000000000046")
247 ] interface IMarshal : IUnknown
248 {
249         WERROR MarshalInterface();
250         WERROR UnMarshalInterface();
251 }
252
253 [
254         uuid(DA23F6DB-6F45-466C-9EED-0B65286F2D78),
255         helpstring("ICoffeeMachine Interface"),
256         pointer_default(unique),
257         object
258 ] interface ICoffeeMachine : IUnknown
259 {
260         WERROR MakeCoffee([in,string,charset(UTF16)] uint16 *flavor);
261 }
262
263 [
264         uuid("db7c21f8-fe33-4c11-aea5-ceb56f076fbb"),
265         helpstring("coffeemachine class")
266 ] coclass coffeemachine
267 {
268         interface icoffeemachine;
269 }
270
271 [
272         object,
273         uuid("0000000C-0000-0000-C000-000000000046"),
274         helpstring("Stream")
275 ]
276 interface IStream : IUnknown
277 {
278         WERROR Read(
279                                 [out, size_is(num_requested), length_is(num_read)] uint8 pv[],
280                                 [in] uint32 num_requested, 
281                                 [in, unique] uint32 *num_readx,
282                                 [out] uint32 *num_read
283                                 );
284
285         WERROR Write(
286                                 [in,size_is(num_requested),unique] uint8 *data,
287                                  [in] uint32 num_requested,
288                                  [out] uint32 *num_written);
289 }
290
291 [
292         uuid("5e9ddec7-5767-11cf-beab-00aa006c3606"),
293         progid("Samba.Simple"),
294         helpstring("simple class"),
295         internal
296 ] coclass simple 
297 {
298         interface IStream;
299 }