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