[DDK/XDK]
[reactos.git] / reactos / include / ndk / rtlfuncs.h
1 /*++ NDK Version: 0098
2
3 Copyright (c) Alex Ionescu. All rights reserved.
4
5 Header Name:
6
7 rtlfuncs.h
8
9 Abstract:
10
11 Function definitions for the Run-Time Library
12
13 Author:
14
15 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
16
17 --*/
18
19 #ifndef _RTLFUNCS_H
20 #define _RTLFUNCS_H
21
22 //
23 // Dependencies
24 //
25 #include <umtypes.h>
26 #include <ntnls.h>
27 #include <rtltypes.h>
28 #include <pstypes.h>
29 #include <extypes.h>
30 #include "in6addr.h"
31 #include "inaddr.h"
32
33 #ifdef __cplusplus
34 extern "C" {
35 #endif
36
37 #ifdef NTOS_MODE_USER
38
39 //
40 // List Functions
41 //
42 FORCEINLINE
43 VOID
44 InitializeListHead(
45 IN PLIST_ENTRY ListHead
46 )
47 {
48 ListHead->Flink = ListHead->Blink = ListHead;
49 }
50
51 FORCEINLINE
52 VOID
53 InsertHeadList(
54 IN PLIST_ENTRY ListHead,
55 IN PLIST_ENTRY Entry
56 )
57 {
58 PLIST_ENTRY OldFlink;
59 OldFlink = ListHead->Flink;
60 Entry->Flink = OldFlink;
61 Entry->Blink = ListHead;
62 OldFlink->Blink = Entry;
63 ListHead->Flink = Entry;
64 }
65
66 FORCEINLINE
67 VOID
68 InsertTailList(
69 IN PLIST_ENTRY ListHead,
70 IN PLIST_ENTRY Entry
71 )
72 {
73 PLIST_ENTRY OldBlink;
74 OldBlink = ListHead->Blink;
75 Entry->Flink = ListHead;
76 Entry->Blink = OldBlink;
77 OldBlink->Flink = Entry;
78 ListHead->Blink = Entry;
79 }
80
81 FORCEINLINE
82 BOOLEAN
83 IsListEmpty(
84 IN const LIST_ENTRY * ListHead
85 )
86 {
87 return (BOOLEAN)(ListHead->Flink == ListHead);
88 }
89
90 FORCEINLINE
91 PSINGLE_LIST_ENTRY
92 PopEntryList(
93 PSINGLE_LIST_ENTRY ListHead
94 )
95 {
96 PSINGLE_LIST_ENTRY FirstEntry;
97 FirstEntry = ListHead->Next;
98 if (FirstEntry != NULL) {
99 ListHead->Next = FirstEntry->Next;
100 }
101
102 return FirstEntry;
103 }
104
105 FORCEINLINE
106 VOID
107 PushEntryList(
108 PSINGLE_LIST_ENTRY ListHead,
109 PSINGLE_LIST_ENTRY Entry
110 )
111 {
112 Entry->Next = ListHead->Next;
113 ListHead->Next = Entry;
114 }
115
116 FORCEINLINE
117 BOOLEAN
118 RemoveEntryList(
119 IN PLIST_ENTRY Entry)
120 {
121 PLIST_ENTRY OldFlink;
122 PLIST_ENTRY OldBlink;
123
124 OldFlink = Entry->Flink;
125 OldBlink = Entry->Blink;
126 OldFlink->Blink = OldBlink;
127 OldBlink->Flink = OldFlink;
128 return (BOOLEAN)(OldFlink == OldBlink);
129 }
130
131 FORCEINLINE
132 PLIST_ENTRY
133 RemoveHeadList(
134 IN PLIST_ENTRY ListHead)
135 {
136 PLIST_ENTRY Flink;
137 PLIST_ENTRY Entry;
138
139 Entry = ListHead->Flink;
140 Flink = Entry->Flink;
141 ListHead->Flink = Flink;
142 Flink->Blink = ListHead;
143 return Entry;
144 }
145
146 FORCEINLINE
147 PLIST_ENTRY
148 RemoveTailList(
149 IN PLIST_ENTRY ListHead)
150 {
151 PLIST_ENTRY Blink;
152 PLIST_ENTRY Entry;
153
154 Entry = ListHead->Blink;
155 Blink = Entry->Blink;
156 ListHead->Blink = Blink;
157 Blink->Flink = ListHead;
158 return Entry;
159 }
160
161 //
162 // Unicode string macros
163 //
164 FORCEINLINE
165 VOID
166 RtlInitEmptyUnicodeString(OUT PUNICODE_STRING UnicodeString,
167 IN PWSTR Buffer,
168 IN USHORT BufferSize)
169 {
170 UnicodeString->Length = 0;
171 UnicodeString->MaximumLength = BufferSize;
172 UnicodeString->Buffer = Buffer;
173 }
174
175 FORCEINLINE
176 VOID
177 RtlInitEmptyAnsiString(OUT PANSI_STRING AnsiString,
178 IN PSTR Buffer,
179 IN USHORT BufferSize)
180 {
181 AnsiString->Length = 0;
182 AnsiString->MaximumLength = BufferSize;
183 AnsiString->Buffer = Buffer;
184 }
185
186 //
187 // LUID Macros
188 //
189 #define RtlEqualLuid(L1, L2) (((L1)->HighPart == (L2)->HighPart) && \
190 ((L1)->LowPart == (L2)->LowPart))
191 FORCEINLINE
192 LUID
193 NTAPI_INLINE
194 RtlConvertUlongToLuid(ULONG Ulong)
195 {
196 LUID TempLuid;
197
198 TempLuid.LowPart = Ulong;
199 TempLuid.HighPart = 0;
200 return TempLuid;
201 }
202
203 //
204 // ASSERT Macros
205 //
206 #ifndef ASSERT
207 #if DBG
208
209 #define ASSERT( exp ) \
210 ((void)((!(exp)) ? \
211 (RtlAssert( #exp, __FILE__, __LINE__, NULL ),FALSE) : \
212 TRUE))
213
214 #define ASSERTMSG( msg, exp ) \
215 ((void)((!(exp)) ? \
216 (RtlAssert( #exp, __FILE__, __LINE__, msg ),FALSE) : \
217 TRUE))
218
219 #else
220
221 #define ASSERT( exp ) ((void) 0)
222 #define ASSERTMSG( msg, exp ) ((void) 0)
223
224 #endif
225 #endif
226
227 #ifdef NTOS_KERNEL_RUNTIME
228
229 //
230 // Executing RTL functions at DISPATCH_LEVEL or higher will result in a
231 // bugcheck.
232 //
233 #define RTL_PAGED_CODE PAGED_CODE
234
235 #else
236
237 //
238 // This macro does nothing in user mode
239 //
240 #define RTL_PAGED_CODE NOP_FUNCTION
241
242 #endif
243
244 //
245 // RTL Splay Tree Functions
246 //
247 #ifndef RTL_USE_AVL_TABLES
248
249 NTSYSAPI
250 VOID
251 NTAPI
252 RtlInitializeGenericTable(
253 OUT PRTL_GENERIC_TABLE Table,
254 IN PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine,
255 IN PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine,
256 IN PRTL_GENERIC_FREE_ROUTINE FreeRoutine,
257 IN PVOID TableContext OPTIONAL
258 );
259
260 NTSYSAPI
261 PVOID
262 NTAPI
263 RtlInsertElementGenericTable(
264 IN PRTL_GENERIC_TABLE Table,
265 IN PVOID Buffer,
266 IN CLONG BufferSize,
267 OUT PBOOLEAN NewElement OPTIONAL
268 );
269
270 NTSYSAPI
271 PVOID
272 NTAPI
273 RtlInsertElementGenericTableFull(
274 IN PRTL_GENERIC_TABLE Table,
275 IN PVOID Buffer,
276 IN CLONG BufferSize,
277 OUT PBOOLEAN NewElement OPTIONAL,
278 IN PVOID NodeOrParent,
279 IN TABLE_SEARCH_RESULT SearchResult
280 );
281
282 NTSYSAPI
283 BOOLEAN
284 NTAPI
285 RtlDeleteElementGenericTable(
286 IN PRTL_GENERIC_TABLE Table,
287 IN PVOID Buffer
288 );
289
290 NTSYSAPI
291 PVOID
292 NTAPI
293 RtlLookupElementGenericTable(
294 IN PRTL_GENERIC_TABLE Table,
295 IN PVOID Buffer
296 );
297
298 NTSYSAPI
299 PVOID
300 NTAPI
301 RtlLookupElementGenericTableFull(
302 IN PRTL_GENERIC_TABLE Table,
303 IN PVOID Buffer,
304 OUT PVOID *NodeOrParent,
305 OUT TABLE_SEARCH_RESULT *SearchResult
306 );
307
308 NTSYSAPI
309 PVOID
310 NTAPI
311 RtlEnumerateGenericTable(
312 IN PRTL_GENERIC_TABLE Table,
313 IN BOOLEAN Restart
314 );
315
316 NTSYSAPI
317 PVOID
318 NTAPI
319 RtlEnumerateGenericTableWithoutSplaying(
320 IN PRTL_GENERIC_TABLE Table,
321 IN OUT PVOID *RestartKey
322 );
323
324 NTSYSAPI
325 PVOID
326 NTAPI
327 RtlGetElementGenericTable(
328 IN PRTL_GENERIC_TABLE Table,
329 IN ULONG I
330 );
331
332 NTSYSAPI
333 ULONG
334 NTAPI
335 RtlNumberGenericTableElements(
336 IN PRTL_GENERIC_TABLE Table
337 );
338
339 NTSYSAPI
340 BOOLEAN
341 NTAPI
342 RtlIsGenericTableEmpty(
343 IN PRTL_GENERIC_TABLE Table
344 );
345
346 #endif /* !RTL_USE_AVL_TABLES */
347
348 NTSYSAPI
349 PRTL_SPLAY_LINKS
350 NTAPI
351 RtlSplay(
352 IN PRTL_SPLAY_LINKS Links
353 );
354
355 NTSYSAPI
356 PRTL_SPLAY_LINKS
357 NTAPI
358 RtlDelete(
359 IN PRTL_SPLAY_LINKS Links
360 );
361
362 NTSYSAPI
363 VOID
364 NTAPI
365 RtlDeleteNoSplay(
366 IN PRTL_SPLAY_LINKS Links,
367 OUT PRTL_SPLAY_LINKS *Root
368 );
369
370 NTSYSAPI
371 PRTL_SPLAY_LINKS
372 NTAPI
373 RtlSubtreeSuccessor(
374 IN PRTL_SPLAY_LINKS Links
375 );
376
377 NTSYSAPI
378 PRTL_SPLAY_LINKS
379 NTAPI
380 RtlSubtreePredecessor(
381 IN PRTL_SPLAY_LINKS Links
382 );
383
384 NTSYSAPI
385 PRTL_SPLAY_LINKS
386 NTAPI
387 RtlRealSuccessor(
388 IN PRTL_SPLAY_LINKS Links
389 );
390
391 NTSYSAPI
392 PRTL_SPLAY_LINKS
393 NTAPI
394 RtlRealPredecessor(
395 IN PRTL_SPLAY_LINKS Links
396 );
397
398 #define RtlIsLeftChild(Links) \
399 (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
400
401 #define RtlIsRightChild(Links) \
402 (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
403
404 #define RtlRightChild(Links) \
405 ((PRTL_SPLAY_LINKS)(Links))->RightChild
406
407 #define RtlIsRoot(Links) \
408 (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
409
410 #define RtlLeftChild(Links) \
411 ((PRTL_SPLAY_LINKS)(Links))->LeftChild
412
413 #define RtlParent(Links) \
414 ((PRTL_SPLAY_LINKS)(Links))->Parent
415
416 #define RtlInitializeSplayLinks(Links) \
417 { \
418 PRTL_SPLAY_LINKS _SplayLinks; \
419 _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \
420 _SplayLinks->Parent = _SplayLinks; \
421 _SplayLinks->LeftChild = NULL; \
422 _SplayLinks->RightChild = NULL; \
423 }
424
425 #define RtlInsertAsLeftChild(ParentLinks,ChildLinks) \
426 { \
427 PRTL_SPLAY_LINKS _SplayParent; \
428 PRTL_SPLAY_LINKS _SplayChild; \
429 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
430 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
431 _SplayParent->LeftChild = _SplayChild; \
432 _SplayChild->Parent = _SplayParent; \
433 }
434
435 #define RtlInsertAsRightChild(ParentLinks,ChildLinks) \
436 { \
437 PRTL_SPLAY_LINKS _SplayParent; \
438 PRTL_SPLAY_LINKS _SplayChild; \
439 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
440 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
441 _SplayParent->RightChild = _SplayChild; \
442 _SplayChild->Parent = _SplayParent; \
443 }
444
445 //
446 // RTL AVL Tree Functions
447 //
448 NTSYSAPI
449 VOID
450 NTAPI
451 RtlInitializeGenericTableAvl(
452 OUT PRTL_AVL_TABLE Table,
453 IN PRTL_AVL_COMPARE_ROUTINE CompareRoutine,
454 IN PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine,
455 IN PRTL_AVL_FREE_ROUTINE FreeRoutine,
456 IN PVOID TableContext OPTIONAL
457 );
458
459 NTSYSAPI
460 PVOID
461 NTAPI
462 RtlInsertElementGenericTableAvl(
463 IN PRTL_AVL_TABLE Table,
464 IN PVOID Buffer,
465 IN CLONG BufferSize,
466 OUT PBOOLEAN NewElement OPTIONAL
467 );
468
469 NTSYSAPI
470 PVOID
471 NTAPI
472 RtlInsertElementGenericTableFullAvl(
473 IN PRTL_AVL_TABLE Table,
474 IN PVOID Buffer,
475 IN CLONG BufferSize,
476 OUT PBOOLEAN NewElement OPTIONAL,
477 IN PVOID NodeOrParent,
478 IN TABLE_SEARCH_RESULT SearchResult
479 );
480
481 NTSYSAPI
482 BOOLEAN
483 NTAPI
484 RtlDeleteElementGenericTableAvl(
485 IN PRTL_AVL_TABLE Table,
486 IN PVOID Buffer
487 );
488
489 NTSYSAPI
490 PVOID
491 NTAPI
492 RtlLookupElementGenericTableAvl(
493 IN PRTL_AVL_TABLE Table,
494 IN PVOID Buffer
495 );
496
497 NTSYSAPI
498 PVOID
499 NTAPI
500 RtlLookupElementGenericTableFullAvl(
501 IN PRTL_AVL_TABLE Table,
502 IN PVOID Buffer,
503 OUT PVOID *NodeOrParent,
504 OUT TABLE_SEARCH_RESULT *SearchResult
505 );
506
507 NTSYSAPI
508 PVOID
509 NTAPI
510 RtlEnumerateGenericTableAvl(
511 IN PRTL_AVL_TABLE Table,
512 IN BOOLEAN Restart
513 );
514
515 NTSYSAPI
516 PVOID
517 NTAPI
518 RtlEnumerateGenericTableWithoutSplayingAvl(
519 IN PRTL_AVL_TABLE Table,
520 IN OUT PVOID *RestartKey
521 );
522
523 NTSYSAPI
524 PVOID
525 NTAPI
526 RtlLookupFirstMatchingElementGenericTableAvl(
527 IN PRTL_AVL_TABLE Table,
528 IN PVOID Buffer,
529 OUT PVOID *RestartKey
530 );
531
532 NTSYSAPI
533 PVOID
534 NTAPI
535 RtlEnumerateGenericTableLikeADirectory(
536 IN PRTL_AVL_TABLE Table,
537 IN PRTL_AVL_MATCH_FUNCTION MatchFunction OPTIONAL,
538 IN PVOID MatchData OPTIONAL,
539 IN ULONG NextFlag,
540 IN OUT PVOID *RestartKey,
541 IN OUT PULONG DeleteCount,
542 IN PVOID Buffer
543 );
544
545 NTSYSAPI
546 PVOID
547 NTAPI
548 RtlGetElementGenericTableAvl(
549 IN PRTL_AVL_TABLE Table,
550 IN ULONG I
551 );
552
553 NTSYSAPI
554 ULONG
555 NTAPI
556 RtlNumberGenericTableElementsAvl(
557 IN PRTL_AVL_TABLE Table
558 );
559
560 NTSYSAPI
561 BOOLEAN
562 NTAPI
563 RtlIsGenericTableEmptyAvl(
564 IN PRTL_AVL_TABLE Table
565 );
566
567 #ifdef RTL_USE_AVL_TABLES
568
569 #define RtlInitializeGenericTable RtlInitializeGenericTableAvl
570 #define RtlInsertElementGenericTable RtlInsertElementGenericTableAvl
571 #define RtlInsertElementGenericTableFull RtlInsertElementGenericTableFullAvl
572 #define RtlDeleteElementGenericTable RtlDeleteElementGenericTableAvl
573 #define RtlLookupElementGenericTable RtlLookupElementGenericTableAvl
574 #define RtlLookupElementGenericTableFull RtlLookupElementGenericTableFullAvl
575 #define RtlEnumerateGenericTable RtlEnumerateGenericTableAvl
576 #define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl
577 #define RtlGetElementGenericTable RtlGetElementGenericTableAvl
578 #define RtlNumberGenericTableElements RtlNumberGenericTableElementsAvl
579 #define RtlIsGenericTableEmpty RtlIsGenericTableEmptyAvl
580
581 #endif /* RTL_USE_AVL_TABLES */
582
583 #endif /* NTOS_MODE_USER */
584
585 //
586 // Error and Exception Functions
587 //
588 NTSYSAPI
589 PVOID
590 NTAPI
591 RtlAddVectoredExceptionHandler(
592 IN ULONG FirstHandler,
593 IN PVECTORED_EXCEPTION_HANDLER VectoredHandler
594 );
595
596 NTSYSAPI
597 VOID
598 NTAPI
599 RtlAssert(
600 IN PVOID FailedAssertion,
601 IN PVOID FileName,
602 IN ULONG LineNumber,
603 IN PCHAR Message
604 );
605
606 NTSYSAPI
607 PVOID
608 NTAPI
609 RtlSetUnhandledExceptionFilter(
610 IN PVOID TopLevelExceptionFilter
611 );
612
613 NTSYSAPI
614 VOID
615 NTAPI
616 RtlCaptureContext(
617 OUT PCONTEXT ContextRecord
618 );
619
620 NTSYSAPI
621 PVOID
622 NTAPI
623 RtlEncodePointer(
624 IN PVOID Pointer
625 );
626
627 NTSYSAPI
628 PVOID
629 NTAPI
630 RtlDecodePointer(
631 IN PVOID Pointer
632 );
633
634 NTSYSAPI
635 PVOID
636 NTAPI
637 RtlEncodeSystemPointer(
638 IN PVOID Pointer
639 );
640
641 NTSYSAPI
642 PVOID
643 NTAPI
644 RtlDecodeSystemPointer(
645 IN PVOID Pointer
646 );
647
648 NTSYSAPI
649 BOOLEAN
650 NTAPI
651 RtlDispatchException(
652 IN PEXCEPTION_RECORD ExceptionRecord,
653 IN PCONTEXT Context
654 );
655
656 NTSYSAPI
657 ULONG
658 NTAPI
659 RtlNtStatusToDosError(
660 IN NTSTATUS Status
661 );
662
663 NTSYSAPI
664 ULONG
665 NTAPI
666 RtlNtStatusToDosErrorNoTeb(
667 IN NTSTATUS Status
668 );
669
670 NTSYSAPI
671 VOID
672 NTAPI
673 RtlSetLastWin32ErrorAndNtStatusFromNtStatus(
674 IN NTSTATUS Status
675 );
676
677 NTSYSAPI
678 VOID
679 NTAPI
680 RtlRaiseException(
681 IN PEXCEPTION_RECORD ExceptionRecord
682 );
683
684 DECLSPEC_NORETURN
685 NTSYSAPI
686 VOID
687 NTAPI
688 RtlRaiseStatus(
689 IN NTSTATUS Status
690 );
691
692 NTSYSAPI
693 LONG
694 NTAPI
695 RtlUnhandledExceptionFilter(
696 IN struct _EXCEPTION_POINTERS* ExceptionInfo
697 );
698
699 NTSYSAPI
700 VOID
701 NTAPI
702 RtlUnwind(
703 IN PVOID TargetFrame OPTIONAL,
704 IN PVOID TargetIp OPTIONAL,
705 IN PEXCEPTION_RECORD ExceptionRecord OPTIONAL,
706 IN PVOID ReturnValue
707 );
708
709 //
710 // Tracing Functions
711 //
712 NTSYSAPI
713 ULONG
714 NTAPI
715 RtlWalkFrameChain(
716 OUT PVOID *Callers,
717 IN ULONG Count,
718 IN ULONG Flags
719 );
720
721 NTSYSAPI
722 USHORT
723 NTAPI
724 RtlLogStackBackTrace(
725 VOID
726 );
727
728 //
729 // Heap Functions
730 //
731 NTSYSAPI
732 PVOID
733 NTAPI
734 RtlAllocateHeap(
735 IN HANDLE HeapHandle,
736 IN ULONG Flags,
737 IN SIZE_T Size
738 );
739
740 NTSYSAPI
741 PVOID
742 NTAPI
743 RtlCreateHeap(
744 IN ULONG Flags,
745 IN PVOID BaseAddress OPTIONAL,
746 IN SIZE_T SizeToReserve OPTIONAL,
747 IN SIZE_T SizeToCommit OPTIONAL,
748 IN PVOID Lock OPTIONAL,
749 IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL
750 );
751
752 NTSYSAPI
753 ULONG
754 NTAPI
755 RtlCreateTagHeap(
756 IN HANDLE HeapHandle,
757 IN ULONG Flags,
758 IN PWSTR TagName,
759 IN PWSTR TagSubName
760 );
761
762 ULONG
763 NTAPI
764 RtlCompactHeap(
765 HANDLE Heap,
766 ULONG Flags
767 );
768
769 NTSYSAPI
770 PVOID
771 NTAPI
772 RtlDebugCreateHeap(
773 IN ULONG Flags,
774 IN PVOID BaseAddress OPTIONAL,
775 IN SIZE_T SizeToReserve OPTIONAL,
776 IN SIZE_T SizeToCommit OPTIONAL,
777 IN PVOID Lock OPTIONAL,
778 IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL
779 );
780
781 NTSYSAPI
782 HANDLE
783 NTAPI
784 RtlDestroyHeap(
785 IN HANDLE Heap
786 );
787
788 NTSYSAPI
789 ULONG
790 NTAPI
791 RtlExtendHeap(
792 IN HANDLE Heap,
793 IN ULONG Flags,
794 IN PVOID P,
795 IN SIZE_T Size
796 );
797
798 NTSYSAPI
799 BOOLEAN
800 NTAPI
801 RtlFreeHeap(
802 IN HANDLE HeapHandle,
803 IN ULONG Flags,
804 IN PVOID P
805 );
806
807 NTSYSAPI
808 ULONG
809 NTAPI
810 RtlGetNtGlobalFlags(
811 VOID
812 );
813
814 ULONG
815 NTAPI
816 RtlGetProcessHeaps(
817 ULONG HeapCount,
818 HANDLE *HeapArray
819 );
820
821 BOOLEAN
822 NTAPI
823 RtlGetUserInfoHeap(
824 IN PVOID HeapHandle,
825 IN ULONG Flags,
826 IN PVOID BaseAddress,
827 OUT PVOID *UserValue,
828 OUT PULONG UserFlags
829 );
830
831 NTSYSAPI
832 PVOID
833 NTAPI
834 RtlProtectHeap(
835 IN PVOID HeapHandle,
836 IN BOOLEAN Protect
837 );
838
839 NTSYSAPI
840 NTSTATUS
841 NTAPI
842 RtlQueryHeapInformation (
843 IN PVOID HeapHandle,
844 IN HEAP_INFORMATION_CLASS HeapInformationClass,
845 OUT PVOID HeapInformation OPTIONAL,
846 IN SIZE_T HeapInformationLength OPTIONAL,
847 OUT PSIZE_T ReturnLength OPTIONAL
848 );
849
850 NTSYSAPI
851 PWSTR
852 NTAPI
853 RtlQueryTagHeap(
854 IN PVOID HeapHandle,
855 IN ULONG Flags,
856 IN USHORT TagIndex,
857 IN BOOLEAN ResetCounters,
858 OUT PRTL_HEAP_TAG_INFO HeapTagInfo
859 );
860
861 NTSYSAPI
862 PVOID
863 NTAPI
864 RtlReAllocateHeap(
865 HANDLE Heap,
866 ULONG Flags,
867 PVOID Ptr,
868 SIZE_T Size
869 );
870
871 NTSYSAPI
872 NTSTATUS
873 NTAPI
874 RtlSetHeapInformation (
875 IN PVOID HeapHandle,
876 IN HEAP_INFORMATION_CLASS HeapInformationClass,
877 IN PVOID HeapInformation OPTIONAL,
878 IN SIZE_T HeapInformationLength OPTIONAL
879 );
880
881 NTSYSAPI
882 BOOLEAN
883 NTAPI
884 RtlLockHeap(
885 IN HANDLE Heap
886 );
887
888 NTSYSAPI
889 NTSTATUS
890 NTAPI
891 RtlMultipleAllocateHeap (
892 IN PVOID HeapHandle,
893 IN ULONG Flags,
894 IN SIZE_T Size,
895 IN ULONG Count,
896 OUT PVOID * Array
897 );
898
899 NTSYSAPI
900 NTSTATUS
901 NTAPI
902 RtlMultipleFreeHeap (
903 IN PVOID HeapHandle,
904 IN ULONG Flags,
905 IN ULONG Count,
906 OUT PVOID * Array
907 );
908
909 NTSYSAPI
910 NTSTATUS
911 NTAPI
912 RtlUsageHeap(
913 IN HANDLE Heap,
914 IN ULONG Flags,
915 OUT PRTL_HEAP_USAGE Usage
916 );
917
918 NTSYSAPI
919 BOOLEAN
920 NTAPI
921 RtlUnlockHeap(
922 IN HANDLE Heap
923 );
924
925 BOOLEAN
926 NTAPI
927 RtlSetUserValueHeap(
928 IN PVOID HeapHandle,
929 IN ULONG Flags,
930 IN PVOID BaseAddress,
931 IN PVOID UserValue
932 );
933
934 BOOLEAN
935 NTAPI
936 RtlSetUserFlagsHeap(
937 IN PVOID HeapHandle,
938 IN ULONG Flags,
939 IN PVOID BaseAddress,
940 IN ULONG UserFlagsReset,
941 IN ULONG UserFlagsSet
942 );
943
944 NTSYSAPI
945 SIZE_T
946 NTAPI
947 RtlSizeHeap(
948 IN PVOID HeapHandle,
949 IN ULONG Flags,
950 IN PVOID MemoryPointer
951 );
952
953 NTSYSAPI
954 BOOLEAN
955 NTAPI
956 RtlValidateHeap(
957 HANDLE Heap,
958 ULONG Flags,
959 PVOID P
960 );
961
962 NTSYSAPI
963 NTSTATUS
964 NTAPI
965 RtlWalkHeap(
966 IN HANDLE HeapHandle,
967 IN PVOID HeapEntry
968 );
969
970 #define RtlGetProcessHeap() (NtCurrentPeb()->ProcessHeap)
971
972 //
973 // Security Functions
974 //
975 NTSYSAPI
976 NTSTATUS
977 NTAPI
978 RtlAbsoluteToSelfRelativeSD(
979 IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor,
980 IN OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor,
981 IN PULONG BufferLength
982 );
983
984 NTSYSAPI
985 NTSTATUS
986 NTAPI
987 RtlAddAccessAllowedAce(
988 PACL Acl,
989 ULONG Revision,
990 ACCESS_MASK AccessMask,
991 PSID Sid
992 );
993
994 NTSYSAPI
995 NTSTATUS
996 NTAPI
997 RtlAddAccessAllowedAceEx(
998 IN OUT PACL pAcl,
999 IN ULONG dwAceRevision,
1000 IN ULONG AceFlags,
1001 IN ACCESS_MASK AccessMask,
1002 IN PSID pSid
1003 );
1004
1005 NTSYSAPI
1006 NTSTATUS
1007 NTAPI
1008 RtlAddAccessAllowedObjectAce(
1009 IN OUT PACL pAcl,
1010 IN ULONG dwAceRevision,
1011 IN ULONG AceFlags,
1012 IN ACCESS_MASK AccessMask,
1013 IN GUID *ObjectTypeGuid OPTIONAL,
1014 IN GUID *InheritedObjectTypeGuid OPTIONAL,
1015 IN PSID pSid
1016 );
1017
1018 NTSYSAPI
1019 NTSTATUS
1020 NTAPI
1021 RtlAddAccessDeniedAce(
1022 PACL Acl,
1023 ULONG Revision,
1024 ACCESS_MASK AccessMask,
1025 PSID Sid
1026 );
1027
1028 NTSYSAPI
1029 NTSTATUS
1030 NTAPI
1031 RtlAddAccessDeniedAceEx(
1032 IN OUT PACL Acl,
1033 IN ULONG Revision,
1034 IN ULONG Flags,
1035 IN ACCESS_MASK AccessMask,
1036 IN PSID Sid
1037 );
1038
1039 NTSYSAPI
1040 NTSTATUS
1041 NTAPI
1042 RtlAddAccessDeniedObjectAce(
1043 IN OUT PACL pAcl,
1044 IN ULONG dwAceRevision,
1045 IN ULONG AceFlags,
1046 IN ACCESS_MASK AccessMask,
1047 IN GUID *ObjectTypeGuid OPTIONAL,
1048 IN GUID *InheritedObjectTypeGuid OPTIONAL,
1049 IN PSID pSid
1050 );
1051
1052 NTSYSAPI
1053 NTSTATUS
1054 NTAPI
1055 RtlAddAce(
1056 PACL Acl,
1057 ULONG AceRevision,
1058 ULONG StartingAceIndex,
1059 PVOID AceList,
1060 ULONG AceListLength
1061 );
1062
1063 NTSYSAPI
1064 NTSTATUS
1065 NTAPI
1066 RtlAddAuditAccessAce(
1067 PACL Acl,
1068 ULONG Revision,
1069 ACCESS_MASK AccessMask,
1070 PSID Sid,
1071 BOOLEAN Success,
1072 BOOLEAN Failure
1073 );
1074
1075 NTSYSAPI
1076 NTSTATUS
1077 NTAPI
1078 RtlAcquirePrivilege(
1079 IN PULONG Privilege,
1080 IN ULONG NumPriv,
1081 IN ULONG Flags,
1082 OUT PVOID *ReturnedState
1083 );
1084
1085 NTSYSAPI
1086 NTSTATUS
1087 NTAPI
1088 RtlAddAuditAccessAceEx(
1089 IN OUT PACL Acl,
1090 IN ULONG Revision,
1091 IN ULONG Flags,
1092 IN ACCESS_MASK AccessMask,
1093 IN PSID Sid,
1094 IN BOOLEAN Success,
1095 IN BOOLEAN Failure
1096 );
1097
1098 NTSYSAPI
1099 NTSTATUS
1100 NTAPI
1101 RtlAddAuditAccessObjectAce(
1102 IN OUT PACL Acl,
1103 IN ULONG Revision,
1104 IN ULONG Flags,
1105 IN ACCESS_MASK AccessMask,
1106 IN GUID *ObjectTypeGuid OPTIONAL,
1107 IN GUID *InheritedObjectTypeGuid OPTIONAL,
1108 IN PSID Sid,
1109 IN BOOLEAN Success,
1110 IN BOOLEAN Failure
1111 );
1112
1113 NTSYSAPI
1114 NTSTATUS
1115 NTAPI
1116 RtlAddMandatoryAce(
1117 IN OUT PACL Acl,
1118 IN ULONG Revision,
1119 IN ULONG Flags,
1120 IN ULONG MandatoryFlags,
1121 IN ULONG AceType,
1122 IN PSID LabelSid);
1123
1124 NTSYSAPI
1125 NTSTATUS
1126 NTAPI
1127 RtlAdjustPrivilege(
1128 IN ULONG Privilege,
1129 IN BOOLEAN NewValue,
1130 IN BOOLEAN ForThread,
1131 OUT PBOOLEAN OldValue
1132 );
1133
1134 NTSYSAPI
1135 NTSTATUS
1136 NTAPI
1137 RtlAllocateAndInitializeSid(
1138 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
1139 IN UCHAR SubAuthorityCount,
1140 IN ULONG SubAuthority0,
1141 IN ULONG SubAuthority1,
1142 IN ULONG SubAuthority2,
1143 IN ULONG SubAuthority3,
1144 IN ULONG SubAuthority4,
1145 IN ULONG SubAuthority5,
1146 IN ULONG SubAuthority6,
1147 IN ULONG SubAuthority7,
1148 OUT PSID *Sid
1149 );
1150
1151 NTSYSAPI
1152 BOOLEAN
1153 NTAPI
1154 RtlAreAllAccessesGranted(
1155 ACCESS_MASK GrantedAccess,
1156 ACCESS_MASK DesiredAccess
1157 );
1158
1159 NTSYSAPI
1160 BOOLEAN
1161 NTAPI
1162 RtlAreAnyAccessesGranted(
1163 ACCESS_MASK GrantedAccess,
1164 ACCESS_MASK DesiredAccess
1165 );
1166
1167 NTSYSAPI
1168 VOID
1169 NTAPI
1170 RtlCopyLuid(
1171 IN PLUID LuidDest,
1172 IN PLUID LuidSrc
1173 );
1174
1175 NTSYSAPI
1176 VOID
1177 NTAPI
1178 RtlCopyLuidAndAttributesArray(
1179 ULONG Count,
1180 PLUID_AND_ATTRIBUTES Src,
1181 PLUID_AND_ATTRIBUTES Dest
1182 );
1183
1184 NTSYSAPI
1185 NTSTATUS
1186 NTAPI
1187 RtlCopySidAndAttributesArray(
1188 ULONG Count,
1189 PSID_AND_ATTRIBUTES Src,
1190 ULONG SidAreaSize,
1191 PSID_AND_ATTRIBUTES Dest,
1192 PVOID SidArea,
1193 PVOID* RemainingSidArea,
1194 PULONG RemainingSidAreaSize
1195 );
1196
1197 NTSYSAPI
1198 NTSTATUS
1199 NTAPI
1200 RtlConvertSidToUnicodeString(
1201 OUT PUNICODE_STRING DestinationString,
1202 IN PSID Sid,
1203 IN BOOLEAN AllocateDestinationString
1204 );
1205
1206 NTSYSAPI
1207 NTSTATUS
1208 NTAPI
1209 RtlCopySid(
1210 IN ULONG Length,
1211 IN PSID Destination,
1212 IN PSID Source
1213 );
1214
1215 NTSYSAPI
1216 NTSTATUS
1217 NTAPI
1218 RtlCreateAcl(
1219 PACL Acl,
1220 ULONG AclSize,
1221 ULONG AclRevision
1222 );
1223
1224 NTSYSAPI
1225 NTSTATUS
1226 NTAPI
1227 RtlCreateSecurityDescriptor(
1228 OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
1229 IN ULONG Revision
1230 );
1231
1232 NTSYSAPI
1233 NTSTATUS
1234 NTAPI
1235 RtlCreateSecurityDescriptorRelative(
1236 OUT PISECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor,
1237 IN ULONG Revision
1238 );
1239
1240 NTSYSAPI
1241 NTSTATUS
1242 NTAPI
1243 RtlCopySecurityDescriptor(
1244 IN PSECURITY_DESCRIPTOR pSourceSecurityDescriptor,
1245 OUT PSECURITY_DESCRIPTOR pDestinationSecurityDescriptor
1246 );
1247
1248 NTSYSAPI
1249 NTSTATUS
1250 NTAPI
1251 RtlDeleteAce(
1252 PACL Acl,
1253 ULONG AceIndex
1254 );
1255
1256 NTSYSAPI
1257 BOOLEAN
1258 NTAPI
1259 RtlEqualPrefixSid(
1260 PSID Sid1,
1261 PSID Sid2
1262 );
1263
1264 NTSYSAPI
1265 BOOLEAN
1266 NTAPI
1267 RtlEqualSid (
1268 IN PSID Sid1,
1269 IN PSID Sid2
1270 );
1271
1272 NTSYSAPI
1273 BOOLEAN
1274 NTAPI
1275 RtlFirstFreeAce(
1276 PACL Acl,
1277 PACE* Ace
1278 );
1279
1280 NTSYSAPI
1281 PVOID
1282 NTAPI
1283 RtlFreeSid (
1284 IN PSID Sid
1285 );
1286
1287 NTSYSAPI
1288 NTSTATUS
1289 NTAPI
1290 RtlGetAce(
1291 PACL Acl,
1292 ULONG AceIndex,
1293 PVOID *Ace
1294 );
1295
1296 NTSYSAPI
1297 NTSTATUS
1298 NTAPI
1299 RtlGetControlSecurityDescriptor(
1300 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
1301 OUT PSECURITY_DESCRIPTOR_CONTROL Control,
1302 OUT PULONG Revision
1303 );
1304
1305 NTSYSAPI
1306 NTSTATUS
1307 NTAPI
1308 RtlGetDaclSecurityDescriptor(
1309 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
1310 OUT PBOOLEAN DaclPresent,
1311 OUT PACL *Dacl,
1312 OUT PBOOLEAN DaclDefaulted
1313 );
1314
1315 NTSYSAPI
1316 NTSTATUS
1317 NTAPI
1318 RtlGetSaclSecurityDescriptor(
1319 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
1320 OUT PBOOLEAN SaclPresent,
1321 OUT PACL* Sacl,
1322 OUT PBOOLEAN SaclDefaulted
1323 );
1324
1325 NTSYSAPI
1326 NTSTATUS
1327 NTAPI
1328 RtlGetGroupSecurityDescriptor(
1329 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
1330 OUT PSID *Group,
1331 OUT PBOOLEAN GroupDefaulted
1332 );
1333
1334 NTSYSAPI
1335 NTSTATUS
1336 NTAPI
1337 RtlGetOwnerSecurityDescriptor(
1338 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
1339 OUT PSID *Owner,
1340 OUT PBOOLEAN OwnerDefaulted
1341 );
1342
1343 NTSYSAPI
1344 BOOLEAN
1345 NTAPI
1346 RtlGetSecurityDescriptorRMControl(
1347 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
1348 OUT PUCHAR RMControl
1349 );
1350
1351 NTSYSAPI
1352 PSID_IDENTIFIER_AUTHORITY
1353 NTAPI
1354 RtlIdentifierAuthoritySid(PSID Sid);
1355
1356 NTSYSAPI
1357 NTSTATUS
1358 NTAPI
1359 RtlImpersonateSelf(IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel);
1360
1361 NTSYSAPI
1362 NTSTATUS
1363 NTAPI
1364 RtlInitializeSid(
1365 IN OUT PSID Sid,
1366 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
1367 IN UCHAR SubAuthorityCount
1368 );
1369
1370 NTSYSAPI
1371 ULONG
1372 NTAPI
1373 RtlLengthRequiredSid(IN ULONG SubAuthorityCount);
1374
1375 NTSYSAPI
1376 ULONG
1377 NTAPI
1378 RtlLengthSid(IN PSID Sid);
1379
1380 NTSYSAPI
1381 NTSTATUS
1382 NTAPI
1383 RtlMakeSelfRelativeSD(
1384 IN PSECURITY_DESCRIPTOR AbsoluteSD,
1385 OUT PSECURITY_DESCRIPTOR SelfRelativeSD,
1386 IN OUT PULONG BufferLength);
1387
1388 NTSYSAPI
1389 VOID
1390 NTAPI
1391 RtlMapGenericMask(
1392 PACCESS_MASK AccessMask,
1393 PGENERIC_MAPPING GenericMapping
1394 );
1395
1396 #ifdef NTOS_MODE_USER
1397
1398 NTSYSAPI
1399 NTSTATUS
1400 NTAPI
1401 RtlQueryInformationAcl(
1402 PACL Acl,
1403 PVOID Information,
1404 ULONG InformationLength,
1405 ACL_INFORMATION_CLASS InformationClass
1406 );
1407
1408 #endif
1409
1410 NTSYSAPI
1411 VOID
1412 NTAPI
1413 RtlReleasePrivilege(
1414 IN PVOID ReturnedState
1415 );
1416
1417 NTSYSAPI
1418 NTSTATUS
1419 NTAPI
1420 RtlSelfRelativeToAbsoluteSD(
1421 IN PSECURITY_DESCRIPTOR SelfRelativeSD,
1422 OUT PSECURITY_DESCRIPTOR AbsoluteSD,
1423 IN PULONG AbsoluteSDSize,
1424 IN PACL Dacl,
1425 IN PULONG DaclSize,
1426 IN PACL Sacl,
1427 IN PULONG SaclSize,
1428 IN PSID Owner,
1429 IN PULONG OwnerSize,
1430 IN PSID PrimaryGroup,
1431 IN PULONG PrimaryGroupSize
1432 );
1433
1434 NTSYSAPI
1435 NTSTATUS
1436 NTAPI
1437 RtlSelfRelativeToAbsoluteSD2(
1438 IN OUT PSECURITY_DESCRIPTOR SelfRelativeSD,
1439 OUT PULONG BufferSize
1440 );
1441
1442 NTSYSAPI
1443 NTSTATUS
1444 NTAPI
1445 RtlSetAttributesSecurityDescriptor(
1446 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
1447 IN SECURITY_DESCRIPTOR_CONTROL Control,
1448 OUT PULONG Revision
1449 );
1450
1451 NTSYSAPI
1452 NTSTATUS
1453 NTAPI
1454 RtlSetControlSecurityDescriptor(
1455 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
1456 IN SECURITY_DESCRIPTOR_CONTROL ControlBitsOfInterest,
1457 IN SECURITY_DESCRIPTOR_CONTROL ControlBitsToSet
1458 );
1459
1460 NTSYSAPI
1461 NTSTATUS
1462 NTAPI
1463 RtlSetDaclSecurityDescriptor (
1464 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
1465 IN BOOLEAN DaclPresent,
1466 IN PACL Dacl,
1467 IN BOOLEAN DaclDefaulted
1468 );
1469
1470 NTSYSAPI
1471 NTSTATUS
1472 NTAPI
1473 RtlSetGroupSecurityDescriptor(
1474 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
1475 IN PSID Group,
1476 IN BOOLEAN GroupDefaulted
1477 );
1478
1479 #ifdef NTOS_MODE_USER
1480
1481 NTSYSAPI
1482 NTSTATUS
1483 NTAPI
1484 RtlSetInformationAcl(
1485 PACL Acl,
1486 PVOID Information,
1487 ULONG InformationLength,
1488 ACL_INFORMATION_CLASS InformationClass
1489 );
1490
1491 #endif
1492
1493 NTSYSAPI
1494 NTSTATUS
1495 NTAPI
1496 RtlSetOwnerSecurityDescriptor(
1497 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
1498 IN PSID Owner,
1499 IN BOOLEAN OwnerDefaulted
1500 );
1501
1502 NTSYSAPI
1503 NTSTATUS
1504 NTAPI
1505 RtlSetSaclSecurityDescriptor(
1506 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
1507 IN BOOLEAN SaclPresent,
1508 IN PACL Sacl,
1509 IN BOOLEAN SaclDefaulted
1510 );
1511
1512 NTSYSAPI
1513 VOID
1514 NTAPI
1515 RtlSetSecurityDescriptorRMControl(
1516 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
1517 IN PUCHAR RMControl
1518 );
1519
1520 NTSYSAPI
1521 PUCHAR
1522 NTAPI
1523 RtlSubAuthorityCountSid(
1524 IN PSID Sid
1525 );
1526
1527 NTSYSAPI
1528 PULONG
1529 NTAPI
1530 RtlSubAuthoritySid(
1531 IN PSID Sid,
1532 IN ULONG SubAuthority
1533 );
1534
1535 NTSYSAPI
1536 BOOLEAN
1537 NTAPI
1538 RtlValidRelativeSecurityDescriptor(
1539 IN PSECURITY_DESCRIPTOR SecurityDescriptorInput,
1540 IN ULONG SecurityDescriptorLength,
1541 IN SECURITY_INFORMATION RequiredInformation
1542 );
1543
1544 NTSYSAPI
1545 BOOLEAN
1546 NTAPI
1547 RtlValidSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor);
1548
1549 NTSYSAPI
1550 BOOLEAN
1551 NTAPI
1552 RtlValidSid(IN PSID Sid);
1553
1554 NTSYSAPI
1555 BOOLEAN
1556 NTAPI
1557 RtlValidAcl(PACL Acl);
1558
1559 NTSYSAPI
1560 NTSTATUS
1561 NTAPI
1562 RtlDeleteSecurityObject(
1563 IN PSECURITY_DESCRIPTOR *ObjectDescriptor
1564 );
1565
1566 NTSYSAPI
1567 NTSTATUS
1568 NTAPI
1569 RtlNewSecurityObject(
1570 IN PSECURITY_DESCRIPTOR ParentDescriptor,
1571 IN PSECURITY_DESCRIPTOR CreatorDescriptor,
1572 OUT PSECURITY_DESCRIPTOR *NewDescriptor,
1573 IN BOOLEAN IsDirectoryObject,
1574 IN HANDLE Token,
1575 IN PGENERIC_MAPPING GenericMapping
1576 );
1577
1578 NTSYSAPI
1579 NTSTATUS
1580 NTAPI
1581 RtlQuerySecurityObject(
1582 IN PSECURITY_DESCRIPTOR ObjectDescriptor,
1583 IN SECURITY_INFORMATION SecurityInformation,
1584 OUT PSECURITY_DESCRIPTOR ResultantDescriptor,
1585 IN ULONG DescriptorLength,
1586 OUT PULONG ReturnLength
1587 );
1588
1589 NTSYSAPI
1590 NTSTATUS
1591 NTAPI
1592 RtlSetSecurityObject(
1593 IN SECURITY_INFORMATION SecurityInformation,
1594 IN PSECURITY_DESCRIPTOR ModificationDescriptor,
1595 OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
1596 IN PGENERIC_MAPPING GenericMapping,
1597 IN HANDLE Token
1598 );
1599
1600 //
1601 // Single-Character Functions
1602 //
1603 NTSYSAPI
1604 NTSTATUS
1605 NTAPI
1606 RtlLargeIntegerToChar(
1607 IN PLARGE_INTEGER Value,
1608 IN ULONG Base,
1609 IN ULONG Length,
1610 IN OUT PCHAR String
1611 );
1612
1613 NTSYSAPI
1614 CHAR
1615 NTAPI
1616 RtlUpperChar(CHAR Source);
1617
1618 NTSYSAPI
1619 WCHAR
1620 NTAPI
1621 RtlUpcaseUnicodeChar(WCHAR Source);
1622
1623 NTSYSAPI
1624 WCHAR
1625 NTAPI
1626 RtlDowncaseUnicodeChar(IN WCHAR Source);
1627
1628 NTSYSAPI
1629 NTSTATUS
1630 NTAPI
1631 RtlIntegerToChar(
1632 IN ULONG Value,
1633 IN ULONG Base,
1634 IN ULONG Length,
1635 IN OUT PCHAR String
1636 );
1637
1638 NTSYSAPI
1639 NTSTATUS
1640 NTAPI
1641 RtlIntegerToUnicode(
1642 IN ULONG Value,
1643 IN ULONG Base OPTIONAL,
1644 IN ULONG Length OPTIONAL,
1645 IN OUT LPWSTR String
1646 );
1647
1648 NTSYSAPI
1649 NTSTATUS
1650 NTAPI
1651 RtlIntegerToUnicodeString(
1652 IN ULONG Value,
1653 IN ULONG Base,
1654 IN OUT PUNICODE_STRING String
1655 );
1656
1657 NTSYSAPI
1658 NTSTATUS
1659 NTAPI
1660 RtlCharToInteger(
1661 PCSZ String,
1662 ULONG Base,
1663 PULONG Value
1664 );
1665
1666 //
1667 // Byte Swap Functions
1668 //
1669 #ifdef NTOS_MODE_USER
1670
1671 #if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037)) || \
1672 ((defined(_M_AMD64) || \
1673 defined(_M_IA64)) && (_MSC_FULL_VER > 13009175))
1674
1675 unsigned short __cdecl _byteswap_ushort(unsigned short);
1676 unsigned long __cdecl _byteswap_ulong (unsigned long);
1677 unsigned __int64 __cdecl _byteswap_uint64(unsigned __int64);
1678 #pragma intrinsic(_byteswap_ushort)
1679 #pragma intrinsic(_byteswap_ulong)
1680 #pragma intrinsic(_byteswap_uint64)
1681 #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
1682 #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
1683 #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
1684
1685 #elif defined (__GNUC__)
1686
1687 #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
1688 #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
1689 #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
1690
1691 #else
1692
1693 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1694 NTSYSAPI
1695 USHORT
1696 FASTCALL
1697 RtlUshortByteSwap(IN USHORT Source);
1698
1699 NTSYSAPI
1700 ULONG
1701 FASTCALL
1702 RtlUlongByteSwap(IN ULONG Source);
1703
1704 NTSYSAPI
1705 ULONGLONG
1706 FASTCALL
1707 RtlUlonglongByteSwap(IN ULONGLONG Source);
1708 #endif
1709
1710 #endif
1711 #endif // NTOS_MODE_USER
1712
1713 //
1714 // Unicode->Ansi String Functions
1715 //
1716 NTSYSAPI
1717 ULONG
1718 NTAPI
1719 RtlxUnicodeStringToAnsiSize(IN PCUNICODE_STRING UnicodeString);
1720
1721 #ifdef NTOS_MODE_USER
1722
1723 #define RtlUnicodeStringToAnsiSize(STRING) ( \
1724 NLS_MB_CODE_PAGE_TAG ? \
1725 RtlxUnicodeStringToAnsiSize(STRING) : \
1726 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
1727 )
1728
1729 #endif
1730
1731 NTSYSAPI
1732 NTSTATUS
1733 NTAPI
1734 RtlUnicodeStringToAnsiString(
1735 PANSI_STRING DestinationString,
1736 PCUNICODE_STRING SourceString,
1737 BOOLEAN AllocateDestinationString
1738 );
1739
1740 //
1741 // Unicode->OEM String Functions
1742 //
1743 NTSYSAPI
1744 NTSTATUS
1745 NTAPI
1746 RtlUpcaseUnicodeStringToOemString(
1747 POEM_STRING DestinationString,
1748 PCUNICODE_STRING SourceString,
1749 BOOLEAN AllocateDestinationString
1750 );
1751
1752 NTSYSAPI
1753 NTSTATUS
1754 NTAPI
1755 RtlUpcaseUnicodeStringToCountedOemString(
1756 IN OUT POEM_STRING DestinationString,
1757 IN PCUNICODE_STRING SourceString,
1758 IN BOOLEAN AllocateDestinationString
1759 );
1760
1761 NTSYSAPI
1762 NTSTATUS
1763 NTAPI
1764 RtlUnicodeStringToOemString(
1765 POEM_STRING DestinationString,
1766 PCUNICODE_STRING SourceString,
1767 BOOLEAN AllocateDestinationString
1768 );
1769
1770 NTSYSAPI
1771 NTSTATUS
1772 NTAPI
1773 RtlUpcaseUnicodeToOemN(
1774 PCHAR OemString,
1775 ULONG OemSize,
1776 PULONG ResultSize,
1777 PCWCH UnicodeString,
1778 ULONG UnicodeSize
1779 );
1780
1781 NTSYSAPI
1782 ULONG
1783 NTAPI
1784 RtlxUnicodeStringToOemSize(IN PCUNICODE_STRING UnicodeString);
1785
1786 #ifdef NTOS_MODE_USER
1787
1788 #define RtlUnicodeStringToOemSize(STRING) ( \
1789 NLS_MB_OEM_CODE_PAGE_TAG ? \
1790 RtlxUnicodeStringToOemSize(STRING) : \
1791 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
1792 )
1793
1794 #define RtlUnicodeStringToCountedOemSize(STRING) ( \
1795 (ULONG)(RtlUnicodeStringToOemSize(STRING) - sizeof(ANSI_NULL)) \
1796 )
1797
1798 #endif
1799
1800 NTSYSAPI
1801 NTSTATUS
1802 NTAPI
1803 RtlUnicodeToOemN(
1804 PCHAR OemString,
1805 ULONG OemSize,
1806 PULONG ResultSize,
1807 PCWCH UnicodeString,
1808 ULONG UnicodeSize
1809 );
1810
1811 //
1812 // Unicode->MultiByte String Functions
1813 //
1814 NTSYSAPI
1815 NTSTATUS
1816 NTAPI
1817 RtlUnicodeToMultiByteN(
1818 PCHAR MbString,
1819 ULONG MbSize,
1820 PULONG ResultSize,
1821 PWCHAR UnicodeString,
1822 ULONG UnicodeSize
1823 );
1824
1825 NTSYSAPI
1826 NTSTATUS
1827 NTAPI
1828 RtlUpcaseUnicodeToMultiByteN(
1829 PCHAR MbString,
1830 ULONG MbSize,
1831 PULONG ResultSize,
1832 PCWCH UnicodeString,
1833 ULONG UnicodeSize
1834 );
1835
1836 NTSYSAPI
1837 NTSTATUS
1838 NTAPI
1839 RtlUnicodeToMultiByteSize(
1840 PULONG MbSize,
1841 PCWCH UnicodeString,
1842 ULONG UnicodeSize
1843 );
1844
1845 NTSYSAPI
1846 ULONG
1847 NTAPI
1848 RtlxOemStringToUnicodeSize(IN PCOEM_STRING OemString);
1849
1850 //
1851 // OEM to Unicode Functions
1852 //
1853 NTSYSAPI
1854 NTSTATUS
1855 NTAPI
1856 RtlOemStringToUnicodeString(
1857 PUNICODE_STRING DestinationString,
1858 PCOEM_STRING SourceString,
1859 BOOLEAN AllocateDestinationString
1860 );
1861
1862 NTSYSAPI
1863 NTSTATUS
1864 NTAPI
1865 RtlOemToUnicodeN(
1866 PWSTR UnicodeString,
1867 ULONG MaxBytesInUnicodeString,
1868 PULONG BytesInUnicodeString,
1869 IN PCCH OemString,
1870 ULONG BytesInOemString
1871 );
1872
1873 #ifdef NTOS_MODE_USER
1874
1875 #define RtlOemStringToUnicodeSize(STRING) ( \
1876 NLS_MB_OEM_CODE_PAGE_TAG ? \
1877 RtlxOemStringToUnicodeSize(STRING) : \
1878 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
1879 )
1880
1881 #define RtlOemStringToCountedUnicodeSize(STRING) ( \
1882 (ULONG)(RtlOemStringToUnicodeSize(STRING) - sizeof(UNICODE_NULL)) \
1883 )
1884
1885 #endif
1886
1887 //
1888 // Ansi->Unicode String Functions
1889 //
1890 NTSYSAPI
1891 ULONG
1892 NTAPI
1893 RtlxAnsiStringToUnicodeSize(
1894 PCANSI_STRING AnsiString
1895 );
1896
1897 NTSYSAPI
1898 NTSTATUS
1899 NTAPI
1900 RtlAnsiStringToUnicodeString(
1901 PUNICODE_STRING DestinationString,
1902 PCANSI_STRING SourceString,
1903 BOOLEAN AllocateDestinationString
1904 );
1905
1906 #ifdef NTOS_MODE_USER
1907
1908 #define RtlAnsiStringToUnicodeSize(STRING) ( \
1909 NLS_MB_CODE_PAGE_TAG ? \
1910 RtlxAnsiStringToUnicodeSize(STRING) : \
1911 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
1912 )
1913
1914 #endif
1915
1916 NTSYSAPI
1917 BOOLEAN
1918 NTAPI
1919 RtlCreateUnicodeStringFromAsciiz(
1920 OUT PUNICODE_STRING Destination,
1921 IN PCSZ Source
1922 );
1923
1924 //
1925 // Unicode String Functions
1926 //
1927 NTSYSAPI
1928 NTSTATUS
1929 NTAPI
1930 RtlAppendUnicodeToString(
1931 PUNICODE_STRING Destination,
1932 PCWSTR Source
1933 );
1934
1935 NTSYSAPI
1936 NTSTATUS
1937 NTAPI
1938 RtlAppendUnicodeStringToString(
1939 PUNICODE_STRING Destination,
1940 PCUNICODE_STRING Source
1941 );
1942
1943 NTSYSAPI
1944 LONG
1945 NTAPI
1946 RtlCompareUnicodeString(
1947 PCUNICODE_STRING String1,
1948 PCUNICODE_STRING String2,
1949 BOOLEAN CaseInsensitive
1950 );
1951
1952 NTSYSAPI
1953 VOID
1954 NTAPI
1955 RtlCopyUnicodeString(
1956 PUNICODE_STRING DestinationString,
1957 PCUNICODE_STRING SourceString
1958 );
1959
1960 NTSYSAPI
1961 BOOLEAN
1962 NTAPI
1963 RtlCreateUnicodeString(
1964 PUNICODE_STRING DestinationString,
1965 PCWSTR SourceString
1966 );
1967
1968 #ifdef NTOS_MODE_USER
1969
1970 NTSYSAPI
1971 NTSTATUS
1972 NTAPI
1973 RtlDowncaseUnicodeString(
1974 IN OUT PUNICODE_STRING UniDest,
1975 IN PCUNICODE_STRING UniSource,
1976 IN BOOLEAN AllocateDestinationString
1977 );
1978
1979 NTSYSAPI
1980 NTSTATUS
1981 NTAPI
1982 RtlDuplicateUnicodeString(
1983 IN ULONG Flags,
1984 IN PCUNICODE_STRING SourceString,
1985 OUT PUNICODE_STRING DestinationString
1986 );
1987
1988 //
1989 // Memory Functions
1990 //
1991 NTSYSAPI
1992 VOID
1993 NTAPI
1994 RtlFillMemoryUlong(
1995 IN PVOID Destination,
1996 IN ULONG Length,
1997 IN ULONG Fill
1998 );
1999
2000 #endif
2001
2002 NTSYSAPI
2003 BOOLEAN
2004 NTAPI
2005 RtlEqualUnicodeString(
2006 PCUNICODE_STRING String1,
2007 PCUNICODE_STRING String2,
2008 BOOLEAN CaseInsensitive
2009 );
2010
2011 NTSYSAPI
2012 NTSTATUS
2013 NTAPI
2014 RtlFindCharInUnicodeString(
2015 IN ULONG Flags,
2016 IN PUNICODE_STRING SearchString,
2017 IN PCUNICODE_STRING MatchString,
2018 OUT PUSHORT Position
2019 );
2020
2021 NTSYSAPI
2022 VOID
2023 NTAPI
2024 RtlFreeUnicodeString(IN PUNICODE_STRING UnicodeString);
2025
2026 NTSYSAPI
2027 NTSTATUS
2028 NTAPI
2029 RtlHashUnicodeString(
2030 IN CONST UNICODE_STRING *String,
2031 IN BOOLEAN CaseInSensitive,
2032 IN ULONG HashAlgorithm,
2033 OUT PULONG HashValue
2034 );
2035
2036 NTSYSAPI
2037 VOID
2038 NTAPI
2039 RtlInitUnicodeString(
2040 IN OUT PUNICODE_STRING DestinationString,
2041 IN PCWSTR SourceString
2042 );
2043
2044 NTSYSAPI
2045 NTSTATUS
2046 NTAPI
2047 RtlInitUnicodeStringEx(
2048 OUT PUNICODE_STRING DestinationString,
2049 IN PCWSTR SourceString OPTIONAL
2050 );
2051
2052 NTSYSAPI
2053 BOOLEAN
2054 NTAPI
2055 RtlIsTextUnicode(
2056 PVOID Buffer,
2057 INT Length,
2058 INT *Flags
2059 );
2060
2061 NTSYSAPI
2062 BOOLEAN
2063 NTAPI
2064 RtlPrefixString(
2065 PCANSI_STRING String1,
2066 PCANSI_STRING String2,
2067 BOOLEAN CaseInsensitive
2068 );
2069
2070 NTSYSAPI
2071 BOOLEAN
2072 NTAPI
2073 RtlPrefixUnicodeString(
2074 PCUNICODE_STRING String1,
2075 PCUNICODE_STRING String2,
2076 BOOLEAN CaseInsensitive
2077 );
2078
2079 NTSYSAPI
2080 NTSTATUS
2081 NTAPI
2082 RtlUpcaseUnicodeString(
2083 PUNICODE_STRING DestinationString,
2084 PCUNICODE_STRING SourceString,
2085 BOOLEAN AllocateDestinationString
2086 );
2087
2088 NTSYSAPI
2089 NTSTATUS
2090 NTAPI
2091 RtlUnicodeStringToInteger(
2092 PCUNICODE_STRING String,
2093 ULONG Base,
2094 PULONG Value
2095 );
2096
2097 NTSYSAPI
2098 NTSTATUS
2099 NTAPI
2100 RtlValidateUnicodeString(
2101 IN ULONG Flags,
2102 IN PCUNICODE_STRING String
2103 );
2104
2105 //
2106 // Ansi String Functions
2107 //
2108 NTSYSAPI
2109 VOID
2110 NTAPI
2111 RtlFreeAnsiString(IN PANSI_STRING AnsiString);
2112
2113 NTSYSAPI
2114 VOID
2115 NTAPI
2116 RtlInitAnsiString(
2117 PANSI_STRING DestinationString,
2118 PCSZ SourceString
2119 );
2120
2121 NTSYSAPI
2122 NTSTATUS
2123 NTAPI
2124 RtlInitAnsiStringEx(
2125 PANSI_STRING DestinationString,
2126 PCSZ SourceString
2127 );
2128
2129 //
2130 // OEM String Functions
2131 //
2132 NTSYSAPI
2133 VOID
2134 NTAPI
2135 RtlFreeOemString(IN POEM_STRING OemString);
2136
2137 //
2138 // MultiByte->Unicode String Functions
2139 //
2140 NTSYSAPI
2141 NTSTATUS
2142 NTAPI
2143 RtlMultiByteToUnicodeN(
2144 PWCHAR UnicodeString,
2145 ULONG UnicodeSize,
2146 PULONG ResultSize,
2147 PCSTR MbString,
2148 ULONG MbSize
2149 );
2150
2151 NTSYSAPI
2152 NTSTATUS
2153 NTAPI
2154 RtlMultiByteToUnicodeSize(
2155 PULONG UnicodeSize,
2156 PCSTR MbString,
2157 ULONG MbSize
2158 );
2159
2160 //
2161 // Atom Functions
2162 //
2163 NTSYSAPI
2164 NTSTATUS
2165 NTAPI
2166 RtlAddAtomToAtomTable(
2167 IN PRTL_ATOM_TABLE AtomTable,
2168 IN PWSTR AtomName,
2169 OUT PRTL_ATOM Atom
2170 );
2171
2172 NTSYSAPI
2173 NTSTATUS
2174 NTAPI
2175 RtlCreateAtomTable(
2176 IN ULONG TableSize,
2177 IN OUT PRTL_ATOM_TABLE *AtomTable
2178 );
2179
2180 NTSYSAPI
2181 NTSTATUS
2182 NTAPI
2183 RtlDeleteAtomFromAtomTable(
2184 IN PRTL_ATOM_TABLE AtomTable,
2185 IN RTL_ATOM Atom
2186 );
2187
2188 NTSYSAPI
2189 NTSTATUS
2190 NTAPI
2191 RtlDestroyAtomTable(IN PRTL_ATOM_TABLE AtomTable);
2192
2193 NTSYSAPI
2194 NTSTATUS
2195 NTAPI
2196 RtlQueryAtomInAtomTable(
2197 IN PRTL_ATOM_TABLE AtomTable,
2198 IN RTL_ATOM Atom,
2199 IN OUT PULONG RefCount OPTIONAL,
2200 IN OUT PULONG PinCount OPTIONAL,
2201 IN OUT PWSTR AtomName OPTIONAL,
2202 IN OUT PULONG NameLength OPTIONAL
2203 );
2204
2205 NTSYSAPI
2206 NTSTATUS
2207 NTAPI
2208 RtlPinAtomInAtomTable(
2209 IN PRTL_ATOM_TABLE AtomTable,
2210 IN RTL_ATOM Atom
2211 );
2212
2213 NTSYSAPI
2214 NTSTATUS
2215 NTAPI
2216 RtlLookupAtomInAtomTable(
2217 IN PRTL_ATOM_TABLE AtomTable,
2218 IN PWSTR AtomName,
2219 OUT PRTL_ATOM Atom
2220 );
2221
2222 //
2223 // Process Management Functions
2224 //
2225 NTSYSAPI
2226 PPEB
2227 NTAPI
2228 RtlGetCurrentPeb(
2229 VOID
2230 );
2231
2232 NTSYSAPI
2233 VOID
2234 NTAPI
2235 RtlAcquirePebLock(VOID);
2236
2237 NTSYSAPI
2238 NTSTATUS
2239 NTAPI
2240 RtlCreateProcessParameters (
2241 OUT PRTL_USER_PROCESS_PARAMETERS *ProcessParameters,
2242 IN PUNICODE_STRING ImagePathName OPTIONAL,
2243 IN PUNICODE_STRING DllPath OPTIONAL,
2244 IN PUNICODE_STRING CurrentDirectory OPTIONAL,
2245 IN PUNICODE_STRING CommandLine OPTIONAL,
2246 IN PWSTR Environment OPTIONAL,
2247 IN PUNICODE_STRING WindowTitle OPTIONAL,
2248 IN PUNICODE_STRING DesktopInfo OPTIONAL,
2249 IN PUNICODE_STRING ShellInfo OPTIONAL,
2250 IN PUNICODE_STRING RuntimeInfo OPTIONAL
2251 );
2252
2253 NTSYSAPI
2254 NTSTATUS
2255 NTAPI
2256 RtlCreateUserProcess(
2257 IN PUNICODE_STRING ImageFileName,
2258 IN ULONG Attributes,
2259 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters,
2260 IN PSECURITY_DESCRIPTOR ProcessSecutityDescriptor OPTIONAL,
2261 IN PSECURITY_DESCRIPTOR ThreadSecurityDescriptor OPTIONAL,
2262 IN HANDLE ParentProcess OPTIONAL,
2263 IN BOOLEAN CurrentDirectory,
2264 IN HANDLE DebugPort OPTIONAL,
2265 IN HANDLE ExceptionPort OPTIONAL,
2266 OUT PRTL_USER_PROCESS_INFORMATION ProcessInfo
2267 );
2268
2269 NTSYSAPI
2270 NTSTATUS
2271 NTAPI
2272 RtlCreateUserThread(
2273 IN HANDLE ProcessHandle,
2274 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
2275 IN BOOLEAN CreateSuspended,
2276 IN ULONG StackZeroBits,
2277 IN SIZE_T StackReserve,
2278 IN SIZE_T StackCommit,
2279 IN PTHREAD_START_ROUTINE StartAddress,
2280 IN PVOID Parameter,
2281 IN OUT PHANDLE ThreadHandle,
2282 IN OUT PCLIENT_ID ClientId
2283 );
2284
2285 NTSYSAPI
2286 PRTL_USER_PROCESS_PARAMETERS
2287 NTAPI
2288 RtlDeNormalizeProcessParams(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters);
2289
2290 NTSYSAPI
2291 NTSTATUS
2292 NTAPI
2293 RtlDestroyProcessParameters(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters);
2294
2295 NTSYSAPI
2296 VOID
2297 NTAPI
2298 RtlExitUserThread(NTSTATUS Status);
2299
2300 NTSYSAPI
2301 VOID
2302 NTAPI
2303 RtlInitializeContext(
2304 IN HANDLE ProcessHandle,
2305 OUT PCONTEXT ThreadContext,
2306 IN PVOID ThreadStartParam OPTIONAL,
2307 IN PTHREAD_START_ROUTINE ThreadStartAddress,
2308 IN PINITIAL_TEB InitialTeb
2309 );
2310
2311 NTSYSAPI
2312 BOOLEAN
2313 NTAPI
2314 RtlIsThreadWithinLoaderCallout(VOID);
2315
2316 NTSYSAPI
2317 PRTL_USER_PROCESS_PARAMETERS
2318 NTAPI
2319 RtlNormalizeProcessParams(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters);
2320
2321 NTSYSAPI
2322 VOID
2323 NTAPI
2324 RtlReleasePebLock(VOID);
2325
2326 NTSYSAPI
2327 NTSTATUS
2328 NTAPI
2329 RtlRemoteCall(
2330 IN HANDLE Process,
2331 IN HANDLE Thread,
2332 IN PVOID CallSite,
2333 IN ULONG ArgumentCount,
2334 IN PULONG Arguments,
2335 IN BOOLEAN PassContext,
2336 IN BOOLEAN AlreadySuspended
2337 );
2338
2339 NTSYSAPI
2340 NTSTATUS
2341 NTAPI
2342 RtlSetProcessIsCritical(
2343 IN BOOLEAN NewValue,
2344 OUT PBOOLEAN OldValue OPTIONAL,
2345 IN BOOLEAN NeedBreaks
2346 );
2347
2348 NTSYSAPI
2349 ULONG
2350 NTAPI
2351 RtlGetCurrentProcessorNumber(
2352 VOID
2353 );
2354
2355 #define NtCurrentPeb() (NtCurrentTeb()->ProcessEnvironmentBlock)
2356
2357 //
2358 // Thread Pool Functions
2359 //
2360 NTSYSAPI
2361 NTSTATUS
2362 NTAPI
2363 RtlDeregisterWaitEx(
2364 IN HANDLE hWaitHandle,
2365 IN HANDLE hCompletionEvent
2366 );
2367
2368 NTSYSAPI
2369 NTSTATUS
2370 NTAPI
2371 RtlDeregisterWait(
2372 IN HANDLE hWaitHandle
2373 );
2374
2375 NTSYSAPI
2376 NTSTATUS
2377 NTAPI
2378 RtlQueueWorkItem(
2379 IN WORKERCALLBACKFUNC Function,
2380 IN PVOID Context OPTIONAL,
2381 IN ULONG Flags
2382 );
2383
2384 NTSYSAPI
2385 NTSTATUS
2386 NTAPI
2387 RtlSetIoCompletionCallback(
2388 IN HANDLE FileHandle,
2389 IN PIO_APC_ROUTINE Callback,
2390 IN ULONG Flags
2391 );
2392
2393 NTSYSAPI
2394 NTSTATUS
2395 NTAPI
2396 RtlRegisterWait(
2397 IN PHANDLE phNewWaitObject,
2398 IN HANDLE hObject,
2399 IN WAITORTIMERCALLBACKFUNC Callback,
2400 IN PVOID pvContext,
2401 IN ULONG ulMilliseconds,
2402 IN ULONG ulFlags
2403 );
2404
2405 //
2406 // Environment/Path Functions
2407 //
2408 NTSYSAPI
2409 NTSTATUS
2410 NTAPI
2411 RtlCreateEnvironment(
2412 BOOLEAN Inherit,
2413 PWSTR *Environment
2414 );
2415
2416 NTSYSAPI
2417 NTSTATUS
2418 NTAPI
2419 RtlComputePrivatizedDllName_U(
2420 IN PUNICODE_STRING DllName,
2421 OUT PUNICODE_STRING RealName,
2422 OUT PUNICODE_STRING LocalName
2423 );
2424
2425 NTSYSAPI
2426 VOID
2427 NTAPI
2428 RtlDestroyEnvironment(
2429 IN PWSTR Environment
2430 );
2431
2432 NTSYSAPI
2433 BOOLEAN
2434 NTAPI
2435 RtlDoesFileExists_U(
2436 IN PCWSTR FileName
2437 );
2438
2439 NTSYSAPI
2440 BOOLEAN
2441 NTAPI
2442 RtlDoesFileExists_UstrEx(
2443 IN PCUNICODE_STRING FileName,
2444 IN BOOLEAN SucceedIfBusy
2445 );
2446
2447 NTSYSAPI
2448 ULONG
2449 NTAPI
2450 RtlDetermineDosPathNameType_U(
2451 IN PCWSTR Path
2452 );
2453
2454 NTSYSAPI
2455 RTL_PATH_TYPE
2456 NTAPI
2457 RtlDetermineDosPathNameType_Ustr(
2458 IN PCUNICODE_STRING Path
2459 );
2460
2461 NTSYSAPI
2462 ULONG
2463 NTAPI
2464 RtlDosSearchPath_U(
2465 IN PCWSTR Path,
2466 IN PCWSTR FileName,
2467 IN PCWSTR Extension,
2468 IN ULONG BufferSize,
2469 OUT PWSTR Buffer,
2470 OUT PWSTR *PartName
2471 );
2472
2473 NTSYSAPI
2474 BOOLEAN
2475 NTAPI
2476 RtlDosPathNameToNtPathName_U(
2477 IN PCWSTR DosPathName,
2478 OUT PUNICODE_STRING NtPathName,
2479 OUT PCWSTR *NtFileNamePart,
2480 OUT PRTL_RELATIVE_NAME_U DirectoryInfo
2481 );
2482
2483 NTSYSAPI
2484 NTSTATUS
2485 NTAPI
2486 RtlExpandEnvironmentStrings_U(
2487 PWSTR Environment,
2488 PUNICODE_STRING Source,
2489 PUNICODE_STRING Destination,
2490 PULONG Length
2491 );
2492
2493 NTSYSAPI
2494 ULONG
2495 NTAPI
2496 RtlGetCurrentDirectory_U(
2497 ULONG MaximumLength,
2498 PWSTR Buffer
2499 );
2500
2501 NTSYSAPI
2502 ULONG
2503 NTAPI
2504 RtlGetFullPathName_U(
2505 IN PCWSTR FileName,
2506 IN ULONG Size,
2507 IN PWSTR Buffer,
2508 OUT PWSTR *ShortName
2509 );
2510
2511 NTSYSAPI
2512 ULONG
2513 NTAPI
2514 RtlIsDosDeviceName_U(
2515 IN PWSTR Name
2516 );
2517
2518 NTSYSAPI
2519 ULONG
2520 NTAPI
2521 RtlIsDosDeviceName_Ustr(
2522 IN PUNICODE_STRING Name
2523 );
2524
2525
2526 NTSYSAPI
2527 BOOLEAN
2528 NTAPI
2529 RtlIsNameLegalDOS8Dot3(
2530 IN PCUNICODE_STRING Name,
2531 IN OUT POEM_STRING OemName OPTIONAL,
2532 IN OUT PBOOLEAN NameContainsSpaces OPTIONAL
2533 );
2534
2535 NTSYSAPI
2536 NTSTATUS
2537 NTAPI
2538 RtlQueryEnvironmentVariable_U(
2539 PWSTR Environment,
2540 PUNICODE_STRING Name,
2541 PUNICODE_STRING Value
2542 );
2543
2544 VOID
2545 NTAPI
2546 RtlReleaseRelativeName(
2547 IN PRTL_RELATIVE_NAME_U RelativeName
2548 );
2549
2550 NTSYSAPI
2551 NTSTATUS
2552 NTAPI
2553 RtlSetCurrentDirectory_U(
2554 IN PUNICODE_STRING name
2555 );
2556
2557 NTSYSAPI
2558 NTSTATUS
2559 NTAPI
2560 RtlSetEnvironmentVariable(
2561 PWSTR *Environment,
2562 PUNICODE_STRING Name,
2563 PUNICODE_STRING Value
2564 );
2565
2566 //
2567 // Critical Section/Resource Functions
2568 //
2569 NTSYSAPI
2570 NTSTATUS
2571 NTAPI
2572 RtlDeleteCriticalSection (
2573 IN PRTL_CRITICAL_SECTION CriticalSection
2574 );
2575
2576 NTSYSAPI
2577 NTSTATUS
2578 NTAPI
2579 RtlEnterCriticalSection(
2580 IN PRTL_CRITICAL_SECTION CriticalSection
2581 );
2582
2583 NTSYSAPI
2584 NTSTATUS
2585 NTAPI
2586 RtlInitializeCriticalSection(
2587 IN PRTL_CRITICAL_SECTION CriticalSection
2588 );
2589
2590 NTSYSAPI
2591 NTSTATUS
2592 NTAPI
2593 RtlInitializeCriticalSectionAndSpinCount(
2594 IN PRTL_CRITICAL_SECTION CriticalSection,
2595 IN ULONG SpinCount
2596 );
2597
2598 NTSYSAPI
2599 NTSTATUS
2600 NTAPI
2601 RtlLeaveCriticalSection(
2602 IN PRTL_CRITICAL_SECTION CriticalSection
2603 );
2604
2605 NTSYSAPI
2606 BOOLEAN
2607 NTAPI
2608 RtlTryEnterCriticalSection(
2609 IN PRTL_CRITICAL_SECTION CriticalSection
2610 );
2611
2612 NTSYSAPI
2613 VOID
2614 NTAPI
2615 RtlpUnWaitCriticalSection(
2616 IN PRTL_CRITICAL_SECTION CriticalSection
2617 );
2618
2619 NTSYSAPI
2620 NTSTATUS
2621 NTAPI
2622 RtlpWaitForCriticalSection(
2623 IN PRTL_CRITICAL_SECTION CriticalSection
2624 );
2625
2626 NTSYSAPI
2627 BOOLEAN
2628 NTAPI
2629 RtlAcquireResourceExclusive(
2630 IN PRTL_RESOURCE Resource,
2631 IN BOOLEAN Wait
2632 );
2633
2634 NTSYSAPI
2635 BOOLEAN
2636 NTAPI
2637 RtlAcquireResourceShared(
2638 IN PRTL_RESOURCE Resource,
2639 IN BOOLEAN Wait
2640 );
2641
2642 NTSYSAPI
2643 VOID
2644 NTAPI
2645 RtlConvertExclusiveToShared(
2646 IN PRTL_RESOURCE Resource
2647 );
2648
2649 NTSYSAPI
2650 VOID
2651 NTAPI
2652 RtlConvertSharedToExclusive(
2653 IN PRTL_RESOURCE Resource
2654 );
2655
2656 NTSYSAPI
2657 VOID
2658 NTAPI
2659 RtlDeleteResource(
2660 IN PRTL_RESOURCE Resource
2661 );
2662
2663 NTSYSAPI
2664 VOID
2665 NTAPI
2666 RtlDumpResource(
2667 IN PRTL_RESOURCE Resource
2668 );
2669
2670 NTSYSAPI
2671 VOID
2672 NTAPI
2673 RtlInitializeResource(
2674 IN PRTL_RESOURCE Resource
2675 );
2676
2677 NTSYSAPI
2678 VOID
2679 NTAPI
2680 RtlReleaseResource(
2681 IN PRTL_RESOURCE Resource
2682 );
2683
2684 //
2685 // Compression Functions
2686 //
2687 NTSYSAPI
2688 NTSTATUS
2689 NTAPI
2690 RtlCompressBuffer(
2691 IN USHORT CompressionFormatAndEngine,
2692 IN PUCHAR UncompressedBuffer,
2693 IN ULONG UncompressedBufferSize,
2694 OUT PUCHAR CompressedBuffer,
2695 IN ULONG CompressedBufferSize,
2696 IN ULONG UncompressedChunkSize,
2697 OUT PULONG FinalCompressedSize,
2698 IN PVOID WorkSpace
2699 );
2700
2701 NTSYSAPI
2702 NTSTATUS
2703 NTAPI
2704 RtlDecompressBuffer(
2705 IN USHORT CompressionFormat,
2706 OUT PUCHAR UncompressedBuffer,
2707 IN ULONG UncompressedBufferSize,
2708 IN PUCHAR CompressedBuffer,
2709 IN ULONG CompressedBufferSize,
2710 OUT PULONG FinalUncompressedSize
2711 );
2712
2713 NTSYSAPI
2714 NTSTATUS
2715 NTAPI
2716 RtlGetCompressionWorkSpaceSize(
2717 IN USHORT CompressionFormatAndEngine,
2718 OUT PULONG CompressBufferWorkSpaceSize,
2719 OUT PULONG CompressFragmentWorkSpaceSize
2720 );
2721
2722 //
2723 // Debug Info Functions
2724 //
2725 NTSYSAPI
2726 PRTL_DEBUG_INFORMATION
2727 NTAPI
2728 RtlCreateQueryDebugBuffer(
2729 IN ULONG Size,
2730 IN BOOLEAN EventPair
2731 );
2732
2733 NTSYSAPI
2734 NTSTATUS
2735 NTAPI
2736 RtlDestroyQueryDebugBuffer(IN PRTL_DEBUG_INFORMATION DebugBuffer);
2737
2738 NTSYSAPI
2739 NTSTATUS
2740 NTAPI
2741 RtlQueryProcessDebugInformation(
2742 IN ULONG ProcessId,
2743 IN ULONG DebugInfoClassMask,
2744 IN OUT PRTL_DEBUG_INFORMATION DebugBuffer
2745 );
2746
2747 //
2748 // Bitmap Functions
2749 //
2750 NTSYSAPI
2751 BOOLEAN
2752 NTAPI
2753 RtlAreBitsClear(
2754 IN PRTL_BITMAP BitMapHeader,
2755 IN ULONG StartingIndex,
2756 IN ULONG Length
2757 );
2758
2759 NTSYSAPI
2760 BOOLEAN
2761 NTAPI
2762 RtlAreBitsSet(
2763 IN PRTL_BITMAP BitMapHeader,
2764 IN ULONG StartingIndex,
2765 IN ULONG Length
2766 );
2767
2768 NTSYSAPI
2769 VOID
2770 NTAPI
2771 RtlClearBits(
2772 IN PRTL_BITMAP BitMapHeader,
2773 IN ULONG StartingIndex,
2774 IN ULONG NumberToClear
2775 );
2776
2777 NTSYSAPI
2778 ULONG
2779 NTAPI
2780 RtlFindClearBits(
2781 IN PRTL_BITMAP BitMapHeader,
2782 IN ULONG NumberToFind,
2783 IN ULONG HintIndex
2784 );
2785
2786 NTSYSAPI
2787 ULONG
2788 NTAPI
2789 RtlFindClearBitsAndSet(
2790 IN PRTL_BITMAP BitMapHeader,
2791 IN ULONG NumberToFind,
2792 IN ULONG HintIndex
2793 );
2794
2795 NTSYSAPI
2796 ULONG
2797 NTAPI
2798 RtlFindNextForwardRunClear(
2799 IN PRTL_BITMAP BitMapHeader,
2800 IN ULONG FromIndex,
2801 IN PULONG StartingRunIndex
2802 );
2803
2804 NTSYSAPI
2805 VOID
2806 NTAPI
2807 RtlInitializeBitMap(
2808 IN PRTL_BITMAP BitMapHeader,
2809 IN PULONG BitMapBuffer,
2810 IN ULONG SizeOfBitMap
2811 );
2812
2813 NTSYSAPI
2814 ULONG
2815 NTAPI
2816 RtlNumberOfSetBits(
2817 IN PRTL_BITMAP BitMapHeader
2818 );
2819
2820 NTSYSAPI
2821 VOID
2822 NTAPI
2823 RtlSetBit(
2824 PRTL_BITMAP BitMapHeader,
2825 ULONG BitNumber
2826 );
2827
2828 NTSYSAPI
2829 VOID
2830 NTAPI
2831 RtlSetBits(
2832 IN PRTL_BITMAP BitMapHeader,
2833 IN ULONG StartingIndex,
2834 IN ULONG NumberToSet
2835 );
2836
2837 NTSYSAPI
2838 VOID
2839 NTAPI
2840 RtlSetAllBits(
2841 PRTL_BITMAP BitMapHeader
2842 );
2843
2844 NTSYSAPI
2845 BOOLEAN
2846 NTAPI
2847 RtlTestBit(
2848 PRTL_BITMAP BitMapHeader,
2849 ULONG BitNumber
2850 );
2851
2852 //
2853 // Timer Functions
2854 //
2855 NTSYSAPI
2856 NTSTATUS
2857 NTAPI
2858 RtlCreateTimer(
2859 HANDLE TimerQueue,
2860 PHANDLE phNewTimer,
2861 WAITORTIMERCALLBACKFUNC Callback,
2862 PVOID Parameter,
2863 ULONG DueTime,
2864 ULONG Period,
2865 ULONG Flags
2866 );
2867
2868 NTSYSAPI
2869 NTSTATUS
2870 NTAPI
2871 RtlCreateTimerQueue(PHANDLE TimerQueue);
2872
2873 NTSYSAPI
2874 NTSTATUS
2875 NTAPI
2876 RtlDeleteTimer(
2877 HANDLE TimerQueue,
2878 HANDLE Timer,
2879 HANDLE CompletionEvent
2880 );
2881
2882 NTSYSAPI
2883 NTSTATUS
2884 NTAPI
2885 RtlUpdateTimer(
2886 HANDLE TimerQueue,
2887 HANDLE Timer,
2888 ULONG DueTime,
2889 ULONG Period
2890 );
2891
2892 NTSYSAPI
2893 NTSTATUS
2894 NTAPI
2895 RtlDeleteTimerQueueEx(
2896 HANDLE TimerQueue,
2897 HANDLE CompletionEvent
2898 );
2899
2900 NTSYSAPI
2901 NTSTATUS
2902 NTAPI
2903 RtlDeleteTimerQueue(HANDLE TimerQueue);
2904
2905 //
2906 // SList functions
2907 //
2908 PSLIST_ENTRY
2909 FASTCALL
2910 InterlockedPushListSList(
2911 IN PSLIST_HEADER ListHead,
2912 IN PSLIST_ENTRY List,
2913 IN PSLIST_ENTRY ListEnd,
2914 IN ULONG Count
2915 );
2916
2917 //
2918 // Range List functions
2919 //
2920 NTSYSAPI
2921 VOID
2922 NTAPI
2923 RtlInitializeRangeList(
2924 IN OUT PRTL_RANGE_LIST RangeList
2925 );
2926
2927 NTSYSAPI
2928 VOID
2929 NTAPI
2930 RtlFreeRangeList(
2931 IN PRTL_RANGE_LIST RangeList
2932 );
2933
2934 NTSYSAPI
2935 NTSTATUS
2936 NTAPI
2937 RtlAddRange(
2938 IN OUT PRTL_RANGE_LIST RangeList,
2939 IN ULONGLONG Start,
2940 IN ULONGLONG End,
2941 IN UCHAR Attributes,
2942 IN ULONG Flags,
2943 IN PVOID UserData OPTIONAL,
2944 IN PVOID Owner OPTIONAL
2945 );
2946
2947 //
2948 // Debug Functions
2949 //
2950 ULONG
2951 __cdecl
2952 DbgPrint(
2953 IN PCCH Format,
2954 IN ...
2955 );
2956
2957 NTSYSAPI
2958 ULONG
2959 __cdecl
2960 DbgPrintEx(
2961 IN ULONG ComponentId,
2962 IN ULONG Level,
2963 IN PCCH Format,
2964 IN ...
2965 );
2966
2967 NTSYSAPI
2968 ULONG
2969 NTAPI
2970 DbgPrompt(
2971 IN PCCH Prompt,
2972 OUT PCH Response,
2973 IN ULONG MaximumResponseLength
2974 );
2975
2976 VOID
2977 NTAPI
2978 DbgBreakPoint(
2979 VOID
2980 );
2981
2982 VOID
2983 NTAPI
2984 DbgLoadImageSymbols(
2985 IN PSTRING Name,
2986 IN PVOID Base,
2987 IN ULONG_PTR ProcessId
2988 );
2989
2990 VOID
2991 NTAPI
2992 DbgUnLoadImageSymbols(
2993 IN PSTRING Name,
2994 IN PVOID Base,
2995 IN ULONG_PTR ProcessId
2996 );
2997
2998 VOID
2999 NTAPI
3000 DbgCommandString(
3001 IN PCCH Name,
3002 IN PCCH Command
3003 );
3004
3005 //
3006 // Generic Table Functions
3007 //
3008 #if defined(NTOS_MODE_USER) || defined(_NTIFS_)
3009 NTSYSAPI
3010 PVOID
3011 NTAPI
3012 RtlInsertElementGenericTable(
3013 IN PRTL_GENERIC_TABLE Table,
3014 IN PVOID Buffer,
3015 IN ULONG BufferSize,
3016 OUT PBOOLEAN NewElement OPTIONAL
3017 );
3018
3019 NTSYSAPI
3020 PVOID
3021 NTAPI
3022 RtlInsertElementGenericTableFull(
3023 IN PRTL_GENERIC_TABLE Table,
3024 IN PVOID Buffer,
3025 IN ULONG BufferSize,
3026 OUT PBOOLEAN NewElement OPTIONAL,
3027 IN PVOID NodeOrParent,
3028 IN TABLE_SEARCH_RESULT SearchResult
3029 );
3030
3031 NTSYSAPI
3032 BOOLEAN
3033 NTAPI
3034 RtlIsGenericTableEmpty(
3035 IN PRTL_GENERIC_TABLE Table
3036 );
3037
3038 NTSYSAPI
3039 PVOID
3040 NTAPI
3041 RtlLookupElementGenericTableFull(
3042 IN PRTL_GENERIC_TABLE Table,
3043 IN PVOID Buffer,
3044 OUT PVOID *NodeOrParent,
3045 OUT TABLE_SEARCH_RESULT *SearchResult
3046 );
3047 #endif
3048
3049 //
3050 // Handle Table Functions
3051 //
3052 NTSYSAPI
3053 PRTL_HANDLE_TABLE_ENTRY
3054 NTAPI
3055 RtlAllocateHandle(
3056 IN PRTL_HANDLE_TABLE HandleTable,
3057 IN OUT PULONG Index
3058 );
3059
3060 NTSYSAPI
3061 VOID
3062 NTAPI
3063 RtlDestroyHandleTable(IN PRTL_HANDLE_TABLE HandleTable);
3064
3065 NTSYSAPI
3066 BOOLEAN
3067 NTAPI
3068 RtlFreeHandle(
3069 IN PRTL_HANDLE_TABLE HandleTable,
3070 IN PRTL_HANDLE_TABLE_ENTRY Handle
3071 );
3072
3073 NTSYSAPI
3074 VOID
3075 NTAPI
3076 RtlInitializeHandleTable(
3077 IN ULONG TableSize,
3078 IN ULONG HandleSize,
3079 IN PRTL_HANDLE_TABLE HandleTable
3080 );
3081
3082 NTSYSAPI
3083 BOOLEAN
3084 NTAPI
3085 RtlIsValidHandle(
3086 IN PRTL_HANDLE_TABLE HandleTable,
3087 IN PRTL_HANDLE_TABLE_ENTRY Handle
3088 );
3089
3090 NTSYSAPI
3091 BOOLEAN
3092 NTAPI
3093 RtlIsValidIndexHandle(
3094 IN PRTL_HANDLE_TABLE HandleTable,
3095 IN ULONG Index,
3096 OUT PRTL_HANDLE_TABLE_ENTRY *Handle
3097 );
3098
3099 //
3100 // PE Functions
3101 //
3102 NTSYSAPI
3103 NTSTATUS
3104 NTAPI
3105 RtlFindMessage(
3106 IN PVOID BaseAddress,
3107 IN ULONG Type,
3108 IN ULONG Language,
3109 IN ULONG MessageId,
3110 OUT PMESSAGE_RESOURCE_ENTRY *MessageResourceEntry
3111 );
3112
3113 NTSYSAPI
3114 ULONG
3115 NTAPI
3116 RtlGetNtGlobalFlags(VOID);
3117
3118 NTSYSAPI
3119 PVOID
3120 NTAPI
3121 RtlImageDirectoryEntryToData(
3122 PVOID BaseAddress,
3123 BOOLEAN MappedAsImage,
3124 USHORT Directory,
3125 PULONG Size
3126 );
3127
3128 NTSYSAPI
3129 PVOID
3130 NTAPI
3131 RtlImageRvaToVa(
3132 PIMAGE_NT_HEADERS NtHeader,
3133 PVOID BaseAddress,
3134 ULONG Rva,
3135 PIMAGE_SECTION_HEADER *SectionHeader
3136 );
3137
3138 NTSYSAPI
3139 PIMAGE_NT_HEADERS
3140 NTAPI
3141 RtlImageNtHeader(IN PVOID BaseAddress);
3142
3143 NTSYSAPI
3144 NTSTATUS
3145 NTAPI
3146 RtlImageNtHeaderEx(
3147 IN ULONG Flags,
3148 IN PVOID BaseAddress,
3149 IN ULONGLONG Size,
3150 IN PIMAGE_NT_HEADERS *NtHeader
3151 );
3152
3153 NTSYSAPI
3154 PIMAGE_SECTION_HEADER
3155 NTAPI
3156 RtlImageRvaToSection(
3157 PIMAGE_NT_HEADERS NtHeader,
3158 PVOID BaseAddress,
3159 ULONG Rva
3160 );
3161
3162 NTSYSAPI
3163 ULONG
3164 NTAPI
3165 LdrRelocateImageWithBias(
3166 IN PVOID NewAddress,
3167 IN LONGLONG AdditionalBias,
3168 IN PCCH LoaderName,
3169 IN ULONG Success,
3170 IN ULONG Conflict,
3171 IN ULONG Invalid
3172 );
3173
3174 //
3175 // Activation Context Functions
3176 //
3177 #ifdef NTOS_MODE_USER
3178 NTSYSAPI
3179 NTSTATUS
3180 NTAPI
3181 RtlActivateActivationContextEx(
3182 IN ULONG Flags,
3183 IN PTEB Teb,
3184 IN PVOID Context,
3185 IN PULONG_PTR Cookie
3186 );
3187
3188 NTSYSAPI
3189 NTSTATUS
3190 NTAPI
3191 RtlActivateActivationContext(
3192 IN ULONG Flags,
3193 IN HANDLE Handle,
3194 OUT PULONG_PTR Cookie
3195 );
3196
3197 NTSYSAPI
3198 VOID
3199 NTAPI
3200 RtlAddRefActivationContext(
3201 PVOID Context
3202 );
3203
3204 NTSYSAPI
3205 PRTL_ACTIVATION_CONTEXT_STACK_FRAME
3206 FASTCALL
3207 RtlActivateActivationContextUnsafeFast(
3208 IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame,
3209 IN PVOID Context
3210 );
3211
3212 NTSYSAPI
3213 NTSTATUS
3214 NTAPI
3215 RtlAllocateActivationContextStack(
3216 IN PVOID *Context
3217 );
3218
3219 NTSYSAPI
3220 NTSTATUS
3221 NTAPI
3222 RtlCreateActivationContext(
3223 OUT PHANDLE Handle,
3224 IN OUT PVOID ReturnedData
3225 );
3226
3227 NTSYSAPI
3228 NTSTATUS
3229 NTAPI
3230 RtlGetActiveActivationContext(
3231 IN PVOID *Context
3232 );
3233
3234 NTSYSAPI
3235 VOID
3236 NTAPI
3237 RtlReleaseActivationContext(
3238 IN HANDLE handle
3239 );
3240
3241 NTSYSAPI
3242 NTSTATUS
3243 NTAPI
3244 RtlDeactivateActivationContext(
3245 ULONG dwFlags,
3246 ULONG_PTR ulCookie
3247 );
3248
3249 NTSYSAPI
3250 VOID
3251 NTAPI
3252 RtlFreeThreadActivationContextStack(void);
3253
3254 NTSYSAPI
3255 PRTL_ACTIVATION_CONTEXT_STACK_FRAME
3256 FASTCALL
3257 RtlDeactivateActivationContextUnsafeFast(
3258 IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame
3259 );
3260
3261 NTSYSAPI
3262 NTSTATUS
3263 NTAPI
3264 RtlDosApplyFileIsolationRedirection_Ustr(
3265 IN BOOLEAN Unknown,
3266 IN PUNICODE_STRING OriginalName,
3267 IN PUNICODE_STRING Extension,
3268 IN OUT PUNICODE_STRING RedirectedName,
3269 IN OUT PUNICODE_STRING RedirectedName2,
3270 IN OUT PUNICODE_STRING *OriginalName2,
3271 IN PVOID Unknown1,
3272 IN PVOID Unknown2,
3273 IN PVOID Unknown3
3274 );
3275
3276 NTSYSAPI
3277 NTSTATUS
3278 NTAPI
3279 RtlFindActivationContextSectionString(
3280 IN ULONG dwFlags,
3281 IN const GUID *ExtensionGuid,
3282 IN ULONG SectionType,
3283 IN PUNICODE_STRING SectionName,
3284 IN OUT PVOID ReturnedData
3285 );
3286
3287 NTSYSAPI
3288 NTSTATUS
3289 NTAPI
3290 RtlQueryInformationActivationContext(
3291 DWORD dwFlags,
3292 PVOID Context,
3293 PVOID pvSubInstance,
3294 ULONG ulInfoClass,
3295 PVOID pvBuffer,
3296 SIZE_T cbBuffer OPTIONAL,
3297 SIZE_T *pcbWrittenOrRequired OPTIONAL
3298 );
3299
3300 NTSYSAPI
3301 NTSTATUS
3302 NTAPI
3303 RtlZombifyActivationContext(
3304 PVOID Context
3305 );
3306
3307
3308 #endif
3309
3310 //
3311 // Registry Functions
3312 //
3313 NTSYSAPI
3314 NTSTATUS
3315 NTAPI
3316 RtlCheckRegistryKey(
3317 ULONG RelativeTo,
3318 PWSTR Path
3319 );
3320
3321 NTSYSAPI
3322 NTSTATUS
3323 NTAPI
3324 RtlCreateRegistryKey(
3325 IN ULONG RelativeTo,
3326 IN PWSTR Path
3327 );
3328
3329 NTSYSAPI
3330 NTSTATUS
3331 NTAPI
3332 RtlFormatCurrentUserKeyPath(
3333 IN OUT PUNICODE_STRING KeyPath
3334 );
3335
3336 NTSYSAPI
3337 NTSTATUS
3338 NTAPI
3339 RtlpNtOpenKey(
3340 OUT HANDLE KeyHandle,
3341 IN ACCESS_MASK DesiredAccess,
3342 IN POBJECT_ATTRIBUTES ObjectAttributes,
3343 IN ULONG Unused
3344 );
3345
3346 NTSYSAPI
3347 NTSTATUS
3348 NTAPI
3349 RtlOpenCurrentUser(
3350 IN ACCESS_MASK DesiredAccess,
3351 OUT PHANDLE KeyHandle
3352 );
3353
3354 NTSYSAPI
3355 NTSTATUS
3356 NTAPI
3357 RtlQueryRegistryValues(
3358 IN ULONG RelativeTo,
3359 IN PCWSTR Path,
3360 IN PRTL_QUERY_REGISTRY_TABLE QueryTable,
3361 IN PVOID Context,
3362 IN PVOID Environment
3363 );
3364
3365 NTSYSAPI
3366 NTSTATUS
3367 NTAPI
3368 RtlWriteRegistryValue(
3369 ULONG RelativeTo,
3370 PCWSTR Path,
3371 PCWSTR ValueName,
3372 ULONG ValueType,
3373 PVOID ValueData,
3374 ULONG ValueLength
3375 );
3376
3377 //
3378 // NLS Functions
3379 //
3380 NTSYSAPI
3381 VOID
3382 NTAPI
3383 RtlGetDefaultCodePage(
3384 OUT PUSHORT AnsiCodePage,
3385 OUT PUSHORT OemCodePage
3386 );
3387
3388 NTSYSAPI
3389 VOID
3390 NTAPI
3391 RtlInitNlsTables(
3392 IN PUSHORT AnsiTableBase,
3393 IN PUSHORT OemTableBase,
3394 IN PUSHORT CaseTableBase,
3395 OUT PNLSTABLEINFO NlsTable
3396 );
3397
3398 NTSYSAPI
3399 VOID
3400 NTAPI
3401 RtlInitCodePageTable(
3402 IN PUSHORT TableBase,
3403 OUT PCPTABLEINFO CodePageTable
3404 );
3405
3406 NTSYSAPI
3407 VOID
3408 NTAPI
3409 RtlResetRtlTranslations(IN PNLSTABLEINFO NlsTable);
3410
3411 #if defined(NTOS_MODE_USER) && !defined(NO_RTL_INLINES)
3412
3413 //
3414 // Misc conversion functions
3415 //
3416 static __inline
3417 LARGE_INTEGER
3418 NTAPI_INLINE
3419 RtlConvertLongToLargeInteger(
3420 LONG SignedInteger
3421 )
3422 {
3423 LARGE_INTEGER Result;
3424
3425 Result.QuadPart = SignedInteger;
3426 return Result;
3427 }
3428
3429 static __inline
3430 LARGE_INTEGER
3431 NTAPI_INLINE
3432 RtlEnlargedIntegerMultiply(
3433 LONG Multiplicand,
3434 LONG Multiplier
3435 )
3436 {
3437 LARGE_INTEGER Product;
3438
3439 Product.QuadPart = (LONGLONG)Multiplicand * (ULONGLONG)Multiplier;
3440 return Product;
3441 }
3442
3443 static __inline
3444 ULONG
3445 NTAPI_INLINE
3446 RtlEnlargedUnsignedDivide(
3447 IN ULARGE_INTEGER Dividend,
3448 IN ULONG Divisor,
3449 IN PULONG Remainder OPTIONAL
3450 )
3451 {
3452 ULONG Quotient;
3453
3454 Quotient = (ULONG)(Dividend.QuadPart / Divisor);
3455 if (Remainder) {
3456 *Remainder = (ULONG)(Dividend.QuadPart % Divisor);
3457 }
3458
3459 return Quotient;
3460 }
3461
3462 static __inline
3463 LARGE_INTEGER
3464 NTAPI_INLINE
3465 RtlEnlargedUnsignedMultiply(
3466 ULONG Multiplicand,
3467 ULONG Multiplier
3468 )
3469 {
3470 LARGE_INTEGER Product;
3471
3472 Product.QuadPart = (ULONGLONG)Multiplicand * (ULONGLONG)Multiplier;
3473 return Product;
3474 }
3475 #endif
3476
3477 NTSYSAPI
3478 ULONG
3479 NTAPI
3480 RtlUniform(
3481 IN PULONG Seed
3482 );
3483
3484 NTSYSAPI
3485 ULONG
3486 NTAPI
3487 RtlRandom(
3488 IN OUT PULONG Seed
3489 );
3490
3491 NTSYSAPI
3492 ULONG
3493 NTAPI
3494 RtlComputeCrc32(
3495 IN ULONG InitialCrc,
3496 IN PUCHAR Buffer,
3497 IN ULONG Length
3498 );
3499
3500 //
3501 // Network Functions
3502 //
3503 NTSYSAPI
3504 NTSTATUS
3505 NTAPI
3506 RtlIpv4StringToAddressW(
3507 IN PCWSTR String,
3508 IN BOOLEAN Strict,
3509 OUT LPWSTR *Terminator,
3510 OUT struct in_addr *Addr
3511 );
3512
3513 NTSYSAPI
3514 NTSTATUS
3515 NTAPI
3516 RtlIpv6StringToAddressA(
3517 IN PCHAR Name,
3518 OUT PCHAR *Terminator,
3519 OUT struct in6_addr *Addr
3520 );
3521
3522 NTSYSAPI
3523 NTSTATUS
3524 NTAPI
3525 RtlIpv6StringToAddressW(
3526 IN PWCHAR Name,
3527 OUT PCHAR *Terminator,
3528 OUT struct in6_addr *Addr
3529 );
3530
3531 NTSYSAPI
3532 NTSTATUS
3533 NTAPI
3534 RtlIpv6StringToAddressExA(
3535 IN PCHAR AddressString,
3536 IN struct in6_addr *Address,
3537 IN PULONG ScopeId,
3538 IN PUSHORT Port
3539 );
3540
3541 NTSYSAPI
3542 NTSTATUS
3543 NTAPI
3544 RtlIpv6StringToAddressExW(
3545 IN PWCHAR AddressName,
3546 IN struct in6_addr *Address,
3547 IN PULONG ScopeId,
3548 IN PUSHORT Port
3549 );
3550
3551
3552 //
3553 // Time Functions
3554 //
3555 NTSYSAPI
3556 NTSTATUS
3557 NTAPI
3558 RtlQueryTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation);
3559
3560 NTSYSAPI
3561 VOID
3562 NTAPI
3563 RtlSecondsSince1970ToTime(
3564 IN ULONG SecondsSince1970,
3565 OUT PLARGE_INTEGER Time
3566 );
3567
3568 NTSYSAPI
3569 NTSTATUS
3570 NTAPI
3571 RtlSetTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation);
3572
3573 NTSYSAPI
3574 BOOLEAN
3575 NTAPI
3576 RtlTimeFieldsToTime(
3577 PTIME_FIELDS TimeFields,
3578 PLARGE_INTEGER Time
3579 );
3580
3581 NTSYSAPI
3582 BOOLEAN
3583 NTAPI
3584 RtlTimeToSecondsSince1970(
3585 PLARGE_INTEGER Time,
3586 OUT PULONG SecondsSince1970
3587 );
3588
3589 NTSYSAPI
3590 VOID
3591 NTAPI
3592 RtlTimeToTimeFields(
3593 PLARGE_INTEGER Time,
3594 PTIME_FIELDS TimeFields
3595 );
3596
3597 NTSYSAPI
3598 NTSTATUS
3599 NTAPI
3600 RtlSystemTimeToLocalTime(
3601 IN PLARGE_INTEGER SystemTime,
3602 OUT PLARGE_INTEGER LocalTime
3603 );
3604
3605 //
3606 // Version Functions
3607 //
3608 NTSYSAPI
3609 NTSTATUS
3610 NTAPI
3611 RtlVerifyVersionInfo(
3612 IN PRTL_OSVERSIONINFOEXW VersionInfo,
3613 IN ULONG TypeMask,
3614 IN ULONGLONG ConditionMask
3615 );
3616
3617 NTSYSAPI
3618 NTSTATUS
3619 NTAPI
3620 RtlGetVersion(IN OUT PRTL_OSVERSIONINFOW lpVersionInformation);
3621
3622 NTSYSAPI
3623 BOOLEAN
3624 NTAPI
3625 RtlGetNtProductType(OUT PNT_PRODUCT_TYPE ProductType);
3626
3627 //
3628 // Secure Memory Functions
3629 //
3630 #ifdef NTOS_MODE_USER
3631 NTSYSAPI
3632 NTSTATUS
3633 NTAPI
3634 RtlRegisterSecureMemoryCacheCallback(
3635 IN PRTL_SECURE_MEMORY_CACHE_CALLBACK Callback);
3636
3637 NTSYSAPI
3638 BOOLEAN
3639 NTAPI
3640 RtlFlushSecureMemoryCache(
3641 IN PVOID MemoryCache,
3642 IN OPTIONAL SIZE_T MemoryLength
3643 );
3644 #endif
3645
3646 //
3647 // Boot Status Data Functions
3648 //
3649 #ifdef NTOS_MODE_USER
3650 NTSYSAPI
3651 NTSTATUS
3652 NTAPI
3653 RtlCreateBootStatusDataFile(
3654 VOID
3655 );
3656
3657 NTSYSAPI
3658 NTSTATUS
3659 NTAPI
3660 RtlGetSetBootStatusData(
3661 HANDLE FileHandle,
3662 BOOLEAN WriteMode,
3663 DWORD DataClass,
3664 PVOID Buffer,
3665 ULONG BufferSize,
3666 DWORD DataClass2
3667 );
3668
3669 NTSYSAPI
3670 NTSTATUS
3671 NTAPI
3672 RtlLockBootStatusData(
3673 OUT PHANDLE FileHandle
3674 );
3675
3676 NTSYSAPI
3677 NTSTATUS
3678 NTAPI
3679 RtlUnlockBootStatusData(
3680 IN HANDLE FileHandle
3681 );
3682 #endif
3683
3684 #ifdef __cplusplus
3685 }
3686 #endif
3687
3688 #endif