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