wininet: Add a TLS fallback mechanism.
[wine] / dlls / ole32 / dcom.idl
1 /*
2  * Copyright 2003 Ove Kåven, TransGaming Technologies
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17  */
18
19 /* see the official DCOM specification
20  * (there's a copy at http://www.grimes.demon.co.uk/DCOM/DCOMSpec.htm) */
21
22 import "unknwn.idl";
23
24 [
25     threading(both),
26     uuid(00000320-0000-0000-c000-000000000046)
27 ]
28 coclass PSFactoryBuffer { interface IFactoryBuffer; }
29
30 [
31   uuid(99fcfe60-5260-101b-bbcb-00aa0021347a),
32   pointer_default(unique)
33 ]
34 interface ObjectRpcBaseTypes
35 {
36   typedef unsigned hyper ID;
37   typedef ID MID;
38   typedef ID OXID;
39   typedef ID OID;
40   typedef ID SETID;
41   typedef GUID IPID;
42   typedef GUID CID;
43   typedef REFGUID REFIPID;
44
45   const unsigned short COM_MINOR_VERSION_1 = 1;
46   const unsigned short COM_MINOR_VERSION_2 = 2;
47
48   const unsigned short COM_MAJOR_VERSION = 5;
49   const unsigned short COM_MINOR_VERSION = 3;
50
51   typedef struct tagCOMVERSION {
52     unsigned short MajorVersion;
53     unsigned short MinorVersion;
54   } COMVERSION;
55
56   const unsigned long ORPCF_NULL = 0;
57   const unsigned long ORPCF_LOCAL = 1;
58   const unsigned long ORPCF_RESERVED1 = 2;
59   const unsigned long ORPCF_RESERVED2 = 4;
60   const unsigned long ORPCF_RESERVED3 = 8;
61   const unsigned long ORPCF_RESERVED4 = 16;
62
63   typedef struct tagORPC_EXTENT {
64     GUID id;
65     unsigned long size;
66     [size_is((size+7)&~7)] byte data[];
67   } ORPC_EXTENT;
68
69   typedef struct tagORPC_EXTENT_ARRAY {
70     unsigned long size;
71     unsigned long reserved;
72     [size_is((size+1)&~1,), unique] ORPC_EXTENT **extent;
73   } ORPC_EXTENT_ARRAY;
74
75   typedef struct tagORPCTHIS {
76     COMVERSION version;
77     unsigned long flags;
78     unsigned long reserved1;
79     CID cid;
80     [unique] ORPC_EXTENT_ARRAY *extensions;
81   } ORPCTHIS;
82
83   typedef struct tagORPCTHAT {
84     unsigned long flags;
85     [unique] ORPC_EXTENT_ARRAY *extensions;
86   } ORPCTHAT;
87
88   const unsigned short NCADG_IP_UDP = 0x08;
89   const unsigned short NCACN_IP_TCP = 0x07;
90   const unsigned short NCADG_IPX = 0x0E;
91   const unsigned short NCACN_SPX = 0x0C;
92   const unsigned short NCACN_NB_NB = 0x12;
93   const unsigned short NCACN_NB_IPX = 0x0D;
94   const unsigned short NCACN_DNET_NSP = 0x04;
95   const unsigned short NCACN_HTTP = 0x1F;
96
97   typedef struct tagSTRINGBINDING {
98     unsigned short wTowerId;
99     [string] WCHAR aNetworkAddr[];
100   } STRINGBINDING;
101
102   const unsigned short COM_C_AUTHZ_NONE = 0xffff;
103
104   typedef struct tagSECURITYBINDING {
105     unsigned short wAuthnSvc;
106     unsigned short wAuthzSvc;
107     [string] WCHAR aPrincName[];
108   } SECURITYBINDING;
109
110   typedef struct tagDUALSTRINGARRAY {
111     unsigned short wNumEntries;
112     unsigned short wSecurityOffset;
113     [size_is(wNumEntries)] unsigned short aStringArray[];
114   } DUALSTRINGARRAY;
115
116   typedef struct tagOXID_INFO {
117     DWORD dwTid;
118     DWORD dwPid;
119     IPID ipidRemUnknown;
120     DWORD dwAuthnHint;
121     DUALSTRINGARRAY *psa;
122   } OXID_INFO;
123
124   const unsigned long OBJREF_SIGNATURE = 0x574f454d; /* "MEOW" */
125   const unsigned long OBJREF_STANDARD = 0x1;
126   const unsigned long OBJREF_HANDLER = 0x2;
127   const unsigned long OBJREF_CUSTOM = 0x4;
128   const unsigned long SORF_OXRES1 = 0x1;
129   const unsigned long SORF_OXRES2 = 0x20;
130   const unsigned long SORF_OXRES3 = 0x40;
131   const unsigned long SORF_OXRES4 = 0x80;
132   const unsigned long SORF_OXRES5 = 0x100;
133   const unsigned long SORF_OXRES6 = 0x200;
134   const unsigned long SORF_OXRES7 = 0x400;
135   const unsigned long SORF_OXRES8 = 0x800;
136   const unsigned long SORF_NULL = 0x0;
137   const unsigned long SORF_NOPING = 0x1000;
138
139   typedef struct tagSTDOBJREF {
140     unsigned long flags;
141     unsigned long cPublicRefs;
142     OXID oxid;
143     OID oid;
144     IPID ipid;
145   } STDOBJREF;
146
147   typedef struct tagOBJREF {
148     unsigned long signature;
149     unsigned long flags;
150     GUID iid;
151     [switch_is(flags)] union {
152     [case(OBJREF_STANDARD)] struct OR_STANDARD {
153         STDOBJREF std;
154         DUALSTRINGARRAY saResAddr;
155       } u_standard;
156     [case(OBJREF_HANDLER)] struct OR_HANDLER {
157         STDOBJREF std;
158         CLSID clsid;
159         DUALSTRINGARRAY saResAddr;
160       } u_handler;
161     [case(OBJREF_CUSTOM)] struct OR_CUSTOM {
162         CLSID clsid;
163         unsigned long cbExtension;
164         ULONG size;
165         [size_is(size), ref] byte *pData;
166       } u_custom;
167     } u_objref;
168   } OBJREF;
169
170   typedef struct tagMInterfacePointer {
171     ULONG ulCntData;
172     [size_is(ulCntData)] BYTE abData[];
173   } MInterfacePointer;
174
175   typedef [unique] MInterfacePointer *PMInterfacePointer;
176
177 } /* interface ObjectRpcBaseTypes */
178
179 [
180   object,
181   uuid(00000131-0000-0000-C000-000000000046)
182 ]
183 interface IRemUnknown : IUnknown
184 {
185   typedef [unique] IRemUnknown *LPREMUNKNOWN;
186
187   typedef struct tagREMQIRESULT {
188     HRESULT hResult;
189     STDOBJREF std;
190   } REMQIRESULT;
191
192   typedef struct tagREMINTERFACEREF {
193     IPID ipid;
194     unsigned long cPublicRefs;
195     unsigned long cPrivateRefs;
196   } REMINTERFACEREF; 
197
198   HRESULT RemQueryInterface(
199     [in] REFIPID ripid,
200     [in] ULONG cRefs,
201     [in] unsigned short cIids,
202     [in, size_is(cIids)] IID *iids,
203     [out, size_is(,cIids)] REMQIRESULT **ppQIResults);
204
205   HRESULT RemAddRef(
206     [in] unsigned short cInterfaceRefs,
207     [in, size_is(cInterfaceRefs)] REMINTERFACEREF* InterfaceRefs,
208     [out, size_is(cInterfaceRefs)] HRESULT *pResults);
209
210   HRESULT RemRelease(
211     [in] unsigned short cInterfaceRefs,
212     [in, size_is(cInterfaceRefs)] REMINTERFACEREF* InterfaceRefs);
213 }
214
215 [
216   object,
217   uuid(00000142-0000-0000-C000-000000000046)
218 ]
219 interface IRemUnknown2 : IRemUnknown
220 {
221   typedef [unique] IRemUnknown2 *LPREMUNKNOWN2;
222
223   HRESULT RemQueryInterface2(
224     [in] REFIPID ripid,
225     [in] unsigned short cIids,
226     [in, size_is(cIids)] IID *iids,
227     [out, size_is(cIids)] HRESULT *phr,
228     [out, size_is(cIids)] MInterfacePointer **ppMIF);
229 }
230
231 [
232   uuid(99fcfec4-5260-101b-bbcb-00aa0021347a),
233   pointer_default(unique)
234 ]
235 interface IOXIDResolver
236 {
237   [idempotent] error_status_t ResolveOxid(
238     [in] handle_t hRpc,
239     [in] OXID *pOxid,
240     [in] unsigned short cRequestedProtseqs,
241     [in, ref, size_is(cRequestedProtseqs)] unsigned short arRequestedProtseqs[],
242     [out, ref] DUALSTRINGARRAY **ppdsaOxidBindings,
243     [out, ref] IPID *pipidRemUnknown,
244     [out, ref] DWORD *pAuthnHint);
245
246   [idempotent] error_status_t SimplePing(
247     [in] handle_t hRpc,
248     [in] SETID *pSetId);
249
250   [idempotent] error_status_t ComplexPing(
251     [in] handle_t hRpc,
252     [in, out] SETID *pSetId,
253     [in] unsigned short SequenceNum,
254     [in] unsigned short cAddToSet,
255     [in] unsigned short cDelFromSet,
256     [in, unique, size_is(cAddToSet)] OID AddToSet[],
257     [in, unique, size_is(cDelFromSet)] OID DelFromSet[],
258     [out] unsigned short *pPingBackoffFactor);
259
260   [idempotent] error_status_t ServerAlive(
261     [in] handle_t hRpc);
262
263   [idempotent] error_status_t ResolveOxid2(
264     [in] handle_t hRpc,
265     [in] OXID *pOxid,
266     [in] unsigned short cRequestedProtseqs,
267     [in, ref, size_is(cRequestedProtseqs)] unsigned short arRequestedProtseqs[],
268     [out, ref] DUALSTRINGARRAY **ppdsaOxidBindings,
269     [out, ref] IPID *pipidRemUnknown,
270     [out, ref] DWORD *pAuthnHint,
271     [out, ref] COMVERSION *pComVersion); 
272 }
273
274 [
275   uuid(4d9f4ab8-7d1c-11cf-861e-0020af6e7c57),
276   pointer_default(unique)
277 ]
278 interface IRemoteActivation
279 {
280   const unsigned long MODE_GET_CLASS_OBJECT = 0xffffffff;
281
282   HRESULT RemoteActivation(
283     [in] handle_t hRpc,
284     [in] ORPCTHIS *ORPCthis,
285     [out] ORPCTHAT *ORPCthat,
286     [in] GUID *Clsid,
287     [in, string, unique] WCHAR *pwszObjectName,
288     [in, unique] MInterfacePointer *pObjectStorage,
289     [in] DWORD ClientImpLevel,
290     [in] DWORD Mode,
291     [in] DWORD Interfaces,
292     [in, unique, size_is(Interfaces)] IID *pIIDs,
293     [in] unsigned short cRequestedProtseqs,
294     [in, size_is(cRequestedProtseqs)] unsigned short RequestedProtseqs[],
295     [out] OXID *pOxid,
296     [out] DUALSTRINGARRAY **ppdsaOxidBindings,
297     [out] IPID *pipidRemUnknown,
298     [out] DWORD *pAuthnHint,
299     [out] COMVERSION *pServerVersion,
300     [out] HRESULT *phr,
301     [out,size_is(Interfaces)] MInterfacePointer **ppInterfaceData,
302     [out,size_is(Interfaces)] HRESULT *pResults);
303 }