1 /* EXECUTIVE ROUTINES ******************************************************/
3 VOID
ExAcquireFastMutex(PFAST_MUTEX FastMutex
);
4 VOID
ExAcquireFastMutexUnsafe(PFAST_MUTEX FastMutex
);
6 BOOLEAN
ExAcquireResourceExclusive(PERESOURCE Resource
, BOOLEAN Wait
);
7 BOOLEAN
ExAcquireResourceExclusiveLite(PERESOURCE Resource
, BOOLEAN Wait
);
8 BOOLEAN
ExAcquireResourceSharedLite(PERESOURCE Resource
, BOOLEAN Wait
);
9 BOOLEAN
ExAcquireSharedStarveExclusive(PERESOURCE Resource
, BOOLEAN Wait
);
10 BOOLEAN
ExAcquireSharedWaitForExclusive(PERESOURCE Resource
, BOOLEAN Wait
);
11 PVOID
ExAllocateFromNPagedLookasideList(PNPAGED_LOOKASIDE_LIST LookSide
);
12 PVOID
ExAllocateFromPagedLookasideList(PPAGED_LOOKASIDE_LIST LookSide
);
13 PVOID
ExAllocateFromZone(PZONE_HEADER Zone
);
16 * FUNCTION: Allocates memory from the nonpaged pool
18 * size = minimum size of the block to be allocated
19 * PoolType = the type of memory to use for the block (ignored)
21 * the address of the block if it succeeds
23 PVOID
ExAllocatePool(POOL_TYPE PoolType
, ULONG size
);
25 PVOID
ExAllocatePoolWithQuota(POOL_TYPE PoolType
, ULONG NumberOfBytes
);
26 PVOID
ExAllocatePoolWithQuotaTag(POOL_TYPE PoolType
, ULONG NumberOfBytes
,
28 PVOID
ExAllocatePoolWithTag(POOL_TYPE PoolType
, ULONG NumberOfBytes
,
30 VOID
ExConvertExclusiveToSharedLite(PERESOURCE Resource
);
31 VOID
ExDeleteNPagedLookasideList(PNPAGED_LOOKASIDE_LIST Lookaside
);
32 VOID
ExDeletePagedLookasideList(PPAGED_LOOKASIDE_LIST Lookaside
);
33 NTSTATUS
ExDeleteResource(PERESOURCE Resource
);
34 NTSTATUS
ExDeleteResourceLite(PERESOURCE Resource
);
35 NTSTATUS
ExExtendZone(PZONE_HEADER Zone
, PVOID Segment
, ULONG SegmentSize
);
38 * FUNCTION: Releases previously allocated memory
40 * block = block to free
42 VOID
ExFreePool(PVOID block
);
44 VOID
ExFreeToNPagedLookasideList(PNPAGED_LOOKASIDE_LIST Lookaside
,
46 VOID
ExFreeToPagedLookasideList(PPAGED_LOOKASIDE_LIST Lookaside
,
48 PVOID
ExFreeToZone(PZONE_HEADER Zone
, PVOID Block
);
49 ERESOURCE_THREAD
ExGetCurrentResourceThread(VOID
);
50 ULONG
ExGetExclusiveWaiterCount(PERESOURCE Resource
);
51 ULONG
ExGetSharedWaiterCount(PERESOURCE Resource
);
52 VOID
ExInitializeFastMutex(PFAST_MUTEX FastMutex
);
53 VOID
ExInitializeNPagedLookasideList(PNPAGED_LOOKASIDE_LIST Lookaside
,
54 PALLOCATE_FUNCTION Allocate
,
60 VOID
ExInitializePagedLookasideList(PPAGED_LOOKASIDE_LIST Lookaside
,
61 PALLOCATE_FUNCTION Allocate
,
67 NTSTATUS
ExInitializeResource(PERESOURCE Resource
);
68 NTSTATUS
ExInitializeResourceLite(PERESOURCE Resource
);
69 VOID
ExInitializeSListHead(PSLIST_HEADER SListHead
);
70 VOID
ExInitializeWorkItem(PWORK_QUEUE_ITEM Item
,
71 PWORKER_THREAD_ROUTINE Routine
,
73 NTSTATUS
ExInitializeZone(PZONE_HEADER Zone
,
76 ULONG InitialSegmentSize
);
77 LARGE_INTEGER
ExInterlockedAddLargeInteger(PLARGE_INTEGER Addend
,
78 LARGE_INTEGER Increment
,
80 ULONG
ExInterlockedAddUlong(PULONG Addend
, ULONG Increment
, PKSPIN_LOCK Lock
);
82 VOID
ExInterlockedRemoveEntryList(PLIST_ENTRY ListHead
, PLIST_ENTRY Entry
,
84 VOID
RemoveEntryFromList(PLIST_ENTRY ListHead
, PLIST_ENTRY Entry
);
85 PLIST_ENTRY
ExInterlockedRemoveHeadList(PLIST_ENTRY Head
, PKSPIN_LOCK Lock
);
87 PLIST_ENTRY
ExInterlockedInsertTailList(PLIST_ENTRY ListHead
,
88 PLIST_ENTRY ListEntry
,
91 PLIST_ENTRY
ExInterlockedInsertHeadList(PLIST_ENTRY ListHead
,
92 PLIST_ENTRY ListEntry
,
95 VOID
ExQueueWorkItem(PWORK_QUEUE_ITEM WorkItem
,
96 WORK_QUEUE_TYPE QueueType
);