toolkit/crashreporter/injector/injector.cpp
author autofoolip <auto@foolip.org>
Tue, 05 Mar 2019 12:16:52 +0000
changeset 464229 e8fd59f2739a174418de65e6727b88526ad175ed
parent 448947 6f3709b3878117466168c40affa7bca0b60cf75b
permissions -rw-r--r--
Bug 1528746 [wpt PR 15406] - Update interfaces/html.idl, a=testonly Automatic update from web-platform-tests Update interfaces/html.idl (#15406) Source: https://github.com/tidoust/reffy-reports/blob/42ed719/whatwg/idl/html.idl Build: https://travis-ci.org/tidoust/reffy-reports/builds/493621065 -- wpt-commits: f026ed3dce8578662f907d37234a9a600c5ad517 wpt-pr: 15406

/* 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>

#include "windows/handler/exception_handler.h"

using google_breakpad::ExceptionHandler;
using std::wstring;

extern "C" BOOL WINAPI DummyEntryPoint(HINSTANCE instance, DWORD reason,
                                       void* reserved) {
  __debugbreak();

  return FALSE;  // We're being loaded remotely, this shouldn't happen!
}

// support.microsoft.com/kb/94248
extern "C" BOOL WINAPI _CRT_INIT(HINSTANCE hinstDLL, DWORD fdwReason,
                                 LPVOID lpReserved);

extern "C" __declspec(dllexport) DWORD Start(void* context) {
  // Because the remote DLL injector does not call DllMain, we have to
  // initialize the CRT manually
  _CRT_INIT(nullptr, DLL_PROCESS_ATTACH, nullptr);

  HANDLE hCrashPipe = reinterpret_cast<HANDLE>(context);

  ExceptionHandler* e = new (std::nothrow) ExceptionHandler(
      wstring(), nullptr, nullptr, nullptr, ExceptionHandler::HANDLER_ALL,
      MiniDumpNormal, hCrashPipe, nullptr);
  if (e) e->set_handle_debug_exceptions(true);
  return 1;
}