blob: ef513347e3c1ac4bbe11c7d976c07b1058d677d5 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// windows.h needs to be included before delayimp.h.
#include <windows.h>
#include <delayimp.h>
#include "base/debug/alias.h"
#include "base/logging.h"
#include "base/stl_util.h"
#include "base/strings/string_util.h"
namespace {
// Delay load failure hook that generates a crash report. By default a failure
// to delay load will trigger an exception handled by the delay load runtime and
// this won't generate a crash report.
extern "C" FARPROC WINAPI DelayLoadFailureHook(unsigned reason,
DelayLoadInfo* dll_info) {
char dll_name[MAX_PATH];
base::strlcpy(dll_name, dll_info->szDll, base::size(dll_name));
// It's not an error if "bthprops.cpl" fails to be loaded, there's a custom
// exception handler in 'device/bluetooth/" that will
// intercept the exception triggered by the delay load runtime. Returning 0
// will tell the runtime that this failure hasn't been handled and it'll cause
// the exception to be raised.
if (base::CompareCaseInsensitiveASCII(dll_name, "bthprops.cpl") == 0)
return 0;
return 0;
} // namespace
// Set the delay load failure hook to the function above.
// The |__pfnDliFailureHook2| failure notification hook gets called
// automatically by the delay load runtime in case of failure, see
// for more information about this.
extern "C" const PfnDliHook __pfnDliFailureHook2 = DelayLoadFailureHook;