reactos/sdk/include/reactos/verifier.h
2022-11-01 21:26:05 +01:00

116 lines
4.3 KiB
C

#ifndef REACTOS_VERIFIER_H
#define REACTOS_VERIFIER_H
#define DLL_PROCESS_VERIFIER 4
typedef VOID (NTAPI* RTL_VERIFIER_DLL_LOAD_CALLBACK) (PWSTR DllName, PVOID DllBase, SIZE_T DllSize, PVOID Reserved);
typedef VOID (NTAPI* RTL_VERIFIER_DLL_UNLOAD_CALLBACK) (PWSTR DllName, PVOID DllBase, SIZE_T DllSize, PVOID Reserved);
typedef VOID (NTAPI* RTL_VERIFIER_NTDLLHEAPFREE_CALLBACK) (PVOID AllocationBase, SIZE_T AllocationSize);
typedef struct _RTL_VERIFIER_THUNK_DESCRIPTOR {
PCHAR ThunkName;
PVOID ThunkOldAddress;
PVOID ThunkNewAddress;
} RTL_VERIFIER_THUNK_DESCRIPTOR, *PRTL_VERIFIER_THUNK_DESCRIPTOR;
typedef struct _RTL_VERIFIER_DLL_DESCRIPTOR {
PWCHAR DllName;
DWORD DllFlags;
PVOID DllAddress;
PRTL_VERIFIER_THUNK_DESCRIPTOR DllThunks;
} RTL_VERIFIER_DLL_DESCRIPTOR, *PRTL_VERIFIER_DLL_DESCRIPTOR;
typedef struct _RTL_VERIFIER_PROVIDER_DESCRIPTOR {
// Provider fields
DWORD Length;
PRTL_VERIFIER_DLL_DESCRIPTOR ProviderDlls;
RTL_VERIFIER_DLL_LOAD_CALLBACK ProviderDllLoadCallback;
RTL_VERIFIER_DLL_UNLOAD_CALLBACK ProviderDllUnloadCallback;
// Verifier fields
PWSTR VerifierImage;
DWORD VerifierFlags;
DWORD VerifierDebug;
PVOID RtlpGetStackTraceAddress;
PVOID RtlpDebugPageHeapCreate;
PVOID RtlpDebugPageHeapDestroy;
// Provider field
RTL_VERIFIER_NTDLLHEAPFREE_CALLBACK ProviderNtdllHeapFreeCallback;
} RTL_VERIFIER_PROVIDER_DESCRIPTOR, *PRTL_VERIFIER_PROVIDER_DESCRIPTOR;
// VerifierFlags
#define RTL_VRF_FLG_FULL_PAGE_HEAP 0x00000001
#define RTL_VRF_FLG_RESERVED_DONOTUSE 0x00000002
#define RTL_VRF_FLG_HANDLE_CHECKS 0x00000004
#define RTL_VRF_FLG_STACK_CHECKS 0x00000008
#define RTL_VRF_FLG_APPCOMPAT_CHECKS 0x00000010
#define RTL_VRF_FLG_TLS_CHECKS 0x00000020
#define RTL_VRF_FLG_DIRTY_STACKS 0x00000040
#define RTL_VRF_FLG_RPC_CHECKS 0x00000080
#define RTL_VRF_FLG_COM_CHECKS 0x00000100
#define RTL_VRF_FLG_DANGEROUS_APIS 0x00000200
#define RTL_VRF_FLG_RACE_CHECKS 0x00000400
#define RTL_VRF_FLG_DEADLOCK_CHECKS 0x00000800
#define RTL_VRF_FLG_FIRST_CHANCE_EXCEPTION_CHECKS 0x00001000
#define RTL_VRF_FLG_VIRTUAL_MEM_CHECKS 0x00002000
#define RTL_VRF_FLG_ENABLE_LOGGING 0x00004000
#define RTL_VRF_FLG_FAST_FILL_HEAP 0x00008000
#define RTL_VRF_FLG_VIRTUAL_SPACE_TRACKING 0x00010000
#define RTL_VRF_FLG_ENABLED_SYSTEM_WIDE 0x00020000
#define RTL_VRF_FLG_MISCELLANEOUS_CHECKS 0x00020000
#define RTL_VRF_FLG_LOCK_CHECKS 0x00040000
// VerifierDebug
#define RTL_VRF_DBG_SHOWSNAPS 0x00001
#define RTL_VRF_DBG_SHOWFOUNDEXPORTS 0x00002
#define RTL_VRF_DBG_SHOWVERIFIEDEXPORTS 0x00004
#define RTL_VRF_DBG_LISTPROVIDERS 0x00008
#define RTL_VRF_DBG_SHOWCHAINING 0x00010
#define RTL_VRF_DBG_SHOWCHAINING_DEBUG 0x00020
#define RTL_VRF_DBG_CS_SPLAYTREE 0x00200
#define RTL_VRF_DBG_CS_DUMP_SPLAYTREE 0x00400
#define RTL_VRF_DBG_CS_CREATE_DELETE 0x00800
#define RTL_VRF_DBG_VERIFIER_LOGCALLS 0x04000
#define RTL_VRF_DBG_VERIFIER_SHOWDYNTHUNKS 0x08000
#define RTL_VRF_DBG_ENTRYPOINT_HOOKS 0x10000
#define RTL_VRF_DBG_ENTRYPOINT_CALLS 0x20000
// Verifier stop codes
#define APPLICATION_VERIFIER_CORRUPT_HEAP_POINTER 0x0006
#define APPLICATION_VERIFIER_DOUBLE_FREE 0x0007
#define APPLICATION_VERIFIER_EXCEPTION_WHILE_VERIFYING_BLOCK_HEADER 0x000B
#define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK_AFTER_FREE 0x000D
#define APPLICATION_VERIFIER_CORRUPTED_INFIX_PATTERN 0x000E
#define APPLICATION_VERIFIER_CORRUPTED_SUFFIX_PATTERN 0x000F
#define APPLICATION_VERIFIER_CORRUPTED_START_STAMP 0x0010
#define APPLICATION_VERIFIER_CORRUPTED_END_STAMP 0x0011
#define APPLICATION_VERIFIER_CORRUPTED_PREFIX_PATTERN 0x0012
VOID NTAPI
RtlApplicationVerifierStop(
_In_ ULONG_PTR Code,
_In_ PCSTR Message,
_In_ PVOID Value1,
_In_ PCSTR Description1,
_In_ PVOID Value2,
_In_ PCSTR Description2,
_In_ PVOID Value3,
_In_ PCSTR Description3,
_In_ PVOID Value4,
_In_ PCSTR Description4);
#endif // REACTOS_VERIFIER_H