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