aboutsummaryrefslogtreecommitdiff
path: root/src/client/windows/tests/crash_generation_app
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/windows/tests/crash_generation_app')
-rw-r--r--src/client/windows/tests/crash_generation_app/abstract_class.cc53
-rw-r--r--src/client/windows/tests/crash_generation_app/abstract_class.h57
-rw-r--r--src/client/windows/tests/crash_generation_app/crash_generation_app.cc467
-rw-r--r--src/client/windows/tests/crash_generation_app/crash_generation_app.h35
-rw-r--r--src/client/windows/tests/crash_generation_app/crash_generation_app.icobin0 -> 23558 bytes
-rw-r--r--src/client/windows/tests/crash_generation_app/crash_generation_app.rc144
-rw-r--r--src/client/windows/tests/crash_generation_app/crash_generation_app.sln20
-rw-r--r--src/client/windows/tests/crash_generation_app/crash_generation_app.vcproj253
-rw-r--r--src/client/windows/tests/crash_generation_app/precompile.cc37
-rw-r--r--src/client/windows/tests/crash_generation_app/precompile.h89
-rw-r--r--src/client/windows/tests/crash_generation_app/resource.h73
-rw-r--r--src/client/windows/tests/crash_generation_app/small.icobin0 -> 23558 bytes
12 files changed, 1228 insertions, 0 deletions
diff --git a/src/client/windows/tests/crash_generation_app/abstract_class.cc b/src/client/windows/tests/crash_generation_app/abstract_class.cc
new file mode 100644
index 00000000..9abc79eb
--- /dev/null
+++ b/src/client/windows/tests/crash_generation_app/abstract_class.cc
@@ -0,0 +1,53 @@
+// Copyright (c) 2008, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include "precompile.h"
+
+namespace google_breakpad {
+
+Base::Base(Derived* derived)
+ : derived_(derived) {
+}
+
+Base::~Base() {
+ derived_->DoSomething();
+}
+
+#pragma warning(push)
+#pragma warning(disable:4355)
+// Disable warning C4355: 'this' : used in base member initializer list.
+Derived::Derived()
+ : Base(this) { // C4355
+}
+#pragma warning(pop)
+
+void Derived::DoSomething() {
+}
+
+} // namespace google_breakpad
diff --git a/src/client/windows/tests/crash_generation_app/abstract_class.h b/src/client/windows/tests/crash_generation_app/abstract_class.h
new file mode 100644
index 00000000..c516f50e
--- /dev/null
+++ b/src/client/windows/tests/crash_generation_app/abstract_class.h
@@ -0,0 +1,57 @@
+// Copyright (c) 2008, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef CLIENT_WINDOWS_TESTS_CRASH_GENERATION_APP_ABSTRACT_CLASS_H__
+#define CLIENT_WINDOWS_TESTS_CRASH_GENERATION_APP_ABSTRACT_CLASS_H__
+
+namespace google_breakpad {
+
+// Dummy classes to help generate a pure call violation.
+
+class Derived;
+
+class Base {
+ public:
+ Base(Derived* derived);
+ virtual ~Base();
+ virtual void DoSomething() = 0;
+
+ private:
+ Derived* derived_;
+};
+
+class Derived : public Base {
+ public:
+ Derived();
+ virtual void DoSomething();
+};
+
+} // namespace google_breakpad
+
+#endif // CLIENT_WINDOWS_TESTS_CRASH_GENERATION_APP_CRASH_GENERATION_APP_H__
diff --git a/src/client/windows/tests/crash_generation_app/crash_generation_app.cc b/src/client/windows/tests/crash_generation_app/crash_generation_app.cc
new file mode 100644
index 00000000..314ae8d1
--- /dev/null
+++ b/src/client/windows/tests/crash_generation_app/crash_generation_app.cc
@@ -0,0 +1,467 @@
+// Copyright (c) 2008, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// crash_generation_app.cpp : Defines the entry point for the application.
+//
+
+#include "precompile.h"
+
+namespace google_breakpad {
+
+const int kMaxLoadString = 100;
+const wchar_t kPipeName[] = L"\\\\.\\pipe\\GoogleCrashServices";
+
+const DWORD kEditBoxStyles = WS_CHILD |
+ WS_VISIBLE |
+ WS_VSCROLL |
+ ES_LEFT |
+ ES_MULTILINE |
+ ES_AUTOVSCROLL |
+ ES_READONLY;
+
+// Maximum length of a line in the edit box.
+const size_t kMaximumLineLength = 256;
+
+// CS to access edit control in a thread safe way.
+static CRITICAL_SECTION* cs_edit = NULL;
+
+// Edit control.
+static HWND client_status_edit_box;
+
+HINSTANCE current_instance; // Current instance.
+TCHAR title[kMaxLoadString]; // Title bar text.
+TCHAR window_class[kMaxLoadString]; // Main window class name.
+
+ATOM MyRegisterClass(HINSTANCE instance);
+BOOL InitInstance(HINSTANCE, int);
+LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
+INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
+
+static ExceptionHandler* handler = NULL;
+static CrashGenerationServer* crash_server = NULL;
+
+// Registers the window class.
+//
+// This function and its usage are only necessary if you want this code
+// to be compatible with Win32 systems prior to the 'RegisterClassEx'
+// function that was added to Windows 95. It is important to call this
+// function so that the application will get 'well formed' small icons
+// associated with it.
+ATOM MyRegisterClass(HINSTANCE instance) {
+ WNDCLASSEX wcex;
+ wcex.cbSize = sizeof(WNDCLASSEX);
+ wcex.style = CS_HREDRAW | CS_VREDRAW;
+ wcex.lpfnWndProc = WndProc;
+ wcex.cbClsExtra = 0;
+ wcex.cbWndExtra = 0;
+ wcex.hInstance = instance;
+ wcex.hIcon = LoadIcon(instance,
+ MAKEINTRESOURCE(IDI_CRASHGENERATIONAPP));
+ wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
+ wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
+ wcex.lpszMenuName = MAKEINTRESOURCE(IDC_CRASHGENERATIONAPP);
+ wcex.lpszClassName = window_class;
+ wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
+
+ return RegisterClassEx(&wcex);
+}
+
+// Saves instance handle and creates main window
+//
+// In this function, we save the instance handle in a global variable and
+// create and display the main program window.
+BOOL InitInstance(HINSTANCE instance, int command_show) {
+ current_instance = instance;
+ HWND wnd = CreateWindow(window_class,
+ title,
+ WS_OVERLAPPEDWINDOW,
+ CW_USEDEFAULT,
+ 0,
+ CW_USEDEFAULT,
+ 0,
+ NULL,
+ NULL,
+ instance,
+ NULL);
+
+ if (!wnd) {
+ return FALSE;
+ }
+
+ ShowWindow(wnd, command_show);
+ UpdateWindow(wnd);
+
+ return TRUE;
+}
+
+static void AppendTextToEditBox(TCHAR* text) {
+ EnterCriticalSection(cs_edit);
+ SYSTEMTIME current_time;
+ GetLocalTime(&current_time);
+ TCHAR line[kMaximumLineLength];
+ int result = swprintf_s(line,
+ kMaximumLineLength,
+ L"[%.2d-%.2d-%.4d %.2d:%.2d:%.2d] %s",
+ current_time.wMonth,
+ current_time.wDay,
+ current_time.wYear,
+ current_time.wHour,
+ current_time.wMinute,
+ current_time.wSecond,
+ text);
+
+ if (result == -1) {
+ return;
+ }
+
+ int length = GetWindowTextLength(client_status_edit_box);
+ SendMessage(client_status_edit_box,
+ EM_SETSEL,
+ (WPARAM)length,
+ (LPARAM)length);
+ SendMessage(client_status_edit_box,
+ EM_REPLACESEL,
+ (WPARAM)FALSE,
+ (LPARAM)line);
+ LeaveCriticalSection(cs_edit);
+}
+
+static DWORD WINAPI AppendTextWorker(void* context) {
+ TCHAR* text = reinterpret_cast<TCHAR*>(context);
+
+ AppendTextToEditBox(text);
+ delete[] text;
+
+ return 0;
+}
+
+bool ShowDumpResults(const wchar_t* dump_path,
+ const wchar_t* minidump_id,
+ void* context,
+ EXCEPTION_POINTERS* exinfo,
+ MDRawAssertionInfo* assertion,
+ bool succeeded) {
+ TCHAR* text = new TCHAR[kMaximumLineLength];
+ int result = swprintf_s(text,
+ kMaximumLineLength,
+ TEXT("Dump generation request %s\r\n"),
+ succeeded ? TEXT("succeeded") : TEXT("failed"));
+ if (result == -1) {
+ delete [] text;
+ }
+
+ AppendTextWorker(text);
+ return succeeded;
+}
+
+static void _cdecl ShowClientConnected(void* context,
+ const ClientInfo* client_info) {
+ TCHAR* line = new TCHAR[kMaximumLineLength];
+ int result = swprintf_s(line,
+ kMaximumLineLength,
+ L"Client connected:\t\t%d\r\n",
+ client_info->pid());
+
+ if (result == -1) {
+ delete[] line;
+ return;
+ }
+
+ QueueUserWorkItem(AppendTextWorker, line, WT_EXECUTEDEFAULT);
+}
+
+static void _cdecl ShowClientCrashed(void* context,
+ const ClientInfo* client_info) {
+ TCHAR* line = new TCHAR[kMaximumLineLength];
+ int result = swprintf_s(line,
+ kMaximumLineLength,
+ TEXT("Client requested dump:\t%d\r\n"),
+ client_info->pid());
+
+ if (result == -1) {
+ delete[] line;
+ return;
+ }
+
+ QueueUserWorkItem(AppendTextWorker, line, WT_EXECUTEDEFAULT);
+}
+
+static void _cdecl ShowClientExited(void* context,
+ const ClientInfo* client_info) {
+ TCHAR* line = new TCHAR[kMaximumLineLength];
+ int result = swprintf_s(line,
+ kMaximumLineLength,
+ TEXT("Client exited:\t\t%d\r\n"),
+ client_info->pid());
+
+ if (result == -1) {
+ delete[] line;
+ return;
+ }
+
+ QueueUserWorkItem(AppendTextWorker, line, WT_EXECUTEDEFAULT);
+}
+
+void CrashServerStart() {
+ // Do not create another instance of the server.
+ if (crash_server) {
+ return;
+ }
+
+ std::wstring dump_path = L"C:\\Dumps\\";
+ crash_server = new CrashGenerationServer(kPipeName,
+ ShowClientConnected,
+ NULL,
+ ShowClientCrashed,
+ NULL,
+ ShowClientExited,
+ NULL,
+ true,
+ &dump_path);
+
+ if (!crash_server->Start()) {
+ MessageBoxW(NULL, L"Unable to start server", L"Dumper", MB_OK);
+ delete crash_server;
+ crash_server = NULL;
+ }
+}
+
+void CrashServerStop() {
+ delete crash_server;
+ crash_server = NULL;
+}
+
+void DerefZeroCrash() {
+ int* x = 0;
+ *x = 1;
+}
+
+void InvalidParamCrash() {
+ printf(NULL);
+}
+
+void PureCallCrash() {
+ Derived derived;
+}
+
+void RequestDump() {
+ if (!handler->WriteMinidump()) {
+ MessageBoxW(NULL, L"Dump request failed", L"Dumper", MB_OK);
+ }
+}
+
+void CleanUp() {
+ if (cs_edit) {
+ DeleteCriticalSection(cs_edit);
+ delete cs_edit;
+ }
+
+ if (handler) {
+ delete handler;
+ }
+
+ if (crash_server) {
+ delete crash_server;
+ }
+}
+
+// Processes messages for the main window.
+//
+// WM_COMMAND - process the application menu.
+// WM_PAINT - Paint the main window.
+// WM_DESTROY - post a quit message and return.
+LRESULT CALLBACK WndProc(HWND wnd,
+ UINT message,
+ WPARAM w_param,
+ LPARAM l_param) {
+ int message_id;
+ int message_event;
+ PAINTSTRUCT ps;
+ HDC hdc;
+
+#pragma warning(push)
+#pragma warning(disable:4312)
+ // Disable warning C4312: 'type cast' : conversion from 'LONG' to
+ // 'HINSTANCE' of greater size.
+ // The value returned by GetwindowLong in the case below returns unsigned.
+ HINSTANCE instance = (HINSTANCE)GetWindowLong(wnd, GWL_HINSTANCE);
+#pragma warning(pop)
+
+ switch (message) {
+ case WM_COMMAND:
+ // Parse the menu selections.
+ message_id = LOWORD(w_param);
+ message_event = HIWORD(w_param);
+ switch (message_id) {
+ case IDM_ABOUT:
+ DialogBox(current_instance,
+ MAKEINTRESOURCE(IDD_ABOUTBOX),
+ wnd,
+ About);
+ break;
+ case IDM_EXIT:
+ DestroyWindow(wnd);
+ break;
+ case ID_SERVER_START:
+ CrashServerStart();
+ break;
+ case ID_SERVER_STOP:
+ CrashServerStop();
+ break;
+ case ID_CLIENT_DEREFZERO:
+ DerefZeroCrash();
+ break;
+ case ID_CLIENT_INVALIDPARAM:
+ InvalidParamCrash();
+ break;
+ case ID_CLIENT_PURECALL:
+ PureCallCrash();
+ break;
+ case ID_CLIENT_REQUESTEXPLICITDUMP:
+ RequestDump();
+ break;
+ default:
+ return DefWindowProc(wnd, message, w_param, l_param);
+ }
+ break;
+ case WM_CREATE:
+ client_status_edit_box = CreateWindow(TEXT("EDIT"),
+ NULL,
+ kEditBoxStyles,
+ 0,
+ 0,
+ 0,
+ 0,
+ wnd,
+ NULL,
+ instance,
+ NULL);
+ break;
+ case WM_SIZE:
+ // Make the edit control the size of the window's client area.
+ MoveWindow(client_status_edit_box,
+ 0,
+ 0,
+ LOWORD(l_param), // width of client area.
+ HIWORD(l_param), // height of client area.
+ TRUE); // repaint window.
+ break;
+ case WM_SETFOCUS:
+ SetFocus(client_status_edit_box);
+ break;
+ case WM_PAINT:
+ hdc = BeginPaint(wnd, &ps);
+ EndPaint(wnd, &ps);
+ break;
+ case WM_DESTROY:
+ CleanUp();
+ PostQuitMessage(0);
+ break;
+ default:
+ return DefWindowProc(wnd, message, w_param, l_param);
+ }
+
+ return 0;
+}
+
+// Message handler for about box.
+INT_PTR CALLBACK About(HWND dlg,
+ UINT message,
+ WPARAM w_param,
+ LPARAM l_param) {
+ UNREFERENCED_PARAMETER(l_param);
+ switch (message) {
+ case WM_INITDIALOG:
+ return (INT_PTR)TRUE;
+
+ case WM_COMMAND:
+ if (LOWORD(w_param) == IDOK || LOWORD(w_param) == IDCANCEL) {
+ EndDialog(dlg, LOWORD(w_param));
+ return (INT_PTR)TRUE;
+ }
+ break;
+ }
+
+ return (INT_PTR)FALSE;
+}
+
+} // namespace google_breakpad
+
+int APIENTRY _tWinMain(HINSTANCE instance,
+ HINSTANCE previous_instance,
+ LPTSTR command_line,
+ int command_show) {
+ using namespace google_breakpad;
+
+ UNREFERENCED_PARAMETER(previous_instance);
+ UNREFERENCED_PARAMETER(command_line);
+
+ cs_edit = new CRITICAL_SECTION();
+ InitializeCriticalSection(cs_edit);
+
+ // This is needed for CRT to not show dialog for invalid param
+ // failures and instead let the code handle it.
+ _CrtSetReportMode(_CRT_ASSERT, 0);
+ handler = new ExceptionHandler(L"C:\\dumps\\",
+ NULL,
+ google_breakpad::ShowDumpResults,
+ NULL,
+ ExceptionHandler::HANDLER_ALL,
+ MiniDumpNormal,
+ kPipeName);
+
+ // Initialize global strings.
+ LoadString(instance, IDS_APP_TITLE, title, kMaxLoadString);
+ LoadString(instance,
+ IDC_CRASHGENERATIONAPP,
+ window_class,
+ kMaxLoadString);
+ MyRegisterClass(instance);
+
+ // Perform application initialization.
+ if (!InitInstance (instance, command_show)) {
+ return FALSE;
+ }
+
+ HACCEL accel_table = LoadAccelerators(
+ instance,
+ MAKEINTRESOURCE(IDC_CRASHGENERATIONAPP));
+
+ // Main message loop.
+ MSG msg;
+ while (GetMessage(&msg, NULL, 0, 0)) {
+ if (!TranslateAccelerator(msg.hwnd, accel_table, &msg)) {
+ TranslateMessage(&msg);
+ DispatchMessage(&msg);
+ }
+ }
+
+ return (int)msg.wParam;
+}
+
diff --git a/src/client/windows/tests/crash_generation_app/crash_generation_app.h b/src/client/windows/tests/crash_generation_app/crash_generation_app.h
new file mode 100644
index 00000000..2273912d
--- /dev/null
+++ b/src/client/windows/tests/crash_generation_app/crash_generation_app.h
@@ -0,0 +1,35 @@
+// Copyright (c) 2008, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef CLIENT_WINDOWS_TESTS_CRASH_GENERATION_APP_CRASH_GENERATION_APP_H__
+#define CLIENT_WINDOWS_TESTS_CRASH_GENERATION_APP_CRASH_GENERATION_APP_H__
+
+#include "resource.h"
+
+#endif // CLIENT_WINDOWS_TESTS_CRASH_GENERATION_APP_CRASH_GENERATION_APP_H__
diff --git a/src/client/windows/tests/crash_generation_app/crash_generation_app.ico b/src/client/windows/tests/crash_generation_app/crash_generation_app.ico
new file mode 100644
index 00000000..d551aa3a
--- /dev/null
+++ b/src/client/windows/tests/crash_generation_app/crash_generation_app.ico
Binary files differ
diff --git a/src/client/windows/tests/crash_generation_app/crash_generation_app.rc b/src/client/windows/tests/crash_generation_app/crash_generation_app.rc
new file mode 100644
index 00000000..c31b9c20
--- /dev/null
+++ b/src/client/windows/tests/crash_generation_app/crash_generation_app.rc
@@ -0,0 +1,144 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#define APSTUDIO_HIDDEN_SYMBOLS
+#include "windows.h"
+#undef APSTUDIO_HIDDEN_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_CRASHGENERATIONAPP ICON "crash_generation_app.ico"
+IDI_SMALL ICON "small.ico"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Menu
+//
+
+IDC_CRASHGENERATIONAPP MENU
+BEGIN
+ POPUP "&File"
+ BEGIN
+ MENUITEM "E&xit", IDM_EXIT
+ END
+ POPUP "&Server"
+ BEGIN
+ MENUITEM "&Start", ID_SERVER_START
+ MENUITEM "S&top", ID_SERVER_STOP
+ END
+ POPUP "&Client"
+ BEGIN
+ MENUITEM "&Deref Zero", ID_CLIENT_DEREFZERO
+ MENUITEM "&Invalid Param", ID_CLIENT_INVALIDPARAM
+ MENUITEM "&Pure Call", ID_CLIENT_PURECALL
+ MENUITEM "&Request Dump", ID_CLIENT_REQUESTEXPLICITDUMP
+ END
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Accelerator
+//
+
+IDC_CRASHGENERATIONAPP ACCELERATORS
+BEGIN
+ "?", IDM_ABOUT, ASCII, ALT
+ "/", IDM_ABOUT, ASCII, ALT
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_ABOUTBOX DIALOG 22, 17, 230, 75
+STYLE DS_SETFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
+CAPTION "About"
+FONT 8, "System"
+BEGIN
+ ICON IDI_CRASHGENERATIONAPP,IDC_MYICON,14,9,16,16
+ LTEXT "CrashGenerationApp Version 1.0",IDC_STATIC,49,10,119,8,SS_NOPREFIX
+ LTEXT "Copyright (C) 2008",IDC_STATIC,49,20,119,8
+ DEFPUSHBUTTON "OK",IDOK,195,6,30,11,WS_GROUP
+END
+
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
+ "#include ""windows.h""\r\n"
+ "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE
+BEGIN
+ IDS_APP_TITLE "CrashGenerationApp"
+ IDC_CRASHGENERATIONAPP "CRASHGENERATIONAPP"
+END
+
+#endif // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/src/client/windows/tests/crash_generation_app/crash_generation_app.sln b/src/client/windows/tests/crash_generation_app/crash_generation_app.sln
new file mode 100644
index 00000000..85d06c6d
--- /dev/null
+++ b/src/client/windows/tests/crash_generation_app/crash_generation_app.sln
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "crash_generation_app", "crash_generation_app.vcproj", "{A15674ED-713D-4B37-B1D2-0C29C7E533C8}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {A15674ED-713D-4B37-B1D2-0C29C7E533C8}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A15674ED-713D-4B37-B1D2-0C29C7E533C8}.Debug|Win32.Build.0 = Debug|Win32
+ {A15674ED-713D-4B37-B1D2-0C29C7E533C8}.Release|Win32.ActiveCfg = Release|Win32
+ {A15674ED-713D-4B37-B1D2-0C29C7E533C8}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/src/client/windows/tests/crash_generation_app/crash_generation_app.vcproj b/src/client/windows/tests/crash_generation_app/crash_generation_app.vcproj
new file mode 100644
index 00000000..b5aa93c0
--- /dev/null
+++ b/src/client/windows/tests/crash_generation_app/crash_generation_app.vcproj
@@ -0,0 +1,253 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="crash_generation_app"
+ ProjectGUID="{A15674ED-713D-4B37-B1D2-0C29C7E533C8}"
+ RootNamespace="CrashGenerationServerApp"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\..\"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="PreCompile.h"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="crash_generation.lib exception_handler.lib"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="..\..\$(ConfigurationName)"
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="2"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\abstract_class.cc"
+ >
+ </File>
+ <File
+ RelativePath=".\crash_generation_app.cc"
+ >
+ </File>
+ <File
+ RelativePath=".\precompile.cc"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath=".\abstract_class.h"
+ >
+ </File>
+ <File
+ RelativePath=".\crash_generation_app.h"
+ >
+ </File>
+ <File
+ RelativePath=".\precompile.h"
+ >
+ </File>
+ <File
+ RelativePath=".\Resource.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ <File
+ RelativePath=".\crash_generation_app.ico"
+ >
+ </File>
+ <File
+ RelativePath=".\crash_generation_app.rc"
+ >
+ </File>
+ <File
+ RelativePath=".\small.ico"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/src/client/windows/tests/crash_generation_app/precompile.cc b/src/client/windows/tests/crash_generation_app/precompile.cc
new file mode 100644
index 00000000..409b4a4b
--- /dev/null
+++ b/src/client/windows/tests/crash_generation_app/precompile.cc
@@ -0,0 +1,37 @@
+// Copyright (c) 2008, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// precompile.cpp : source file that includes just the standard includes
+// CrashGenerationApp.pch will be the pre-compiled header
+// precompile.obj will contain the pre-compiled type information
+
+#include "precompile.h"
+
+// Reference any additional headers you need in PRECOMPILE.H
+// and not in this file.
diff --git a/src/client/windows/tests/crash_generation_app/precompile.h b/src/client/windows/tests/crash_generation_app/precompile.h
new file mode 100644
index 00000000..596409e9
--- /dev/null
+++ b/src/client/windows/tests/crash_generation_app/precompile.h
@@ -0,0 +1,89 @@
+// Copyright (c) 2008, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// PreCompile.h : include file for standard system include files,
+// or project specific include files that are used frequently, but
+// are changed infrequently
+//
+
+#ifndef CLIENT_WINDOWS_TESTS_CRASH_GENERATION_APP_PRECOMPILE_H__
+#define CLIENT_WINDOWS_TESTS_CRASH_GENERATION_APP_PRECOMPILE_H__
+
+// Modify the following defines if you have to target a platform prior to
+// the ones specified below. Refer to MSDN for the latest info on
+// corresponding values for different platforms.
+
+// Allow use of features specific to Windows XP or later.
+#ifndef WINVER
+// Change this to the appropriate value to target other versions of Windows.
+#define WINVER 0x0501
+#endif
+
+// Allow use of features specific to Windows XP or later.
+#ifndef _WIN32_WINNT
+// Change this to the appropriate value to target other versions of Windows.
+#define _WIN32_WINNT 0x0501
+#endif
+
+// Allow use of features specific to Windows 98 or later.
+#ifndef _WIN32_WINDOWS
+// Change this to the appropriate value to target Windows Me or later.
+#define _WIN32_WINDOWS 0x0410
+#endif
+
+// Allow use of features specific to IE 6.0 or later.
+#ifndef _WIN32_IE
+// Change this to the appropriate value to target other versions of IE.
+#define _WIN32_IE 0x0600
+#endif
+
+// Exclude rarely-used stuff from Windows headers
+#define WIN32_LEAN_AND_MEAN
+
+#include <windows.h>
+#include <DbgHelp.h>
+#include <malloc.h>
+#include <memory.h>
+#include <stdlib.h>
+#include <string.h>
+#include <tchar.h>
+
+#include <cassert>
+#include <list>
+
+#include "client/windows/crash_generation/client_info.h"
+#include "client/windows/crash_generation/crash_generation_client.h"
+#include "client/windows/crash_generation/crash_generation_server.h"
+#include "client/windows/crash_generation/minidump_generator.h"
+#include "client/windows/handler/exception_handler.h"
+#include "client/windows/tests/crash_generation_app/abstract_class.h"
+#include "client/windows/tests/crash_generation_app/crash_generation_app.h"
+#include "google_breakpad/common/minidump_format.h"
+
+#endif // CLIENT_WINDOWS_TESTS_CRASH_GENERATION_APP_PRECOMPILE_H__
diff --git a/src/client/windows/tests/crash_generation_app/resource.h b/src/client/windows/tests/crash_generation_app/resource.h
new file mode 100644
index 00000000..8e37512e
--- /dev/null
+++ b/src/client/windows/tests/crash_generation_app/resource.h
@@ -0,0 +1,73 @@
+// Copyright (c) 2008, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// PreCompile.h : include file for standard system include files,
+// or project specific include files that are used frequently, but
+// are changed infrequently
+//
+
+#ifndef CLIENT_WINDOWS_TESTS_CRASH_GENERATION_APP_RESOURCE_H__
+#define CLIENT_WINDOWS_TESTS_CRASH_GENERATION_APP_RESOURCE_H__
+
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by crash_generation_app.rc
+//
+#define IDC_MYICON 2
+#define IDD_CRASHGENERATIONAPP_DIALOG 102
+#define IDS_APP_TITLE 103
+#define IDD_ABOUTBOX 103
+#define IDM_ABOUT 104
+#define IDM_EXIT 105
+#define IDI_CRASHGENERATIONAPP 107
+#define IDI_SMALL 108
+#define IDC_CRASHGENERATIONAPP 109
+#define IDR_MAINFRAME 128
+#define ID_SERVER_START 32771
+#define ID_SERVER_STOP 32772
+#define ID_CLIENT_INVALIDPARAM 32773
+#define ID_CLIENT_ASSERTFAILURE 32774
+#define ID_CLIENT_DEREFZERO 32775
+#define ID_CLIENT_PURECALL 32777
+#define ID_CLIENT_REQUESTEXPLICITDUMP 32778
+#define IDC_STATIC -1
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NO_MFC 1
+#define _APS_NEXT_RESOURCE_VALUE 129
+#define _APS_NEXT_COMMAND_VALUE 32780
+#define _APS_NEXT_CONTROL_VALUE 1000
+#define _APS_NEXT_SYMED_VALUE 110
+#endif
+#endif
+
+#endif // CLIENT_WINDOWS_TESTS_CRASH_GENERATION_APP_RESOURCE_H__
diff --git a/src/client/windows/tests/crash_generation_app/small.ico b/src/client/windows/tests/crash_generation_app/small.ico
new file mode 100644
index 00000000..d551aa3a
--- /dev/null
+++ b/src/client/windows/tests/crash_generation_app/small.ico
Binary files differ