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