• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 CoIncrementMTAUsage (CO_MTA_USAGE_COOKIE *pCookie);
197 WINOLEAPI CoDecrementMTAUsage (CO_MTA_USAGE_COOKIE Cookie);
198 WINOLEAPI CoWaitForMultipleObjects (DWORD dwFlags, DWORD dwTimeout, ULONG cHandles, const HANDLE *pHandles, LPDWORD lpdwindex);
199 WINOLEAPI CoAllowUnmarshalerCLSID (REFCLSID clsid);
200 #endif
201 WINOLEAPI CoGetClassObject (REFCLSID rclsid, DWORD dwClsContext, LPVOID pvReserved, REFIID riid, LPVOID *ppv);
202 WINOLEAPI_(ULONG) CoAddRefServerProcess (void);
203 WINOLEAPI_(ULONG) CoReleaseServerProcess (void);
204 WINOLEAPI CoGetPSClsid (REFIID riid, CLSID *pClsid);
205 WINOLEAPI CoRegisterPSClsid (REFIID riid, REFCLSID rclsid);
206 WINOLEAPI CoRegisterSurrogate (LPSURROGATE pSurrogate);
207 WINOLEAPI CoMarshalHresult (LPSTREAM pstm, HRESULT hresult);
208 WINOLEAPI CoUnmarshalHresult (LPSTREAM pstm, HRESULT *phresult);
209 WINOLEAPI CoLockObjectExternal (LPUNKNOWN pUnk, WINBOOL fLock, WINBOOL fLastUnlockReleases);
210 WINOLEAPI CoGetStdMarshalEx (LPUNKNOWN pUnkOuter, DWORD smexflags, LPUNKNOWN *ppUnkInner);
211 #endif
212 
213 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
214 typedef enum tagSTDMSHLFLAGS {
215   SMEXF_SERVER = 0x01,
216   SMEXF_HANDLER = 0x02
217 } STDMSHLFLAGS;
218 
219 WINOLEAPI CoGetMarshalSizeMax (ULONG *pulSize, REFIID riid, LPUNKNOWN pUnk, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags);
220 WINOLEAPI CoMarshalInterface (LPSTREAM pStm, REFIID riid, LPUNKNOWN pUnk, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags);
221 WINOLEAPI CoUnmarshalInterface (LPSTREAM pStm, REFIID riid, LPVOID *ppv);
222 WINOLEAPI CoReleaseMarshalData (LPSTREAM pStm);
223 WINOLEAPI CoDisconnectObject (LPUNKNOWN pUnk, DWORD dwReserved);
224 WINOLEAPI CoGetStandardMarshal (REFIID riid, LPUNKNOWN pUnk, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags, LPMARSHAL *ppMarshal);
225 WINOLEAPI CoMarshalInterThreadInterfaceInStream (REFIID riid, LPUNKNOWN pUnk, LPSTREAM *ppStm);
226 WINOLEAPI CoGetInterfaceAndReleaseStream (LPSTREAM pStm, REFIID iid, LPVOID *ppv);
227 WINOLEAPI CoCreateFreeThreadedMarshaler (LPUNKNOWN punkOuter, LPUNKNOWN *ppunkMarshal);
228 WINOLEAPI_(void) CoFreeUnusedLibraries (void);
229 WINOLEAPI_(void) CoFreeUnusedLibrariesEx (DWORD dwUnloadDelay, DWORD dwReserved);
230 WINOLEAPI CoInitializeSecurity (PSECURITY_DESCRIPTOR pSecDesc, LONG cAuthSvc, SOLE_AUTHENTICATION_SERVICE *asAuthSvc, void *pReserved1, DWORD dwAuthnLevel, DWORD dwImpLevel, void *pAuthList, DWORD dwCapabilities, void *pReserved3);
231 WINOLEAPI CoSwitchCallContext (IUnknown *pNewObject, IUnknown **ppOldObject);
232 
233 #define COM_RIGHTS_EXECUTE 1
234 #define COM_RIGHTS_EXECUTE_LOCAL 2
235 #define COM_RIGHTS_EXECUTE_REMOTE 4
236 #define COM_RIGHTS_ACTIVATE_LOCAL 8
237 #define COM_RIGHTS_ACTIVATE_REMOTE 16
238 
239 WINOLEAPI CoCreateInstanceFromApp (REFCLSID Clsid, IUnknown *punkOuter, DWORD dwClsCtx, PVOID reserved, DWORD dwCount, MULTI_QI *pResults);
240 
241 #endif
242 
243 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
244 WINOLEAPI_(WINBOOL) CoIsHandlerConnected (LPUNKNOWN pUnk);
245 #if _WIN32_WINNT >= 0x0600
246 WINOLEAPI CoDisconnectContext (DWORD dwTimeout);
247 #endif
248 WINOLEAPI CoGetCallContext (REFIID riid, void **ppInterface);
249 WINOLEAPI CoQueryProxyBlanket (IUnknown *pProxy, DWORD *pwAuthnSvc, DWORD *pAuthzSvc, LPOLESTR *pServerPrincName, DWORD *pAuthnLevel, DWORD *pImpLevel, RPC_AUTH_IDENTITY_HANDLE *pAuthInfo, DWORD *pCapabilites);
250 WINOLEAPI CoSetProxyBlanket (IUnknown *pProxy, DWORD dwAuthnSvc, DWORD dwAuthzSvc, OLECHAR *pServerPrincName, DWORD dwAuthnLevel, DWORD dwImpLevel, RPC_AUTH_IDENTITY_HANDLE pAuthInfo, DWORD dwCapabilities);
251 WINOLEAPI CoCopyProxy (IUnknown *pProxy, IUnknown **ppCopy);
252 WINOLEAPI CoQueryClientBlanket (DWORD *pAuthnSvc, DWORD *pAuthzSvc, LPOLESTR *pServerPrincName, DWORD *pAuthnLevel, DWORD *pImpLevel, RPC_AUTHZ_HANDLE *pPrivs, DWORD *pCapabilities);
253 WINOLEAPI CoImpersonateClient (void);
254 WINOLEAPI CoRevertToSelf (void);
255 WINOLEAPI CoQueryAuthenticationServices (DWORD *pcAuthSvc, SOLE_AUTHENTICATION_SERVICE **asAuthSvc);
256 WINOLEAPI CoCreateInstance (REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID riid, LPVOID *ppv);
257 WINOLEAPI CoCreateInstanceEx (REFCLSID Clsid, IUnknown *punkOuter, DWORD dwClsCtx, COSERVERINFO *pServerInfo, DWORD dwCount, MULTI_QI *pResults);
258 #endif
259 
260 #if WINAPI_FAMILY == WINAPI_FAMILY_APP
CoCreateInstance(REFCLSID rclsid,LPUNKNOWN pUnkOuter,DWORD dwClsContext,REFIID riid,LPVOID * ppv)261   __forceinline HRESULT CoCreateInstance (REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID riid, LPVOID *ppv) {
262     MULTI_QI OneQI;
263     HRESULT hr;
264 
265     OneQI.pItf = NULL;
266 #ifdef __cplusplus
267     OneQI.pIID = &riid;
268 #else
269     OneQI.pIID = riid;
270 #endif
271     hr = CoCreateInstanceFromApp (rclsid, pUnkOuter, dwClsContext, NULL, 1,&OneQI);
272     *ppv = OneQI.pItf;
273     return FAILED (hr) ? hr : OneQI.hr;
274   }
275 
CoCreateInstanceEx(REFCLSID Clsid,IUnknown * punkOuter,DWORD dwClsCtx,COSERVERINFO * pServerInfo,DWORD dwCount,MULTI_QI * pResults)276   __forceinline HRESULT CoCreateInstanceEx (REFCLSID Clsid, IUnknown *punkOuter, DWORD dwClsCtx, COSERVERINFO *pServerInfo, DWORD dwCount, MULTI_QI *pResults) {
277     return CoCreateInstanceFromApp (Clsid, punkOuter, dwClsCtx, pServerInfo, dwCount, pResults);
278   }
279 #endif
280 
281 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
282 WINOLEAPI CoGetCancelObject (DWORD dwThreadId, REFIID iid, void **ppUnk);
283 WINOLEAPI CoSetCancelObject (IUnknown *pUnk);
284 WINOLEAPI CoCancelCall (DWORD dwThreadId, ULONG ulTimeout);
285 WINOLEAPI CoTestCancel (void);
286 WINOLEAPI CoEnableCallCancellation (LPVOID pReserved);
287 WINOLEAPI CoDisableCallCancellation (LPVOID pReserved);
288 #endif
289 
290 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
291 WINOLEAPI StringFromCLSID (REFCLSID rclsid, LPOLESTR *lplpsz);
292 WINOLEAPI CLSIDFromString (LPCOLESTR lpsz, LPCLSID pclsid);
293 WINOLEAPI StringFromIID (REFIID rclsid, LPOLESTR *lplpsz);
294 WINOLEAPI IIDFromString (LPCOLESTR lpsz, LPIID lpiid);
295 #endif
296 
297 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
298 WINOLEAPI ProgIDFromCLSID (REFCLSID clsid, LPOLESTR *lplpszProgID);
299 WINOLEAPI CLSIDFromProgID (LPCOLESTR lpszProgID, LPCLSID lpclsid);
300 #endif
301 
302 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
303 WINOLEAPI_(int) StringFromGUID2 (REFGUID rguid, LPOLESTR lpsz, int cchMax);
304 WINOLEAPI CoCreateGuid (GUID *pguid);
305 
306 typedef struct tagPROPVARIANT PROPVARIANT;
307 
308 WINOLEAPI PropVariantCopy (PROPVARIANT *pvarDest, const PROPVARIANT *pvarSrc);
309 WINOLEAPI PropVariantClear (PROPVARIANT *pvar);
310 WINOLEAPI FreePropVariantArray (ULONG cVariants, PROPVARIANT *rgvars);
311 #endif
312 
313 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
314 WINOLEAPI CoWaitForMultipleHandles (DWORD dwFlags, DWORD dwTimeout, ULONG cHandles, LPHANDLE pHandles, LPDWORD lpdwindex);
315 #endif
316 
317 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
318 typedef enum tagCOWAIT_FLAGS {
319   COWAIT_DEFAULT = 0,
320   COWAIT_WAITALL = 1,
321   COWAIT_ALERTABLE = 2,
322   COWAIT_INPUTAVAILABLE = 4
323 #endif
324 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
325   , COWAIT_DISPATCH_CALLS = 8,
326   COWAIT_DISPATCH_WINDOW_MESSAGES = 0x10
327 #endif
328 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
329 } COWAIT_FLAGS;
330 #endif
331 
332 #if NTDDI_VERSION >= 0x06020000
333 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
334 typedef enum CWMO_FLAGS {
335   CWMO_DEFAULT = 0,
336   CWMO_DISPATCH_CALLS = 1
337 #endif
338 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
339   , CWMO_DISPATCH_WINDOW_MESSAGES = 2
340 #endif
341 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
342 } CWMO_FLAGS;
343 #endif
344 #endif
345 
346 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
347 #define CWMO_MAX_HANDLES 56
348 #endif
349 
350 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
351 WINOLEAPI CoGetTreatAsClass (REFCLSID clsidOld, LPCLSID pClsidNew);
352 WINOLEAPI CoInvalidateRemoteMachineBindings (LPOLESTR pszMachineName);
353 #endif
354 
355 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
356 typedef HRESULT (STDAPICALLTYPE *LPFNGETCLASSOBJECT) (REFCLSID, REFIID, LPVOID *);
357 typedef HRESULT (STDAPICALLTYPE *LPFNCANUNLOADNOW) (void);
358 
359 STDAPI DllGetClassObject (REFCLSID rclsid, REFIID riid, LPVOID *ppv);
360 STDAPI DllCanUnloadNow (void);
361 WINOLEAPI_ (LPVOID) CoTaskMemAlloc (SIZE_T cb);
362 WINOLEAPI_ (LPVOID) CoTaskMemRealloc (LPVOID pv, SIZE_T cb);
363 WINOLEAPI_ (void) CoTaskMemFree (LPVOID pv);
364 
365 #ifndef RC_INVOKED
366 #include <poppack.h>
367 #endif
368 
369 #endif
370 
371 #endif
372