Big merge: thanks alex and greatlord. Not a complete merge but most
[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 <extypes.h>
29 #include "in6addr.h"
30 #include "inaddr.h"
31
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
35
36 #ifdef NTOS_MODE_USER
37
38 //
39 // List Functions
40 //
41 FORCEINLINE
42 VOID
43 InitializeListHead(
44 IN PLIST_ENTRY ListHead
45 )
46 {
47 ListHead->Flink = ListHead->Blink = ListHead;
48 }
49
50 FORCEINLINE
51 VOID
52 InsertHeadList(
53 IN PLIST_ENTRY ListHead,
54 IN PLIST_ENTRY Entry
55 )
56 {
57 PLIST_ENTRY OldFlink;
58 OldFlink = ListHead->Flink;
59 Entry->Flink = OldFlink;
60 Entry->Blink = ListHead;
61 OldFlink->Blink = Entry;
62 ListHead->Flink = Entry;
63 }
64
65 FORCEINLINE
66 VOID
67 InsertTailList(
68 IN PLIST_ENTRY ListHead,
69 IN PLIST_ENTRY Entry
70 )
71 {
72 PLIST_ENTRY OldBlink;
73 OldBlink = ListHead->Blink;
74 Entry->Flink = ListHead;
75 Entry->Blink = OldBlink;
76 OldBlink->Flink = Entry;
77 ListHead->Blink = Entry;
78 }
79
80 BOOLEAN
81 FORCEINLINE
82 IsListEmpty(
83 IN const LIST_ENTRY * ListHead
84 )
85 {
86 return (BOOLEAN)(ListHead->Flink == ListHead);
87 }
88
89 FORCEINLINE
90 PSINGLE_LIST_ENTRY
91 PopEntryList(
92 PSINGLE_LIST_ENTRY ListHead
93 )
94 {
95 PSINGLE_LIST_ENTRY FirstEntry;
96 FirstEntry = ListHead->Next;
97 if (FirstEntry != NULL) {
98 ListHead->Next = FirstEntry->Next;
99 }
100
101 return FirstEntry;
102 }
103
104 FORCEINLINE
105 VOID
106 PushEntryList(
107 PSINGLE_LIST_ENTRY ListHead,
108 PSINGLE_LIST_ENTRY Entry
109 )
110 {
111 Entry->Next = ListHead->Next;
112 ListHead->Next = Entry;
113 }
114
115 FORCEINLINE
116 BOOLEAN
117 RemoveEntryList(
118 IN PLIST_ENTRY Entry)
119 {
120 PLIST_ENTRY OldFlink;
121 PLIST_ENTRY OldBlink;
122
123 OldFlink = Entry->Flink;
124 OldBlink = Entry->Blink;
125 OldFlink->Blink = OldBlink;
126 OldBlink->Flink = OldFlink;
127 return (BOOLEAN)(OldFlink == OldBlink);
128 }
129
130 FORCEINLINE
131 PLIST_ENTRY
132 RemoveHeadList(
133 IN PLIST_ENTRY ListHead)
134 {
135 PLIST_ENTRY Flink;
136 PLIST_ENTRY Entry;
137
138 Entry = ListHead->Flink;
139 Flink = Entry->Flink;
140 ListHead->Flink = Flink;
141 Flink->Blink = ListHead;
142 return Entry;
143 }
144
145 FORCEINLINE
146 PLIST_ENTRY
147 RemoveTailList(
148 IN PLIST_ENTRY ListHead)
149 {
150 PLIST_ENTRY Blink;
151 PLIST_ENTRY Entry;
152
153 Entry = ListHead->Blink;
154 Blink = Entry->Blink;
155 ListHead->Blink = Blink;
156 Blink->Flink = ListHead;
157 return Entry;
158 }
159
160 //
161 // Unicode string macros
162 //
163 FORCEINLINE
164 VOID
165 RtlInitEmptyUnicodeString(OUT PUNICODE_STRING UnicodeString,
166 IN PWSTR Buffer,
167 IN USHORT BufferSize)
168 {
169 UnicodeString->Length = 0;
170 UnicodeString->MaximumLength = BufferSize;
171 UnicodeString->Buffer = Buffer;
172 }
173
174 //
175 // LUID Macros
176 //
177 #define RtlEqualLuid(L1, L2) (((L1)->HighPart == (L2)->HighPart) && \
178 ((L1)->LowPart == (L2)->LowPart))
179 FORCEINLINE
180 LUID
181 NTAPI_INLINE
182 RtlConvertUlongToLuid(ULONG Ulong)
183 {
184 LUID TempLuid;
185
186 TempLuid.LowPart = Ulong;
187 TempLuid.HighPart = 0;
188 return TempLuid;
189 }
190
191 //
192 // ASSERT Macros
193 //
194 #ifndef ASSERT
195 #if DBG
196
197 #define ASSERT( exp ) \
198 ((!(exp)) ? \
199 (RtlAssert( #exp, __FILE__, __LINE__, NULL ),FALSE) : \
200 TRUE)
201
202 #define ASSERTMSG( msg, exp ) \
203 ((!(exp)) ? \
204 (RtlAssert( #exp, __FILE__, __LINE__, msg ),FALSE) : \
205 TRUE)
206
207 #else
208
209 #define ASSERT( exp ) ((void) 0)
210 #define ASSERTMSG( msg, exp ) ((void) 0)
211
212 #endif
213 #endif
214
215 //
216 // This macro does nothing in kernel mode
217 //
218 #define RTL_PAGED_CODE NOP_FUNCTION
219
220 //
221 // RTL Splay Tree Functions
222 //
223 NTSYSAPI
224 PRTL_SPLAY_LINKS
225 NTAPI
226 RtlSplay(PRTL_SPLAY_LINKS Links);
227
228 NTSYSAPI
229 PRTL_SPLAY_LINKS
230 NTAPI
231 RtlDelete(PRTL_SPLAY_LINKS Links);
232
233 NTSYSAPI
234 VOID
235 NTAPI
236 RtlDeleteNoSplay(
237 PRTL_SPLAY_LINKS Links,
238 PRTL_SPLAY_LINKS *Root
239 );
240
241 NTSYSAPI
242 PRTL_SPLAY_LINKS
243 NTAPI
244 RtlSubtreeSuccessor(PRTL_SPLAY_LINKS Links);
245
246 NTSYSAPI
247 PRTL_SPLAY_LINKS
248 NTAPI
249 RtlSubtreePredecessor(PRTL_SPLAY_LINKS Links);
250
251 NTSYSAPI
252 PRTL_SPLAY_LINKS
253 NTAPI
254 RtlRealSuccessor(PRTL_SPLAY_LINKS Links);
255
256 NTSYSAPI
257 PRTL_SPLAY_LINKS
258 NTAPI
259 RtlRealPredecessor(PRTL_SPLAY_LINKS Links);
260
261 #define RtlIsLeftChild(Links) \
262 (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
263
264 #define RtlIsRightChild(Links) \
265 (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
266
267 #define RtlRightChild(Links) \
268 ((PRTL_SPLAY_LINKS)(Links))->RightChild
269
270 #define RtlIsRoot(Links) \
271 (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
272
273 #define RtlLeftChild(Links) \
274 ((PRTL_SPLAY_LINKS)(Links))->LeftChild
275
276 #define RtlParent(Links) \
277 ((PRTL_SPLAY_LINKS)(Links))->Parent
278
279 #define RtlInitializeSplayLinks(Links) \
280 { \
281 PRTL_SPLAY_LINKS _SplayLinks; \
282 _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \
283 _SplayLinks->Parent = _SplayLinks; \
284 _SplayLinks->LeftChild = NULL; \
285 _SplayLinks->RightChild = NULL; \
286 }
287
288 #define RtlInsertAsLeftChild(ParentLinks,ChildLinks) \
289 { \
290 PRTL_SPLAY_LINKS _SplayParent; \
291 PRTL_SPLAY_LINKS _SplayChild; \
292 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
293 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
294 _SplayParent->LeftChild = _SplayChild; \
295 _SplayChild->Parent = _SplayParent; \
296 }
297
298 #define RtlInsertAsRightChild(ParentLinks,ChildLinks) \
299 { \
300 PRTL_SPLAY_LINKS _SplayParent; \
301 PRTL_SPLAY_LINKS _SplayChild; \
302 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
303 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
304 _SplayParent->RightChild = _SplayChild; \
305 _SplayChild->Parent = _SplayParent; \
306 }
307 #endif
308
309 #ifdef NTOS_KERNEL_RUNTIME
310
311 //
312 // Executing RTL functions at DISPATCH_LEVEL or higher will result in a
313 // bugcheck.
314 //
315 #define RTL_PAGED_CODE PAGED_CODE
316
317 #endif
318
319 //
320 // Error and Exception Functions
321 //
322 NTSYSAPI
323 PVOID
324 NTAPI
325 RtlAddVectoredExceptionHandler(
326 IN ULONG FirstHandler,
327 IN PVECTORED_EXCEPTION_HANDLER VectoredHandler
328 );
329
330 NTSYSAPI
331 VOID
332 NTAPI
333 RtlAssert(
334 IN PVOID FailedAssertion,
335 IN PVOID FileName,
336 IN ULONG LineNumber,
337 IN PCHAR Message
338 );
339
340 NTSYSAPI
341 PVOID
342 NTAPI
343 RtlSetUnhandledExceptionFilter(
344 IN PVOID TopLevelExceptionFilter
345 );
346
347 NTSYSAPI
348 VOID
349 NTAPI
350 RtlCaptureContext(
351 OUT PCONTEXT ContextRecord
352 );
353
354 NTSYSAPI
355 PVOID
356 NTAPI
357 RtlEncodePointer(
358 IN PVOID Pointer
359 );
360
361 NTSYSAPI
362 PVOID
363 NTAPI
364 RtlDecodePointer(
365 IN PVOID Pointer
366 );
367
368 NTSYSAPI
369 PVOID
370 NTAPI
371 RtlEncodeSystemPointer(
372 IN PVOID Pointer
373 );
374
375 NTSYSAPI
376 PVOID
377 NTAPI
378 RtlDecodeSystemPointer(
379 IN PVOID Pointer
380 );
381
382 NTSYSAPI
383 BOOLEAN
384 NTAPI
385 RtlDispatchException(
386 IN PEXCEPTION_RECORD ExceptionRecord,
387 IN PCONTEXT Context
388 );
389
390 NTSYSAPI
391 ULONG
392 NTAPI
393 RtlNtStatusToDosError(
394 IN NTSTATUS Status
395 );
396
397 NTSYSAPI
398 VOID
399 NTAPI
400 RtlSetLastWin32ErrorAndNtStatusFromNtStatus(
401 IN NTSTATUS Status
402 );
403
404 NTSYSAPI
405 VOID
406 NTAPI
407 RtlRaiseException(
408 IN PEXCEPTION_RECORD ExceptionRecord
409 );
410
411 NTSYSAPI
412 VOID
413 NTAPI
414 RtlRaiseStatus(
415 IN NTSTATUS Status
416 );
417
418 NTSYSAPI
419 LONG
420 NTAPI
421 RtlUnhandledExceptionFilter(
422 IN struct _EXCEPTION_POINTERS* ExceptionInfo
423 );
424
425 NTSYSAPI
426 VOID
427 NTAPI
428 RtlUnwind(
429 IN PVOID TargetFrame OPTIONAL,
430 IN PVOID TargetIp OPTIONAL,
431 IN PEXCEPTION_RECORD ExceptionRecord OPTIONAL,
432 IN PVOID ReturnValue
433 );
434
435 //
436 // Tracing Functions
437 //
438 NTSYSAPI
439 USHORT
440 NTAPI
441 RtlLogStackBackTrace(
442 VOID
443 );
444
445 //
446 // Heap Functions
447 //
448 NTSYSAPI
449 PVOID
450 NTAPI
451 RtlAllocateHeap(
452 IN HANDLE HeapHandle,
453 IN ULONG Flags,
454 IN ULONG Size
455 );
456
457 NTSYSAPI
458 PVOID
459 NTAPI
460 RtlCreateHeap(
461 IN ULONG Flags,
462 IN PVOID BaseAddress OPTIONAL,
463 IN SIZE_T SizeToReserve OPTIONAL,
464 IN SIZE_T SizeToCommit OPTIONAL,
465 IN PVOID Lock OPTIONAL,
466 IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL
467 );
468
469 NTSYSAPI
470 ULONG
471 NTAPI
472 RtlCreateTagHeap(
473 IN HANDLE HeapHandle,
474 IN ULONG Flags,
475 IN PWSTR TagName,
476 IN PWSTR TagSubName
477 );
478
479 ULONG
480 NTAPI
481 RtlCompactHeap(
482 HANDLE Heap,
483 ULONG Flags
484 );
485
486 NTSYSAPI
487 PVOID
488 NTAPI
489 RtlDebugCreateHeap(
490 IN ULONG Flags,
491 IN PVOID BaseAddress OPTIONAL,
492 IN SIZE_T SizeToReserve OPTIONAL,
493 IN SIZE_T SizeToCommit OPTIONAL,
494 IN PVOID Lock OPTIONAL,
495 IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL
496 );
497
498 NTSYSAPI
499 HANDLE
500 NTAPI
501 RtlDestroyHeap(
502 IN HANDLE Heap
503 );
504
505 NTSYSAPI
506 ULONG
507 NTAPI
508 RtlExtendHeap(
509 IN HANDLE Heap,
510 IN ULONG Flags,
511 IN PVOID P,
512 IN ULONG Size
513 );
514
515 NTSYSAPI
516 BOOLEAN
517 NTAPI
518 RtlFreeHeap(
519 IN HANDLE HeapHandle,
520 IN ULONG Flags,
521 IN PVOID P
522 );
523
524 NTSYSAPI
525 ULONG
526 NTAPI
527 RtlGetNtGlobalFlags(
528 VOID
529 );
530
531 ULONG
532 NTAPI
533 RtlGetProcessHeaps(
534 ULONG HeapCount,
535 HANDLE *HeapArray
536 );
537
538 BOOLEAN
539 NTAPI
540 RtlGetUserInfoHeap(
541 IN PVOID HeapHandle,
542 IN ULONG Flags,
543 IN PVOID BaseAddress,
544 OUT PVOID *UserValue,
545 OUT PULONG UserFlags
546 );
547
548 NTSYSAPI
549 PWSTR
550 NTAPI
551 RtlQueryTagHeap(
552 IN PVOID HeapHandle,
553 IN ULONG Flags,
554 IN USHORT TagIndex,
555 IN BOOLEAN ResetCounters,
556 OUT PRTL_HEAP_TAG_INFO HeapTagInfo
557 );
558
559 NTSYSAPI
560 PVOID
561 NTAPI
562 RtlReAllocateHeap(
563 HANDLE Heap,
564 ULONG Flags,
565 PVOID Ptr,
566 ULONG Size
567 );
568
569 NTSYSAPI
570 BOOLEAN
571 NTAPI
572 RtlLockHeap(
573 IN HANDLE Heap
574 );
575
576 NTSYSAPI
577 NTSTATUS
578 NTAPI
579 RtlUsageHeap(
580 IN HANDLE Heap,
581 IN ULONG Flags,
582 OUT PRTL_HEAP_USAGE Usage
583 );
584
585 NTSYSAPI
586 BOOLEAN
587 NTAPI
588 RtlUnlockHeap(
589 IN HANDLE Heap
590 );
591
592 BOOLEAN
593 NTAPI
594 RtlSetUserValueHeap(
595 IN PVOID HeapHandle,
596 IN ULONG Flags,
597 IN PVOID BaseAddress,
598 IN PVOID UserValue
599 );
600
601 NTSYSAPI
602 ULONG
603 NTAPI
604 RtlSizeHeap(
605 IN PVOID HeapHandle,
606 IN ULONG Flags,
607 IN PVOID MemoryPointer
608 );
609
610 NTSYSAPI
611 BOOLEAN
612 NTAPI
613 RtlValidateHeap(
614 HANDLE Heap,
615 ULONG Flags,
616 PVOID P
617 );
618
619 #define RtlGetProcessHeap() (NtCurrentPeb()->ProcessHeap)
620
621 //
622 // Security Functions
623 //
624 NTSYSAPI
625 NTSTATUS
626 NTAPI
627 RtlAbsoluteToSelfRelativeSD(
628 IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor,
629 IN OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor,
630 IN PULONG BufferLength
631 );
632
633 NTSYSAPI
634 NTSTATUS
635 NTAPI
636 RtlAddAccessAllowedAce(
637 PACL Acl,
638 ULONG Revision,
639 ACCESS_MASK AccessMask,
640 PSID Sid
641 );
642
643 NTSYSAPI
644 NTSTATUS
645 NTAPI
646 RtlAddAccessAllowedAceEx(
647 IN OUT PACL pAcl,
648 IN ULONG dwAceRevision,
649 IN ULONG AceFlags,
650 IN ULONG AccessMask,
651 IN PSID pSid
652 );
653
654 NTSYSAPI
655 NTSTATUS
656 NTAPI
657 RtlAddAccessAllowedObjectAce(
658 IN OUT PACL pAcl,
659 IN ULONG dwAceRevision,
660 IN ULONG AceFlags,
661 IN ULONG AccessMask,
662 IN GUID *ObjectTypeGuid OPTIONAL,
663 IN GUID *InheritedObjectTypeGuid OPTIONAL,
664 IN PSID pSid
665 );
666
667 NTSYSAPI
668 NTSTATUS
669 NTAPI
670 RtlAddAccessDeniedAce(
671 PACL Acl,
672 ULONG Revision,
673 ACCESS_MASK AccessMask,
674 PSID Sid
675 );
676
677 NTSYSAPI
678 NTSTATUS
679 NTAPI
680 RtlAddAccessDeniedAceEx(
681 IN OUT PACL Acl,
682 IN ULONG Revision,
683 IN ULONG Flags,
684 IN ACCESS_MASK AccessMask,
685 IN PSID Sid
686 );
687
688 NTSYSAPI
689 NTSTATUS
690 NTAPI
691 RtlAddAccessDeniedObjectAce(
692 IN OUT PACL pAcl,
693 IN ULONG dwAceRevision,
694 IN ULONG AceFlags,
695 IN ULONG AccessMask,
696 IN GUID *ObjectTypeGuid OPTIONAL,
697 IN GUID *InheritedObjectTypeGuid OPTIONAL,
698 IN PSID pSid
699 );
700
701 NTSYSAPI
702 NTSTATUS
703 NTAPI
704 RtlAddAce(
705 PACL Acl,
706 ULONG AceRevision,
707 ULONG StartingAceIndex,
708 PVOID AceList,
709 ULONG AceListLength
710 );
711
712 NTSYSAPI
713 NTSTATUS
714 NTAPI
715 RtlAddAuditAccessAce(
716 PACL Acl,
717 ULONG Revision,
718 ACCESS_MASK AccessMask,
719 PSID Sid,
720 BOOLEAN Success,
721 BOOLEAN Failure
722 );
723
724 NTSYSAPI
725 NTSTATUS
726 NTAPI
727 RtlAcquirePrivilege(
728 IN PULONG Privilege,
729 IN ULONG NumPriv,
730 IN ULONG Flags,
731 OUT PVOID *ReturnedState
732 );
733
734 NTSYSAPI
735 NTSTATUS
736 NTAPI
737 RtlAddAuditAccessAceEx(
738 IN OUT PACL Acl,
739 IN ULONG Revision,
740 IN ULONG Flags,
741 IN ACCESS_MASK AccessMask,
742 IN PSID Sid,
743 IN BOOLEAN Success,
744 IN BOOLEAN Failure
745 );
746
747 NTSYSAPI
748 NTSTATUS
749 NTAPI
750 RtlAddAuditAccessObjectAce(
751 IN OUT PACL Acl,
752 IN ULONG Revision,
753 IN ULONG Flags,
754 IN ACCESS_MASK AccessMask,
755 IN GUID *ObjectTypeGuid OPTIONAL,
756 IN GUID *InheritedObjectTypeGuid OPTIONAL,
757 IN PSID Sid,
758 IN BOOLEAN Success,
759 IN BOOLEAN Failure
760 );
761
762 NTSYSAPI
763 NTSTATUS
764 NTAPI
765 RtlAdjustPrivilege(
766 IN ULONG Privilege,
767 IN BOOLEAN NewValue,
768 IN BOOLEAN ForThread,
769 OUT PBOOLEAN OldValue
770 );
771
772 NTSYSAPI
773 NTSTATUS
774 NTAPI
775 RtlAllocateAndInitializeSid(
776 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
777 IN UCHAR SubAuthorityCount,
778 IN ULONG SubAuthority0,
779 IN ULONG SubAuthority1,
780 IN ULONG SubAuthority2,
781 IN ULONG SubAuthority3,
782 IN ULONG SubAuthority4,
783 IN ULONG SubAuthority5,
784 IN ULONG SubAuthority6,
785 IN ULONG SubAuthority7,
786 OUT PSID *Sid
787 );
788
789 NTSYSAPI
790 BOOLEAN
791 NTAPI
792 RtlAreAllAccessesGranted(
793 ACCESS_MASK GrantedAccess,
794 ACCESS_MASK DesiredAccess
795 );
796
797 NTSYSAPI
798 BOOLEAN
799 NTAPI
800 RtlAreAnyAccessesGranted(
801 ACCESS_MASK GrantedAccess,
802 ACCESS_MASK DesiredAccess
803 );
804
805 NTSYSAPI
806 VOID
807 NTAPI
808 RtlCopyLuid(
809 IN PLUID LuidDest,
810 IN PLUID LuidSrc
811 );
812
813 NTSYSAPI
814 VOID
815 NTAPI
816 RtlCopyLuidAndAttributesArray(
817 ULONG Count,
818 PLUID_AND_ATTRIBUTES Src,
819 PLUID_AND_ATTRIBUTES Dest
820 );
821
822 NTSYSAPI
823 NTSTATUS
824 NTAPI
825 RtlCopySidAndAttributesArray(
826 ULONG Count,
827 PSID_AND_ATTRIBUTES Src,
828 ULONG SidAreaSize,
829 PSID_AND_ATTRIBUTES Dest,
830 PVOID SidArea,
831 PVOID* RemainingSidArea,
832 PULONG RemainingSidAreaSize
833 );
834
835 NTSYSAPI
836 NTSTATUS
837 NTAPI
838 RtlConvertSidToUnicodeString(
839 OUT PUNICODE_STRING DestinationString,
840 IN PSID Sid,
841 IN BOOLEAN AllocateDestinationString
842 );
843
844 NTSYSAPI
845 NTSTATUS
846 NTAPI
847 RtlCopySid(
848 IN ULONG Length,
849 IN PSID Destination,
850 IN PSID Source
851 );
852
853 NTSYSAPI
854 NTSTATUS
855 NTAPI
856 RtlCreateAcl(
857 PACL Acl,
858 ULONG AclSize,
859 ULONG AclRevision
860 );
861
862 NTSYSAPI
863 NTSTATUS
864 NTAPI
865 RtlCreateSecurityDescriptor(
866 OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
867 IN ULONG Revision
868 );
869
870 NTSYSAPI
871 NTSTATUS
872 NTAPI
873 RtlCreateSecurityDescriptorRelative(
874 OUT PISECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor,
875 IN ULONG Revision
876 );
877
878 NTSYSAPI
879 NTSTATUS
880 NTAPI
881 RtlDeleteAce(
882 PACL Acl,
883 ULONG AceIndex
884 );
885
886 NTSYSAPI
887 BOOLEAN
888 NTAPI
889 RtlEqualPrefixSid(
890 PSID Sid1,
891 PSID Sid2
892 );
893
894 NTSYSAPI
895 BOOLEAN
896 NTAPI
897 RtlEqualSid (
898 IN PSID Sid1,
899 IN PSID Sid2
900 );
901
902 NTSYSAPI
903 BOOLEAN
904 NTAPI
905 RtlFirstFreeAce(
906 PACL Acl,
907 PACE* Ace
908 );
909
910 NTSYSAPI
911 PVOID
912 NTAPI
913 RtlFreeSid (
914 IN PSID Sid
915 );
916
917 NTSYSAPI
918 NTSTATUS
919 NTAPI
920 RtlGetAce(
921 PACL Acl,
922 ULONG AceIndex,
923 PVOID *Ace
924 );
925
926 NTSYSAPI
927 NTSTATUS
928 NTAPI
929 RtlGetControlSecurityDescriptor(
930 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
931 OUT PSECURITY_DESCRIPTOR_CONTROL Control,
932 OUT PULONG Revision
933 );
934
935 NTSYSAPI
936 NTSTATUS
937 NTAPI
938 RtlGetDaclSecurityDescriptor(
939 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
940 OUT PBOOLEAN DaclPresent,
941 OUT PACL *Dacl,
942 OUT PBOOLEAN DaclDefaulted
943 );
944
945 NTSYSAPI
946 NTSTATUS
947 NTAPI
948 RtlGetSaclSecurityDescriptor(
949 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
950 OUT PBOOLEAN SaclPresent,
951 OUT PACL* Sacl,
952 OUT PBOOLEAN SaclDefaulted
953 );
954
955 NTSYSAPI
956 NTSTATUS
957 NTAPI
958 RtlGetGroupSecurityDescriptor(
959 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
960 OUT PSID *Group,
961 OUT PBOOLEAN GroupDefaulted
962 );
963
964 NTSYSAPI
965 NTSTATUS
966 NTAPI
967 RtlGetOwnerSecurityDescriptor(
968 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
969 OUT PSID *Owner,
970 OUT PBOOLEAN OwnerDefaulted
971 );
972
973 NTSYSAPI
974 BOOLEAN
975 NTAPI
976 RtlGetSecurityDescriptorRMControl(
977 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
978 OUT PUCHAR RMControl
979 );
980
981 NTSYSAPI
982 PSID_IDENTIFIER_AUTHORITY
983 NTAPI
984 RtlIdentifierAuthoritySid(PSID Sid);
985
986 NTSYSAPI
987 NTSTATUS
988 NTAPI
989 RtlImpersonateSelf(IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel);
990
991 NTSYSAPI
992 NTSTATUS
993 NTAPI
994 RtlInitializeSid(
995 IN OUT PSID Sid,
996 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
997 IN UCHAR SubAuthorityCount
998 );
999
1000 NTSYSAPI
1001 ULONG
1002 NTAPI
1003 RtlLengthRequiredSid(IN ULONG SubAuthorityCount);
1004
1005 NTSYSAPI
1006 ULONG
1007 NTAPI
1008 RtlLengthSid(IN PSID Sid);
1009
1010 NTSYSAPI
1011 NTSTATUS
1012 NTAPI
1013 RtlMakeSelfRelativeSD(
1014 IN PSECURITY_DESCRIPTOR AbsoluteSD,
1015 OUT PSECURITY_DESCRIPTOR SelfRelativeSD,
1016 IN OUT PULONG BufferLength);
1017
1018 NTSYSAPI
1019 VOID
1020 NTAPI
1021 RtlMapGenericMask(
1022 PACCESS_MASK AccessMask,
1023 PGENERIC_MAPPING GenericMapping
1024 );
1025
1026 NTSYSAPI
1027 NTSTATUS
1028 NTAPI
1029 RtlQueryInformationAcl(
1030 PACL Acl,
1031 PVOID Information,
1032 ULONG InformationLength,
1033 ACL_INFORMATION_CLASS InformationClass
1034 );
1035
1036 NTSYSAPI
1037 VOID
1038 NTAPI
1039 RtlReleasePrivilege(
1040 IN PVOID ReturnedState
1041 );
1042
1043 NTSYSAPI
1044 NTSTATUS
1045 NTAPI
1046 RtlSelfRelativeToAbsoluteSD(
1047 IN PSECURITY_DESCRIPTOR SelfRelativeSD,
1048 OUT PSECURITY_DESCRIPTOR AbsoluteSD,
1049 IN PULONG AbsoluteSDSize,
1050 IN PACL Dacl,
1051 IN PULONG DaclSize,
1052 IN PACL Sacl,
1053 IN PULONG SaclSize,
1054 IN PSID Owner,
1055 IN PULONG OwnerSize,
1056 IN PSID PrimaryGroup,
1057 IN PULONG PrimaryGroupSize
1058 );
1059
1060 NTSYSAPI
1061 NTSTATUS
1062 NTAPI
1063 RtlSelfRelativeToAbsoluteSD2(
1064 IN OUT PSECURITY_DESCRIPTOR SelfRelativeSD,
1065 OUT PULONG BufferSize
1066 );
1067
1068 NTSYSAPI
1069 NTSTATUS
1070 NTAPI
1071 RtlSetAttributesSecurityDescriptor(
1072 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
1073 IN SECURITY_DESCRIPTOR_CONTROL Control,
1074 OUT PULONG Revision
1075 );
1076
1077 NTSYSAPI
1078 NTSTATUS
1079 NTAPI
1080 RtlSetControlSecurityDescriptor(
1081 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
1082 IN SECURITY_DESCRIPTOR_CONTROL ControlBitsOfInterest,
1083 IN SECURITY_DESCRIPTOR_CONTROL ControlBitsToSet
1084 );
1085
1086 NTSYSAPI
1087 NTSTATUS
1088 NTAPI
1089 RtlSetDaclSecurityDescriptor (
1090 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
1091 IN BOOLEAN DaclPresent,
1092 IN PACL Dacl,
1093 IN BOOLEAN DaclDefaulted
1094 );
1095
1096 NTSYSAPI
1097 NTSTATUS
1098 NTAPI
1099 RtlSetGroupSecurityDescriptor(
1100 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
1101 IN PSID Group,
1102 IN BOOLEAN GroupDefaulted
1103 );
1104
1105 NTSYSAPI
1106 NTSTATUS
1107 NTAPI
1108 RtlSetInformationAcl(
1109 PACL Acl,
1110 PVOID Information,
1111 ULONG InformationLength,
1112 ACL_INFORMATION_CLASS InformationClass
1113 );
1114
1115 NTSYSAPI
1116 NTSTATUS
1117 NTAPI
1118 RtlSetOwnerSecurityDescriptor(
1119 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
1120 IN PSID Owner,
1121 IN BOOLEAN OwnerDefaulted
1122 );
1123
1124 NTSYSAPI
1125 NTSTATUS
1126 NTAPI
1127 RtlSetSaclSecurityDescriptor(
1128 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
1129 IN BOOLEAN SaclPresent,
1130 IN PACL Sacl,
1131 IN BOOLEAN SaclDefaulted
1132 );
1133
1134 NTSYSAPI
1135 VOID
1136 NTAPI
1137 RtlSetSecurityDescriptorRMControl(
1138 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
1139 IN PUCHAR RMControl
1140 );
1141
1142 NTSYSAPI
1143 PUCHAR
1144 NTAPI
1145 RtlSubAuthorityCountSid(
1146 IN PSID Sid
1147 );
1148
1149 NTSYSAPI
1150 PULONG
1151 NTAPI
1152 RtlSubAuthoritySid(
1153 IN PSID Sid,
1154 IN ULONG SubAuthority
1155 );
1156
1157 NTSYSAPI
1158 BOOLEAN
1159 NTAPI
1160 RtlValidRelativeSecurityDescriptor(
1161 IN PSECURITY_DESCRIPTOR SecurityDescriptorInput,
1162 IN ULONG SecurityDescriptorLength,
1163 IN SECURITY_INFORMATION RequiredInformation
1164 );
1165
1166 NTSYSAPI
1167 BOOLEAN
1168 NTAPI
1169 RtlValidSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor);
1170
1171 NTSYSAPI
1172 BOOLEAN
1173 NTAPI
1174 RtlValidSid(IN PSID Sid);
1175
1176 NTSYSAPI
1177 BOOLEAN
1178 NTAPI
1179 RtlValidAcl(PACL Acl);
1180
1181 NTSYSAPI
1182 NTSTATUS
1183 NTAPI
1184 RtlDeleteSecurityObject(
1185 IN PSECURITY_DESCRIPTOR *ObjectDescriptor
1186 );
1187
1188 NTSYSAPI
1189 NTSTATUS
1190 NTAPI
1191 RtlNewSecurityObject(
1192 IN PSECURITY_DESCRIPTOR ParentDescriptor,
1193 IN PSECURITY_DESCRIPTOR CreatorDescriptor,
1194 OUT PSECURITY_DESCRIPTOR *NewDescriptor,
1195 IN BOOLEAN IsDirectoryObject,
1196 IN HANDLE Token,
1197 IN PGENERIC_MAPPING GenericMapping
1198 );
1199
1200 NTSYSAPI
1201 NTSTATUS
1202 NTAPI
1203 RtlQuerySecurityObject(
1204 IN PSECURITY_DESCRIPTOR ObjectDescriptor,
1205 IN SECURITY_INFORMATION SecurityInformation,
1206 OUT PSECURITY_DESCRIPTOR ResultantDescriptor,
1207 IN ULONG DescriptorLength,
1208 OUT PULONG ReturnLength
1209 );
1210
1211 NTSYSAPI
1212 NTSTATUS
1213 NTAPI
1214 RtlSetSecurityObject(
1215 IN SECURITY_INFORMATION SecurityInformation,
1216 IN PSECURITY_DESCRIPTOR ModificationDescriptor,
1217 OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
1218 IN PGENERIC_MAPPING GenericMapping,
1219 IN HANDLE Token
1220 );
1221
1222 //
1223 // Single-Character Functions
1224 //
1225 NTSYSAPI
1226 NTSTATUS
1227 NTAPI
1228 RtlLargeIntegerToChar(
1229 IN PLARGE_INTEGER Value,
1230 IN ULONG Base,
1231 IN ULONG Length,
1232 IN OUT PCHAR String
1233 );
1234
1235 NTSYSAPI
1236 CHAR
1237 NTAPI
1238 RtlUpperChar(CHAR Source);
1239
1240 NTSYSAPI
1241 WCHAR
1242 NTAPI
1243 RtlUpcaseUnicodeChar(WCHAR Source);
1244
1245 NTSYSAPI
1246 WCHAR
1247 NTAPI
1248 RtlDowncaseUnicodeChar(IN WCHAR Source);
1249
1250 NTSYSAPI
1251 NTSTATUS
1252 NTAPI
1253 RtlIntegerToChar(
1254 IN ULONG Value,
1255 IN ULONG Base,
1256 IN ULONG Length,
1257 IN OUT PCHAR String
1258 );
1259
1260 NTSYSAPI
1261 NTSTATUS
1262 NTAPI
1263 RtlIntegerToUnicode(
1264 IN ULONG Value,
1265 IN ULONG Base OPTIONAL,
1266 IN ULONG Length OPTIONAL,
1267 IN OUT LPWSTR String
1268 );
1269
1270 NTSYSAPI
1271 NTSTATUS
1272 NTAPI
1273 RtlIntegerToUnicodeString(
1274 IN ULONG Value,
1275 IN ULONG Base,
1276 IN OUT PUNICODE_STRING String
1277 );
1278
1279 NTSYSAPI
1280 NTSTATUS
1281 NTAPI
1282 RtlCharToInteger(
1283 PCSZ String,
1284 ULONG Base,
1285 PULONG Value
1286 );
1287
1288 //
1289 // Byte Swap Functions
1290 //
1291 #if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037)) || \
1292 ((defined(_M_AMD64) || \
1293 defined(_M_IA64)) && (_MSC_FULL_VER > 13009175))
1294
1295 unsigned short __cdecl _byteswap_ushort(unsigned short);
1296 unsigned long __cdecl _byteswap_ulong (unsigned long);
1297 unsigned __int64 __cdecl _byteswap_uint64(unsigned __int64);
1298 #pragma intrinsic(_byteswap_ushort)
1299 #pragma intrinsic(_byteswap_ulong)
1300 #pragma intrinsic(_byteswap_uint64)
1301 #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
1302 #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
1303 #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
1304
1305 #else
1306
1307 NTSYSAPI
1308 USHORT
1309 FASTCALL
1310 RtlUshortByteSwap(IN USHORT Source);
1311
1312 NTSYSAPI
1313 ULONG
1314 FASTCALL
1315 RtlUlongByteSwap(IN ULONG Source);
1316
1317 NTSYSAPI
1318 ULONGLONG
1319 FASTCALL
1320 RtlUlonglongByteSwap(IN ULONGLONG Source);
1321
1322 #endif
1323
1324 //
1325 // Unicode->Ansi String Functions
1326 //
1327 NTSYSAPI
1328 ULONG
1329 NTAPI
1330 RtlxUnicodeStringToAnsiSize(IN PCUNICODE_STRING UnicodeString);
1331
1332 #ifdef NTOS_MODE_USER
1333
1334 #define RtlUnicodeStringToAnsiSize(STRING) ( \
1335 NLS_MB_CODE_PAGE_TAG ? \
1336 RtlxUnicodeStringToAnsiSize(STRING) : \
1337 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
1338 )
1339
1340 #endif
1341
1342 NTSYSAPI
1343 NTSTATUS
1344 NTAPI
1345 RtlUnicodeStringToAnsiString(
1346 PANSI_STRING DestinationString,
1347 PCUNICODE_STRING SourceString,
1348 BOOLEAN AllocateDestinationString
1349 );
1350
1351 //
1352 // Unicode->OEM String Functions
1353 //
1354 NTSYSAPI
1355 NTSTATUS
1356 NTAPI
1357 RtlUpcaseUnicodeStringToOemString(
1358 POEM_STRING DestinationString,
1359 PCUNICODE_STRING SourceString,
1360 BOOLEAN AllocateDestinationString
1361 );
1362
1363 NTSYSAPI
1364 NTSTATUS
1365 NTAPI
1366 RtlUpcaseUnicodeStringToCountedOemString(
1367 IN OUT POEM_STRING DestinationString,
1368 IN PCUNICODE_STRING SourceString,
1369 IN BOOLEAN AllocateDestinationString
1370 );
1371
1372 NTSYSAPI
1373 NTSTATUS
1374 NTAPI
1375 RtlUnicodeStringToOemString(
1376 POEM_STRING DestinationString,
1377 PCUNICODE_STRING SourceString,
1378 BOOLEAN AllocateDestinationString
1379 );
1380
1381 NTSYSAPI
1382 NTSTATUS
1383 NTAPI
1384 RtlUpcaseUnicodeToOemN(
1385 PCHAR OemString,
1386 ULONG OemSize,
1387 PULONG ResultSize,
1388 PWCHAR UnicodeString,
1389 ULONG UnicodeSize
1390 );
1391
1392 NTSYSAPI
1393 ULONG
1394 NTAPI
1395 RtlxUnicodeStringToOemSize(IN PCUNICODE_STRING UnicodeString);
1396
1397 #ifdef NTOS_MODE_USER
1398
1399 #define RtlUnicodeStringToOemSize(STRING) ( \
1400 NLS_MB_OEM_CODE_PAGE_TAG ? \
1401 RtlxUnicodeStringToOemSize(STRING) : \
1402 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
1403 )
1404
1405 #define RtlUnicodeStringToCountedOemSize(STRING) ( \
1406 (ULONG)(RtlUnicodeStringToOemSize(STRING) - sizeof(ANSI_NULL)) \
1407 )
1408
1409 #endif
1410
1411 NTSYSAPI
1412 NTSTATUS
1413 NTAPI
1414 RtlUnicodeToOemN(
1415 PCHAR OemString,
1416 ULONG OemSize,
1417 PULONG ResultSize,
1418 PWCHAR UnicodeString,
1419 ULONG UnicodeSize
1420 );
1421
1422 //
1423 // Unicode->MultiByte String Functions
1424 //
1425 NTSYSAPI
1426 NTSTATUS
1427 NTAPI
1428 RtlUnicodeToMultiByteN(
1429 PCHAR MbString,
1430 ULONG MbSize,
1431 PULONG ResultSize,
1432 PWCHAR UnicodeString,
1433 ULONG UnicodeSize
1434 );
1435
1436 NTSYSAPI
1437 NTSTATUS
1438 NTAPI
1439 RtlUpcaseUnicodeToMultiByteN(
1440 PCHAR MbString,
1441 ULONG MbSize,
1442 PULONG ResultSize,
1443 PWCHAR UnicodeString,
1444 ULONG UnicodeSize
1445 );
1446
1447 NTSYSAPI
1448 NTSTATUS
1449 NTAPI
1450 RtlUnicodeToMultiByteSize(
1451 PULONG MbSize,
1452 PWCHAR UnicodeString,
1453 ULONG UnicodeSize
1454 );
1455
1456 NTSYSAPI
1457 ULONG
1458 NTAPI
1459 RtlxOemStringToUnicodeSize(IN PCOEM_STRING OemString);
1460
1461 //
1462 // OEM to Unicode Functions
1463 //
1464 NTSYSAPI
1465 NTSTATUS
1466 NTAPI
1467 RtlOemStringToUnicodeString(
1468 PUNICODE_STRING DestinationString,
1469 PCOEM_STRING SourceString,
1470 BOOLEAN AllocateDestinationString
1471 );
1472
1473 NTSYSAPI
1474 NTSTATUS
1475 NTAPI
1476 RtlOemToUnicodeN(
1477 PWSTR UnicodeString,
1478 ULONG MaxBytesInUnicodeString,
1479 PULONG BytesInUnicodeString,
1480 IN PCHAR OemString,
1481 ULONG BytesInOemString
1482 );
1483
1484 #ifdef NTOS_MODE_USER
1485
1486 #define RtlOemStringToUnicodeSize(STRING) ( \
1487 NLS_MB_OEM_CODE_PAGE_TAG ? \
1488 RtlxOemStringToUnicodeSize(STRING) : \
1489 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
1490 )
1491
1492 #define RtlOemStringToCountedUnicodeSize(STRING) ( \
1493 (ULONG)(RtlOemStringToUnicodeSize(STRING) - sizeof(UNICODE_NULL)) \
1494 )
1495
1496 #endif
1497
1498 //
1499 // Ansi->Unicode String Functions
1500 //
1501 NTSYSAPI
1502 ULONG
1503 NTAPI
1504 RtlxAnsiStringToUnicodeSize(
1505 PCANSI_STRING AnsiString
1506 );
1507
1508 NTSYSAPI
1509 NTSTATUS
1510 NTAPI
1511 RtlAnsiStringToUnicodeString(
1512 PUNICODE_STRING DestinationString,
1513 PCANSI_STRING SourceString,
1514 BOOLEAN AllocateDestinationString
1515 );
1516
1517 #ifdef NTOS_MODE_USER
1518
1519 #define RtlAnsiStringToUnicodeSize(STRING) ( \
1520 NLS_MB_CODE_PAGE_TAG ? \
1521 RtlxAnsiStringToUnicodeSize(STRING) : \
1522 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
1523 )
1524
1525 #endif
1526
1527 NTSYSAPI
1528 BOOLEAN
1529 NTAPI
1530 RtlCreateUnicodeStringFromAsciiz(
1531 OUT PUNICODE_STRING Destination,
1532 IN PCSZ Source
1533 );
1534
1535 //
1536 // Unicode String Functions
1537 //
1538 NTSYSAPI
1539 NTSTATUS
1540 NTAPI
1541 RtlAppendUnicodeToString(
1542 PUNICODE_STRING Destination,
1543 PCWSTR Source
1544 );
1545
1546 NTSYSAPI
1547 NTSTATUS
1548 NTAPI
1549 RtlAppendUnicodeStringToString(
1550 PUNICODE_STRING Destination,
1551 PCUNICODE_STRING Source
1552 );
1553
1554 NTSYSAPI
1555 LONG
1556 NTAPI
1557 RtlCompareUnicodeString(
1558 PCUNICODE_STRING String1,
1559 PCUNICODE_STRING String2,
1560 BOOLEAN CaseInsensitive
1561 );
1562
1563 NTSYSAPI
1564 VOID
1565 NTAPI
1566 RtlCopyUnicodeString(
1567 PUNICODE_STRING DestinationString,
1568 PCUNICODE_STRING SourceString
1569 );
1570
1571 NTSYSAPI
1572 BOOLEAN
1573 NTAPI
1574 RtlCreateUnicodeString(
1575 PUNICODE_STRING DestinationString,
1576 PCWSTR SourceString
1577 );
1578
1579 #ifdef NTOS_MODE_USER
1580
1581 NTSYSAPI
1582 NTSTATUS
1583 NTAPI
1584 RtlDowncaseUnicodeString(
1585 IN OUT PUNICODE_STRING UniDest,
1586 IN PCUNICODE_STRING UniSource,
1587 IN BOOLEAN AllocateDestinationString
1588 );
1589
1590 #endif
1591
1592 NTSYSAPI
1593 NTSTATUS
1594 NTAPI
1595 RtlDuplicateUnicodeString(
1596 IN ULONG Flags,
1597 IN PCUNICODE_STRING SourceString,
1598 OUT PUNICODE_STRING DestinationString
1599 );
1600
1601 NTSYSAPI
1602 BOOLEAN
1603 NTAPI
1604 RtlEqualUnicodeString(
1605 PCUNICODE_STRING String1,
1606 PCUNICODE_STRING String2,
1607 BOOLEAN CaseInsensitive
1608 );
1609
1610 NTSYSAPI
1611 NTSTATUS
1612 NTAPI
1613 RtlFindCharInUnicodeString(
1614 IN ULONG Flags,
1615 IN PUNICODE_STRING SearchString,
1616 IN PCUNICODE_STRING MatchString,
1617 OUT PUSHORT Position
1618 );
1619
1620 NTSYSAPI
1621 VOID
1622 NTAPI
1623 RtlFreeUnicodeString(IN PUNICODE_STRING UnicodeString);
1624
1625 NTSYSAPI
1626 NTSTATUS
1627 NTAPI
1628 RtlHashUnicodeString(
1629 IN CONST UNICODE_STRING *String,
1630 IN BOOLEAN CaseInSensitive,
1631 IN ULONG HashAlgorithm,
1632 OUT PULONG HashValue
1633 );
1634
1635 NTSYSAPI
1636 VOID
1637 NTAPI
1638 RtlInitUnicodeString(
1639 IN OUT PUNICODE_STRING DestinationString,
1640 IN PCWSTR SourceString
1641 );
1642
1643 NTSYSAPI
1644 NTSTATUS
1645 NTAPI
1646 RtlInitUnicodeStringEx(
1647 OUT PUNICODE_STRING DestinationString,
1648 IN PCWSTR SourceString OPTIONAL
1649 );
1650
1651 NTSYSAPI
1652 ULONG
1653 NTAPI
1654 RtlIsTextUnicode(
1655 PVOID Buffer,
1656 ULONG Length,
1657 ULONG *Flags
1658 );
1659
1660 NTSYSAPI
1661 BOOLEAN
1662 NTAPI
1663 RtlPrefixString(
1664 PCANSI_STRING String1,
1665 PCANSI_STRING String2,
1666 BOOLEAN CaseInsensitive
1667 );
1668
1669 NTSYSAPI
1670 BOOLEAN
1671 NTAPI
1672 RtlPrefixUnicodeString(
1673 PCUNICODE_STRING String1,
1674 PCUNICODE_STRING String2,
1675 BOOLEAN CaseInsensitive
1676 );
1677
1678 NTSYSAPI
1679 NTSTATUS
1680 NTAPI
1681 RtlUpcaseUnicodeString(
1682 PUNICODE_STRING DestinationString,
1683 PCUNICODE_STRING SourceString,
1684 BOOLEAN AllocateDestinationString
1685 );
1686
1687 NTSYSAPI
1688 NTSTATUS
1689 NTAPI
1690 RtlUnicodeStringToInteger(
1691 PCUNICODE_STRING String,
1692 ULONG Base,
1693 PULONG Value
1694 );
1695
1696 NTSYSAPI
1697 NTSTATUS
1698 NTAPI
1699 RtlValidateUnicodeString(
1700 IN ULONG Flags,
1701 IN PCUNICODE_STRING String
1702 );
1703
1704 //
1705 // Ansi String Functions
1706 //
1707 NTSYSAPI
1708 VOID
1709 NTAPI
1710 RtlFreeAnsiString(IN PANSI_STRING AnsiString);
1711
1712 NTSYSAPI
1713 VOID
1714 NTAPI
1715 RtlInitAnsiString(
1716 PANSI_STRING DestinationString,
1717 PCSZ SourceString
1718 );
1719
1720 //
1721 // OEM String Functions
1722 //
1723 NTSYSAPI
1724 VOID
1725 NTAPI
1726 RtlFreeOemString(IN POEM_STRING OemString);
1727
1728 //
1729 // MultiByte->Unicode String Functions
1730 //
1731 NTSYSAPI
1732 NTSTATUS
1733 NTAPI
1734 RtlMultiByteToUnicodeN(
1735 PWCHAR UnicodeString,
1736 ULONG UnicodeSize,
1737 PULONG ResultSize,
1738 PCSTR MbString,
1739 ULONG MbSize
1740 );
1741
1742 NTSYSAPI
1743 NTSTATUS
1744 NTAPI
1745 RtlMultiByteToUnicodeSize(
1746 PULONG UnicodeSize,
1747 PCSTR MbString,
1748 ULONG MbSize
1749 );
1750
1751 //
1752 // Atom Functions
1753 //
1754 NTSYSAPI
1755 NTSTATUS
1756 NTAPI
1757 RtlAddAtomToAtomTable(
1758 IN PRTL_ATOM_TABLE AtomTable,
1759 IN PWSTR AtomName,
1760 OUT PRTL_ATOM Atom
1761 );
1762
1763 NTSYSAPI
1764 NTSTATUS
1765 NTAPI
1766 RtlCreateAtomTable(
1767 IN ULONG TableSize,
1768 IN OUT PRTL_ATOM_TABLE *AtomTable
1769 );
1770
1771 NTSYSAPI
1772 NTSTATUS
1773 NTAPI
1774 RtlDeleteAtomFromAtomTable(
1775 IN PRTL_ATOM_TABLE AtomTable,
1776 IN RTL_ATOM Atom
1777 );
1778
1779 NTSYSAPI
1780 NTSTATUS
1781 NTAPI
1782 RtlDestroyAtomTable(IN PRTL_ATOM_TABLE AtomTable);
1783
1784 NTSYSAPI
1785 NTSTATUS
1786 NTAPI
1787 RtlQueryAtomInAtomTable(
1788 IN PRTL_ATOM_TABLE AtomTable,
1789 IN RTL_ATOM Atom,
1790 IN OUT PULONG RefCount OPTIONAL,
1791 IN OUT PULONG PinCount OPTIONAL,
1792 IN OUT PWSTR AtomName OPTIONAL,
1793 IN OUT PULONG NameLength OPTIONAL
1794 );
1795
1796 NTSYSAPI
1797 NTSTATUS
1798 NTAPI
1799 RtlPinAtomInAtomTable(
1800 IN PRTL_ATOM_TABLE AtomTable,
1801 IN RTL_ATOM Atom
1802 );
1803
1804 NTSYSAPI
1805 NTSTATUS
1806 NTAPI
1807 RtlLookupAtomInAtomTable(
1808 IN PRTL_ATOM_TABLE AtomTable,
1809 IN PWSTR AtomName,
1810 OUT PRTL_ATOM Atom
1811 );
1812
1813 //
1814 // Memory Functions
1815 //
1816 NTSYSAPI
1817 VOID
1818 NTAPI
1819 RtlFillMemoryUlong(
1820 IN PVOID Destination,
1821 IN ULONG Length,
1822 IN ULONG Fill
1823 );
1824
1825 //
1826 // Process Management Functions
1827 //
1828 NTSYSAPI
1829 VOID
1830 NTAPI
1831 RtlAcquirePebLock(VOID);
1832
1833 NTSYSAPI
1834 NTSTATUS
1835 NTAPI
1836 RtlCreateProcessParameters (
1837 OUT PRTL_USER_PROCESS_PARAMETERS *ProcessParameters,
1838 IN PUNICODE_STRING ImagePathName OPTIONAL,
1839 IN PUNICODE_STRING DllPath OPTIONAL,
1840 IN PUNICODE_STRING CurrentDirectory OPTIONAL,
1841 IN PUNICODE_STRING CommandLine OPTIONAL,
1842 IN PWSTR Environment OPTIONAL,
1843 IN PUNICODE_STRING WindowTitle OPTIONAL,
1844 IN PUNICODE_STRING DesktopInfo OPTIONAL,
1845 IN PUNICODE_STRING ShellInfo OPTIONAL,
1846 IN PUNICODE_STRING RuntimeInfo OPTIONAL
1847 );
1848
1849 NTSYSAPI
1850 NTSTATUS
1851 NTAPI
1852 RtlCreateUserProcess(
1853 IN PUNICODE_STRING ImageFileName,
1854 IN ULONG Attributes,
1855 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters,
1856 IN PSECURITY_DESCRIPTOR ProcessSecutityDescriptor OPTIONAL,
1857 IN PSECURITY_DESCRIPTOR ThreadSecurityDescriptor OPTIONAL,
1858 IN HANDLE ParentProcess OPTIONAL,
1859 IN BOOLEAN CurrentDirectory,
1860 IN HANDLE DebugPort OPTIONAL,
1861 IN HANDLE ExceptionPort OPTIONAL,
1862 OUT PRTL_USER_PROCESS_INFORMATION ProcessInfo
1863 );
1864
1865 NTSYSAPI
1866 NTSTATUS
1867 NTAPI
1868 RtlCreateUserThread(
1869 IN HANDLE ProcessHandle,
1870 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
1871 IN BOOLEAN CreateSuspended,
1872 IN LONG StackZeroBits,
1873 IN ULONG StackReserve,
1874 IN ULONG StackCommit,
1875 IN PTHREAD_START_ROUTINE StartAddress,
1876 IN PVOID Parameter,
1877 IN OUT PHANDLE ThreadHandle,
1878 IN OUT PCLIENT_ID ClientId
1879 );
1880
1881 NTSYSAPI
1882 PRTL_USER_PROCESS_PARAMETERS
1883 NTAPI
1884 RtlDeNormalizeProcessParams(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters);
1885
1886 NTSYSAPI
1887 NTSTATUS
1888 NTAPI
1889 RtlDestroyProcessParameters(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters);
1890
1891 NTSYSAPI
1892 VOID
1893 NTAPI
1894 RtlExitUserThread(NTSTATUS Status);
1895
1896 NTSYSAPI
1897 VOID
1898 NTAPI
1899 RtlInitializeContext(
1900 IN HANDLE ProcessHandle,
1901 OUT PCONTEXT ThreadContext,
1902 IN PVOID ThreadStartParam OPTIONAL,
1903 IN PTHREAD_START_ROUTINE ThreadStartAddress,
1904 IN PINITIAL_TEB InitialTeb
1905 );
1906
1907 NTSYSAPI
1908 PRTL_USER_PROCESS_PARAMETERS
1909 NTAPI
1910 RtlNormalizeProcessParams(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters);
1911
1912 NTSYSAPI
1913 VOID
1914 NTAPI
1915 RtlReleasePebLock(VOID);
1916
1917 NTSYSAPI
1918 VOID
1919 NTAPI
1920 RtlSetProcessIsCritical(
1921 IN BOOLEAN NewValue,
1922 OUT PBOOLEAN OldValue OPTIONAL,
1923 IN BOOLEAN IsWinlogon
1924 );
1925
1926 #define NtCurrentPeb() (NtCurrentTeb()->ProcessEnvironmentBlock)
1927
1928 //
1929 // Thread Pool Functions
1930 //
1931 NTSYSAPI
1932 NTSTATUS
1933 NTAPI
1934 RtlQueueWorkItem(
1935 IN WORKERCALLBACKFUNC Function,
1936 IN PVOID Context OPTIONAL,
1937 IN ULONG Flags
1938 );
1939
1940 //
1941 // Environment/Path Functions
1942 //
1943 NTSYSAPI
1944 NTSTATUS
1945 NTAPI
1946 RtlCreateEnvironment(
1947 BOOLEAN Inherit,
1948 PWSTR *Environment
1949 );
1950
1951 NTSYSAPI
1952 NTSTATUS
1953 NTAPI
1954 RtlComputePrivatizedDllName_U(
1955 IN PUNICODE_STRING DllName,
1956 OUT PUNICODE_STRING RealName,
1957 OUT PUNICODE_STRING LocalName
1958 );
1959
1960 NTSYSAPI
1961 VOID
1962 NTAPI
1963 RtlDestroyEnvironment(
1964 IN PWSTR Environment
1965 );
1966
1967 NTSYSAPI
1968 BOOLEAN
1969 NTAPI
1970 RtlDoesFileExists_U(
1971 IN PCWSTR FileName
1972 );
1973
1974 NTSYSAPI
1975 BOOLEAN
1976 NTAPI
1977 RtlDoesFileExists_UstrEx(
1978 IN PCUNICODE_STRING FileName,
1979 IN BOOLEAN SucceedIfBusy
1980 );
1981
1982 NTSYSAPI
1983 ULONG
1984 NTAPI
1985 RtlDetermineDosPathNameType_U(
1986 IN PCWSTR Path
1987 );
1988
1989 NTSYSAPI
1990 ULONG
1991 NTAPI
1992 RtlDetermineDosPathNameType_Ustr(
1993 IN PCUNICODE_STRING Path
1994 );
1995
1996 NTSYSAPI
1997 ULONG
1998 NTAPI
1999 RtlDosSearchPath_U(
2000 IN PCWSTR Path,
2001 IN PCWSTR FileName,
2002 IN PCWSTR Extension,
2003 IN ULONG BufferSize,
2004 OUT PWSTR Buffer,
2005 OUT PWSTR *PartName
2006 );
2007
2008 NTSYSAPI
2009 BOOLEAN
2010 NTAPI
2011 RtlDosPathNameToNtPathName_U(
2012 IN PCWSTR DosPathName,
2013 OUT PUNICODE_STRING NtPathName,
2014 OUT PCWSTR *NtFileNamePart,
2015 OUT CURDIR *DirectoryInfo
2016 );
2017
2018 NTSYSAPI
2019 NTSTATUS
2020 NTAPI
2021 RtlExpandEnvironmentStrings_U(
2022 PWSTR Environment,
2023 PUNICODE_STRING Source,
2024 PUNICODE_STRING Destination,
2025 PULONG Length
2026 );
2027
2028 NTSYSAPI
2029 ULONG
2030 NTAPI
2031 RtlGetCurrentDirectory_U(
2032 ULONG MaximumLength,
2033 PWSTR Buffer
2034 );
2035
2036 NTSYSAPI
2037 ULONG
2038 NTAPI
2039 RtlGetFullPathName_U(
2040 IN PCWSTR FileName,
2041 IN ULONG Size,
2042 IN PWSTR Buffer,
2043 OUT PWSTR *ShortName
2044 );
2045
2046 NTSYSAPI
2047 ULONG
2048 NTAPI
2049 RtlGetFullPathName_Ustr(
2050 IN PUNICODE_STRING FileName,
2051 IN ULONG Size,
2052 IN PWSTR Buffer,
2053 OUT PWSTR *ShortName,
2054 OUT PBOOLEAN InvalidName,
2055 OUT RTL_PATH_TYPE *PathType
2056 );
2057
2058 NTSYSAPI
2059 ULONG
2060 NTAPI
2061 RtlIsDosDeviceName_U(
2062 IN PWSTR Name
2063 );
2064
2065 NTSYSAPI
2066 ULONG
2067 NTAPI
2068 RtlIsDosDeviceName_Ustr(
2069 IN PUNICODE_STRING Name
2070 );
2071
2072
2073 NTSYSAPI
2074 BOOLEAN
2075 NTAPI
2076 RtlIsNameLegalDOS8Dot3(
2077 IN PCUNICODE_STRING Name,
2078 IN OUT POEM_STRING OemName OPTIONAL,
2079 IN OUT PBOOLEAN NameContainsSpaces OPTIONAL
2080 );
2081
2082 NTSYSAPI
2083 NTSTATUS
2084 NTAPI
2085 RtlQueryEnvironmentVariable_U(
2086 PWSTR Environment,
2087 PUNICODE_STRING Name,
2088 PUNICODE_STRING Value
2089 );
2090
2091 NTSYSAPI
2092 NTSTATUS
2093 NTAPI
2094 RtlSetCurrentDirectory_U(
2095 IN PUNICODE_STRING name
2096 );
2097
2098 NTSYSAPI
2099 NTSTATUS
2100 NTAPI
2101 RtlSetEnvironmentVariable(
2102 PWSTR *Environment,
2103 PUNICODE_STRING Name,
2104 PUNICODE_STRING Value
2105 );
2106
2107 //
2108 // Critical Section/Resource Functions
2109 //
2110 NTSYSAPI
2111 NTSTATUS
2112 NTAPI
2113 RtlDeleteCriticalSection (
2114 IN PRTL_CRITICAL_SECTION CriticalSection
2115 );
2116
2117 NTSYSAPI
2118 NTSTATUS
2119 NTAPI
2120 RtlEnterCriticalSection(
2121 IN PRTL_CRITICAL_SECTION CriticalSection
2122 );
2123
2124 NTSYSAPI
2125 NTSTATUS
2126 NTAPI
2127 RtlInitializeCriticalSection(
2128 IN PRTL_CRITICAL_SECTION CriticalSection
2129 );
2130
2131 NTSYSAPI
2132 NTSTATUS
2133 NTAPI
2134 RtlInitializeCriticalSectionAndSpinCount(
2135 IN PRTL_CRITICAL_SECTION CriticalSection,
2136 IN ULONG SpinCount
2137 );
2138
2139 NTSYSAPI
2140 NTSTATUS
2141 NTAPI
2142 RtlLeaveCriticalSection(
2143 IN PRTL_CRITICAL_SECTION CriticalSection
2144 );
2145
2146 NTSYSAPI
2147 BOOLEAN
2148 NTAPI
2149 RtlTryEnterCriticalSection(
2150 IN PRTL_CRITICAL_SECTION CriticalSection
2151 );
2152
2153 NTSYSAPI
2154 VOID
2155 NTAPI
2156 RtlpUnWaitCriticalSection(
2157 IN PRTL_CRITICAL_SECTION CriticalSection
2158 );
2159
2160 NTSYSAPI
2161 NTSTATUS
2162 NTAPI
2163 RtlpWaitForCriticalSection(
2164 IN PRTL_CRITICAL_SECTION CriticalSection
2165 );
2166
2167 NTSYSAPI
2168 BOOLEAN
2169 NTAPI
2170 RtlAcquireResourceExclusive(
2171 IN PRTL_RESOURCE Resource,
2172 IN BOOLEAN Wait
2173 );
2174
2175 NTSYSAPI
2176 BOOLEAN
2177 NTAPI
2178 RtlAcquireResourceShared(
2179 IN PRTL_RESOURCE Resource,
2180 IN BOOLEAN Wait
2181 );
2182
2183 NTSYSAPI
2184 VOID
2185 NTAPI
2186 RtlConvertExclusiveToShared(
2187 IN PRTL_RESOURCE Resource
2188 );
2189
2190 NTSYSAPI
2191 VOID
2192 NTAPI
2193 RtlConvertSharedToExclusive(
2194 IN PRTL_RESOURCE Resource
2195 );
2196
2197 NTSYSAPI
2198 VOID
2199 NTAPI
2200 RtlDeleteResource(
2201 IN PRTL_RESOURCE Resource
2202 );
2203
2204 NTSYSAPI
2205 VOID
2206 NTAPI
2207 RtlDumpResource(
2208 IN PRTL_RESOURCE Resource
2209 );
2210
2211 NTSYSAPI
2212 VOID
2213 NTAPI
2214 RtlInitializeResource(
2215 IN PRTL_RESOURCE Resource
2216 );
2217
2218 NTSYSAPI
2219 VOID
2220 NTAPI
2221 RtlReleaseResource(
2222 IN PRTL_RESOURCE Resource
2223 );
2224
2225 //
2226 // Compression Functions
2227 //
2228 NTSYSAPI
2229 NTSTATUS
2230 NTAPI
2231 RtlCompressBuffer(
2232 IN USHORT CompressionFormatAndEngine,
2233 IN PUCHAR UncompressedBuffer,
2234 IN ULONG UncompressedBufferSize,
2235 OUT PUCHAR CompressedBuffer,
2236 IN ULONG CompressedBufferSize,
2237 IN ULONG UncompressedChunkSize,
2238 OUT PULONG FinalCompressedSize,
2239 IN PVOID WorkSpace
2240 );
2241
2242 NTSYSAPI
2243 NTSTATUS
2244 NTAPI
2245 RtlDecompressBuffer(
2246 IN USHORT CompressionFormat,
2247 OUT PUCHAR UncompressedBuffer,
2248 IN ULONG UncompressedBufferSize,
2249 IN PUCHAR CompressedBuffer,
2250 IN ULONG CompressedBufferSize,
2251 OUT PULONG FinalUncompressedSize
2252 );
2253
2254 NTSYSAPI
2255 NTSTATUS
2256 NTAPI
2257 RtlGetCompressionWorkSpaceSize(
2258 IN USHORT CompressionFormatAndEngine,
2259 OUT PULONG CompressBufferWorkSpaceSize,
2260 OUT PULONG CompressFragmentWorkSpaceSize
2261 );
2262
2263 //
2264 // Debug Info Functions
2265 //
2266 NTSYSAPI
2267 PRTL_DEBUG_INFORMATION
2268 NTAPI
2269 RtlCreateQueryDebugBuffer(
2270 IN ULONG Size,
2271 IN BOOLEAN EventPair
2272 );
2273
2274 NTSYSAPI
2275 NTSTATUS
2276 NTAPI
2277 RtlDestroyQueryDebugBuffer(IN PRTL_DEBUG_INFORMATION DebugBuffer);
2278
2279 NTSYSAPI
2280 NTSTATUS
2281 NTAPI
2282 RtlQueryProcessDebugInformation(
2283 IN ULONG ProcessId,
2284 IN ULONG DebugInfoClassMask,
2285 IN OUT PRTL_DEBUG_INFORMATION DebugBuffer
2286 );
2287
2288 //
2289 // Bitmap Functions
2290 //
2291 NTSYSAPI
2292 BOOLEAN
2293 NTAPI
2294 RtlAreBitsClear(
2295 IN PRTL_BITMAP BitMapHeader,
2296 IN ULONG StartingIndex,
2297 IN ULONG Length
2298 );
2299
2300 NTSYSAPI
2301 BOOLEAN
2302 NTAPI
2303 RtlAreBitsSet(
2304 IN PRTL_BITMAP BitMapHeader,
2305 IN ULONG StartingIndex,
2306 IN ULONG Length
2307 );
2308
2309 NTSYSAPI
2310 VOID
2311 NTAPI
2312 RtlClearBits(
2313 IN PRTL_BITMAP BitMapHeader,
2314 IN ULONG StartingIndex,
2315 IN ULONG NumberToClear
2316 );
2317
2318 NTSYSAPI
2319 ULONG
2320 NTAPI
2321 RtlFindClearBits(
2322 IN PRTL_BITMAP BitMapHeader,
2323 IN ULONG NumberToFind,
2324 IN ULONG HintIndex
2325 );
2326
2327 NTSYSAPI
2328 ULONG
2329 NTAPI
2330 RtlFindClearBitsAndSet(
2331 IN PRTL_BITMAP BitMapHeader,
2332 IN ULONG NumberToFind,
2333 IN ULONG HintIndex
2334 );
2335
2336 NTSYSAPI
2337 ULONG
2338 NTAPI
2339 RtlFindNextForwardRunClear(
2340 IN PRTL_BITMAP BitMapHeader,
2341 IN ULONG FromIndex,
2342 IN PULONG StartingRunIndex
2343 );
2344
2345 NTSYSAPI
2346 VOID
2347 NTAPI
2348 RtlInitializeBitMap(
2349 IN PRTL_BITMAP BitMapHeader,
2350 IN PULONG BitMapBuffer,
2351 IN ULONG SizeOfBitMap
2352 );
2353
2354 NTSYSAPI
2355 ULONG
2356 NTAPI
2357 RtlNumberOfSetBits(
2358 IN PRTL_BITMAP BitMapHeader
2359 );
2360
2361 NTSYSAPI
2362 VOID
2363 NTAPI
2364 RtlSetBit(
2365 PRTL_BITMAP BitMapHeader,
2366 ULONG BitNumber
2367 );
2368
2369 NTSYSAPI
2370 VOID
2371 NTAPI
2372 RtlSetBits(
2373 IN PRTL_BITMAP BitMapHeader,
2374 IN ULONG StartingIndex,
2375 IN ULONG NumberToSet
2376 );
2377
2378 //
2379 // Timer Functions
2380 //
2381 NTSYSAPI
2382 NTSTATUS
2383 NTAPI
2384 RtlCreateTimer(
2385 HANDLE TimerQueue,
2386 PHANDLE phNewTimer,
2387 WAITORTIMERCALLBACKFUNC Callback,
2388 PVOID Parameter,
2389 ULONG DueTime,
2390 ULONG Period,
2391 ULONG Flags
2392 );
2393
2394 NTSYSAPI
2395 NTSTATUS
2396 NTAPI
2397 RtlCreateTimerQueue(PHANDLE TimerQueue);
2398
2399 NTSYSAPI
2400 NTSTATUS
2401 NTAPI
2402 RtlDeleteTimer(
2403 HANDLE TimerQueue,
2404 HANDLE Timer,
2405 HANDLE CompletionEvent
2406 );
2407
2408 NTSYSAPI
2409 NTSTATUS
2410 NTAPI
2411 RtlUpdateTimer(
2412 HANDLE TimerQueue,
2413 HANDLE Timer,
2414 ULONG DueTime,
2415 ULONG Period
2416 );
2417
2418 NTSYSAPI
2419 NTSTATUS
2420 NTAPI
2421 RtlDeleteTimerQueueEx(
2422 HANDLE TimerQueue,
2423 HANDLE CompletionEvent
2424 );
2425
2426 NTSYSAPI
2427 NTSTATUS
2428 NTAPI
2429 RtlDeleteTimerQueue(HANDLE TimerQueue);
2430
2431 //
2432 // SList functions
2433 //
2434 PSLIST_ENTRY
2435 FASTCALL
2436 InterlockedPushListSList(
2437 IN PSLIST_HEADER ListHead,
2438 IN PSLIST_ENTRY List,
2439 IN PSLIST_ENTRY ListEnd,
2440 IN ULONG Count
2441 );
2442
2443 //
2444 // Range List functions
2445 //
2446 NTSYSAPI
2447 VOID
2448 NTAPI
2449 RtlFreeRangeList(IN PRTL_RANGE_LIST RangeList);
2450
2451 //
2452 // Debug Functions
2453 //
2454 ULONG
2455 __cdecl
2456 DbgPrint(
2457 IN PCCH Format,
2458 IN ...
2459 );
2460
2461 NTSYSAPI
2462 ULONG
2463 __cdecl
2464 DbgPrintEx(
2465 IN ULONG ComponentId,
2466 IN ULONG Level,
2467 IN PCCH Format,
2468 IN ...
2469 );
2470
2471 ULONG
2472 NTAPI
2473 DbgPrompt(
2474 IN PCH PromptString,
2475 OUT PCH OutputString,
2476 IN ULONG OutputSize
2477 );
2478
2479 VOID
2480 NTAPI
2481 DbgBreakPoint(VOID);
2482
2483 //
2484 // Handle Table Functions
2485 //
2486 NTSYSAPI
2487 PRTL_HANDLE_TABLE_ENTRY
2488 NTAPI
2489 RtlAllocateHandle(
2490 IN PRTL_HANDLE_TABLE HandleTable,
2491 IN OUT PULONG Index
2492 );
2493
2494 NTSYSAPI
2495 VOID
2496 NTAPI
2497 RtlDestroyHandleTable(IN PRTL_HANDLE_TABLE HandleTable);
2498
2499 NTSYSAPI
2500 BOOLEAN
2501 NTAPI
2502 RtlFreeHandle(
2503 IN PRTL_HANDLE_TABLE HandleTable,
2504 IN PRTL_HANDLE_TABLE_ENTRY Handle
2505 );
2506
2507 NTSYSAPI
2508 VOID
2509 NTAPI
2510 RtlInitializeHandleTable(
2511 IN ULONG TableSize,
2512 IN ULONG HandleSize,
2513 IN PRTL_HANDLE_TABLE HandleTable
2514 );
2515
2516 NTSYSAPI
2517 BOOLEAN
2518 NTAPI
2519 RtlIsValidHandle(
2520 IN PRTL_HANDLE_TABLE HandleTable,
2521 IN PRTL_HANDLE_TABLE_ENTRY Handle
2522 );
2523
2524 NTSYSAPI
2525 BOOLEAN
2526 NTAPI
2527 RtlIsValidIndexHandle(
2528 IN PRTL_HANDLE_TABLE HandleTable,
2529 IN ULONG Index,
2530 OUT PRTL_HANDLE_TABLE_ENTRY *Handle
2531 );
2532
2533 //
2534 // PE Functions
2535 //
2536 NTSYSAPI
2537 NTSTATUS
2538 NTAPI
2539 RtlFindMessage(
2540 IN PVOID BaseAddress,
2541 IN ULONG Type,
2542 IN ULONG Language,
2543 IN ULONG MessageId,
2544 OUT PRTL_MESSAGE_RESOURCE_ENTRY *MessageResourceEntry
2545 );
2546
2547 NTSYSAPI
2548 ULONG
2549 NTAPI
2550 RtlGetNtGlobalFlags(VOID);
2551
2552 NTSYSAPI
2553 PVOID
2554 NTAPI
2555 RtlImageDirectoryEntryToData(
2556 PVOID BaseAddress,
2557 BOOLEAN MappedAsImage,
2558 USHORT Directory,
2559 PULONG Size
2560 );
2561
2562 NTSYSAPI
2563 PVOID
2564 NTAPI
2565 RtlImageRvaToVa(
2566 PIMAGE_NT_HEADERS NtHeader,
2567 PVOID BaseAddress,
2568 ULONG Rva,
2569 PIMAGE_SECTION_HEADER *SectionHeader
2570 );
2571
2572 NTSYSAPI
2573 PIMAGE_NT_HEADERS
2574 NTAPI
2575 RtlImageNtHeader(IN PVOID BaseAddress);
2576
2577 NTSYSAPI
2578 NTSTATUS
2579 NTAPI
2580 RtlImageNtHeaderEx(
2581 IN ULONG Flags,
2582 IN PVOID BaseAddress,
2583 IN ULONGLONG Size,
2584 IN PIMAGE_NT_HEADERS *NtHeader
2585 );
2586
2587 NTSYSAPI
2588 PIMAGE_SECTION_HEADER
2589 NTAPI
2590 RtlImageRvaToSection(
2591 PIMAGE_NT_HEADERS NtHeader,
2592 PVOID BaseAddress,
2593 ULONG Rva
2594 );
2595
2596 //
2597 // Activation Context Functions
2598 //
2599 #ifdef NTOS_MODE_USER
2600 NTSYSAPI
2601 NTSTATUS
2602 NTAPI
2603 RtlActivateActivationContextUnsafeFast(
2604 IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame,
2605 IN PVOID Context
2606 );
2607
2608 NTSYSAPI
2609 NTSTATUS
2610 NTAPI
2611 RtlAllocateActivationContextStack(
2612 IN PVOID *Context
2613 );
2614
2615 NTSYSAPI
2616 NTSTATUS
2617 NTAPI
2618 RtlGetActiveActivationContext(
2619 IN PVOID *Context
2620 );
2621
2622 NTSYSAPI
2623 VOID
2624 NTAPI
2625 RtlReleaseActivationContext(
2626 IN PVOID *Context
2627 );
2628
2629 NTSYSAPI
2630 NTSTATUS
2631 NTAPI
2632 RtlDeactivateActivationContextUnsafeFast(
2633 IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame
2634 );
2635
2636 NTSYSAPI
2637 NTSTATUS
2638 NTAPI
2639 RtlDosApplyFileIsolationRedirection_Ustr(
2640 IN BOOLEAN Unknown,
2641 IN PUNICODE_STRING OriginalName,
2642 IN PUNICODE_STRING Extension,
2643 IN OUT PUNICODE_STRING RedirectedName,
2644 IN OUT PUNICODE_STRING RedirectedName2,
2645 IN OUT PUNICODE_STRING *OriginalName2,
2646 IN PVOID Unknown1,
2647 IN PVOID Unknown2,
2648 IN PVOID Unknown3
2649 );
2650
2651 NTSYSAPI
2652 NTSTATUS
2653 NTAPI
2654 RtlFindActivationContextSectionString(
2655 IN PVOID Unknown0,
2656 IN PVOID Unknown1,
2657 IN ULONG SectionType,
2658 IN PUNICODE_STRING SectionName,
2659 IN PVOID Unknown2
2660 );
2661 #endif
2662
2663 //
2664 // Registry Functions
2665 //
2666 NTSYSAPI
2667 NTSTATUS
2668 NTAPI
2669 RtlCheckRegistryKey(
2670 ULONG RelativeTo,
2671 PWSTR Path
2672 );
2673
2674 NTSYSAPI
2675 NTSTATUS
2676 NTAPI
2677 RtlFormatCurrentUserKeyPath(IN OUT PUNICODE_STRING KeyPath);
2678
2679 NTSYSAPI
2680 NTSTATUS
2681 NTAPI
2682 RtlpNtOpenKey(
2683 OUT HANDLE KeyHandle,
2684 IN ACCESS_MASK DesiredAccess,
2685 IN POBJECT_ATTRIBUTES ObjectAttributes,
2686 IN ULONG Unused
2687 );
2688
2689 NTSYSAPI
2690 NTSTATUS
2691 NTAPI
2692 RtlOpenCurrentUser(
2693 IN ACCESS_MASK DesiredAccess,
2694 OUT PHANDLE KeyHandle
2695 );
2696
2697 NTSYSAPI
2698 NTSTATUS
2699 NTAPI
2700 RtlQueryRegistryValues(
2701 IN ULONG RelativeTo,
2702 IN PCWSTR Path,
2703 IN PRTL_QUERY_REGISTRY_TABLE QueryTable,
2704 IN PVOID Context,
2705 IN PVOID Environment
2706 );
2707
2708 NTSYSAPI
2709 NTSTATUS
2710 NTAPI
2711 RtlWriteRegistryValue(
2712 ULONG RelativeTo,
2713 PCWSTR Path,
2714 PCWSTR ValueName,
2715 ULONG ValueType,
2716 PVOID ValueData,
2717 ULONG ValueLength
2718 );
2719
2720 //
2721 // NLS Functions
2722 //
2723 NTSYSAPI
2724 VOID
2725 NTAPI
2726 RtlInitNlsTables(
2727 IN PUSHORT AnsiTableBase,
2728 IN PUSHORT OemTableBase,
2729 IN PUSHORT CaseTableBase,
2730 OUT PNLSTABLEINFO NlsTable
2731 );
2732
2733 NTSYSAPI
2734 VOID
2735 NTAPI
2736 RtlInitCodePageTable(
2737 IN PUSHORT TableBase,
2738 OUT PCPTABLEINFO CodePageTable
2739 );
2740
2741 NTSYSAPI
2742 VOID
2743 NTAPI
2744 RtlResetRtlTranslations(IN PNLSTABLEINFO NlsTable);
2745
2746 #if defined(NTOS_MODE_USER) && !defined(NO_RTL_INLINES)
2747
2748 //
2749 // Misc conversion functions
2750 //
2751 static __inline
2752 LARGE_INTEGER
2753 NTAPI_INLINE
2754 RtlConvertLongToLargeInteger(
2755 LONG SignedInteger
2756 )
2757 {
2758 LARGE_INTEGER Result;
2759
2760 Result.QuadPart = SignedInteger;
2761 return Result;
2762 }
2763
2764 static __inline
2765 LARGE_INTEGER
2766 NTAPI_INLINE
2767 RtlEnlargedIntegerMultiply(
2768 LONG Multiplicand,
2769 LONG Multiplier
2770 )
2771 {
2772 LARGE_INTEGER Product;
2773
2774 Product.QuadPart = (LONGLONG)Multiplicand * (ULONGLONG)Multiplier;
2775 return Product;
2776 }
2777
2778 static __inline
2779 ULONG
2780 NTAPI_INLINE
2781 RtlEnlargedUnsignedDivide(
2782 IN ULARGE_INTEGER Dividend,
2783 IN ULONG Divisor,
2784 IN PULONG Remainder OPTIONAL
2785 )
2786 {
2787 ULONG Quotient;
2788
2789 Quotient = (ULONG)(Dividend.QuadPart / Divisor);
2790 if (Remainder) {
2791 *Remainder = (ULONG)(Dividend.QuadPart % Divisor);
2792 }
2793
2794 return Quotient;
2795 }
2796
2797 static __inline
2798 LARGE_INTEGER
2799 NTAPI_INLINE
2800 RtlEnlargedUnsignedMultiply(
2801 ULONG Multiplicand,
2802 ULONG Multiplier
2803 )
2804 {
2805 LARGE_INTEGER Product;
2806
2807 Product.QuadPart = (ULONGLONG)Multiplicand * (ULONGLONG)Multiplier;
2808 return Product;
2809 }
2810 #endif
2811
2812 NTSYSAPI
2813 ULONG
2814 NTAPI
2815 RtlUniform(
2816 IN PULONG Seed
2817 );
2818
2819 NTSYSAPI
2820 ULONG
2821 NTAPI
2822 RtlComputeCrc32(
2823 IN USHORT PartialCrc,
2824 IN PUCHAR Buffer,
2825 IN ULONG Length
2826 );
2827
2828 //
2829 // Network Functions
2830 //
2831 NTSYSAPI
2832 NTSTATUS
2833 NTAPI
2834 RtlIpv4StringToAddressW(
2835 IN PWCHAR String,
2836 IN UCHAR Strict,
2837 OUT PWCHAR Terminator,
2838 OUT struct in_addr *Addr
2839 );
2840
2841 NTSYSAPI
2842 NTSTATUS
2843 NTAPI
2844 RtlIpv6StringToAddressA(
2845 IN PCHAR Name,
2846 OUT PCHAR *Terminator,
2847 OUT struct in6_addr *Addr
2848 );
2849
2850 NTSYSAPI
2851 NTSTATUS
2852 NTAPI
2853 RtlIpv6StringToAddressW(
2854 IN PWCHAR Name,
2855 OUT PCHAR *Terminator,
2856 OUT struct in6_addr *Addr
2857 );
2858
2859 NTSYSAPI
2860 NTSTATUS
2861 NTAPI
2862 RtlIpv6StringToAddressExA(
2863 IN PCHAR AddressString,
2864 IN struct in6_addr *Address,
2865 IN PULONG ScopeId,
2866 IN PUSHORT Port
2867 );
2868
2869 NTSYSAPI
2870 NTSTATUS
2871 NTAPI
2872 RtlIpv6StringToAddressExW(
2873 IN PWCHAR AddressName,
2874 IN struct in6_addr *Address,
2875 IN PULONG ScopeId,
2876 IN PUSHORT Port
2877 );
2878
2879
2880 //
2881 // Time Functions
2882 //
2883 NTSYSAPI
2884 NTSTATUS
2885 NTAPI
2886 RtlQueryTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation);
2887
2888 NTSYSAPI
2889 VOID
2890 NTAPI
2891 RtlSecondsSince1970ToTime(
2892 IN ULONG SecondsSince1970,
2893 OUT PLARGE_INTEGER Time
2894 );
2895
2896 NTSYSAPI
2897 NTSTATUS
2898 NTAPI
2899 RtlSetTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation);
2900
2901 NTSYSAPI
2902 BOOLEAN
2903 NTAPI
2904 RtlTimeFieldsToTime(
2905 PTIME_FIELDS TimeFields,
2906 PLARGE_INTEGER Time
2907 );
2908
2909 NTSYSAPI
2910 VOID
2911 NTAPI
2912 RtlTimeToTimeFields(
2913 PLARGE_INTEGER Time,
2914 PTIME_FIELDS TimeFields
2915 );
2916
2917 NTSYSAPI
2918 NTSTATUS
2919 NTAPI
2920 RtlSystemTimeToLocalTime(
2921 IN PLARGE_INTEGER SystemTime,
2922 OUT PLARGE_INTEGER LocalTime
2923 );
2924
2925 //
2926 // Version Functions
2927 //
2928 NTSYSAPI
2929 NTSTATUS
2930 NTAPI
2931 RtlVerifyVersionInfo(
2932 IN PRTL_OSVERSIONINFOEXW VersionInfo,
2933 IN ULONG TypeMask,
2934 IN ULONGLONG ConditionMask
2935 );
2936
2937 NTSYSAPI
2938 NTSTATUS
2939 NTAPI
2940 RtlGetVersion(IN OUT PRTL_OSVERSIONINFOW lpVersionInformation);
2941
2942 NTSYSAPI
2943 BOOLEAN
2944 NTAPI
2945 RtlGetNtProductType(OUT PNT_PRODUCT_TYPE ProductType);
2946
2947 //
2948 // Secure Memory Functions
2949 //
2950 #ifdef NTOS_MODE_USER
2951 NTSYSAPI
2952 NTSTATUS
2953 NTAPI
2954 RtlRegisterSecureMemoryCacheCallback(
2955 IN PRTL_SECURE_MEMORY_CACHE_CALLBACK Callback);
2956
2957 NTSYSAPI
2958 BOOLEAN
2959 NTAPI
2960 RtlFlushSecureMemoryCache(
2961 IN PVOID MemoryCache,
2962 IN OPTIONAL SIZE_T MemoryLength
2963 );
2964 #endif
2965
2966 #ifdef __cplusplus
2967 }
2968 #endif
2969
2970 #endif