diff options
author | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
---|---|---|
committer | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
commit | e611b132f9b8abe35b362e5870b74bce94a1e58e (patch) | |
tree | a5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/ntos/rtl/heappage.h | |
download | NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2 NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip |
Diffstat (limited to 'private/ntos/rtl/heappage.h')
-rw-r--r-- | private/ntos/rtl/heappage.h | 229 |
1 files changed, 229 insertions, 0 deletions
diff --git a/private/ntos/rtl/heappage.h b/private/ntos/rtl/heappage.h new file mode 100644 index 000000000..3e50cc769 --- /dev/null +++ b/private/ntos/rtl/heappage.h @@ -0,0 +1,229 @@ + +// +// heappage.h +// + +#ifndef _HEAP_PAGE_H_ +#define _HEAP_PAGE_H_ + +// +// #defining DEBUG_PAGE_HEAP will cause the page heap manager +// to be compiled. Only #define this flag if NOT kernel mode. +// Probably want to define this just for checked-build (DBG). +// + +#ifndef NTOS_KERNEL_RUNTIME + #if DBG + #define DEBUG_PAGE_HEAP 1 + #endif +#endif + +#include "heappagi.h" + +#ifndef DEBUG_PAGE_HEAP + +// +// These macro-based hooks should be defined to nothing so they +// simply "go away" during compile if the debug heap manager is +// not desired (retail builds). +// + +#define IF_DEBUG_PAGE_HEAP_THEN_RETURN( Handle, ReturnThis ) +#define IF_DEBUG_PAGE_HEAP_THEN_CALL( Handle, CallThis ) +#define IF_DEBUG_PAGE_HEAP_THEN_BREAK( Handle, Text, ReturnThis ) + +#define HEAP_FLAG_PAGE_ALLOCS 0 + +#else // DEBUG_PAGE_HEAP + +// +// The following definitions and prototypes are the external interface +// for hooking the debug heap manager in the retail heap manager. +// + +#define HEAP_FLAG_PAGE_ALLOCS 0x01000000 + +#define HEAP_PROTECTION_ENABLED 0x02000000 +#define HEAP_BREAK_WHEN_OUT_OF_VM 0x04000000 +#define HEAP_NO_ALIGNMENT 0x08000000 + + +#define IS_DEBUG_PAGE_HEAP_HANDLE( HeapHandle ) \ + (((PHEAP)(HeapHandle))->ForceFlags & HEAP_FLAG_PAGE_ALLOCS ) + + +#define IF_DEBUG_PAGE_HEAP_THEN_RETURN( Handle, ReturnThis ) \ + { \ + if ( IS_DEBUG_PAGE_HEAP_HANDLE( Handle )) \ + { \ + return ReturnThis; \ + } \ + } + + +#define IF_DEBUG_PAGE_HEAP_THEN_CALL( Handle, CallThis ) \ + { \ + if ( IS_DEBUG_PAGE_HEAP_HANDLE( Handle )) \ + { \ + CallThis; \ + return; \ + } \ + } + + +#define IF_DEBUG_PAGE_HEAP_THEN_BREAK( Handle, Text, ReturnThis ) \ + { \ + if ( IS_DEBUG_PAGE_HEAP_HANDLE( Handle )) \ + { \ + RtlpDebugPageHeapBreak( Text ); \ + return ReturnThis; \ + } \ + } + + +PVOID +RtlpDebugPageHeapCreate( + IN ULONG Flags, + IN PVOID HeapBase, + IN ULONG ReserveSize, + IN ULONG CommitSize, + IN PVOID Lock, + IN PRTL_HEAP_PARAMETERS Parameters + ); + +PVOID +RtlpDebugPageHeapAllocate( + IN PVOID HeapHandle, + IN ULONG Flags, + IN ULONG Size + ); + +BOOLEAN +RtlpDebugPageHeapFree( + IN PVOID HeapHandle, + IN ULONG Flags, + IN PVOID Address + ); + +PVOID +RtlpDebugPageHeapReAllocate( + IN PVOID HeapHandle, + IN ULONG Flags, + IN PVOID Address, + IN ULONG Size + ); + +PVOID +RtlpDebugPageHeapDestroy( + IN PVOID HeapHandle + ); + +ULONG +RtlpDebugPageHeapSize( + IN PVOID HeapHandle, + IN ULONG Flags, + IN PVOID Address + ); + +ULONG +RtlpDebugPageHeapGetProcessHeaps( + ULONG NumberOfHeaps, + PVOID *ProcessHeaps + ); + +ULONG +RtlpDebugPageHeapCompact( + IN PVOID HeapHandle, + IN ULONG Flags + ); + +BOOLEAN +RtlpDebugPageHeapValidate( + IN PVOID HeapHandle, + IN ULONG Flags, + IN PVOID Address + ); + +NTSTATUS +RtlpDebugPageHeapWalk( + IN PVOID HeapHandle, + IN OUT PRTL_HEAP_WALK_ENTRY Entry + ); + +BOOLEAN +RtlpDebugPageHeapLock( + IN PVOID HeapHandle + ); + +BOOLEAN +RtlpDebugPageHeapUnlock( + IN PVOID HeapHandle + ); + +BOOLEAN +RtlpDebugPageHeapSetUserValue( + IN PVOID HeapHandle, + IN ULONG Flags, + IN PVOID Address, + IN PVOID UserValue + ); + +BOOLEAN +RtlpDebugPageHeapGetUserInfo( + IN PVOID HeapHandle, + IN ULONG Flags, + IN PVOID Address, + OUT PVOID* UserValue, + OUT PULONG UserFlags + ); + +BOOLEAN +RtlpDebugPageHeapSetUserFlags( + IN PVOID HeapHandle, + IN ULONG Flags, + IN PVOID Address, + IN ULONG UserFlagsReset, + IN ULONG UserFlagsSet + ); + +BOOLEAN +RtlpDebugPageHeapSerialize( + IN PVOID HeapHandle + ); + +NTSTATUS +RtlpDebugPageHeapExtend( + IN PVOID HeapHandle, + IN ULONG Flags, + IN PVOID Base, + IN ULONG Size + ); + +NTSTATUS +RtlpDebugPageHeapZero( + IN PVOID HeapHandle, + IN ULONG Flags + ); + +NTSTATUS +RtlpDebugPageHeapUsage( + IN PVOID HeapHandle, + IN ULONG Flags, + IN OUT PRTL_HEAP_USAGE Usage + ); + +BOOLEAN +RtlpDebugPageHeapIsLocked( + IN PVOID HeapHandle + ); + +VOID +RtlpDebugPageHeapBreak( + PCH Text + ); + + +#endif // DEBUG_PAGE_HEAP + +#endif // _HEAP_PAGE_H_ + |