/** * This file has no copyright assigned and is placed in the Public Domain. * This file is part of the mingw-w64 runtime package. * No warranty is given; refer to the file DISCLAIMER.PD within this package. */ #ifndef _INC_WERAPI #define _INC_WERAPI #if (_WIN32_WINNT >= 0x0600) #ifdef __cplusplus extern "C" { #endif typedef HANDLE HREPORT; #define WER_FAULT_REPORTING_FLAG_NOHEAP 1 #define WER_FAULT_REPORTING_FLAG_QUEUE 2 #define WER_FAULT_REPORTING_FLAG_DISABLE_THREAD_SUSPENSION 4 #define WER_FAULT_REPORTING_FLAG_QUEUE_UPLOAD 8 #define WER_FAULT_REPORTING_ALWAYS_SHOW_UI 16 #define WER_FAULT_REPORTING_NO_UI 32 #define WER_FAULT_REPORTING_FLAG_NO_HEAP_ON_QUEUE 64 #define WER_FAULT_REPORTING_DISABLE_SNAPSHOT_CRASH 128 #define WER_FAULT_REPORTING_DISABLE_SNAPSHOT_HANG 256 #define WER_FAULT_REPORTING_CRITICAL 512 #define WER_FAULT_REPORTING_DURABLE 1024 #define WER_MAX_TOTAL_PARAM_LENGTH 1720 #define WER_MAX_PREFERRED_MODULES 128 #define WER_MAX_PREFERRED_MODULES_BUFFER 256 #define WER_MAX_MEM_BLOCK_SIZE (64 * 1024) #define APPCRASH_EVENT L"APPCRASH" #define PACKAGED_APPCRASH_EVENT L"MoAppCrash" #define WER_P0 0 #define WER_P1 1 #define WER_P2 2 #define WER_P3 3 #define WER_P4 4 #define WER_P5 5 #define WER_P6 6 #define WER_P7 7 #define WER_P8 8 #define WER_P9 9 #define WER_E_INSUFFICIENT_BUFFER (HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)) #define WER_E_NOT_FOUND (HRESULT_FROM_WIN32(ERROR_NOT_FOUND)) #define WER_E_LENGTH_EXCEEDED (HRESULT_FROM_WIN32(ERROR_PARAMETER_QUOTA_EXCEEDED)) #define WER_E_INVALID_STATE (HRESULT_FROM_WIN32(ERROR_INVALID_STATE)) #define WER_E_MISSING_DUMP (HRESULT_FROM_WIN32(ERROR_MISSING_SYSTEMFILE)) #define WER_E_CABBING_FAILURE (HRESULT_FROM_WIN32(ERROR_GEN_FAILURE)) #define WER_FILE_DELETE_WHEN_DONE 1 #define WER_FILE_ANONYMOUS_DATA 2 #define WER_FILE_COMPRESSED 4 #define WER_SUBMIT_HONOR_RECOVERY 1 #define WER_SUBMIT_HONOR_RESTART 2 #define WER_SUBMIT_QUEUE 4 #define WER_SUBMIT_SHOW_DEBUG 8 #define WER_SUBMIT_ADD_REGISTERED_DATA 16 #define WER_SUBMIT_OUTOFPROCESS 32 #define WER_SUBMIT_NO_CLOSE_UI 64 #define WER_SUBMIT_NO_QUEUE 128 #define WER_SUBMIT_NO_ARCHIVE 256 #define WER_SUBMIT_START_MINIMIZED 512 #define WER_SUBMIT_OUTOFPROCESS_ASYNC 1024 #define WER_SUBMIT_BYPASS_DATA_THROTTLING 2048 #define WER_SUBMIT_ARCHIVE_PARAMETERS_ONLY 4096 #define WER_SUBMIT_REPORT_MACHINE_ID 8192 #define WER_SUBMIT_BYPASS_POWER_THROTTLING 16384 #define WER_SUBMIT_BYPASS_NETWORK_COST_THROTTLING 32768 #define WER_SUBMIT_DISCARD_IF_QUEUED WER_SUBMIT_NO_QUEUE #define WER_DUMP_MASK_START 1 #define WER_DUMP_MASK_DUMPTYPE (WER_DUMP_MASK_START << 0) #define WER_DUMP_MASK_ONLY_THISTHREAD (WER_DUMP_MASK_START << 1) #define WER_DUMP_MASK_THREADFLAGS (WER_DUMP_MASK_START << 2) #define WER_DUMP_MASK_THREADFLAGS_EX (WER_DUMP_MASK_START << 3) #define WER_DUMP_MASK_OTHERTHREADFLAGS (WER_DUMP_MASK_START << 4) #define WER_DUMP_MASK_OTHERTHREADFLAGS_EX (WER_DUMP_MASK_START << 5) #define WER_DUMP_MASK_PREFERRED_MODULESFLAGS (WER_DUMP_MASK_START << 6) #define WER_DUMP_MASK_OTHER_MODULESFLAGS (WER_DUMP_MASK_START << 7) #define WER_DUMP_MASK_PREFERRED_MODULE_LIST (WER_DUMP_MASK_START << 8) #define WER_DUMP_NOHEAP_ONQUEUE 1 #define WER_DUMP_AUXILIARY 2 #define WER_MAX_REGISTERED_ENTRIES 512 #define WER_MAX_REGISTERED_METADATA 8 #define WER_MAX_REGISTERED_DUMPCOLLECTION 4 #define WER_METADATA_KEY_MAX_LENGTH 64 #define WER_METADATA_VALUE_MAX_LENGTH 128 #define WER_MAX_SIGNATURE_NAME_LENGTH 128 #define WER_MAX_EVENT_NAME_LENGTH 64 #define WER_MAX_PARAM_LENGTH MAX_PATH #define WER_MAX_PARAM_COUNT 10 #define WER_MAX_FRIENDLY_EVENT_NAME_LENGTH 128 #define WER_MAX_APPLICATION_NAME_LENGTH 128 #define WER_MAX_DESCRIPTION_LENGTH 512 #define WER_MAX_BUCKET_ID_STRING_LENGTH MAX_PATH #define WER_MAX_LOCAL_DUMP_SUBPATH_LENGTH 64 #define WER_MAX_REGISTERED_RUNTIME_EXCEPTION_MODULES 16 #define WER_RUNTIME_EXCEPTION_EVENT_FUNCTION "OutOfProcessExceptionEventCallback" #define WER_RUNTIME_EXCEPTION_EVENT_SIGNATURE_FUNCTION "OutOfProcessExceptionEventSignatureCallback" #define WER_RUNTIME_EXCEPTION_DEBUGGER_LAUNCH "OutOfProcessExceptionEventDebuggerLaunchCallback" typedef enum _WER_FILE_TYPE { WerFileTypeMicrodump = 1, WerFileTypeMinidump, WerFileTypeHeapdump, WerFileTypeUserDocument, WerFileTypeOther, WerFileTypeTriagedump, WerFileTypeCustomDump, WerFileTypeAuxiliaryDump, WerFileTypeEtlTrace, WerFileTypeMax } WER_FILE_TYPE; typedef enum _WER_REGISTER_FILE_TYPE { WerRegFileTypeUserDocument = 1, WerRegFileTypeOther, WerRegFileTypeMax } WER_REGISTER_FILE_TYPE; typedef enum _WER_DUMP_TYPE { WerDumpTypeNone = 0, WerDumpTypeMicroDump, WerDumpTypeMiniDump, WerDumpTypeHeapDump, WerDumpTypeTriageDump, WerDumpTypeMax } WER_DUMP_TYPE; typedef enum _WER_REPORT_UI { WerUIAdditionalDataDlgHeader = 1, WerUIIconFilePath, WerUIConsentDlgHeader, WerUIConsentDlgBody, WerUIOnlineSolutionCheckText, WerUIOfflineSolutionCheckText, WerUICloseText, WerUICloseDlgHeader, WerUICloseDlgBody, WerUICloseDlgButtonText, WerUICustomActionButtonText, WerUIMax } WER_REPORT_UI; typedef enum _WER_CONSENT { WerConsentNotAsked = 1, WerConsentApproved, WerConsentDenied, WerConsentAlwaysPrompt, WerConsentMax } WER_CONSENT; typedef enum _WER_SUBMIT_RESULT { WerReportQueued = 1, WerReportUploaded, WerReportDebug, WerReportFailed, WerDisabled, WerReportCancelled, WerDisabledQueue, WerReportAsync, WerCustomAction #if NTDDI_VERSION >= NTDDI_WIN8 , WerThrottled = 10 #endif #if NTDDI_VERSION >= NTDDI_WIN10 , WerReportUploadedCab = 11 , WerStorageLocationNotFound = 12 #endif , WerSubmitResultMax } WER_SUBMIT_RESULT, *PWER_SUBMIT_RESULT; typedef enum _WER_REPORT_TYPE { WerReportNonCritical = 0, WerReportCritical, WerReportApplicationCrash, WerReportApplicationHang, WerReportKernel, WerReportInvalid } WER_REPORT_TYPE; typedef struct _WER_DUMP_CUSTOM_OPTIONS { DWORD dwSize; DWORD dwMask; DWORD dwDumpFlags; WINBOOL bOnlyThisThread; DWORD dwExceptionThreadFlags; DWORD dwOtherThreadFlags; DWORD dwExceptionThreadExFlags; DWORD dwOtherThreadExFlags; DWORD dwPreferredModuleFlags; DWORD dwOtherModuleFlags; WCHAR wzPreferredModuleList[WER_MAX_PREFERRED_MODULES_BUFFER]; } WER_DUMP_CUSTOM_OPTIONS, *PWER_DUMP_CUSTOM_OPTIONS; typedef struct _WER_DUMP_CUSTOM_OPTIONS_V2 { DWORD dwSize; DWORD dwMask; DWORD dwDumpFlags; WINBOOL bOnlyThisThread; DWORD dwExceptionThreadFlags; DWORD dwOtherThreadFlags; DWORD dwExceptionThreadExFlags; DWORD dwOtherThreadExFlags; DWORD dwPreferredModuleFlags; DWORD dwOtherModuleFlags; WCHAR wzPreferredModuleList[WER_MAX_PREFERRED_MODULES_BUFFER]; DWORD dwPreferredModuleResetFlags; DWORD dwOtherModuleResetFlags; } WER_DUMP_CUSTOM_OPTIONS_V2, *PWER_DUMP_CUSTOM_OPTIONS_V2; #if NTDDI_VERSION >= NTDDI_WINBLUE typedef struct _WER_DUMP_CUSTOM_OPTIONS_V3 { DWORD dwSize; DWORD dwMask; DWORD dwDumpFlags; WINBOOL bOnlyThisThread; DWORD dwExceptionThreadFlags; DWORD dwOtherThreadFlags; DWORD dwExceptionThreadExFlags; DWORD dwOtherThreadExFlags; DWORD dwPreferredModuleFlags; DWORD dwOtherModuleFlags; WCHAR wzPreferredModuleList[WER_MAX_PREFERRED_MODULES_BUFFER]; DWORD dwPreferredModuleResetFlags; DWORD dwOtherModuleResetFlags; PVOID pvDumpKey; HANDLE hSnapshot; DWORD dwThreadID; } WER_DUMP_CUSTOM_OPTIONS_V3, *PWER_DUMP_CUSTOM_OPTIONS_V3; typedef WER_DUMP_CUSTOM_OPTIONS_V3 const *PCWER_DUMP_CUSTOM_OPTIONS_V3; #endif typedef struct _WER_EXCEPTION_INFORMATION { PEXCEPTION_POINTERS pExceptionPointers; WINBOOL bClientPointers; } WER_EXCEPTION_INFORMATION, *PWER_EXCEPTION_INFORMATION; typedef struct _WER_REPORT_INFORMATION { DWORD dwSize; HANDLE hProcess; WCHAR wzConsentKey[64]; WCHAR wzFriendlyEventName[128]; WCHAR wzApplicationName[128]; WCHAR wzApplicationPath[MAX_PATH]; WCHAR wzDescription[512]; HWND hwndParent; } WER_REPORT_INFORMATION, *PWER_REPORT_INFORMATION; #if NTDDI_VERSION >= NTDDI_WIN8 typedef struct _WER_REPORT_INFORMATION_V3 { DWORD dwSize; HANDLE hProcess; WCHAR wzConsentKey[64]; WCHAR wzFriendlyEventName[128]; WCHAR wzApplicationName[128]; WCHAR wzApplicationPath[MAX_PATH]; WCHAR wzDescription[512]; HWND hwndParent; WCHAR wzNamespacePartner[64]; WCHAR wzNamespaceGroup[64]; } WER_REPORT_INFORMATION_V3, *PWER_REPORT_INFORMATION_V3; #endif #if NTDDI_VERSION >= NTDDI_WINBLUE typedef struct _WER_REPORT_INFORMATION_V4 { DWORD dwSize; HANDLE hProcess; WCHAR wzConsentKey[64]; WCHAR wzFriendlyEventName[128]; WCHAR wzApplicationName[128]; WCHAR wzApplicationPath[MAX_PATH]; WCHAR wzDescription[512]; HWND hwndParent; WCHAR wzNamespacePartner[64]; WCHAR wzNamespaceGroup[64]; BYTE rgbApplicationIdentity[16]; HANDLE hSnapshot; HANDLE hDeleteFilesImpersonationToken; } WER_REPORT_INFORMATION_V4, *PWER_REPORT_INFORMATION_V4; typedef WER_REPORT_INFORMATION_V4 const *PCWER_REPORT_INFORMATION_V4; #endif #if NTDDI_VERSION >= NTDDI_WIN10 typedef struct _WER_REPORT_INFORMATION_V5 { DWORD dwSize; HANDLE hProcess; WCHAR wzConsentKey[64]; WCHAR wzFriendlyEventName[128]; WCHAR wzApplicationName[128]; WCHAR wzApplicationPath[MAX_PATH]; WCHAR wzDescription[512]; HWND hwndParent; WCHAR wzNamespacePartner[64]; WCHAR wzNamespaceGroup[64]; BYTE rgbApplicationIdentity[16]; HANDLE hSnapshot; HANDLE hDeleteFilesImpersonationToken; WER_SUBMIT_RESULT submitResultMax; } WER_REPORT_INFORMATION_V5, *PWER_REPORT_INFORMATION_V5; typedef WER_REPORT_INFORMATION_V5 const *PCWER_REPORT_INFORMATION_V5; #endif HRESULT WINAPI WerAddExcludedApplication(PCWSTR pwzExeName,WINBOOL bAllUsers); HRESULT WINAPI WerGetFlags(HANDLE hProcess,PDWORD pdwFlags); HRESULT WINAPI WerRegisterFile(PCWSTR pwzFile,WER_REGISTER_FILE_TYPE regFileType,DWORD dwFlags); HRESULT WINAPI WerRegisterMemoryBlock(PVOID pvAddress,DWORD dwSize); HRESULT WINAPI WerRemoveExcludedApplication(PCWSTR pwzExeName,WINBOOL bAllUsers); HRESULT WINAPI WerReportAddDump(HREPORT hReportHandle,HANDLE hProcess,HANDLE hThread,WER_DUMP_TYPE dumpType,PWER_EXCEPTION_INFORMATION pExceptionParam,PWER_DUMP_CUSTOM_OPTIONS pDumpCustomOptions,DWORD dwFlags); HRESULT WINAPI WerReportAddFile(HREPORT hReportHandle,PCWSTR pwzPath,WER_FILE_TYPE repFileType,DWORD dwFileFlags); HRESULT WINAPI WerReportCloseHandle(HREPORT hReportHandle); HRESULT WINAPI WerReportCreate(PCWSTR pwzEventType,WER_REPORT_TYPE repType,PWER_REPORT_INFORMATION pReportInformation,HREPORT *phReportHandle); HRESULT WINAPI WerReportHang(HWND hwndHungWindow,PCWSTR wszHungApplicationName); HRESULT WINAPI WerReportSetParameter(HREPORT hReportHandle,DWORD dwparamID,PCWSTR pwzName,PCWSTR pwzValue); HRESULT WINAPI WerReportSetUIOption(HREPORT hReportHandle,WER_REPORT_UI repUITypeID,PCWSTR pwzValue); HRESULT WINAPI WerReportSubmit(HREPORT hReportHandle,WER_CONSENT consent,DWORD dwFlags,PWER_SUBMIT_RESULT pSubmitResult); HRESULT WINAPI WerSetFlags(DWORD dwFlags); HRESULT WINAPI WerUnregisterFile(PCWSTR pwzFilePath); HRESULT WINAPI WerUnregisterMemoryBlock(PVOID pvAddress); HRESULT WINAPI WerRegisterExcludedMemoryBlock(const void* address, DWORD size); HRESULT WINAPI WerUnregisterExcludedMemoryBlock(const void* address); HRESULT WINAPI WerRegisterCustomMetadata(PCWSTR key, PCWSTR value); HRESULT WINAPI WerUnregisterCustomMetadata(PCWSTR key); HRESULT WINAPI WerRegisterAdditionalProcess(DWORD processId, DWORD captureExtraInfoForThreadId); HRESULT WINAPI WerUnregisterAdditionalProcess(DWORD processId); HRESULT WINAPI WerRegisterAppLocalDump(PCWSTR localAppDataRelativePath); HRESULT WINAPI WerUnregisterAppLocalDump(void); HRESULT WINAPI WerSetMaxProcessHoldMilliseconds(DWORD dwMilliseconds); #if (_WIN32_WINNT >= 0x0601) typedef struct _WER_RUNTIME_EXCEPTION_INFORMATION { DWORD dwSize; HANDLE hProcess; HANDLE hThread; EXCEPTION_RECORD exceptionRecord; CONTEXT context; PCWSTR pwszReportId; WINBOOL bIsFatal; DWORD dwReserved; } WER_RUNTIME_EXCEPTION_INFORMATION, *PWER_RUNTIME_EXCEPTION_INFORMATION; typedef HRESULT (WINAPI *PFN_WER_RUNTIME_EXCEPTION_EVENT)( PVOID pContext, const PWER_RUNTIME_EXCEPTION_INFORMATION pExceptionInformation, WINBOOL *pbOwnershipClaimed, PWSTR pwszEventName, PDWORD pchSize, PDWORD pdwSignatureCount ); typedef HRESULT (WINAPI *PFN_WER_RUNTIME_EXCEPTION_DEBUGGER_LAUNCH)( PVOID pContext, const PWER_RUNTIME_EXCEPTION_INFORMATION pExceptionInformation, PBOOL pbIsCustomDebugger, PWSTR pwszDebuggerLaunch, PDWORD pchDebuggerLaunch, PBOOL pbIsDebuggerAutolaunch ); typedef HRESULT (WINAPI *PFN_WER_RUNTIME_EXCEPTION_EVENT_SIGNATURE)( PVOID pContext, const PWER_RUNTIME_EXCEPTION_INFORMATION pExceptionInformation, DWORD dwIndex, PWSTR pwszName, PDWORD pchName, PWSTR pwszValue, PDWORD pchValue ); HRESULT WINAPI WerRegisterRuntimeExceptionModule( PCWSTR pwszOutOfProcessCallbackDll, PVOID pContext ); HRESULT WINAPI WerUnregisterRuntimeExceptionModule( PCWSTR pwszOutOfProcessCallbackDll, PVOID pContext ); #endif /*(_WIN32_WINNT >= 0x0601)*/ typedef enum _REPORT_STORE_TYPES { E_STORE_USER_ARCHIVE = 0, E_STORE_USER_QUEUE, E_STORE_MACHINE_ARCHIVE, E_STORE_MACHINE_QUEUE, E_STORE_INVALID } REPORT_STORE_TYPES; typedef PVOID HREPORTSTORE, *PHREPORTSTORE; typedef struct _WER_REPORT_PARAMETER { WCHAR Name[WER_MAX_SIGNATURE_NAME_LENGTH + 1]; WCHAR Value[WER_MAX_PARAM_LENGTH]; }WER_REPORT_PARAMETER, PWER_REPORT_PARAMETER; typedef struct _WER_REPORT_SIGNATURE { WCHAR EventName[WER_MAX_EVENT_NAME_LENGTH + 1]; WER_REPORT_PARAMETER Parameters[WER_MAX_PARAM_COUNT]; } WER_REPORT_SIGNATURE, *PWER_REPORT_SIGNATURE; typedef struct _WER_REPORT_METADATA_V1 { WER_REPORT_SIGNATURE Signature; GUID BucketId; GUID ReportId; FILETIME CreationTime; ULONGLONG SizeInBytes; } WER_REPORT_METADATA_V1, *PWER_REPORT_METADATA_V1; typedef struct _WER_REPORT_METADATA_V2 { WER_REPORT_SIGNATURE Signature; GUID BucketId; GUID ReportId; FILETIME CreationTime; ULONGLONG SizeInBytes; WCHAR CabId[MAX_PATH]; DWORD ReportStatus; GUID ReportIntegratorId; DWORD NumberOfFiles; DWORD SizeOfFileNames; WCHAR *FileNames; } WER_REPORT_METADATA_V2, *PWER_REPORT_METADATA_V2; typedef struct _WER_REPORT_METADATA_V3 { WER_REPORT_SIGNATURE Signature; GUID BucketId; GUID ReportId; FILETIME CreationTime; ULONGLONG SizeInBytes; WCHAR CabId[MAX_PATH]; DWORD ReportStatus; GUID ReportIntegratorId; DWORD NumberOfFiles; DWORD SizeOfFileNames; WCHAR *FileNames; WCHAR FriendlyEventName[WER_MAX_FRIENDLY_EVENT_NAME_LENGTH]; WCHAR ApplicationName[WER_MAX_APPLICATION_NAME_LENGTH]; WCHAR ApplicationPath[MAX_PATH]; WCHAR Description[WER_MAX_DESCRIPTION_LENGTH]; WCHAR BucketIdString[WER_MAX_BUCKET_ID_STRING_LENGTH]; ULONGLONG LegacyBucketId; } WER_REPORT_METADATA_V3, *PWER_REPORT_METADATA_V3; HRESULT WINAPI WerStoreOpen(REPORT_STORE_TYPES repStoreType, PHREPORTSTORE phReportStore); VOID WINAPI WerStoreClose(HREPORTSTORE hReportStore); HRESULT WINAPI WerStoreGetFirstReportKey(HREPORTSTORE hReportStore, PCWSTR *ppszReportKey); HRESULT WINAPI WerStoreGetNextReportKey(HREPORTSTORE hReportStore, PCWSTR *ppszReportKey); HRESULT WINAPI WerStoreQueryReportMetadataV1(HREPORTSTORE hReportStore, PCWSTR pszReportKey, PWER_REPORT_METADATA_V1 pReportMetadata); HRESULT WINAPI WerStoreQueryReportMetadataV2(HREPORTSTORE hReportStore, PCWSTR pszReportKey, PWER_REPORT_METADATA_V2 pReportMetadata); HRESULT WINAPI WerStoreQueryReportMetadataV3(HREPORTSTORE hReportStore, PCWSTR pszReportKey, PWER_REPORT_METADATA_V3 pReportMetadata); VOID WINAPI WerFreeString(PCWSTR pwszStr); HRESULT WINAPI WerStorePurge(void); HRESULT WINAPI WerStoreGetReportCount(HREPORTSTORE hReportStore, DWORD *pdwReportCount); HRESULT WINAPI WerStoreGetSizeOnDisk(HREPORTSTORE hReportStore, ULONGLONG *pqwSizeInBytes); HRESULT WINAPI WerStoreUploadReport(HREPORTSTORE hReportStore, PCWSTR pszReportKey, DWORD dwFlags, PWER_SUBMIT_RESULT pSubmitResult); #ifdef __cplusplus } #endif #endif /*(_WIN32_WINNT >= 0x0600)*/ #endif /*_INC_WERAPI*/