/External/gccxml/share/gccxml-0.9/vc11/overrides/wp8/combaseapi.h

https://github.com/IntelliSun/SharpDX · C++ Header · 1613 lines · 943 code · 445 blank · 225 comment · 22 complexity · a574903634e7c89bf9b50f23d7dce532 MD5 · raw file

  1. // begin_1_0
  2. /*#!perl
  3. MapHeaderToDll("combaseapi.h", "combaseapi.dll");
  4. ActivateAroundFunctionCall("combaseapi.dll");
  5. IgnoreFunction("CoGetCurrentProcess"); # never fails => hard to wrap well
  6. IgnoreFunction("CoAddRefServerProcess"); # never fails => hard to wrap well
  7. IgnoreFunction("CoReleaseServerProcess"); # never fails => hard to wrap well
  8. IgnoreFunction("wIsEqualGUID");
  9. DeclareFunctionErrorValue("StringFromGUID2" , "0");
  10. DeclareFunctionErrorValue("CoTaskMemAlloc", "NULL");
  11. DeclareFunctionErrorValue("CoTaskMemRealloc", "NULL");
  12. IgnoreFunction("DllGetClassObject"); # client function prototyped (like WinMain)
  13. IgnoreFunction("DllCanUnloadNow"); # client function prototyped (like WinMain)
  14. */
  15. //+---------------------------------------------------------------------------
  16. //
  17. // Microsoft Windows
  18. // Copyright (c) Microsoft Corporation. All rights reserved.
  19. //
  20. // File: combaseapi.h
  21. //
  22. // Contents: Base Component Object Model defintions.
  23. //
  24. //----------------------------------------------------------------------------
  25. #include <apiset.h>
  26. #include <apisetcconv.h>
  27. /* APISET_NAME: api-ms-win-core-com-l1 */
  28. #ifndef _APISET_COM_VER
  29. #ifdef _APISET_MINCORE_VERSION
  30. #if _APISET_MINCORE_VERSION >= 0x0100
  31. #define _APISET_COM_VER 0x0100
  32. #endif // _APISET_MINCORE_VERSION >= 0x0100
  33. #endif // _APISET_MINCORE_VERSION
  34. #endif // _APISET_COM_VER
  35. // end_1_0
  36. // begin_1_0
  37. #include <rpc.h>
  38. #include <rpcndr.h>
  39. #if (NTDDI_VERSION >= NTDDI_VISTA && !defined(_WIN32_WINNT))
  40. #define _WIN32_WINNT 0x0600
  41. #endif
  42. #if (NTDDI_VERSION >= NTDDI_WS03 && !defined(_WIN32_WINNT))
  43. #define _WIN32_WINNT 0x0502
  44. #endif
  45. #if (NTDDI_VERSION >= NTDDI_WINXP && !defined(_WIN32_WINNT))
  46. #define _WIN32_WINNT 0x0501
  47. #endif
  48. #if (NTDDI_VERSION >= NTDDI_WIN2K && !defined(_WIN32_WINNT))
  49. #define _WIN32_WINNT 0x0500
  50. #endif
  51. #if !defined(_COMBASEAPI_H_)
  52. #define _COMBASEAPI_H_
  53. #ifdef _MSC_VER
  54. #pragma once
  55. #endif // _MSC_VER
  56. #include <pshpack8.h>
  57. //TODO change _OLE32_ to _COMBASEAPI_
  58. #ifdef _OLE32_
  59. #define WINOLEAPI STDAPI
  60. #define WINOLEAPI_(type) STDAPI_(type)
  61. #else
  62. #ifdef _68K_
  63. #ifndef REQUIRESAPPLEPASCAL
  64. #define WINOLEAPI EXTERN_C DECLSPEC_IMPORT HRESULT PASCAL
  65. #define WINOLEAPI_(type) EXTERN_C DECLSPEC_IMPORT type PASCAL
  66. #else
  67. #define WINOLEAPI EXTERN_C DECLSPEC_IMPORT PASCAL HRESULT
  68. #define WINOLEAPI_(type) EXTERN_C DECLSPEC_IMPORT PASCAL type
  69. #endif
  70. #else
  71. #define WINOLEAPI EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE
  72. #define WINOLEAPI_(type) EXTERN_C DECLSPEC_IMPORT type STDAPICALLTYPE
  73. #endif
  74. #endif
  75. #pragma region Application Family
  76. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  77. /****** Interface Declaration ***********************************************/
  78. /*
  79. * These are macros for declaring interfaces. They exist so that
  80. * a single definition of the interface is simulataneously a proper
  81. * declaration of the interface structures (C++ abstract classes)
  82. * for both C and C++.
  83. *
  84. * DECLARE_INTERFACE(iface) is used to declare an interface that does
  85. * not derive from a base interface.
  86. * DECLARE_INTERFACE_(iface, baseiface) is used to declare an interface
  87. * that does derive from a base interface.
  88. *
  89. * By default if the source file has a .c extension the C version of
  90. * the interface declaratations will be expanded; if it has a .cpp
  91. * extension the C++ version will be expanded. if you want to force
  92. * the C version expansion even though the source file has a .cpp
  93. * extension, then define the macro "CINTERFACE".
  94. * eg. cl -DCINTERFACE file.cpp
  95. *
  96. * Example Interface declaration:
  97. *
  98. * #undef INTERFACE
  99. * #define INTERFACE IClassFactory
  100. *
  101. * DECLARE_INTERFACE_(IClassFactory, IUnknown)
  102. * {
  103. * // *** IUnknown methods ***
  104. * STDMETHOD(QueryInterface) (THIS_
  105. * REFIID riid,
  106. * LPVOID FAR* ppvObj) PURE;
  107. * STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  108. * STDMETHOD_(ULONG,Release) (THIS) PURE;
  109. *
  110. * // *** IClassFactory methods ***
  111. * STDMETHOD(CreateInstance) (THIS_
  112. * LPUNKNOWN pUnkOuter,
  113. * REFIID riid,
  114. * LPVOID FAR* ppvObject) PURE;
  115. * };
  116. *
  117. * Example C++ expansion:
  118. *
  119. * struct FAR IClassFactory : public IUnknown
  120. * {
  121. * virtual HRESULT STDMETHODCALLTYPE QueryInterface(
  122. * IID FAR& riid,
  123. * LPVOID FAR* ppvObj) = 0;
  124. * virtual HRESULT STDMETHODCALLTYPE AddRef(void) = 0;
  125. * virtual HRESULT STDMETHODCALLTYPE Release(void) = 0;
  126. * virtual HRESULT STDMETHODCALLTYPE CreateInstance(
  127. * LPUNKNOWN pUnkOuter,
  128. * IID FAR& riid,
  129. * LPVOID FAR* ppvObject) = 0;
  130. * };
  131. *
  132. * NOTE: Our documentation says '#define interface class' but we use
  133. * 'struct' instead of 'class' to keep a lot of 'public:' lines
  134. * out of the interfaces. The 'FAR' forces the 'this' pointers to
  135. * be far, which is what we need.
  136. *
  137. * Example C expansion:
  138. *
  139. * typedef struct IClassFactory
  140. * {
  141. * const struct IClassFactoryVtbl FAR* lpVtbl;
  142. * } IClassFactory;
  143. *
  144. * typedef struct IClassFactoryVtbl IClassFactoryVtbl;
  145. *
  146. * struct IClassFactoryVtbl
  147. * {
  148. * HRESULT (STDMETHODCALLTYPE * QueryInterface) (
  149. * IClassFactory FAR* This,
  150. * IID FAR* riid,
  151. * LPVOID FAR* ppvObj) ;
  152. * HRESULT (STDMETHODCALLTYPE * AddRef) (IClassFactory FAR* This) ;
  153. * HRESULT (STDMETHODCALLTYPE * Release) (IClassFactory FAR* This) ;
  154. * HRESULT (STDMETHODCALLTYPE * CreateInstance) (
  155. * IClassFactory FAR* This,
  156. * LPUNKNOWN pUnkOuter,
  157. * IID FAR* riid,
  158. * LPVOID FAR* ppvObject);
  159. * HRESULT (STDMETHODCALLTYPE * LockServer) (
  160. * IClassFactory FAR* This,
  161. * BOOL fLock);
  162. * };
  163. */
  164. #if defined(__cplusplus) && !defined(CINTERFACE)
  165. //#define interface struct FAR
  166. #ifdef COM_STDMETHOD_CAN_THROW
  167. #define COM_DECLSPEC_NOTHROW
  168. #else
  169. #define COM_DECLSPEC_NOTHROW DECLSPEC_NOTHROW
  170. #endif
  171. #define __STRUCT__ struct
  172. #define interface __STRUCT__
  173. #define STDMETHOD(method) virtual COM_DECLSPEC_NOTHROW HRESULT STDMETHODCALLTYPE method
  174. #define STDMETHOD_(type,method) virtual COM_DECLSPEC_NOTHROW type STDMETHODCALLTYPE method
  175. #define STDMETHODV(method) virtual COM_DECLSPEC_NOTHROW HRESULT STDMETHODVCALLTYPE method
  176. #define STDMETHODV_(type,method) virtual COM_DECLSPEC_NOTHROW type STDMETHODVCALLTYPE method
  177. #define PURE = 0
  178. #define THIS_
  179. #define THIS void
  180. #define DECLARE_INTERFACE(iface) interface DECLSPEC_NOVTABLE iface
  181. #define DECLARE_INTERFACE_(iface, baseiface) interface DECLSPEC_NOVTABLE iface : public baseiface
  182. #define DECLARE_INTERFACE_IID(iface, iid) interface DECLSPEC_UUID(iid) DECLSPEC_NOVTABLE iface
  183. #define DECLARE_INTERFACE_IID_(iface, baseiface, iid) interface DECLSPEC_UUID(iid) DECLSPEC_NOVTABLE iface : public baseiface
  184. #define IFACEMETHOD(method) __override STDMETHOD(method)
  185. #define IFACEMETHOD_(type,method) __override STDMETHOD_(type,method)
  186. #define IFACEMETHODV(method) __override STDMETHODV(method)
  187. #define IFACEMETHODV_(type,method) __override STDMETHODV_(type,method)
  188. #if !defined(BEGIN_INTERFACE)
  189. #if defined(_MPPC_) && ((defined(_MSC_VER) || defined(__SC__) || defined(__MWERKS__)) && !defined(NO_NULL_VTABLE_ENTRY))
  190. #define BEGIN_INTERFACE virtual void a() {}
  191. #define END_INTERFACE
  192. #else
  193. #define BEGIN_INTERFACE
  194. #define END_INTERFACE
  195. #endif
  196. #endif
  197. // IID_PPV_ARGS(ppType)
  198. // ppType is the variable of type IType that will be filled
  199. //
  200. // RESULTS in: IID_IType, ppvType
  201. // will create a compiler error if wrong level of indirection is used.
  202. //
  203. extern "C++"
  204. {
  205. template<typename T> _Post_equal_to_(pp) _Post_satisfies_(return == pp) void** IID_PPV_ARGS_Helper(T** pp)
  206. {
  207. #pragma prefast(suppress: 6269, "Tool issue with unused static_cast")
  208. // static_cast<IUnknown*>(*pp); // make sure everyone derives from IUnknown
  209. return reinterpret_cast<void**>(pp);
  210. }
  211. }
  212. #define IID_PPV_ARGS(ppType) __uuidof(**(ppType)), IID_PPV_ARGS_Helper(ppType)
  213. #else
  214. #define interface struct
  215. #define STDMETHOD(method) HRESULT (STDMETHODCALLTYPE * method)
  216. #define STDMETHOD_(type,method) type (STDMETHODCALLTYPE * method)
  217. #define STDMETHODV(method) HRESULT (STDMETHODVCALLTYPE * method)
  218. #define STDMETHODV_(type,method) type (STDMETHODVCALLTYPE * method)
  219. #define IFACEMETHOD(method) __override STDMETHOD(method)
  220. #define IFACEMETHOD_(type,method) __override STDMETHOD_(type,method)
  221. #define IFACEMETHODV(method) __override STDMETHODV(method)
  222. #define IFACEMETHODV_(type,method) __override STDMETHODV_(type,method)
  223. #if !defined(BEGIN_INTERFACE)
  224. #if defined(_MPPC_)
  225. #define BEGIN_INTERFACE void *b;
  226. #define END_INTERFACE
  227. #else
  228. #define BEGIN_INTERFACE
  229. #define END_INTERFACE
  230. #endif
  231. #endif
  232. #define PURE
  233. #define THIS_ INTERFACE FAR* This,
  234. #define THIS INTERFACE FAR* This
  235. #ifdef CONST_VTABLE
  236. #undef CONST_VTBL
  237. #define CONST_VTBL const
  238. #define DECLARE_INTERFACE(iface) typedef interface iface { \
  239. const struct iface##Vtbl FAR* lpVtbl; \
  240. } iface; \
  241. typedef const struct iface##Vtbl iface##Vtbl; \
  242. const struct iface##Vtbl
  243. #else
  244. #undef CONST_VTBL
  245. #define CONST_VTBL
  246. #define DECLARE_INTERFACE(iface) typedef interface iface { \
  247. struct iface##Vtbl FAR* lpVtbl; \
  248. } iface; \
  249. typedef struct iface##Vtbl iface##Vtbl; \
  250. struct iface##Vtbl
  251. #endif
  252. #define DECLARE_INTERFACE_(iface, baseiface) DECLARE_INTERFACE(iface)
  253. #define DECLARE_INTERFACE_IID(iface, iid) DECLARE_INTERFACE(iface)
  254. #define DECLARE_INTERFACE_IID_(iface, baseiface, iid) DECLARE_INTERFACE_(iface, baseiface)
  255. #endif
  256. /****** Additional basic types **********************************************/
  257. #ifndef FARSTRUCT
  258. #ifdef __cplusplus
  259. #define FARSTRUCT FAR
  260. #else
  261. #define FARSTRUCT
  262. #endif // __cplusplus
  263. #endif // FARSTRUCT
  264. #ifndef HUGEP
  265. #if defined(_WIN32) || defined(_MPPC_)
  266. #define HUGEP
  267. #else
  268. #define HUGEP __huge
  269. #endif // WIN32
  270. #endif // HUGEP
  271. #include <stdlib.h>
  272. #define LISet32(li, v) ((li).HighPart = ((LONG) (v)) < 0 ? -1 : 0, (li).LowPart = (v))
  273. #define ULISet32(li, v) ((li).HighPart = 0, (li).LowPart = (v))
  274. #define CLSCTX_INPROC (CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER)
  275. // With DCOM, CLSCTX_REMOTE_SERVER should be included
  276. // DCOM
  277. #if (_WIN32_WINNT >= 0x0400) || defined(_WIN32_DCOM)
  278. #define CLSCTX_ALL (CLSCTX_INPROC_SERVER| \
  279. CLSCTX_INPROC_HANDLER| \
  280. CLSCTX_LOCAL_SERVER| \
  281. CLSCTX_REMOTE_SERVER)
  282. #define CLSCTX_SERVER (CLSCTX_INPROC_SERVER|CLSCTX_LOCAL_SERVER|CLSCTX_REMOTE_SERVER)
  283. #else
  284. #define CLSCTX_ALL (CLSCTX_INPROC_SERVER| \
  285. CLSCTX_INPROC_HANDLER| \
  286. CLSCTX_LOCAL_SERVER )
  287. #define CLSCTX_SERVER (CLSCTX_INPROC_SERVER|CLSCTX_LOCAL_SERVER)
  288. #endif
  289. // class registration flags; passed to CoRegisterClassObject
  290. typedef enum tagREGCLS
  291. {
  292. REGCLS_SINGLEUSE = 0, // class object only generates one instance
  293. REGCLS_MULTIPLEUSE = 1, // same class object genereates multiple inst.
  294. // and local automatically goes into inproc tbl.
  295. REGCLS_MULTI_SEPARATE = 2, // multiple use, but separate control over each
  296. // context.
  297. REGCLS_SUSPENDED = 4, // register is as suspended, will be activated
  298. // when app calls CoResumeClassObjects
  299. REGCLS_SURROGATE = 8 // must be used when a surrogate process
  300. // is registering a class object that will be
  301. // loaded in the surrogate
  302. } REGCLS;
  303. /* here is where we pull in the MIDL generated headers for the interfaces */
  304. typedef interface IRpcStubBuffer IRpcStubBuffer;
  305. typedef interface IRpcChannelBuffer IRpcChannelBuffer;
  306. // COM initialization flags; passed to CoInitialize.
  307. typedef enum tagCOINITBASE
  308. {
  309. // DCOM
  310. #if (_WIN32_WINNT >= 0x0400) || defined(_WIN32_DCOM)
  311. // These constants are only valid on Windows NT 4.0
  312. COINITBASE_MULTITHREADED = 0x0, // OLE calls objects on any thread.
  313. #endif // DCOM
  314. } COINITBASE;
  315. #include <wtypesbase.h>
  316. #include <unknwnbase.h>
  317. #include <objidlbase.h>
  318. #include <guiddef.h>
  319. #ifndef INITGUID
  320. // TODO change to cguidbase.h
  321. #include <cguid.h>
  322. #endif
  323. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  324. #pragma endregion
  325. /****** STD Object API Prototypes *****************************************/
  326. #pragma region Desktop Family
  327. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  328. _Check_return_ WINOLEAPI
  329. CoGetMalloc(
  330. _In_ DWORD dwMemContext,
  331. _Outptr_ LPMALLOC FAR * ppMalloc
  332. );
  333. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  334. #pragma endregion
  335. #pragma region Application Family
  336. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  337. _Check_return_ WINOLEAPI
  338. CreateStreamOnHGlobal(
  339. HGLOBAL hGlobal,
  340. _In_ BOOL fDeleteOnRelease,
  341. _Outptr_ LPSTREAM FAR * ppstm
  342. );
  343. _Check_return_ WINOLEAPI
  344. GetHGlobalFromStream(
  345. _In_ LPSTREAM pstm,
  346. _Out_ HGLOBAL FAR * phglobal
  347. );
  348. /* init/uninit */
  349. WINOLEAPI_(void)
  350. CoUninitialize(
  351. void
  352. );
  353. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  354. #pragma endregion
  355. #pragma region Desktop Family
  356. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  357. WINOLEAPI_(DWORD)
  358. CoGetCurrentProcess(
  359. void
  360. );
  361. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  362. #pragma endregion
  363. // DCOM
  364. #if (_WIN32_WINNT >= 0x0400) || defined(_WIN32_DCOM)
  365. #pragma region Application Family
  366. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  367. /* #!perl PoundIf("CoInitializeEx", "(_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM)");
  368. */
  369. _Check_return_ WINOLEAPI
  370. CoInitializeEx(
  371. _In_opt_ LPVOID pvReserved,
  372. _In_ DWORD dwCoInit
  373. );
  374. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  375. #pragma endregion
  376. #pragma region Desktop Family
  377. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  378. /* #!perl PoundIf("CoGetCallerTID", "(_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM)");
  379. */
  380. WINOLEAPI
  381. CoGetCallerTID(
  382. _Out_ LPDWORD lpdwTID
  383. );
  384. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  385. #pragma endregion
  386. #pragma region Application Family
  387. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  388. /* #!perl PoundIf("CoGetCurrentLogicalThreadId", "(_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM)");
  389. */
  390. WINOLEAPI
  391. CoGetCurrentLogicalThreadId(
  392. _Out_ GUID * pguid
  393. );
  394. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  395. #pragma endregion
  396. #endif // DCOM
  397. #if (_WIN32_WINNT >= 0x0501)
  398. #pragma region Application Family
  399. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  400. _Check_return_ WINOLEAPI
  401. CoGetContextToken(
  402. _Out_ ULONG_PTR * pToken
  403. );
  404. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  405. #pragma endregion
  406. #pragma region Desktop Family
  407. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  408. _Check_return_ WINOLEAPI
  409. CoGetDefaultContext(
  410. _In_ APTTYPE aptType,
  411. _In_ REFIID riid,
  412. _Outptr_ void ** ppv
  413. );
  414. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  415. #pragma endregion
  416. #endif
  417. #pragma region Application Family
  418. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  419. // definition for Win7 new APIs
  420. #if (NTDDI_VERSION >= NTDDI_WIN7)
  421. _Check_return_ WINOLEAPI
  422. CoGetApartmentType(
  423. _Out_ APTTYPE * pAptType,
  424. _Out_ APTTYPEQUALIFIER * pAptQualifier
  425. );
  426. #endif
  427. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  428. #pragma endregion
  429. // definition for Win8 new APIs
  430. #if (NTDDI_VERSION >= NTDDI_WIN8)
  431. #pragma region Application Family
  432. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  433. typedef struct tagServerInformation
  434. {
  435. DWORD dwServerPid;
  436. DWORD dwServerTid;
  437. UINT64 ui64ServerAddress;
  438. } ServerInformation, *PServerInformation;
  439. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  440. #pragma endregion
  441. #pragma region Desktop Family
  442. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  443. _Check_return_ WINOLEAPI
  444. CoDecodeProxy(
  445. _In_ DWORD dwClientPid,
  446. _In_ UINT64 ui64ProxyAddress,
  447. _Out_ PServerInformation pServerInformation
  448. );
  449. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  450. #pragma endregion
  451. #pragma region Application Family
  452. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  453. DECLARE_HANDLE(CO_MTA_USAGE_COOKIE);
  454. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  455. #pragma endregion
  456. #pragma region Desktop Family
  457. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  458. _Check_return_ WINOLEAPI
  459. CoIncrementMTAUsage(
  460. _Out_ CO_MTA_USAGE_COOKIE * pCookie
  461. );
  462. WINOLEAPI
  463. CoDecrementMTAUsage(
  464. _In_ CO_MTA_USAGE_COOKIE Cookie
  465. );
  466. WINOLEAPI
  467. CoWaitForMultipleObjects(
  468. _In_ DWORD dwFlags,
  469. _In_ DWORD dwTimeout,
  470. _In_ ULONG cHandles,
  471. _In_reads_(cHandles) const HANDLE * pHandles,
  472. _Out_ LPDWORD lpdwindex
  473. );
  474. WINOLEAPI
  475. CoAllowUnmarshalerCLSID(
  476. _In_ REFCLSID clsid
  477. );
  478. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  479. #pragma endregion
  480. #endif
  481. #pragma region Application Family
  482. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  483. _Check_return_ WINOLEAPI
  484. CoGetObjectContext(
  485. _In_ REFIID riid,
  486. _Outptr_ LPVOID FAR * ppv
  487. );
  488. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  489. #pragma endregion
  490. #pragma region Desktop Family
  491. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  492. /* register/revoke/get class objects */
  493. _Check_return_ WINOLEAPI
  494. CoGetClassObject(
  495. _In_ REFCLSID rclsid,
  496. _In_ DWORD dwClsContext,
  497. _In_opt_ LPVOID pvReserved,
  498. _In_ REFIID riid,
  499. _Outptr_ LPVOID FAR * ppv
  500. );
  501. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  502. #pragma endregion
  503. #pragma region Application Family
  504. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  505. _Check_return_ WINOLEAPI
  506. CoRegisterClassObject(
  507. _In_ REFCLSID rclsid,
  508. _In_ LPUNKNOWN pUnk,
  509. _In_ DWORD dwClsContext,
  510. _In_ DWORD flags,
  511. _Out_ LPDWORD lpdwRegister
  512. );
  513. _Check_return_ WINOLEAPI
  514. CoRevokeClassObject(
  515. _In_ DWORD dwRegister
  516. );
  517. _Check_return_ WINOLEAPI
  518. CoResumeClassObjects(
  519. void
  520. );
  521. _Check_return_ WINOLEAPI
  522. CoSuspendClassObjects(
  523. void
  524. );
  525. #endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
  526. #pragma endregion
  527. #pragma region Desktop Family
  528. #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
  529. WINOLEAPI_(ULONG)
  530. CoAddRefServerProcess(
  531. void
  532. );
  533. WINOLEAPI_(ULONG)
  534. CoReleaseServerProcess(
  535. void
  536. );
  537. _Check_return_ WINOLEAPI
  538. CoGetPSClsid(
  539. _In_ REFIID riid,
  540. _Out_ CLSID * pClsid
  541. );
  542. _Check_return_ WINOLEAPI
  543. CoRegisterPSClsid(
  544. _In_ REFIID riid,
  545. _In_ REFCLSID rclsid
  546. );
  547. // Registering surrogate processes
  548. _Check_return_ WINOLEAPI
  549. CoRegisterSurrogate(
  550. _In_ LPSURROGATE pSurrogate
  551. );
  552. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  553. #pragma endregion
  554. #pragma region Application Family
  555. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  556. /* marshaling interface pointers */
  557. _Check_return_ WINOLEAPI
  558. CoGetMarshalSizeMax(
  559. _Out_ ULONG * pulSize,
  560. _In_ REFIID riid,
  561. _In_ LPUNKNOWN pUnk,
  562. _In_ DWORD dwDestContext,
  563. _In_opt_ LPVOID pvDestContext,
  564. _In_ DWORD mshlflags
  565. );
  566. _Check_return_ WINOLEAPI
  567. CoMarshalInterface(
  568. _In_ LPSTREAM pStm,
  569. _In_ REFIID riid,
  570. _In_ LPUNKNOWN pUnk,
  571. _In_ DWORD dwDestContext,
  572. _In_opt_ LPVOID pvDestContext,
  573. _In_ DWORD mshlflags
  574. );
  575. _Check_return_ WINOLEAPI
  576. CoUnmarshalInterface(
  577. _In_ LPSTREAM pStm,
  578. _In_ REFIID riid,
  579. _COM_Outptr_ LPVOID FAR * ppv
  580. );
  581. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  582. #pragma endregion
  583. #pragma region Desktop Family
  584. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  585. WINOLEAPI
  586. CoMarshalHresult(
  587. _In_ LPSTREAM pstm,
  588. _In_ HRESULT hresult
  589. );
  590. WINOLEAPI
  591. CoUnmarshalHresult(
  592. _In_ LPSTREAM pstm,
  593. _Out_ HRESULT FAR * phresult
  594. );
  595. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  596. #pragma endregion
  597. #pragma region Application Family
  598. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  599. _Check_return_ WINOLEAPI
  600. CoReleaseMarshalData(
  601. _In_ LPSTREAM pStm
  602. );
  603. _Check_return_ WINOLEAPI
  604. CoDisconnectObject(
  605. _In_ LPUNKNOWN pUnk,
  606. _In_ DWORD dwReserved
  607. );
  608. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  609. #pragma endregion
  610. #pragma region Desktop Family
  611. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  612. _Check_return_ WINOLEAPI
  613. CoLockObjectExternal(
  614. _In_ LPUNKNOWN pUnk,
  615. _In_ BOOL fLock,
  616. _In_ BOOL fLastUnlockReleases
  617. );
  618. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  619. #pragma endregion
  620. #pragma region Application Family
  621. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  622. _Check_return_ WINOLEAPI
  623. CoGetStandardMarshal(
  624. _In_ REFIID riid,
  625. _In_ LPUNKNOWN pUnk,
  626. _In_ DWORD dwDestContext,
  627. _In_opt_ LPVOID pvDestContext,
  628. _In_ DWORD mshlflags,
  629. _Outptr_ LPMARSHAL FAR * ppMarshal
  630. );
  631. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  632. #pragma endregion
  633. #pragma region Desktop Family
  634. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  635. _Check_return_ WINOLEAPI
  636. CoGetStdMarshalEx(
  637. _In_ LPUNKNOWN pUnkOuter,
  638. _In_ DWORD smexflags,
  639. _Outptr_ LPUNKNOWN FAR * ppUnkInner
  640. );
  641. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  642. #pragma endregion
  643. #pragma region Application Family
  644. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  645. /* flags for CoGetStdMarshalEx */
  646. typedef enum tagSTDMSHLFLAGS
  647. {
  648. SMEXF_SERVER = 0x01, // server side aggregated std marshaler
  649. SMEXF_HANDLER = 0x02 // client side (handler) agg std marshaler
  650. } STDMSHLFLAGS;
  651. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  652. #pragma endregion
  653. #pragma region Desktop Family
  654. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  655. WINOLEAPI_(BOOL)
  656. CoIsHandlerConnected(
  657. _In_ LPUNKNOWN pUnk
  658. );
  659. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  660. #pragma endregion
  661. #pragma region Application Family
  662. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  663. // Apartment model inter-thread interface passing helpers
  664. _Check_return_ WINOLEAPI
  665. CoMarshalInterThreadInterfaceInStream(
  666. _In_ REFIID riid,
  667. _In_ LPUNKNOWN pUnk,
  668. _Outptr_ LPSTREAM * ppStm
  669. );
  670. _Check_return_ WINOLEAPI
  671. CoGetInterfaceAndReleaseStream(
  672. _In_ LPSTREAM pStm,
  673. _In_ REFIID iid,
  674. _COM_Outptr_ LPVOID FAR * ppv
  675. );
  676. _Check_return_ WINOLEAPI
  677. CoCreateFreeThreadedMarshaler(
  678. _In_opt_ LPUNKNOWN punkOuter,
  679. _Outptr_ LPUNKNOWN * ppunkMarshal
  680. );
  681. WINOLEAPI_(void)
  682. CoFreeUnusedLibraries(
  683. void
  684. );
  685. #if (_WIN32_WINNT >= 0x0501)
  686. /* #!perl PoundIf("CoFreeUnusedLibrariesEx", "(_WIN32_WINNT >= 0x0501)");
  687. */
  688. WINOLEAPI_(void)
  689. CoFreeUnusedLibrariesEx(
  690. _In_ DWORD dwUnloadDelay,
  691. _In_ DWORD dwReserved
  692. );
  693. #endif
  694. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  695. #pragma endregion
  696. #if (_WIN32_WINNT >= 0x0600)
  697. #pragma region Desktop Family
  698. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  699. _Check_return_ WINOLEAPI
  700. CoDisconnectContext(
  701. DWORD dwTimeout
  702. );
  703. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  704. #pragma endregion
  705. #endif
  706. // DCOM
  707. #if (_WIN32_WINNT >= 0x0400) || defined(_WIN32_DCOM)
  708. #pragma region Application Family
  709. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  710. /* Call Security. */
  711. /* #!perl PoundIf("CoInitializeSecurity", "(_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM)");
  712. */
  713. _Check_return_ WINOLEAPI
  714. CoInitializeSecurity(
  715. _In_opt_ PSECURITY_DESCRIPTOR pSecDesc,
  716. _In_ LONG cAuthSvc,
  717. _In_reads_opt_(cAuthSvc) SOLE_AUTHENTICATION_SERVICE * asAuthSvc,
  718. _In_opt_ void * pReserved1,
  719. _In_ DWORD dwAuthnLevel,
  720. _In_ DWORD dwImpLevel,
  721. _In_opt_ void * pAuthList,
  722. _In_ DWORD dwCapabilities,
  723. _In_opt_ void * pReserved3
  724. );
  725. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  726. #pragma endregion
  727. #pragma region Desktop Family
  728. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  729. /* #!perl PoundIf("CoGetCallContext", "(_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM)");
  730. */
  731. _Check_return_ WINOLEAPI
  732. CoGetCallContext(
  733. _In_ REFIID riid,
  734. _Outptr_ void ** ppInterface
  735. );
  736. /* #!perl PoundIf("CoQueryProxyBlanket", "(_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM)");
  737. */
  738. _Check_return_ WINOLEAPI
  739. CoQueryProxyBlanket(
  740. _In_ IUnknown * pProxy,
  741. _Out_opt_ DWORD * pwAuthnSvc,
  742. _Out_opt_ DWORD * pAuthzSvc,
  743. _Outptr_opt_ LPOLESTR * pServerPrincName,
  744. _Out_opt_ DWORD * pAuthnLevel,
  745. _Out_opt_ DWORD * pImpLevel,
  746. _Out_opt_ RPC_AUTH_IDENTITY_HANDLE * pAuthInfo,
  747. _Out_opt_ DWORD * pCapabilites
  748. );
  749. /* #!perl PoundIf("CoSetProxyBlanket", "(_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM)");
  750. */
  751. _Check_return_ WINOLEAPI
  752. CoSetProxyBlanket(
  753. _In_ IUnknown * pProxy,
  754. _In_ DWORD dwAuthnSvc,
  755. _In_ DWORD dwAuthzSvc,
  756. _In_opt_ OLECHAR * pServerPrincName,
  757. _In_ DWORD dwAuthnLevel,
  758. _In_ DWORD dwImpLevel,
  759. _In_opt_ RPC_AUTH_IDENTITY_HANDLE pAuthInfo,
  760. _In_ DWORD dwCapabilities
  761. );
  762. /* #!perl PoundIf("CoCopyProxy", "(_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM)");
  763. */
  764. _Check_return_ WINOLEAPI
  765. CoCopyProxy(
  766. _In_ IUnknown * pProxy,
  767. _Outptr_ IUnknown ** ppCopy
  768. );
  769. /* #!perl PoundIf("CoQueryClientBlanket", "(_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM)");
  770. */
  771. _Check_return_ WINOLEAPI
  772. CoQueryClientBlanket(
  773. _Out_opt_ DWORD * pAuthnSvc,
  774. _Out_opt_ DWORD * pAuthzSvc,
  775. _Outptr_opt_ LPOLESTR * pServerPrincName,
  776. _Out_opt_ DWORD * pAuthnLevel,
  777. _Out_opt_ DWORD * pImpLevel,
  778. _Outptr_opt_result_buffer_(_Inexpressible_("depends on pAuthnSvc")) RPC_AUTHZ_HANDLE * pPrivs,
  779. _Inout_opt_ DWORD * pCapabilities
  780. );
  781. /* #!perl PoundIf("CoImpersonateClient", "(_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM)");
  782. */
  783. _Check_return_ WINOLEAPI
  784. CoImpersonateClient(
  785. void
  786. );
  787. /* #!perl PoundIf("CoRevertToSelf", "(_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM)");
  788. */
  789. _Check_return_ WINOLEAPI
  790. CoRevertToSelf(
  791. void
  792. );
  793. /* #!perl PoundIf("CoQueryAuthenticationServices", "(_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM)");
  794. */
  795. _Check_return_ WINOLEAPI
  796. CoQueryAuthenticationServices(
  797. _Out_ DWORD * pcAuthSvc,
  798. _Outptr_result_buffer_(*pcAuthSvc) SOLE_AUTHENTICATION_SERVICE ** asAuthSvc
  799. );
  800. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  801. #pragma endregion
  802. #pragma region Application Family
  803. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  804. /* #!perl PoundIf("CoSwitchCallContext", "(_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM)");
  805. */
  806. _Check_return_ WINOLEAPI
  807. CoSwitchCallContext(
  808. _In_opt_ IUnknown * pNewObject,
  809. _Outptr_ IUnknown ** ppOldObject
  810. );
  811. #define COM_RIGHTS_EXECUTE 1
  812. #define COM_RIGHTS_EXECUTE_LOCAL 2
  813. #define COM_RIGHTS_EXECUTE_REMOTE 4
  814. #define COM_RIGHTS_ACTIVATE_LOCAL 8
  815. #define COM_RIGHTS_ACTIVATE_REMOTE 16
  816. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  817. #pragma endregion
  818. #endif // DCOM
  819. #pragma region Desktop Family
  820. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_PHONE_RESTRICTED )
  821. #ifndef _COCREATE_API_NO_INLINE
  822. #define _COCREATE_API_NO_INLINE
  823. #endif
  824. /* helper for creating instances */
  825. _Check_return_ WINOLEAPI
  826. CoCreateInstance(
  827. _In_ REFCLSID rclsid,
  828. _In_opt_ LPUNKNOWN pUnkOuter,
  829. _In_ DWORD dwClsContext,
  830. _In_ REFIID riid,
  831. _COM_Outptr_ _At_(*ppv, _Post_readable_size_(_Inexpressible_(varies))) LPVOID FAR * ppv
  832. );
  833. // DCOM
  834. #if (_WIN32_WINNT >= 0x0400) || defined(_WIN32_DCOM)
  835. /* #!perl PoundIf("CoCreateInstanceEx", "(_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM)");
  836. */
  837. _Check_return_ WINOLEAPI
  838. CoCreateInstanceEx(
  839. _In_ REFCLSID Clsid,
  840. _In_opt_ IUnknown * punkOuter,
  841. _In_ DWORD dwClsCtx,
  842. _In_opt_ COSERVERINFO * pServerInfo,
  843. _In_ DWORD dwCount,
  844. _Inout_updates_(dwCount) MULTI_QI * pResults
  845. );
  846. #endif // DCOM
  847. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_PHONE_RESTRICTED )
  848. #pragma endregion
  849. #if (_WIN32_WINNT >= 0x0602)
  850. #pragma region Application Family
  851. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  852. /* #!perl PoundIf("CoCreateInstanceFromApp", "(_WIN32_WINNT >= 0x0602)");
  853. */
  854. _Check_return_ WINOLEAPI
  855. CoCreateInstanceFromApp(
  856. _In_ REFCLSID Clsid,
  857. _In_opt_ IUnknown * punkOuter,
  858. _In_ DWORD dwClsCtx,
  859. _In_opt_ PVOID reserved,
  860. _In_ DWORD dwCount,
  861. _Inout_updates_(dwCount) MULTI_QI * pResults
  862. );
  863. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  864. #pragma endregion
  865. #endif
  866. #pragma region PC or Phone Family
  867. #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PC_APP | WINAPI_PARTITION_PHONE)
  868. #ifndef _COCREATE_API_NO_INLINE
  869. __inline _Check_return_ HRESULT CoCreateInstance(
  870. _In_ REFCLSID rclsid,
  871. _In_opt_ LPUNKNOWN pUnkOuter,
  872. _In_ DWORD dwClsContext,
  873. _In_ REFIID riid,
  874. _COM_Outptr_ _At_(*ppv, _Post_readable_size_(_Inexpressible_(varies))) LPVOID FAR* ppv)
  875. {
  876. MULTI_QI OneQI;
  877. HRESULT hr;
  878. OneQI.pItf = NULL;
  879. #ifdef __cplusplus
  880. OneQI.pIID = &riid;
  881. #else
  882. OneQI.pIID = riid;
  883. #endif
  884. hr = CoCreateInstanceFromApp( rclsid, pUnkOuter, dwClsContext, NULL, 1, &OneQI );
  885. #ifdef _PREFAST_
  886. if (SUCCEEDED(hr) && SUCCEEDED(OneQI.hr))
  887. _Analysis_assume_(OneQI.pItf != NULL);
  888. else
  889. _Analysis_assume_(OneQI.pItf = NULL);
  890. #endif
  891. *ppv = OneQI.pItf;
  892. return FAILED(hr) ? hr : OneQI.hr;
  893. }
  894. __inline _Check_return_ HRESULT CoCreateInstanceEx(
  895. _In_ REFCLSID Clsid,
  896. _In_opt_ IUnknown * punkOuter,
  897. _In_ DWORD dwClsCtx,
  898. _In_opt_ COSERVERINFO * pServerInfo,
  899. _In_ DWORD dwCount,
  900. _Inout_updates_(dwCount) MULTI_QI *pResults )
  901. {
  902. return CoCreateInstanceFromApp(Clsid, punkOuter, dwClsCtx, pServerInfo, dwCount, pResults);
  903. }
  904. #endif // _COCREATE_API_NO_INLINE
  905. #endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PC_APP | WINAPI_PARTITION_PHONE)
  906. #pragma endregion
  907. /* Call related APIs */
  908. // DCOM
  909. #if (_WIN32_WINNT >= 0x0500) || defined(_WIN32_DCOM)
  910. #pragma region Desktop Family
  911. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  912. /* #!perl PoundIf("CoGetCancelObject", "(_WIN32_WINNT >= 0x0500 ) || defined(_WIN32_DCOM)");
  913. */
  914. _Check_return_ WINOLEAPI
  915. CoGetCancelObject(
  916. _In_ DWORD dwThreadId,
  917. _In_ REFIID iid,
  918. _Outptr_ void ** ppUnk
  919. );
  920. /* #!perl PoundIf("CoSetCancelObject", "(_WIN32_WINNT >= 0x0500 ) || defined(_WIN32_DCOM)");
  921. */
  922. _Check_return_ WINOLEAPI
  923. CoSetCancelObject(
  924. _In_opt_ IUnknown * pUnk
  925. );
  926. /* #!perl PoundIf("CoCancelCall", "(_WIN32_WINNT >= 0x0500 ) || defined(_WIN32_DCOM)");
  927. */
  928. _Check_return_ WINOLEAPI
  929. CoCancelCall(
  930. _In_ DWORD dwThreadId,
  931. _In_ ULONG ulTimeout
  932. );
  933. /* #!perl PoundIf("CoTestCancel", "(_WIN32_WINNT >= 0x0500 ) || defined(_WIN32_DCOM)");
  934. */
  935. _Check_return_ WINOLEAPI
  936. CoTestCancel(
  937. void
  938. );
  939. /* #!perl PoundIf("CoEnableCallCancellation", "(_WIN32_WINNT >= 0x0500 ) || defined(_WIN32_DCOM)");
  940. */
  941. _Check_return_ WINOLEAPI
  942. CoEnableCallCancellation(
  943. _In_opt_ LPVOID pReserved
  944. );
  945. /* #!perl PoundIf("CoDisableCallCancellation", "(_WIN32_WINNT >= 0x0500 ) || defined(_WIN32_DCOM)");
  946. */
  947. _Check_return_ WINOLEAPI
  948. CoDisableCallCancellation(
  949. _In_opt_ LPVOID pReserved
  950. );
  951. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  952. #pragma endregion
  953. #endif
  954. #pragma region Application Family
  955. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  956. /* other helpers */
  957. _Check_return_ WINOLEAPI
  958. StringFromCLSID(
  959. _In_ REFCLSID rclsid,
  960. _Outptr_ LPOLESTR FAR * lplpsz
  961. );
  962. _Check_return_ WINOLEAPI
  963. CLSIDFromString(
  964. _In_ LPCOLESTR lpsz,
  965. _Out_ LPCLSID pclsid
  966. );
  967. _Check_return_ WINOLEAPI
  968. StringFromIID(
  969. _In_ REFIID rclsid,
  970. _Outptr_ LPOLESTR FAR * lplpsz
  971. );
  972. _Check_return_ WINOLEAPI
  973. IIDFromString(
  974. _In_ LPCOLESTR lpsz,
  975. _Out_ LPIID lpiid
  976. );
  977. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  978. #pragma endregion
  979. #pragma region Desktop Family
  980. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  981. _Check_return_ WINOLEAPI
  982. ProgIDFromCLSID(
  983. _In_ REFCLSID clsid,
  984. _Outptr_ LPOLESTR FAR * lplpszProgID
  985. );
  986. _Check_return_ WINOLEAPI
  987. CLSIDFromProgID(
  988. _In_ LPCOLESTR lpszProgID,
  989. _Out_ LPCLSID lpclsid
  990. );
  991. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  992. #pragma endregion
  993. #pragma region Application Family
  994. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  995. _Check_return_ WINOLEAPI_(int)
  996. StringFromGUID2(
  997. _In_ REFGUID rguid,
  998. _Out_writes_to_(cchMax, return) LPOLESTR lpsz,
  999. _In_ int cchMax
  1000. );
  1001. _Check_return_ WINOLEAPI
  1002. CoCreateGuid(
  1003. _Out_ GUID FAR * pguid
  1004. );
  1005. /* Prop variant support */
  1006. typedef struct tagPROPVARIANT PROPVARIANT;
  1007. _Check_return_
  1008. WINOLEAPI
  1009. PropVariantCopy(
  1010. _Out_ PROPVARIANT * pvarDest,
  1011. _In_ const PROPVARIANT * pvarSrc
  1012. );
  1013. WINOLEAPI
  1014. PropVariantClear(
  1015. _Inout_ PROPVARIANT * pvar
  1016. );
  1017. WINOLEAPI
  1018. FreePropVariantArray(
  1019. _In_ ULONG cVariants,
  1020. _Inout_updates_(cVariants) PROPVARIANT * rgvars
  1021. );
  1022. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  1023. #pragma endregion
  1024. // DCOM
  1025. #if (_WIN32_WINNT >= 0x0400) || defined(_WIN32_DCOM)
  1026. #pragma region Desktop Family
  1027. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  1028. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  1029. #pragma endregion
  1030. #endif // DCOM
  1031. // DCOM
  1032. #if (_WIN32_WINNT >= 0x0400) || defined(_WIN32_DCOM)
  1033. /* Synchronization API */
  1034. #pragma region Desktop Family
  1035. #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
  1036. /* #!perl PoundIf("CoWaitForMultipleHandles", "(_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM)");
  1037. */
  1038. _Check_return_ WINOLEAPI
  1039. CoWaitForMultipleHandles(
  1040. _In_ DWORD dwFlags,
  1041. _In_ DWORD dwTimeout,
  1042. _In_ ULONG cHandles,
  1043. _In_reads_(cHandles) LPHANDLE pHandles,
  1044. _Out_ LPDWORD lpdwindex
  1045. );
  1046. #endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
  1047. #pragma endregion
  1048. #pragma region Application Family
  1049. #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
  1050. /* Flags for Synchronization API and Classes */
  1051. typedef enum tagCOWAIT_FLAGS
  1052. {
  1053. COWAIT_DEFAULT = 0,
  1054. COWAIT_WAITALL = 1,
  1055. COWAIT_ALERTABLE = 2,
  1056. COWAIT_INPUTAVAILABLE = 4,
  1057. #endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
  1058. #pragma endregion
  1059. #pragma region Desktop Family
  1060. #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
  1061. COWAIT_DISPATCH_CALLS = 8,
  1062. COWAIT_DISPATCH_WINDOW_MESSAGES = 0x10,
  1063. #endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
  1064. #pragma endregion
  1065. #pragma region Application Family
  1066. #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
  1067. }COWAIT_FLAGS;
  1068. #endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
  1069. #pragma endregion
  1070. #if (NTDDI_VERSION >= NTDDI_WIN8)
  1071. #pragma region Application Family
  1072. #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
  1073. typedef enum CWMO_FLAGS
  1074. {
  1075. CWMO_DEFAULT = 0,
  1076. CWMO_DISPATCH_CALLS = 1,
  1077. #endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
  1078. #pragma endregion
  1079. #pragma region Desktop Family
  1080. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  1081. CWMO_DISPATCH_WINDOW_MESSAGES = 2,
  1082. #endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
  1083. #pragma endregion
  1084. #pragma region Application Family
  1085. #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
  1086. } CWMO_FLAGS;
  1087. #endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
  1088. #pragma endregion
  1089. #endif // (NTDDI_VERSION >= NTDDI_WIN8)
  1090. #pragma region Application Family
  1091. #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
  1092. #define CWMO_MAX_HANDLES 56
  1093. #endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
  1094. #pragma endregion
  1095. #endif // DCOM
  1096. #pragma region Desktop Family
  1097. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  1098. _Check_return_ WINOLEAPI
  1099. CoGetTreatAsClass(
  1100. _In_ REFCLSID clsidOld,
  1101. _Out_ LPCLSID pClsidNew
  1102. );
  1103. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  1104. #pragma endregion
  1105. /* for flushing OLESCM remote binding handles */
  1106. #if (_WIN32_WINNT >= 0x0501)
  1107. #pragma region Desktop Family
  1108. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  1109. /* #!perl
  1110. PoundIf("CoInvalidateRemoteMachineBindings", "_WIN32_WINNT >= 0x0501");
  1111. */
  1112. _Check_return_ WINOLEAPI
  1113. CoInvalidateRemoteMachineBindings(
  1114. _In_ LPOLESTR pszMachineName
  1115. );
  1116. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
  1117. #pragma endregion
  1118. #endif
  1119. #pragma region Application Family
  1120. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  1121. /* the server dlls must define their DllGetClassObject and DllCanUnloadNow
  1122. * to match these; the typedefs are located here to ensure all are changed at
  1123. * the same time.
  1124. */
  1125. //#ifdef _MAC
  1126. //typedef STDAPICALLTYPE HRESULT (* LPFNGETCLASSOBJECT) (REFCLSID, REFIID, LPVOID *);
  1127. //#else
  1128. typedef HRESULT (STDAPICALLTYPE * LPFNGETCLASSOBJECT) (REFCLSID, REFIID, LPVOID *);
  1129. //#endif
  1130. //#ifdef _MAC
  1131. //typedef STDAPICALLTYPE HRESULT (* LPFNCANUNLOADNOW)(void);
  1132. //#else
  1133. typedef HRESULT (STDAPICALLTYPE * LPFNCANUNLOADNOW)(void);
  1134. //#endif
  1135. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  1136. #pragma endregion
  1137. #pragma region Desktop and PC Application Family
  1138. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_PC_APP )
  1139. _Check_return_
  1140. STDAPI DllGetClassObject(_In_ REFCLSID rclsid, _In_ REFIID riid, _Outptr_ LPVOID FAR* ppv);
  1141. STDAPI DllCanUnloadNow(void);
  1142. #endif // WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_PC_APP )
  1143. #pragma endregion
  1144. #pragma region Application Family
  1145. #if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_APP )
  1146. /****** Default Memory Allocation ******************************************/
  1147. WINOLEAPI_(_Ret_opt_ _Post_writable_byte_size_(cb) __drv_allocatesMem(Mem) _Check_return_ LPVOID)
  1148. CoTaskMemAlloc(
  1149. _In_ SIZE_T cb
  1150. );
  1151. WINOLEAPI_(_Ret_opt_ _Post_writable_byte_size_(cb) _When_(cb > 0, __drv_allocatesMem(Mem) _Check_return_) LPVOID)
  1152. CoTaskMemRealloc(
  1153. _In_opt_ __drv_freesMem(Mem) _Post_invalid_ LPVOID pv,
  1154. _In_ SIZE_T cb
  1155. );
  1156. WINOLEAPI_(void)
  1157. CoTaskMemFree(
  1158. _In_opt_ __drv_freesMem(Mem) _Post_invalid_ LPVOID pv
  1159. );
  1160. #ifndef RC_INVOKED
  1161. #include <poppack.h>
  1162. #endif // RC_INVOKED
  1163. #endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
  1164. #pragma endregion
  1165. // end_1_0
  1166. // begin_1_0
  1167. #endif // __COMBASEAPI_H__
  1168. // end_1_0