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