c6ce74dccd44ae3337cc8f0686ba42078819c1b4
[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 <pstypes.h>
29 #include <extypes.h>
30 #include "in6addr.h"
31 #include "inaddr.h"
32
33 #ifdef __cplusplus
34 extern "C" {
35 #endif
36
37 #ifdef NTOS_MODE_USER
38
39 //
40 // List Functions
41 //
42 FORCEINLINE
43 VOID
44 InitializeListHead(
45 _Out_ PLIST_ENTRY ListHead
46 )
47 {
48 ListHead->Flink = ListHead->Blink = ListHead;
49 }
50
51 FORCEINLINE
52 VOID
53 InsertHeadList(
54 _Inout_ PLIST_ENTRY ListHead,
55 _Inout_ PLIST_ENTRY Entry
56 )
57 {
58 PLIST_ENTRY OldFlink;
59 OldFlink = ListHead->Flink;
60 Entry->Flink = OldFlink;
61 Entry->Blink = ListHead;
62 OldFlink->Blink = Entry;
63 ListHead->Flink = Entry;
64 }
65
66 FORCEINLINE
67 VOID
68 InsertTailList(
69 _Inout_ PLIST_ENTRY ListHead,
70 _Inout_ PLIST_ENTRY Entry
71 )
72 {
73 PLIST_ENTRY OldBlink;
74 OldBlink = ListHead->Blink;
75 Entry->Flink = ListHead;
76 Entry->Blink = OldBlink;
77 OldBlink->Flink = Entry;
78 ListHead->Blink = Entry;
79 }
80
81 _Must_inspect_result_
82 FORCEINLINE
83 BOOLEAN
84 IsListEmpty(
85 _In_ const LIST_ENTRY * ListHead
86 )
87 {
88 return (BOOLEAN)(ListHead->Flink == ListHead);
89 }
90
91 FORCEINLINE
92 PSINGLE_LIST_ENTRY
93 PopEntryList(
94 _Inout_ PSINGLE_LIST_ENTRY ListHead
95 )
96 {
97 PSINGLE_LIST_ENTRY FirstEntry;
98 FirstEntry = ListHead->Next;
99 if (FirstEntry != NULL) {
100 ListHead->Next = FirstEntry->Next;
101 }
102
103 return FirstEntry;
104 }
105
106 FORCEINLINE
107 VOID
108 PushEntryList(
109 _Inout_ PSINGLE_LIST_ENTRY ListHead,
110 _Inout_ PSINGLE_LIST_ENTRY Entry
111 )
112 {
113 Entry->Next = ListHead->Next;
114 ListHead->Next = Entry;
115 }
116
117 FORCEINLINE
118 BOOLEAN
119 RemoveEntryList(
120 _In_ PLIST_ENTRY Entry)
121 {
122 PLIST_ENTRY OldFlink;
123 PLIST_ENTRY OldBlink;
124
125 OldFlink = Entry->Flink;
126 OldBlink = Entry->Blink;
127 OldFlink->Blink = OldBlink;
128 OldBlink->Flink = OldFlink;
129 return (BOOLEAN)(OldFlink == OldBlink);
130 }
131
132 FORCEINLINE
133 PLIST_ENTRY
134 RemoveHeadList(
135 _Inout_ PLIST_ENTRY ListHead)
136 {
137 PLIST_ENTRY Flink;
138 PLIST_ENTRY Entry;
139
140 Entry = ListHead->Flink;
141 Flink = Entry->Flink;
142 ListHead->Flink = Flink;
143 Flink->Blink = ListHead;
144 return Entry;
145 }
146
147 FORCEINLINE
148 PLIST_ENTRY
149 RemoveTailList(
150 _Inout_ PLIST_ENTRY ListHead)
151 {
152 PLIST_ENTRY Blink;
153 PLIST_ENTRY Entry;
154
155 Entry = ListHead->Blink;
156 Blink = Entry->Blink;
157 ListHead->Blink = Blink;
158 Blink->Flink = ListHead;
159 return Entry;
160 }
161
162 //
163 // Unicode string macros
164 //
165 _At_(UnicodeString->Buffer, _Post_equal_to_(Buffer))
166 _At_(UnicodeString->Length, _Post_equal_to_(0))
167 _At_(UnicodeString->MaximumLength, _Post_equal_to_(BufferSize))
168 FORCEINLINE
169 VOID
170 RtlInitEmptyUnicodeString(
171 _Out_ PUNICODE_STRING UnicodeString,
172 _When_(BufferSize != 0, _Notnull_) _Writable_bytes_(BufferSize) __drv_aliasesMem PWCHAR Buffer,
173 _In_ USHORT BufferSize)
174 {
175 UnicodeString->Length = 0;
176 UnicodeString->MaximumLength = BufferSize;
177 UnicodeString->Buffer = Buffer;
178 }
179
180 _At_(AnsiString->Buffer, _Post_equal_to_(Buffer))
181 _At_(AnsiString->Length, _Post_equal_to_(0))
182 _At_(AnsiString->MaximumLength, _Post_equal_to_(BufferSize))
183 FORCEINLINE
184 VOID
185 RtlInitEmptyAnsiString(
186 _Out_ PANSI_STRING AnsiString,
187 _When_(BufferSize != 0, _Notnull_) _Writable_bytes_(BufferSize) __drv_aliasesMem PCHAR Buffer,
188 _In_ USHORT BufferSize)
189 {
190 AnsiString->Length = 0;
191 AnsiString->MaximumLength = BufferSize;
192 AnsiString->Buffer = Buffer;
193 }
194
195 //
196 // LUID Macros
197 //
198 #define RtlEqualLuid(L1, L2) (((L1)->HighPart == (L2)->HighPart) && \
199 ((L1)->LowPart == (L2)->LowPart))
200 FORCEINLINE
201 LUID
202 NTAPI_INLINE
203 RtlConvertUlongToLuid(
204 _In_ ULONG Ulong)
205 {
206 LUID TempLuid;
207
208 TempLuid.LowPart = Ulong;
209 TempLuid.HighPart = 0;
210 return TempLuid;
211 }
212
213 //
214 // ASSERT Macros
215 //
216 #ifndef ASSERT
217 #if DBG
218
219 #define ASSERT( exp ) \
220 ((void)((!(exp)) ? \
221 (RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ),FALSE) : \
222 TRUE))
223
224 #define ASSERTMSG( msg, exp ) \
225 ((void)((!(exp)) ? \
226 (RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, (PCHAR)msg ),FALSE) : \
227 TRUE))
228
229 #else
230
231 #define ASSERT( exp ) ((void) 0)
232 #define ASSERTMSG( msg, exp ) ((void) 0)
233
234 #endif
235 #endif
236
237 #ifdef NTOS_KERNEL_RUNTIME
238
239 //
240 // Executing RTL functions at DISPATCH_LEVEL or higher will result in a
241 // bugcheck.
242 //
243 #define RTL_PAGED_CODE PAGED_CODE
244
245 #else
246
247 //
248 // This macro does nothing in user mode
249 //
250 #define RTL_PAGED_CODE NOP_FUNCTION
251
252 #endif
253
254 //
255 // RTL Splay Tree Functions
256 //
257 #ifndef RTL_USE_AVL_TABLES
258
259 NTSYSAPI
260 VOID
261 NTAPI
262 RtlInitializeGenericTable(
263 _Out_ PRTL_GENERIC_TABLE Table,
264 _In_ PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine,
265 _In_opt_ PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine,
266 _In_opt_ PRTL_GENERIC_FREE_ROUTINE FreeRoutine,
267 _In_opt_ PVOID TableContext
268 );
269
270 NTSYSAPI
271 PVOID
272 NTAPI
273 RtlInsertElementGenericTable(
274 _In_ PRTL_GENERIC_TABLE Table,
275 _In_reads_bytes_(BufferSize) PVOID Buffer,
276 _In_ CLONG BufferSize,
277 _Out_opt_ PBOOLEAN NewElement
278 );
279
280 NTSYSAPI
281 PVOID
282 NTAPI
283 RtlInsertElementGenericTableFull(
284 _In_ PRTL_GENERIC_TABLE Table,
285 _In_reads_bytes_(BufferSize) PVOID Buffer,
286 _In_ CLONG BufferSize,
287 _Out_opt_ PBOOLEAN NewElement,
288 _In_ PVOID NodeOrParent,
289 _In_ TABLE_SEARCH_RESULT SearchResult
290 );
291
292 NTSYSAPI
293 BOOLEAN
294 NTAPI
295 RtlDeleteElementGenericTable(
296 _In_ PRTL_GENERIC_TABLE Table,
297 _In_ PVOID Buffer
298 );
299
300 _Must_inspect_result_
301 NTSYSAPI
302 PVOID
303 NTAPI
304 RtlLookupElementGenericTable(
305 _In_ PRTL_GENERIC_TABLE Table,
306 _In_ PVOID Buffer
307 );
308
309 NTSYSAPI
310 PVOID
311 NTAPI
312 RtlLookupElementGenericTableFull(
313 _In_ PRTL_GENERIC_TABLE Table,
314 _In_ PVOID Buffer,
315 _Out_ PVOID *NodeOrParent,
316 _Out_ TABLE_SEARCH_RESULT *SearchResult
317 );
318
319 _Must_inspect_result_
320 NTSYSAPI
321 PVOID
322 NTAPI
323 RtlEnumerateGenericTable(
324 _In_ PRTL_GENERIC_TABLE Table,
325 _In_ BOOLEAN Restart
326 );
327
328 _Must_inspect_result_
329 NTSYSAPI
330 PVOID
331 NTAPI
332 RtlEnumerateGenericTableWithoutSplaying(
333 _In_ PRTL_GENERIC_TABLE Table,
334 _Inout_ PVOID *RestartKey
335 );
336
337 _Must_inspect_result_
338 NTSYSAPI
339 PVOID
340 NTAPI
341 RtlGetElementGenericTable(
342 _In_ PRTL_GENERIC_TABLE Table,
343 _In_ ULONG I
344 );
345
346 NTSYSAPI
347 ULONG
348 NTAPI
349 RtlNumberGenericTableElements(
350 _In_ PRTL_GENERIC_TABLE Table
351 );
352
353 _Must_inspect_result_
354 NTSYSAPI
355 BOOLEAN
356 NTAPI
357 RtlIsGenericTableEmpty(
358 _In_ PRTL_GENERIC_TABLE Table
359 );
360
361 #endif /* !RTL_USE_AVL_TABLES */
362
363 NTSYSAPI
364 PRTL_SPLAY_LINKS
365 NTAPI
366 RtlSplay(
367 _Inout_ PRTL_SPLAY_LINKS Links
368 );
369
370 NTSYSAPI
371 PRTL_SPLAY_LINKS
372 NTAPI
373 RtlDelete(
374 _In_ PRTL_SPLAY_LINKS Links
375 );
376
377 NTSYSAPI
378 VOID
379 NTAPI
380 RtlDeleteNoSplay(
381 _In_ PRTL_SPLAY_LINKS Links,
382 _Inout_ PRTL_SPLAY_LINKS *Root
383 );
384
385 _Must_inspect_result_
386 NTSYSAPI
387 PRTL_SPLAY_LINKS
388 NTAPI
389 RtlSubtreeSuccessor(
390 _In_ PRTL_SPLAY_LINKS Links
391 );
392
393 _Must_inspect_result_
394 NTSYSAPI
395 PRTL_SPLAY_LINKS
396 NTAPI
397 RtlSubtreePredecessor(
398 _In_ PRTL_SPLAY_LINKS Links
399 );
400
401 _Must_inspect_result_
402 NTSYSAPI
403 PRTL_SPLAY_LINKS
404 NTAPI
405 RtlRealSuccessor(
406 _In_ PRTL_SPLAY_LINKS Links
407 );
408
409 _Must_inspect_result_
410 NTSYSAPI
411 PRTL_SPLAY_LINKS
412 NTAPI
413 RtlRealPredecessor(
414 _In_ PRTL_SPLAY_LINKS Links
415 );
416
417 #define RtlIsLeftChild(Links) \
418 (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
419
420 #define RtlIsRightChild(Links) \
421 (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
422
423 #define RtlRightChild(Links) \
424 ((PRTL_SPLAY_LINKS)(Links))->RightChild
425
426 #define RtlIsRoot(Links) \
427 (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
428
429 #define RtlLeftChild(Links) \
430 ((PRTL_SPLAY_LINKS)(Links))->LeftChild
431
432 #define RtlParent(Links) \
433 ((PRTL_SPLAY_LINKS)(Links))->Parent
434
435 // FIXME: use inline function
436
437 #define RtlInitializeSplayLinks(Links) \
438 { \
439 PRTL_SPLAY_LINKS _SplayLinks; \
440 _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \
441 _SplayLinks->Parent = _SplayLinks; \
442 _SplayLinks->LeftChild = NULL; \
443 _SplayLinks->RightChild = NULL; \
444 }
445
446 #define RtlInsertAsLeftChild(ParentLinks,ChildLinks) \
447 { \
448 PRTL_SPLAY_LINKS _SplayParent; \
449 PRTL_SPLAY_LINKS _SplayChild; \
450 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
451 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
452 _SplayParent->LeftChild = _SplayChild; \
453 _SplayChild->Parent = _SplayParent; \
454 }
455
456 #define RtlInsertAsRightChild(ParentLinks,ChildLinks) \
457 { \
458 PRTL_SPLAY_LINKS _SplayParent; \
459 PRTL_SPLAY_LINKS _SplayChild; \
460 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
461 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
462 _SplayParent->RightChild = _SplayChild; \
463 _SplayChild->Parent = _SplayParent; \
464 }
465
466 //
467 // RTL AVL Tree Functions
468 //
469 NTSYSAPI
470 VOID
471 NTAPI
472 RtlInitializeGenericTableAvl(
473 _Out_ PRTL_AVL_TABLE Table,
474 _In_ PRTL_AVL_COMPARE_ROUTINE CompareRoutine,
475 _In_opt_ PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine,
476 _In_opt_ PRTL_AVL_FREE_ROUTINE FreeRoutine,
477 _In_opt_ PVOID TableContext
478 );
479
480 NTSYSAPI
481 PVOID
482 NTAPI
483 RtlInsertElementGenericTableAvl(
484 _In_ PRTL_AVL_TABLE Table,
485 _In_reads_bytes_(BufferSize) PVOID Buffer,
486 _In_ CLONG BufferSize,
487 _Out_opt_ PBOOLEAN NewElement
488 );
489
490 NTSYSAPI
491 PVOID
492 NTAPI
493 RtlInsertElementGenericTableFullAvl(
494 _In_ PRTL_AVL_TABLE Table,
495 _In_reads_bytes_(BufferSize) PVOID Buffer,
496 _In_ CLONG BufferSize,
497 _Out_opt_ PBOOLEAN NewElement,
498 _In_ PVOID NodeOrParent,
499 _In_ TABLE_SEARCH_RESULT SearchResult
500 );
501
502 NTSYSAPI
503 BOOLEAN
504 NTAPI
505 RtlDeleteElementGenericTableAvl(
506 _In_ PRTL_AVL_TABLE Table,
507 _In_ PVOID Buffer
508 );
509
510 _Must_inspect_result_
511 NTSYSAPI
512 PVOID
513 NTAPI
514 RtlLookupElementGenericTableAvl(
515 _In_ PRTL_AVL_TABLE Table,
516 _In_ PVOID Buffer
517 );
518
519 NTSYSAPI
520 PVOID
521 NTAPI
522 RtlLookupElementGenericTableFullAvl(
523 _In_ PRTL_AVL_TABLE Table,
524 _In_ PVOID Buffer,
525 _Out_ PVOID *NodeOrParent,
526 _Out_ TABLE_SEARCH_RESULT *SearchResult
527 );
528
529 _Must_inspect_result_
530 NTSYSAPI
531 PVOID
532 NTAPI
533 RtlEnumerateGenericTableAvl(
534 _In_ PRTL_AVL_TABLE Table,
535 _In_ BOOLEAN Restart
536 );
537
538 _Must_inspect_result_
539 NTSYSAPI
540 PVOID
541 NTAPI
542 RtlEnumerateGenericTableWithoutSplayingAvl(
543 _In_ PRTL_AVL_TABLE Table,
544 _Inout_ PVOID *RestartKey
545 );
546
547 _Must_inspect_result_
548 NTSYSAPI
549 PVOID
550 NTAPI
551 RtlLookupFirstMatchingElementGenericTableAvl(
552 _In_ PRTL_AVL_TABLE Table,
553 _In_ PVOID Buffer,
554 _Out_ PVOID *RestartKey
555 );
556
557 _Must_inspect_result_
558 NTSYSAPI
559 PVOID
560 NTAPI
561 RtlEnumerateGenericTableLikeADirectory(
562 _In_ PRTL_AVL_TABLE Table,
563 _In_opt_ PRTL_AVL_MATCH_FUNCTION MatchFunction,
564 _In_opt_ PVOID MatchData,
565 _In_ ULONG NextFlag,
566 _Inout_ PVOID *RestartKey,
567 _Inout_ PULONG DeleteCount,
568 _In_ PVOID Buffer
569 );
570
571 _Must_inspect_result_
572 NTSYSAPI
573 PVOID
574 NTAPI
575 RtlGetElementGenericTableAvl(
576 _In_ PRTL_AVL_TABLE Table,
577 _In_ ULONG I
578 );
579
580 NTSYSAPI
581 ULONG
582 NTAPI
583 RtlNumberGenericTableElementsAvl(
584 _In_ PRTL_AVL_TABLE Table
585 );
586
587 _Must_inspect_result_
588 NTSYSAPI
589 BOOLEAN
590 NTAPI
591 RtlIsGenericTableEmptyAvl(
592 _In_ PRTL_AVL_TABLE Table
593 );
594
595 #ifdef RTL_USE_AVL_TABLES
596
597 #define RtlInitializeGenericTable RtlInitializeGenericTableAvl
598 #define RtlInsertElementGenericTable RtlInsertElementGenericTableAvl
599 #define RtlInsertElementGenericTableFull RtlInsertElementGenericTableFullAvl
600 #define RtlDeleteElementGenericTable RtlDeleteElementGenericTableAvl
601 #define RtlLookupElementGenericTable RtlLookupElementGenericTableAvl
602 #define RtlLookupElementGenericTableFull RtlLookupElementGenericTableFullAvl
603 #define RtlEnumerateGenericTable RtlEnumerateGenericTableAvl
604 #define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl
605 #define RtlGetElementGenericTable RtlGetElementGenericTableAvl
606 #define RtlNumberGenericTableElements RtlNumberGenericTableElementsAvl
607 #define RtlIsGenericTableEmpty RtlIsGenericTableEmptyAvl
608
609 #endif /* RTL_USE_AVL_TABLES */
610
611 //
612 // Error and Exception Functions
613 //
614 NTSYSAPI
615 PVOID
616 NTAPI
617 RtlAddVectoredExceptionHandler(
618 _In_ ULONG FirstHandler,
619 _In_ PVECTORED_EXCEPTION_HANDLER VectoredHandler
620 );
621
622 __analysis_noreturn
623 NTSYSAPI
624 VOID
625 NTAPI
626 RtlAssert(
627 _In_ PVOID FailedAssertion,
628 _In_ PVOID FileName,
629 _In_ ULONG LineNumber,
630 _In_opt_z_ PCHAR Message
631 );
632
633 NTSYSAPI
634 VOID
635 NTAPI
636 RtlSetUnhandledExceptionFilter(
637 _In_ PRTLP_UNHANDLED_EXCEPTION_FILTER TopLevelExceptionFilter
638 );
639
640 #endif /* NTOS_MODE_USER */
641
642 NTSYSAPI
643 VOID
644 NTAPI
645 RtlCaptureContext(
646 _Out_ PCONTEXT ContextRecord
647 );
648
649 NTSYSAPI
650 PVOID
651 NTAPI
652 RtlEncodePointer(
653 _In_ PVOID Pointer
654 );
655
656 NTSYSAPI
657 PVOID
658 NTAPI
659 RtlDecodePointer(
660 _In_ PVOID Pointer
661 );
662
663 NTSYSAPI
664 PVOID
665 NTAPI
666 RtlEncodeSystemPointer(
667 _In_ PVOID Pointer
668 );
669
670 NTSYSAPI
671 PVOID
672 NTAPI
673 RtlDecodeSystemPointer(
674 _In_ PVOID Pointer
675 );
676
677 NTSYSAPI
678 BOOLEAN
679 NTAPI
680 RtlDispatchException(
681 _In_ PEXCEPTION_RECORD ExceptionRecord,
682 _In_ PCONTEXT Context
683 );
684
685 _IRQL_requires_max_(APC_LEVEL)
686 _When_(Status < 0, _Out_range_(>, 0))
687 _When_(Status >= 0, _Out_range_(==, 0))
688 NTSYSAPI
689 ULONG
690 NTAPI
691 RtlNtStatusToDosError(
692 _In_ NTSTATUS Status
693 );
694
695 _When_(Status < 0, _Out_range_(>, 0))
696 _When_(Status >= 0, _Out_range_(==, 0))
697 NTSYSAPI
698 ULONG
699 NTAPI
700 RtlNtStatusToDosErrorNoTeb(
701 _In_ NTSTATUS Status
702 );
703
704 NTSYSAPI
705 VOID
706 NTAPI
707 RtlSetLastWin32ErrorAndNtStatusFromNtStatus(
708 _In_ NTSTATUS Status
709 );
710
711 NTSYSAPI
712 VOID
713 NTAPI
714 RtlRaiseException(
715 _In_ PEXCEPTION_RECORD ExceptionRecord
716 );
717
718 DECLSPEC_NORETURN
719 NTSYSAPI
720 VOID
721 NTAPI
722 RtlRaiseStatus(
723 _In_ NTSTATUS Status
724 );
725
726 NTSYSAPI
727 LONG
728 NTAPI
729 RtlUnhandledExceptionFilter(
730 _In_ struct _EXCEPTION_POINTERS* ExceptionInfo
731 );
732
733 NTSYSAPI
734 VOID
735 NTAPI
736 RtlUnwind(
737 _In_opt_ PVOID TargetFrame,
738 _In_opt_ PVOID TargetIp,
739 _In_opt_ PEXCEPTION_RECORD ExceptionRecord,
740 _In_ PVOID ReturnValue
741 );
742
743 #define RTL_STACK_WALKING_MODE_FRAMES_TO_SKIP_SHIFT 8
744
745 //
746 // Tracing Functions
747 //
748 NTSYSAPI
749 ULONG
750 NTAPI
751 RtlWalkFrameChain(
752 _Out_writes_(Count - (Flags >> RTL_STACK_WALKING_MODE_FRAMES_TO_SKIP_SHIFT)) PVOID *Callers,
753 _In_ ULONG Count,
754 _In_ ULONG Flags
755 );
756
757 NTSYSAPI
758 USHORT
759 NTAPI
760 RtlLogStackBackTrace(
761 VOID
762 );
763
764 #ifdef NTOS_MODE_USER
765 //
766 // Heap Functions
767 //
768 _Must_inspect_result_
769 _Ret_maybenull_
770 _Post_writable_byte_size_(Size)
771 NTSYSAPI
772 PVOID
773 NTAPI
774 RtlAllocateHeap(
775 _In_ PVOID HeapHandle,
776 _In_opt_ ULONG Flags,
777 _In_ SIZE_T Size
778 );
779
780 _Must_inspect_result_
781 NTSYSAPI
782 PVOID
783 NTAPI
784 RtlCreateHeap(
785 _In_ ULONG Flags,
786 _In_opt_ PVOID BaseAddress,
787 _In_opt_ SIZE_T SizeToReserve,
788 _In_opt_ SIZE_T SizeToCommit,
789 _In_opt_ PVOID Lock,
790 _In_opt_ PRTL_HEAP_PARAMETERS Parameters
791 );
792
793 NTSYSAPI
794 ULONG
795 NTAPI
796 RtlCreateTagHeap(
797 _In_ HANDLE HeapHandle,
798 _In_ ULONG Flags,
799 _In_ PWSTR TagName,
800 _In_ PWSTR TagSubName
801 );
802
803 ULONG
804 NTAPI
805 RtlCompactHeap(
806 _In_ HANDLE Heap,
807 _In_ ULONG Flags
808 );
809
810 _Must_inspect_result_
811 NTSYSAPI
812 PVOID
813 NTAPI
814 RtlDebugCreateHeap(
815 _In_ ULONG Flags,
816 _In_opt_ PVOID BaseAddress,
817 _In_opt_ SIZE_T SizeToReserve,
818 _In_opt_ SIZE_T SizeToCommit,
819 _In_opt_ PVOID Lock,
820 _In_opt_ PRTL_HEAP_PARAMETERS Parameters
821 );
822
823 NTSYSAPI
824 HANDLE
825 NTAPI
826 RtlDestroyHeap(
827 _In_ _Post_invalid_ HANDLE Heap
828 );
829
830 NTSYSAPI
831 ULONG
832 NTAPI
833 RtlExtendHeap(
834 _In_ HANDLE Heap,
835 _In_ ULONG Flags,
836 _In_ PVOID P,
837 _In_ SIZE_T Size
838 );
839
840 _Success_(return != 0)
841 NTSYSAPI
842 BOOLEAN
843 NTAPI
844 RtlFreeHeap(
845 _In_ HANDLE HeapHandle,
846 _In_opt_ ULONG Flags,
847 _In_ _Post_invalid_ PVOID P
848 );
849
850 ULONG
851 NTAPI
852 RtlGetProcessHeaps(
853 _In_ ULONG HeapCount,
854 _Out_cap_(HeapCount) HANDLE *HeapArray
855 );
856
857 _Success_(return != 0)
858 BOOLEAN
859 NTAPI
860 RtlGetUserInfoHeap(
861 _In_ PVOID HeapHandle,
862 _In_ ULONG Flags,
863 _In_ PVOID BaseAddress,
864 _Inout_opt_ PVOID *UserValue,
865 _Out_opt_ PULONG UserFlags
866 );
867
868 NTSYSAPI
869 PVOID
870 NTAPI
871 RtlProtectHeap(
872 _In_ PVOID HeapHandle,
873 _In_ BOOLEAN Protect
874 );
875
876 NTSYSAPI
877 NTSTATUS
878 NTAPI
879 RtlQueryHeapInformation(
880 _In_ PVOID HeapHandle,
881 _In_ HEAP_INFORMATION_CLASS HeapInformationClass,
882 _Out_ PVOID HeapInformation,
883 _In_ SIZE_T HeapInformationLength,
884 _When_(HeapInformationClass==HeapCompatibilityInformation, _On_failure_(_Out_opt_))
885 _Out_opt_ PSIZE_T ReturnLength
886 );
887
888 _Ret_opt_z_
889 NTSYSAPI
890 PWSTR
891 NTAPI
892 RtlQueryTagHeap(
893 _In_ PVOID HeapHandle,
894 _In_ ULONG Flags,
895 _In_ USHORT TagIndex,
896 _In_ BOOLEAN ResetCounters,
897 _Out_ PRTL_HEAP_TAG_INFO HeapTagInfo
898 );
899
900 _Must_inspect_result_
901 _Ret_maybenull_
902 _Post_writable_byte_size_(Size)
903 NTSYSAPI
904 PVOID
905 NTAPI
906 RtlReAllocateHeap(
907 _In_ HANDLE Heap,
908 _In_opt_ ULONG Flags,
909 _In_ _Post_invalid_ PVOID Ptr,
910 _In_ SIZE_T Size
911 );
912
913 NTSYSAPI
914 NTSTATUS
915 NTAPI
916 RtlSetHeapInformation(
917 _In_ PVOID HeapHandle,
918 _In_ HEAP_INFORMATION_CLASS HeapInformationClass,
919 _When_(HeapInformationClass==HeapCompatibilityInformation,_In_) PVOID HeapInformation,
920 _In_ SIZE_T HeapInformationLength
921 );
922
923 NTSYSAPI
924 BOOLEAN
925 NTAPI
926 RtlLockHeap(
927 _In_ HANDLE Heap
928 );
929
930 _Must_inspect_result_
931 NTSYSAPI
932 NTSTATUS
933 NTAPI
934 RtlMultipleAllocateHeap (
935 _In_ HANDLE HeapHandle,
936 _In_ ULONG Flags,
937 _In_ SIZE_T Size,
938 _In_ ULONG Count,
939 _Out_cap_(Count) _Deref_post_bytecap_(Size) PVOID * Array
940 );
941
942 NTSYSAPI
943 NTSTATUS
944 NTAPI
945 RtlMultipleFreeHeap (
946 _In_ HANDLE HeapHandle,
947 _In_ ULONG Flags,
948 _In_ ULONG Count,
949 _In_count_(Count) /* _Deref_ _Post_invalid_ */ PVOID * Array
950 );
951
952 NTSYSAPI
953 NTSTATUS
954 NTAPI
955 RtlUsageHeap(
956 _In_ HANDLE Heap,
957 _In_ ULONG Flags,
958 _Out_ PRTL_HEAP_USAGE Usage
959 );
960
961 NTSYSAPI
962 BOOLEAN
963 NTAPI
964 RtlUnlockHeap(
965 _In_ HANDLE Heap
966 );
967
968 BOOLEAN
969 NTAPI
970 RtlSetUserValueHeap(
971 _In_ PVOID HeapHandle,
972 _In_ ULONG Flags,
973 _In_ PVOID BaseAddress,
974 _In_ PVOID UserValue
975 );
976
977 BOOLEAN
978 NTAPI
979 RtlSetUserFlagsHeap(
980 _In_ PVOID HeapHandle,
981 _In_ ULONG Flags,
982 _In_ PVOID BaseAddress,
983 _In_ ULONG UserFlagsReset,
984 _In_ ULONG UserFlagsSet
985 );
986
987 NTSYSAPI
988 BOOLEAN
989 NTAPI
990 RtlValidateHeap(
991 _In_ HANDLE Heap,
992 _In_ ULONG Flags,
993 _In_opt_ PVOID P
994 );
995
996 NTSYSAPI
997 NTSTATUS
998 NTAPI
999 RtlWalkHeap(
1000 _In_ HANDLE HeapHandle,
1001 _In_ PVOID HeapEntry
1002 );
1003
1004 #define RtlGetProcessHeap() (NtCurrentPeb()->ProcessHeap)
1005
1006 #endif // NTOS_MODE_USER
1007
1008 NTSYSAPI
1009 SIZE_T
1010 NTAPI
1011 RtlSizeHeap(
1012 _In_ PVOID HeapHandle,
1013 _In_ ULONG Flags,
1014 _In_ PVOID MemoryPointer
1015 );
1016
1017
1018 //
1019 // Security Functions
1020 //
1021 _IRQL_requires_max_(APC_LEVEL)
1022 NTSYSAPI
1023 NTSTATUS
1024 NTAPI
1025 RtlAbsoluteToSelfRelativeSD(
1026 _In_ PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor,
1027 _Out_writes_bytes_to_opt_(*BufferLength, *BufferLength) PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor,
1028 _Inout_ PULONG BufferLength
1029 );
1030
1031 _IRQL_requires_max_(APC_LEVEL)
1032 NTSYSAPI
1033 NTSTATUS
1034 NTAPI
1035 RtlAddAccessAllowedAce(
1036 _Inout_ PACL Acl,
1037 _In_ ULONG Revision,
1038 _In_ ACCESS_MASK AccessMask,
1039 _In_ PSID Sid
1040 );
1041
1042 _IRQL_requires_max_(APC_LEVEL)
1043 NTSYSAPI
1044 NTSTATUS
1045 NTAPI
1046 RtlAddAccessAllowedAceEx(
1047 _Inout_ PACL pAcl,
1048 _In_ ULONG dwAceRevision,
1049 _In_ ULONG AceFlags,
1050 _In_ ACCESS_MASK AccessMask,
1051 _In_ PSID pSid
1052 );
1053
1054 NTSYSAPI
1055 NTSTATUS
1056 NTAPI
1057 RtlAddAccessAllowedObjectAce(
1058 _Inout_ PACL pAcl,
1059 _In_ ULONG dwAceRevision,
1060 _In_ ULONG AceFlags,
1061 _In_ ACCESS_MASK AccessMask,
1062 _In_opt_ GUID *ObjectTypeGuid,
1063 _In_opt_ GUID *InheritedObjectTypeGuid,
1064 _In_ PSID pSid
1065 );
1066
1067 NTSYSAPI
1068 NTSTATUS
1069 NTAPI
1070 RtlAddAccessDeniedAce(
1071 _Inout_ PACL Acl,
1072 _In_ ULONG Revision,
1073 _In_ ACCESS_MASK AccessMask,
1074 _In_ PSID Sid
1075 );
1076
1077 NTSYSAPI
1078 NTSTATUS
1079 NTAPI
1080 RtlAddAccessDeniedAceEx(
1081 _Inout_ PACL Acl,
1082 _In_ ULONG Revision,
1083 _In_ ULONG Flags,
1084 _In_ ACCESS_MASK AccessMask,
1085 _In_ PSID Sid
1086 );
1087
1088 NTSYSAPI
1089 NTSTATUS
1090 NTAPI
1091 RtlAddAccessDeniedObjectAce(
1092 _Inout_ PACL pAcl,
1093 _In_ ULONG dwAceRevision,
1094 _In_ ULONG AceFlags,
1095 _In_ ACCESS_MASK AccessMask,
1096 _In_opt_ GUID *ObjectTypeGuid,
1097 _In_opt_ GUID *InheritedObjectTypeGuid,
1098 _In_ PSID pSid
1099 );
1100
1101 NTSYSAPI
1102 NTSTATUS
1103 NTAPI
1104 RtlAddAce(
1105 _Inout_ PACL Acl,
1106 _In_ ULONG AceRevision,
1107 _In_ ULONG StartingAceIndex,
1108 _In_reads_bytes_(AceListLength) PVOID AceList,
1109 _In_ ULONG AceListLength
1110 );
1111
1112 NTSYSAPI
1113 NTSTATUS
1114 NTAPI
1115 RtlAddAuditAccessAce(
1116 _Inout_ PACL Acl,
1117 _In_ ULONG Revision,
1118 _In_ ACCESS_MASK AccessMask,
1119 _In_ PSID Sid,
1120 _In_ BOOLEAN Success,
1121 _In_ BOOLEAN Failure
1122 );
1123
1124 NTSYSAPI
1125 NTSTATUS
1126 NTAPI
1127 RtlAcquirePrivilege(
1128 _In_ PULONG Privilege,
1129 _In_ ULONG NumPriv,
1130 _In_ ULONG Flags,
1131 _Out_ PVOID *ReturnedState
1132 );
1133
1134 NTSYSAPI
1135 NTSTATUS
1136 NTAPI
1137 RtlAddAuditAccessAceEx(
1138 _Inout_ PACL Acl,
1139 _In_ ULONG Revision,
1140 _In_ ULONG Flags,
1141 _In_ ACCESS_MASK AccessMask,
1142 _In_ PSID Sid,
1143 _In_ BOOLEAN Success,
1144 _In_ BOOLEAN Failure
1145 );
1146
1147 NTSYSAPI
1148 NTSTATUS
1149 NTAPI
1150 RtlAddAuditAccessObjectAce(
1151 _Inout_ PACL Acl,
1152 _In_ ULONG Revision,
1153 _In_ ULONG Flags,
1154 _In_ ACCESS_MASK AccessMask,
1155 _In_opt_ GUID *ObjectTypeGuid,
1156 _In_opt_ GUID *InheritedObjectTypeGuid,
1157 _In_ PSID Sid,
1158 _In_ BOOLEAN Success,
1159 _In_ BOOLEAN Failure
1160 );
1161
1162 NTSYSAPI
1163 NTSTATUS
1164 NTAPI
1165 RtlAddMandatoryAce(
1166 _Inout_ PACL Acl,
1167 _In_ ULONG Revision,
1168 _In_ ULONG Flags,
1169 _In_ ULONG MandatoryFlags,
1170 _In_ UCHAR AceType,
1171 _In_ PSID LabelSid);
1172
1173 NTSYSAPI
1174 NTSTATUS
1175 NTAPI
1176 RtlAdjustPrivilege(
1177 _In_ ULONG Privilege,
1178 _In_ BOOLEAN NewValue,
1179 _In_ BOOLEAN ForThread,
1180 _Out_ PBOOLEAN OldValue
1181 );
1182
1183 _Must_inspect_result_
1184 NTSYSAPI
1185 NTSTATUS
1186 NTAPI
1187 RtlAllocateAndInitializeSid(
1188 _In_ PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
1189 _In_ UCHAR SubAuthorityCount,
1190 _In_ ULONG SubAuthority0,
1191 _In_ ULONG SubAuthority1,
1192 _In_ ULONG SubAuthority2,
1193 _In_ ULONG SubAuthority3,
1194 _In_ ULONG SubAuthority4,
1195 _In_ ULONG SubAuthority5,
1196 _In_ ULONG SubAuthority6,
1197 _In_ ULONG SubAuthority7,
1198 _Outptr_ PSID *Sid
1199 );
1200
1201 NTSYSAPI
1202 BOOLEAN
1203 NTAPI
1204 RtlAreAllAccessesGranted(
1205 ACCESS_MASK GrantedAccess,
1206 ACCESS_MASK DesiredAccess
1207 );
1208
1209 NTSYSAPI
1210 BOOLEAN
1211 NTAPI
1212 RtlAreAnyAccessesGranted(
1213 ACCESS_MASK GrantedAccess,
1214 ACCESS_MASK DesiredAccess
1215 );
1216
1217 _IRQL_requires_max_(APC_LEVEL)
1218 NTSYSAPI
1219 VOID
1220 NTAPI
1221 RtlCopyLuid (
1222 _Out_ PLUID DestinationLuid,
1223 _In_ PLUID SourceLuid
1224 );
1225
1226 NTSYSAPI
1227 VOID
1228 NTAPI
1229 RtlCopyLuidAndAttributesArray(
1230 ULONG Count,
1231 PLUID_AND_ATTRIBUTES Src,
1232 PLUID_AND_ATTRIBUTES Dest
1233 );
1234
1235 NTSYSAPI
1236 NTSTATUS
1237 NTAPI
1238 RtlCopySidAndAttributesArray(
1239 ULONG Count,
1240 PSID_AND_ATTRIBUTES Src,
1241 ULONG SidAreaSize,
1242 PSID_AND_ATTRIBUTES Dest,
1243 PVOID SidArea,
1244 PVOID* RemainingSidArea,
1245 PULONG RemainingSidAreaSize
1246 );
1247
1248 _IRQL_requires_max_(APC_LEVEL)
1249 NTSYSAPI
1250 NTSTATUS
1251 NTAPI
1252 RtlConvertSidToUnicodeString(
1253 _Inout_ PUNICODE_STRING UnicodeString,
1254 _In_ PSID Sid,
1255 _In_ BOOLEAN AllocateDestinationString
1256 );
1257
1258 _IRQL_requires_max_(APC_LEVEL)
1259 NTSYSAPI
1260 NTSTATUS
1261 NTAPI
1262 RtlCopySid(
1263 _In_ ULONG DestinationSidLength,
1264 _Out_writes_bytes_(DestinationSidLength) PSID DestinationSid,
1265 _In_ PSID SourceSid
1266 );
1267
1268 NTSYSAPI
1269 NTSTATUS
1270 NTAPI
1271 RtlCreateAcl(
1272 PACL Acl,
1273 ULONG AclSize,
1274 ULONG AclRevision
1275 );
1276
1277 NTSYSAPI
1278 NTSTATUS
1279 NTAPI
1280 RtlCreateSecurityDescriptor(
1281 _Out_ PSECURITY_DESCRIPTOR SecurityDescriptor,
1282 _In_ ULONG Revision
1283 );
1284
1285 NTSYSAPI
1286 NTSTATUS
1287 NTAPI
1288 RtlCreateSecurityDescriptorRelative(
1289 _Out_ PISECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor,
1290 _In_ ULONG Revision
1291 );
1292
1293 NTSYSAPI
1294 NTSTATUS
1295 NTAPI
1296 RtlCopySecurityDescriptor(
1297 _In_ PSECURITY_DESCRIPTOR pSourceSecurityDescriptor,
1298 _Out_ PSECURITY_DESCRIPTOR *pDestinationSecurityDescriptor
1299 );
1300
1301 NTSYSAPI
1302 NTSTATUS
1303 NTAPI
1304 RtlDeleteAce(
1305 PACL Acl,
1306 ULONG AceIndex
1307 );
1308
1309 NTSYSAPI
1310 BOOLEAN
1311 NTAPI
1312 RtlEqualPrefixSid(
1313 PSID Sid1,
1314 PSID Sid2
1315 );
1316
1317 NTSYSAPI
1318 BOOLEAN
1319 NTAPI
1320 RtlEqualSid (
1321 _In_ PSID Sid1,
1322 _In_ PSID Sid2
1323 );
1324
1325 NTSYSAPI
1326 BOOLEAN
1327 NTAPI
1328 RtlFirstFreeAce(
1329 PACL Acl,
1330 PACE* Ace
1331 );
1332
1333 NTSYSAPI
1334 PVOID
1335 NTAPI
1336 RtlFreeSid(
1337 _In_ _Post_invalid_ PSID Sid
1338 );
1339
1340 NTSYSAPI
1341 NTSTATUS
1342 NTAPI
1343 RtlGetAce(
1344 PACL Acl,
1345 ULONG AceIndex,
1346 PVOID *Ace
1347 );
1348
1349 NTSYSAPI
1350 NTSTATUS
1351 NTAPI
1352 RtlGetControlSecurityDescriptor(
1353 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
1354 _Out_ PSECURITY_DESCRIPTOR_CONTROL Control,
1355 _Out_ PULONG Revision
1356 );
1357
1358 NTSYSAPI
1359 NTSTATUS
1360 NTAPI
1361 RtlGetDaclSecurityDescriptor(
1362 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
1363 _Out_ PBOOLEAN DaclPresent,
1364 _Out_ PACL *Dacl,
1365 _Out_ PBOOLEAN DaclDefaulted
1366 );
1367
1368 NTSYSAPI
1369 NTSTATUS
1370 NTAPI
1371 RtlGetSaclSecurityDescriptor(
1372 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
1373 _Out_ PBOOLEAN SaclPresent,
1374 _Out_ PACL* Sacl,
1375 _Out_ PBOOLEAN SaclDefaulted
1376 );
1377
1378 NTSYSAPI
1379 NTSTATUS
1380 NTAPI
1381 RtlGetGroupSecurityDescriptor(
1382 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
1383 _Out_ PSID *Group,
1384 _Out_ PBOOLEAN GroupDefaulted
1385 );
1386
1387 NTSYSAPI
1388 NTSTATUS
1389 NTAPI
1390 RtlGetOwnerSecurityDescriptor(
1391 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
1392 _Out_ PSID *Owner,
1393 _Out_ PBOOLEAN OwnerDefaulted
1394 );
1395
1396 NTSYSAPI
1397 BOOLEAN
1398 NTAPI
1399 RtlGetSecurityDescriptorRMControl(
1400 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
1401 _Out_ PUCHAR RMControl
1402 );
1403
1404 NTSYSAPI
1405 PSID_IDENTIFIER_AUTHORITY
1406 NTAPI
1407 RtlIdentifierAuthoritySid(PSID Sid);
1408
1409 NTSYSAPI
1410 NTSTATUS
1411 NTAPI
1412 RtlImpersonateSelf(IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel);
1413
1414 _IRQL_requires_max_(APC_LEVEL)
1415 NTSYSAPI
1416 NTSTATUS
1417 NTAPI
1418 RtlInitializeSid(
1419 _Out_ PSID Sid,
1420 _In_ PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
1421 _In_ UCHAR SubAuthorityCount
1422 );
1423
1424 NTSYSAPI
1425 ULONG
1426 NTAPI
1427 RtlLengthRequiredSid(IN ULONG SubAuthorityCount);
1428
1429 NTSYSAPI
1430 ULONG
1431 NTAPI
1432 RtlLengthSid(IN PSID Sid);
1433
1434 NTSYSAPI
1435 NTSTATUS
1436 NTAPI
1437 RtlMakeSelfRelativeSD(
1438 _In_ PSECURITY_DESCRIPTOR AbsoluteSD,
1439 _Out_ PSECURITY_DESCRIPTOR SelfRelativeSD,
1440 _Inout_ PULONG BufferLength);
1441
1442 NTSYSAPI
1443 VOID
1444 NTAPI
1445 RtlMapGenericMask(
1446 PACCESS_MASK AccessMask,
1447 PGENERIC_MAPPING GenericMapping
1448 );
1449
1450 #ifdef NTOS_MODE_USER
1451
1452 NTSYSAPI
1453 NTSTATUS
1454 NTAPI
1455 RtlQueryInformationAcl(
1456 PACL Acl,
1457 PVOID Information,
1458 ULONG InformationLength,
1459 ACL_INFORMATION_CLASS InformationClass
1460 );
1461
1462 #endif
1463
1464 NTSYSAPI
1465 VOID
1466 NTAPI
1467 RtlReleasePrivilege(
1468 _In_ PVOID ReturnedState
1469 );
1470
1471 _IRQL_requires_max_(APC_LEVEL)
1472 NTSYSAPI
1473 NTSTATUS
1474 NTAPI
1475 RtlSelfRelativeToAbsoluteSD(
1476 _In_ PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor,
1477 _Out_writes_bytes_to_opt_(*AbsoluteSecurityDescriptorSize, *AbsoluteSecurityDescriptorSize) PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor,
1478 _Inout_ PULONG AbsoluteSecurityDescriptorSize,
1479 _Out_writes_bytes_to_opt_(*DaclSize, *DaclSize) PACL Dacl,
1480 _Inout_ PULONG DaclSize,
1481 _Out_writes_bytes_to_opt_(*SaclSize, *SaclSize) PACL Sacl,
1482 _Inout_ PULONG SaclSize,
1483 _Out_writes_bytes_to_opt_(*OwnerSize, *OwnerSize) PSID Owner,
1484 _Inout_ PULONG OwnerSize,
1485 _Out_writes_bytes_to_opt_(*PrimaryGroupSize, *PrimaryGroupSize) PSID PrimaryGroup,
1486 _Inout_ PULONG PrimaryGroupSize
1487 );
1488
1489 NTSYSAPI
1490 NTSTATUS
1491 NTAPI
1492 RtlSelfRelativeToAbsoluteSD2(
1493 _Inout_ PSECURITY_DESCRIPTOR SelfRelativeSD,
1494 _Out_ PULONG BufferSize
1495 );
1496
1497 NTSYSAPI
1498 NTSTATUS
1499 NTAPI
1500 RtlSetAttributesSecurityDescriptor(
1501 _Inout_ PSECURITY_DESCRIPTOR SecurityDescriptor,
1502 _In_ SECURITY_DESCRIPTOR_CONTROL Control,
1503 _Out_ PULONG Revision
1504 );
1505
1506 NTSYSAPI
1507 NTSTATUS
1508 NTAPI
1509 RtlSetControlSecurityDescriptor(
1510 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
1511 _In_ SECURITY_DESCRIPTOR_CONTROL ControlBitsOfInterest,
1512 _In_ SECURITY_DESCRIPTOR_CONTROL ControlBitsToSet
1513 );
1514
1515 _IRQL_requires_max_(APC_LEVEL)
1516 NTSYSAPI
1517 NTSTATUS
1518 NTAPI
1519 RtlSetDaclSecurityDescriptor(
1520 _Inout_ PSECURITY_DESCRIPTOR SecurityDescriptor,
1521 _In_ BOOLEAN DaclPresent,
1522 _In_opt_ PACL Dacl,
1523 _In_opt_ BOOLEAN DaclDefaulted
1524 );
1525
1526 _IRQL_requires_max_(APC_LEVEL)
1527 NTSYSAPI
1528 NTSTATUS
1529 NTAPI
1530 RtlSetGroupSecurityDescriptor(
1531 _Inout_ PSECURITY_DESCRIPTOR SecurityDescriptor,
1532 _In_opt_ PSID Group,
1533 _In_opt_ BOOLEAN GroupDefaulted
1534 );
1535
1536 #ifdef NTOS_MODE_USER
1537
1538 NTSYSAPI
1539 NTSTATUS
1540 NTAPI
1541 RtlSetInformationAcl(
1542 PACL Acl,
1543 PVOID Information,
1544 ULONG InformationLength,
1545 ACL_INFORMATION_CLASS InformationClass
1546 );
1547
1548 #endif
1549
1550 _IRQL_requires_max_(APC_LEVEL)
1551 NTSYSAPI
1552 NTSTATUS
1553 NTAPI
1554 RtlSetOwnerSecurityDescriptor(
1555 _Inout_ PSECURITY_DESCRIPTOR SecurityDescriptor,
1556 _In_opt_ PSID Owner,
1557 _In_opt_ BOOLEAN OwnerDefaulted
1558 );
1559
1560 NTSYSAPI
1561 NTSTATUS
1562 NTAPI
1563 RtlSetSaclSecurityDescriptor(
1564 _Inout_ PSECURITY_DESCRIPTOR SecurityDescriptor,
1565 _In_ BOOLEAN SaclPresent,
1566 _In_ PACL Sacl,
1567 _In_ BOOLEAN SaclDefaulted
1568 );
1569
1570 NTSYSAPI
1571 VOID
1572 NTAPI
1573 RtlSetSecurityDescriptorRMControl(
1574 _Inout_ PSECURITY_DESCRIPTOR SecurityDescriptor,
1575 _In_ PUCHAR RMControl
1576 );
1577
1578 NTSYSAPI
1579 PUCHAR
1580 NTAPI
1581 RtlSubAuthorityCountSid(
1582 _In_ PSID Sid
1583 );
1584
1585 NTSYSAPI
1586 PULONG
1587 NTAPI
1588 RtlSubAuthoritySid(
1589 _In_ PSID Sid,
1590 _In_ ULONG SubAuthority
1591 );
1592
1593 _IRQL_requires_max_(APC_LEVEL)
1594 _Must_inspect_result_
1595 NTSYSAPI
1596 BOOLEAN
1597 NTAPI
1598 RtlValidRelativeSecurityDescriptor(
1599 _In_reads_bytes_(SecurityDescriptorLength) PSECURITY_DESCRIPTOR SecurityDescriptorInput,
1600 _In_ ULONG SecurityDescriptorLength,
1601 _In_ SECURITY_INFORMATION RequiredInformation
1602 );
1603
1604 NTSYSAPI
1605 BOOLEAN
1606 NTAPI
1607 RtlValidSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor);
1608
1609 NTSYSAPI
1610 BOOLEAN
1611 NTAPI
1612 RtlValidSid(IN PSID Sid);
1613
1614 NTSYSAPI
1615 BOOLEAN
1616 NTAPI
1617 RtlValidAcl(PACL Acl);
1618
1619 NTSYSAPI
1620 NTSTATUS
1621 NTAPI
1622 RtlDeleteSecurityObject(
1623 _In_ PSECURITY_DESCRIPTOR *ObjectDescriptor
1624 );
1625
1626 NTSYSAPI
1627 NTSTATUS
1628 NTAPI
1629 RtlNewSecurityObject(
1630 _In_ PSECURITY_DESCRIPTOR ParentDescriptor,
1631 _In_ PSECURITY_DESCRIPTOR CreatorDescriptor,
1632 _Out_ PSECURITY_DESCRIPTOR *NewDescriptor,
1633 _In_ BOOLEAN IsDirectoryObject,
1634 _In_ HANDLE Token,
1635 _In_ PGENERIC_MAPPING GenericMapping
1636 );
1637
1638 NTSYSAPI
1639 NTSTATUS
1640 NTAPI
1641 RtlQuerySecurityObject(
1642 _In_ PSECURITY_DESCRIPTOR ObjectDescriptor,
1643 _In_ SECURITY_INFORMATION SecurityInformation,
1644 _Out_ PSECURITY_DESCRIPTOR ResultantDescriptor,
1645 _In_ ULONG DescriptorLength,
1646 _Out_ PULONG ReturnLength
1647 );
1648
1649 NTSYSAPI
1650 NTSTATUS
1651 NTAPI
1652 RtlSetSecurityObject(
1653 _In_ SECURITY_INFORMATION SecurityInformation,
1654 _In_ PSECURITY_DESCRIPTOR ModificationDescriptor,
1655 _Out_ PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
1656 _In_ PGENERIC_MAPPING GenericMapping,
1657 _In_ HANDLE Token
1658 );
1659
1660 //
1661 // Single-Character Functions
1662 //
1663 NTSYSAPI
1664 NTSTATUS
1665 NTAPI
1666 RtlLargeIntegerToChar(
1667 _In_ PLARGE_INTEGER Value,
1668 _In_ ULONG Base,
1669 _In_ ULONG Length,
1670 _Out_ PCHAR String
1671 );
1672
1673 NTSYSAPI
1674 CHAR
1675 NTAPI
1676 RtlUpperChar(CHAR Source);
1677
1678 NTSYSAPI
1679 WCHAR
1680 NTAPI
1681 RtlUpcaseUnicodeChar(WCHAR Source);
1682
1683 NTSYSAPI
1684 WCHAR
1685 NTAPI
1686 RtlDowncaseUnicodeChar(IN WCHAR Source);
1687
1688 NTSYSAPI
1689 NTSTATUS
1690 NTAPI
1691 RtlIntegerToChar(
1692 _In_ ULONG Value,
1693 _In_ ULONG Base,
1694 _In_ ULONG Length,
1695 _Out_ PCHAR String
1696 );
1697
1698 NTSYSAPI
1699 NTSTATUS
1700 NTAPI
1701 RtlIntegerToUnicode(
1702 _In_ ULONG Value,
1703 _In_opt_ ULONG Base,
1704 _In_opt_ ULONG Length,
1705 _Inout_ LPWSTR String
1706 );
1707
1708 _IRQL_requires_max_(PASSIVE_LEVEL)
1709 _At_(String->MaximumLength, _Const_)
1710 NTSYSAPI
1711 NTSTATUS
1712 NTAPI
1713 RtlIntegerToUnicodeString(
1714 _In_ ULONG Value,
1715 _In_opt_ ULONG Base,
1716 _Inout_ PUNICODE_STRING String
1717 );
1718
1719 NTSYSAPI
1720 NTSTATUS
1721 NTAPI
1722 RtlCharToInteger(
1723 PCSZ String,
1724 ULONG Base,
1725 PULONG Value
1726 );
1727
1728 //
1729 // Byte Swap Functions
1730 //
1731 #ifdef NTOS_MODE_USER
1732
1733 unsigned short __cdecl _byteswap_ushort(unsigned short);
1734 unsigned long __cdecl _byteswap_ulong (unsigned long);
1735 unsigned __int64 __cdecl _byteswap_uint64(unsigned __int64);
1736 #ifdef _MSC_VER
1737 #pragma intrinsic(_byteswap_ushort)
1738 #pragma intrinsic(_byteswap_ulong)
1739 #pragma intrinsic(_byteswap_uint64)
1740 #endif // _MSC_VER
1741 #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
1742 #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
1743 #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
1744
1745 #endif // NTOS_MODE_USER
1746
1747 //
1748 // Unicode->Ansi String Functions
1749 //
1750 NTSYSAPI
1751 ULONG
1752 NTAPI
1753 RtlxUnicodeStringToAnsiSize(IN PCUNICODE_STRING UnicodeString);
1754
1755 #ifdef NTOS_MODE_USER
1756
1757 #define RtlUnicodeStringToAnsiSize(STRING) ( \
1758 NLS_MB_CODE_PAGE_TAG ? \
1759 RtlxUnicodeStringToAnsiSize(STRING) : \
1760 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
1761 )
1762
1763 #endif
1764
1765 NTSYSAPI
1766 NTSTATUS
1767 NTAPI
1768 RtlUnicodeStringToAnsiString(
1769 PANSI_STRING DestinationString,
1770 PCUNICODE_STRING SourceString,
1771 BOOLEAN AllocateDestinationString
1772 );
1773
1774 //
1775 // Unicode->OEM String Functions
1776 //
1777 NTSYSAPI
1778 NTSTATUS
1779 NTAPI
1780 RtlUpcaseUnicodeStringToOemString(
1781 POEM_STRING DestinationString,
1782 PCUNICODE_STRING SourceString,
1783 BOOLEAN AllocateDestinationString
1784 );
1785
1786 _IRQL_requires_max_(PASSIVE_LEVEL)
1787 _Must_inspect_result_
1788 //_At_(DestinationString->Buffer, _Post_bytecount_(DestinationString->Length))
1789 NTSYSAPI
1790 NTSTATUS
1791 NTAPI
1792 RtlUpcaseUnicodeStringToCountedOemString(
1793 _When_(AllocateDestinationString, _Out_ _At_(DestinationString->Buffer, __drv_allocatesMem(Mem)))
1794 _When_(!AllocateDestinationString, _Inout_)
1795 POEM_STRING DestinationString,
1796 _In_ PCUNICODE_STRING SourceString,
1797 _In_ BOOLEAN AllocateDestinationString
1798 );
1799
1800 NTSYSAPI
1801 NTSTATUS
1802 NTAPI
1803 RtlUnicodeStringToOemString(
1804 POEM_STRING DestinationString,
1805 PCUNICODE_STRING SourceString,
1806 BOOLEAN AllocateDestinationString
1807 );
1808
1809 NTSYSAPI
1810 NTSTATUS
1811 NTAPI
1812 RtlUpcaseUnicodeToOemN(
1813 PCHAR OemString,
1814 ULONG OemSize,
1815 PULONG ResultSize,
1816 PCWCH UnicodeString,
1817 ULONG UnicodeSize
1818 );
1819
1820 NTSYSAPI
1821 ULONG
1822 NTAPI
1823 RtlxUnicodeStringToOemSize(IN PCUNICODE_STRING UnicodeString);
1824
1825 #ifdef NTOS_MODE_USER
1826
1827 #define RtlUnicodeStringToOemSize(STRING) ( \
1828 NLS_MB_OEM_CODE_PAGE_TAG ? \
1829 RtlxUnicodeStringToOemSize(STRING) : \
1830 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
1831 )
1832
1833 #define RtlUnicodeStringToCountedOemSize(STRING) ( \
1834 (ULONG)(RtlUnicodeStringToOemSize(STRING) - sizeof(ANSI_NULL)) \
1835 )
1836
1837 #endif
1838
1839 NTSYSAPI
1840 NTSTATUS
1841 NTAPI
1842 RtlUnicodeToOemN(
1843 PCHAR OemString,
1844 ULONG OemSize,
1845 PULONG ResultSize,
1846 PCWCH UnicodeString,
1847 ULONG UnicodeSize
1848 );
1849
1850 //
1851 // Unicode->MultiByte String Functions
1852 //
1853 NTSYSAPI
1854 NTSTATUS
1855 NTAPI
1856 RtlUnicodeToMultiByteN(
1857 PCHAR MbString,
1858 ULONG MbSize,
1859 PULONG ResultSize,
1860 PCWCH UnicodeString,
1861 ULONG UnicodeSize
1862 );
1863
1864 NTSYSAPI
1865 NTSTATUS
1866 NTAPI
1867 RtlUpcaseUnicodeToMultiByteN(
1868 PCHAR MbString,
1869 ULONG MbSize,
1870 PULONG ResultSize,
1871 PCWCH UnicodeString,
1872 ULONG UnicodeSize
1873 );
1874
1875 NTSYSAPI
1876 NTSTATUS
1877 NTAPI
1878 RtlUnicodeToMultiByteSize(
1879 PULONG MbSize,
1880 PCWCH UnicodeString,
1881 ULONG UnicodeSize
1882 );
1883
1884 NTSYSAPI
1885 ULONG
1886 NTAPI
1887 RtlxOemStringToUnicodeSize(IN PCOEM_STRING OemString);
1888
1889 //
1890 // OEM to Unicode Functions
1891 //
1892 NTSYSAPI
1893 NTSTATUS
1894 NTAPI
1895 RtlOemStringToUnicodeString(
1896 PUNICODE_STRING DestinationString,
1897 PCOEM_STRING SourceString,
1898 BOOLEAN AllocateDestinationString
1899 );
1900
1901 _IRQL_requires_max_(PASSIVE_LEVEL)
1902 NTSYSAPI
1903 NTSTATUS
1904 NTAPI
1905 RtlOemToUnicodeN(
1906 _Out_writes_bytes_to_(MaxBytesInUnicodeString, *BytesInUnicodeString) PWCH UnicodeString,
1907 _In_ ULONG MaxBytesInUnicodeString,
1908 _Out_opt_ PULONG BytesInUnicodeString,
1909 _In_reads_bytes_(BytesInOemString) PCCH OemString,
1910 _In_ ULONG BytesInOemString
1911 );
1912
1913 #ifdef NTOS_MODE_USER
1914
1915 #define RtlOemStringToUnicodeSize(STRING) ( \
1916 NLS_MB_OEM_CODE_PAGE_TAG ? \
1917 RtlxOemStringToUnicodeSize(STRING) : \
1918 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
1919 )
1920
1921 #define RtlOemStringToCountedUnicodeSize(STRING) ( \
1922 (ULONG)(RtlOemStringToUnicodeSize(STRING) - sizeof(UNICODE_NULL)) \
1923 )
1924
1925 #endif
1926
1927 //
1928 // Ansi->Unicode String Functions
1929 //
1930 NTSYSAPI
1931 ULONG
1932 NTAPI
1933 RtlxAnsiStringToUnicodeSize(
1934 PCANSI_STRING AnsiString
1935 );
1936
1937 NTSYSAPI
1938 NTSTATUS
1939 NTAPI
1940 RtlAnsiStringToUnicodeString(
1941 PUNICODE_STRING DestinationString,
1942 PCANSI_STRING SourceString,
1943 BOOLEAN AllocateDestinationString
1944 );
1945
1946 #ifdef NTOS_MODE_USER
1947
1948 #define RtlAnsiStringToUnicodeSize(STRING) ( \
1949 NLS_MB_CODE_PAGE_TAG ? \
1950 RtlxAnsiStringToUnicodeSize(STRING) : \
1951 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
1952 )
1953
1954 #endif
1955
1956 NTSYSAPI
1957 BOOLEAN
1958 NTAPI
1959 RtlCreateUnicodeStringFromAsciiz(
1960 _Out_ PUNICODE_STRING Destination,
1961 _In_ PCSZ Source
1962 );
1963
1964 //
1965 // Unicode String Functions
1966 //
1967 NTSYSAPI
1968 NTSTATUS
1969 NTAPI
1970 RtlAppendUnicodeToString(
1971 PUNICODE_STRING Destination,
1972 PCWSTR Source
1973 );
1974
1975 NTSYSAPI
1976 NTSTATUS
1977 NTAPI
1978 RtlAppendUnicodeStringToString(
1979 PUNICODE_STRING Destination,
1980 PCUNICODE_STRING Source
1981 );
1982
1983 NTSYSAPI
1984 LONG
1985 NTAPI
1986 RtlCompareUnicodeString(
1987 PCUNICODE_STRING String1,
1988 PCUNICODE_STRING String2,
1989 BOOLEAN CaseInsensitive
1990 );
1991
1992 NTSYSAPI
1993 VOID
1994 NTAPI
1995 RtlCopyUnicodeString(
1996 PUNICODE_STRING DestinationString,
1997 PCUNICODE_STRING SourceString
1998 );
1999
2000 NTSYSAPI
2001 BOOLEAN
2002 NTAPI
2003 RtlCreateUnicodeString(
2004 PUNICODE_STRING DestinationString,
2005 PCWSTR SourceString
2006 );
2007
2008 #ifdef NTOS_MODE_USER
2009
2010 NTSYSAPI
2011 NTSTATUS
2012 NTAPI
2013 RtlDowncaseUnicodeString(
2014 _Inout_ PUNICODE_STRING UniDest,
2015 _In_ PCUNICODE_STRING UniSource,
2016 _In_ BOOLEAN AllocateDestinationString
2017 );
2018
2019 NTSYSAPI
2020 NTSTATUS
2021 NTAPI
2022 RtlDuplicateUnicodeString(
2023 _In_ ULONG Flags,
2024 _In_ PCUNICODE_STRING SourceString,
2025 _Out_ PUNICODE_STRING DestinationString
2026 );
2027
2028 //
2029 // Memory Functions
2030 //
2031 NTSYSAPI
2032 VOID
2033 NTAPI
2034 RtlFillMemoryUlong(
2035 _In_ PVOID Destination,
2036 _In_ SIZE_T Length,
2037 _In_ ULONG Fill
2038 );
2039
2040 NTSYSAPI
2041 VOID
2042 NTAPI
2043 RtlFillMemoryUlonglong(
2044 _Out_ PVOID Destination,
2045 _In_ SIZE_T Length,
2046 _In_ ULONGLONG Pattern
2047 );
2048
2049 NTSYSAPI
2050 NTSTATUS
2051 NTAPI
2052 RtlCopyMappedMemory(
2053 _Out_writes_bytes_all_(Size) PVOID Destination,
2054 _In_reads_bytes_(Size) const VOID *Source,
2055 _In_ SIZE_T Size
2056 );
2057
2058 NTSYSAPI
2059 SIZE_T
2060 NTAPI
2061 RtlCompareMemoryUlong(
2062 _In_ PVOID Source,
2063 _In_ SIZE_T Length,
2064 _In_ ULONG Pattern
2065 );
2066
2067 #ifndef RtlEqualMemory
2068 #define RtlEqualMemory(Destination, Source, Length) \
2069 (!memcmp(Destination, Source, Length))
2070 #endif
2071
2072 #define RtlCopyBytes RtlCopyMemory
2073 #define RtlFillBytes RtlFillMemory
2074 #define RtlZeroBytes RtlZeroMemory
2075
2076 #endif
2077
2078 NTSYSAPI
2079 BOOLEAN
2080 NTAPI
2081 RtlEqualUnicodeString(
2082 PCUNICODE_STRING String1,
2083 PCUNICODE_STRING String2,
2084 BOOLEAN CaseInsensitive
2085 );
2086
2087 NTSYSAPI
2088 NTSTATUS
2089 NTAPI
2090 RtlFindCharInUnicodeString(
2091 _In_ ULONG Flags,
2092 _In_ PCUNICODE_STRING SearchString,
2093 _In_ PCUNICODE_STRING MatchString,
2094 _Out_ PUSHORT Position
2095 );
2096
2097 _IRQL_requires_max_(PASSIVE_LEVEL)
2098 NTSYSAPI
2099 VOID
2100 NTAPI
2101 RtlFreeUnicodeString(
2102 _Inout_ _At_(UnicodeString->Buffer, __drv_freesMem(Mem))
2103 PUNICODE_STRING UnicodeString
2104 );
2105
2106 NTSYSAPI
2107 VOID
2108 NTAPI
2109 RtlEraseUnicodeString(
2110 _Inout_ PUNICODE_STRING String
2111 );
2112
2113 NTSYSAPI
2114 NTSTATUS
2115 NTAPI
2116 RtlHashUnicodeString(
2117 _In_ CONST UNICODE_STRING *String,
2118 _In_ BOOLEAN CaseInSensitive,
2119 _In_ ULONG HashAlgorithm,
2120 _Out_ PULONG HashValue
2121 );
2122
2123 _IRQL_requires_max_(DISPATCH_LEVEL)
2124 _At_(DestinationString->Buffer, _Post_equal_to_(SourceString))
2125 _When_(SourceString != NULL,
2126 _At_(DestinationString->Length, _Post_equal_to_(_String_length_(SourceString) * sizeof(WCHAR)))
2127 _At_(DestinationString->MaximumLength, _Post_equal_to_(DestinationString->Length + sizeof(WCHAR))))
2128 _When_(SourceString == NULL,
2129 _At_(DestinationString->Length, _Post_equal_to_(0))
2130 _At_(DestinationString->MaximumLength, _Post_equal_to_(0)))
2131 NTSYSAPI
2132 VOID
2133 NTAPI
2134 RtlInitUnicodeString(
2135 _Out_ PUNICODE_STRING DestinationString,
2136 _In_opt_z_ __drv_aliasesMem PCWSTR SourceString
2137 );
2138
2139 _IRQL_requires_max_(DISPATCH_LEVEL)
2140 NTSYSAPI
2141 NTSTATUS
2142 NTAPI
2143 RtlInitUnicodeStringEx(
2144 _Out_ PUNICODE_STRING DestinationString,
2145 _In_opt_z_ __drv_aliasesMem PCWSTR SourceString
2146 );
2147
2148 NTSYSAPI
2149 BOOLEAN
2150 NTAPI
2151 RtlIsTextUnicode(
2152 PVOID Buffer,
2153 INT Length,
2154 INT *Flags
2155 );
2156
2157 _IRQL_requires_max_(PASSIVE_LEVEL)
2158 _Must_inspect_result_
2159 NTSYSAPI
2160 BOOLEAN
2161 NTAPI
2162 RtlPrefixString(
2163 _In_ const STRING *String1,
2164 _In_ const STRING *String2,
2165 _In_ BOOLEAN CaseInsensitive
2166 );
2167
2168 _IRQL_requires_max_(PASSIVE_LEVEL)
2169 _Must_inspect_result_
2170 NTSYSAPI
2171 BOOLEAN
2172 NTAPI
2173 RtlPrefixUnicodeString(
2174 _In_ PCUNICODE_STRING String1,
2175 _In_ PCUNICODE_STRING String2,
2176 _In_ BOOLEAN CaseInsensitive
2177 );
2178
2179 _IRQL_requires_max_(PASSIVE_LEVEL)
2180 NTSYSAPI
2181 VOID
2182 NTAPI
2183 RtlUpperString(
2184 _Inout_ PSTRING DestinationString,
2185 _In_ const STRING *SourceString
2186 );
2187
2188 _IRQL_requires_max_(PASSIVE_LEVEL)
2189 _Must_inspect_result_
2190 NTSYSAPI
2191 LONG
2192 NTAPI
2193 RtlCompareString(
2194 _In_ const STRING *String1,
2195 _In_ const STRING *String2,
2196 _In_ BOOLEAN CaseInSensitive
2197 );
2198
2199 NTSYSAPI
2200 VOID
2201 NTAPI
2202 RtlCopyString(
2203 _Out_ PSTRING DestinationString,
2204 _In_opt_ const STRING *SourceString
2205 );
2206
2207 _IRQL_requires_max_(PASSIVE_LEVEL)
2208 _Must_inspect_result_
2209 NTSYSAPI
2210 BOOLEAN
2211 NTAPI
2212 RtlEqualString(
2213 _In_ const STRING *String1,
2214 _In_ const STRING *String2,
2215 _In_ BOOLEAN CaseInSensitive
2216 );
2217
2218 _IRQL_requires_max_(APC_LEVEL)
2219 NTSYSAPI
2220 NTSTATUS
2221 NTAPI
2222 RtlAppendStringToString(
2223 _Inout_ PSTRING Destination,
2224 _In_ const STRING *Source
2225 );
2226
2227 _IRQL_requires_max_(PASSIVE_LEVEL)
2228 _When_(AllocateDestinationString, _Must_inspect_result_)
2229 NTSYSAPI
2230 NTSTATUS
2231 NTAPI
2232 RtlUpcaseUnicodeString(
2233 _When_(AllocateDestinationString, _Out_ _At_(DestinationString->Buffer, __drv_allocatesMem(Mem)))
2234 _When_(!AllocateDestinationString, _Inout_)
2235 PUNICODE_STRING DestinationString,
2236 _In_ PCUNICODE_STRING SourceString,
2237 _In_ BOOLEAN AllocateDestinationString
2238 );
2239
2240 _IRQL_requires_max_(PASSIVE_LEVEL)
2241 NTSYSAPI
2242 NTSTATUS
2243 NTAPI
2244 RtlUnicodeStringToInteger(
2245 _In_ PCUNICODE_STRING String,
2246 _In_opt_ ULONG Base,
2247 _Out_ PULONG Value
2248 );
2249
2250 NTSYSAPI
2251 NTSTATUS
2252 NTAPI
2253 RtlValidateUnicodeString(
2254 _In_ ULONG Flags,
2255 _In_ PCUNICODE_STRING String
2256 );
2257
2258 //
2259 // Ansi String Functions
2260 //
2261 _IRQL_requires_max_(PASSIVE_LEVEL)
2262 NTSYSAPI
2263 VOID
2264 NTAPI
2265 RtlFreeAnsiString(
2266 _Inout_ _At_(AnsiString->Buffer, __drv_freesMem(Mem))
2267 PANSI_STRING AnsiString
2268 );
2269
2270 _IRQL_requires_max_(DISPATCH_LEVEL)
2271 NTSYSAPI
2272 VOID
2273 NTAPI
2274 RtlInitAnsiString(
2275 _Out_ PANSI_STRING DestinationString,
2276 _In_opt_z_ __drv_aliasesMem PCSZ SourceString
2277 );
2278
2279 _IRQL_requires_max_(DISPATCH_LEVEL)
2280 NTSYSAPI
2281 NTSTATUS
2282 NTAPI
2283 RtlInitAnsiStringEx(
2284 _Out_ PANSI_STRING DestinationString,
2285 _In_opt_z_ __drv_aliasesMem PCSZ SourceString
2286 );
2287
2288 //
2289 // OEM String Functions
2290 //
2291 _IRQL_requires_max_(PASSIVE_LEVEL)
2292 NTSYSAPI
2293 VOID
2294 NTAPI
2295 RtlFreeOemString(
2296 _Inout_ _At_(OemString->Buffer, __drv_freesMem(Mem))
2297 POEM_STRING OemString
2298 );
2299
2300 //
2301 // MultiByte->Unicode String Functions
2302 //
2303 _IRQL_requires_max_(PASSIVE_LEVEL)
2304 NTSYSAPI
2305 NTSTATUS
2306 NTAPI
2307 RtlMultiByteToUnicodeN(
2308 _Out_writes_bytes_to_(MaxBytesInUnicodeString, *BytesInUnicodeString) PWCH UnicodeString,
2309 _In_ ULONG MaxBytesInUnicodeString,
2310 _Out_opt_ PULONG BytesInUnicodeString,
2311 _In_reads_bytes_(BytesInMultiByteString) const CHAR *MultiByteString,
2312 _In_ ULONG BytesInMultiByteString
2313 );
2314
2315 _IRQL_requires_max_(PASSIVE_LEVEL)
2316 NTSYSAPI
2317 NTSTATUS
2318 NTAPI
2319 RtlMultiByteToUnicodeSize(
2320 _Out_ PULONG BytesInUnicodeString,
2321 _In_reads_bytes_(BytesInMultiByteString) const CHAR *MultiByteString,
2322 _In_ ULONG BytesInMultiByteString
2323 );
2324
2325 //
2326 // Atom Functions
2327 //
2328 NTSYSAPI
2329 NTSTATUS
2330 NTAPI
2331 RtlAddAtomToAtomTable(
2332 _In_ PRTL_ATOM_TABLE AtomTable,
2333 _In_ PWSTR AtomName,
2334 _Out_ PRTL_ATOM Atom
2335 );
2336
2337 NTSYSAPI
2338 NTSTATUS
2339 NTAPI
2340 RtlCreateAtomTable(
2341 _In_ ULONG TableSize,
2342 _Inout_ PRTL_ATOM_TABLE *AtomTable
2343 );
2344
2345 NTSYSAPI
2346 NTSTATUS
2347 NTAPI
2348 RtlDeleteAtomFromAtomTable(
2349 _In_ PRTL_ATOM_TABLE AtomTable,
2350 _In_ RTL_ATOM Atom
2351 );
2352
2353 NTSYSAPI
2354 NTSTATUS
2355 NTAPI
2356 RtlDestroyAtomTable(IN PRTL_ATOM_TABLE AtomTable);
2357
2358 NTSYSAPI
2359 NTSTATUS
2360 NTAPI
2361 RtlQueryAtomInAtomTable(
2362 _In_ PRTL_ATOM_TABLE AtomTable,
2363 _In_ RTL_ATOM Atom,
2364 _Out_opt_ PULONG RefCount,
2365 _Out_opt_ PULONG PinCount,
2366 _Out_opt_z_bytecap_(*NameLength) PWSTR AtomName,
2367 _Inout_opt_ PULONG NameLength
2368 );
2369
2370 NTSYSAPI
2371 NTSTATUS
2372 NTAPI
2373 RtlPinAtomInAtomTable(
2374 _In_ PRTL_ATOM_TABLE AtomTable,
2375 _In_ RTL_ATOM Atom
2376 );
2377
2378 NTSYSAPI
2379 NTSTATUS
2380 NTAPI
2381 RtlLookupAtomInAtomTable(
2382 _In_ PRTL_ATOM_TABLE AtomTable,
2383 _In_ PWSTR AtomName,
2384 _Out_ PRTL_ATOM Atom
2385 );
2386
2387 //
2388 // Process Management Functions
2389 //
2390 NTSYSAPI
2391 PPEB
2392 NTAPI
2393 RtlGetCurrentPeb(
2394 VOID
2395 );
2396
2397 NTSYSAPI
2398 VOID
2399 NTAPI
2400 RtlAcquirePebLock(VOID);
2401
2402 NTSYSAPI
2403 NTSTATUS
2404 NTAPI
2405 RtlCreateProcessParameters (
2406 _Out_ PRTL_USER_PROCESS_PARAMETERS *ProcessParameters,
2407 _In_ PUNICODE_STRING ImagePathName,
2408 _In_opt_ PUNICODE_STRING DllPath,
2409 _In_opt_ PUNICODE_STRING CurrentDirectory,
2410 _In_opt_ PUNICODE_STRING CommandLine,
2411 _In_opt_ PWSTR Environment,
2412 _In_opt_ PUNICODE_STRING WindowTitle,
2413 _In_opt_ PUNICODE_STRING DesktopInfo,
2414 _In_opt_ PUNICODE_STRING ShellInfo,
2415 _In_opt_ PUNICODE_STRING RuntimeInfo
2416 );
2417
2418 NTSYSAPI
2419 NTSTATUS
2420 NTAPI
2421 RtlCreateUserProcess(
2422 _In_ PUNICODE_STRING ImageFileName,
2423 _In_ ULONG Attributes,
2424 _In_ PRTL_USER_PROCESS_PARAMETERS ProcessParameters,
2425 _In_opt_ PSECURITY_DESCRIPTOR ProcessSecutityDescriptor,
2426 _In_opt_ PSECURITY_DESCRIPTOR ThreadSecurityDescriptor,
2427 _In_opt_ HANDLE ParentProcess,
2428 _In_ BOOLEAN CurrentDirectory,
2429 _In_opt_ HANDLE DebugPort,
2430 _In_opt_ HANDLE ExceptionPort,
2431 _Out_ PRTL_USER_PROCESS_INFORMATION ProcessInfo
2432 );
2433
2434 #if (NTDDI_VERSION >= NTDDI_WIN7)
2435 NTSYSAPI
2436 NTSTATUS
2437 NTAPI
2438 RtlCreateUserThread(
2439 _In_ PVOID ThreadContext,
2440 _Out_ HANDLE *OutThreadHandle,
2441 _Reserved_ PVOID Reserved1,
2442 _Reserved_ PVOID Reserved2,
2443 _Reserved_ PVOID Reserved3,
2444 _Reserved_ PVOID Reserved4,
2445 _Reserved_ PVOID Reserved5,
2446 _Reserved_ PVOID Reserved6,
2447 _Reserved_ PVOID Reserved7,
2448 _Reserved_ PVOID Reserved8
2449 );
2450 #else
2451 NTSYSAPI
2452 NTSTATUS
2453 NTAPI
2454 RtlCreateUserThread(
2455 _In_ HANDLE ProcessHandle,
2456 _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor,
2457 _In_ BOOLEAN CreateSuspended,
2458 _In_ ULONG StackZeroBits,
2459 _In_ SIZE_T StackReserve,
2460 _In_ SIZE_T StackCommit,
2461 _In_ PTHREAD_START_ROUTINE StartAddress,
2462 _In_ PVOID Parameter,
2463 _Out_opt_ PHANDLE ThreadHandle,
2464 _Out_opt_ PCLIENT_ID ClientId
2465 );
2466 #endif
2467
2468 NTSYSAPI
2469 PRTL_USER_PROCESS_PARAMETERS
2470 NTAPI
2471 RtlDeNormalizeProcessParams(
2472 _In_ PRTL_USER_PROCESS_PARAMETERS ProcessParameters);
2473
2474 NTSYSAPI
2475 NTSTATUS
2476 NTAPI
2477 RtlDestroyProcessParameters(
2478 _In_ PRTL_USER_PROCESS_PARAMETERS ProcessParameters);
2479
2480 NTSYSAPI
2481 VOID
2482 NTAPI
2483 RtlExitUserThread(
2484 _In_ NTSTATUS Status);
2485
2486 NTSYSAPI
2487 VOID
2488 NTAPI
2489 RtlInitializeContext(
2490 _In_ HANDLE ProcessHandle,
2491 _Out_ PCONTEXT ThreadContext,
2492 _In_opt_ PVOID ThreadStartParam,
2493 _In_ PTHREAD_START_ROUTINE ThreadStartAddress,
2494 _In_ PINITIAL_TEB InitialTeb
2495 );
2496
2497 #ifdef _M_AMD64
2498 typedef struct _WOW64_CONTEXT *PWOW64_CONTEXT;
2499
2500 NTSYSAPI
2501 NTSTATUS
2502 NTAPI
2503 RtlWow64GetThreadContext(
2504 _In_ HANDLE ThreadHandle,
2505 _Inout_ PWOW64_CONTEXT ThreadContext
2506 );
2507
2508
2509 NTSYSAPI
2510 NTSTATUS
2511 NTAPI
2512 RtlWow64SetThreadContext(
2513 _In_ HANDLE ThreadHandle,
2514 _In_ PWOW64_CONTEXT ThreadContext
2515 );
2516 #endif
2517
2518 NTSYSAPI
2519 BOOLEAN
2520 NTAPI
2521 RtlIsThreadWithinLoaderCallout(VOID);
2522
2523 NTSYSAPI
2524 PRTL_USER_PROCESS_PARAMETERS
2525 NTAPI
2526 RtlNormalizeProcessParams(
2527 _In_ PRTL_USER_PROCESS_PARAMETERS ProcessParameters);
2528
2529 NTSYSAPI
2530 VOID
2531 NTAPI
2532 RtlReleasePebLock(VOID);
2533
2534 NTSYSAPI
2535 NTSTATUS
2536 NTAPI
2537 RtlRemoteCall(
2538 _In_ HANDLE Process,
2539 _In_ HANDLE Thread,
2540 _In_ PVOID CallSite,
2541 _In_ ULONG ArgumentCount,
2542 _In_ PULONG Arguments,
2543 _In_ BOOLEAN PassContext,
2544 _In_ BOOLEAN AlreadySuspended
2545 );
2546
2547 NTSYSAPI
2548 NTSTATUS
2549 __cdecl
2550 RtlSetProcessIsCritical(
2551 _In_ BOOLEAN NewValue,
2552 _Out_opt_ PBOOLEAN OldValue,
2553 _In_ BOOLEAN NeedBreaks
2554 );
2555
2556 NTSYSAPI
2557 NTSTATUS
2558 __cdecl
2559 RtlSetThreadIsCritical(
2560 _In_ BOOLEAN NewValue,
2561 _Out_opt_ PBOOLEAN OldValue,
2562 _In_ BOOLEAN NeedBreaks
2563 );
2564
2565 NTSYSAPI
2566 ULONG
2567 NTAPI
2568 RtlGetCurrentProcessorNumber(
2569 VOID
2570 );
2571
2572 #define NtCurrentPeb() (NtCurrentTeb()->ProcessEnvironmentBlock)
2573
2574 //
2575 // Thread Pool Functions
2576 //
2577 //
2578 NTSTATUS
2579 NTAPI
2580 RtlSetThreadPoolStartFunc(
2581 _In_ PRTL_START_POOL_THREAD StartPoolThread,
2582 _In_ PRTL_EXIT_POOL_THREAD ExitPoolThread
2583 );
2584
2585 NTSYSAPI
2586 NTSTATUS
2587 NTAPI
2588 RtlDeregisterWaitEx(
2589 _In_ HANDLE hWaitHandle,
2590 _In_opt_ HANDLE hCompletionEvent
2591 );
2592
2593 NTSYSAPI
2594 NTSTATUS
2595 NTAPI
2596 RtlDeregisterWait(
2597 _In_ HANDLE hWaitHandle
2598 );
2599
2600 NTSYSAPI
2601 NTSTATUS
2602 NTAPI
2603 RtlQueueWorkItem(
2604 _In_ WORKERCALLBACKFUNC Function,
2605 _In_opt_ PVOID Context,
2606 _In_ ULONG Flags
2607 );
2608
2609 NTSYSAPI
2610 NTSTATUS
2611 NTAPI
2612 RtlSetIoCompletionCallback(
2613 _In_ HANDLE FileHandle,
2614 _In_ PIO_APC_ROUTINE Callback,
2615 _In_ ULONG Flags
2616 );
2617
2618 NTSYSAPI
2619 NTSTATUS
2620 NTAPI
2621 RtlRegisterWait(
2622 _In_ PHANDLE phNewWaitObject,
2623 _In_ HANDLE hObject,
2624 _In_ WAITORTIMERCALLBACKFUNC Callback,
2625 _In_ PVOID pvContext,
2626 _In_ ULONG ulMilliseconds,
2627 _In_ ULONG ulFlags
2628 );
2629
2630 //
2631 // Environment/Path Functions
2632 //
2633 NTSYSAPI
2634 NTSTATUS
2635 NTAPI
2636 RtlCreateEnvironment(
2637 _In_ BOOLEAN Inherit,
2638 _Out_ PWSTR *Environment
2639 );
2640
2641 NTSYSAPI
2642 NTSTATUS
2643 NTAPI
2644 RtlComputePrivatizedDllName_U(
2645 _In_ PUNICODE_STRING DllName,
2646 _Out_ PUNICODE_STRING RealName,
2647 _Out_ PUNICODE_STRING LocalName
2648 );
2649
2650 NTSYSAPI
2651 VOID
2652 NTAPI
2653 RtlDestroyEnvironment(
2654 _In_ PWSTR Environment
2655 );
2656
2657 NTSYSAPI
2658 BOOLEAN
2659 NTAPI
2660 RtlDoesFileExists_U(
2661 _In_ PCWSTR FileName
2662 );
2663
2664 NTSYSAPI
2665 RTL_PATH_TYPE
2666 NTAPI
2667 RtlDetermineDosPathNameType_U(
2668 _In_ PCWSTR Path
2669 );
2670
2671 NTSYSAPI
2672 ULONG
2673 NTAPI
2674 RtlDosSearchPath_U(
2675 _In_ PCWSTR Path,
2676 _In_ PCWSTR FileName,
2677 _In_ PCWSTR Extension,
2678 _In_ ULONG BufferSize,
2679 _Out_ PWSTR Buffer,
2680 _Out_ PWSTR *PartName
2681 );
2682
2683 NTSYSAPI
2684 NTSTATUS
2685 NTAPI
2686 RtlDosSearchPath_Ustr(
2687 _In_ ULONG Flags,
2688 _In_ PUNICODE_STRING PathString,
2689 _In_ PUNICODE_STRING FileNameString,
2690 _In_ PUNICODE_STRING ExtensionString,
2691 _In_ PUNICODE_STRING CallerBuffer,
2692 _Inout_opt_ PUNICODE_STRING DynamicString,
2693 _Out_opt_ PUNICODE_STRING* FullNameOut,
2694 _Out_opt_ PSIZE_T FilePartSize,
2695 _Out_opt_ PSIZE_T LengthNeeded
2696 );
2697
2698 NTSYSAPI
2699 BOOLEAN
2700 NTAPI
2701 RtlDosPathNameToNtPathName_U(
2702 _In_opt_z_ PCWSTR DosPathName,
2703 _Out_ PUNICODE_STRING NtPathName,
2704 _Out_opt_ PCWSTR *NtFileNamePart,
2705 _Out_opt_ PRTL_RELATIVE_NAME_U DirectoryInfo
2706 );
2707
2708 NTSYSAPI
2709 BOOLEAN
2710 NTAPI
2711 RtlDosPathNameToRelativeNtPathName_U(
2712 _In_ PCWSTR DosName,
2713 _Out_ PUNICODE_STRING NtName,
2714 _Out_ PCWSTR *PartName,
2715 _Out_ PRTL_RELATIVE_NAME_U RelativeName
2716 );
2717
2718 _At_(Destination->Buffer, _Out_bytecap_(Destination->MaximumLength))
2719 NTSYSAPI
2720 NTSTATUS
2721 NTAPI
2722 RtlExpandEnvironmentStrings_U(
2723 _In_z_ PWSTR Environment,
2724 _In_ PUNICODE_STRING Source,
2725 _Inout_ PUNICODE_STRING Destination,
2726 _Out_ PULONG Length
2727 );
2728
2729 NTSYSAPI
2730 ULONG
2731 NTAPI
2732 RtlGetCurrentDirectory_U(
2733 _In_ ULONG MaximumLength,
2734 _Out_bytecap_(MaximumLength) PWSTR Buffer
2735 );
2736
2737 NTSYSAPI
2738 ULONG
2739 NTAPI
2740 RtlGetFullPathName_U(
2741 _In_ PCWSTR FileName,
2742 _In_ ULONG Size,
2743 _Out_z_bytecap_(Size) PWSTR Buffer,
2744 _Out_opt_ PWSTR *ShortName
2745 );
2746
2747 #if (NTDDI_VERSION >= NTDDI_WIN7)
2748 NTSYSAPI
2749 NTSTATUS
2750 NTAPI
2751 RtlGetFullPathName_UEx(
2752 _In_ PWSTR FileName,
2753 _In_ ULONG BufferLength,
2754 _Out_ PWSTR Buffer,
2755 _Out_opt_ PWSTR *FilePart,
2756 _Out_opt_ RTL_PATH_TYPE *InputPathType
2757 );
2758 #endif
2759
2760 NTSTATUS
2761 NTAPI
2762 RtlGetFullPathName_UstrEx(
2763 _In_ PUNICODE_STRING FileName,
2764 _In_opt_ PUNICODE_STRING StaticString,
2765 _In_opt_ PUNICODE_STRING DynamicString,
2766 _Out_opt_ PUNICODE_STRING *StringUsed,
2767 _Out_opt_ PSIZE_T FilePartSize,
2768 _Out_opt_ PBOOLEAN NameInvalid,
2769 _Out_ RTL_PATH_TYPE* PathType,
2770 _Out_opt_ PSIZE_T LengthNeeded
2771 );
2772
2773 NTSYSAPI
2774 NTSTATUS
2775 NTAPI
2776 RtlGetLengthWithoutTrailingPathSeperators(
2777 _Reserved_ ULONG Flags,
2778 _In_ PCUNICODE_STRING PathString,
2779 _Out_ PULONG Length
2780 );
2781
2782 NTSYSAPI
2783 ULONG
2784 NTAPI
2785 RtlGetLongestNtPathLength(
2786 VOID
2787 );
2788
2789 NTSYSAPI
2790 ULONG
2791 NTAPI
2792 RtlIsDosDeviceName_U(
2793 _In_ PCWSTR Name
2794 );
2795
2796 NTSYSAPI
2797 ULONG
2798 NTAPI
2799 RtlIsDosDeviceName_Ustr(
2800 _In_ PCUNICODE_STRING Name
2801 );
2802
2803 _IRQL_requires_max_(PASSIVE_LEVEL)
2804 _Must_inspect_result_
2805 NTSYSAPI
2806 BOOLEAN
2807 NTAPI
2808 RtlIsNameLegalDOS8Dot3(
2809 _In_ PCUNICODE_STRING Name,
2810 _Inout_opt_ POEM_STRING OemName,
2811 _Out_opt_ PBOOLEAN NameContainsSpaces
2812 );
2813
2814 NTSYSAPI
2815 NTSTATUS
2816 NTAPI
2817 RtlQueryEnvironmentVariable_U(
2818 _In_opt_ PWSTR Environment,
2819 _In_ PUNICODE_STRING Name,
2820 _Out_ PUNICODE_STRING Value
2821 );
2822
2823 VOID
2824 NTAPI
2825 RtlReleaseRelativeName(
2826 _In_ PRTL_RELATIVE_NAME_U RelativeName
2827 );
2828
2829 NTSYSAPI
2830 NTSTATUS
2831 NTAPI
2832 RtlSetCurrentDirectory_U(
2833 _In_ PUNICODE_STRING name
2834 );
2835
2836 NTSYSAPI
2837 NTSTATUS
2838 NTAPI
2839 RtlSetEnvironmentVariable(
2840 _In_z_ PWSTR *Environment,
2841 _In_ PUNICODE_STRING Name,
2842 _In_ PUNICODE_STRING Value
2843 );
2844
2845 //
2846 // Critical Section/Resource Functions
2847 //
2848 NTSYSAPI
2849 NTSTATUS
2850 NTAPI
2851 RtlDeleteCriticalSection (
2852 _In_ PRTL_CRITICAL_SECTION CriticalSection
2853 );
2854
2855 NTSYSAPI
2856 NTSTATUS
2857 NTAPI
2858 RtlEnterCriticalSection(
2859 _In_ PRTL_CRITICAL_SECTION CriticalSection
2860 );
2861
2862 NTSYSAPI
2863 NTSTATUS
2864 NTAPI
2865 RtlInitializeCriticalSection(
2866 _In_ PRTL_CRITICAL_SECTION CriticalSection
2867 );
2868
2869 NTSYSAPI
2870 NTSTATUS
2871 NTAPI
2872 RtlInitializeCriticalSectionAndSpinCount(
2873 _In_ PRTL_CRITICAL_SECTION CriticalSection,
2874 _In_ ULONG SpinCount
2875 );
2876
2877 NTSYSAPI
2878 NTSTATUS
2879 NTAPI
2880 RtlLeaveCriticalSection(
2881 _In_ PRTL_CRITICAL_SECTION CriticalSection
2882 );
2883
2884 NTSYSAPI
2885 BOOLEAN
2886 NTAPI
2887 RtlTryEnterCriticalSection(
2888 _In_ PRTL_CRITICAL_SECTION CriticalSection
2889 );
2890
2891 NTSYSAPI
2892 VOID
2893 NTAPI
2894 RtlpUnWaitCriticalSection(
2895 _In_ PRTL_CRITICAL_SECTION CriticalSection
2896 );
2897
2898 NTSYSAPI
2899 NTSTATUS
2900 NTAPI
2901 RtlpWaitForCriticalSection(
2902 _In_ PRTL_CRITICAL_SECTION CriticalSection
2903 );
2904
2905 NTSYSAPI
2906 BOOLEAN
2907 NTAPI
2908 RtlAcquireResourceExclusive(
2909 _In_ PRTL_RESOURCE Resource,
2910 _In_ BOOLEAN Wait
2911 );
2912
2913 NTSYSAPI
2914 BOOLEAN
2915 NTAPI
2916 RtlAcquireResourceShared(
2917 _In_ PRTL_RESOURCE Resource,
2918 _In_ BOOLEAN Wait
2919 );
2920
2921 NTSYSAPI
2922 VOID
2923 NTAPI
2924 RtlConvertExclusiveToShared(
2925 _In_ PRTL_RESOURCE Resource
2926 );
2927
2928 NTSYSAPI
2929 VOID
2930 NTAPI
2931 RtlConvertSharedToExclusive(
2932 _In_ PRTL_RESOURCE Resource
2933 );
2934
2935 NTSYSAPI
2936 VOID
2937 NTAPI
2938 RtlDeleteResource(
2939 _In_ PRTL_RESOURCE Resource
2940 );
2941
2942 NTSYSAPI
2943 VOID
2944 NTAPI
2945 RtlDumpResource(
2946 _In_ PRTL_RESOURCE Resource
2947 );
2948
2949 NTSYSAPI
2950 VOID
2951 NTAPI
2952 RtlInitializeResource(
2953 _In_ PRTL_RESOURCE Resource
2954 );
2955
2956 NTSYSAPI
2957 VOID
2958 NTAPI
2959 RtlReleaseResource(
2960 _In_ PRTL_RESOURCE Resource
2961 );
2962
2963 //
2964 // Compression Functions
2965 //
2966 NTSYSAPI //NT_RTL_COMPRESS_API
2967 NTSTATUS
2968 NTAPI
2969 RtlCompressBuffer(
2970 _In_ USHORT CompressionFormatAndEngine,
2971 _In_reads_bytes_(UncompressedBufferSize) PUCHAR UncompressedBuffer,
2972 _In_ ULONG UncompressedBufferSize,
2973 _Out_writes_bytes_to_(CompressedBufferSize, *FinalCompressedSize) PUCHAR CompressedBuffer,
2974 _In_ ULONG CompressedBufferSize,
2975 _In_ ULONG UncompressedChunkSize,
2976 _Out_ PULONG FinalCompressedSize,
2977 _In_ PVOID WorkSpace
2978 );
2979
2980 _IRQL_requires_max_(APC_LEVEL)
2981 NTSYSAPI //NT_RTL_COMPRESS_API
2982 NTSTATUS
2983 NTAPI
2984 RtlDecompressBuffer(
2985 _In_ USHORT CompressionFormat,
2986 _Out_writes_bytes_to_(UncompressedBufferSize, *FinalUncompressedSize) PUCHAR UncompressedBuffer,
2987 _In_ ULONG UncompressedBufferSize,
2988 _In_reads_bytes_(CompressedBufferSize) PUCHAR CompressedBuffer,
2989 _In_ ULONG CompressedBufferSize,
2990 _Out_ PULONG FinalUncompressedSize
2991 );
2992
2993 NTSYSAPI
2994 NTSTATUS
2995 NTAPI
2996 RtlGetCompressionWorkSpaceSize(
2997 _In_ USHORT CompressionFormatAndEngine,
2998 _Out_ PULONG CompressBufferWorkSpaceSize,
2999 _Out_ PULONG CompressFragmentWorkSpaceSize
3000 );
3001
3002 //
3003 // Debug Info Functions
3004 //
3005 NTSYSAPI
3006 PRTL_DEBUG_INFORMATION
3007 NTAPI
3008 RtlCreateQueryDebugBuffer(
3009 _In_ ULONG Size,
3010 _In_ BOOLEAN EventPair
3011 );
3012
3013 NTSYSAPI
3014 NTSTATUS
3015 NTAPI
3016 RtlDestroyQueryDebugBuffer(IN PRTL_DEBUG_INFORMATION DebugBuffer);
3017
3018 NTSYSAPI
3019 NTSTATUS
3020 NTAPI
3021 RtlQueryProcessDebugInformation(
3022 _In_ ULONG ProcessId,
3023 _In_ ULONG DebugInfoClassMask,
3024 _Inout_ PRTL_DEBUG_INFORMATION DebugBuffer
3025 );
3026
3027 //
3028 // Bitmap Functions
3029 //
3030 NTSYSAPI
3031 BOOLEAN
3032 NTAPI
3033 RtlAreBitsClear(
3034 _In_ PRTL_BITMAP BitMapHeader,
3035 _In_ ULONG StartingIndex,
3036 _In_ ULONG Length
3037 );
3038
3039 NTSYSAPI
3040 BOOLEAN
3041 NTAPI
3042 RtlAreBitsSet(
3043 _In_ PRTL_BITMAP BitMapHeader,
3044 _In_ ULONG StartingIndex,
3045 _In_ ULONG Length
3046 );
3047
3048 NTSYSAPI
3049 VOID
3050 NTAPI
3051 RtlClearAllBits(
3052 _In_ PRTL_BITMAP BitMapHeader
3053 );
3054
3055 NTSYSAPI
3056 VOID
3057 NTAPI
3058 RtlClearBits(
3059 _In_ PRTL_BITMAP BitMapHeader,
3060 _In_range_(0, BitMapHeader->SizeOfBitMap - NumberToClear) ULONG StartingIndex,
3061 _In_range_(0, BitMapHeader->SizeOfBitMap - StartingIndex) ULONG NumberToClear
3062 );
3063
3064 NTSYSAPI
3065 ULONG
3066 NTAPI
3067 RtlFindClearBits(
3068 _In_ PRTL_BITMAP BitMapHeader,
3069 _In_ ULONG NumberToFind,
3070 _In_ ULONG HintIndex
3071 );
3072
3073 NTSYSAPI
3074 ULONG
3075 NTAPI
3076 RtlFindClearBitsAndSet(
3077 _In_ PRTL_BITMAP BitMapHeader,
3078 _In_ ULONG NumberToFind,
3079 _In_ ULONG HintIndex
3080 );
3081
3082 NTSYSAPI
3083 CCHAR
3084 NTAPI
3085 RtlFindLeastSignificantBit(
3086 _In_ ULONGLONG Value
3087 );
3088
3089 NTSYSAPI
3090 CCHAR
3091 NTAPI
3092 RtlFindMostSignificantBit(
3093 _In_ ULONGLONG Value
3094 );
3095
3096 NTSYSAPI
3097 ULONG
3098 NTAPI
3099 RtlFindNextForwardRunClear(
3100 _In_ PRTL_BITMAP BitMapHeader,
3101 _In_ ULONG FromIndex,
3102 _Out_ PULONG StartingRunIndex
3103 );
3104
3105 NTSYSAPI
3106 ULONG
3107 NTAPI
3108 RtlFindNextForwardRunSet(
3109 _In_ PRTL_BITMAP BitMapHeader,
3110 _In_ ULONG FromIndex,
3111 _Out_ PULONG StartingRunIndex
3112 );
3113
3114 NTSYSAPI
3115 ULONG
3116 NTAPI
3117 RtlFindSetBits(
3118 _In_ PRTL_BITMAP BitMapHeader,
3119 _In_ ULONG NumberToFind,
3120 _In_ ULONG HintIndex
3121 );
3122
3123 NTSYSAPI
3124 ULONG
3125 NTAPI
3126 RtlFindSetBitsAndClear(
3127 _In_ PRTL_BITMAP BitMapHeader,
3128 _In_ ULONG NumberToFind,
3129 _In_ ULONG HintIndex
3130 );
3131
3132 #ifdef _REACTOS_ // ReactOS improvement
3133 _At_(BitMapHeader->SizeOfBitMap, _Post_equal_to_(SizeOfBitMap))
3134 _At_(BitMapHeader->Buffer, _Post_equal_to_(BitMapBuffer))
3135 #endif
3136 NTSYSAPI
3137 VOID
3138 NTAPI
3139 RtlInitializeBitMap(
3140 _Out_ PRTL_BITMAP BitMapHeader,
3141 _In_opt_ __drv_aliasesMem PULONG BitMapBuffer,
3142 _In_opt_ ULONG SizeOfBitMap
3143 );
3144
3145 NTSYSAPI
3146 ULONG
3147 NTAPI
3148 RtlNumberOfClearBits(
3149 _In_ PRTL_BITMAP BitMapHeader
3150 );
3151
3152 NTSYSAPI
3153 ULONG
3154 NTAPI
3155 RtlNumberOfSetBits(
3156 _In_ PRTL_BITMAP BitMapHeader
3157 );
3158
3159 NTSYSAPI
3160 VOID
3161 NTAPI
3162 RtlSetBit(
3163 _In_ PRTL_BITMAP BitMapHeader,
3164 _In_range_(<, BitMapHeader->SizeOfBitMap) ULONG BitNumber
3165 );
3166
3167 NTSYSAPI
3168 VOID
3169 NTAPI
3170 RtlSetBits(
3171 _In_ PRTL_BITMAP BitMapHeader,
3172 _In_range_(0, BitMapHeader->SizeOfBitMap - NumberToSet) ULONG StartingIndex,
3173 _In_range_(0, BitMapHeader->SizeOfBitMap - StartingIndex) ULONG NumberToSet
3174 );
3175
3176 NTSYSAPI
3177 VOID
3178 NTAPI
3179 RtlSetAllBits(
3180 _In_ PRTL_BITMAP BitMapHeader
3181 );
3182
3183 _Must_inspect_result_
3184 NTSYSAPI
3185 BOOLEAN
3186 NTAPI
3187 RtlTestBit(
3188 _In_ PRTL_BITMAP BitMapHeader,
3189 _In_range_(<, BitMapHeader->SizeOfBitMap) ULONG BitNumber
3190 );
3191
3192 //
3193 // Timer Functions
3194 //
3195 NTSYSAPI
3196 NTSTATUS
3197 NTAPI
3198 RtlCreateTimer(
3199 _In_ HANDLE TimerQueue,
3200 _In_ PHANDLE phNewTimer,
3201 _In_ WAITORTIMERCALLBACKFUNC Callback,
3202 _In_ PVOID Parameter,
3203 _In_ ULONG DueTime,
3204 _In_ ULONG Period,
3205 _In_ ULONG Flags
3206 );
3207
3208 NTSYSAPI
3209 NTSTATUS
3210 NTAPI
3211 RtlCreateTimerQueue(PHANDLE TimerQueue);
3212
3213 NTSYSAPI
3214 NTSTATUS
3215 NTAPI
3216 RtlDeleteTimer(
3217 _In_ HANDLE TimerQueue,
3218 _In_ HANDLE Timer,
3219 _In_ HANDLE CompletionEvent
3220 );
3221
3222 NTSYSAPI
3223 NTSTATUS
3224 NTAPI
3225 RtlUpdateTimer(
3226 _In_ HANDLE TimerQueue,
3227 _In_ HANDLE Timer,
3228 _In_ ULONG DueTime,
3229 _In_ ULONG Period
3230 );
3231
3232 NTSYSAPI
3233 NTSTATUS
3234 NTAPI
3235 RtlDeleteTimerQueueEx(
3236 _In_ HANDLE TimerQueue,
3237 _In_opt_ HANDLE CompletionEvent
3238 );
3239
3240 NTSYSAPI
3241 NTSTATUS
3242 NTAPI
3243 RtlDeleteTimerQueue(HANDLE TimerQueue);
3244
3245 //
3246 // SList functions
3247 //
3248 PSLIST_ENTRY
3249 FASTCALL
3250 InterlockedPushListSList(
3251 _Inout_ PSLIST_HEADER ListHead,
3252 _Inout_ __drv_aliasesMem PSLIST_ENTRY List,
3253 _Inout_ PSLIST_ENTRY ListEnd,
3254 _In_ ULONG Count
3255 );
3256
3257 //
3258 // Range List functions
3259 //
3260 NTSYSAPI
3261 VOID
3262 NTAPI
3263 RtlInitializeRangeList(
3264 _Inout_ PRTL_RANGE_LIST RangeList
3265 );
3266
3267 NTSYSAPI
3268 VOID
3269 NTAPI
3270 RtlFreeRangeList(
3271 _In_ PRTL_RANGE_LIST RangeList
3272 );
3273
3274 NTSYSAPI
3275 NTSTATUS
3276 NTAPI
3277 RtlAddRange(
3278 _Inout_ PRTL_RANGE_LIST RangeList,
3279 _In_ ULONGLONG Start,
3280 _In_ ULONGLONG End,
3281 _In_ UCHAR Attributes,
3282 _In_ ULONG Flags,
3283 _In_opt_ PVOID UserData,
3284 _In_opt_ PVOID Owner
3285 );
3286
3287 //
3288 // Debug Functions
3289 //
3290 ULONG
3291 __cdecl
3292 DbgPrint(
3293 _In_z_ _Printf_format_string_ PCSTR Format,
3294 ...
3295 );
3296
3297 NTSYSAPI
3298 ULONG
3299 __cdecl
3300 DbgPrintEx(
3301 _In_ ULONG ComponentId,
3302 _In_ ULONG Level,
3303 _In_z_ _Printf_format_string_ PCSTR Format,
3304 ...
3305 );
3306
3307 NTSYSAPI
3308 ULONG
3309 NTAPI
3310 DbgPrompt(
3311 _In_z_ PCCH Prompt,
3312 _Out_writes_bytes_(MaximumResponseLength) PCH Response,
3313 _In_ ULONG MaximumResponseLength
3314 );
3315
3316 #undef DbgBreakPoint
3317 VOID
3318 NTAPI
3319 DbgBreakPoint(
3320 VOID
3321 );
3322
3323 VOID
3324 NTAPI
3325 DbgLoadImageSymbols(
3326 _In_ PSTRING Name,
3327 _In_ PVOID Base,
3328 _In_ ULONG_PTR ProcessId
3329 );
3330
3331 VOID
3332 NTAPI
3333 DbgUnLoadImageSymbols(
3334 _In_ PSTRING Name,
3335 _In_ PVOID Base,
3336 _In_ ULONG_PTR ProcessId
3337 );
3338
3339 VOID
3340 NTAPI
3341 DbgCommandString(
3342 _In_ PCCH Name,
3343 _In_ PCCH Command
3344 );
3345
3346 //
3347 // Generic Table Functions
3348 //
3349 #if defined(NTOS_MODE_USER) || defined(_NTIFS_)
3350 NTSYSAPI
3351 PVOID
3352 NTAPI
3353 RtlInsertElementGenericTable(
3354 _In_ PRTL_GENERIC_TABLE Table,
3355 _In_reads_bytes_(BufferSize) PVOID Buffer,
3356 _In_ CLONG BufferSize,
3357 _Out_opt_ PBOOLEAN NewElement
3358 );
3359
3360 NTSYSAPI
3361 PVOID
3362 NTAPI
3363 RtlInsertElementGenericTableFull(
3364 _In_ PRTL_GENERIC_TABLE Table,
3365 _In_reads_bytes_(BufferSize) PVOID Buffer,
3366 _In_ CLONG BufferSize,
3367 _Out_opt_ PBOOLEAN NewElement,
3368 _In_ PVOID NodeOrParent,
3369 _In_ TABLE_SEARCH_RESULT SearchResult
3370 );
3371
3372 NTSYSAPI
3373 BOOLEAN
3374 NTAPI
3375 RtlIsGenericTableEmpty(
3376 _In_ PRTL_GENERIC_TABLE Table
3377 );
3378
3379 NTSYSAPI
3380 PVOID
3381 NTAPI
3382 RtlLookupElementGenericTableFull(
3383 _In_ PRTL_GENERIC_TABLE Table,
3384 _In_ PVOID Buffer,
3385 _Out_ PVOID *NodeOrParent,
3386 _Out_ TABLE_SEARCH_RESULT *SearchResult
3387 );
3388 #endif
3389
3390 //
3391 // Handle Table Functions
3392 //
3393 NTSYSAPI
3394 PRTL_HANDLE_TABLE_ENTRY
3395 NTAPI
3396 RtlAllocateHandle(
3397 _In_ PRTL_HANDLE_TABLE HandleTable,
3398 _Inout_ PULONG Index
3399 );
3400
3401 NTSYSAPI
3402 VOID
3403 NTAPI
3404 RtlDestroyHandleTable(
3405 _Inout_ PRTL_HANDLE_TABLE HandleTable);
3406
3407 NTSYSAPI
3408 BOOLEAN
3409 NTAPI
3410 RtlFreeHandle(
3411 _In_ PRTL_HANDLE_TABLE HandleTable,
3412 _In_ PRTL_HANDLE_TABLE_ENTRY Handle
3413 );
3414
3415 NTSYSAPI
3416 VOID
3417 NTAPI
3418 RtlInitializeHandleTable(
3419 _In_ ULONG TableSize,
3420 _In_ ULONG HandleSize,
3421 _In_ PRTL_HANDLE_TABLE HandleTable
3422 );
3423
3424 NTSYSAPI
3425 BOOLEAN
3426 NTAPI
3427 RtlIsValidHandle(
3428 _In_ PRTL_HANDLE_TABLE HandleTable,
3429 _In_ PRTL_HANDLE_TABLE_ENTRY Handle
3430 );
3431
3432 _Success_(return!=FALSE)
3433 NTSYSAPI
3434 BOOLEAN
3435 NTAPI
3436 RtlIsValidIndexHandle(
3437 _In_ PRTL_HANDLE_TABLE HandleTable,
3438 _In_ ULONG Index,
3439 _Out_ PRTL_HANDLE_TABLE_ENTRY *Handle
3440 );
3441
3442 //
3443 // PE Functions
3444 //
3445 NTSYSAPI
3446 NTSTATUS
3447 NTAPI
3448 RtlFindMessage(
3449 _In_ PVOID BaseAddress,
3450 _In_ ULONG Type,
3451 _In_ ULONG Language,
3452 _In_ ULONG MessageId,
3453 _Out_ PMESSAGE_RESOURCE_ENTRY *MessageResourceEntry
3454 );
3455
3456 NTSYSAPI
3457 ULONG
3458 NTAPI
3459 RtlGetNtGlobalFlags(VOID);
3460
3461 _Success_(return!=NULL)
3462 NTSYSAPI
3463 PVOID
3464 NTAPI
3465 RtlImageDirectoryEntryToData(
3466 _In_ PVOID BaseAddress,
3467 _In_ BOOLEAN MappedAsImage,
3468 _In_ USHORT Directory,
3469 _Out_ PULONG Size
3470 );
3471
3472 NTSYSAPI
3473 PVOID
3474 NTAPI
3475 RtlImageRvaToVa(
3476 _In_ PIMAGE_NT_HEADERS NtHeader,
3477 _In_ PVOID BaseAddress,
3478 _In_ ULONG Rva,
3479 _Inout_opt_ PIMAGE_SECTION_HEADER *SectionHeader
3480 );
3481
3482 NTSYSAPI
3483 PIMAGE_NT_HEADERS
3484 NTAPI
3485 RtlImageNtHeader(
3486 _In_ PVOID BaseAddress);
3487
3488 NTSYSAPI
3489 NTSTATUS
3490 NTAPI
3491 RtlImageNtHeaderEx(
3492 _In_ ULONG Flags,
3493 _In_ PVOID BaseAddress,
3494 _In_ ULONGLONG Size,
3495 _Out_ PIMAGE_NT_HEADERS *NtHeader
3496 );
3497
3498 NTSYSAPI
3499 PIMAGE_SECTION_HEADER
3500 NTAPI
3501 RtlImageRvaToSection(
3502 _In_ PIMAGE_NT_HEADERS NtHeader,
3503 _In_ PVOID BaseAddress,
3504 _In_ ULONG Rva
3505 );
3506
3507 NTSYSAPI
3508 ULONG
3509 NTAPI
3510 LdrRelocateImageWithBias(
3511 _In_ PVOID NewAddress,
3512 _In_ LONGLONG AdditionalBias,
3513 _In_ PCCH LoaderName,
3514 _In_ ULONG Success,
3515 _In_ ULONG Conflict,
3516 _In_ ULONG Invalid
3517 );
3518
3519 //
3520 // Activation Context Functions
3521 //
3522 #ifdef NTOS_MODE_USER
3523 NTSYSAPI
3524 NTSTATUS
3525 NTAPI
3526 RtlActivateActivationContextEx(
3527 _In_ ULONG Flags,
3528 _In_ PTEB Teb,
3529 _In_ PVOID Context,
3530 _Out_ PULONG_PTR Cookie
3531 );
3532
3533 NTSYSAPI
3534 NTSTATUS
3535 NTAPI
3536 RtlActivateActivationContext(
3537 _In_ ULONG Flags,
3538 _In_ HANDLE Handle,
3539 _Out_ PULONG_PTR Cookie
3540 );
3541
3542 NTSYSAPI
3543 VOID
3544 NTAPI
3545 RtlAddRefActivationContext(
3546 _In_ PVOID Context
3547 );
3548
3549 NTSYSAPI
3550 PRTL_ACTIVATION_CONTEXT_STACK_FRAME
3551 FASTCALL
3552 RtlActivateActivationContextUnsafeFast(
3553 _In_ PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame,
3554 _In_ PVOID Context
3555 );
3556
3557 NTSYSAPI
3558 NTSTATUS
3559 NTAPI
3560 RtlAllocateActivationContextStack(
3561 _In_ PACTIVATION_CONTEXT_STACK *Stack
3562 );
3563
3564 NTSYSAPI
3565 NTSTATUS
3566 NTAPI
3567 RtlCreateActivationContext(
3568 _In_ ULONG Flags,
3569 _In_ PACTIVATION_CONTEXT_DATA ActivationContextData,
3570 _In_ ULONG ExtraBytes,
3571 _In_ PVOID NotificationRoutine,
3572 _In_ PVOID NotificationContext,
3573 _Out_ PACTIVATION_CONTEXT *ActCtx
3574 );
3575
3576 NTSYSAPI
3577 NTSTATUS
3578 NTAPI
3579 RtlGetActiveActivationContext(
3580 _In_ PVOID *Context
3581 );
3582
3583 NTSYSAPI
3584 VOID
3585 NTAPI
3586 RtlReleaseActivationContext(
3587 _In_ HANDLE handle
3588 );
3589
3590 NTSYSAPI
3591 NTSTATUS
3592 NTAPI
3593 RtlDeactivateActivationContext(
3594 _In_ ULONG dwFlags,
3595 _In_ ULONG_PTR ulCookie
3596 );
3597
3598 NTSYSAPI
3599 VOID
3600 NTAPI
3601 RtlFreeActivationContextStack(
3602 _In_ PACTIVATION_CONTEXT_STACK Stack
3603 );
3604
3605 NTSYSAPI
3606 VOID
3607 NTAPI
3608 RtlFreeThreadActivationContextStack(VOID);
3609
3610 NTSYSAPI
3611 PRTL_ACTIVATION_CONTEXT_STACK_FRAME
3612 FASTCALL
3613 RtlDeactivateActivationContextUnsafeFast(
3614 _In_ PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame
3615 );
3616
3617 NTSYSAPI
3618 NTSTATUS
3619 NTAPI
3620 RtlDosApplyFileIsolationRedirection_Ustr(
3621 _In_ ULONG Flags,
3622 _In_ PUNICODE_STRING OriginalName,
3623 _In_ PUNICODE_STRING Extension,
3624 _Inout_ PUNICODE_STRING StaticString,
3625 _Inout_ PUNICODE_STRING DynamicString,
3626 _Inout_ PUNICODE_STRING *NewName,
3627 _In_ PULONG NewFlags,
3628 _In_ PSIZE_T FileNameSize,
3629 _In_ PSIZE_T RequiredLength
3630 );
3631
3632 NTSYSAPI
3633 NTSTATUS
3634 NTAPI
3635 RtlFindActivationContextSectionString(
3636 _In_ ULONG dwFlags,
3637 _In_ const GUID *ExtensionGuid,
3638 _In_ ULONG SectionType,
3639 _In_ const UNICODE_STRING *SectionName,
3640 _Inout_ PVOID ReturnedData
3641 );
3642
3643 NTSYSAPI
3644 NTSTATUS
3645 NTAPI
3646 RtlQueryInformationActivationContext(
3647 _In_ DWORD dwFlags,
3648 _In_opt_ PVOID Context,
3649 _In_opt_ PVOID pvSubInstance,
3650 _In_ ULONG ulInfoClass,
3651 _Out_bytecap_(cbBuffer) PVOID pvBuffer,
3652 _In_opt_ SIZE_T cbBuffer,
3653 _Out_opt_ SIZE_T *pcbWrittenOrRequired
3654 );
3655
3656 NTSYSAPI
3657 NTSTATUS
3658 NTAPI
3659 RtlQueryInformationActiveActivationContext(
3660 _In_ ULONG ulInfoClass,
3661 _Out_bytecap_(cbBuffer) PVOID pvBuffer,
3662 _In_opt_ SIZE_T cbBuffer,
3663 _Out_opt_ SIZE_T *pcbWrittenOrRequired
3664 );
3665
3666 NTSYSAPI
3667 NTSTATUS
3668 NTAPI
3669 RtlZombifyActivationContext(
3670 PVOID Context
3671 );
3672
3673 //
3674 // WOW64 Functions
3675 //
3676 NTSYSAPI
3677 NTSTATUS
3678 NTAPI
3679 RtlWow64EnableFsRedirection(
3680 _In_ BOOLEAN Wow64FsEnableRedirection
3681 );
3682
3683 NTSYSAPI
3684 NTSTATUS
3685 NTAPI
3686 RtlWow64EnableFsRedirectionEx(
3687 _In_ PVOID Wow64FsEnableRedirection,
3688 _Out_ PVOID *OldFsRedirectionLevel
3689 );
3690
3691 #endif
3692
3693 //
3694 // Registry Functions
3695 //
3696 _IRQL_requires_max_(PASSIVE_LEVEL)
3697 _Must_inspect_result_
3698 NTSYSAPI
3699 NTSTATUS
3700 NTAPI
3701 RtlCheckRegistryKey(
3702 _In_ ULONG RelativeTo,
3703 _In_ PWSTR Path
3704 );
3705
3706 NTSYSAPI
3707 NTSTATUS
3708 NTAPI
3709 RtlCreateRegistryKey(
3710 _In_ ULONG RelativeTo,
3711 _In_ PWSTR Path
3712 );
3713
3714 NTSYSAPI
3715 NTSTATUS
3716 NTAPI
3717 RtlFormatCurrentUserKeyPath(
3718 _Out_ _At_(KeyPath->Buffer, __drv_allocatesMem(Mem) _Post_bytecap_(KeyPath->MaximumLength) _Post_bytecount_(KeyPath->Length))
3719 PUNICODE_STRING KeyPath
3720 );
3721
3722 NTSYSAPI
3723 NTSTATUS
3724 NTAPI
3725 RtlOpenCurrentUser(
3726 _In_ ACCESS_MASK DesiredAccess,
3727 _Out_ PHANDLE KeyHandle
3728 );
3729
3730 _IRQL_requires_max_(PASSIVE_LEVEL)
3731 NTSYSAPI
3732 NTSTATUS
3733 NTAPI
3734 RtlQueryRegistryValues(
3735 _In_ ULONG RelativeTo,
3736 _In_ PCWSTR Path,
3737 _Inout_ _At_(*(*QueryTable).EntryContext, _Pre_unknown_)
3738 PRTL_QUERY_REGISTRY_TABLE QueryTable,
3739 _In_opt_ PVOID Context,
3740 _In_opt_ PVOID Environment
3741 );
3742
3743 _IRQL_requires_max_(PASSIVE_LEVEL)
3744 NTSYSAPI
3745 NTSTATUS
3746 NTAPI
3747 RtlWriteRegistryValue(
3748 _In_ ULONG RelativeTo,
3749 _In_ PCWSTR Path,
3750 _In_z_ PCWSTR ValueName,
3751 _In_ ULONG ValueType,
3752 _In_reads_bytes_opt_(ValueLength) PVOID ValueData,
3753 _In_ ULONG ValueLength
3754 );
3755
3756 #ifdef NTOS_MODE_USER
3757 NTSYSAPI
3758 NTSTATUS
3759 NTAPI
3760 RtlpNtCreateKey(
3761 _Out_ HANDLE KeyHandle,
3762 _In_ ACCESS_MASK DesiredAccess,
3763 _In_ POBJECT_ATTRIBUTES ObjectAttributes,
3764 _In_ ULONG TitleIndex,
3765 _In_ PUNICODE_STRING Class,
3766 _Out_ PULONG Disposition
3767 );
3768
3769 NTSYSAPI
3770 NTSTATUS
3771 NTAPI
3772 RtlpNtEnumerateSubKey(
3773 _In_ HANDLE KeyHandle,
3774 _Inout_ PUNICODE_STRING SubKeyName,
3775 _In_ ULONG Index,
3776 _In_ ULONG Unused
3777 );
3778
3779 NTSYSAPI
3780 NTSTATUS
3781 NTAPI
3782 RtlpNtMakeTemporaryKey(
3783 _In_ HANDLE KeyHandle
3784 );
3785
3786 NTSYSAPI
3787 NTSTATUS
3788 NTAPI
3789 RtlpNtOpenKey(
3790 _Out_ HANDLE KeyHandle,
3791 _In_ ACCESS_MASK DesiredAccess,
3792 _In_ POBJECT_ATTRIBUTES ObjectAttributes,
3793 _In_ ULONG Unused
3794 );
3795
3796 NTSYSAPI
3797 NTSTATUS
3798 NTAPI
3799 RtlpNtQueryValueKey(
3800 _In_ HANDLE KeyHandle,
3801 _Out_opt_ PULONG Type,
3802 _Out_opt_ PVOID Data,
3803 _Inout_opt_ PULONG DataLength,
3804 _In_ ULONG Unused
3805 );
3806
3807 NTSYSAPI
3808 NTSTATUS
3809 NTAPI
3810 RtlpNtSetValueKey(
3811 _In_ HANDLE KeyHandle,
3812 _In_ ULONG Type,
3813 _In_ PVOID Data,
3814 _In_ ULONG DataLength
3815 );
3816 #endif
3817
3818 //
3819 // NLS Functions
3820 //
3821 NTSYSAPI
3822 VOID
3823 NTAPI
3824 RtlGetDefaultCodePage(
3825 _Out_ PUSHORT AnsiCodePage,
3826 _Out_ PUSHORT OemCodePage
3827 );
3828
3829 NTSYSAPI
3830 VOID
3831 NTAPI
3832 RtlInitNlsTables(
3833 _In_ PUSHORT AnsiTableBase,
3834 _In_ PUSHORT OemTableBase,
3835 _In_ PUSHORT CaseTableBase,
3836 _Out_ PNLSTABLEINFO NlsTable
3837 );
3838
3839 _IRQL_requires_max_(PASSIVE_LEVEL)
3840 NTSYSAPI
3841 VOID
3842 NTAPI
3843 RtlInitCodePageTable(
3844 _In_ PUSHORT TableBase,
3845 _Out_ PCPTABLEINFO CodePageTable
3846 );
3847
3848 NTSYSAPI
3849 VOID
3850 NTAPI
3851 RtlResetRtlTranslations(
3852 _In_ PNLSTABLEINFO NlsTable);
3853
3854 #if defined(NTOS_MODE_USER) && !defined(NO_RTL_INLINES)
3855
3856 //
3857 // Misc conversion functions
3858 //
3859 static __inline
3860 LARGE_INTEGER
3861 NTAPI_INLINE
3862 RtlConvertLongToLargeInteger(
3863 _In_ LONG SignedInteger
3864 )
3865 {
3866 LARGE_INTEGER Result;
3867
3868 Result.QuadPart = SignedInteger;
3869 return Result;
3870 }
3871
3872 static __inline
3873 LARGE_INTEGER
3874 NTAPI_INLINE
3875 RtlEnlargedIntegerMultiply(
3876 _In_ LONG Multiplicand,
3877 _In_ LONG Multiplier
3878 )
3879 {
3880 LARGE_INTEGER Product;
3881
3882 Product.QuadPart = (LONGLONG)Multiplicand * (ULONGLONG)Multiplier;
3883 return Product;
3884 }
3885
3886 static __inline
3887 ULONG
3888 NTAPI_INLINE
3889 RtlEnlargedUnsignedDivide(
3890 _In_ ULARGE_INTEGER Dividend,
3891 _In_ ULONG Divisor,
3892 _In_opt_ PULONG Remainder
3893 )
3894 {
3895 ULONG Quotient;
3896
3897 Quotient = (ULONG)(Dividend.QuadPart / Divisor);
3898 if (Remainder) {
3899 *Remainder = (ULONG)(Dividend.QuadPart % Divisor);
3900 }
3901
3902 return Quotient;
3903 }
3904
3905 static __inline
3906 LARGE_INTEGER
3907 NTAPI_INLINE
3908 RtlEnlargedUnsignedMultiply(
3909 _In_ ULONG Multiplicand,
3910 _In_ ULONG Multiplier
3911 )
3912 {
3913 LARGE_INTEGER Product;
3914
3915 Product.QuadPart = (ULONGLONG)Multiplicand * (ULONGLONG)Multiplier;
3916 return Product;
3917 }
3918
3919 #if defined(_AMD64_) || defined(_IA64_)
3920 static __inline
3921 LARGE_INTEGER
3922 NTAPI_INLINE
3923 RtlExtendedLargeIntegerDivide(
3924 _In_ LARGE_INTEGER Dividend,
3925 _In_ ULONG Divisor,
3926 _Out_opt_ PULONG Remainder)
3927 {
3928 LARGE_INTEGER ret;
3929 ret.QuadPart = (ULONG64)Dividend.QuadPart / Divisor;
3930 if (Remainder)
3931 *Remainder = (ULONG)(Dividend.QuadPart % Divisor);
3932 return ret;
3933 }
3934
3935 #else
3936 NTSYSAPI
3937 LARGE_INTEGER
3938 NTAPI
3939 RtlExtendedLargeIntegerDivide(
3940 _In_ LARGE_INTEGER Dividend,
3941 _In_ ULONG Divisor,
3942 _Out_opt_ PULONG Remainder
3943 );
3944
3945 #endif /* defined(_AMD64_) || defined(_IA64_) */
3946
3947 #endif
3948
3949
3950 NTSYSAPI
3951 ULONG
3952 NTAPI
3953 RtlUniform(
3954 _In_ PULONG Seed
3955 );
3956
3957 NTSYSAPI
3958 ULONG
3959 NTAPI
3960 RtlRandom(
3961 _Inout_ PULONG Seed
3962 );
3963
3964 NTSYSAPI
3965 ULONG
3966 NTAPI
3967 RtlComputeCrc32(
3968 _In_ ULONG InitialCrc,
3969 _In_ PUCHAR Buffer,
3970 _In_ ULONG Length
3971 );
3972
3973 //
3974 // Network Functions
3975 //
3976 NTSYSAPI
3977 PSTR
3978 NTAPI
3979 RtlIpv4AddressToStringA(
3980 _In_ const struct in_addr *Addr,
3981 _Out_writes_(16) PCHAR S
3982 );
3983
3984 NTSYSAPI
3985 PWSTR
3986 NTAPI
3987 RtlIpv4AddressToStringW(
3988 _In_ const struct in_addr *Addr,
3989 _Out_writes_(16) PWCHAR S
3990 );
3991
3992 NTSYSAPI
3993 NTSTATUS
3994 NTAPI
3995 RtlIpv4AddressToStringExA(
3996 _In_ const struct in_addr *Address,
3997 _In_ USHORT Port,
3998 _Out_writes_to_(*AddressStringLength, *AddressStringLength) PCHAR AddressString,
3999 _Inout_ PULONG AddressStringLength
4000 );
4001
4002 NTSTATUS
4003 NTAPI
4004 RtlIpv4AddressToStringExW(
4005 _In_ const struct in_addr *Address,
4006 _In_ USHORT Port,
4007 _Out_writes_to_(*AddressStringLength, *AddressStringLength) PWCHAR AddressString,
4008 _Inout_ PULONG AddressStringLength
4009 );
4010
4011 NTSYSAPI
4012 NTSTATUS
4013 NTAPI
4014 RtlIpv4StringToAddressA(
4015 _In_ PCSTR String,
4016 _In_ BOOLEAN Strict,
4017 _Out_ PCSTR *Terminator,
4018 _Out_ struct in_addr *Addr
4019 );
4020
4021 NTSYSAPI
4022 NTSTATUS
4023 NTAPI
4024 RtlIpv4StringToAddressW(
4025 _In_ PCWSTR String,
4026 _In_ BOOLEAN Strict,
4027 _Out_ PCWSTR *Terminator,
4028 _Out_ struct in_addr *Addr
4029 );
4030
4031 NTSYSAPI
4032 NTSTATUS
4033 NTAPI
4034 RtlIpv4StringToAddressExA(
4035 _In_ PCSTR AddressString,
4036 _In_ BOOLEAN Strict,
4037 _Out_ struct in_addr *Address,
4038 _Out_ PUSHORT Port
4039 );
4040
4041 NTSYSAPI
4042 NTSTATUS
4043 NTAPI
4044 RtlIpv4StringToAddressExW(
4045 _In_ PCWSTR AddressString,
4046 _In_ BOOLEAN Strict,
4047 _Out_ struct in_addr *Address,
4048 _Out_ PUSHORT Port
4049 );
4050
4051 NTSYSAPI
4052 PSTR
4053 NTAPI
4054 RtlIpv6AddressToStringA(
4055 _In_ const struct in6_addr *Addr,
4056 _Out_writes_(46) PSTR S
4057 );
4058
4059 NTSYSAPI
4060 PWSTR
4061 NTAPI
4062 RtlIpv6AddressToStringW(
4063 _In_ const struct in6_addr *Addr,
4064 _Out_writes_(46) PWSTR S
4065 );
4066
4067 NTSYSAPI
4068 NTSTATUS
4069 NTAPI
4070 RtlIpv6AddressToStringExA(
4071 _In_ const struct in6_addr *Address,
4072 _In_ ULONG ScopeId,
4073 _In_ USHORT Port,
4074 _Out_writes_to_(*AddressStringLength, *AddressStringLength) PSTR AddressString,
4075 _Inout_ PULONG AddressStringLength
4076 );
4077
4078 NTSYSAPI
4079 NTSTATUS
4080 NTAPI
4081 RtlIpv6AddressToStringExW(
4082 _In_ const struct in6_addr *Address,
4083 _In_ ULONG ScopeId,
4084 _In_ USHORT Port,
4085 _Out_writes_to_(*AddressStringLength, *AddressStringLength) PWCHAR AddressString,
4086 _Inout_ PULONG AddressStringLength
4087 );
4088
4089 NTSYSAPI
4090 NTSTATUS
4091 NTAPI
4092 RtlIpv6StringToAddressA(
4093 _In_ PCSTR String,
4094 _Out_ PCSTR *Terminator,
4095 _Out_ struct in6_addr *Addr
4096 );
4097
4098 NTSYSAPI
4099 NTSTATUS
4100 NTAPI
4101 RtlIpv6StringToAddressW(
4102 _In_ PCWSTR String,
4103 _Out_ PCWSTR *Terminator,
4104 _Out_ struct in6_addr *Addr
4105 );
4106
4107 NTSYSAPI
4108 NTSTATUS
4109 NTAPI
4110 RtlIpv6StringToAddressExA(
4111 _In_ PCSTR AddressString,
4112 _Out_ struct in6_addr *Address,
4113 _Out_ PULONG ScopeId,
4114 _Out_ PUSHORT Port
4115 );
4116
4117 NTSYSAPI
4118 NTSTATUS
4119 NTAPI
4120 RtlIpv6StringToAddressExW(
4121 _In_ PCWSTR AddressString,
4122 _Out_ struct in6_addr *Address,
4123 _Out_ PULONG ScopeId,
4124 _Out_ PUSHORT Port
4125 );
4126
4127
4128 //
4129 // Time Functions
4130 //
4131 NTSYSAPI
4132 NTSTATUS
4133 NTAPI
4134 RtlQueryTimeZoneInformation(
4135 _Out_ PRTL_TIME_ZONE_INFORMATION TimeZoneInformation);
4136
4137 NTSYSAPI
4138 VOID
4139 NTAPI
4140 RtlSecondsSince1970ToTime(
4141 _In_ ULONG SecondsSince1970,
4142 _Out_ PLARGE_INTEGER Time
4143 );
4144
4145 NTSYSAPI
4146 NTSTATUS
4147 NTAPI
4148 RtlSetTimeZoneInformation(
4149 _In_ PRTL_TIME_ZONE_INFORMATION TimeZoneInformation);
4150
4151 _Success_(return!=FALSE)
4152 _Must_inspect_result_
4153 NTSYSAPI
4154 BOOLEAN
4155 NTAPI
4156 RtlTimeFieldsToTime(
4157 _In_ PTIME_FIELDS TimeFields,
4158 _Out_ PLARGE_INTEGER Time
4159 );
4160
4161 _Success_(return != 0)
4162 _Must_inspect_result_
4163 NTSYSAPI
4164 BOOLEAN
4165 NTAPI
4166 RtlTimeToSecondsSince1970(
4167 _In_ PLARGE_INTEGER Time,
4168 _Out_ PULONG ElapsedSeconds
4169 );
4170
4171 NTSYSAPI
4172 VOID
4173 NTAPI
4174 RtlTimeToTimeFields(
4175 PLARGE_INTEGER Time,
4176 PTIME_FIELDS TimeFields
4177 );
4178
4179 NTSYSAPI
4180 NTSTATUS
4181 NTAPI
4182 RtlSystemTimeToLocalTime(
4183 _In_ PLARGE_INTEGER SystemTime,
4184 _Out_ PLARGE_INTEGER LocalTime
4185 );
4186
4187 //
4188 // Version Functions
4189 //
4190 _IRQL_requires_max_(PASSIVE_LEVEL)
4191 _Must_inspect_result_
4192 NTSYSAPI
4193 NTSTATUS
4194 NTAPI
4195 RtlVerifyVersionInfo(
4196 _In_ PRTL_OSVERSIONINFOEXW VersionInfo,
4197 _In_ ULONG TypeMask,
4198 _In_ ULONGLONG ConditionMask
4199 );
4200
4201 _IRQL_requires_max_(PASSIVE_LEVEL)
4202 NTSYSAPI
4203 NTSTATUS
4204 NTAPI
4205 RtlGetVersion(
4206 _Out_
4207 _At_(lpVersionInformation->dwOSVersionInfoSize, _Pre_ _Valid_)
4208 _When_(lpVersionInformation->dwOSVersionInfoSize == sizeof(RTL_OSVERSIONINFOEXW),
4209 _At_((PRTL_OSVERSIONINFOEXW)lpVersionInformation, _Out_))
4210 PRTL_OSVERSIONINFOW lpVersionInformation
4211 );
4212
4213 NTSYSAPI
4214 BOOLEAN
4215 NTAPI
4216 RtlGetNtProductType(OUT PNT_PRODUCT_TYPE ProductType);
4217
4218 //
4219 // Secure Memory Functions
4220 //
4221 #ifdef NTOS_MODE_USER
4222 NTSYSAPI
4223 NTSTATUS
4224 NTAPI
4225 RtlRegisterSecureMemoryCacheCallback(
4226 _In_ PRTL_SECURE_MEMORY_CACHE_CALLBACK Callback);
4227
4228 NTSYSAPI
4229 BOOLEAN
4230 NTAPI
4231 RtlFlushSecureMemoryCache(
4232 _In_ PVOID MemoryCache,
4233 _In_opt_ SIZE_T MemoryLength
4234 );
4235 #endif
4236
4237 //
4238 // Boot Status Data Functions
4239 //
4240 #ifdef NTOS_MODE_USER
4241 NTSYSAPI
4242 NTSTATUS
4243 NTAPI
4244 RtlCreateBootStatusDataFile(
4245 VOID
4246 );
4247
4248 NTSYSAPI
4249 NTSTATUS
4250 NTAPI
4251 RtlGetSetBootStatusData(
4252 _In_ HANDLE FileHandle,
4253 _In_ BOOLEAN WriteMode,
4254 _In_ RTL_BSD_ITEM_TYPE DataClass,
4255 _In_ PVOID Buffer,
4256 _In_ ULONG BufferSize,
4257 _Out_opt_ PULONG ReturnLength
4258 );
4259
4260 NTSYSAPI
4261 NTSTATUS
4262 NTAPI
4263 RtlLockBootStatusData(
4264 _Out_ PHANDLE FileHandle
4265 );
4266
4267 NTSYSAPI
4268 NTSTATUS
4269 NTAPI
4270 RtlUnlockBootStatusData(
4271 _In_ HANDLE FileHandle
4272 );
4273 #endif
4274
4275 #ifdef NTOS_MODE_USER
4276 _Must_inspect_result_
4277 NTSYSAPI
4278 NTSTATUS
4279 NTAPI
4280 RtlGUIDFromString(
4281 _In_ PUNICODE_STRING GuidString,
4282 _Out_ GUID *Guid);
4283
4284 _Must_inspect_result_
4285 NTSYSAPI
4286 NTSTATUS
4287 NTAPI
4288 RtlStringFromGUID(
4289 _In_ REFGUID Guid,
4290 _Out_ _At_(GuidString->Buffer, __drv_allocatesMem(Mem))
4291 PUNICODE_STRING GuidString);
4292
4293 NTSYSAPI
4294 NTSTATUS
4295 NTAPI
4296 RtlComputeImportTableHash(
4297 _In_ HANDLE hFile,
4298 _Out_ PCHAR Hash,
4299 _In_ ULONG ImportTableHashRevision
4300 );
4301 #endif
4302
4303 //
4304 // MemoryStream functions
4305 //
4306 #ifdef NTOS_MODE_USER
4307
4308 NTSYSAPI
4309 VOID
4310 NTAPI
4311 RtlInitMemoryStream(
4312 _Out_ PRTL_MEMORY_STREAM Stream
4313 );
4314
4315 NTSYSAPI
4316 VOID
4317 NTAPI
4318 RtlInitOutOfProcessMemoryStream(
4319 _Out_ PRTL_MEMORY_STREAM Stream
4320 );
4321
4322 NTSYSAPI
4323 VOID
4324 NTAPI
4325 RtlFinalReleaseOutOfProcessMemoryStream(
4326 _In_ PRTL_MEMORY_STREAM Stream
4327 );
4328
4329 NTSYSAPI
4330 HRESULT
4331 NTAPI
4332 RtlQueryInterfaceMemoryStream(
4333 _In_ struct IStream *This,
4334 _In_ REFIID RequestedIid,
4335 _Outptr_ PVOID *ResultObject
4336 );
4337
4338 NTSYSAPI
4339 ULONG
4340 NTAPI
4341 RtlAddRefMemoryStream(
4342 _In_ struct IStream *This
4343 );
4344
4345 NTSYSAPI
4346 ULONG
4347 NTAPI
4348 RtlReleaseMemoryStream(
4349 _In_ struct IStream *This
4350 );
4351
4352 NTSYSAPI
4353 HRESULT
4354 NTAPI
4355 RtlReadMemoryStream(
4356 _In_ struct IStream *This,
4357 _Out_writes_bytes_(Length) PVOID Buffer,
4358 _In_ ULONG Length,
4359 _Out_opt_ PULONG BytesRead
4360 );
4361
4362 NTSYSAPI
4363 HRESULT
4364 NTAPI
4365 RtlReadOutOfProcessMemoryStream(
4366 _In_ struct IStream *This,
4367 _Out_writes_bytes_(Length) PVOID Buffer,
4368 _In_ ULONG Length,
4369 _Out_opt_ PULONG BytesRead
4370 );
4371
4372 NTSYSAPI
4373 HRESULT
4374 NTAPI
4375 RtlSeekMemoryStream(
4376 _In_ struct IStream *This,
4377 _In_ LARGE_INTEGER RelativeOffset,
4378 _In_ ULONG Origin,
4379 _Out_opt_ PULARGE_INTEGER ResultOffset
4380 );
4381
4382 NTSYSAPI
4383 HRESULT
4384 NTAPI
4385 RtlCopyMemoryStreamTo(
4386 _In_ struct IStream *This,
4387 _In_ struct IStream *Target,
4388 _In_ ULARGE_INTEGER Length,
4389 _Out_opt_ PULARGE_INTEGER BytesRead,
4390 _Out_opt_ PULARGE_INTEGER BytesWritten
4391 );
4392
4393 NTSYSAPI
4394 HRESULT
4395 NTAPI
4396 RtlCopyOutOfProcessMemoryStreamTo(
4397 _In_ struct IStream *This,
4398 _In_ struct IStream *Target,
4399 _In_ ULARGE_INTEGER Length,
4400 _Out_opt_ PULARGE_INTEGER BytesRead,
4401 _Out_opt_ PULARGE_INTEGER BytesWritten
4402 );
4403
4404 NTSYSAPI
4405 HRESULT
4406 NTAPI
4407 RtlStatMemoryStream(
4408 _In_ struct IStream *This,
4409 _Out_ struct tagSTATSTG *Stats,
4410 _In_ ULONG Flags
4411 );
4412
4413 // Dummy functions
4414 NTSYSAPI
4415 HRESULT
4416 NTAPI
4417 RtlWriteMemoryStream(
4418 _In_ struct IStream *This,
4419 _In_reads_bytes_(Length) CONST VOID *Buffer,
4420 _In_ ULONG Length,
4421 _Out_opt_ PULONG BytesWritten
4422 );
4423
4424 NTSYSAPI
4425 HRESULT
4426 NTAPI
4427 RtlSetMemoryStreamSize(
4428 _In_ struct IStream *This,
4429 _In_ ULARGE_INTEGER NewSize
4430 );
4431
4432 NTSYSAPI
4433 HRESULT
4434 NTAPI
4435 RtlCommitMemoryStream(
4436 _In_ struct IStream *This,
4437 _In_ ULONG CommitFlags
4438 );
4439
4440 NTSYSAPI
4441 HRESULT
4442 NTAPI
4443 RtlRevertMemoryStream(
4444 _In_ struct IStream *This
4445 );
4446
4447 NTSYSAPI
4448 HRESULT
4449 NTAPI
4450 RtlLockMemoryStreamRegion(
4451 _In_ struct IStream *This,
4452 _In_ ULARGE_INTEGER Offset,
4453 _In_ ULARGE_INTEGER Length,
4454 _In_ ULONG LockType
4455 );
4456
4457 NTSYSAPI
4458 HRESULT
4459 NTAPI
4460 RtlUnlockMemoryStreamRegion(
4461 _In_ struct IStream *This,
4462 _In_ ULARGE_INTEGER Offset,
4463 _In_ ULARGE_INTEGER Length,
4464 _In_ ULONG LockType
4465 );
4466
4467 NTSYSAPI
4468 HRESULT
4469 NTAPI
4470 RtlCloneMemoryStream(
4471 _In_ struct IStream *This,
4472 _Outptr_ struct IStream **ResultStream
4473 );
4474
4475 #endif // NTOS_MODE_USER
4476
4477 NTSYSAPI
4478 NTSTATUS
4479 NTAPI
4480 RtlFindActivationContextSectionGuid(
4481 ULONG flags,
4482 const GUID *extguid,
4483 ULONG section_kind,
4484 const GUID *guid,
4485 void *ptr
4486 );
4487
4488 #ifdef __cplusplus
4489 }
4490 #endif
4491
4492 #endif