54145414f82177e8f0dbe8f2526079d55f08be1a
[reactos.git] / reactos / include / ddk / exfuncs.h
1 /* EXECUTIVE ROUTINES ******************************************************/
2
3 VOID ExAcquireFastMutex(PFAST_MUTEX FastMutex);
4 VOID ExAcquireFastMutexUnsafe(PFAST_MUTEX FastMutex);
5
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);
14
15 /*
16 * FUNCTION: Allocates memory from the nonpaged pool
17 * ARGUMENTS:
18 * size = minimum size of the block to be allocated
19 * PoolType = the type of memory to use for the block (ignored)
20 * RETURNS:
21 * the address of the block if it succeeds
22 */
23 PVOID ExAllocatePool(POOL_TYPE PoolType, ULONG size);
24
25 PVOID ExAllocatePoolWithQuota(POOL_TYPE PoolType, ULONG NumberOfBytes);
26 PVOID ExAllocatePoolWithQuotaTag(POOL_TYPE PoolType, ULONG NumberOfBytes,
27 ULONG Tag);
28 PVOID ExAllocatePoolWithTag(POOL_TYPE PoolType, ULONG NumberOfBytes,
29 ULONG Tag);
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);
36
37 /*
38 * FUNCTION: Releases previously allocated memory
39 * ARGUMENTS:
40 * block = block to free
41 */
42 VOID ExFreePool(PVOID block);
43
44 VOID ExFreeToNPagedLookasideList(PNPAGED_LOOKASIDE_LIST Lookaside,
45 PVOID Entry);
46 VOID ExFreeToPagedLookasideList(PPAGED_LOOKASIDE_LIST Lookaside,
47 PVOID Entry);
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,
55 PFREE_FUNCTION Free,
56 ULONG Flags,
57 ULONG Size,
58 ULONG Tag,
59 USHORT Depth);
60 VOID ExInitializePagedLookasideList(PPAGED_LOOKASIDE_LIST Lookaside,
61 PALLOCATE_FUNCTION Allocate,
62 PFREE_FUNCTION Free,
63 ULONG Flags,
64 ULONG Size,
65 ULONG Tag,
66 USHORT Depth);
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,
72 PVOID Context);
73 NTSTATUS ExInitializeZone(PZONE_HEADER Zone,
74 ULONG BlockSize,
75 PVOID InitialSegment,
76 ULONG InitialSegmentSize);
77 LARGE_INTEGER ExInterlockedAddLargeInteger(PLARGE_INTEGER Addend,
78 LARGE_INTEGER Increment,
79 PKSPIN_LOCK Lock);
80 ULONG ExInterlockedAddUlong(PULONG Addend, ULONG Increment, PKSPIN_LOCK Lock);
81
82 VOID ExInterlockedRemoveEntryList(PLIST_ENTRY ListHead, PLIST_ENTRY Entry,
83 PKSPIN_LOCK Lock);
84 VOID RemoveEntryFromList(PLIST_ENTRY ListHead, PLIST_ENTRY Entry);
85 PLIST_ENTRY ExInterlockedRemoveHeadList(PLIST_ENTRY Head, PKSPIN_LOCK Lock);
86
87 PLIST_ENTRY ExInterlockedInsertTailList(PLIST_ENTRY ListHead,
88 PLIST_ENTRY ListEntry,
89 PKSPIN_LOCK Lock);
90
91 PLIST_ENTRY ExInterlockedInsertHeadList(PLIST_ENTRY ListHead,
92 PLIST_ENTRY ListEntry,
93 PKSPIN_LOCK Lock);
94
95 VOID ExQueueWorkItem(PWORK_QUEUE_ITEM WorkItem,
96 WORK_QUEUE_TYPE QueueType);