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