1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #include "mozilla/mscom/COMWrappers.h"
11 #include "mozilla/Assertions.h"
12 #include "mozilla/DynamicallyLinkedFunctionPtr.h"
14 namespace mozilla::mscom::wrapped
{
16 HRESULT
CoInitializeEx(LPVOID pvReserved
, DWORD dwCoInit
) {
17 static const StaticDynamicallyLinkedFunctionPtr
<decltype(&::CoInitializeEx
)>
18 pCoInitializeEx(L
"combase.dll", "CoInitializeEx");
19 if (!pCoInitializeEx
) {
20 return ::CoInitializeEx(pvReserved
, dwCoInit
);
23 return pCoInitializeEx(pvReserved
, dwCoInit
);
26 void CoUninitialize() {
27 static const StaticDynamicallyLinkedFunctionPtr
<decltype(&::CoUninitialize
)>
28 pCoUninitialize(L
"combase.dll", "CoUninitialize");
29 if (!pCoUninitialize
) {
30 return ::CoUninitialize();
33 return pCoUninitialize();
36 HRESULT
CoIncrementMTAUsage(CO_MTA_USAGE_COOKIE
* pCookie
) {
37 static const StaticDynamicallyLinkedFunctionPtr
<
38 decltype(&::CoIncrementMTAUsage
)>
39 pCoIncrementMTAUsage(L
"combase.dll", "CoIncrementMTAUsage");
40 // This API is only available beginning with Windows 8.
41 if (!pCoIncrementMTAUsage
) {
45 HRESULT hr
= pCoIncrementMTAUsage(pCookie
);
46 MOZ_ASSERT(SUCCEEDED(hr
));
50 HRESULT
CoGetApartmentType(APTTYPE
* pAptType
, APTTYPEQUALIFIER
* pAptQualifier
) {
51 static const StaticDynamicallyLinkedFunctionPtr
<
52 decltype(&::CoGetApartmentType
)>
53 pCoGetApartmentType(L
"combase.dll", "CoGetApartmentType");
54 if (!pCoGetApartmentType
) {
55 return ::CoGetApartmentType(pAptType
, pAptQualifier
);
58 return pCoGetApartmentType(pAptType
, pAptQualifier
);
61 HRESULT
CoInitializeSecurity(PSECURITY_DESCRIPTOR pSecDesc
, LONG cAuthSvc
,
62 SOLE_AUTHENTICATION_SERVICE
* asAuthSvc
,
63 void* pReserved1
, DWORD dwAuthnLevel
,
64 DWORD dwImpLevel
, void* pAuthList
,
65 DWORD dwCapabilities
, void* pReserved3
) {
66 static const StaticDynamicallyLinkedFunctionPtr
<
67 decltype(&::CoInitializeSecurity
)>
68 pCoInitializeSecurity(L
"combase.dll", "CoInitializeSecurity");
69 if (!pCoInitializeSecurity
) {
70 return ::CoInitializeSecurity(pSecDesc
, cAuthSvc
, asAuthSvc
, pReserved1
,
71 dwAuthnLevel
, dwImpLevel
, pAuthList
,
72 dwCapabilities
, pReserved3
);
75 return pCoInitializeSecurity(pSecDesc
, cAuthSvc
, asAuthSvc
, pReserved1
,
76 dwAuthnLevel
, dwImpLevel
, pAuthList
,
77 dwCapabilities
, pReserved3
);
80 HRESULT
CoCreateInstance(REFCLSID rclsid
, LPUNKNOWN pUnkOuter
,
81 DWORD dwClsContext
, REFIID riid
, LPVOID
* ppv
) {
82 static const StaticDynamicallyLinkedFunctionPtr
<decltype(&::CoCreateInstance
)>
83 pCoCreateInstance(L
"combase.dll", "CoCreateInstance");
84 if (!pCoCreateInstance
) {
85 return ::CoCreateInstance(rclsid
, pUnkOuter
, dwClsContext
, riid
, ppv
);
88 return pCoCreateInstance(rclsid
, pUnkOuter
, dwClsContext
, riid
, ppv
);
91 HRESULT
CoCreateGuid(GUID
* pguid
) {
92 static const StaticDynamicallyLinkedFunctionPtr
<decltype(&::CoCreateGuid
)>
93 pCoCreateGuid(L
"combase.dll", "CoCreateGuid");
95 return ::CoCreateGuid(pguid
);
98 return pCoCreateGuid(pguid
);
101 } // namespace mozilla::mscom::wrapped