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