Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Firefox/toolkit/mozapps/update/updater/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 3 kB image not shown  

Quelle  loaddlls.cpp   Sprache: C

 
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 * You can obtain one at http://mozilla.org/MPL/2.0/. */


#include <windows.h>

#ifdef MOZ_CLANG_PLUGIN
#  define MOZ_RUNINIT __attribute__((annotate("moz_global_var")))
#else
#  define MOZ_RUNINIT
#endif

// Delayed load libraries are loaded when the first symbol is used.
// The following ensures that we load the delayed loaded libraries from the
// system directory.
MOZ_RUNINIT struct AutoLoadSystemDependencies {
  AutoLoadSystemDependencies() {
    // Remove the current directory from the search path for dynamically loaded
    // DLLs as a precaution.  This call has no effect for delay load DLLs.
    SetDllDirectory(L"");

    HMODULE module = ::GetModuleHandleW(L"kernel32.dll");
    if (module) {
      // SetDefaultDllDirectories is always available on Windows 8 and above. It
      // is also available on Windows Vista, Windows Server 2008, and
      // Windows 7 when MS KB2533623 has been applied.
      decltype(SetDefaultDllDirectories)* setDefaultDllDirectories =
          (decltype(SetDefaultDllDirectories)*)GetProcAddress(
              module, "SetDefaultDllDirectories");
      if (setDefaultDllDirectories) {
        setDefaultDllDirectories(LOAD_LIBRARY_SEARCH_SYSTEM32);
        return;
      }
    }

    // When SetDefaultDllDirectories is not available, fallback to preloading
    // dlls. The order that these are loaded does not matter since they are
    // loaded using the LOAD_WITH_ALTERED_SEARCH_PATH flag.
#ifdef HAVE_64BIT_BUILD
    // DLLs for Firefox x64 on Windows 7 (x64).
    // Note: dwmapi.dll is preloaded since a crash will try to load it from the
    // application's directory.
    static LPCWSTR delayDLLs[] = {
        L"apphelp.dll", L"cryptbase.dll", L"cryptsp.dll", L"dwmapi.dll",
        L"mpr.dll",     L"ntmarta.dll",   L"profapi.dll", L"propsys.dll",
        L"sspicli.dll", L"wsock32.dll"};

#else
    // DLLs for Firefox x86 on Windows XP through Windows 7 (x86 and x64).
    // Note: dwmapi.dll is preloaded since a crash will try to load it from the
    // application's directory.
    static LPCWSTR delayDLLs[] = {
        L"apphelp.dll", L"crypt32.dll", L"cryptbase.dll", L"cryptsp.dll",
        L"dwmapi.dll",  L"mpr.dll",     L"msasn1.dll",    L"ntmarta.dll",
        L"profapi.dll", L"propsys.dll", L"psapi.dll",     L"secur32.dll",
        L"sspicli.dll", L"userenv.dll", L"uxtheme.dll",   L"ws2_32.dll",
        L"ws2help.dll", L"wsock32.dll"};
#endif

    WCHAR systemDirectory[MAX_PATH + 1] = {L'\0'};
    // If GetSystemDirectory fails we accept that we'll load the DLLs from the
    // normal search path.
    GetSystemDirectoryW(systemDirectory, MAX_PATH + 1);
    size_t systemDirLen = wcslen(systemDirectory);

    // Make the system directory path terminate with a slash
    if (systemDirectory[systemDirLen - 1] != L'\\' && systemDirLen) {
      systemDirectory[systemDirLen] = L'\\';
      ++systemDirLen;
      // No need to re-null terminate
    }

    // For each known DLL ensure it is loaded from the system32 directory
    for (size_t i = 0; i < sizeof(delayDLLs) / sizeof(delayDLLs[0]); ++i) {
      size_t fileLen = wcslen(delayDLLs[i]);
      wcsncpy(systemDirectory + systemDirLen, delayDLLs[i],
              MAX_PATH - systemDirLen);
      if (systemDirLen + fileLen <= MAX_PATH) {
        systemDirectory[systemDirLen + fileLen] = L'\0';
      } else {
        systemDirectory[MAX_PATH] = L'\0';
      }
      LPCWSTR fullModulePath = systemDirectory;  // just for code readability
      // LOAD_WITH_ALTERED_SEARCH_PATH makes a dll look in its own directory for
      // dependencies and is only available on Win 7 and below.
      LoadLibraryExW(fullModulePath, nullptr, LOAD_WITH_ALTERED_SEARCH_PATH);
    }
  }
} loadDLLs;

Messung V0.5
C=71 H=84 G=77

¤ Dauer der Verarbeitung: 0.12 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.