00001
00002
00003
00004
00005
00006
#ifndef _HEAP_PAGE_H_
00007
#define _HEAP_PAGE_H_
00008
00009
00010
00011
00012
00013
00014
00015
#ifndef NTOS_KERNEL_RUNTIME
00016
00017 #define DEBUG_PAGE_HEAP 1
00018
00019
#endif
00020
00021
#include "heappagi.h"
00022
00023
#ifndef DEBUG_PAGE_HEAP
00024
00025
00026
00027
00028
00029
00030
00031
#define IS_DEBUG_PAGE_HEAP_HANDLE( HeapHandle ) FALSE
00032
#define IF_DEBUG_PAGE_HEAP_THEN_RETURN( Handle, ReturnThis )
00033
#define IF_DEBUG_PAGE_HEAP_THEN_CALL( Handle, CallThis )
00034
#define IF_DEBUG_PAGE_HEAP_THEN_BREAK( Handle, Text, ReturnThis )
00035
00036
#define HEAP_FLAG_PAGE_ALLOCS 0
00037
00038
#define RtlpDebugPageHeapValidate( HeapHandle, Flags, Address ) TRUE
00039
00040
#else // DEBUG_PAGE_HEAP
00041
00042
00043
00044
00045
00046
00047 #define HEAP_FLAG_PAGE_ALLOCS 0x01000000
00048
00049 #define HEAP_PROTECTION_ENABLED 0x02000000
00050 #define HEAP_BREAK_WHEN_OUT_OF_VM 0x04000000
00051 #define HEAP_NO_ALIGNMENT 0x08000000
00052
00053
00054 #define IS_DEBUG_PAGE_HEAP_HANDLE( HeapHandle ) \
00055
(((PHEAP)(HeapHandle))->ForceFlags & HEAP_FLAG_PAGE_ALLOCS )
00056
00057
00058 #define IF_DEBUG_PAGE_HEAP_THEN_RETURN( Handle, ReturnThis ) \
00059
{ \
00060
if ( IS_DEBUG_PAGE_HEAP_HANDLE( Handle )) \
00061
{ \
00062
return ReturnThis; \
00063
} \
00064
}
00065
00066
00067 #define IF_DEBUG_PAGE_HEAP_THEN_CALL( Handle, CallThis ) \
00068
{ \
00069
if ( IS_DEBUG_PAGE_HEAP_HANDLE( Handle )) \
00070
{ \
00071
CallThis; \
00072
return; \
00073
} \
00074
}
00075
00076
00077 #define IF_DEBUG_PAGE_HEAP_THEN_BREAK( Handle, Text, ReturnThis ) \
00078
{ \
00079
if ( IS_DEBUG_PAGE_HEAP_HANDLE( Handle )) \
00080
{ \
00081
RtlpDebugPageHeapBreak( Text ); \
00082
return ReturnThis; \
00083
} \
00084
}
00085
00086
00087 PVOID
00088
RtlpDebugPageHeapCreate(
00089 IN ULONG Flags,
00090 IN PVOID HeapBase,
00091 IN SIZE_T ReserveSize,
00092 IN SIZE_T CommitSize,
00093 IN PVOID Lock,
00094 IN PRTL_HEAP_PARAMETERS Parameters
00095 );
00096
00097 PVOID
00098
RtlpDebugPageHeapAllocate(
00099 IN PVOID HeapHandle,
00100 IN ULONG Flags,
00101 IN SIZE_T Size
00102 );
00103
00104 BOOLEAN
00105
RtlpDebugPageHeapFree(
00106 IN PVOID HeapHandle,
00107 IN ULONG Flags,
00108 IN PVOID Address
00109 );
00110
00111 PVOID
00112
RtlpDebugPageHeapReAllocate(
00113 IN PVOID HeapHandle,
00114 IN ULONG Flags,
00115 IN PVOID Address,
00116 IN SIZE_T Size
00117 );
00118
00119 PVOID
00120
RtlpDebugPageHeapDestroy(
00121 IN PVOID HeapHandle
00122 );
00123
00124 SIZE_T
00125
RtlpDebugPageHeapSize(
00126 IN PVOID HeapHandle,
00127 IN ULONG Flags,
00128 IN PVOID Address
00129 );
00130
00131 ULONG
00132
RtlpDebugPageHeapGetProcessHeaps(
00133 ULONG NumberOfHeaps,
00134 PVOID *ProcessHeaps
00135 );
00136
00137 ULONG
00138
RtlpDebugPageHeapCompact(
00139 IN PVOID HeapHandle,
00140 IN ULONG Flags
00141 );
00142
00143 BOOLEAN
00144
RtlpDebugPageHeapValidate(
00145 IN PVOID HeapHandle,
00146 IN ULONG Flags,
00147 IN PVOID Address
00148 );
00149
00150
NTSTATUS
00151
RtlpDebugPageHeapWalk(
00152 IN PVOID HeapHandle,
00153 IN OUT PRTL_HEAP_WALK_ENTRY Entry
00154 );
00155
00156 BOOLEAN
00157
RtlpDebugPageHeapLock(
00158 IN PVOID HeapHandle
00159 );
00160
00161 BOOLEAN
00162
RtlpDebugPageHeapUnlock(
00163 IN PVOID HeapHandle
00164 );
00165
00166 BOOLEAN
00167
RtlpDebugPageHeapSetUserValue(
00168 IN PVOID HeapHandle,
00169 IN ULONG Flags,
00170 IN PVOID Address,
00171 IN PVOID UserValue
00172 );
00173
00174 BOOLEAN
00175
RtlpDebugPageHeapGetUserInfo(
00176 IN PVOID HeapHandle,
00177 IN ULONG Flags,
00178 IN PVOID Address,
00179 OUT PVOID* UserValue,
00180 OUT PULONG UserFlags
00181 );
00182
00183 BOOLEAN
00184
RtlpDebugPageHeapSetUserFlags(
00185 IN PVOID HeapHandle,
00186 IN ULONG Flags,
00187 IN PVOID Address,
00188 IN ULONG UserFlagsReset,
00189 IN ULONG UserFlagsSet
00190 );
00191
00192 BOOLEAN
00193
RtlpDebugPageHeapSerialize(
00194 IN PVOID HeapHandle
00195 );
00196
00197
NTSTATUS
00198
RtlpDebugPageHeapExtend(
00199 IN PVOID HeapHandle,
00200 IN ULONG Flags,
00201 IN PVOID Base,
00202 IN SIZE_T Size
00203 );
00204
00205
NTSTATUS
00206
RtlpDebugPageHeapZero(
00207 IN PVOID HeapHandle,
00208 IN ULONG Flags
00209 );
00210
00211
NTSTATUS
00212
RtlpDebugPageHeapReset(
00213 IN PVOID HeapHandle,
00214 IN ULONG Flags
00215 );
00216
00217
NTSTATUS
00218
RtlpDebugPageHeapUsage(
00219 IN PVOID HeapHandle,
00220 IN ULONG Flags,
00221 IN OUT PRTL_HEAP_USAGE Usage
00222 );
00223
00224 BOOLEAN
00225
RtlpDebugPageHeapIsLocked(
00226 IN PVOID HeapHandle
00227 );
00228
00229
VOID
00230
RtlpDebugPageHeapBreak(
00231 PCH Text
00232 );
00233
00234
00235
#endif // DEBUG_PAGE_HEAP
00236
00237
#endif // _HEAP_PAGE_H_