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