1 /******************************************************************************
3 ******************************************************************************/
6 #define EX_RUNDOWN_ACTIVE 0x1
7 #define EX_RUNDOWN_COUNT_SHIFT 0x1
8 #define EX_RUNDOWN_COUNT_INC (1 << EX_RUNDOWN_COUNT_SHIFT)
10 typedef struct _FAST_MUTEX
{
16 } FAST_MUTEX
, *PFAST_MUTEX
;
18 typedef enum _SUITE_TYPE
{
24 SmallBusinessRestricted
,
38 typedef enum _EX_POOL_PRIORITY
{
40 LowPoolPrioritySpecialPoolOverrun
= 8,
41 LowPoolPrioritySpecialPoolUnderrun
= 9,
42 NormalPoolPriority
= 16,
43 NormalPoolPrioritySpecialPoolOverrun
= 24,
44 NormalPoolPrioritySpecialPoolUnderrun
= 25,
45 HighPoolPriority
= 32,
46 HighPoolPrioritySpecialPoolOverrun
= 40,
47 HighPoolPrioritySpecialPoolUnderrun
= 41
50 #if !defined(_WIN64) && (defined(_NTDDK_) || defined(_NTIFS_) || defined(_NDIS_))
51 #define LOOKASIDE_ALIGN
53 #define LOOKASIDE_ALIGN /* FIXME: DECLSPEC_CACHEALIGN */
56 typedef struct _LOOKASIDE_LIST_EX
*PLOOKASIDE_LIST_EX
;
59 (NTAPI
*PALLOCATE_FUNCTION
)(
60 IN POOL_TYPE PoolType
,
61 IN SIZE_T NumberOfBytes
,
65 (NTAPI
*PALLOCATE_FUNCTION_EX
)(
66 IN POOL_TYPE PoolType
,
67 IN SIZE_T NumberOfBytes
,
69 IN OUT PLOOKASIDE_LIST_EX Lookaside
);
72 (NTAPI
*PFREE_FUNCTION
)(
76 (NTAPI
*PFREE_FUNCTION_EX
)(
78 IN OUT PLOOKASIDE_LIST_EX Lookaside
);
81 (NTAPI CALLBACK_FUNCTION
)(
82 IN PVOID CallbackContext OPTIONAL
,
83 IN PVOID Argument1 OPTIONAL
,
84 IN PVOID Argument2 OPTIONAL
);
85 typedef CALLBACK_FUNCTION
*PCALLBACK_FUNCTION
;
87 #define GENERAL_LOOKASIDE_LAYOUT \
89 SLIST_HEADER ListHead; \
90 SINGLE_LIST_ENTRY SingleListHead; \
93 USHORT MaximumDepth; \
94 ULONG TotalAllocates; \
96 ULONG AllocateMisses; \
110 PALLOCATE_FUNCTION_EX AllocateEx; \
111 PALLOCATE_FUNCTION Allocate; \
115 PFREE_FUNCTION_EX FreeEx; \
116 PFREE_FUNCTION Free; \
119 LIST_ENTRY ListEntry; \
120 ULONG LastTotalAllocates; \
122 ULONG LastAllocateMisses; \
123 ULONG LastAllocateHits; \
127 typedef struct LOOKASIDE_ALIGN _GENERAL_LOOKASIDE
{
128 GENERAL_LOOKASIDE_LAYOUT
129 } GENERAL_LOOKASIDE
, *PGENERAL_LOOKASIDE
;
131 typedef struct _GENERAL_LOOKASIDE_POOL
{
132 GENERAL_LOOKASIDE_LAYOUT
133 } GENERAL_LOOKASIDE_POOL
, *PGENERAL_LOOKASIDE_POOL
;
135 #define LOOKASIDE_CHECK(f) \
136 C_ASSERT(FIELD_OFFSET(GENERAL_LOOKASIDE,f) == FIELD_OFFSET(GENERAL_LOOKASIDE_POOL,f))
138 LOOKASIDE_CHECK(TotalFrees
);
139 LOOKASIDE_CHECK(Tag
);
140 LOOKASIDE_CHECK(Future
);
142 typedef struct _PAGED_LOOKASIDE_LIST
{
144 #if !defined(_AMD64_) && !defined(_IA64_)
145 FAST_MUTEX Lock__ObsoleteButDoNotDelete
;
147 } PAGED_LOOKASIDE_LIST
, *PPAGED_LOOKASIDE_LIST
;
149 typedef struct LOOKASIDE_ALIGN _NPAGED_LOOKASIDE_LIST
{
151 #if !defined(_AMD64_) && !defined(_IA64_)
152 KSPIN_LOCK Lock__ObsoleteButDoNotDelete
;
154 } NPAGED_LOOKASIDE_LIST
, *PNPAGED_LOOKASIDE_LIST
;
156 #define LOOKASIDE_MINIMUM_BLOCK_SIZE (RTL_SIZEOF_THROUGH_FIELD (SLIST_ENTRY, Next))
158 typedef struct _LOOKASIDE_LIST_EX
{
159 GENERAL_LOOKASIDE_POOL L
;
162 #if (NTDDI_VERSION >= NTDDI_VISTA)
164 #define EX_LOOKASIDE_LIST_EX_FLAGS_RAISE_ON_FAIL 0x00000001UL
165 #define EX_LOOKASIDE_LIST_EX_FLAGS_FAIL_NO_RAISE 0x00000002UL
167 #define EX_MAXIMUM_LOOKASIDE_DEPTH_BASE 256
168 #define EX_MAXIMUM_LOOKASIDE_DEPTH_LIMIT 1024
170 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
172 typedef struct _EX_RUNDOWN_REF
{
173 __GNU_EXTENSION
union {
174 volatile ULONG_PTR Count
;
177 } EX_RUNDOWN_REF
, *PEX_RUNDOWN_REF
;
179 typedef struct _EX_RUNDOWN_REF_CACHE_AWARE
*PEX_RUNDOWN_REF_CACHE_AWARE
;
181 typedef enum _WORK_QUEUE_TYPE
{
184 HyperCriticalWorkQueue
,
189 (NTAPI WORKER_THREAD_ROUTINE
)(
191 typedef WORKER_THREAD_ROUTINE
*PWORKER_THREAD_ROUTINE
;
193 typedef struct _WORK_QUEUE_ITEM
{
195 PWORKER_THREAD_ROUTINE WorkerRoutine
;
196 volatile PVOID Parameter
;
197 } WORK_QUEUE_ITEM
, *PWORK_QUEUE_ITEM
;
199 typedef ULONG_PTR ERESOURCE_THREAD
, *PERESOURCE_THREAD
;
201 typedef struct _OWNER_ENTRY
{
202 ERESOURCE_THREAD OwnerThread
;
205 ULONG IoPriorityBoosted
:1;
206 ULONG OwnerReferenced
:1;
211 } OWNER_ENTRY
, *POWNER_ENTRY
;
213 typedef struct _ERESOURCE
{
214 LIST_ENTRY SystemResourcesList
;
215 POWNER_ENTRY OwnerTable
;
218 volatile PKSEMAPHORE SharedWaiters
;
219 volatile PKEVENT ExclusiveWaiters
;
220 OWNER_ENTRY OwnerEntry
;
222 ULONG ContentionCount
;
223 ULONG NumberOfSharedWaiters
;
224 ULONG NumberOfExclusiveWaiters
;
228 __GNU_EXTENSION
union {
230 ULONG_PTR CreatorBackTraceIndex
;
233 } ERESOURCE
, *PERESOURCE
;
236 #define ResourceNeverExclusive 0x0010
237 #define ResourceReleaseByOtherThread 0x0020
238 #define ResourceOwnedExclusive 0x0080
240 #define RESOURCE_HASH_TABLE_SIZE 64
242 typedef struct _RESOURCE_HASH_ENTRY
{
243 LIST_ENTRY ListEntry
;
245 ULONG ContentionCount
;
247 } RESOURCE_HASH_ENTRY
, *PRESOURCE_HASH_ENTRY
;
249 typedef struct _RESOURCE_PERFORMANCE_DATA
{
250 ULONG ActiveResourceCount
;
251 ULONG TotalResourceCount
;
252 ULONG ExclusiveAcquire
;
253 ULONG SharedFirstLevel
;
254 ULONG SharedSecondLevel
;
255 ULONG StarveFirstLevel
;
256 ULONG StarveSecondLevel
;
257 ULONG WaitForExclusive
;
258 ULONG OwnerTableExpands
;
259 ULONG MaximumTableExpand
;
260 LIST_ENTRY HashTable
[RESOURCE_HASH_TABLE_SIZE
];
261 } RESOURCE_PERFORMANCE_DATA
, *PRESOURCE_PERFORMANCE_DATA
;
263 /* Global debug flag */
265 extern ULONG NtGlobalFlag
;
266 #define IF_NTOS_DEBUG(FlagName) if (NtGlobalFlag & (FLG_##FlagName))
268 #define IF_NTOS_DEBUG(FlagName) if(FALSE)
271 $endif
/* _WDMDDK_ */
274 typedef struct _ZONE_SEGMENT_HEADER
{
275 SINGLE_LIST_ENTRY SegmentList
;
277 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
279 typedef struct _ZONE_HEADER
{
280 SINGLE_LIST_ENTRY FreeList
;
281 SINGLE_LIST_ENTRY SegmentList
;
283 ULONG TotalSegmentSize
;
284 } ZONE_HEADER
, *PZONE_HEADER
;
286 #define PROTECTED_POOL 0x80000000