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
*PCALLBACK_FUNCTION
)(
82 IN PVOID CallbackContext
,
86 #define GENERAL_LOOKASIDE_LAYOUT \
88 SLIST_HEADER ListHead; \
89 SINGLE_LIST_ENTRY SingleListHead; \
92 USHORT MaximumDepth; \
93 ULONG TotalAllocates; \
95 ULONG AllocateMisses; \
109 PALLOCATE_FUNCTION_EX AllocateEx; \
110 PALLOCATE_FUNCTION Allocate; \
114 PFREE_FUNCTION_EX FreeEx; \
115 PFREE_FUNCTION Free; \
118 LIST_ENTRY ListEntry; \
119 ULONG LastTotalAllocates; \
121 ULONG LastAllocateMisses; \
122 ULONG LastAllocateHits; \
126 typedef struct LOOKASIDE_ALIGN _GENERAL_LOOKASIDE
{
127 GENERAL_LOOKASIDE_LAYOUT
128 } GENERAL_LOOKASIDE
, *PGENERAL_LOOKASIDE
;
130 typedef struct _GENERAL_LOOKASIDE_POOL
{
131 GENERAL_LOOKASIDE_LAYOUT
132 } GENERAL_LOOKASIDE_POOL
, *PGENERAL_LOOKASIDE_POOL
;
134 #define LOOKASIDE_CHECK(f) \
135 C_ASSERT(FIELD_OFFSET(GENERAL_LOOKASIDE,f) == FIELD_OFFSET(GENERAL_LOOKASIDE_POOL,f))
137 LOOKASIDE_CHECK(TotalFrees
);
138 LOOKASIDE_CHECK(Tag
);
139 LOOKASIDE_CHECK(Future
);
141 typedef struct _PAGED_LOOKASIDE_LIST
{
143 #if !defined(_AMD64_) && !defined(_IA64_)
144 FAST_MUTEX Lock__ObsoleteButDoNotDelete
;
146 } PAGED_LOOKASIDE_LIST
, *PPAGED_LOOKASIDE_LIST
;
148 typedef struct LOOKASIDE_ALIGN _NPAGED_LOOKASIDE_LIST
{
150 #if !defined(_AMD64_) && !defined(_IA64_)
151 KSPIN_LOCK Lock__ObsoleteButDoNotDelete
;
153 } NPAGED_LOOKASIDE_LIST
, *PNPAGED_LOOKASIDE_LIST
;
155 typedef struct _LOOKASIDE_LIST_EX
{
156 GENERAL_LOOKASIDE_POOL L
;
159 typedef struct _EX_RUNDOWN_REF
{
160 __GNU_EXTENSION
union {
161 volatile ULONG_PTR Count
;
164 } EX_RUNDOWN_REF
, *PEX_RUNDOWN_REF
;
166 typedef struct _EX_RUNDOWN_REF_CACHE_AWARE
*PEX_RUNDOWN_REF_CACHE_AWARE
;
169 (NTAPI
*PWORKER_THREAD_ROUTINE
)(
172 typedef struct _WORK_QUEUE_ITEM
{
174 PWORKER_THREAD_ROUTINE WorkerRoutine
;
175 volatile PVOID Parameter
;
176 } WORK_QUEUE_ITEM
, *PWORK_QUEUE_ITEM
;