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