1 /**
2  * This file is part of the mingw-w64 runtime package.
3  * No warranty is given; refer to the file DISCLAIMER within this package.
4  */
5 
6 #include <apiset.h>
7 #include <apisetcconv.h>
8 
9 #include <rpc.h>
10 #include <rpcndr.h>
11 
12 #ifndef DECLSPEC_NOTHROW
13 #define DECLSPEC_NOTHROW
14 #endif
15 
16 #if (NTDDI_VERSION >= 0x06000000 && !defined (_WIN32_WINNT))
17 #define _WIN32_WINNT 0x0600
18 #endif
19 
20 #if (NTDDI_VERSION >= 0x05020000 && !defined (_WIN32_WINNT))
21 #define _WIN32_WINNT 0x0502
22 #endif
23 
24 #if (NTDDI_VERSION >= 0x05010000 && !defined (_WIN32_WINNT))
25 #define _WIN32_WINNT 0x0501
26 #endif
27 
28 #ifndef _COMBASEAPI_H_
29 #define _COMBASEAPI_H_
30 
31 #include <pshpack8.h>
32 
33 #ifdef _OLE32_
34 #define WINOLEAPI STDAPI
35 #define WINOLEAPI_(type) STDAPI_(type)
36 #else
37 #define WINOLEAPI EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE
38 #define WINOLEAPI_(type) EXTERN_C DECLSPEC_IMPORT type STDAPICALLTYPE
39 #endif
40 
41 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
42 #if defined (__cplusplus) && !defined (CINTERFACE)
43 
44 #ifdef COM_STDMETHOD_CAN_THROW
45 #define COM_DECLSPEC_NOTHROW
46 #else
47 #define COM_DECLSPEC_NOTHROW DECLSPEC_NOTHROW
48 #endif
49 
50 #define __STRUCT__ struct
51 #undef interface
52 #define interface __STRUCT__
53 #define STDMETHOD(method) virtual COM_DECLSPEC_NOTHROW HRESULT STDMETHODCALLTYPE method
54 #define STDMETHOD_(type, method) virtual COM_DECLSPEC_NOTHROW type STDMETHODCALLTYPE method
55 #define STDMETHODV(method) virtual COM_DECLSPEC_NOTHROW HRESULT STDMETHODVCALLTYPE method
56 #define STDMETHODV_(type, method) virtual COM_DECLSPEC_NOTHROW type STDMETHODVCALLTYPE method
57 #define PURE = 0
58 #define THIS_
59 #define THIS void
60 #define DECLARE_INTERFACE(iface) interface DECLSPEC_NOVTABLE iface
61 #define DECLARE_INTERFACE_(iface, baseiface) interface DECLSPEC_NOVTABLE iface : public baseiface
62 #define DECLARE_INTERFACE_IID(iface, iid) interface DECLSPEC_UUID (iid) DECLSPEC_NOVTABLE iface
63 #define DECLARE_INTERFACE_IID_(iface, baseiface, iid) interface DECLSPEC_UUID (iid) DECLSPEC_NOVTABLE iface : public baseiface
64 
65 #define IFACEMETHOD(method) STDMETHOD (method)
66 #define IFACEMETHOD_(type, method) /*override*/ STDMETHOD_(type, method)
67 #define IFACEMETHODV(method) STDMETHODV (method)
68 #define IFACEMETHODV_(type, method) STDMETHODV_(type, method)
69 
70 #ifndef BEGIN_INTERFACE
71 #define BEGIN_INTERFACE
72 #define END_INTERFACE
73 #endif
74 
75 interface IUnknown;
76 
77 extern "C++" {
IID_PPV_ARGS_Helper(T ** pp)78   template<typename T> void **IID_PPV_ARGS_Helper (T **pp) {
79     static_cast<IUnknown *> (*pp);
80     return reinterpret_cast<void **> (pp);
81   }
82 }
83 
84 #define IID_PPV_ARGS(ppType) __uuidof (**(ppType)), IID_PPV_ARGS_Helper (ppType)
85 #else
86 #undef interface
87 #define interface struct
88 
89 #define STDMETHOD(method) HRESULT (STDMETHODCALLTYPE *method)
90 #define STDMETHOD_(type, method) type (STDMETHODCALLTYPE *method)
91 #define STDMETHODV(method) HRESULT (STDMETHODVCALLTYPE *method)
92 #define STDMETHODV_(type, method) type (STDMETHODVCALLTYPE *method)
93 
94 #define IFACEMETHOD(method) STDMETHOD (method)
95 #define IFACEMETHOD_(type, method) /*override*/ STDMETHOD_(type, method)
96 #define IFACEMETHODV(method) STDMETHODV (method)
97 #define IFACEMETHODV_(type, method) /*override*/ STDMETHODV_(type, method)
98 
99 #ifndef BEGIN_INTERFACE
100 #define BEGIN_INTERFACE
101 #define END_INTERFACE
102 #endif
103 
104 #define PURE
105 #define THIS_ INTERFACE *This,
106 #define THIS INTERFACE *This
107 #ifdef CONST_VTABLE
108 #undef CONST_VTBL
109 #define CONST_VTBL const
110 #define DECLARE_INTERFACE(iface) typedef interface iface { const struct iface##Vtbl *lpVtbl; } iface; typedef const struct iface##Vtbl iface##Vtbl; const struct iface##Vtbl
111 #else
112 #undef CONST_VTBL
113 #define CONST_VTBL
114 #define DECLARE_INTERFACE(iface) typedef interface iface { struct iface##Vtbl *lpVtbl; } iface; typedef struct iface##Vtbl iface##Vtbl; struct iface##Vtbl
115 #endif
116 #define DECLARE_INTERFACE_(iface, baseiface) DECLARE_INTERFACE (iface)
117 #define DECLARE_INTERFACE_IID(iface, iid) DECLARE_INTERFACE (iface)
118 #define DECLARE_INTERFACE_IID_(iface, baseiface, iid) DECLARE_INTERFACE_ (iface, baseiface)
119 #endif
120 
121 #ifndef FARSTRUCT
122 #define FARSTRUCT
123 #endif
124 
125 #ifndef HUGEP
126 #define HUGEP
127 #endif
128 
129 #include <stdlib.h>
130 
131 #define LISet32(li, v) ((li).HighPart = ((LONG) (v)) < 0 ? -1 : 0,(li).LowPart = (v))
132 #define ULISet32(li, v) ((li).HighPart = 0,(li).LowPart = (v))
133 
134 #define CLSCTX_INPROC (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER)
135 #define CLSCTX_ALL (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)
136 #define CLSCTX_SERVER (CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)
137 
138 typedef enum tagREGCLS {
139   REGCLS_SINGLEUSE = 0,
140   REGCLS_MULTIPLEUSE = 1,
141   REGCLS_MULTI_SEPARATE = 2,
142   REGCLS_SUSPENDED = 4,
143   REGCLS_SURROGATE = 8
144 } REGCLS;
145 
146 typedef interface IRpcStubBuffer IRpcStubBuffer;
147 typedef interface IRpcChannelBuffer IRpcChannelBuffer;
148 
149 typedef enum tagCOINITBASE {
150   COINITBASE_MULTITHREADED = 0x0,
151 } COINITBASE;
152 
153 #include <wtypesbase.h>
154 #include <unknwnbase.h>
155 #include <objidlbase.h>
156 #include <guiddef.h>
157 
158 #ifndef INITGUID
159 #include <cguid.h>
160 #endif
161 #endif
162 
163 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
164 #if NTDDI_VERSION >= 0x06020000
165 typedef struct tagServerInformation {
166   DWORD dwServerPid;
167   DWORD dwServerTid;
168   UINT64 ui64ServerAddress;
169 } ServerInformation,*PServerInformation;
170 
171 DECLARE_HANDLE (CO_MTA_USAGE_COOKIE);
172 #endif
173 WINOLEAPI CreateStreamOnHGlobal (HGLOBAL hGlobal, WINBOOL fDeleteOnRelease, LPSTREAM *ppstm);
174 WINOLEAPI GetHGlobalFromStream (LPSTREAM pstm, HGLOBAL *phglobal);
175 WINOLEAPI_(void) CoUninitialize (void);
176 WINOLEAPI CoInitializeEx (LPVOID pvReserved, DWORD dwCoInit);
177 WINOLEAPI CoGetCurrentLogicalThreadId (GUID *pguid);
178 WINOLEAPI CoGetContextToken (ULONG_PTR *pToken);
179 #if NTDDI_VERSION >= 0x06010000
180 WINOLEAPI CoGetApartmentType (APTTYPE *pAptType, APTTYPEQUALIFIER *pAptQualifier);
181 #endif
182 WINOLEAPI CoGetObjectContext (REFIID riid, LPVOID *ppv);
183 WINOLEAPI CoRegisterClassObject (REFCLSID rclsid, LPUNKNOWN pUnk, DWORD dwClsContext, DWORD flags, LPDWORD lpdwRegister);
184 WINOLEAPI CoRevokeClassObject (DWORD dwRegister);
185 WINOLEAPI CoResumeClassObjects (void);
186 WINOLEAPI CoSuspendClassObjects (void);
187 #endif
188 
189 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
190 WINOLEAPI CoGetMalloc (DWORD dwMemContext, LPMALLOC *ppMalloc);
191 WINOLEAPI_(DWORD) CoGetCurrentProcess (void);
192 WINOLEAPI CoGetCallerTID (LPDWORD lpdwTID);
193 WINOLEAPI CoGetDefaultContext (APTTYPE aptType, REFIID riid, void **ppv);
194 #if NTDDI_VERSION >= 0x06020000
195 WINOLEAPI CoDecodeProxy (DWORD dwClientPid, UINT64 ui64ProxyAddress, PServerInformation pServerInformation);
196 WINOLEAPI CoWaitForMultipleObjects (DWORD dwFlags, DWORD dwTimeout, ULONG cHandles, const HANDLE *pHandles, LPDWORD lpdwindex);
197 WINOLEAPI CoAllowUnmarshalerCLSID (REFCLSID clsid);
198 #endif
199 WINOLEAPI CoGetClassObject (REFCLSID rclsid, DWORD dwClsContext, LPVOID pvReserved, REFIID riid, LPVOID *ppv);
200 WINOLEAPI_(ULONG) CoAddRefServerProcess (void);
201 WINOLEAPI_(ULONG) CoReleaseServerProcess (void);
202 WINOLEAPI CoGetPSClsid (REFIID riid, CLSID *pClsid);
203 WINOLEAPI CoRegisterPSClsid (REFIID riid, REFCLSID rclsid);
204 WINOLEAPI CoRegisterSurrogate (LPSURROGATE pSurrogate);
205 WINOLEAPI CoMarshalHresult (LPSTREAM pstm, HRESULT hresult);
206 WINOLEAPI CoUnmarshalHresult (LPSTREAM pstm, HRESULT *phresult);
207 WINOLEAPI CoLockObjectExternal (LPUNKNOWN pUnk, WINBOOL fLock, WINBOOL fLastUnlockReleases);
208 WINOLEAPI CoGetStdMarshalEx (LPUNKNOWN pUnkOuter, DWORD smexflags, LPUNKNOWN *ppUnkInner);
209 #endif
210 
211 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
212 #if NTDDI_VERSION >= 0x06020000
213 WINOLEAPI CoIncrementMTAUsage (CO_MTA_USAGE_COOKIE *pCookie);
214 WINOLEAPI CoDecrementMTAUsage (CO_MTA_USAGE_COOKIE Cookie);
215 #endif
216 typedef enum tagSTDMSHLFLAGS {
217   SMEXF_SERVER = 0x01,
218   SMEXF_HANDLER = 0x02
219 } STDMSHLFLAGS;
220 
221 WINOLEAPI CoGetMarshalSizeMax (ULONG *pulSize, REFIID riid, LPUNKNOWN pUnk, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags);
222 WINOLEAPI CoMarshalInterface (LPSTREAM pStm, REFIID riid, LPUNKNOWN pUnk, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags);
223 WINOLEAPI CoUnmarshalInterface (LPSTREAM pStm, REFIID riid, LPVOID *ppv);
224 WINOLEAPI CoReleaseMarshalData (LPSTREAM pStm);
225 WINOLEAPI CoDisconnectObject (LPUNKNOWN pUnk, DWORD dwReserved);
226 WINOLEAPI CoGetStandardMarshal (REFIID riid, LPUNKNOWN pUnk, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags, LPMARSHAL *ppMarshal);
227 WINOLEAPI CoMarshalInterThreadInterfaceInStream (REFIID riid, LPUNKNOWN pUnk, LPSTREAM *ppStm);
228 WINOLEAPI CoGetInterfaceAndReleaseStream (LPSTREAM pStm, REFIID iid, LPVOID *ppv);
229 WINOLEAPI CoCreateFreeThreadedMarshaler (LPUNKNOWN punkOuter, LPUNKNOWN *ppunkMarshal);
230 WINOLEAPI_(void) CoFreeUnusedLibraries (void);
231 WINOLEAPI_(void) CoFreeUnusedLibrariesEx (DWORD dwUnloadDelay, DWORD dwReserved);
232 WINOLEAPI CoInitializeSecurity (PSECURITY_DESCRIPTOR pSecDesc, LONG cAuthSvc, SOLE_AUTHENTICATION_SERVICE *asAuthSvc, void *pReserved1, DWORD dwAuthnLevel, DWORD dwImpLevel, void *pAuthList, DWORD dwCapabilities, void *pReserved3);
233 WINOLEAPI CoSwitchCallContext (IUnknown *pNewObject, IUnknown **ppOldObject);
234 
235 #define COM_RIGHTS_EXECUTE 1
236 #define COM_RIGHTS_EXECUTE_LOCAL 2
237 #define COM_RIGHTS_EXECUTE_REMOTE 4
238 #define COM_RIGHTS_ACTIVATE_LOCAL 8
239 #define COM_RIGHTS_ACTIVATE_REMOTE 16
240 
241 WINOLEAPI CoCreateInstanceFromApp (REFCLSID Clsid, IUnknown *punkOuter, DWORD dwClsCtx, PVOID reserved, DWORD dwCount, MULTI_QI *pResults);
242 
243 #endif
244 
245 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
246 WINOLEAPI_(WINBOOL) CoIsHandlerConnected (LPUNKNOWN pUnk);
247 #if _WIN32_WINNT >= 0x0600
248 WINOLEAPI CoDisconnectContext (DWORD dwTimeout);
249 #endif
250 WINOLEAPI CoGetCallContext (REFIID riid, void **ppInterface);
251 WINOLEAPI CoQueryProxyBlanket (IUnknown *pProxy, DWORD *pwAuthnSvc, DWORD *pAuthzSvc, LPOLESTR *pServerPrincName, DWORD *pAuthnLevel, DWORD *pImpLevel, RPC_AUTH_IDENTITY_HANDLE *pAuthInfo, DWORD *pCapabilites);
252 WINOLEAPI CoSetProxyBlanket (IUnknown *pProxy, DWORD dwAuthnSvc, DWORD dwAuthzSvc, OLECHAR *pServerPrincName, DWORD dwAuthnLevel, DWORD dwImpLevel, RPC_AUTH_IDENTITY_HANDLE pAuthInfo, DWORD dwCapabilities);
253 WINOLEAPI CoCopyProxy (IUnknown *pProxy, IUnknown **ppCopy);
254 WINOLEAPI CoQueryClientBlanket (DWORD *pAuthnSvc, DWORD *pAuthzSvc, LPOLESTR *pServerPrincName, DWORD *pAuthnLevel, DWORD *pImpLevel, RPC_AUTHZ_HANDLE *pPrivs, DWORD *pCapabilities);
255 WINOLEAPI CoImpersonateClient (void);
256 WINOLEAPI CoRevertToSelf (void);
257 WINOLEAPI CoQueryAuthenticationServices (DWORD *pcAuthSvc, SOLE_AUTHENTICATION_SERVICE **asAuthSvc);
258 WINOLEAPI CoCreateInstance (REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID riid, LPVOID *ppv);
259 WINOLEAPI CoCreateInstanceEx (REFCLSID Clsid, IUnknown *punkOuter, DWORD dwClsCtx, COSERVERINFO *pServerInfo, DWORD dwCount, MULTI_QI *pResults);
260 #endif
261 
262 #if WINAPI_FAMILY == WINAPI_FAMILY_APP
CoCreateInstance(REFCLSID rclsid,LPUNKNOWN pUnkOuter,DWORD dwClsContext,REFIID riid,LPVOID * ppv)263   __forceinline HRESULT CoCreateInstance (REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID riid, LPVOID *ppv) {
264     MULTI_QI OneQI;
265     HRESULT hr;
266 
267     OneQI.pItf = NULL;
268 #ifdef __cplusplus
269     OneQI.pIID = &riid;
270 #else
271     OneQI.pIID = riid;
272 #endif
273     hr = CoCreateInstanceFromApp (rclsid, pUnkOuter, dwClsContext, NULL, 1,&OneQI);
274     *ppv = OneQI.pItf;
275     return FAILED (hr) ? hr : OneQI.hr;
276   }
277 
CoCreateInstanceEx(REFCLSID Clsid,IUnknown * punkOuter,DWORD dwClsCtx,COSERVERINFO * pServerInfo,DWORD dwCount,MULTI_QI * pResults)278   __forceinline HRESULT CoCreateInstanceEx (REFCLSID Clsid, IUnknown *punkOuter, DWORD dwClsCtx, COSERVERINFO *pServerInfo, DWORD dwCount, MULTI_QI *pResults) {
279     return CoCreateInstanceFromApp (Clsid, punkOuter, dwClsCtx, pServerInfo, dwCount, pResults);
280   }
281 #endif
282 
283 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
284 WINOLEAPI CoGetCancelObject (DWORD dwThreadId, REFIID iid, void **ppUnk);
285 WINOLEAPI CoSetCancelObject (IUnknown *pUnk);
286 WINOLEAPI CoCancelCall (DWORD dwThreadId, ULONG ulTimeout);
287 WINOLEAPI CoTestCancel (void);
288 WINOLEAPI CoEnableCallCancellation (LPVOID pReserved);
289 WINOLEAPI CoDisableCallCancellation (LPVOID pReserved);
290 #endif
291 
292 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
293 WINOLEAPI StringFromCLSID (REFCLSID rclsid, LPOLESTR *lplpsz);
294 WINOLEAPI CLSIDFromString (LPCOLESTR lpsz, LPCLSID pclsid);
295 WINOLEAPI StringFromIID (REFIID rclsid, LPOLESTR *lplpsz);
296 WINOLEAPI IIDFromString (LPCOLESTR lpsz, LPIID lpiid);
297 #endif
298 
299 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
300 WINOLEAPI ProgIDFromCLSID (REFCLSID clsid, LPOLESTR *lplpszProgID);
301 WINOLEAPI CLSIDFromProgID (LPCOLESTR lpszProgID, LPCLSID lpclsid);
302 #endif
303 
304 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
305 WINOLEAPI_(int) StringFromGUID2 (REFGUID rguid, LPOLESTR lpsz, int cchMax);
306 WINOLEAPI CoCreateGuid (GUID *pguid);
307 
308 typedef struct tagPROPVARIANT PROPVARIANT;
309 
310 WINOLEAPI PropVariantCopy (PROPVARIANT *pvarDest, const PROPVARIANT *pvarSrc);
311 WINOLEAPI PropVariantClear (PROPVARIANT *pvar);
312 WINOLEAPI FreePropVariantArray (ULONG cVariants, PROPVARIANT *rgvars);
313 #endif
314 
315 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
316 WINOLEAPI CoWaitForMultipleHandles (DWORD dwFlags, DWORD dwTimeout, ULONG cHandles, LPHANDLE pHandles, LPDWORD lpdwindex);
317 #endif
318 
319 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
320 typedef enum tagCOWAIT_FLAGS {
321   COWAIT_DEFAULT = 0,
322   COWAIT_WAITALL = 1,
323   COWAIT_ALERTABLE = 2,
324   COWAIT_INPUTAVAILABLE = 4
325 #endif
326 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
327   , COWAIT_DISPATCH_CALLS = 8,
328   COWAIT_DISPATCH_WINDOW_MESSAGES = 0x10
329 #endif
330 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
331 } COWAIT_FLAGS;
332 #endif
333 
334 #if NTDDI_VERSION >= 0x06020000
335 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
336 typedef enum CWMO_FLAGS {
337   CWMO_DEFAULT = 0,
338   CWMO_DISPATCH_CALLS = 1
339 #endif
340 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
341   , CWMO_DISPATCH_WINDOW_MESSAGES = 2
342 #endif
343 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
344 } CWMO_FLAGS;
345 #endif
346 #endif
347 
348 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
349 #define CWMO_MAX_HANDLES 56
350 #endif
351 
352 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
353 WINOLEAPI CoGetTreatAsClass (REFCLSID clsidOld, LPCLSID pClsidNew);
354 WINOLEAPI CoInvalidateRemoteMachineBindings (LPOLESTR pszMachineName);
355 #endif
356 
357 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
358 typedef HRESULT (STDAPICALLTYPE *LPFNGETCLASSOBJECT) (REFCLSID, REFIID, LPVOID *);
359 typedef HRESULT (STDAPICALLTYPE *LPFNCANUNLOADNOW) (void);
360 
361 STDAPI DllGetClassObject (REFCLSID rclsid, REFIID riid, LPVOID *ppv);
362 STDAPI DllCanUnloadNow (void);
363 WINOLEAPI_ (LPVOID) CoTaskMemAlloc (SIZE_T cb);
364 WINOLEAPI_ (LPVOID) CoTaskMemRealloc (LPVOID pv, SIZE_T cb);
365 WINOLEAPI_ (void) CoTaskMemFree (LPVOID pv);
366 
367 #ifndef RC_INVOKED
368 #include <poppack.h>
369 #endif
370 
371 #endif
372 
373 #endif
374