tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

COMWrappers.cpp (3886B)


      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/. */
      6 
      7 #include "mozilla/mscom/COMWrappers.h"
      8 
      9 #include <objbase.h>
     10 
     11 #include "mozilla/Assertions.h"
     12 #include "mozilla/DynamicallyLinkedFunctionPtr.h"
     13 
     14 namespace mozilla::mscom::wrapped {
     15 
     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);
     21  }
     22 
     23  return pCoInitializeEx(pvReserved, dwCoInit);
     24 }
     25 
     26 void CoUninitialize() {
     27  static const StaticDynamicallyLinkedFunctionPtr<decltype(&::CoUninitialize)>
     28      pCoUninitialize(L"combase.dll", "CoUninitialize");
     29  if (!pCoUninitialize) {
     30    return ::CoUninitialize();
     31  }
     32 
     33  return pCoUninitialize();
     34 }
     35 
     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) {
     42    return E_NOTIMPL;
     43  }
     44 
     45  HRESULT hr = pCoIncrementMTAUsage(pCookie);
     46  MOZ_ASSERT(SUCCEEDED(hr));
     47  return hr;
     48 }
     49 
     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);
     56  }
     57 
     58  return pCoGetApartmentType(pAptType, pAptQualifier);
     59 }
     60 
     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);
     73  }
     74 
     75  return pCoInitializeSecurity(pSecDesc, cAuthSvc, asAuthSvc, pReserved1,
     76                               dwAuthnLevel, dwImpLevel, pAuthList,
     77                               dwCapabilities, pReserved3);
     78 }
     79 
     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);
     86  }
     87 
     88  return pCoCreateInstance(rclsid, pUnkOuter, dwClsContext, riid, ppv);
     89 }
     90 
     91 HRESULT CoCreateGuid(GUID* pguid) {
     92  static const StaticDynamicallyLinkedFunctionPtr<decltype(&::CoCreateGuid)>
     93      pCoCreateGuid(L"combase.dll", "CoCreateGuid");
     94  if (!pCoCreateGuid) {
     95    return ::CoCreateGuid(pguid);
     96  }
     97 
     98  return pCoCreateGuid(pguid);
     99 }
    100 
    101 void CoTaskMemFree(LPVOID pv) {
    102  static const StaticDynamicallyLinkedFunctionPtr<decltype(&::CoTaskMemFree)>
    103      pCoTaskMemFree(L"combase.dll", "CoTaskMemFree");
    104  if (!pCoTaskMemFree) {
    105    return ::CoTaskMemFree(pv);
    106  }
    107 
    108  return pCoTaskMemFree(pv);
    109 }
    110 
    111 }  // namespace mozilla::mscom::wrapped