heappage.h
Upload User: caisha3
Upload Date: 2013-09-21
Package Size: 208739k
Code Size: 5k
Category:

Windows Develop

Development Platform:

Visual C++

  1. //
  2. //  heappage.h
  3. //
  4. #ifndef _HEAP_PAGE_H_
  5. #define _HEAP_PAGE_H_
  6. //
  7. //  #defining DEBUG_PAGE_HEAP will cause the page heap manager
  8. //  to be compiled.  Only #define this flag if NOT kernel mode.
  9. //  Probably want to define this just for checked-build (DBG).
  10. //
  11. #ifndef NTOS_KERNEL_RUNTIME
  12. //    #if DBG
  13.         #define DEBUG_PAGE_HEAP 1
  14. //    #endif
  15. #endif
  16. #include "heappagi.h"
  17. #ifndef DEBUG_PAGE_HEAP
  18. //
  19. //  These macro-based hooks should be defined to nothing so they
  20. //  simply "go away" during compile if the debug heap manager is
  21. //  not desired (retail builds).
  22. //
  23. #define IS_DEBUG_PAGE_HEAP_HANDLE( HeapHandle ) FALSE
  24. #define IF_DEBUG_PAGE_HEAP_THEN_RETURN( Handle, ReturnThis )
  25. #define IF_DEBUG_PAGE_HEAP_THEN_CALL( Handle, CallThis )
  26. #define IF_DEBUG_PAGE_HEAP_THEN_BREAK( Handle, Text, ReturnThis )
  27. #define HEAP_FLAG_PAGE_ALLOCS 0
  28. #define RtlpDebugPageHeapValidate( HeapHandle, Flags, Address ) TRUE
  29. #else // DEBUG_PAGE_HEAP
  30. //
  31. //  The following definitions and prototypes are the external interface
  32. //  for hooking the debug heap manager in the retail heap manager.
  33. //
  34. #define HEAP_FLAG_PAGE_ALLOCS       0x01000000
  35. #define HEAP_PROTECTION_ENABLED     0x02000000
  36. #define HEAP_BREAK_WHEN_OUT_OF_VM   0x04000000
  37. #define HEAP_NO_ALIGNMENT           0x08000000
  38. #define IS_DEBUG_PAGE_HEAP_HANDLE( HeapHandle ) 
  39.             (((PHEAP)(HeapHandle))->ForceFlags & HEAP_FLAG_PAGE_ALLOCS )
  40. #define IF_DEBUG_PAGE_HEAP_THEN_RETURN( Handle, ReturnThis )                
  41.             {                                                               
  42.             if ( IS_DEBUG_PAGE_HEAP_HANDLE( Handle ))                       
  43.                 {                                                           
  44.                 return ReturnThis;                                          
  45.                 }                                                           
  46.             }
  47. #define IF_DEBUG_PAGE_HEAP_THEN_CALL( Handle, CallThis )                    
  48.             {                                                               
  49.             if ( IS_DEBUG_PAGE_HEAP_HANDLE( Handle ))                       
  50.                 {                                                           
  51.                 CallThis;                                                   
  52.                 return;                                                     
  53.                 }                                                           
  54.             }
  55. #define IF_DEBUG_PAGE_HEAP_THEN_BREAK( Handle, Text, ReturnThis )           
  56.             {                                                               
  57.             if ( IS_DEBUG_PAGE_HEAP_HANDLE( Handle ))                       
  58.                 {                                                           
  59.                 RtlpDebugPageHeapBreak( Text );                             
  60.                 return ReturnThis;                                          
  61.                 }                                                           
  62.             }
  63. PVOID
  64. RtlpDebugPageHeapCreate(
  65.     IN ULONG Flags,
  66.     IN PVOID HeapBase,
  67.     IN SIZE_T ReserveSize,
  68.     IN SIZE_T CommitSize,
  69.     IN PVOID Lock,
  70.     IN PRTL_HEAP_PARAMETERS Parameters
  71.     );
  72. PVOID
  73. RtlpDebugPageHeapAllocate(
  74.     IN PVOID HeapHandle,
  75.     IN ULONG Flags,
  76.     IN SIZE_T Size
  77.     );
  78. BOOLEAN
  79. RtlpDebugPageHeapFree(
  80.     IN PVOID HeapHandle,
  81.     IN ULONG Flags,
  82.     IN PVOID Address
  83.     );
  84. PVOID
  85. RtlpDebugPageHeapReAllocate(
  86.     IN PVOID HeapHandle,
  87.     IN ULONG Flags,
  88.     IN PVOID Address,
  89.     IN SIZE_T Size
  90.     );
  91. PVOID
  92. RtlpDebugPageHeapDestroy(
  93.     IN PVOID HeapHandle
  94.     );
  95. SIZE_T
  96. RtlpDebugPageHeapSize(
  97.     IN PVOID HeapHandle,
  98.     IN ULONG Flags,
  99.     IN PVOID Address
  100.     );
  101. ULONG
  102. RtlpDebugPageHeapGetProcessHeaps(
  103.     ULONG NumberOfHeaps,
  104.     PVOID *ProcessHeaps
  105.     );
  106. ULONG
  107. RtlpDebugPageHeapCompact(
  108.     IN PVOID HeapHandle,
  109.     IN ULONG Flags
  110.     );
  111. BOOLEAN
  112. RtlpDebugPageHeapValidate(
  113.     IN PVOID HeapHandle,
  114.     IN ULONG Flags,
  115.     IN PVOID Address
  116.     );
  117. NTSTATUS
  118. RtlpDebugPageHeapWalk(
  119.     IN PVOID HeapHandle,
  120.     IN OUT PRTL_HEAP_WALK_ENTRY Entry
  121.     );
  122. BOOLEAN
  123. RtlpDebugPageHeapLock(
  124.     IN PVOID HeapHandle
  125.     );
  126. BOOLEAN
  127. RtlpDebugPageHeapUnlock(
  128.     IN PVOID HeapHandle
  129.     );
  130. BOOLEAN
  131. RtlpDebugPageHeapSetUserValue(
  132.     IN PVOID HeapHandle,
  133.     IN ULONG Flags,
  134.     IN PVOID Address,
  135.     IN PVOID UserValue
  136.     );
  137. BOOLEAN
  138. RtlpDebugPageHeapGetUserInfo(
  139.     IN  PVOID  HeapHandle,
  140.     IN  ULONG  Flags,
  141.     IN  PVOID  Address,
  142.     OUT PVOID* UserValue,
  143.     OUT PULONG UserFlags
  144.     );
  145. BOOLEAN
  146. RtlpDebugPageHeapSetUserFlags(
  147.     IN PVOID HeapHandle,
  148.     IN ULONG Flags,
  149.     IN PVOID Address,
  150.     IN ULONG UserFlagsReset,
  151.     IN ULONG UserFlagsSet
  152.     );
  153. BOOLEAN
  154. RtlpDebugPageHeapSerialize(
  155.     IN PVOID HeapHandle
  156.     );
  157. NTSTATUS
  158. RtlpDebugPageHeapExtend(
  159.     IN PVOID HeapHandle,
  160.     IN ULONG Flags,
  161.     IN PVOID Base,
  162.     IN SIZE_T Size
  163.     );
  164. NTSTATUS
  165. RtlpDebugPageHeapZero(
  166.     IN PVOID HeapHandle,
  167.     IN ULONG Flags
  168.     );
  169. NTSTATUS
  170. RtlpDebugPageHeapReset(
  171.     IN PVOID HeapHandle,
  172.     IN ULONG Flags
  173.     );
  174. NTSTATUS
  175. RtlpDebugPageHeapUsage(
  176.     IN PVOID HeapHandle,
  177.     IN ULONG Flags,
  178.     IN OUT PRTL_HEAP_USAGE Usage
  179.     );
  180. BOOLEAN
  181. RtlpDebugPageHeapIsLocked(
  182.     IN PVOID HeapHandle
  183.     );
  184. VOID
  185. RtlpDebugPageHeapBreak(
  186.     PCH Text
  187.     );
  188. #endif // DEBUG_PAGE_HEAP
  189. #endif // _HEAP_PAGE_H_