Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

94 lines
3.1 KiB

/*
Copyright 1999 Microsoft Corporation
Logging for MessageBoxes and the comment button (aka the "lame" button).
Walter Smith (wsmith)
*/
#pragma once
#include "simplexml.h"
// Stack trace passed by USER to our hook
struct STACKTRACEDATA {
ULONG nCallers;
PVOID callers[1];
};
typedef STACKTRACEDATA* PSTACKTRACEDATA;
// Data we log for MessageBoxes
struct MSGBOXLOGDATA {
OSVERSIONINFO versionInfo; // OS version
LPCTSTR szOwnerClass; // Owner window class (from RealGetWindowClass)
LPCTSTR szOwnerTitle; // Owner window title
PSTACKTRACEDATA pStackTrace; // Stack trace of creation site
DWORD dwResult; // Return value of MessageBox (IDxxx)
// The rest are as defined in MSGBOXPARAMS
LPCTSTR szText;
LPCTSTR szCaption;
DWORD dwStyle;
DWORD dwContextHelpId;
};
typedef MSGBOXLOGDATA* PMSGBOXLOGDATA;
// Data we log for comments
#define MSGBOX_TEXT_SIZE 512
#define COMMENT_TEXT_SIZE 2000
#define CLASS_SIZE 64
#define TITLE_SIZE 64
#define MAX_BUF_SIZE 512
#define MAX_EMAIL_ADDRESS_SIZE 255
#define MAX_BETA_ID_SIZE 6
#define MSGBOX_CLASS _T("#32770")
struct LAMELOGDATA {
DWORD dwSeverity; // User's severity selection
DWORD dwEventCategory; // User's event category selection
PBYTE pbImage; // GIF image of the window
DWORD cbImage; // Size of pbImage data in bytes
PSTACKTRACEDATA pStackTrace; // Stack trace of creation site
OSVERSIONINFO versionInfo; // OS version
TCHAR szClass[CLASS_SIZE]; // Window class (from RealGetWindowClass)
TCHAR szTitle[TITLE_SIZE]; // Window title
TCHAR szComment[COMMENT_TEXT_SIZE + 1]; // User's comment
TCHAR szMsgBoxText[MSGBOX_TEXT_SIZE]; // Message Box text
TCHAR szEmailAddress[MAX_EMAIL_ADDRESS_SIZE + 1]; // User's email address
TCHAR szBetaID[MAX_BETA_ID_SIZE + 1]; // User's beta ID
WCHAR szMiniDumpPath[MAX_PATH+1]; // Path to a file containing a minidump to upload.
};
typedef LAMELOGDATA* PLAMELOGDATA;
void LogMessageBox(PMSGBOXLOGDATA pData);
int LogLameButton(PLAMELOGDATA pData);
// XML helpers
void GetISO8601DateTime(LPTSTR buf);
wstring Hexify(DWORD dwValue);
wstring Decimalify(DWORD dwValue);
// stack.cpp
void GenerateXMLStackTrace(PSTACKTRACEDATA pstd,
SimpleXMLNode* pTopElt);
// upload.cpp
enum ENUM_UPLOAD_TYPES { UPLOAD_MESSAGEBOX, UPLOAD_LAMEBUTTON };
int QueueXMLDocumentUpload(ENUM_UPLOAD_TYPES type, SimpleXMLDocument& doc);
typedef TCHAR GUIDSTR[39];
void GetMachineSignature(GUIDSTR szGUID);
// image.cpp
void GetWindowImage(HWND hwnd, BYTE** ppData, DWORD* pcbData);