|
|
/*++ BUILD Version: 0001 // Increment this if a change has global effects
Copyright (c) Microsoft Corporation. All rights reserved.
Module Name:
verifier.h
Abstract:
Include file for application verifier routines that are callable by user mode code.
Author:
Silviu Calinoiu (SilviuC) 23-Jan-2002
Environment:
These routines are callable only when application verifier is enabled for the calling process.
Revision History:
--*/
#ifndef _AVRF_
#define _AVRF_
//
// VERIFIER SDK
//
// This header contains the declarations of all APIs exported by
// base verifier (verifier.dll). It is not expected that normal
// applications will link statically verifier.dll. The typical
// scenario for a verifier (let's say COM verifier) is to dynamically
// discover if application verifier is enabled (check if
// FLG_APPLICATION_VERIFIER global flag is set) and then load verifier.dll
// and call GetProcAddress() to get all the entry points it is interested in.
// This is the reason all exports have also a typedef for the function pointer
// so that it is convenient to get this entry points at runtime.
//
//
// Runtime query/set functions for verifier flags.
//
typedef NTSTATUS (* VERIFIER_QUERY_RUNTIME_FLAGS_FUNCTION) ( OUT PLOGICAL VerifierEnabled, OUT PULONG VerifierFlags );
typedef NTSTATUS (* VERIFIER_SET_RUNTIME_FLAGS_FUNCTION) ( IN ULONG VerifierFlags );
NTSTATUS VerifierQueryRuntimeFlags ( OUT PLOGICAL VerifierEnabled, OUT PULONG VerifierFlags );
NTSTATUS VerifierSetRuntimeFlags ( IN ULONG VerifierFlags );
//
// RPC read-only page heap create/destroy APIs.
//
typedef PVOID (* VERIFIER_CREATE_RPC_PAGE_HEAP_FUNCTION) ( IN ULONG Flags, IN PVOID HeapBase OPTIONAL, IN SIZE_T ReserveSize OPTIONAL, IN SIZE_T CommitSize OPTIONAL, IN PVOID Lock OPTIONAL, IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL );
typedef PVOID (* VERIFIER_DESTROY_RPC_PAGE_HEAP_FUNCTION) ( IN PVOID HeapHandle );
PVOID VerifierCreateRpcPageHeap ( IN ULONG Flags, IN PVOID HeapBase OPTIONAL, IN SIZE_T ReserveSize OPTIONAL, IN SIZE_T CommitSize OPTIONAL, IN PVOID Lock OPTIONAL, IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL );
PVOID VerifierDestroyRpcPageHeap ( IN PVOID HeapHandle );
//
// Fault injection management
//
#define FAULT_INJECTION_CLASS_WAIT_APIS 0
#define FAULT_INJECTION_CLASS_HEAP_ALLOC_APIS 1
#define FAULT_INJECTION_CLASS_VIRTUAL_ALLOC_APIS 2
#define FAULT_INJECTION_CLASS_REGISTRY_APIS 3
#define FAULT_INJECTION_CLASS_FILE_APIS 4
#define FAULT_INJECTION_CLASS_EVENT_APIS 5
#define FAULT_INJECTION_CLASS_MAP_VIEW_APIS 6
#define FAULT_INJECTION_CLASS_OLE_ALLOC_APIS 7
#define FAULT_INJECTION_INVALID_CLASS 8
typedef VOID (* VERIFIER_SET_FAULT_INJECTION_PROBABILITY) ( ULONG Class, ULONG Probability );
VOID VerifierSetFaultInjectionProbability ( ULONG Class, ULONG Probability );
typedef ULONG (* VERIFIER_ENABLE_FAULT_INJECTION_TARGET_RANGE_FUNCTION) ( IN PVOID StartAddress, IN PVOID EndAddress ); typedef VOID (* VERIFIER_DISABLE_FAULT_INJECTION_TARGET_RANGE_FUNCTION) ( IN ULONG RangeIndex ); typedef ULONG (* VERIFIER_ENABLE_FAULT_INJECTION_EXCLUSION_RANGE_FUNCTION) ( IN PVOID StartAddress, IN PVOID EndAddress );
typedef VOID (* VERIFIER_DISABLE_FAULT_INJECTION_EXCLUSION_RANGE_FUNCTION) ( IN ULONG RangeIndex ); ULONG VerifierEnableFaultInjectionTargetRange ( PVOID StartAddress, PVOID EndAddress );
VOID VerifierDisableFaultInjectionTargetRange ( ULONG RangeIndex );
ULONG VerifierEnableFaultInjectionExclusionRange ( PVOID StartAddress, PVOID EndAddress );
VOID VerifierDisableFaultInjectionExclusionRange ( ULONG RangeIndex );
//
// DLL related information
//
typedef LOGICAL (* VERIFIER_IS_DLL_ENTRY_ACTIVE_FUNCTION) ( OUT PVOID * Reserved ); LOGICAL VerifierIsDllEntryActive ( OUT PVOID * Reserved );
//
// Locks counter
//
typedef LOGICAL (* VERIFIER_IS_CURRENT_THREAD_HOLDING_LOCKS_FUNCTION) ( VOID );
LOGICAL VerifierIsCurrentThreadHoldingLocks ( VOID ); //
// Free memory notifications
//
typedef NTSTATUS (* VERIFIER_FREE_MEMORY_CALLBACK) ( PVOID Address, SIZE_T Size, PVOID Context );
typedef NTSTATUS (* VERIFIER_ADD_FREE_MEMORY_CALLBACK_FUNCTION) ( VERIFIER_FREE_MEMORY_CALLBACK Callback );
typedef NTSTATUS (* VERIFIER_DELETE_FREE_MEMORY_CALLBACK_FUNCTION) ( VERIFIER_FREE_MEMORY_CALLBACK Callback );
NTSTATUS VerifierAddFreeMemoryCallback ( VERIFIER_FREE_MEMORY_CALLBACK Callback );
NTSTATUS VerifierDeleteFreeMemoryCallback ( VERIFIER_FREE_MEMORY_CALLBACK Callback );
//
// Verifier stops and logging.
//
typedef NTSTATUS (* VERIFIER_LOG_MESSAGE_FUNCTION) ( PCHAR Message, ... );
typedef VOID (* VERIFIER_STOP_MESSAGE_FUNCTION) ( ULONG_PTR Code, PCHAR Message, ULONG_PTR Param1, PCHAR Description1, ULONG_PTR Param2, PCHAR Description2, ULONG_PTR Param3, PCHAR Description3, ULONG_PTR Param4, PCHAR Description4 );
NTSTATUS VerifierLogMessage ( PCHAR Message, ... );
VOID VerifierStopMessage ( ULONG_PTR Code, PCHAR Message, ULONG_PTR Param1, PCHAR Description1, ULONG_PTR Param2, PCHAR Description2, ULONG_PTR Param3, PCHAR Description3, ULONG_PTR Param4, PCHAR Description4 );
#endif // _AVRF_
|