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