This commit was generated by cvs2svn to compensate for changes in r52,
[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);
97 VOID ExRaiseStatus(NTSTATUS Status);
98 VOID ExReinitializeResourceLite(PERESOURCE Resource);
99 VOID ExReleaseFastMutex(PFAST_MUTEX Mutex);
100 VOID ExReleaseFastMutexUnsafe(PFAST_MUTEX Mutex);
101 VOID ExReleaseResource(PERESOURCE Resource);
102 VOID ExReleaseResourceForThread(PERESOURCE Resource,
103 ERESOURCE_THREAD ResourceThreadId);
104 VOID ExReleaseResourceForThreadLite(PERESOURCE Resource,
105 ERESOURCE_THREAD ResourceThreadId);
106 VOID ExSystemTimeToLocalTime(PLARGE_INTEGER SystemTime,
107 PLARGE_INTEGER LocalTime);
108 BOOLEAN ExTryToAcquireFastMutex(PFAST_MUTEX FastMutex);
109 BOOLEAN ExTryToAcquireResourceExclusiveLite(PERESOURCE Resource);
110 PVOID InterlockedCompareExchange(PVOID* Destination,
111 PVOID Exchange,
112 PVOID Comperand);
113 LONG InterlockedDecrement(PLONG Addend);
114 LONG InterlockedExchange(PLONG Target, LONG Value);
115 LONG InterlockedExchangeAdd(PLONG Addend, LONG Value);
116 LONG InterlockedIncrement(PLONG Addend);
117
118 PVOID ExInterlockedAllocateFromZone(PZONE_HEADER Zone, PKSPIN_LOCK Lock);
119 PVOID ExInterlockedFreeToZone(PZONE_HEADER Zone, PVOID Block,
120 PKSPIN_LOCK Lock);
121 NTSTATUS ExInterlockedExtendZone(PZONE_HEADER Zone, PVOID Segment,
122 ULONG SegmentSize, PKSPIN_LOCK Lock);
123 PSINGLE_LIST_ENTRY ExInterlockedPopEntryList(PSINGLE_LIST_ENTRY ListHead,
124 PKSPIN_LOCK Lock);
125 PSINGLE_LIST_ENTRY ExInterlockedPushEntryList(PSINGLE_LIST_ENTRY ListHead,
126 PSINGLE_LIST_ENTRY ListEntry,
127 PKSPIN_LOCK Lock);
128 PSINGLE_LIST_ENTRY ExInterlockedPushEntrySList(PSLIST_HEADER ListHead,
129 PSINGLE_LIST_ENTRY ListEntry,
130 PKSPIN_LOCK Lock);
131 PSINGLE_LIST_ENTRY ExInterlockedPopEntrySList(PSLIST_HEADER ListHead,
132 PKSPIN_LOCK Lock);
133 BOOLEAN ExIsFullZone(PZONE_HEADER Zone);
134 BOOLEAN ExIsObjectInFirstZoneSegment(PZONE_HEADER Zone, PVOID Object);
135 VOID ExLocalTimeToSystemTime(PLARGE_INTEGER LocalTime,
136 PLARGE_INTEGER SystemTime);
137
138 typedef unsigned int (exception_hook)(CONTEXT* c, unsigned int exp);
139 unsigned int ExHookException(exception_hook fn, unsigned int exp);
140
141 INTERLOCKED_RESULT ExInterlockedDecrementLong(PLONG Addend,
142 PKSPIN_LOCK Lock);
143 ULONG ExInterlockedExchangeUlong(PULONG Target,
144 ULONG Value,
145 PKSPIN_LOCK Lock);
146 INTERLOCKED_RESULT ExInterlockedIncrementLong(PLONG Addend,
147 PKSPIN_LOCK Lock);
148 BOOLEAN ExIsResourceAcquiredExclusiveLite(PERESOURCE Resource);
149 BOOLEAN ExIsResourceAcquiredSharedLite(PERESOURCE Resource);
150 USHORT ExQueryDepthSListHead(PSLIST_HEADER SListHead);
151
152