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