optimize hide curs lite. so it does not tryung update the underlying surface hold...
[reactos.git] / reactos / include / ndk / rtlfuncs.h
1 /*++ NDK Version: 0095
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 (alex.ionescu@reactos.com) 06-Oct-2004
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 <extypes.h>
28 #include <rtltypes.h>
29
30 #ifdef NTOS_MODE_USER
31
32 //
33 // List Functions
34 //
35 FORCEINLINE
36 VOID
37 InitializeListHead(
38 IN PLIST_ENTRY ListHead
39 )
40 {
41 ListHead->Flink = ListHead->Blink = ListHead;
42 }
43
44 FORCEINLINE
45 VOID
46 InsertHeadList(
47 IN PLIST_ENTRY ListHead,
48 IN PLIST_ENTRY Entry
49 )
50 {
51 PLIST_ENTRY OldFlink;
52 OldFlink = ListHead->Flink;
53 Entry->Flink = OldFlink;
54 Entry->Blink = ListHead;
55 OldFlink->Blink = Entry;
56 ListHead->Flink = Entry;
57 }
58
59 FORCEINLINE
60 VOID
61 InsertTailList(
62 IN PLIST_ENTRY ListHead,
63 IN PLIST_ENTRY Entry
64 )
65 {
66 PLIST_ENTRY OldBlink;
67 OldBlink = ListHead->Blink;
68 Entry->Flink = ListHead;
69 Entry->Blink = OldBlink;
70 OldBlink->Flink = Entry;
71 ListHead->Blink = Entry;
72 }
73
74 BOOLEAN
75 FORCEINLINE
76 IsListEmpty(
77 IN const LIST_ENTRY * ListHead
78 )
79 {
80 return (BOOLEAN)(ListHead->Flink == ListHead);
81 }
82
83 FORCEINLINE
84 PSINGLE_LIST_ENTRY
85 PopEntryList(
86 PSINGLE_LIST_ENTRY ListHead
87 )
88 {
89 PSINGLE_LIST_ENTRY FirstEntry;
90 FirstEntry = ListHead->Next;
91 if (FirstEntry != NULL) {
92 ListHead->Next = FirstEntry->Next;
93 }
94
95 return FirstEntry;
96 }
97
98 FORCEINLINE
99 VOID
100 PushEntryList(
101 PSINGLE_LIST_ENTRY ListHead,
102 PSINGLE_LIST_ENTRY Entry
103 )
104 {
105 Entry->Next = ListHead->Next;
106 ListHead->Next = Entry;
107 }
108
109 FORCEINLINE
110 BOOLEAN
111 RemoveEntryList(
112 IN PLIST_ENTRY Entry)
113 {
114 PLIST_ENTRY OldFlink;
115 PLIST_ENTRY OldBlink;
116
117 OldFlink = Entry->Flink;
118 OldBlink = Entry->Blink;
119 OldFlink->Blink = OldBlink;
120 OldBlink->Flink = OldFlink;
121 return (BOOLEAN)(OldFlink == OldBlink);
122 }
123
124 FORCEINLINE
125 PLIST_ENTRY
126 RemoveHeadList(
127 IN PLIST_ENTRY ListHead)
128 {
129 PLIST_ENTRY Flink;
130 PLIST_ENTRY Entry;
131
132 Entry = ListHead->Flink;
133 Flink = Entry->Flink;
134 ListHead->Flink = Flink;
135 Flink->Blink = ListHead;
136 return Entry;
137 }
138
139 FORCEINLINE
140 PLIST_ENTRY
141 RemoveTailList(
142 IN PLIST_ENTRY ListHead)
143 {
144 PLIST_ENTRY Blink;
145 PLIST_ENTRY Entry;
146
147 Entry = ListHead->Blink;
148 Blink = Entry->Blink;
149 ListHead->Blink = Blink;
150 Blink->Flink = ListHead;
151 return Entry;
152 }
153
154 //
155 // LUID Macros
156 //
157 #define RtlEqualLuid(L1, L2) (((L1)->HighPart == (L2)->HighPart) && \
158 ((L1)->LowPart == (L2)->LowPart))
159
160 #endif
161
162 //
163 // RTL Splay Tree Functions
164 //
165 NTSYSAPI
166 PRTL_SPLAY_LINKS
167 NTAPI
168 RtlSplay(PRTL_SPLAY_LINKS Links);
169
170 NTSYSAPI
171 PRTL_SPLAY_LINKS
172 NTAPI
173 RtlDelete(PRTL_SPLAY_LINKS Links);
174
175 NTSYSAPI
176 VOID
177 NTAPI
178 RtlDeleteNoSplay(
179 PRTL_SPLAY_LINKS Links,
180 PRTL_SPLAY_LINKS *Root
181 );
182
183 NTSYSAPI
184 PRTL_SPLAY_LINKS
185 NTAPI
186 RtlSubtreeSuccessor(PRTL_SPLAY_LINKS Links);
187
188 NTSYSAPI
189 PRTL_SPLAY_LINKS
190 NTAPI
191 RtlSubtreePredecessor(PRTL_SPLAY_LINKS Links);
192
193 NTSYSAPI
194 PRTL_SPLAY_LINKS
195 NTAPI
196 RtlRealSuccessor(PRTL_SPLAY_LINKS Links);
197
198 NTSYSAPI
199 PRTL_SPLAY_LINKS
200 NTAPI
201 RtlRealPredecessor(PRTL_SPLAY_LINKS Links);
202
203 #define RtlIsLeftChild(Links) \
204 (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
205
206 #define RtlIsRightChild(Links) \
207 (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
208
209 #define RtlRightChild(Links) \
210 ((PRTL_SPLAY_LINKS)(Links))->RightChild
211
212 #define RtlIsRoot(Links) \
213 (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
214
215 #define RtlLeftChild(Links) \
216 ((PRTL_SPLAY_LINKS)(Links))->LeftChild
217
218 #define RtlParent(Links) \
219 ((PRTL_SPLAY_LINKS)(Links))->Parent
220
221 #define RtlInitializeSplayLinks(Links) \
222 { \
223 PRTL_SPLAY_LINKS _SplayLinks; \
224 _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \
225 _SplayLinks->Parent = _SplayLinks; \
226 _SplayLinks->LeftChild = NULL; \
227 _SplayLinks->RightChild = NULL; \
228 }
229
230 #define RtlInsertAsLeftChild(ParentLinks,ChildLinks) \
231 { \
232 PRTL_SPLAY_LINKS _SplayParent; \
233 PRTL_SPLAY_LINKS _SplayChild; \
234 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
235 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
236 _SplayParent->LeftChild = _SplayChild; \
237 _SplayChild->Parent = _SplayParent; \
238 }
239
240 #define RtlInsertAsRightChild(ParentLinks,ChildLinks) \
241 { \
242 PRTL_SPLAY_LINKS _SplayParent; \
243 PRTL_SPLAY_LINKS _SplayChild; \
244 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
245 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
246 _SplayParent->RightChild = _SplayChild; \
247 _SplayChild->Parent = _SplayParent; \
248 }
249
250 //
251 // Error and Exception Functions
252 //
253 NTSYSAPI
254 PVOID
255 NTAPI
256 RtlAddVectoredExceptionHandler(
257 IN ULONG FirstHandler,
258 IN PVECTORED_EXCEPTION_HANDLER VectoredHandler
259 );
260
261 NTSYSAPI
262 VOID
263 NTAPI
264 RtlAssert(
265 PVOID FailedAssertion,
266 PVOID FileName,
267 ULONG LineNumber,
268 PCHAR Message
269 );
270
271 NTSYSAPI
272 VOID
273 NTAPI
274 RtlCaptureContext(OUT PCONTEXT ContextRecord);
275
276 NTSYSAPI
277 PVOID
278 NTAPI
279 RtlEncodePointer(IN PVOID Pointer);
280
281 NTSYSAPI
282 PVOID
283 NTAPI
284 RtlDecodePointer(IN PVOID Pointer);
285
286 NTSYSAPI
287 BOOLEAN
288 NTAPI
289 RtlDispatchException(
290 IN PEXCEPTION_RECORD ExceptionRecord,
291 IN PCONTEXT Context
292 );
293
294 NTSYSAPI
295 ULONG
296 NTAPI
297 RtlNtStatusToDosError(IN NTSTATUS Status);
298
299 NTSYSAPI
300 VOID
301 NTAPI
302 RtlRaiseException(IN PEXCEPTION_RECORD ExceptionRecord);
303
304 NTSYSAPI
305 VOID
306 NTAPI
307 RtlRaiseStatus(NTSTATUS Status);
308
309 NTSYSAPI
310 LONG
311 NTAPI
312 RtlUnhandledExceptionFilter(struct _EXCEPTION_POINTERS* ExceptionInfo);
313
314 NTSYSAPI
315 VOID
316 NTAPI
317 RtlUnwind(
318 IN PVOID TargetFrame OPTIONAL,
319 IN PVOID TargetIp OPTIONAL,
320 IN PEXCEPTION_RECORD ExceptionRecord OPTIONAL,
321 IN PVOID ReturnValue
322 );
323
324 //
325 // Heap Functions
326 //
327 NTSYSAPI
328 PVOID
329 NTAPI
330 RtlAllocateHeap(
331 IN HANDLE HeapHandle,
332 IN ULONG Flags,
333 IN ULONG Size
334 );
335
336 NTSYSAPI
337 PVOID
338 NTAPI
339 RtlCreateHeap(
340 IN ULONG Flags,
341 IN PVOID BaseAddress OPTIONAL,
342 IN SIZE_T SizeToReserve OPTIONAL,
343 IN SIZE_T SizeToCommit OPTIONAL,
344 IN PVOID Lock OPTIONAL,
345 IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL
346 );
347
348 ULONG
349 NTAPI
350 RtlCompactHeap(
351 HANDLE heap,
352 ULONG flags
353 );
354
355 NTSYSAPI
356 HANDLE
357 NTAPI
358 RtlDestroyHeap(HANDLE hheap);
359
360 NTSYSAPI
361 BOOLEAN
362 NTAPI
363 RtlFreeHeap(
364 IN HANDLE HeapHandle,
365 IN ULONG Flags,
366 IN PVOID P
367 );
368
369 ULONG
370 NTAPI
371 RtlGetProcessHeaps(
372 ULONG HeapCount,
373 HANDLE *HeapArray
374 );
375
376 PVOID
377 NTAPI
378 RtlReAllocateHeap(
379 HANDLE Heap,
380 ULONG Flags,
381 PVOID Ptr,
382 ULONG Size
383 );
384
385 BOOLEAN
386 NTAPI
387 RtlLockHeap(IN HANDLE Heap);
388
389 BOOLEAN
390 NTAPI
391 RtlUnlockHeap(IN HANDLE Heap);
392
393 ULONG
394 NTAPI
395 RtlSizeHeap(
396 IN PVOID HeapHandle,
397 IN ULONG Flags,
398 IN PVOID MemoryPointer
399 );
400
401 BOOLEAN
402 NTAPI
403 RtlValidateHeap(
404 HANDLE Heap,
405 ULONG Flags,
406 PVOID pmem
407 );
408
409 #define RtlGetProcessHeap() (NtCurrentPeb()->ProcessHeap)
410
411 //
412 // Security Functions
413 //
414 NTSYSAPI
415 NTSTATUS
416 NTAPI
417 RtlAbsoluteToSelfRelativeSD(
418 IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor,
419 IN OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor,
420 IN PULONG BufferLength
421 );
422
423 NTSYSAPI
424 NTSTATUS
425 NTAPI
426 RtlAddAccessAllowedAce(
427 PACL Acl,
428 ULONG Revision,
429 ACCESS_MASK AccessMask,
430 PSID Sid
431 );
432
433 NTSTATUS
434 NTAPI
435 RtlAddAccessAllowedAceEx(
436 IN OUT PACL pAcl,
437 IN ULONG dwAceRevision,
438 IN ULONG AceFlags,
439 IN ULONG AccessMask,
440 IN PSID pSid
441 );
442
443 NTSTATUS
444 NTAPI
445 RtlAddAccessDeniedAce(
446 PACL Acl,
447 ULONG Revision,
448 ACCESS_MASK AccessMask,
449 PSID Sid
450 );
451
452 NTSTATUS
453 NTAPI
454 RtlAddAccessDeniedAceEx(
455 IN OUT PACL Acl,
456 IN ULONG Revision,
457 IN ULONG Flags,
458 IN ACCESS_MASK AccessMask,
459 IN PSID Sid
460 );
461
462 NTSTATUS
463 NTAPI
464 RtlAddAuditAccessAceEx(
465 IN OUT PACL Acl,
466 IN ULONG Revision,
467 IN ULONG Flags,
468 IN ACCESS_MASK AccessMask,
469 IN PSID Sid,
470 IN BOOLEAN Success,
471 IN BOOLEAN Failure
472 );
473
474 NTSYSAPI
475 NTSTATUS
476 NTAPI
477 RtlAddAce(
478 PACL Acl,
479 ULONG AceRevision,
480 ULONG StartingAceIndex,
481 PVOID AceList,
482 ULONG AceListLength
483 );
484
485 NTSTATUS
486 NTAPI
487 RtlAddAuditAccessAce(
488 PACL Acl,
489 ULONG Revision,
490 ACCESS_MASK AccessMask,
491 PSID Sid,
492 BOOLEAN Success,
493 BOOLEAN Failure
494 );
495
496 NTSTATUS
497 NTAPI
498 RtlAdjustPrivilege(
499 IN ULONG Privilege,
500 IN BOOLEAN NewValue,
501 IN BOOLEAN ForThread,
502 OUT PBOOLEAN OldValue
503 );
504
505 NTSYSAPI
506 NTSTATUS
507 NTAPI
508 RtlAllocateAndInitializeSid(
509 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
510 IN UCHAR SubAuthorityCount,
511 IN ULONG SubAuthority0,
512 IN ULONG SubAuthority1,
513 IN ULONG SubAuthority2,
514 IN ULONG SubAuthority3,
515 IN ULONG SubAuthority4,
516 IN ULONG SubAuthority5,
517 IN ULONG SubAuthority6,
518 IN ULONG SubAuthority7,
519 OUT PSID *Sid
520 );
521
522 BOOLEAN
523 NTAPI
524 RtlAreAllAccessesGranted(
525 ACCESS_MASK GrantedAccess,
526 ACCESS_MASK DesiredAccess
527 );
528
529 BOOLEAN
530 NTAPI
531 RtlAreAnyAccessesGranted(
532 ACCESS_MASK GrantedAccess,
533 ACCESS_MASK DesiredAccess
534 );
535
536 NTSYSAPI
537 VOID
538 NTAPI
539 RtlCopyLuid(
540 IN PLUID LuidDest,
541 IN PLUID LuidSrc
542 );
543
544 VOID
545 NTAPI
546 RtlCopyLuidAndAttributesArray(
547 ULONG Count,
548 PLUID_AND_ATTRIBUTES Src,
549 PLUID_AND_ATTRIBUTES Dest
550 );
551
552 NTSTATUS
553 NTAPI
554 RtlCopySidAndAttributesArray(
555 ULONG Count,
556 PSID_AND_ATTRIBUTES Src,
557 ULONG SidAreaSize,
558 PSID_AND_ATTRIBUTES Dest,
559 PVOID SidArea,
560 PVOID* RemainingSidArea,
561 PULONG RemainingSidAreaSize
562 );
563
564 NTSTATUS
565 NTAPI
566 RtlConvertSidToUnicodeString(
567 OUT PUNICODE_STRING DestinationString,
568 IN PSID Sid,
569 IN BOOLEAN AllocateDestinationString
570 );
571
572 NTSYSAPI
573 NTSTATUS
574 NTAPI
575 RtlCopySid(
576 IN ULONG Length,
577 IN PSID Destination,
578 IN PSID Source
579 );
580
581 NTSYSAPI
582 NTSTATUS
583 NTAPI
584 RtlCreateAcl(
585 PACL Acl,
586 ULONG AclSize,
587 ULONG AclRevision
588 );
589
590 NTSYSAPI
591 NTSTATUS
592 NTAPI
593 RtlCreateSecurityDescriptor(
594 OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
595 IN ULONG Revision
596 );
597
598 NTSYSAPI
599 NTSTATUS
600 NTAPI
601 RtlCreateSecurityDescriptorRelative(
602 OUT PISECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor,
603 IN ULONG Revision
604 );
605
606 NTSYSAPI
607 NTSTATUS
608 NTAPI
609 RtlDeleteAce(
610 PACL Acl,
611 ULONG AceIndex
612 );
613
614 NTSYSAPI
615 BOOLEAN
616 NTAPI
617 RtlEqualPrefixSid(
618 PSID Sid1,
619 PSID Sid2
620 );
621
622 NTSYSAPI
623 BOOLEAN
624 NTAPI
625 RtlEqualSid (
626 IN PSID Sid1,
627 IN PSID Sid2
628 );
629
630 BOOLEAN
631 NTAPI
632 RtlFirstFreeAce(
633 PACL Acl,
634 PACE* Ace
635 );
636
637 NTSYSAPI
638 PVOID
639 NTAPI
640 RtlFreeSid (
641 IN PSID Sid
642 );
643
644 NTSYSAPI
645 NTSTATUS
646 NTAPI
647 RtlGetAce(
648 PACL Acl,
649 ULONG AceIndex,
650 PVOID *Ace
651 );
652
653 NTSTATUS
654 NTAPI
655 RtlGetControlSecurityDescriptor(
656 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
657 OUT PSECURITY_DESCRIPTOR_CONTROL Control,
658 OUT PULONG Revision
659 );
660
661 NTSYSAPI
662 NTSTATUS
663 NTAPI
664 RtlGetDaclSecurityDescriptor(
665 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
666 OUT PBOOLEAN DaclPresent,
667 OUT PACL *Dacl,
668 OUT PBOOLEAN DaclDefaulted
669 );
670
671 NTSYSAPI
672 NTSTATUS
673 NTAPI
674 RtlGetSaclSecurityDescriptor(
675 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
676 OUT PBOOLEAN SaclPresent,
677 OUT PACL* Sacl,
678 OUT PBOOLEAN SaclDefaulted
679 );
680
681 NTSYSAPI
682 NTSTATUS
683 NTAPI
684 RtlGetGroupSecurityDescriptor(
685 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
686 OUT PSID *Group,
687 OUT PBOOLEAN GroupDefaulted
688 );
689
690 NTSYSAPI
691 NTSTATUS
692 NTAPI
693 RtlGetOwnerSecurityDescriptor(
694 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
695 OUT PSID *Owner,
696 OUT PBOOLEAN OwnerDefaulted
697 );
698
699 NTSYSAPI
700 BOOLEAN
701 NTAPI
702 RtlGetSecurityDescriptorRMControl(
703 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
704 OUT PUCHAR RMControl
705 );
706
707 NTSYSAPI
708 PSID_IDENTIFIER_AUTHORITY
709 NTAPI
710 RtlIdentifierAuthoritySid(PSID Sid);
711
712 NTSYSAPI
713 NTSTATUS
714 NTAPI
715 RtlImpersonateSelf(IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel);
716
717 NTSYSAPI
718 NTSTATUS
719 NTAPI
720 RtlInitializeSid(
721 IN OUT PSID Sid,
722 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
723 IN UCHAR SubAuthorityCount
724 );
725
726 NTSYSAPI
727 ULONG
728 NTAPI
729 RtlLengthRequiredSid(IN ULONG SubAuthorityCount);
730
731 NTSYSAPI
732 ULONG
733 NTAPI
734 RtlLengthSid(IN PSID Sid);
735
736 NTSYSAPI
737 NTSTATUS
738 NTAPI
739 RtlMakeSelfRelativeSD(
740 IN PSECURITY_DESCRIPTOR AbsoluteSD,
741 OUT PSECURITY_DESCRIPTOR SelfRelativeSD,
742 IN OUT PULONG BufferLength);
743
744 NTSYSAPI
745 VOID
746 NTAPI
747 RtlMapGenericMask(
748 PACCESS_MASK AccessMask,
749 PGENERIC_MAPPING GenericMapping
750 );
751
752 NTSYSAPI
753 NTSTATUS
754 NTAPI
755 RtlQueryInformationAcl(
756 PACL Acl,
757 PVOID Information,
758 ULONG InformationLength,
759 ACL_INFORMATION_CLASS InformationClass
760 );
761
762 NTSYSAPI
763 NTSTATUS
764 NTAPI
765 RtlSelfRelativeToAbsoluteSD(
766 IN PSECURITY_DESCRIPTOR SelfRelativeSD,
767 OUT PSECURITY_DESCRIPTOR AbsoluteSD,
768 IN PULONG AbsoluteSDSize,
769 IN PACL Dacl,
770 IN PULONG DaclSize,
771 IN PACL Sacl,
772 IN PULONG SaclSize,
773 IN PSID Owner,
774 IN PULONG OwnerSize,
775 IN PSID PrimaryGroup,
776 IN PULONG PrimaryGroupSize
777 );
778
779 NTSYSAPI
780 NTSTATUS
781 NTAPI
782 RtlSelfRelativeToAbsoluteSD2(
783 IN OUT PSECURITY_DESCRIPTOR SelfRelativeSD,
784 OUT PULONG BufferSize
785 );
786
787 NTSYSAPI
788 NTSTATUS
789 NTAPI
790 RtlSetAttributesSecurityDescriptor(
791 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
792 IN SECURITY_DESCRIPTOR_CONTROL Control,
793 OUT PULONG Revision
794 );
795
796 NTSYSAPI
797 NTSTATUS
798 NTAPI
799 RtlSetControlSecurityDescriptor(
800 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
801 IN SECURITY_DESCRIPTOR_CONTROL ControlBitsOfInterest,
802 IN SECURITY_DESCRIPTOR_CONTROL ControlBitsToSet
803 );
804
805 NTSYSAPI
806 NTSTATUS
807 NTAPI
808 RtlSetDaclSecurityDescriptor (
809 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
810 IN BOOLEAN DaclPresent,
811 IN PACL Dacl,
812 IN BOOLEAN DaclDefaulted
813 );
814
815 NTSYSAPI
816 NTSTATUS
817 NTAPI
818 RtlSetGroupSecurityDescriptor(
819 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
820 IN PSID Group,
821 IN BOOLEAN GroupDefaulted
822 );
823
824 NTSYSAPI
825 NTSTATUS
826 NTAPI
827 RtlSetInformationAcl(
828 PACL Acl,
829 PVOID Information,
830 ULONG InformationLength,
831 ACL_INFORMATION_CLASS InformationClass
832 );
833
834 NTSYSAPI
835 NTSTATUS
836 NTAPI
837 RtlSetOwnerSecurityDescriptor(
838 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
839 IN PSID Owner,
840 IN BOOLEAN OwnerDefaulted
841 );
842
843 NTSYSAPI
844 NTSTATUS
845 NTAPI
846 RtlSetSaclSecurityDescriptor(
847 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
848 IN BOOLEAN SaclPresent,
849 IN PACL Sacl,
850 IN BOOLEAN SaclDefaulted
851 );
852
853 NTSYSAPI
854 VOID
855 NTAPI
856 RtlSetSecurityDescriptorRMControl(
857 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
858 IN PUCHAR RMControl
859 );
860
861 NTSYSAPI
862 PUCHAR
863 NTAPI
864 RtlSubAuthorityCountSid(
865 IN PSID Sid
866 );
867
868 NTSYSAPI
869 PULONG
870 NTAPI
871 RtlSubAuthoritySid(
872 IN PSID Sid,
873 IN ULONG SubAuthority
874 );
875
876 NTSYSAPI
877 BOOLEAN
878 NTAPI
879 RtlValidRelativeSecurityDescriptor(
880 IN PSECURITY_DESCRIPTOR SecurityDescriptorInput,
881 IN ULONG SecurityDescriptorLength,
882 IN SECURITY_INFORMATION RequiredInformation
883 );
884
885 NTSYSAPI
886 BOOLEAN
887 NTAPI
888 RtlValidSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor);
889
890 NTSYSAPI
891 BOOLEAN
892 NTAPI
893 RtlValidSid(IN PSID Sid);
894
895 NTSYSAPI
896 BOOLEAN
897 NTAPI
898 RtlValidAcl(PACL Acl);
899
900 NTSYSAPI
901 NTSTATUS
902 NTAPI
903 RtlDeleteSecurityObject(
904 IN PSECURITY_DESCRIPTOR *ObjectDescriptor
905 );
906
907 NTSYSAPI
908 NTSTATUS
909 NTAPI
910 RtlNewSecurityObject(
911 IN PSECURITY_DESCRIPTOR ParentDescriptor,
912 IN PSECURITY_DESCRIPTOR CreatorDescriptor,
913 OUT PSECURITY_DESCRIPTOR *NewDescriptor,
914 IN BOOLEAN IsDirectoryObject,
915 IN HANDLE Token,
916 IN PGENERIC_MAPPING GenericMapping
917 );
918
919 NTSYSAPI
920 NTSTATUS
921 NTAPI
922 RtlQuerySecurityObject(
923 IN PSECURITY_DESCRIPTOR ObjectDescriptor,
924 IN SECURITY_INFORMATION SecurityInformation,
925 OUT PSECURITY_DESCRIPTOR ResultantDescriptor,
926 IN ULONG DescriptorLength,
927 OUT PULONG ReturnLength
928 );
929
930 NTSYSAPI
931 NTSTATUS
932 NTAPI
933 RtlSetSecurityObject(
934 IN SECURITY_INFORMATION SecurityInformation,
935 IN PSECURITY_DESCRIPTOR ModificationDescriptor,
936 OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
937 IN PGENERIC_MAPPING GenericMapping,
938 IN HANDLE Token
939 );
940
941 //
942 // Single-Character Functions
943 //
944 NTSYSAPI
945 NTSTATUS
946 NTAPI
947 RtlLargeIntegerToChar(
948 IN PLARGE_INTEGER Value,
949 IN ULONG Base,
950 IN ULONG Length,
951 IN OUT PCHAR String
952 );
953
954 NTSYSAPI
955 CHAR
956 NTAPI
957 RtlUpperChar(CHAR Source);
958
959 NTSYSAPI
960 WCHAR
961 NTAPI
962 RtlUpcaseUnicodeChar(WCHAR Source);
963
964 NTSYSAPI
965 WCHAR
966 NTAPI
967 RtlDowncaseUnicodeChar(IN WCHAR Source);
968
969 NTSYSAPI
970 NTSTATUS
971 NTAPI
972 RtlIntegerToChar(
973 IN ULONG Value,
974 IN ULONG Base,
975 IN ULONG Length,
976 IN OUT PCHAR String
977 );
978
979 NTSYSAPI
980 NTSTATUS
981 NTAPI
982 RtlIntegerToUnicode(
983 IN ULONG Value,
984 IN ULONG Base OPTIONAL,
985 IN ULONG Length OPTIONAL,
986 IN OUT LPWSTR String
987 );
988
989 NTSYSAPI
990 NTSTATUS
991 NTAPI
992 RtlIntegerToUnicodeString(
993 IN ULONG Value,
994 IN ULONG Base,
995 IN OUT PUNICODE_STRING String
996 );
997
998 NTSYSAPI
999 NTSTATUS
1000 NTAPI
1001 RtlCharToInteger(
1002 PCSZ String,
1003 ULONG Base,
1004 PULONG Value
1005 );
1006
1007 //
1008 // Byte Swap Functions
1009 //
1010 #if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037)) || \
1011 ((defined(_M_AMD64) || \
1012 defined(_M_IA64)) && (_MSC_FULL_VER > 13009175))
1013
1014 unsigned short __cdecl _byteswap_ushort(unsigned short);
1015 unsigned long __cdecl _byteswap_ulong (unsigned long);
1016 unsigned __int64 __cdecl _byteswap_uint64(unsigned __int64);
1017 #pragma intrinsic(_byteswap_ushort)
1018 #pragma intrinsic(_byteswap_ulong)
1019 #pragma intrinsic(_byteswap_uint64)
1020 #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
1021 #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
1022 #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
1023
1024 #else
1025
1026 USHORT
1027 FASTCALL
1028 RtlUshortByteSwap(IN USHORT Source);
1029
1030 ULONG
1031 FASTCALL
1032 RtlUlongByteSwap(IN ULONG Source);
1033
1034 ULONGLONG
1035 FASTCALL
1036 RtlUlonglongByteSwap(IN ULONGLONG Source);
1037
1038 #endif
1039
1040 //
1041 // Unicode->Ansi String Functions
1042 //
1043 NTSYSAPI
1044 ULONG
1045 NTAPI
1046 RtlxUnicodeStringToAnsiSize(IN PCUNICODE_STRING UnicodeString);
1047
1048 #ifdef NTOS_MODE_USER
1049
1050 #define RtlUnicodeStringToAnsiSize(STRING) ( \
1051 NLS_MB_CODE_PAGE_TAG ? \
1052 RtlxUnicodeStringToAnsiSize(STRING) : \
1053 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
1054 )
1055
1056 #endif
1057
1058 NTSYSAPI
1059 NTSTATUS
1060 NTAPI
1061 RtlUnicodeStringToAnsiString(
1062 PANSI_STRING DestinationString,
1063 PCUNICODE_STRING SourceString,
1064 BOOLEAN AllocateDestinationString
1065 );
1066
1067 //
1068 // Unicode->OEM String Functions
1069 //
1070 NTSYSAPI
1071 NTSTATUS
1072 NTAPI
1073 RtlUpcaseUnicodeStringToOemString(
1074 POEM_STRING DestinationString,
1075 PCUNICODE_STRING SourceString,
1076 BOOLEAN AllocateDestinationString
1077 );
1078
1079 NTSYSAPI
1080 NTSTATUS
1081 NTAPI
1082 RtlUpcaseUnicodeStringToCountedOemString(
1083 IN OUT POEM_STRING DestinationString,
1084 IN PCUNICODE_STRING SourceString,
1085 IN BOOLEAN AllocateDestinationString
1086 );
1087
1088 NTSYSAPI
1089 NTSTATUS
1090 NTAPI
1091 RtlUnicodeStringToOemString(
1092 POEM_STRING DestinationString,
1093 PCUNICODE_STRING SourceString,
1094 BOOLEAN AllocateDestinationString
1095 );
1096
1097 NTSYSAPI
1098 NTSTATUS
1099 NTAPI
1100 RtlUpcaseUnicodeToOemN(
1101 PCHAR OemString,
1102 ULONG OemSize,
1103 PULONG ResultSize,
1104 PWCHAR UnicodeString,
1105 ULONG UnicodeSize
1106 );
1107
1108 NTSYSAPI
1109 ULONG
1110 NTAPI
1111 RtlxUnicodeStringToOemSize(IN PCUNICODE_STRING UnicodeString);
1112
1113 #ifdef NTOS_MODE_USER
1114
1115 #define RtlUnicodeStringToOemSize(STRING) ( \
1116 NLS_MB_OEM_CODE_PAGE_TAG ? \
1117 RtlxUnicodeStringToOemSize(STRING) : \
1118 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
1119 )
1120
1121 #define RtlUnicodeStringToCountedOemSize(STRING) ( \
1122 (ULONG)(RtlUnicodeStringToOemSize(STRING) - sizeof(ANSI_NULL)) \
1123 )
1124
1125 #endif
1126
1127 NTSYSAPI
1128 NTSTATUS
1129 NTAPI
1130 RtlUnicodeToOemN(
1131 PCHAR OemString,
1132 ULONG OemSize,
1133 PULONG ResultSize,
1134 PWCHAR UnicodeString,
1135 ULONG UnicodeSize
1136 );
1137
1138 //
1139 // Unicode->MultiByte String Functions
1140 //
1141 NTSYSAPI
1142 NTSTATUS
1143 NTAPI
1144 RtlUnicodeToMultiByteN(
1145 PCHAR MbString,
1146 ULONG MbSize,
1147 PULONG ResultSize,
1148 PWCHAR UnicodeString,
1149 ULONG UnicodeSize
1150 );
1151
1152 NTSYSAPI
1153 NTSTATUS
1154 NTAPI
1155 RtlUpcaseUnicodeToMultiByteN(
1156 PCHAR MbString,
1157 ULONG MbSize,
1158 PULONG ResultSize,
1159 PWCHAR UnicodeString,
1160 ULONG UnicodeSize
1161 );
1162
1163 NTSYSAPI
1164 NTSTATUS
1165 NTAPI
1166 RtlUnicodeToMultiByteSize(
1167 PULONG MbSize,
1168 PWCHAR UnicodeString,
1169 ULONG UnicodeSize
1170 );
1171
1172 NTSYSAPI
1173 ULONG
1174 NTAPI
1175 RtlxOemStringToUnicodeSize(IN PCOEM_STRING OemString);
1176
1177 //
1178 // OEM to Unicode Functions
1179 //
1180 NTSYSAPI
1181 NTSTATUS
1182 NTAPI
1183 RtlOemStringToUnicodeString(
1184 PUNICODE_STRING DestinationString,
1185 PCOEM_STRING SourceString,
1186 BOOLEAN AllocateDestinationString
1187 );
1188
1189 NTSYSAPI
1190 NTSTATUS
1191 NTAPI
1192 RtlOemToUnicodeN(
1193 PWSTR UnicodeString,
1194 ULONG MaxBytesInUnicodeString,
1195 PULONG BytesInUnicodeString,
1196 IN PCHAR OemString,
1197 ULONG BytesInOemString
1198 );
1199
1200 #ifdef NTOS_MODE_USER
1201
1202 #define RtlOemStringToUnicodeSize(STRING) ( \
1203 NLS_MB_OEM_CODE_PAGE_TAG ? \
1204 RtlxOemStringToUnicodeSize(STRING) : \
1205 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
1206 )
1207
1208 #define RtlOemStringToCountedUnicodeSize(STRING) ( \
1209 (ULONG)(RtlOemStringToUnicodeSize(STRING) - sizeof(UNICODE_NULL)) \
1210 )
1211
1212 #endif
1213
1214 //
1215 // Ansi->Unicode String Functions
1216 //
1217 NTSYSAPI
1218 ULONG
1219 NTAPI
1220 RtlxAnsiStringToUnicodeSize(
1221 PCANSI_STRING AnsiString
1222 );
1223
1224 NTSYSAPI
1225 NTSTATUS
1226 NTAPI
1227 RtlAnsiStringToUnicodeString(
1228 PUNICODE_STRING DestinationString,
1229 PCANSI_STRING SourceString,
1230 BOOLEAN AllocateDestinationString
1231 );
1232
1233 #ifdef NTOS_MODE_USER
1234
1235 #define RtlAnsiStringToUnicodeSize(STRING) ( \
1236 NLS_MB_CODE_PAGE_TAG ? \
1237 RtlxAnsiStringToUnicodeSize(STRING) : \
1238 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
1239 )
1240
1241 #endif
1242
1243 NTSYSAPI
1244 BOOLEAN
1245 NTAPI
1246 RtlCreateUnicodeStringFromAsciiz(
1247 OUT PUNICODE_STRING Destination,
1248 IN PCSZ Source
1249 );
1250
1251 //
1252 // Unicode String Functions
1253 //
1254 NTSYSAPI
1255 NTSTATUS
1256 NTAPI
1257 RtlAppendUnicodeToString(
1258 PUNICODE_STRING Destination,
1259 PCWSTR Source
1260 );
1261
1262 NTSYSAPI
1263 NTSTATUS
1264 NTAPI
1265 RtlAppendUnicodeStringToString(
1266 PUNICODE_STRING Destination,
1267 PCUNICODE_STRING Source
1268 );
1269
1270 NTSYSAPI
1271 LONG
1272 NTAPI
1273 RtlCompareUnicodeString(
1274 PCUNICODE_STRING String1,
1275 PCUNICODE_STRING String2,
1276 BOOLEAN CaseInsensitive
1277 );
1278
1279 NTSYSAPI
1280 VOID
1281 NTAPI
1282 RtlCopyUnicodeString(
1283 PUNICODE_STRING DestinationString,
1284 PCUNICODE_STRING SourceString
1285 );
1286
1287 NTSYSAPI
1288 BOOLEAN
1289 NTAPI
1290 RtlCreateUnicodeString(
1291 PUNICODE_STRING DestinationString,
1292 PCWSTR SourceString
1293 );
1294
1295 #ifdef NTOS_MODE_USER
1296
1297 NTSYSAPI
1298 NTSTATUS
1299 NTAPI
1300 RtlDowncaseUnicodeString(
1301 IN OUT PUNICODE_STRING UniDest,
1302 IN PCUNICODE_STRING UniSource,
1303 IN BOOLEAN AllocateDestinationString
1304 );
1305
1306 #endif
1307
1308 NTSYSAPI
1309 NTSTATUS
1310 NTAPI
1311 RtlDuplicateUnicodeString(
1312 IN ULONG Flags,
1313 IN PCUNICODE_STRING SourceString,
1314 OUT PUNICODE_STRING DestinationString
1315 );
1316
1317 NTSYSAPI
1318 BOOLEAN
1319 NTAPI
1320 RtlEqualUnicodeString(
1321 PCUNICODE_STRING String1,
1322 PCUNICODE_STRING String2,
1323 BOOLEAN CaseInsensitive
1324 );
1325
1326 NTSYSAPI
1327 VOID
1328 NTAPI
1329 RtlFreeUnicodeString(IN PUNICODE_STRING UnicodeString);
1330
1331 NTSYSAPI
1332 NTSTATUS
1333 NTAPI
1334 RtlHashUnicodeString(
1335 IN CONST UNICODE_STRING *String,
1336 IN BOOLEAN CaseInSensitive,
1337 IN ULONG HashAlgorithm,
1338 OUT PULONG HashValue
1339 );
1340
1341 NTSYSAPI
1342 VOID
1343 NTAPI
1344 RtlInitUnicodeString(
1345 IN OUT PUNICODE_STRING DestinationString,
1346 IN PCWSTR SourceString);
1347
1348 NTSYSAPI
1349 ULONG
1350 NTAPI
1351 RtlIsTextUnicode(
1352 PVOID Buffer,
1353 ULONG Length,
1354 ULONG *Flags
1355 );
1356
1357 NTSYSAPI
1358 BOOLEAN
1359 NTAPI
1360 RtlPrefixString(
1361 PCANSI_STRING String1,
1362 PCANSI_STRING String2,
1363 BOOLEAN CaseInsensitive
1364 );
1365
1366 NTSYSAPI
1367 BOOLEAN
1368 NTAPI
1369 RtlPrefixUnicodeString(
1370 PCUNICODE_STRING String1,
1371 PCUNICODE_STRING String2,
1372 BOOLEAN CaseInsensitive
1373 );
1374
1375 NTSYSAPI
1376 NTSTATUS
1377 NTAPI
1378 RtlUpcaseUnicodeString(
1379 PUNICODE_STRING DestinationString,
1380 PCUNICODE_STRING SourceString,
1381 BOOLEAN AllocateDestinationString
1382 );
1383
1384 NTSYSAPI
1385 NTSTATUS
1386 NTAPI
1387 RtlUnicodeStringToInteger(
1388 PCUNICODE_STRING String,
1389 ULONG Base,
1390 PULONG Value
1391 );
1392
1393 //
1394 // Ansi String Functions
1395 //
1396 NTSYSAPI
1397 VOID
1398 NTAPI
1399 RtlFreeAnsiString(IN PANSI_STRING AnsiString);
1400
1401 NTSYSAPI
1402 VOID
1403 NTAPI
1404 RtlInitAnsiString(
1405 PANSI_STRING DestinationString,
1406 PCSZ SourceString
1407 );
1408
1409 //
1410 // OEM String Functions
1411 //
1412 NTSYSAPI
1413 VOID
1414 NTAPI
1415 RtlFreeOemString(IN POEM_STRING OemString);
1416
1417 //
1418 // MultiByte->Unicode String Functions
1419 //
1420 NTSYSAPI
1421 NTSTATUS
1422 NTAPI
1423 RtlMultiByteToUnicodeN(
1424 PWCHAR UnicodeString,
1425 ULONG UnicodeSize,
1426 PULONG ResultSize,
1427 PCSTR MbString,
1428 ULONG MbSize
1429 );
1430
1431 NTSYSAPI
1432 NTSTATUS
1433 NTAPI
1434 RtlMultiByteToUnicodeSize(
1435 PULONG UnicodeSize,
1436 PCSTR MbString,
1437 ULONG MbSize
1438 );
1439
1440 //
1441 // Atom Functions
1442 //
1443 NTSYSAPI
1444 NTSTATUS
1445 NTAPI
1446 RtlAddAtomToAtomTable(
1447 IN PRTL_ATOM_TABLE AtomTable,
1448 IN PWSTR AtomName,
1449 OUT PRTL_ATOM Atom
1450 );
1451
1452 NTSYSAPI
1453 NTSTATUS
1454 NTAPI
1455 RtlCreateAtomTable(
1456 IN ULONG TableSize,
1457 IN OUT PRTL_ATOM_TABLE *AtomTable
1458 );
1459
1460 NTSYSAPI
1461 NTSTATUS
1462 NTAPI
1463 RtlDeleteAtomFromAtomTable(
1464 IN PRTL_ATOM_TABLE AtomTable,
1465 IN RTL_ATOM Atom
1466 );
1467
1468 NTSYSAPI
1469 NTSTATUS
1470 NTAPI
1471 RtlDestroyAtomTable(IN PRTL_ATOM_TABLE AtomTable);
1472
1473 NTSYSAPI
1474 NTSTATUS
1475 NTAPI
1476 RtlQueryAtomInAtomTable(
1477 IN PRTL_ATOM_TABLE AtomTable,
1478 IN RTL_ATOM Atom,
1479 IN OUT PULONG RefCount OPTIONAL,
1480 IN OUT PULONG PinCount OPTIONAL,
1481 IN OUT PWSTR AtomName OPTIONAL,
1482 IN OUT PULONG NameLength OPTIONAL
1483 );
1484
1485 NTSYSAPI
1486 NTSTATUS
1487 NTAPI
1488 RtlPinAtomInAtomTable(
1489 IN PRTL_ATOM_TABLE AtomTable,
1490 IN RTL_ATOM Atom
1491 );
1492
1493 NTSYSAPI
1494 NTSTATUS
1495 NTAPI
1496 RtlLookupAtomInAtomTable(
1497 IN PRTL_ATOM_TABLE AtomTable,
1498 IN PWSTR AtomName,
1499 OUT PRTL_ATOM Atom
1500 );
1501
1502 //
1503 // Memory Functions
1504 //
1505 NTSYSAPI
1506 VOID
1507 NTAPI
1508 RtlFillMemoryUlong(
1509 IN PVOID Destination,
1510 IN ULONG Length,
1511 IN ULONG Fill
1512 );
1513
1514 //
1515 // Process Management Functions
1516 //
1517 NTSYSAPI
1518 VOID
1519 NTAPI
1520 RtlAcquirePebLock(VOID);
1521
1522 NTSYSAPI
1523 NTSTATUS
1524 NTAPI
1525 RtlCreateProcessParameters (
1526 OUT PRTL_USER_PROCESS_PARAMETERS *ProcessParameters,
1527 IN PUNICODE_STRING ImagePathName OPTIONAL,
1528 IN PUNICODE_STRING DllPath OPTIONAL,
1529 IN PUNICODE_STRING CurrentDirectory OPTIONAL,
1530 IN PUNICODE_STRING CommandLine OPTIONAL,
1531 IN PWSTR Environment OPTIONAL,
1532 IN PUNICODE_STRING WindowTitle OPTIONAL,
1533 IN PUNICODE_STRING DesktopInfo OPTIONAL,
1534 IN PUNICODE_STRING ShellInfo OPTIONAL,
1535 IN PUNICODE_STRING RuntimeInfo OPTIONAL
1536 );
1537
1538 NTSYSAPI
1539 NTSTATUS
1540 NTAPI
1541 RtlCreateUserProcess(
1542 IN PUNICODE_STRING ImageFileName,
1543 IN ULONG Attributes,
1544 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters,
1545 IN PSECURITY_DESCRIPTOR ProcessSecutityDescriptor OPTIONAL,
1546 IN PSECURITY_DESCRIPTOR ThreadSecurityDescriptor OPTIONAL,
1547 IN HANDLE ParentProcess OPTIONAL,
1548 IN BOOLEAN CurrentDirectory,
1549 IN HANDLE DebugPort OPTIONAL,
1550 IN HANDLE ExceptionPort OPTIONAL,
1551 OUT PRTL_USER_PROCESS_INFORMATION ProcessInfo
1552 );
1553
1554 NTSYSAPI
1555 NTSTATUS
1556 NTAPI
1557 RtlCreateUserThread(
1558 IN HANDLE ProcessHandle,
1559 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
1560 IN BOOLEAN CreateSuspended,
1561 IN LONG StackZeroBits,
1562 IN ULONG StackReserve,
1563 IN ULONG StackCommit,
1564 IN PTHREAD_START_ROUTINE StartAddress,
1565 IN PVOID Parameter,
1566 IN OUT PHANDLE ThreadHandle,
1567 IN OUT PCLIENT_ID ClientId
1568 );
1569
1570 NTSYSAPI
1571 PRTL_USER_PROCESS_PARAMETERS
1572 NTAPI
1573 RtlDeNormalizeProcessParams(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters);
1574
1575 NTSYSAPI
1576 NTSTATUS
1577 NTAPI
1578 RtlDestroyProcessParameters(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters);
1579
1580 NTSYSAPI
1581 VOID
1582 NTAPI
1583 RtlExitUserThread(NTSTATUS Status);
1584
1585 NTSYSAPI
1586 VOID
1587 NTAPI
1588 RtlInitializeContext(
1589 IN HANDLE ProcessHandle,
1590 OUT PCONTEXT ThreadContext,
1591 IN PVOID ThreadStartParam OPTIONAL,
1592 IN PTHREAD_START_ROUTINE ThreadStartAddress,
1593 IN PINITIAL_TEB InitialTeb
1594 );
1595
1596 NTSYSAPI
1597 PRTL_USER_PROCESS_PARAMETERS
1598 NTAPI
1599 RtlNormalizeProcessParams(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters);
1600
1601 NTSYSAPI
1602 VOID
1603 NTAPI
1604 RtlReleasePebLock(VOID);
1605
1606 NTSYSAPI
1607 VOID
1608 NTAPI
1609 RtlSetProcessIsCritical(
1610 IN BOOLEAN NewValue,
1611 OUT PBOOLEAN OldValue OPTIONAL,
1612 IN BOOLEAN IsWinlogon
1613 );
1614
1615 #define NtCurrentPeb() (NtCurrentTeb()->ProcessEnvironmentBlock)
1616
1617 //
1618 // Environment/Path Functions
1619 //
1620 NTSYSAPI
1621 NTSTATUS
1622 NTAPI
1623 RtlCreateEnvironment(
1624 BOOLEAN Inherit,
1625 PWSTR *Environment
1626 );
1627
1628 NTSYSAPI
1629 VOID
1630 NTAPI
1631 RtlDestroyEnvironment(PWSTR Environment);
1632
1633 NTSYSAPI
1634 BOOLEAN
1635 NTAPI
1636 RtlDoesFileExists_U(PWSTR FileName);
1637
1638 NTSYSAPI
1639 ULONG
1640 NTAPI
1641 RtlDetermineDosPathNameType_U(PCWSTR Path);
1642
1643 NTSYSAPI
1644 ULONG
1645 NTAPI
1646 RtlDosSearchPath_U(
1647 WCHAR *sp,
1648 WCHAR *name,
1649 WCHAR *ext,
1650 ULONG buf_sz,
1651 WCHAR *buffer,
1652 WCHAR **shortname
1653 );
1654
1655 NTSYSAPI
1656 BOOLEAN
1657 NTAPI
1658 RtlDosPathNameToNtPathName_U(
1659 IN PCWSTR DosPathName,
1660 OUT PUNICODE_STRING NtPathName,
1661 OUT PCWSTR *NtFileNamePart,
1662 OUT CURDIR *DirectoryInfo
1663 );
1664
1665 NTSYSAPI
1666 NTSTATUS
1667 NTAPI
1668 RtlExpandEnvironmentStrings_U(
1669 PWSTR Environment,
1670 PUNICODE_STRING Source,
1671 PUNICODE_STRING Destination,
1672 PULONG Length
1673 );
1674
1675 NTSYSAPI
1676 ULONG
1677 NTAPI
1678 RtlGetCurrentDirectory_U(
1679 ULONG MaximumLength,
1680 PWSTR Buffer
1681 );
1682
1683 NTSYSAPI
1684 ULONG
1685 NTAPI
1686 RtlGetFullPathName_U(
1687 const WCHAR *dosname,
1688 ULONG size,
1689 WCHAR *buf,
1690 WCHAR **shortname
1691 );
1692
1693 NTSYSAPI
1694 BOOLEAN
1695 NTAPI
1696 RtlIsNameLegalDOS8Dot3(
1697 IN PUNICODE_STRING UnicodeName,
1698 IN PANSI_STRING AnsiName,
1699 PBOOLEAN Unknown
1700 );
1701
1702 NTSYSAPI
1703 NTSTATUS
1704 NTAPI
1705 RtlQueryEnvironmentVariable_U(
1706 PWSTR Environment,
1707 PUNICODE_STRING Name,
1708 PUNICODE_STRING Value
1709 );
1710
1711 NTSYSAPI
1712 NTSTATUS
1713 NTAPI
1714 RtlSetCurrentDirectory_U(PUNICODE_STRING name);
1715
1716 NTSYSAPI
1717 NTSTATUS
1718 NTAPI
1719 RtlSetEnvironmentVariable(
1720 PWSTR *Environment,
1721 PUNICODE_STRING Name,
1722 PUNICODE_STRING Value
1723 );
1724
1725 //
1726 // Critical Section/Resource Functions
1727 //
1728 NTSYSAPI
1729 NTSTATUS
1730 NTAPI
1731 RtlDeleteCriticalSection (
1732 IN PRTL_CRITICAL_SECTION CriticalSection
1733 );
1734
1735 NTSYSAPI
1736 NTSTATUS
1737 NTAPI
1738 RtlEnterCriticalSection(
1739 IN PRTL_CRITICAL_SECTION CriticalSection
1740 );
1741
1742 NTSYSAPI
1743 NTSTATUS
1744 NTAPI
1745 RtlInitializeCriticalSection(
1746 IN PRTL_CRITICAL_SECTION CriticalSection
1747 );
1748
1749 NTSYSAPI
1750 NTSTATUS
1751 NTAPI
1752 RtlInitializeCriticalSectionAndSpinCount(
1753 IN PRTL_CRITICAL_SECTION CriticalSection,
1754 IN ULONG SpinCount
1755 );
1756
1757 NTSYSAPI
1758 NTSTATUS
1759 NTAPI
1760 RtlLeaveCriticalSection(
1761 IN PRTL_CRITICAL_SECTION CriticalSection
1762 );
1763
1764 NTSYSAPI
1765 VOID
1766 NTAPI
1767 RtlpUnWaitCriticalSection(
1768 IN PRTL_CRITICAL_SECTION CriticalSection
1769 );
1770
1771 NTSYSAPI
1772 NTSTATUS
1773 NTAPI
1774 RtlpWaitForCriticalSection(
1775 IN PRTL_CRITICAL_SECTION CriticalSection
1776 );
1777
1778 NTSYSAPI
1779 BOOLEAN
1780 NTAPI
1781 RtlAcquireResourceExclusive(
1782 IN PRTL_RESOURCE Resource,
1783 IN BOOLEAN Wait
1784 );
1785
1786 NTSYSAPI
1787 BOOLEAN
1788 NTAPI
1789 RtlAcquireResourceShared(
1790 IN PRTL_RESOURCE Resource,
1791 IN BOOLEAN Wait
1792 );
1793
1794 NTSYSAPI
1795 VOID
1796 NTAPI
1797 RtlConvertExclusiveToShared(
1798 IN PRTL_RESOURCE Resource
1799 );
1800
1801 NTSYSAPI
1802 VOID
1803 NTAPI
1804 RtlConvertSharedToExclusive(
1805 IN PRTL_RESOURCE Resource
1806 );
1807
1808 NTSYSAPI
1809 VOID
1810 NTAPI
1811 RtlDeleteResource(
1812 IN PRTL_RESOURCE Resource
1813 );
1814
1815 NTSYSAPI
1816 VOID
1817 NTAPI
1818 RtlDumpResource(
1819 IN PRTL_RESOURCE Resource
1820 );
1821
1822 NTSYSAPI
1823 VOID
1824 NTAPI
1825 RtlInitializeResource(
1826 IN PRTL_RESOURCE Resource
1827 );
1828
1829 NTSYSAPI
1830 VOID
1831 NTAPI
1832 RtlReleaseResource(
1833 IN PRTL_RESOURCE Resource
1834 );
1835
1836 //
1837 // Compression Functions
1838 //
1839 NTSYSAPI
1840 NTSTATUS
1841 NTAPI
1842 RtlCompressBuffer(
1843 IN USHORT CompressionFormatAndEngine,
1844 IN PUCHAR UncompressedBuffer,
1845 IN ULONG UncompressedBufferSize,
1846 OUT PUCHAR CompressedBuffer,
1847 IN ULONG CompressedBufferSize,
1848 IN ULONG UncompressedChunkSize,
1849 OUT PULONG FinalCompressedSize,
1850 IN PVOID WorkSpace
1851 );
1852
1853 NTSYSAPI
1854 NTSTATUS
1855 NTAPI
1856 RtlDecompressBuffer(
1857 IN USHORT CompressionFormat,
1858 OUT PUCHAR UncompressedBuffer,
1859 IN ULONG UncompressedBufferSize,
1860 IN PUCHAR CompressedBuffer,
1861 IN ULONG CompressedBufferSize,
1862 OUT PULONG FinalUncompressedSize
1863 );
1864
1865 NTSYSAPI
1866 NTSTATUS
1867 NTAPI
1868 RtlGetCompressionWorkSpaceSize(
1869 IN USHORT CompressionFormatAndEngine,
1870 OUT PULONG CompressBufferWorkSpaceSize,
1871 OUT PULONG CompressFragmentWorkSpaceSize
1872 );
1873
1874 //
1875 // Debug Info Functions
1876 //
1877 NTSYSAPI
1878 PRTL_DEBUG_BUFFER
1879 NTAPI
1880 RtlCreateQueryDebugBuffer(
1881 IN ULONG Size,
1882 IN BOOLEAN EventPair
1883 );
1884
1885 NTSYSAPI
1886 NTSTATUS
1887 NTAPI
1888 RtlDestroyQueryDebugBuffer(IN PRTL_DEBUG_BUFFER DebugBuffer);
1889
1890 NTSYSAPI
1891 NTSTATUS
1892 NTAPI
1893 RtlQueryProcessDebugInformation(
1894 IN ULONG ProcessId,
1895 IN ULONG DebugInfoClassMask,
1896 IN OUT PRTL_DEBUG_BUFFER DebugBuffer
1897 );
1898
1899 //
1900 // Bitmap Functions
1901 //
1902 NTSYSAPI
1903 BOOLEAN
1904 NTAPI
1905 RtlAreBitsClear(
1906 IN PRTL_BITMAP BitMapHeader,
1907 IN ULONG StartingIndex,
1908 IN ULONG Length
1909 );
1910
1911 NTSYSAPI
1912 BOOLEAN
1913 NTAPI
1914 RtlAreBitsSet(
1915 IN PRTL_BITMAP BitMapHeader,
1916 IN ULONG StartingIndex,
1917 IN ULONG Length
1918 );
1919
1920 NTSYSAPI
1921 VOID
1922 NTAPI
1923 RtlClearBits(
1924 IN PRTL_BITMAP BitMapHeader,
1925 IN ULONG StartingIndex,
1926 IN ULONG NumberToClear
1927 );
1928
1929 NTSYSAPI
1930 ULONG
1931 NTAPI
1932 RtlFindClearBits(
1933 IN PRTL_BITMAP BitMapHeader,
1934 IN ULONG NumberToFind,
1935 IN ULONG HintIndex
1936 );
1937
1938 NTSYSAPI
1939 ULONG
1940 NTAPI
1941 RtlFindClearBitsAndSet(
1942 IN PRTL_BITMAP BitMapHeader,
1943 IN ULONG NumberToFind,
1944 IN ULONG HintIndex
1945 );
1946
1947 NTSYSAPI
1948 VOID
1949 NTAPI
1950 RtlInitializeBitMap(
1951 IN PRTL_BITMAP BitMapHeader,
1952 IN PULONG BitMapBuffer,
1953 IN ULONG SizeOfBitMap
1954 );
1955
1956 NTSYSAPI
1957 VOID
1958 NTAPI
1959 RtlSetBits (
1960 IN PRTL_BITMAP BitMapHeader,
1961 IN ULONG StartingIndex,
1962 IN ULONG NumberToSet
1963 );
1964
1965 //
1966 // Timer Functions
1967 //
1968 NTSYSAPI
1969 NTSTATUS
1970 NTAPI
1971 RtlCreateTimer(
1972 HANDLE TimerQueue,
1973 PHANDLE phNewTimer,
1974 WAITORTIMERCALLBACKFUNC Callback,
1975 PVOID Parameter,
1976 ULONG DueTime,
1977 ULONG Period,
1978 ULONG Flags
1979 );
1980
1981 NTSYSAPI
1982 NTSTATUS
1983 NTAPI
1984 RtlCreateTimerQueue(PHANDLE TimerQueue);
1985
1986 NTSYSAPI
1987 NTSTATUS
1988 NTAPI
1989 RtlDeleteTimer(
1990 HANDLE TimerQueue,
1991 HANDLE Timer,
1992 HANDLE CompletionEvent
1993 );
1994
1995 NTSYSAPI
1996 NTSTATUS
1997 NTAPI
1998 RtlUpdateTimer(
1999 HANDLE TimerQueue,
2000 HANDLE Timer,
2001 ULONG DueTime,
2002 ULONG Period
2003 );
2004
2005 NTSYSAPI
2006 NTSTATUS
2007 NTAPI
2008 RtlDeleteTimerQueueEx(
2009 HANDLE TimerQueue,
2010 HANDLE CompletionEvent
2011 );
2012
2013 NTSYSAPI
2014 NTSTATUS
2015 NTAPI
2016 RtlDeleteTimerQueue(HANDLE TimerQueue);
2017
2018 //
2019 // Debug Functions
2020 //
2021 ULONG
2022 __cdecl
2023 DbgPrint(
2024 IN PCH Format,
2025 IN ...
2026 );
2027
2028 VOID
2029 NTAPI
2030 DbgBreakPoint(VOID);
2031
2032 //
2033 // Handle Table Functions
2034 //
2035 NTSYSAPI
2036 PRTL_HANDLE_TABLE_ENTRY
2037 NTAPI
2038 RtlAllocateHandle(
2039 IN PRTL_HANDLE_TABLE HandleTable,
2040 IN OUT PULONG Index
2041 );
2042
2043 NTSYSAPI
2044 VOID
2045 NTAPI
2046 RtlDestroyHandleTable(IN PRTL_HANDLE_TABLE HandleTable);
2047
2048 NTSYSAPI
2049 BOOLEAN
2050 NTAPI
2051 RtlFreeHandle(
2052 IN PRTL_HANDLE_TABLE HandleTable,
2053 IN PRTL_HANDLE_TABLE_ENTRY Handle
2054 );
2055
2056 NTSYSAPI
2057 VOID
2058 NTAPI
2059 RtlInitializeHandleTable(
2060 IN ULONG TableSize,
2061 IN ULONG HandleSize,
2062 IN PRTL_HANDLE_TABLE HandleTable
2063 );
2064
2065 NTSYSAPI
2066 BOOLEAN
2067 NTAPI
2068 RtlIsValidHandle(
2069 IN PRTL_HANDLE_TABLE HandleTable,
2070 IN PRTL_HANDLE_TABLE_ENTRY Handle
2071 );
2072
2073 NTSYSAPI
2074 BOOLEAN
2075 NTAPI
2076 RtlIsValidIndexHandle(
2077 IN PRTL_HANDLE_TABLE HandleTable,
2078 IN ULONG Index,
2079 OUT PRTL_HANDLE_TABLE_ENTRY *Handle
2080 );
2081
2082 //
2083 // PE Functions
2084 //
2085 NTSYSAPI
2086 NTSTATUS
2087 NTAPI
2088 RtlFindMessage(
2089 IN PVOID BaseAddress,
2090 IN ULONG Type,
2091 IN ULONG Language,
2092 IN ULONG MessageId,
2093 OUT PRTL_MESSAGE_RESOURCE_ENTRY *MessageResourceEntry
2094 );
2095
2096 NTSYSAPI
2097 ULONG
2098 NTAPI
2099 RtlGetNtGlobalFlags(VOID);
2100
2101 NTSYSAPI
2102 PVOID
2103 NTAPI
2104 RtlImageDirectoryEntryToData(
2105 PVOID BaseAddress,
2106 BOOLEAN bFlag,
2107 ULONG Directory,
2108 PULONG Size
2109 );
2110
2111 NTSYSAPI
2112 PVOID
2113 NTAPI
2114 RtlImageRvaToVa(
2115 PIMAGE_NT_HEADERS NtHeader,
2116 PVOID BaseAddress,
2117 ULONG Rva,
2118 PIMAGE_SECTION_HEADER *SectionHeader
2119 );
2120
2121 NTSYSAPI
2122 PIMAGE_NT_HEADERS
2123 NTAPI
2124 RtlImageNtHeader(IN PVOID BaseAddress);
2125
2126 NTSYSAPI
2127 PIMAGE_SECTION_HEADER
2128 NTAPI
2129 RtlImageRvaToSection(
2130 PIMAGE_NT_HEADERS NtHeader,
2131 PVOID BaseAddress,
2132 ULONG Rva
2133 );
2134
2135 //
2136 // Registry Functions
2137 //
2138 NTSYSAPI
2139 NTSTATUS
2140 NTAPI
2141 RtlCheckRegistryKey(
2142 ULONG RelativeTo,
2143 PWSTR Path
2144 );
2145
2146 NTSYSAPI
2147 NTSTATUS
2148 NTAPI
2149 RtlFormatCurrentUserKeyPath(IN OUT PUNICODE_STRING KeyPath);
2150
2151 NTSYSAPI
2152 NTSTATUS
2153 NTAPI
2154 RtlpNtOpenKey(
2155 OUT HANDLE KeyHandle,
2156 IN ACCESS_MASK DesiredAccess,
2157 IN POBJECT_ATTRIBUTES ObjectAttributes,
2158 IN ULONG Unused
2159 );
2160
2161 NTSYSAPI
2162 NTSTATUS
2163 NTAPI
2164 RtlOpenCurrentUser(
2165 IN ACCESS_MASK DesiredAccess,
2166 OUT PHANDLE KeyHandle
2167 );
2168
2169 NTSYSAPI
2170 NTSTATUS
2171 NTAPI
2172 RtlQueryRegistryValues(
2173 IN ULONG RelativeTo,
2174 IN PCWSTR Path,
2175 IN PRTL_QUERY_REGISTRY_TABLE QueryTable,
2176 IN PVOID Context,
2177 IN PVOID Environment
2178 );
2179
2180 NTSYSAPI
2181 NTSTATUS
2182 NTAPI
2183 RtlWriteRegistryValue(
2184 ULONG RelativeTo,
2185 PCWSTR Path,
2186 PCWSTR ValueName,
2187 ULONG ValueType,
2188 PVOID ValueData,
2189 ULONG ValueLength
2190 );
2191
2192 //
2193 // NLS Functions
2194 //
2195 NTSYSAPI
2196 VOID
2197 NTAPI
2198 RtlInitNlsTables(
2199 IN PUSHORT AnsiTableBase,
2200 IN PUSHORT OemTableBase,
2201 IN PUSHORT CaseTableBase,
2202 OUT PNLSTABLEINFO NlsTable
2203 );
2204
2205 NTSYSAPI
2206 VOID
2207 NTAPI
2208 RtlInitCodePageTable(
2209 IN PUSHORT TableBase,
2210 OUT PCPTABLEINFO CodePageTable
2211 );
2212
2213 NTSYSAPI
2214 VOID
2215 NTAPI
2216 RtlResetRtlTranslations(IN PNLSTABLEINFO NlsTable);
2217
2218 #if defined(NTOS_MODE_USER) && !defined(NO_RTL_INLINES)
2219
2220 //
2221 // Misc conversion functions
2222 //
2223 static __inline
2224 LARGE_INTEGER
2225 NTAPI_INLINE
2226 RtlConvertLongToLargeInteger(
2227 LONG SignedInteger
2228 )
2229 {
2230 LARGE_INTEGER Result;
2231
2232 Result.QuadPart = SignedInteger;
2233 return Result;
2234 }
2235
2236 static __inline
2237 LARGE_INTEGER
2238 NTAPI_INLINE
2239 RtlEnlargedIntegerMultiply(
2240 LONG Multiplicand,
2241 LONG Multiplier
2242 )
2243 {
2244 LARGE_INTEGER Product;
2245
2246 Product.QuadPart = (LONGLONG)Multiplicand * (ULONGLONG)Multiplier;
2247 return Product;
2248 }
2249
2250 static __inline
2251 ULONG
2252 NTAPI_INLINE
2253 RtlEnlargedUnsignedDivide(
2254 IN ULARGE_INTEGER Dividend,
2255 IN ULONG Divisor,
2256 IN PULONG Remainder OPTIONAL
2257 )
2258 {
2259 ULONG Quotient;
2260
2261 Quotient = (ULONG)(Dividend.QuadPart / Divisor);
2262 if (Remainder) {
2263 *Remainder = (ULONG)(Dividend.QuadPart % Divisor);
2264 }
2265
2266 return Quotient;
2267 }
2268
2269 static __inline
2270 LARGE_INTEGER
2271 NTAPI_INLINE
2272 RtlEnlargedUnsignedMultiply(
2273 ULONG Multiplicand,
2274 ULONG Multiplier
2275 )
2276 {
2277 LARGE_INTEGER Product;
2278
2279 Product.QuadPart = (ULONGLONG)Multiplicand * (ULONGLONG)Multiplier;
2280 return Product;
2281 }
2282 #endif
2283
2284 NTSYSAPI
2285 ULONG
2286 NTAPI
2287 RtlUniform(PULONG Seed);
2288
2289 //
2290 // Network Functions
2291 //
2292 NTSYSAPI
2293 NTSTATUS
2294 NTAPI
2295 RtlIpv4StringToAddressW(
2296 IN LPWSTR IpString,
2297 IN ULONG Base,
2298 OUT PULONG PtrToIpAddr,
2299 OUT PULONG IpAddr
2300 );
2301
2302 NTSYSAPI
2303 NTSTATUS
2304 NTAPI
2305 RtlIpv6StringToAddressA(
2306 IN LPSTR Name,
2307 OUT PULONG Unknown,
2308 OUT PVOID IpAddr
2309 );
2310
2311 NTSYSAPI
2312 NTSTATUS
2313 NTAPI
2314 RtlIpv6StringToAddressW(
2315 IN LPWSTR Name,
2316 OUT PULONG Unknown,
2317 OUT PVOID IpAddr
2318 );
2319
2320 NTSYSAPI
2321 NTSTATUS
2322 NTAPI
2323 RtlIpv6StringToAddressExA(
2324 IN LPSTR AddressName,
2325 IN PVOID Address,
2326 IN PULONG ScopeId,
2327 IN PUSHORT Port
2328 );
2329
2330 NTSYSAPI
2331 NTSTATUS
2332 NTAPI
2333 RtlIpv6StringToAddressExW(
2334 IN LPWSTR AddressName,
2335 IN PVOID Address,
2336 IN PULONG ScopeId,
2337 IN PUSHORT Port
2338 );
2339
2340
2341 //
2342 // Time Functions
2343 //
2344 NTSYSAPI
2345 NTSTATUS
2346 NTAPI
2347 RtlQueryTimeZoneInformation(LPTIME_ZONE_INFORMATION TimeZoneInformation);
2348
2349 NTSYSAPI
2350 VOID
2351 NTAPI
2352 RtlSecondsSince1970ToTime(
2353 IN ULONG SecondsSince1970,
2354 OUT PLARGE_INTEGER Time
2355 );
2356
2357 NTSYSAPI
2358 NTSTATUS
2359 NTAPI
2360 RtlSetTimeZoneInformation(LPTIME_ZONE_INFORMATION TimeZoneInformation);
2361
2362 NTSYSAPI
2363 BOOLEAN
2364 NTAPI
2365 RtlTimeFieldsToTime(
2366 PTIME_FIELDS TimeFields,
2367 PLARGE_INTEGER Time
2368 );
2369
2370 NTSYSAPI
2371 VOID
2372 NTAPI
2373 RtlTimeToTimeFields(
2374 PLARGE_INTEGER Time,
2375 PTIME_FIELDS TimeFields
2376 );
2377
2378 //
2379 // Version Functions
2380 //
2381 NTSYSAPI
2382 NTSTATUS
2383 NTAPI
2384 RtlVerifyVersionInfo(
2385 IN PRTL_OSVERSIONINFOEXW VersionInfo,
2386 IN ULONG TypeMask,
2387 IN ULONGLONG ConditionMask
2388 );
2389
2390 NTSYSAPI
2391 NTSTATUS
2392 NTAPI
2393 RtlGetVersion(IN OUT PRTL_OSVERSIONINFOW lpVersionInformation);
2394
2395 NTSYSAPI
2396 BOOLEAN
2397 NTAPI
2398 RtlGetNtProductType(OUT PNT_PRODUCT_TYPE ProductType);
2399
2400 #endif