Stefan Ginsberg <stefan__100__@hotmail.com>
[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 NTSYSAPI
1632 NTSTATUS
1633 NTAPI
1634 RtlDuplicateUnicodeString(
1635 IN ULONG Flags,
1636 IN PCUNICODE_STRING SourceString,
1637 OUT PUNICODE_STRING DestinationString
1638 );
1639
1640 #endif
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 NTSYSAPI
1762 NTSTATUS
1763 NTAPI
1764 RtlInitAnsiStringEx(
1765 PANSI_STRING DestinationString,
1766 PCSZ SourceString
1767 );
1768
1769 //
1770 // OEM String Functions
1771 //
1772 NTSYSAPI
1773 VOID
1774 NTAPI
1775 RtlFreeOemString(IN POEM_STRING OemString);
1776
1777 //
1778 // MultiByte->Unicode String Functions
1779 //
1780 NTSYSAPI
1781 NTSTATUS
1782 NTAPI
1783 RtlMultiByteToUnicodeN(
1784 PWCHAR UnicodeString,
1785 ULONG UnicodeSize,
1786 PULONG ResultSize,
1787 PCSTR MbString,
1788 ULONG MbSize
1789 );
1790
1791 NTSYSAPI
1792 NTSTATUS
1793 NTAPI
1794 RtlMultiByteToUnicodeSize(
1795 PULONG UnicodeSize,
1796 PCSTR MbString,
1797 ULONG MbSize
1798 );
1799
1800 //
1801 // Atom Functions
1802 //
1803 NTSYSAPI
1804 NTSTATUS
1805 NTAPI
1806 RtlAddAtomToAtomTable(
1807 IN PRTL_ATOM_TABLE AtomTable,
1808 IN PWSTR AtomName,
1809 OUT PRTL_ATOM Atom
1810 );
1811
1812 NTSYSAPI
1813 NTSTATUS
1814 NTAPI
1815 RtlCreateAtomTable(
1816 IN ULONG TableSize,
1817 IN OUT PRTL_ATOM_TABLE *AtomTable
1818 );
1819
1820 NTSYSAPI
1821 NTSTATUS
1822 NTAPI
1823 RtlDeleteAtomFromAtomTable(
1824 IN PRTL_ATOM_TABLE AtomTable,
1825 IN RTL_ATOM Atom
1826 );
1827
1828 NTSYSAPI
1829 NTSTATUS
1830 NTAPI
1831 RtlDestroyAtomTable(IN PRTL_ATOM_TABLE AtomTable);
1832
1833 NTSYSAPI
1834 NTSTATUS
1835 NTAPI
1836 RtlQueryAtomInAtomTable(
1837 IN PRTL_ATOM_TABLE AtomTable,
1838 IN RTL_ATOM Atom,
1839 IN OUT PULONG RefCount OPTIONAL,
1840 IN OUT PULONG PinCount OPTIONAL,
1841 IN OUT PWSTR AtomName OPTIONAL,
1842 IN OUT PULONG NameLength OPTIONAL
1843 );
1844
1845 NTSYSAPI
1846 NTSTATUS
1847 NTAPI
1848 RtlPinAtomInAtomTable(
1849 IN PRTL_ATOM_TABLE AtomTable,
1850 IN RTL_ATOM Atom
1851 );
1852
1853 NTSYSAPI
1854 NTSTATUS
1855 NTAPI
1856 RtlLookupAtomInAtomTable(
1857 IN PRTL_ATOM_TABLE AtomTable,
1858 IN PWSTR AtomName,
1859 OUT PRTL_ATOM Atom
1860 );
1861
1862 //
1863 // Memory Functions
1864 //
1865 NTSYSAPI
1866 VOID
1867 NTAPI
1868 RtlFillMemoryUlong(
1869 IN PVOID Destination,
1870 IN ULONG Length,
1871 IN ULONG Fill
1872 );
1873
1874 //
1875 // Process Management Functions
1876 //
1877 NTSYSAPI
1878 VOID
1879 NTAPI
1880 RtlAcquirePebLock(VOID);
1881
1882 NTSYSAPI
1883 NTSTATUS
1884 NTAPI
1885 RtlCreateProcessParameters (
1886 OUT PRTL_USER_PROCESS_PARAMETERS *ProcessParameters,
1887 IN PUNICODE_STRING ImagePathName OPTIONAL,
1888 IN PUNICODE_STRING DllPath OPTIONAL,
1889 IN PUNICODE_STRING CurrentDirectory OPTIONAL,
1890 IN PUNICODE_STRING CommandLine OPTIONAL,
1891 IN PWSTR Environment OPTIONAL,
1892 IN PUNICODE_STRING WindowTitle OPTIONAL,
1893 IN PUNICODE_STRING DesktopInfo OPTIONAL,
1894 IN PUNICODE_STRING ShellInfo OPTIONAL,
1895 IN PUNICODE_STRING RuntimeInfo OPTIONAL
1896 );
1897
1898 NTSYSAPI
1899 NTSTATUS
1900 NTAPI
1901 RtlCreateUserProcess(
1902 IN PUNICODE_STRING ImageFileName,
1903 IN ULONG Attributes,
1904 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters,
1905 IN PSECURITY_DESCRIPTOR ProcessSecutityDescriptor OPTIONAL,
1906 IN PSECURITY_DESCRIPTOR ThreadSecurityDescriptor OPTIONAL,
1907 IN HANDLE ParentProcess OPTIONAL,
1908 IN BOOLEAN CurrentDirectory,
1909 IN HANDLE DebugPort OPTIONAL,
1910 IN HANDLE ExceptionPort OPTIONAL,
1911 OUT PRTL_USER_PROCESS_INFORMATION ProcessInfo
1912 );
1913
1914 NTSYSAPI
1915 NTSTATUS
1916 NTAPI
1917 RtlCreateUserThread(
1918 IN HANDLE ProcessHandle,
1919 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
1920 IN BOOLEAN CreateSuspended,
1921 IN ULONG StackZeroBits,
1922 IN SIZE_T StackReserve,
1923 IN SIZE_T StackCommit,
1924 IN PTHREAD_START_ROUTINE StartAddress,
1925 IN PVOID Parameter,
1926 IN OUT PHANDLE ThreadHandle,
1927 IN OUT PCLIENT_ID ClientId
1928 );
1929
1930 NTSYSAPI
1931 PRTL_USER_PROCESS_PARAMETERS
1932 NTAPI
1933 RtlDeNormalizeProcessParams(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters);
1934
1935 NTSYSAPI
1936 NTSTATUS
1937 NTAPI
1938 RtlDestroyProcessParameters(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters);
1939
1940 NTSYSAPI
1941 VOID
1942 NTAPI
1943 RtlExitUserThread(NTSTATUS Status);
1944
1945 NTSYSAPI
1946 VOID
1947 NTAPI
1948 RtlInitializeContext(
1949 IN HANDLE ProcessHandle,
1950 OUT PCONTEXT ThreadContext,
1951 IN PVOID ThreadStartParam OPTIONAL,
1952 IN PTHREAD_START_ROUTINE ThreadStartAddress,
1953 IN PINITIAL_TEB InitialTeb
1954 );
1955
1956 NTSYSAPI
1957 PRTL_USER_PROCESS_PARAMETERS
1958 NTAPI
1959 RtlNormalizeProcessParams(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters);
1960
1961 NTSYSAPI
1962 VOID
1963 NTAPI
1964 RtlReleasePebLock(VOID);
1965
1966 NTSYSAPI
1967 VOID
1968 NTAPI
1969 RtlSetProcessIsCritical(
1970 IN BOOLEAN NewValue,
1971 OUT PBOOLEAN OldValue OPTIONAL,
1972 IN BOOLEAN IsWinlogon
1973 );
1974
1975 #define NtCurrentPeb() (NtCurrentTeb()->ProcessEnvironmentBlock)
1976
1977 //
1978 // Thread Pool Functions
1979 //
1980 NTSYSAPI
1981 NTSTATUS
1982 NTAPI
1983 RtlDeregisterWaitEx(
1984 IN HANDLE hWaitHandle,
1985 IN HANDLE hCompletionEvent
1986 );
1987
1988 NTSYSAPI
1989 NTSTATUS
1990 NTAPI
1991 RtlDeregisterWait(
1992 IN HANDLE hWaitHandle
1993 );
1994
1995 NTSYSAPI
1996 NTSTATUS
1997 NTAPI
1998 RtlQueueWorkItem(
1999 IN WORKERCALLBACKFUNC Function,
2000 IN PVOID Context OPTIONAL,
2001 IN ULONG Flags
2002 );
2003
2004 NTSYSAPI
2005 NTSTATUS
2006 NTAPI
2007 RtlRegisterWait(
2008 IN PHANDLE phNewWaitObject,
2009 IN HANDLE hObject,
2010 IN WAITORTIMERCALLBACKFUNC Callback,
2011 IN PVOID pvContext,
2012 IN ULONG ulMilliseconds,
2013 IN ULONG ulFlags
2014 );
2015
2016 //
2017 // Environment/Path Functions
2018 //
2019 NTSYSAPI
2020 NTSTATUS
2021 NTAPI
2022 RtlCreateEnvironment(
2023 BOOLEAN Inherit,
2024 PWSTR *Environment
2025 );
2026
2027 NTSYSAPI
2028 NTSTATUS
2029 NTAPI
2030 RtlComputePrivatizedDllName_U(
2031 IN PUNICODE_STRING DllName,
2032 OUT PUNICODE_STRING RealName,
2033 OUT PUNICODE_STRING LocalName
2034 );
2035
2036 NTSYSAPI
2037 VOID
2038 NTAPI
2039 RtlDestroyEnvironment(
2040 IN PWSTR Environment
2041 );
2042
2043 NTSYSAPI
2044 BOOLEAN
2045 NTAPI
2046 RtlDoesFileExists_U(
2047 IN PCWSTR FileName
2048 );
2049
2050 NTSYSAPI
2051 BOOLEAN
2052 NTAPI
2053 RtlDoesFileExists_UstrEx(
2054 IN PCUNICODE_STRING FileName,
2055 IN BOOLEAN SucceedIfBusy
2056 );
2057
2058 NTSYSAPI
2059 ULONG
2060 NTAPI
2061 RtlDetermineDosPathNameType_U(
2062 IN PCWSTR Path
2063 );
2064
2065 NTSYSAPI
2066 ULONG
2067 NTAPI
2068 RtlDetermineDosPathNameType_Ustr(
2069 IN PCUNICODE_STRING Path
2070 );
2071
2072 NTSYSAPI
2073 ULONG
2074 NTAPI
2075 RtlDosSearchPath_U(
2076 IN PCWSTR Path,
2077 IN PCWSTR FileName,
2078 IN PCWSTR Extension,
2079 IN ULONG BufferSize,
2080 OUT PWSTR Buffer,
2081 OUT PWSTR *PartName
2082 );
2083
2084 NTSYSAPI
2085 BOOLEAN
2086 NTAPI
2087 RtlDosPathNameToNtPathName_U(
2088 IN PCWSTR DosPathName,
2089 OUT PUNICODE_STRING NtPathName,
2090 OUT PCWSTR *NtFileNamePart,
2091 OUT CURDIR *DirectoryInfo
2092 );
2093
2094 NTSYSAPI
2095 NTSTATUS
2096 NTAPI
2097 RtlExpandEnvironmentStrings_U(
2098 PWSTR Environment,
2099 PUNICODE_STRING Source,
2100 PUNICODE_STRING Destination,
2101 PULONG Length
2102 );
2103
2104 NTSYSAPI
2105 ULONG
2106 NTAPI
2107 RtlGetCurrentDirectory_U(
2108 ULONG MaximumLength,
2109 PWSTR Buffer
2110 );
2111
2112 NTSYSAPI
2113 ULONG
2114 NTAPI
2115 RtlGetFullPathName_U(
2116 IN PCWSTR FileName,
2117 IN ULONG Size,
2118 IN PWSTR Buffer,
2119 OUT PWSTR *ShortName
2120 );
2121
2122 NTSYSAPI
2123 ULONG
2124 NTAPI
2125 RtlGetFullPathName_Ustr(
2126 IN PUNICODE_STRING FileName,
2127 IN ULONG Size,
2128 IN PWSTR Buffer,
2129 OUT PWSTR *ShortName,
2130 OUT PBOOLEAN InvalidName,
2131 OUT RTL_PATH_TYPE *PathType
2132 );
2133
2134 NTSYSAPI
2135 ULONG
2136 NTAPI
2137 RtlIsDosDeviceName_U(
2138 IN PWSTR Name
2139 );
2140
2141 NTSYSAPI
2142 ULONG
2143 NTAPI
2144 RtlIsDosDeviceName_Ustr(
2145 IN PUNICODE_STRING Name
2146 );
2147
2148
2149 NTSYSAPI
2150 BOOLEAN
2151 NTAPI
2152 RtlIsNameLegalDOS8Dot3(
2153 IN PCUNICODE_STRING Name,
2154 IN OUT POEM_STRING OemName OPTIONAL,
2155 IN OUT PBOOLEAN NameContainsSpaces OPTIONAL
2156 );
2157
2158 NTSYSAPI
2159 NTSTATUS
2160 NTAPI
2161 RtlQueryEnvironmentVariable_U(
2162 PWSTR Environment,
2163 PUNICODE_STRING Name,
2164 PUNICODE_STRING Value
2165 );
2166
2167 NTSYSAPI
2168 NTSTATUS
2169 NTAPI
2170 RtlSetCurrentDirectory_U(
2171 IN PUNICODE_STRING name
2172 );
2173
2174 NTSYSAPI
2175 NTSTATUS
2176 NTAPI
2177 RtlSetEnvironmentVariable(
2178 PWSTR *Environment,
2179 PUNICODE_STRING Name,
2180 PUNICODE_STRING Value
2181 );
2182
2183 //
2184 // Critical Section/Resource Functions
2185 //
2186 NTSYSAPI
2187 NTSTATUS
2188 NTAPI
2189 RtlDeleteCriticalSection (
2190 IN PRTL_CRITICAL_SECTION CriticalSection
2191 );
2192
2193 NTSYSAPI
2194 NTSTATUS
2195 NTAPI
2196 RtlEnterCriticalSection(
2197 IN PRTL_CRITICAL_SECTION CriticalSection
2198 );
2199
2200 NTSYSAPI
2201 NTSTATUS
2202 NTAPI
2203 RtlInitializeCriticalSection(
2204 IN PRTL_CRITICAL_SECTION CriticalSection
2205 );
2206
2207 NTSYSAPI
2208 NTSTATUS
2209 NTAPI
2210 RtlInitializeCriticalSectionAndSpinCount(
2211 IN PRTL_CRITICAL_SECTION CriticalSection,
2212 IN ULONG SpinCount
2213 );
2214
2215 NTSYSAPI
2216 NTSTATUS
2217 NTAPI
2218 RtlLeaveCriticalSection(
2219 IN PRTL_CRITICAL_SECTION CriticalSection
2220 );
2221
2222 NTSYSAPI
2223 BOOLEAN
2224 NTAPI
2225 RtlTryEnterCriticalSection(
2226 IN PRTL_CRITICAL_SECTION CriticalSection
2227 );
2228
2229 NTSYSAPI
2230 VOID
2231 NTAPI
2232 RtlpUnWaitCriticalSection(
2233 IN PRTL_CRITICAL_SECTION CriticalSection
2234 );
2235
2236 NTSYSAPI
2237 NTSTATUS
2238 NTAPI
2239 RtlpWaitForCriticalSection(
2240 IN PRTL_CRITICAL_SECTION CriticalSection
2241 );
2242
2243 NTSYSAPI
2244 BOOLEAN
2245 NTAPI
2246 RtlAcquireResourceExclusive(
2247 IN PRTL_RESOURCE Resource,
2248 IN BOOLEAN Wait
2249 );
2250
2251 NTSYSAPI
2252 BOOLEAN
2253 NTAPI
2254 RtlAcquireResourceShared(
2255 IN PRTL_RESOURCE Resource,
2256 IN BOOLEAN Wait
2257 );
2258
2259 NTSYSAPI
2260 VOID
2261 NTAPI
2262 RtlConvertExclusiveToShared(
2263 IN PRTL_RESOURCE Resource
2264 );
2265
2266 NTSYSAPI
2267 VOID
2268 NTAPI
2269 RtlConvertSharedToExclusive(
2270 IN PRTL_RESOURCE Resource
2271 );
2272
2273 NTSYSAPI
2274 VOID
2275 NTAPI
2276 RtlDeleteResource(
2277 IN PRTL_RESOURCE Resource
2278 );
2279
2280 NTSYSAPI
2281 VOID
2282 NTAPI
2283 RtlDumpResource(
2284 IN PRTL_RESOURCE Resource
2285 );
2286
2287 NTSYSAPI
2288 VOID
2289 NTAPI
2290 RtlInitializeResource(
2291 IN PRTL_RESOURCE Resource
2292 );
2293
2294 NTSYSAPI
2295 VOID
2296 NTAPI
2297 RtlReleaseResource(
2298 IN PRTL_RESOURCE Resource
2299 );
2300
2301 //
2302 // Compression Functions
2303 //
2304 NTSYSAPI
2305 NTSTATUS
2306 NTAPI
2307 RtlCompressBuffer(
2308 IN USHORT CompressionFormatAndEngine,
2309 IN PUCHAR UncompressedBuffer,
2310 IN ULONG UncompressedBufferSize,
2311 OUT PUCHAR CompressedBuffer,
2312 IN ULONG CompressedBufferSize,
2313 IN ULONG UncompressedChunkSize,
2314 OUT PULONG FinalCompressedSize,
2315 IN PVOID WorkSpace
2316 );
2317
2318 NTSYSAPI
2319 NTSTATUS
2320 NTAPI
2321 RtlDecompressBuffer(
2322 IN USHORT CompressionFormat,
2323 OUT PUCHAR UncompressedBuffer,
2324 IN ULONG UncompressedBufferSize,
2325 IN PUCHAR CompressedBuffer,
2326 IN ULONG CompressedBufferSize,
2327 OUT PULONG FinalUncompressedSize
2328 );
2329
2330 NTSYSAPI
2331 NTSTATUS
2332 NTAPI
2333 RtlGetCompressionWorkSpaceSize(
2334 IN USHORT CompressionFormatAndEngine,
2335 OUT PULONG CompressBufferWorkSpaceSize,
2336 OUT PULONG CompressFragmentWorkSpaceSize
2337 );
2338
2339 //
2340 // Debug Info Functions
2341 //
2342 NTSYSAPI
2343 PRTL_DEBUG_INFORMATION
2344 NTAPI
2345 RtlCreateQueryDebugBuffer(
2346 IN ULONG Size,
2347 IN BOOLEAN EventPair
2348 );
2349
2350 NTSYSAPI
2351 NTSTATUS
2352 NTAPI
2353 RtlDestroyQueryDebugBuffer(IN PRTL_DEBUG_INFORMATION DebugBuffer);
2354
2355 NTSYSAPI
2356 NTSTATUS
2357 NTAPI
2358 RtlQueryProcessDebugInformation(
2359 IN ULONG ProcessId,
2360 IN ULONG DebugInfoClassMask,
2361 IN OUT PRTL_DEBUG_INFORMATION DebugBuffer
2362 );
2363
2364 //
2365 // Bitmap Functions
2366 //
2367 NTSYSAPI
2368 BOOLEAN
2369 NTAPI
2370 RtlAreBitsClear(
2371 IN PRTL_BITMAP BitMapHeader,
2372 IN ULONG StartingIndex,
2373 IN ULONG Length
2374 );
2375
2376 NTSYSAPI
2377 BOOLEAN
2378 NTAPI
2379 RtlAreBitsSet(
2380 IN PRTL_BITMAP BitMapHeader,
2381 IN ULONG StartingIndex,
2382 IN ULONG Length
2383 );
2384
2385 NTSYSAPI
2386 VOID
2387 NTAPI
2388 RtlClearBits(
2389 IN PRTL_BITMAP BitMapHeader,
2390 IN ULONG StartingIndex,
2391 IN ULONG NumberToClear
2392 );
2393
2394 NTSYSAPI
2395 ULONG
2396 NTAPI
2397 RtlFindClearBits(
2398 IN PRTL_BITMAP BitMapHeader,
2399 IN ULONG NumberToFind,
2400 IN ULONG HintIndex
2401 );
2402
2403 NTSYSAPI
2404 ULONG
2405 NTAPI
2406 RtlFindClearBitsAndSet(
2407 IN PRTL_BITMAP BitMapHeader,
2408 IN ULONG NumberToFind,
2409 IN ULONG HintIndex
2410 );
2411
2412 NTSYSAPI
2413 ULONG
2414 NTAPI
2415 RtlFindNextForwardRunClear(
2416 IN PRTL_BITMAP BitMapHeader,
2417 IN ULONG FromIndex,
2418 IN PULONG StartingRunIndex
2419 );
2420
2421 NTSYSAPI
2422 VOID
2423 NTAPI
2424 RtlInitializeBitMap(
2425 IN PRTL_BITMAP BitMapHeader,
2426 IN PULONG BitMapBuffer,
2427 IN ULONG SizeOfBitMap
2428 );
2429
2430 NTSYSAPI
2431 ULONG
2432 NTAPI
2433 RtlNumberOfSetBits(
2434 IN PRTL_BITMAP BitMapHeader
2435 );
2436
2437 NTSYSAPI
2438 VOID
2439 NTAPI
2440 RtlSetBit(
2441 PRTL_BITMAP BitMapHeader,
2442 ULONG BitNumber
2443 );
2444
2445 NTSYSAPI
2446 VOID
2447 NTAPI
2448 RtlSetBits(
2449 IN PRTL_BITMAP BitMapHeader,
2450 IN ULONG StartingIndex,
2451 IN ULONG NumberToSet
2452 );
2453
2454 NTSYSAPI
2455 VOID
2456 NTAPI
2457 RtlSetAllBits(
2458 PRTL_BITMAP BitMapHeader
2459 );
2460
2461 NTSYSAPI
2462 BOOLEAN
2463 NTAPI
2464 RtlTestBit(
2465 PRTL_BITMAP BitMapHeader,
2466 ULONG BitNumber
2467 );
2468
2469 //
2470 // Timer Functions
2471 //
2472 NTSYSAPI
2473 NTSTATUS
2474 NTAPI
2475 RtlCreateTimer(
2476 HANDLE TimerQueue,
2477 PHANDLE phNewTimer,
2478 WAITORTIMERCALLBACKFUNC Callback,
2479 PVOID Parameter,
2480 ULONG DueTime,
2481 ULONG Period,
2482 ULONG Flags
2483 );
2484
2485 NTSYSAPI
2486 NTSTATUS
2487 NTAPI
2488 RtlCreateTimerQueue(PHANDLE TimerQueue);
2489
2490 NTSYSAPI
2491 NTSTATUS
2492 NTAPI
2493 RtlDeleteTimer(
2494 HANDLE TimerQueue,
2495 HANDLE Timer,
2496 HANDLE CompletionEvent
2497 );
2498
2499 NTSYSAPI
2500 NTSTATUS
2501 NTAPI
2502 RtlUpdateTimer(
2503 HANDLE TimerQueue,
2504 HANDLE Timer,
2505 ULONG DueTime,
2506 ULONG Period
2507 );
2508
2509 NTSYSAPI
2510 NTSTATUS
2511 NTAPI
2512 RtlDeleteTimerQueueEx(
2513 HANDLE TimerQueue,
2514 HANDLE CompletionEvent
2515 );
2516
2517 NTSYSAPI
2518 NTSTATUS
2519 NTAPI
2520 RtlDeleteTimerQueue(HANDLE TimerQueue);
2521
2522 //
2523 // SList functions
2524 //
2525 PSLIST_ENTRY
2526 FASTCALL
2527 InterlockedPushListSList(
2528 IN PSLIST_HEADER ListHead,
2529 IN PSLIST_ENTRY List,
2530 IN PSLIST_ENTRY ListEnd,
2531 IN ULONG Count
2532 );
2533
2534 //
2535 // Range List functions
2536 //
2537 NTSYSAPI
2538 VOID
2539 NTAPI
2540 RtlFreeRangeList(IN PRTL_RANGE_LIST RangeList);
2541
2542 //
2543 // Debug Functions
2544 //
2545 ULONG
2546 __cdecl
2547 DbgPrint(
2548 IN PCCH Format,
2549 IN ...
2550 );
2551
2552 NTSYSAPI
2553 ULONG
2554 __cdecl
2555 DbgPrintEx(
2556 IN ULONG ComponentId,
2557 IN ULONG Level,
2558 IN PCCH Format,
2559 IN ...
2560 );
2561
2562 ULONG
2563 NTAPI
2564 DbgPrompt(
2565 IN PCCH Prompt,
2566 OUT PCH Response,
2567 IN ULONG MaximumResponseLength
2568 );
2569
2570 VOID
2571 NTAPI
2572 DbgBreakPoint(
2573 VOID
2574 );
2575
2576 NTSTATUS
2577 NTAPI
2578 DbgLoadImageSymbols(
2579 IN PANSI_STRING Name,
2580 IN PVOID Base,
2581 IN ULONG_PTR ProcessId
2582 );
2583
2584 VOID
2585 NTAPI
2586 DbgUnLoadImageSymbols(
2587 IN PANSI_STRING Name,
2588 IN PVOID Base,
2589 IN ULONG_PTR ProcessId
2590 );
2591
2592 //
2593 // Generic Table Functions
2594 //
2595 #if defined(NTOS_MODE_USER) || defined(_NTIFS_)
2596 PVOID
2597 NTAPI
2598 RtlInsertElementGenericTable(
2599 IN PRTL_GENERIC_TABLE Table,
2600 IN PVOID Buffer,
2601 IN ULONG BufferSize,
2602 OUT PBOOLEAN NewElement OPTIONAL
2603 );
2604
2605 PVOID
2606 NTAPI
2607 RtlInsertElementGenericTableFull(
2608 IN PRTL_GENERIC_TABLE Table,
2609 IN PVOID Buffer,
2610 IN ULONG BufferSize,
2611 OUT PBOOLEAN NewElement OPTIONAL,
2612 IN PVOID NodeOrParent,
2613 IN TABLE_SEARCH_RESULT SearchResult
2614 );
2615
2616 BOOLEAN
2617 NTAPI
2618 RtlIsGenericTableEmpty(
2619 IN PRTL_GENERIC_TABLE Table
2620 );
2621
2622 PVOID
2623 NTAPI
2624 RtlLookupElementGenericTableFull(
2625 IN PRTL_GENERIC_TABLE Table,
2626 IN PVOID Buffer,
2627 OUT PVOID *NodeOrParent,
2628 OUT TABLE_SEARCH_RESULT *SearchResult
2629 );
2630 #endif
2631
2632 //
2633 // Handle Table Functions
2634 //
2635 NTSYSAPI
2636 PRTL_HANDLE_TABLE_ENTRY
2637 NTAPI
2638 RtlAllocateHandle(
2639 IN PRTL_HANDLE_TABLE HandleTable,
2640 IN OUT PULONG Index
2641 );
2642
2643 NTSYSAPI
2644 VOID
2645 NTAPI
2646 RtlDestroyHandleTable(IN PRTL_HANDLE_TABLE HandleTable);
2647
2648 NTSYSAPI
2649 BOOLEAN
2650 NTAPI
2651 RtlFreeHandle(
2652 IN PRTL_HANDLE_TABLE HandleTable,
2653 IN PRTL_HANDLE_TABLE_ENTRY Handle
2654 );
2655
2656 NTSYSAPI
2657 VOID
2658 NTAPI
2659 RtlInitializeHandleTable(
2660 IN ULONG TableSize,
2661 IN ULONG HandleSize,
2662 IN PRTL_HANDLE_TABLE HandleTable
2663 );
2664
2665 NTSYSAPI
2666 BOOLEAN
2667 NTAPI
2668 RtlIsValidHandle(
2669 IN PRTL_HANDLE_TABLE HandleTable,
2670 IN PRTL_HANDLE_TABLE_ENTRY Handle
2671 );
2672
2673 NTSYSAPI
2674 BOOLEAN
2675 NTAPI
2676 RtlIsValidIndexHandle(
2677 IN PRTL_HANDLE_TABLE HandleTable,
2678 IN ULONG Index,
2679 OUT PRTL_HANDLE_TABLE_ENTRY *Handle
2680 );
2681
2682 //
2683 // PE Functions
2684 //
2685 NTSYSAPI
2686 NTSTATUS
2687 NTAPI
2688 RtlFindMessage(
2689 IN PVOID BaseAddress,
2690 IN ULONG Type,
2691 IN ULONG Language,
2692 IN ULONG MessageId,
2693 OUT PRTL_MESSAGE_RESOURCE_ENTRY *MessageResourceEntry
2694 );
2695
2696 NTSYSAPI
2697 ULONG
2698 NTAPI
2699 RtlGetNtGlobalFlags(VOID);
2700
2701 NTSYSAPI
2702 PVOID
2703 NTAPI
2704 RtlImageDirectoryEntryToData(
2705 PVOID BaseAddress,
2706 BOOLEAN MappedAsImage,
2707 USHORT Directory,
2708 PULONG Size
2709 );
2710
2711 NTSYSAPI
2712 PVOID
2713 NTAPI
2714 RtlImageRvaToVa(
2715 PIMAGE_NT_HEADERS NtHeader,
2716 PVOID BaseAddress,
2717 ULONG Rva,
2718 PIMAGE_SECTION_HEADER *SectionHeader
2719 );
2720
2721 NTSYSAPI
2722 PIMAGE_NT_HEADERS
2723 NTAPI
2724 RtlImageNtHeader(IN PVOID BaseAddress);
2725
2726 NTSYSAPI
2727 NTSTATUS
2728 NTAPI
2729 RtlImageNtHeaderEx(
2730 IN ULONG Flags,
2731 IN PVOID BaseAddress,
2732 IN ULONGLONG Size,
2733 IN PIMAGE_NT_HEADERS *NtHeader
2734 );
2735
2736 NTSYSAPI
2737 PIMAGE_SECTION_HEADER
2738 NTAPI
2739 RtlImageRvaToSection(
2740 PIMAGE_NT_HEADERS NtHeader,
2741 PVOID BaseAddress,
2742 ULONG Rva
2743 );
2744
2745 NTSYSAPI
2746 ULONG
2747 NTAPI
2748 LdrRelocateImageWithBias(
2749 IN PVOID NewAddress,
2750 IN LONGLONG AdditionalBias,
2751 IN PCCH LoaderName,
2752 IN ULONG Success,
2753 IN ULONG Conflict,
2754 IN ULONG Invalid
2755 );
2756
2757 //
2758 // Activation Context Functions
2759 //
2760 #ifdef NTOS_MODE_USER
2761 NTSYSAPI
2762 NTSTATUS
2763 NTAPI
2764 RtlActivateActivationContextUnsafeFast(
2765 IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame,
2766 IN PVOID Context
2767 );
2768
2769 NTSYSAPI
2770 NTSTATUS
2771 NTAPI
2772 RtlAllocateActivationContextStack(
2773 IN PVOID *Context
2774 );
2775
2776 NTSYSAPI
2777 NTSTATUS
2778 NTAPI
2779 RtlGetActiveActivationContext(
2780 IN PVOID *Context
2781 );
2782
2783 NTSYSAPI
2784 VOID
2785 NTAPI
2786 RtlReleaseActivationContext(
2787 IN PVOID *Context
2788 );
2789
2790 NTSYSAPI
2791 NTSTATUS
2792 NTAPI
2793 RtlDeactivateActivationContextUnsafeFast(
2794 IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame
2795 );
2796
2797 NTSYSAPI
2798 NTSTATUS
2799 NTAPI
2800 RtlDosApplyFileIsolationRedirection_Ustr(
2801 IN BOOLEAN Unknown,
2802 IN PUNICODE_STRING OriginalName,
2803 IN PUNICODE_STRING Extension,
2804 IN OUT PUNICODE_STRING RedirectedName,
2805 IN OUT PUNICODE_STRING RedirectedName2,
2806 IN OUT PUNICODE_STRING *OriginalName2,
2807 IN PVOID Unknown1,
2808 IN PVOID Unknown2,
2809 IN PVOID Unknown3
2810 );
2811
2812 NTSYSAPI
2813 NTSTATUS
2814 NTAPI
2815 RtlFindActivationContextSectionString(
2816 IN PVOID Unknown0,
2817 IN PVOID Unknown1,
2818 IN ULONG SectionType,
2819 IN PUNICODE_STRING SectionName,
2820 IN PVOID Unknown2
2821 );
2822 #endif
2823
2824 //
2825 // Registry Functions
2826 //
2827 NTSYSAPI
2828 NTSTATUS
2829 NTAPI
2830 RtlCheckRegistryKey(
2831 ULONG RelativeTo,
2832 PWSTR Path
2833 );
2834
2835 NTSYSAPI
2836 NTSTATUS
2837 NTAPI
2838 RtlCreateRegistryKey(
2839 IN ULONG RelativeTo,
2840 IN PWSTR Path
2841 );
2842
2843 NTSYSAPI
2844 NTSTATUS
2845 NTAPI
2846 RtlFormatCurrentUserKeyPath(
2847 IN OUT PUNICODE_STRING KeyPath
2848 );
2849
2850 NTSYSAPI
2851 NTSTATUS
2852 NTAPI
2853 RtlpNtOpenKey(
2854 OUT HANDLE KeyHandle,
2855 IN ACCESS_MASK DesiredAccess,
2856 IN POBJECT_ATTRIBUTES ObjectAttributes,
2857 IN ULONG Unused
2858 );
2859
2860 NTSYSAPI
2861 NTSTATUS
2862 NTAPI
2863 RtlOpenCurrentUser(
2864 IN ACCESS_MASK DesiredAccess,
2865 OUT PHANDLE KeyHandle
2866 );
2867
2868 NTSYSAPI
2869 NTSTATUS
2870 NTAPI
2871 RtlQueryRegistryValues(
2872 IN ULONG RelativeTo,
2873 IN PCWSTR Path,
2874 IN PRTL_QUERY_REGISTRY_TABLE QueryTable,
2875 IN PVOID Context,
2876 IN PVOID Environment
2877 );
2878
2879 NTSYSAPI
2880 NTSTATUS
2881 NTAPI
2882 RtlWriteRegistryValue(
2883 ULONG RelativeTo,
2884 PCWSTR Path,
2885 PCWSTR ValueName,
2886 ULONG ValueType,
2887 PVOID ValueData,
2888 ULONG ValueLength
2889 );
2890
2891 //
2892 // NLS Functions
2893 //
2894 NTSYSAPI
2895 VOID
2896 NTAPI
2897 RtlGetDefaultCodePage(
2898 OUT PUSHORT AnsiCodePage,
2899 OUT PUSHORT OemCodePage
2900 );
2901
2902 NTSYSAPI
2903 VOID
2904 NTAPI
2905 RtlInitNlsTables(
2906 IN PUSHORT AnsiTableBase,
2907 IN PUSHORT OemTableBase,
2908 IN PUSHORT CaseTableBase,
2909 OUT PNLSTABLEINFO NlsTable
2910 );
2911
2912 NTSYSAPI
2913 VOID
2914 NTAPI
2915 RtlInitCodePageTable(
2916 IN PUSHORT TableBase,
2917 OUT PCPTABLEINFO CodePageTable
2918 );
2919
2920 NTSYSAPI
2921 VOID
2922 NTAPI
2923 RtlResetRtlTranslations(IN PNLSTABLEINFO NlsTable);
2924
2925 #if defined(NTOS_MODE_USER) && !defined(NO_RTL_INLINES)
2926
2927 //
2928 // Misc conversion functions
2929 //
2930 static __inline
2931 LARGE_INTEGER
2932 NTAPI_INLINE
2933 RtlConvertLongToLargeInteger(
2934 LONG SignedInteger
2935 )
2936 {
2937 LARGE_INTEGER Result;
2938
2939 Result.QuadPart = SignedInteger;
2940 return Result;
2941 }
2942
2943 static __inline
2944 LARGE_INTEGER
2945 NTAPI_INLINE
2946 RtlEnlargedIntegerMultiply(
2947 LONG Multiplicand,
2948 LONG Multiplier
2949 )
2950 {
2951 LARGE_INTEGER Product;
2952
2953 Product.QuadPart = (LONGLONG)Multiplicand * (ULONGLONG)Multiplier;
2954 return Product;
2955 }
2956
2957 static __inline
2958 ULONG
2959 NTAPI_INLINE
2960 RtlEnlargedUnsignedDivide(
2961 IN ULARGE_INTEGER Dividend,
2962 IN ULONG Divisor,
2963 IN PULONG Remainder OPTIONAL
2964 )
2965 {
2966 ULONG Quotient;
2967
2968 Quotient = (ULONG)(Dividend.QuadPart / Divisor);
2969 if (Remainder) {
2970 *Remainder = (ULONG)(Dividend.QuadPart % Divisor);
2971 }
2972
2973 return Quotient;
2974 }
2975
2976 static __inline
2977 LARGE_INTEGER
2978 NTAPI_INLINE
2979 RtlEnlargedUnsignedMultiply(
2980 ULONG Multiplicand,
2981 ULONG Multiplier
2982 )
2983 {
2984 LARGE_INTEGER Product;
2985
2986 Product.QuadPart = (ULONGLONG)Multiplicand * (ULONGLONG)Multiplier;
2987 return Product;
2988 }
2989 #endif
2990
2991 NTSYSAPI
2992 ULONG
2993 NTAPI
2994 RtlUniform(
2995 IN PULONG Seed
2996 );
2997
2998 NTSYSAPI
2999 ULONG
3000 NTAPI
3001 RtlRandom(
3002 IN OUT PULONG Seed
3003 );
3004
3005 NTSYSAPI
3006 ULONG
3007 NTAPI
3008 RtlComputeCrc32(
3009 IN USHORT PartialCrc,
3010 IN PUCHAR Buffer,
3011 IN ULONG Length
3012 );
3013
3014 //
3015 // Network Functions
3016 //
3017 NTSYSAPI
3018 NTSTATUS
3019 NTAPI
3020 RtlIpv4StringToAddressW(
3021 IN PWCHAR String,
3022 IN UCHAR Strict,
3023 OUT PWCHAR Terminator,
3024 OUT struct in_addr *Addr
3025 );
3026
3027 NTSYSAPI
3028 NTSTATUS
3029 NTAPI
3030 RtlIpv6StringToAddressA(
3031 IN PCHAR Name,
3032 OUT PCHAR *Terminator,
3033 OUT struct in6_addr *Addr
3034 );
3035
3036 NTSYSAPI
3037 NTSTATUS
3038 NTAPI
3039 RtlIpv6StringToAddressW(
3040 IN PWCHAR Name,
3041 OUT PCHAR *Terminator,
3042 OUT struct in6_addr *Addr
3043 );
3044
3045 NTSYSAPI
3046 NTSTATUS
3047 NTAPI
3048 RtlIpv6StringToAddressExA(
3049 IN PCHAR AddressString,
3050 IN struct in6_addr *Address,
3051 IN PULONG ScopeId,
3052 IN PUSHORT Port
3053 );
3054
3055 NTSYSAPI
3056 NTSTATUS
3057 NTAPI
3058 RtlIpv6StringToAddressExW(
3059 IN PWCHAR AddressName,
3060 IN struct in6_addr *Address,
3061 IN PULONG ScopeId,
3062 IN PUSHORT Port
3063 );
3064
3065
3066 //
3067 // Time Functions
3068 //
3069 NTSYSAPI
3070 NTSTATUS
3071 NTAPI
3072 RtlQueryTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation);
3073
3074 NTSYSAPI
3075 VOID
3076 NTAPI
3077 RtlSecondsSince1970ToTime(
3078 IN ULONG SecondsSince1970,
3079 OUT PLARGE_INTEGER Time
3080 );
3081
3082 NTSYSAPI
3083 NTSTATUS
3084 NTAPI
3085 RtlSetTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation);
3086
3087 NTSYSAPI
3088 BOOLEAN
3089 NTAPI
3090 RtlTimeFieldsToTime(
3091 PTIME_FIELDS TimeFields,
3092 PLARGE_INTEGER Time
3093 );
3094
3095 NTSYSAPI
3096 BOOLEAN
3097 NTAPI
3098 RtlTimeToSecondsSince1970(
3099 PLARGE_INTEGER Time,
3100 OUT PULONG SecondsSince1970
3101 );
3102
3103 NTSYSAPI
3104 VOID
3105 NTAPI
3106 RtlTimeToTimeFields(
3107 PLARGE_INTEGER Time,
3108 PTIME_FIELDS TimeFields
3109 );
3110
3111 NTSYSAPI
3112 NTSTATUS
3113 NTAPI
3114 RtlSystemTimeToLocalTime(
3115 IN PLARGE_INTEGER SystemTime,
3116 OUT PLARGE_INTEGER LocalTime
3117 );
3118
3119 //
3120 // Version Functions
3121 //
3122 NTSYSAPI
3123 NTSTATUS
3124 NTAPI
3125 RtlVerifyVersionInfo(
3126 IN PRTL_OSVERSIONINFOEXW VersionInfo,
3127 IN ULONG TypeMask,
3128 IN ULONGLONG ConditionMask
3129 );
3130
3131 NTSYSAPI
3132 NTSTATUS
3133 NTAPI
3134 RtlGetVersion(IN OUT PRTL_OSVERSIONINFOW lpVersionInformation);
3135
3136 NTSYSAPI
3137 BOOLEAN
3138 NTAPI
3139 RtlGetNtProductType(OUT PNT_PRODUCT_TYPE ProductType);
3140
3141 //
3142 // Secure Memory Functions
3143 //
3144 #ifdef NTOS_MODE_USER
3145 NTSYSAPI
3146 NTSTATUS
3147 NTAPI
3148 RtlRegisterSecureMemoryCacheCallback(
3149 IN PRTL_SECURE_MEMORY_CACHE_CALLBACK Callback);
3150
3151 NTSYSAPI
3152 BOOLEAN
3153 NTAPI
3154 RtlFlushSecureMemoryCache(
3155 IN PVOID MemoryCache,
3156 IN OPTIONAL SIZE_T MemoryLength
3157 );
3158 #endif
3159
3160 #ifdef __cplusplus
3161 }
3162 #endif
3163
3164 #endif