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