Added required defines and typedefs for ntoskrnl/io modules.
[reactos.git] / reactos / include / ddk / exfuncs.h
1 #ifndef _NTOS_EXFUNCS_H
2 #define _NTOS_EXFUNCS_H
3
4 /* EXECUTIVE ROUTINES ******************************************************/
5
6 #define TAG(A, B, C, D) (ULONG)(((A)<<0) + ((B)<<8) + ((C)<<16) + ((D)<<24))
7
8 VOID
9 FASTCALL
10 ExAcquireFastMutex (
11 PFAST_MUTEX FastMutex
12 );
13 VOID
14 FASTCALL
15 ExAcquireFastMutexUnsafe (
16 PFAST_MUTEX FastMutex
17 );
18 BOOLEAN
19 STDCALL
20 ExAcquireResourceExclusive (
21 PERESOURCE Resource,
22 BOOLEAN Wait
23 );
24 BOOLEAN
25 STDCALL
26 ExAcquireResourceExclusiveLite (
27 PERESOURCE Resource,
28 BOOLEAN Wait
29 );
30 BOOLEAN
31 STDCALL
32 ExAcquireResourceSharedLite (
33 PERESOURCE Resource,
34 BOOLEAN Wait
35 );
36 BOOLEAN
37 STDCALL
38 ExAcquireSharedStarveExclusive (
39 PERESOURCE Resource,
40 BOOLEAN Wait
41 );
42 BOOLEAN
43 STDCALL
44 ExAcquireSharedWaitForExclusive (
45 PERESOURCE Resource,
46 BOOLEAN Wait
47 );
48
49 PVOID
50 STDCALL
51 ExAllocateFromZone (
52 PZONE_HEADER Zone
53 );
54
55 /*
56 * PVOID
57 * ExAllocateFromZone (
58 * PZONE_HEADER Zone
59 * );
60 *
61 * FUNCTION:
62 * Allocate a block from a zone
63 *
64 * ARGUMENTS:
65 * Zone = Zone to allocate from
66 *
67 * RETURNS:
68 * The base address of the block allocated
69 */
70 #define ExAllocateFromZone(Zone) \
71 (PVOID)((Zone)->FreeList.Next); \
72 if ((Zone)->FreeList.Next) \
73 (Zone)->FreeList.Next = (Zone)->FreeList.Next->Next
74
75 /*
76 * FUNCTION: Allocates memory from the nonpaged pool
77 * ARGUMENTS:
78 * NumberOfBytes = minimum size of the block to be allocated
79 * PoolType = the type of memory to use for the block (ignored)
80 * RETURNS:
81 * the address of the block if it succeeds
82 */
83 PVOID
84 STDCALL
85 ExAllocatePool (
86 IN POOL_TYPE PoolType,
87 IN ULONG NumberOfBytes
88 );
89
90 PVOID
91 STDCALL
92 ExAllocatePoolWithQuota (
93 IN POOL_TYPE PoolType,
94 IN ULONG NumberOfBytes
95 );
96 PVOID
97 STDCALL
98 ExAllocatePoolWithQuotaTag (
99 IN POOL_TYPE PoolType,
100 IN ULONG NumberOfBytes,
101 IN ULONG Tag
102 );
103 PVOID
104 STDCALL
105 ExAllocatePoolWithTag (
106 IN POOL_TYPE PoolType,
107 IN ULONG NumberOfBytes,
108 IN ULONG Tag
109 );
110
111 VOID
112 STDCALL
113 ExConvertExclusiveToSharedLite (
114 PERESOURCE Resource
115 );
116
117 NTSTATUS
118 STDCALL
119 ExCreateCallback (
120 OUT PCALLBACK_OBJECT * CallbackObject,
121 IN POBJECT_ATTRIBUTES ObjectAttributes,
122 IN BOOLEAN Create,
123 IN BOOLEAN AllowMultipleCallbacks
124 );
125
126 NTSTATUS
127 STDCALL
128 ExDeleteResource (
129 PERESOURCE Resource
130 );
131 NTSTATUS
132 STDCALL
133 ExDeleteResourceLite (
134 PERESOURCE Resource
135 );
136
137 VOID
138 STDCALL
139 ExDisableResourceBoostLite (
140 PERESOURCE Resource
141 );
142
143 NTSTATUS
144 STDCALL
145 ExExtendZone (
146 PZONE_HEADER Zone,
147 PVOID Segment,
148 ULONG SegmentSize
149 );
150
151 /*
152 * FUNCTION: Releases previously allocated memory
153 * ARGUMENTS:
154 * block = block to free
155 */
156 VOID
157 STDCALL
158 ExFreePool (
159 PVOID block
160 );
161
162 /*
163 * PVOID
164 * ExFreeToZone (
165 * PZONE_HEADER Zone,
166 * PVOID Block
167 * );
168 *
169 * FUNCTION:
170 * Frees a block from a zone
171 *
172 * ARGUMENTS:
173 * Zone = Zone the block was allocated from
174 * Block = Block to free
175 */
176 #define ExFreeToZone(Zone,Block) \
177 (((PSINGLE_LIST_ENTRY)(Block))->Next = (Zone)->FreeList.Next, \
178 (Zone)->FreeList.Next = ((PSINGLE_LIST_ENTRY)(Block)), \
179 ((PSINGLE_LIST_ENTRY)(Block))->Next)
180
181 /*
182 * ERESOURCE_THREAD
183 * ExGetCurrentResourceThread (
184 * VOID
185 * );
186 */
187 #define ExGetCurrentResourceThread() \
188 ((ERESOURCE_THREAD)PsGetCurrentThread())
189
190 ULONG
191 STDCALL
192 ExGetExclusiveWaiterCount (
193 PERESOURCE Resource
194 );
195
196 ULONG
197 STDCALL
198 ExGetPreviousMode (
199 VOID
200 );
201
202 ULONG
203 STDCALL
204 ExGetSharedWaiterCount (
205 PERESOURCE Resource
206 );
207
208 /*
209 * VOID
210 * ExInitializeFastMutex (
211 * PFAST_MUTEX FastMutex
212 * );
213 */
214 #define ExInitializeFastMutex(_FastMutex) \
215 ((PFAST_MUTEX)_FastMutex)->Count = 1; \
216 ((PFAST_MUTEX)_FastMutex)->Owner = NULL; \
217 ((PFAST_MUTEX)_FastMutex)->Contention = 0; \
218 KeInitializeEvent(&((PFAST_MUTEX)_FastMutex)->Event, \
219 SynchronizationEvent, \
220 FALSE);
221
222 NTSTATUS
223 STDCALL
224 ExInitializeResource (
225 PERESOURCE Resource
226 );
227 NTSTATUS
228 STDCALL
229 ExInitializeResourceLite (
230 PERESOURCE Resource
231 );
232
233 /*
234 * VOID
235 * ExInitializeSListHead (
236 * PSLIST_HEADER SListHead
237 * );
238 */
239 #define ExInitializeSListHead(ListHead) \
240 (ListHead)->Alignment = 0
241
242 /*
243 * VOID
244 * ExInitializeWorkItem (
245 * PWORK_QUEUE_ITEM Item,
246 * PWORKER_THREAD_ROUTINE Routine,
247 * PVOID Context
248 * );
249 *
250 * FUNCTION:
251 * Initializes a work item to be processed by one of the system
252 * worker threads
253 *
254 * ARGUMENTS:
255 * Item = Pointer to the item to be initialized
256 * Routine = Routine to be called by the worker thread
257 * Context = Parameter to be passed to the callback
258 */
259 #define ExInitializeWorkItem(Item, WorkerRoutine, RoutineContext) \
260 ASSERT_IRQL(DISPATCH_LEVEL); \
261 (Item)->Routine = (WorkerRoutine); \
262 (Item)->Context = (RoutineContext); \
263 (Item)->Entry.Flink = NULL; \
264 (Item)->Entry.Blink = NULL;
265
266 NTSTATUS
267 STDCALL
268 ExInitializeZone (
269 PZONE_HEADER Zone,
270 ULONG BlockSize,
271 PVOID InitialSegment,
272 ULONG InitialSegmentSize
273 );
274
275 LARGE_INTEGER
276 STDCALL
277 ExInterlockedAddLargeInteger (
278 PLARGE_INTEGER Addend,
279 LARGE_INTEGER Increment,
280 PKSPIN_LOCK Lock
281 );
282
283 VOID
284 FASTCALL
285 ExInterlockedAddLargeStatistic (
286 IN PLARGE_INTEGER Addend,
287 IN ULONG Increment
288 );
289
290 ULONG
291 STDCALL
292 ExInterlockedAddUlong (
293 PULONG Addend,
294 ULONG Increment,
295 PKSPIN_LOCK Lock
296 );
297
298 /*
299 * PVOID
300 * STDCALL
301 * ExInterlockedAllocateFromZone (
302 * PZONE_HEADER Zone,
303 * PKSPIN_LOCK Lock
304 * );
305 */
306 #define ExInterlockedAllocateFromZone(Zone,Lock) \
307 (PVOID)ExInterlockedPopEntryList(&(Zone)->FreeList,Lock)
308
309 LONGLONG
310 FASTCALL
311 ExInterlockedCompareExchange64 (
312 IN OUT PLONGLONG Destination,
313 IN PLONGLONG Exchange,
314 IN PLONGLONG Comparand,
315 IN PKSPIN_LOCK Lock
316 );
317
318 INTERLOCKED_RESULT
319 STDCALL
320 ExInterlockedDecrementLong (
321 PLONG Addend,
322 PKSPIN_LOCK Lock
323 );
324 ULONG
325 STDCALL
326 ExInterlockedExchangeUlong (
327 PULONG Target,
328 ULONG Value,
329 PKSPIN_LOCK Lock
330 );
331 NTSTATUS
332 STDCALL
333 ExInterlockedExtendZone (
334 PZONE_HEADER Zone,
335 PVOID Segment,
336 ULONG SegmentSize,
337 PKSPIN_LOCK Lock
338 );
339
340 /*
341 * PVOID
342 * ExInterlockedFreeToZone (
343 * PZONE_HEADER Zone,
344 * PVOID Block,
345 * PKSPIN_LOCK Lock
346 * );
347 */
348 #define ExInterlockedFreeToZone(Zone,Block,Lock) \
349 ExInterlockedPushEntryList(&(Zone)->FreeList,((PSINGLE_LIST_ENTRY)(Block)),(Lock))
350
351 INTERLOCKED_RESULT
352 STDCALL
353 ExInterlockedIncrementLong (
354 PLONG Addend,
355 PKSPIN_LOCK Lock
356 );
357 PLIST_ENTRY
358 STDCALL
359 ExInterlockedInsertHeadList (
360 PLIST_ENTRY ListHead,
361 PLIST_ENTRY ListEntry,
362 PKSPIN_LOCK Lock
363 );
364 PLIST_ENTRY
365 STDCALL
366 ExInterlockedInsertTailList (
367 PLIST_ENTRY ListHead,
368 PLIST_ENTRY ListEntry,
369 PKSPIN_LOCK Lock
370 );
371 PSINGLE_LIST_ENTRY
372 STDCALL
373 ExInterlockedPopEntryList (
374 PSINGLE_LIST_ENTRY ListHead,
375 PKSPIN_LOCK Lock
376 );
377 PSINGLE_LIST_ENTRY
378 FASTCALL
379 ExInterlockedPopEntrySList (
380 PSLIST_HEADER ListHead,
381 PKSPIN_LOCK Lock
382 );
383 PSINGLE_LIST_ENTRY
384 STDCALL
385 ExInterlockedPushEntryList (
386 PSINGLE_LIST_ENTRY ListHead,
387 PSINGLE_LIST_ENTRY ListEntry,
388 PKSPIN_LOCK Lock
389 );
390 PSINGLE_LIST_ENTRY
391 FASTCALL
392 ExInterlockedPushEntrySList (
393 PSLIST_HEADER ListHead,
394 PSINGLE_LIST_ENTRY ListEntry,
395 PKSPIN_LOCK Lock
396 );
397
398 VOID
399 ExInterlockedRemoveEntryList (
400 PLIST_ENTRY ListHead,
401 PLIST_ENTRY Entry,
402 PKSPIN_LOCK Lock
403 );
404
405 PLIST_ENTRY
406 STDCALL
407 ExInterlockedRemoveHeadList (
408 PLIST_ENTRY Head,
409 PKSPIN_LOCK Lock
410 );
411
412 /*
413 * BOOLEAN
414 * ExIsFullZone (
415 * PZONE_HEADER Zone
416 * );
417 */
418 #define ExIsFullZone(Zone) \
419 ((Zone)->FreeList.Next==(PSINGLE_LIST_ENTRY)NULL)
420
421 /*
422 * BOOLEAN
423 * ExIsObjectInFirstZoneSegment (
424 * PZONE_HEADER Zone,
425 * PVOID Object
426 * );
427 */
428 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
429 (((PUCHAR)(Object)>=(PUCHAR)(Zone)->SegmentList.Next) && \
430 ((PUCHAR)(Object)<(PUCHAR)(Zone)->SegmentList.Next+(Zone)->TotalSegmentSize))
431
432 BOOLEAN
433 STDCALL
434 ExIsProcessorFeaturePresent (
435 IN ULONG ProcessorFeature
436 );
437
438 BOOLEAN
439 STDCALL
440 ExIsResourceAcquiredExclusiveLite (
441 PERESOURCE Resource
442 );
443
444 ULONG
445 STDCALL
446 ExIsResourceAcquiredSharedLite (
447 PERESOURCE Resource
448 );
449
450 VOID
451 STDCALL
452 ExLocalTimeToSystemTime (
453 PLARGE_INTEGER LocalTime,
454 PLARGE_INTEGER SystemTime
455 );
456
457 VOID
458 STDCALL
459 ExNotifyCallback (
460 IN PVOID CallbackObject,
461 IN PVOID Argument1,
462 IN PVOID Argument2
463 );
464
465 VOID
466 STDCALL
467 ExPostSystemEvent (
468 ULONG Unknown1,
469 ULONG Unknown2,
470 ULONG Unknown3
471 );
472
473 /*
474 * USHORT
475 * ExQueryDepthSList (
476 * PSLIST_HEADER SListHead
477 * );
478 */
479 #define ExQueryDepthSList(ListHead) \
480 (USHORT)(ListHead)->s.Depth
481
482 VOID
483 STDCALL
484 ExQueueWorkItem (
485 PWORK_QUEUE_ITEM WorkItem,
486 WORK_QUEUE_TYPE QueueType
487 );
488 VOID
489 STDCALL
490 ExRaiseAccessViolation (
491 VOID
492 );
493 VOID
494 STDCALL
495 ExRaiseDatatypeMisalignment (
496 VOID
497 );
498 VOID
499 STDCALL
500 ExRaiseStatus (
501 NTSTATUS Status
502 );
503
504 PVOID
505 STDCALL
506 ExRegisterCallback (
507 IN PCALLBACK_OBJECT CallbackObject,
508 IN PCALLBACK_FUNCTION CallbackFunction,
509 IN PVOID CallbackContext
510 );
511
512 VOID
513 STDCALL
514 ExReinitializeResourceLite (
515 PERESOURCE Resource
516 );
517 /* ReactOS Specific: begin */
518 VOID
519 FASTCALL
520 ExReleaseFastMutex (
521 PFAST_MUTEX Mutex
522 );
523 /* ReactOS Specific: end */
524 VOID
525 FASTCALL
526 ExReleaseFastMutexUnsafe (
527 PFAST_MUTEX Mutex
528 );
529 /*
530 VOID
531 STDCALL
532 ExReleaseResource (
533 PERESOURCE Resource
534 );
535 */
536 #define ExReleaseResource(Resource) \
537 (ExReleaseResourceLite (Resource))
538
539 VOID
540 FASTCALL
541 ExReleaseResourceLite (
542 PERESOURCE Resource
543 );
544 VOID
545 STDCALL
546 ExReleaseResourceForThread (
547 PERESOURCE Resource,
548 ERESOURCE_THREAD ResourceThreadId
549 );
550 VOID
551 STDCALL
552 ExReleaseResourceForThreadLite (
553 PERESOURCE Resource,
554 ERESOURCE_THREAD ResourceThreadId
555 );
556
557 VOID
558 STDCALL
559 ExSetResourceOwnerPointer (
560 IN PERESOURCE Resource,
561 IN PVOID OwnerPointer
562 );
563
564 VOID
565 STDCALL
566 ExSystemTimeToLocalTime (
567 PLARGE_INTEGER SystemTime,
568 PLARGE_INTEGER LocalTime
569 );
570
571 BOOLEAN
572 FASTCALL
573 ExTryToAcquireFastMutex (
574 PFAST_MUTEX FastMutex
575 );
576
577 BOOLEAN
578 STDCALL
579 ExTryToAcquireResourceExclusiveLite (
580 PERESOURCE Resource
581 );
582
583 VOID
584 STDCALL
585 ExUnregisterCallback (
586 IN PVOID CallbackRegistration
587 );
588
589
590 /*
591 * PVOID
592 * ExAllocateFromNPagedLookasideList (
593 * PNPAGED_LOOKASIDE_LIST LookSide
594 * );
595 *
596 * FUNCTION:
597 * Removes (pops) the first entry from the specified nonpaged
598 * lookaside list.
599 *
600 * ARGUMENTS:
601 * Lookaside = Pointer to a nonpaged lookaside list
602 *
603 * RETURNS:
604 * Address of the allocated list entry
605 */
606 static
607 inline
608 PVOID
609 ExAllocateFromNPagedLookasideList (
610 IN PNPAGED_LOOKASIDE_LIST Lookaside
611 )
612 {
613 PVOID Entry;
614
615 Lookaside->TotalAllocates++;
616 Entry = ExInterlockedPopEntrySList (&Lookaside->ListHead,
617 &Lookaside->Lock);
618 if (Entry == NULL)
619 {
620 Lookaside->AllocateMisses++;
621 Entry = (Lookaside->Allocate)(Lookaside->Type,
622 Lookaside->Size,
623 Lookaside->Tag);
624 }
625
626 return Entry;
627 }
628
629 PVOID
630 STDCALL
631 ExAllocateFromPagedLookasideList (
632 PPAGED_LOOKASIDE_LIST LookSide
633 );
634
635 VOID
636 STDCALL
637 ExDeleteNPagedLookasideList (
638 PNPAGED_LOOKASIDE_LIST Lookaside
639 );
640
641 VOID
642 STDCALL
643 ExDeletePagedLookasideList (
644 PPAGED_LOOKASIDE_LIST Lookaside
645 );
646
647
648 /*
649 * VOID
650 * ExFreeToNPagedLookasideList (
651 * PNPAGED_LOOKASIDE_LIST Lookaside,
652 * PVOID Entry
653 * );
654 *
655 * FUNCTION:
656 * Inserts (pushes) the specified entry into the specified
657 * nonpaged lookaside list.
658 *
659 * ARGUMENTS:
660 * Lookaside = Pointer to the nonpaged lookaside list
661 * Entry = Pointer to the entry that is inserted in the lookaside list
662 */
663 static
664 inline
665 VOID
666 ExFreeToNPagedLookasideList (
667 IN PNPAGED_LOOKASIDE_LIST Lookaside,
668 IN PVOID Entry
669 )
670 {
671 Lookaside->TotalFrees++;
672 if (ExQueryDepthSList (&Lookaside->ListHead) >= Lookaside->MinimumDepth)
673 {
674 Lookaside->FreeMisses++;
675 (Lookaside->Free)(Entry);
676 }
677 else
678 {
679 ExInterlockedPushEntrySList (&Lookaside->ListHead,
680 (PSINGLE_LIST_ENTRY)Entry,
681 &Lookaside->Lock);
682 }
683 }
684
685 VOID
686 STDCALL
687 ExFreeToPagedLookasideList (
688 PPAGED_LOOKASIDE_LIST Lookaside,
689 PVOID Entry
690 );
691
692 VOID
693 STDCALL
694 ExInitializeNPagedLookasideList (
695 PNPAGED_LOOKASIDE_LIST Lookaside,
696 PALLOCATE_FUNCTION Allocate,
697 PFREE_FUNCTION Free,
698 ULONG Flags,
699 ULONG Size,
700 ULONG Tag,
701 USHORT Depth
702 );
703
704 VOID
705 STDCALL
706 ExInitializePagedLookasideList (
707 PPAGED_LOOKASIDE_LIST Lookaside,
708 PALLOCATE_FUNCTION Allocate,
709 PFREE_FUNCTION Free,
710 ULONG Flags,
711 ULONG Size,
712 ULONG Tag,
713 USHORT Depth
714 );
715
716 ULONG FASTCALL
717 ExfInterlockedAddUlong(IN PULONG Addend,
718 IN ULONG Increment,
719 IN PKSPIN_LOCK Lock);
720
721 PLIST_ENTRY FASTCALL
722 ExfInterlockedInsertHeadList(IN PLIST_ENTRY ListHead,
723 IN PLIST_ENTRY ListEntry,
724 IN PKSPIN_LOCK Lock);
725
726 PLIST_ENTRY FASTCALL
727 ExfInterlockedInsertTailList(IN PLIST_ENTRY ListHead,
728 IN PLIST_ENTRY ListEntry,
729 IN PKSPIN_LOCK Lock);
730
731 PSINGLE_LIST_ENTRY FASTCALL
732 ExfInterlockedPopEntryList(IN PSINGLE_LIST_ENTRY ListHead,
733 IN PKSPIN_LOCK Lock);
734
735 PSINGLE_LIST_ENTRY FASTCALL
736 ExfInterlockedPushEntryList(IN PSINGLE_LIST_ENTRY ListHead,
737 IN PSINGLE_LIST_ENTRY ListEntry,
738 IN PKSPIN_LOCK Lock);
739
740 PLIST_ENTRY FASTCALL
741 ExfInterlockedRemoveHeadList(IN PLIST_ENTRY Head,
742 IN PKSPIN_LOCK Lock);
743
744 INTERLOCKED_RESULT FASTCALL
745 Exfi386InterlockedIncrementLong(IN PLONG Addend);
746
747 INTERLOCKED_RESULT FASTCALL
748 Exfi386InterlockedDecrementLong(IN PLONG Addend);
749
750 ULONG FASTCALL
751 Exfi386InterlockedExchangeUlong(IN PULONG Target,
752 IN ULONG Value);
753
754 INTERLOCKED_RESULT STDCALL
755 Exi386InterlockedIncrementLong(IN PLONG Addend);
756
757 INTERLOCKED_RESULT STDCALL
758 Exi386InterlockedDecrementLong(IN PLONG Addend);
759
760 ULONG STDCALL
761 Exi386InterlockedExchangeUlong(IN PULONG Target,
762 IN ULONG Value);
763
764
765 LONG
766 FASTCALL
767 InterlockedCompareExchange (
768 PLONG Destination,
769 LONG Exchange,
770 LONG Comperand
771 );
772
773 #ifdef _GNU_H_WINDOWS_H
774 #ifdef InterlockedDecrement
775 #undef InterlockedDecrement
776 #undef InterlockedExchange
777 #undef InterlockedExchangeAdd
778 #undef InterlockedIncrement
779 #endif /* def InterlockedDecrement */
780 #endif /* def _GNU_H_WINDOWS_H */
781 LONG
782 FASTCALL
783 InterlockedDecrement (
784 PLONG Addend
785 );
786 LONG
787 FASTCALL
788 InterlockedExchange (
789 PLONG Target,
790 LONG Value
791 );
792 LONG
793 FASTCALL
794 InterlockedExchangeAdd (
795 PLONG Addend,
796 LONG Value
797 );
798 LONG
799 FASTCALL
800 InterlockedIncrement (
801 PLONG Addend
802 );
803
804 /*---*/
805
806 typedef
807 unsigned int
808 (exception_hook) (
809 CONTEXT * c,
810 unsigned int exp
811 );
812 unsigned int
813 ExHookException (
814 exception_hook fn,
815 unsigned int exp
816 );
817
818 /* BEGIN REACTOS ONLY */
819
820 BOOLEAN STDCALL
821 ExInitializeBinaryTree(IN PBINARY_TREE Tree,
822 IN PKEY_COMPARATOR Compare,
823 IN BOOLEAN UseNonPagedPool);
824
825 VOID STDCALL
826 ExDeleteBinaryTree(IN PBINARY_TREE Tree);
827
828 VOID STDCALL
829 ExInsertBinaryTree(IN PBINARY_TREE Tree,
830 IN PVOID Key,
831 IN PVOID Value);
832
833 BOOLEAN STDCALL
834 ExSearchBinaryTree(IN PBINARY_TREE Tree,
835 IN PVOID Key,
836 OUT PVOID * Value);
837
838 BOOLEAN STDCALL
839 ExRemoveBinaryTree(IN PBINARY_TREE Tree,
840 IN PVOID Key,
841 IN PVOID * Value);
842
843 BOOLEAN STDCALL
844 ExTraverseBinaryTree(IN PBINARY_TREE Tree,
845 IN TRAVERSE_METHOD Method,
846 IN PTRAVERSE_ROUTINE Routine,
847 IN PVOID Context);
848
849 BOOLEAN STDCALL
850 ExInitializeSplayTree(IN PSPLAY_TREE Tree,
851 IN PKEY_COMPARATOR Compare,
852 IN BOOLEAN Weighted,
853 IN BOOLEAN UseNonPagedPool);
854
855 VOID STDCALL
856 ExDeleteSplayTree(IN PSPLAY_TREE Tree);
857
858 VOID STDCALL
859 ExInsertSplayTree(IN PSPLAY_TREE Tree,
860 IN PVOID Key,
861 IN PVOID Value);
862
863 BOOLEAN STDCALL
864 ExSearchSplayTree(IN PSPLAY_TREE Tree,
865 IN PVOID Key,
866 OUT PVOID * Value);
867
868 BOOLEAN STDCALL
869 ExRemoveSplayTree(IN PSPLAY_TREE Tree,
870 IN PVOID Key,
871 IN PVOID * Value);
872
873 BOOLEAN STDCALL
874 ExWeightOfSplayTree(IN PSPLAY_TREE Tree,
875 OUT PULONG Weight);
876
877 BOOLEAN STDCALL
878 ExTraverseSplayTree(IN PSPLAY_TREE Tree,
879 IN TRAVERSE_METHOD Method,
880 IN PTRAVERSE_ROUTINE Routine,
881 IN PVOID Context);
882
883 BOOLEAN STDCALL
884 ExInitializeHashTable(IN PHASH_TABLE HashTable,
885 IN ULONG HashTableSize,
886 IN PKEY_COMPARATOR Compare OPTIONAL,
887 IN BOOLEAN UseNonPagedPool);
888
889 VOID STDCALL
890 ExDeleteHashTable(IN PHASH_TABLE HashTable);
891
892 VOID STDCALL
893 ExInsertHashTable(IN PHASH_TABLE HashTable,
894 IN PVOID Key,
895 IN ULONG KeyLength,
896 IN PVOID Value);
897
898 BOOLEAN STDCALL
899 ExSearchHashTable(IN PHASH_TABLE HashTable,
900 IN PVOID Key,
901 IN ULONG KeyLength,
902 OUT PVOID * Value);
903
904 BOOLEAN STDCALL
905 ExRemoveHashTable(IN PHASH_TABLE HashTable,
906 IN PVOID Key,
907 IN ULONG KeyLength,
908 IN PVOID * Value);
909
910 /* END REACTOS ONLY */
911
912 #endif /* ndef _NTOS_EXFUNCS_H */