Final NDK fixes for kernel32
[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 #include <ndk/rtltypes.h>
13 #include <ndk/pstypes.h>
14
15 /* FIXME: FILE NEEDS TO BE CLEANED UP AT THE END WHEN ALL THE FUNCTIONS HAVE BEEN ADDED */
16
17 /*
18 * VOID
19 * InitializeListHead (
20 * PLIST_ENTRY ListHead
21 * );
22 *
23 * FUNCTION: Initializes a double linked list
24 * ARGUMENTS:
25 * ListHead = Caller supplied storage for the head of the list
26 */
27 static __inline VOID
28 InitializeListHead(
29 IN PLIST_ENTRY ListHead)
30 {
31 ListHead->Flink = ListHead->Blink = ListHead;
32 }
33
34
35 /*
36 * VOID
37 * InsertHeadList (
38 * PLIST_ENTRY ListHead,
39 * PLIST_ENTRY Entry
40 * );
41 *
42 * FUNCTION: Inserts an entry in a double linked list
43 * ARGUMENTS:
44 * ListHead = Head of the list
45 * Entry = Entry to insert
46 */
47 static __inline VOID
48 InsertHeadList(
49 IN PLIST_ENTRY ListHead,
50 IN PLIST_ENTRY Entry)
51 {
52 PLIST_ENTRY OldFlink;
53 OldFlink = ListHead->Flink;
54 Entry->Flink = OldFlink;
55 Entry->Blink = ListHead;
56 OldFlink->Blink = Entry;
57 ListHead->Flink = Entry;
58 }
59
60
61 /*
62 * VOID
63 * InsertTailList (
64 * PLIST_ENTRY ListHead,
65 * PLIST_ENTRY Entry
66 * );
67 *
68 * FUNCTION:
69 * Inserts an entry in a double linked list
70 *
71 * ARGUMENTS:
72 * ListHead = Head of the list
73 * Entry = Entry to insert
74 */
75 static __inline VOID
76 InsertTailList(
77 IN PLIST_ENTRY ListHead,
78 IN PLIST_ENTRY Entry)
79 {
80 PLIST_ENTRY OldBlink;
81 OldBlink = ListHead->Blink;
82 Entry->Flink = ListHead;
83 Entry->Blink = OldBlink;
84 OldBlink->Flink = Entry;
85 ListHead->Blink = Entry;
86 }
87
88 /*
89 * BOOLEAN
90 * IsListEmpty (
91 * PLIST_ENTRY ListHead
92 * );
93 *
94 * FUNCTION:
95 * Checks if a double linked list is empty
96 *
97 * ARGUMENTS:
98 * ListHead = Head of the list
99 */
100 #define IsListEmpty(ListHead) \
101 ((ListHead)->Flink == (ListHead))
102
103
104 /*
105 * PSINGLE_LIST_ENTRY
106 * PopEntryList (
107 * PSINGLE_LIST_ENTRY ListHead
108 * );
109 *
110 * FUNCTION:
111 * Removes an entry from the head of a single linked list
112 *
113 * ARGUMENTS:
114 * ListHead = Head of the list
115 *
116 * RETURNS:
117 * The removed entry
118 */
119 #define PopEntryList(ListHead) \
120 (ListHead)->Next; \
121 { \
122 PSINGLE_LIST_ENTRY _FirstEntry; \
123 _FirstEntry = (ListHead)->Next; \
124 if (_FirstEntry != NULL) \
125 (ListHead)->Next = _FirstEntry->Next; \
126 }
127
128 #define PushEntryList(_ListHead, _Entry) \
129 (_Entry)->Next = (_ListHead)->Next; \
130 (_ListHead)->Next = (_Entry); \
131
132 /*
133 *BOOLEAN
134 *RemoveEntryList (
135 * PLIST_ENTRY Entry
136 * );
137 *
138 * FUNCTION:
139 * Removes an entry from a double linked list
140 *
141 * ARGUMENTS:
142 * ListEntry = Entry to remove
143 */
144 static __inline BOOLEAN
145 RemoveEntryList(
146 IN PLIST_ENTRY Entry)
147 {
148 PLIST_ENTRY OldFlink;
149 PLIST_ENTRY OldBlink;
150
151 OldFlink = Entry->Flink;
152 OldBlink = Entry->Blink;
153 OldFlink->Blink = OldBlink;
154 OldBlink->Flink = OldFlink;
155 return (OldFlink == OldBlink);
156 }
157
158
159 /*
160 * PLIST_ENTRY
161 * RemoveHeadList (
162 * PLIST_ENTRY ListHead
163 * );
164 *
165 * FUNCTION:
166 * Removes the head entry from a double linked list
167 *
168 * ARGUMENTS:
169 * ListHead = Head of the list
170 *
171 * RETURNS:
172 * The removed entry
173 */
174 static __inline PLIST_ENTRY
175 RemoveHeadList(
176 IN PLIST_ENTRY ListHead)
177 {
178 PLIST_ENTRY Flink;
179 PLIST_ENTRY Entry;
180
181 Entry = ListHead->Flink;
182 Flink = Entry->Flink;
183 ListHead->Flink = Flink;
184 Flink->Blink = ListHead;
185 return Entry;
186 }
187
188
189 /*
190 * PLIST_ENTRY
191 * RemoveTailList (
192 * PLIST_ENTRY ListHead
193 * );
194 *
195 * FUNCTION:
196 * Removes the tail entry from a double linked list
197 *
198 * ARGUMENTS:
199 * ListHead = Head of the list
200 *
201 * RETURNS:
202 * The removed entry
203 */
204 static __inline PLIST_ENTRY
205 RemoveTailList(
206 IN PLIST_ENTRY ListHead)
207 {
208 PLIST_ENTRY Blink;
209 PLIST_ENTRY Entry;
210
211 Entry = ListHead->Blink;
212 Blink = Entry->Blink;
213 ListHead->Blink = Blink;
214 Blink->Flink = ListHead;
215 return Entry;
216 }
217
218 /*
219 * BOOLEAN
220 * IsXstEntry (
221 * PLIST_ENTRY ListHead,
222 * PLIST_ENTRY Entry
223 * );
224 */
225 #define IsFirstEntry(ListHead, Entry) ((ListHead)->Flink == Entry)
226
227 #define IsLastEntry(ListHead, Entry) ((ListHead)->Blink == Entry)
228
229
230 #define RtlGetProcessHeap() (NtCurrentPeb()->ProcessHeap)
231
232 #define InsertAscendingListFIFO(ListHead, Type, ListEntryField, NewEntry, SortField)\
233 {\
234 PLIST_ENTRY current;\
235 \
236 current = (ListHead)->Flink;\
237 while (current != (ListHead))\
238 {\
239 if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField >\
240 (NewEntry)->SortField)\
241 {\
242 break;\
243 }\
244 current = current->Flink;\
245 }\
246 \
247 InsertTailList(current, &((NewEntry)->ListEntryField));\
248 }
249
250
251 #define InsertDescendingListFIFO(ListHead, Type, ListEntryField, NewEntry, SortField)\
252 {\
253 PLIST_ENTRY current;\
254 \
255 current = (ListHead)->Flink;\
256 while (current != (ListHead))\
257 {\
258 if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField <\
259 (NewEntry)->SortField)\
260 {\
261 break;\
262 }\
263 current = current->Flink;\
264 }\
265 \
266 InsertTailList(current, &((NewEntry)->ListEntryField));\
267 }
268
269
270 #define InsertAscendingList(ListHead, Type, ListEntryField, NewEntry, SortField)\
271 {\
272 PLIST_ENTRY current;\
273 \
274 current = (ListHead)->Flink;\
275 while (current != (ListHead))\
276 {\
277 if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField >=\
278 (NewEntry)->SortField)\
279 {\
280 break;\
281 }\
282 current = current->Flink;\
283 }\
284 \
285 InsertTailList(current, &((NewEntry)->ListEntryField));\
286 }
287
288
289 #define InsertDescendingList(ListHead, Type, ListEntryField, NewEntry, SortField)\
290 {\
291 PLIST_ENTRY current;\
292 \
293 current = (ListHead)->Flink;\
294 while (current != (ListHead))\
295 {\
296 if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField <=\
297 (NewEntry)->SortField)\
298 {\
299 break;\
300 }\
301 current = current->Flink;\
302 }\
303 \
304 InsertTailList(current, &((NewEntry)->ListEntryField));\
305 }
306
307 ULONG
308 CDECL
309 DbgPrint(
310 IN PCH Format,
311 IN ...);
312
313 VOID
314 STDCALL
315 DbgBreakPoint(VOID);
316
317 NTSTATUS
318 STDCALL
319 RtlAbsoluteToSelfRelativeSD (
320 IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor,
321 IN OUT PSECURITY_DESCRIPTOR_RELATIVE SelfRelativeSecurityDescriptor,
322 IN PULONG BufferLength
323 );
324
325 NTSTATUS
326 STDCALL
327 RtlAddAccessAllowedAce (
328 PACL Acl,
329 ULONG Revision,
330 ACCESS_MASK AccessMask,
331 PSID Sid
332 );
333
334 NTSTATUS
335 STDCALL
336 RtlAllocateAndInitializeSid (
337 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
338 IN UCHAR SubAuthorityCount,
339 IN ULONG SubAuthority0,
340 IN ULONG SubAuthority1,
341 IN ULONG SubAuthority2,
342 IN ULONG SubAuthority3,
343 IN ULONG SubAuthority4,
344 IN ULONG SubAuthority5,
345 IN ULONG SubAuthority6,
346 IN ULONG SubAuthority7,
347 OUT PSID *Sid
348 );
349
350 PVOID
351 STDCALL
352 RtlAllocateHeap (
353 IN HANDLE HeapHandle,
354 IN ULONG Flags,
355 IN ULONG Size
356 );
357
358 NTSTATUS
359 STDCALL
360 RtlAppendUnicodeToString (
361 PUNICODE_STRING Destination,
362 PCWSTR Source
363 );
364
365 NTSTATUS
366 STDCALL
367 RtlAppendUnicodeStringToString (
368 PUNICODE_STRING Destination,
369 PUNICODE_STRING Source
370 );
371
372 NTSTATUS
373 STDCALL
374 RtlAddAtomToAtomTable (
375 IN PRTL_ATOM_TABLE AtomTable,
376 IN PWSTR AtomName,
377 OUT PRTL_ATOM Atom
378 );
379
380 VOID
381 STDCALL
382 RtlAssert (
383 PVOID FailedAssertion,
384 PVOID FileName,
385 ULONG LineNumber,
386 PCHAR Message
387 );
388
389 VOID
390 STDCALL
391 RtlCopyLuid(
392 IN PLUID LuidDest,
393 IN PLUID LuidSrc
394 );
395
396 VOID
397 STDCALL
398 RtlCopyLuidAndAttributesArray(
399 ULONG Count,
400 PLUID_AND_ATTRIBUTES Src,
401 PLUID_AND_ATTRIBUTES Dest
402 );
403
404 NTSTATUS
405 STDCALL
406 RtlCopySidAndAttributesArray(
407 ULONG Count,
408 PSID_AND_ATTRIBUTES Src,
409 ULONG SidAreaSize,
410 PSID_AND_ATTRIBUTES Dest,
411 PVOID SidArea,
412 PVOID* RemainingSidArea,
413 PULONG RemainingSidAreaSize
414 );
415
416 SIZE_T
417 STDCALL
418 RtlCompareMemory(IN const VOID *Source1,
419 IN const VOID *Source2,
420 IN SIZE_T Length);
421
422 LONG
423 STDCALL
424 RtlCompareUnicodeString (
425 PUNICODE_STRING String1,
426 PUNICODE_STRING String2,
427 BOOLEAN CaseInsensitive
428 );
429
430 BOOLEAN
431 STDCALL
432 RtlEqualUnicodeString (
433 PCUNICODE_STRING String1,
434 PCUNICODE_STRING String2,
435 BOOLEAN CaseInsensitive
436 );
437
438 VOID
439 STDCALL
440 RtlAcquirePebLock (
441 VOID
442 );
443
444 VOID
445 STDCALL
446 RtlReleasePebLock (
447 VOID
448 );
449
450 NTSTATUS
451 STDCALL
452 RtlCompressBuffer (
453 IN USHORT CompressionFormatAndEngine,
454 IN PUCHAR UncompressedBuffer,
455 IN ULONG UncompressedBufferSize,
456 OUT PUCHAR CompressedBuffer,
457 IN ULONG CompressedBufferSize,
458 IN ULONG UncompressedChunkSize,
459 OUT PULONG FinalCompressedSize,
460 IN PVOID WorkSpace
461 );
462
463 NTSTATUS
464 STDCALL
465 RtlConvertSidToUnicodeString (
466 OUT PUNICODE_STRING DestinationString,
467 IN PSID Sid,
468 IN BOOLEAN AllocateDestinationString
469 );
470
471 NTSTATUS
472 STDCALL
473 RtlCopySid (
474 IN ULONG Length,
475 IN PSID Destination,
476 IN PSID Source
477 );
478
479 VOID STDCALL
480 RtlCopyUnicodeString(PUNICODE_STRING DestinationString,
481 PUNICODE_STRING SourceString);
482
483 NTSTATUS
484 STDCALL
485 RtlCreateAcl(
486 PACL Acl,
487 ULONG AclSize,
488 ULONG AclRevision
489 );
490
491 PVOID
492 STDCALL
493 RtlCreateHeap(
494 IN ULONG Flags,
495 IN PVOID BaseAddress OPTIONAL,
496 IN ULONG SizeToReserve OPTIONAL,
497 IN ULONG SizeToCommit OPTIONAL,
498 IN PVOID Lock OPTIONAL,
499 IN PRTL_HEAP_DEFINITION Definition OPTIONAL
500 );
501
502 NTSTATUS
503 STDCALL
504 RtlCreateAtomTable(
505 IN ULONG TableSize,
506 IN OUT PRTL_ATOM_TABLE *AtomTable
507 );
508
509 NTSTATUS
510 STDCALL
511 RtlCreateSecurityDescriptor(
512 PSECURITY_DESCRIPTOR SecurityDescriptor,
513 ULONG Revision
514 );
515
516 NTSTATUS STDCALL
517 RtlCreateSecurityDescriptorRelative(
518 PSECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor,
519 ULONG Revision
520 );
521
522 NTSTATUS
523 STDCALL
524 RtlCreateUserThread (
525 IN HANDLE ProcessHandle,
526 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
527 IN BOOLEAN CreateSuspended,
528 IN LONG StackZeroBits,
529 IN OUT PULONG StackReserve,
530 IN OUT PULONG StackCommit,
531 IN PTHREAD_START_ROUTINE StartAddress,
532 IN PVOID Parameter,
533 IN OUT PHANDLE ThreadHandle,
534 IN OUT PCLIENT_ID ClientId
535 );
536
537 BOOLEAN
538 STDCALL
539 RtlCreateUnicodeString(
540 OUT PUNICODE_STRING DestinationString,
541 IN PCWSTR SourceString
542 );
543
544 NTSTATUS
545 STDCALL
546 RtlDecompressBuffer (
547 IN USHORT CompressionFormat,
548 OUT PUCHAR UncompressedBuffer,
549 IN ULONG UncompressedBufferSize,
550 IN PUCHAR CompressedBuffer,
551 IN ULONG CompressedBufferSize,
552 OUT PULONG FinalUncompressedSize
553 );
554
555 NTSTATUS
556 STDCALL
557 RtlExpandEnvironmentStrings_U (
558 PWSTR Environment,
559 PUNICODE_STRING Source,
560 PUNICODE_STRING Destination,
561 PULONG Length
562 );
563
564 PRTL_USER_PROCESS_PARAMETERS
565 STDCALL
566 RtlDeNormalizeProcessParams (
567 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
568 );
569
570 PRTL_USER_PROCESS_PARAMETERS
571 STDCALL
572 RtlNormalizeProcessParams (
573 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
574 );
575
576 NTSTATUS
577 STDCALL
578 RtlDeleteAtomFromAtomTable (
579 IN PRTL_ATOM_TABLE AtomTable,
580 IN RTL_ATOM Atom
581 );
582
583 NTSTATUS
584 STDCALL
585 RtlDeleteCriticalSection (
586 PRTL_CRITICAL_SECTION CriticalSection
587 );
588
589 NTSTATUS
590 STDCALL
591 RtlDestroyAtomTable (
592 IN PRTL_ATOM_TABLE AtomTable
593 );
594
595 NTSTATUS
596 STDCALL
597 RtlEnterCriticalSection (
598 PRTL_CRITICAL_SECTION CriticalSection
599 );
600
601 NTSTATUS
602 STDCALL
603 RtlInitializeCriticalSection (
604 PRTL_CRITICAL_SECTION CriticalSection
605 );
606
607 NTSTATUS
608 STDCALL
609 RtlLeaveCriticalSection (
610 PRTL_CRITICAL_SECTION CriticalSection
611 );
612
613 VOID
614 STDCALL
615 RtlInitializeBitMap(
616 IN PRTL_BITMAP BitMapHeader,
617 IN PULONG BitMapBuffer,
618 IN ULONG SizeOfBitMap);
619
620 BOOLEAN
621 STDCALL
622 RtlAreBitsClear(
623 IN PRTL_BITMAP BitMapHeader,
624 IN ULONG StartingIndex,
625 IN ULONG Length);
626
627 BOOLEAN
628 STDCALL
629 RtlAreBitsSet(
630 IN PRTL_BITMAP BitMapHeader,
631 IN ULONG StartingIndex,
632 IN ULONG Length);
633
634 VOID
635 STDCALL
636 RtlClearBits (
637 IN PRTL_BITMAP BitMapHeader,
638 IN ULONG StartingIndex,
639 IN ULONG NumberToClear
640 );
641
642 ULONG
643 STDCALL
644 RtlFindClearBits (
645 PRTL_BITMAP BitMapHeader,
646 ULONG NumberToFind,
647 ULONG HintIndex
648 );
649
650 ULONG
651 STDCALL
652 RtlFindClearBitsAndSet (
653 PRTL_BITMAP BitMapHeader,
654 ULONG NumberToFind,
655 ULONG HintIndex
656 );
657
658 NTSTATUS
659 STDCALL
660 RtlMultiByteToUnicodeN (
661 PWCHAR UnicodeString,
662 ULONG UnicodeSize,
663 PULONG ResultSize,
664 const PCHAR MbString,
665 ULONG MbSize
666 );
667
668 NTSTATUS
669 STDCALL
670 RtlMultiByteToUnicodeSize (
671 PULONG UnicodeSize,
672 PCHAR MbString,
673 ULONG MbSize
674 );
675
676 BOOLEAN
677 STDCALL
678 RtlPrefixUnicodeString (
679 PUNICODE_STRING String1,
680 PUNICODE_STRING String2,
681 BOOLEAN CaseInsensitive
682 );
683
684 CHAR STDCALL
685 RtlUpperChar (CHAR Source);
686
687 WCHAR
688 STDCALL
689 RtlUpcaseUnicodeChar (
690 WCHAR Source
691 );
692
693 NTSTATUS
694 STDCALL
695 RtlAnsiStringToUnicodeString (
696 PUNICODE_STRING DestinationString,
697 PANSI_STRING SourceString,
698 BOOLEAN AllocateDestinationString
699 );
700
701 ULONG
702 STDCALL
703 RtlAnsiStringToUnicodeSize (
704 PANSI_STRING AnsiString
705 );
706
707 NTSTATUS
708 STDCALL
709 RtlUnicodeToMultiByteN (
710 PCHAR MbString,
711 ULONG MbSize,
712 PULONG ResultSize,
713 PWCHAR UnicodeString,
714 ULONG UnicodeSize
715 );
716
717 ULONG
718 STDCALL
719 RtlOemStringToUnicodeSize (
720 POEM_STRING AnsiString
721 );
722
723 NTSTATUS
724 STDCALL
725 RtlOemStringToUnicodeString (
726 PUNICODE_STRING DestinationString,
727 POEM_STRING SourceString,
728 BOOLEAN AllocateDestinationString
729 );
730
731 PVOID
732 STDCALL
733 RtlImageDirectoryEntryToData (
734 PVOID BaseAddress,
735 BOOLEAN bFlag,
736 ULONG Directory,
737 PULONG Size
738 );
739
740 NTSTATUS
741 STDCALL
742 RtlOpenCurrentUser(
743 IN ACCESS_MASK DesiredAccess,
744 OUT PHANDLE KeyHandle);
745
746 WCHAR STDCALL
747 RtlDowncaseUnicodeChar(IN WCHAR Source);
748
749 NTSTATUS
750 STDCALL
751 RtlUpcaseUnicodeToMultiByteN (
752 PCHAR MbString,
753 ULONG MbSize,
754 PULONG ResultSize,
755 PWCHAR UnicodeString,
756 ULONG UnicodeSize
757 );
758
759 NTSTATUS
760 STDCALL
761 RtlUnicodeToMultiByteSize (
762 PULONG MbSize,
763 PWCHAR UnicodeString,
764 ULONG UnicodeSize
765 );
766
767 NTSTATUS
768 STDCALL
769 RtlOemToUnicodeN(
770 PWSTR UnicodeString,
771 ULONG MaxBytesInUnicodeString,
772 PULONG BytesInUnicodeString,
773 IN PCHAR OemString,
774 ULONG BytesInOemString
775 );
776
777 NTSTATUS
778 STDCALL
779 RtlUnicodeToOemN (
780 PCHAR OemString,
781 ULONG OemSize,
782 PULONG ResultSize,
783 PWCHAR UnicodeString,
784 ULONG UnicodeSize
785 );
786
787 NTSTATUS
788 STDCALL
789 RtlUpcaseUnicodeStringToOemString (
790 IN OUT POEM_STRING DestinationString,
791 IN PUNICODE_STRING SourceString,
792 IN BOOLEAN AllocateDestinationString
793 );
794
795 ULONG
796 STDCALL
797 RtlUnicodeStringToAnsiSize (
798 IN PUNICODE_STRING UnicodeString
799 );
800
801 ULONG
802 STDCALL
803 RtlUnicodeStringToOemSize (
804 IN PUNICODE_STRING UnicodeString
805 );
806
807 NTSTATUS
808 STDCALL
809 RtlUnicodeStringToAnsiString (
810 IN OUT PANSI_STRING DestinationString,
811 IN PUNICODE_STRING SourceString,
812 IN BOOLEAN AllocateDestinationString
813 );
814
815 NTSTATUS
816 STDCALL
817 RtlUnicodeStringToInteger (
818 IN PUNICODE_STRING String,
819 IN ULONG Base,
820 OUT PULONG Value
821 );
822
823 #ifndef _NTIFS_
824 BOOLEAN
825 STDCALL
826 RtlEqualSid (
827 IN PSID Sid1,
828 IN PSID Sid2
829 );
830
831 VOID
832 STDCALL
833 RtlFillMemoryUlong (
834 IN PVOID Destination,
835 IN ULONG Length,
836 IN ULONG Fill
837 );
838
839 #endif
840
841 NTSTATUS
842 STDCALL
843 RtlFindMessage (
844 IN PVOID BaseAddress,
845 IN ULONG Type,
846 IN ULONG Language,
847 IN ULONG MessageId,
848 OUT PRTL_MESSAGE_RESOURCE_ENTRY *MessageResourceEntry
849 );
850
851 VOID
852 STDCALL
853 RtlFreeAnsiString (
854 IN PANSI_STRING AnsiString
855 );
856
857 BOOLEAN
858 STDCALL
859 RtlFreeHeap (
860 IN HANDLE HeapHandle,
861 IN ULONG Flags,
862 IN PVOID P
863 );
864
865 PVOID
866 STDCALL
867 RtlFreeSid (
868 IN PSID Sid
869 );
870
871 VOID
872 STDCALL
873 RtlFreeUnicodeString(
874 IN PUNICODE_STRING UnicodeString);
875
876 VOID
877 STDCALL
878 RtlFreeOemString(
879 IN POEM_STRING OemString
880 );
881
882 NTSTATUS
883 STDCALL
884 RtlGetCompressionWorkSpaceSize (
885 IN USHORT CompressionFormatAndEngine,
886 OUT PULONG CompressBufferWorkSpaceSize,
887 OUT PULONG CompressFragmentWorkSpaceSize
888 );
889
890 NTSTATUS
891 STDCALL
892 RtlGetDaclSecurityDescriptor (
893 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
894 OUT PBOOLEAN DaclPresent,
895 OUT PACL *Dacl,
896 OUT PBOOLEAN DaclDefaulted
897 );
898
899 NTSTATUS
900 STDCALL
901 RtlGetGroupSecurityDescriptor (
902 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
903 OUT PSID *Group,
904 OUT PBOOLEAN GroupDefaulted
905 );
906
907 NTSTATUS
908 STDCALL
909 RtlGetOwnerSecurityDescriptor (
910 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
911 OUT PSID *Owner,
912 OUT PBOOLEAN OwnerDefaulted
913 );
914
915 ULONG
916 STDCALL
917 RtlImageRvaToVa (
918 PIMAGE_NT_HEADERS NtHeader,
919 PVOID BaseAddress,
920 ULONG Rva,
921 PIMAGE_SECTION_HEADER *SectionHeader
922 );
923
924 PIMAGE_NT_HEADERS
925 STDCALL
926 RtlImageNtHeader (
927 IN PVOID BaseAddress
928 );
929
930 PIMAGE_SECTION_HEADER
931 STDCALL
932 RtlImageRvaToSection (
933 PIMAGE_NT_HEADERS NtHeader,
934 PVOID BaseAddress,
935 ULONG Rva
936 );
937
938 NTSTATUS
939 STDCALL
940 RtlIntegerToChar (
941 IN ULONG Value,
942 IN ULONG Base,
943 IN ULONG Length,
944 IN OUT PCHAR String
945 );
946
947 NTSTATUS
948 STDCALL
949 RtlIntegerToUnicode(
950 IN ULONG Value,
951 IN ULONG Base OPTIONAL,
952 IN ULONG Length OPTIONAL,
953 IN OUT LPWSTR String
954 );
955
956 NTSTATUS
957 STDCALL
958 RtlIntegerToUnicodeString (
959 IN ULONG Value,
960 IN ULONG Base,
961 IN OUT PUNICODE_STRING String
962 );
963
964 NTSTATUS
965 STDCALL
966 RtlCharToInteger (
967 PCSZ String,
968 ULONG Base,
969 PULONG Value
970 );
971
972
973 USHORT FASTCALL
974 RtlUshortByteSwap (IN USHORT Source);
975
976 ULONG
977 STDCALL
978 RtlIsTextUnicode (
979 PVOID Buffer,
980 ULONG Length,
981 ULONG *Flags
982 );
983
984 NTSTATUS
985 STDCALL
986 RtlInitializeSid (
987 IN OUT PSID Sid,
988 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
989 IN UCHAR SubAuthorityCount
990 );
991
992 VOID
993 STDCALL
994 RtlInitNlsTables (
995 IN PUSHORT AnsiTableBase,
996 IN PUSHORT OemTableBase,
997 IN PUSHORT CaseTableBase,
998 OUT PNLSTABLEINFO NlsTable
999 );
1000
1001 VOID
1002 STDCALL
1003 RtlInitCodePageTable (
1004 IN PUSHORT TableBase,
1005 OUT PCPTABLEINFO CodePageTable
1006 );
1007
1008 NTSTATUS
1009 STDCALL
1010 RtlGetSaclSecurityDescriptor (
1011 PSECURITY_DESCRIPTOR SecurityDescriptor,
1012 PBOOLEAN SaclPresent,
1013 PACL* Sacl,
1014 PBOOLEAN SaclDefaulted
1015 );
1016
1017 NTSTATUS
1018 STDCALL
1019 RtlQueryAtomInAtomTable (
1020 IN PRTL_ATOM_TABLE AtomTable,
1021 IN RTL_ATOM Atom,
1022 IN OUT PULONG RefCount OPTIONAL,
1023 IN OUT PULONG PinCount OPTIONAL,
1024 IN OUT PWSTR AtomName OPTIONAL,
1025 IN OUT PULONG NameLength OPTIONAL
1026 );
1027
1028 NTSTATUS
1029 STDCALL
1030 RtlLookupAtomInAtomTable (
1031 IN PRTL_ATOM_TABLE AtomTable,
1032 IN PWSTR AtomName,
1033 OUT PRTL_ATOM Atom
1034 );
1035
1036 VOID
1037 STDCALL
1038 RtlResetRtlTranslations (
1039 IN PNLSTABLEINFO NlsTable
1040 );
1041
1042 VOID
1043 STDCALL
1044 RtlRaiseException (
1045 IN PEXCEPTION_RECORD ExceptionRecord
1046 );
1047
1048 VOID
1049 STDCALL
1050 RtlInitUnicodeString(
1051 IN OUT PUNICODE_STRING DestinationString,
1052 IN PCWSTR SourceString);
1053
1054 VOID
1055 STDCALL
1056 RtlInitAnsiString (
1057 PANSI_STRING DestinationString,
1058 PCSZ SourceString
1059 );
1060
1061 BOOLEAN
1062 STDCALL
1063 RtlIsNameLegalDOS8Dot3 (
1064 IN PUNICODE_STRING UnicodeName,
1065 IN PANSI_STRING AnsiName,
1066 PBOOLEAN Unknown
1067 );
1068
1069 ULONG
1070 STDCALL
1071 RtlLengthRequiredSid (
1072 IN UCHAR SubAuthorityCount
1073 );
1074
1075 ULONG
1076 STDCALL
1077 RtlLengthSid (
1078 IN PSID Sid
1079 );
1080
1081 ULONG
1082 STDCALL
1083 RtlNtStatusToDosError (
1084 IN NTSTATUS Status
1085 );
1086
1087 NTSTATUS STDCALL
1088 RtlFormatCurrentUserKeyPath (IN OUT PUNICODE_STRING KeyPath);
1089
1090 NTSTATUS
1091 STDCALL
1092 RtlQueryEnvironmentVariable_U (
1093 PWSTR Environment,
1094 PUNICODE_STRING Name,
1095 PUNICODE_STRING Value
1096 );
1097
1098 NTSTATUS
1099 STDCALL
1100 RtlQueryTimeZoneInformation (
1101 IN OUT LPTIME_ZONE_INFORMATION TimeZoneInformation
1102 );
1103
1104 VOID STDCALL RtlRaiseStatus(NTSTATUS Status);
1105
1106 VOID
1107 STDCALL
1108 RtlSecondsSince1970ToTime (
1109 IN ULONG SecondsSince1970,
1110 OUT PLARGE_INTEGER Time
1111 );
1112
1113 VOID
1114 STDCALL
1115 RtlSetBits (
1116 PRTL_BITMAP BitMapHeader,
1117 ULONG StartingIndex,
1118 ULONG NumberToSet
1119 );
1120
1121 #if (VER_PRODUCTBUILD >= 2195)
1122
1123 NTSTATUS
1124 STDCALL
1125 RtlSelfRelativeToAbsoluteSD (
1126 IN PSECURITY_DESCRIPTOR SelfRelativeSD,
1127 OUT PSECURITY_DESCRIPTOR AbsoluteSD,
1128 IN PULONG AbsoluteSDSize,
1129 IN PACL Dacl,
1130 IN PULONG DaclSize,
1131 IN PACL Sacl,
1132 IN PULONG SaclSize,
1133 IN PSID Owner,
1134 IN PULONG OwnerSize,
1135 IN PSID PrimaryGroup,
1136 IN PULONG PrimaryGroupSize
1137 );
1138
1139 #endif /* (VER_PRODUCTBUILD >= 2195) */
1140
1141 NTSTATUS
1142 STDCALL
1143 RtlSetDaclSecurityDescriptor (
1144 PSECURITY_DESCRIPTOR SecurityDescriptor,
1145 BOOLEAN DaclPresent,
1146 PACL Dacl,
1147 BOOLEAN DaclDefaulted
1148 );
1149
1150 NTSTATUS
1151 STDCALL
1152 RtlSetGroupSecurityDescriptor (
1153 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
1154 IN PSID Group,
1155 IN BOOLEAN GroupDefaulted
1156 );
1157
1158 NTSTATUS
1159 STDCALL
1160 RtlSetOwnerSecurityDescriptor (
1161 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
1162 IN PSID Owner,
1163 IN BOOLEAN OwnerDefaulted
1164 );
1165
1166 NTSTATUS
1167 STDCALL
1168 RtlSetSaclSecurityDescriptor (
1169 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
1170 IN BOOLEAN SaclPresent,
1171 IN PACL Sacl,
1172 IN BOOLEAN SaclDefaulted
1173 );
1174
1175 PUCHAR
1176 STDCALL
1177 RtlSubAuthorityCountSid (
1178 IN PSID Sid
1179 );
1180
1181 PULONG
1182 STDCALL
1183 RtlSubAuthoritySid (
1184 IN PSID Sid,
1185 IN ULONG SubAuthority
1186 );
1187
1188 NTSTATUS
1189 STDCALL
1190 RtlUpcaseUnicodeStringToCountedOemString (
1191 IN OUT POEM_STRING DestinationString,
1192 IN PUNICODE_STRING SourceString,
1193 IN BOOLEAN AllocateDestinationString
1194 );
1195
1196 NTSTATUS STDCALL
1197 RtlSetTimeZoneInformation (IN OUT LPTIME_ZONE_INFORMATION TimeZoneInformation);
1198
1199 NTSTATUS
1200 STDCALL
1201 RtlUpcaseUnicodeString (
1202 IN OUT PUNICODE_STRING DestinationString,
1203 IN PCUNICODE_STRING SourceString,
1204 IN BOOLEAN AllocateDestinationString
1205 );
1206
1207 NTSTATUS
1208 STDCALL
1209 RtlUnicodeStringToOemString (
1210 IN OUT POEM_STRING DestinationString,
1211 IN PUNICODE_STRING SourceString,
1212 IN BOOLEAN AllocateDestinationString
1213 );
1214
1215 NTSTATUS
1216 STDCALL
1217 RtlUpcaseUnicodeToOemN (
1218 PCHAR OemString,
1219 ULONG OemSize,
1220 PULONG ResultSize,
1221 PWCHAR UnicodeString,
1222 ULONG UnicodeSize
1223 );
1224
1225
1226 NTSTATUS STDCALL
1227 RtlLargeIntegerToChar (
1228 IN PLARGE_INTEGER Value,
1229 IN ULONG Base,
1230 IN ULONG Length,
1231 IN OUT PCHAR String
1232 );
1233
1234 NTSTATUS
1235 STDCALL
1236 RtlVerifyVersionInfo(
1237 IN PRTL_OSVERSIONINFOEXW VersionInfo,
1238 IN ULONG TypeMask,
1239 IN ULONGLONG ConditionMask
1240 );
1241
1242 NTSTATUS
1243 STDCALL
1244 RtlGetVersion(
1245 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation);
1246
1247 BOOLEAN
1248 STDCALL
1249 RtlCreateUnicodeStringFromAsciiz (OUT PUNICODE_STRING Destination,
1250 IN PCSZ Source);
1251
1252
1253 BOOLEAN
1254 STDCALL
1255 RtlTimeFieldsToTime (
1256 PTIME_FIELDS TimeFields,
1257 PLARGE_INTEGER Time
1258 );
1259
1260 VOID
1261 STDCALL
1262 RtlTimeToTimeFields (
1263 PLARGE_INTEGER Time,
1264 PTIME_FIELDS TimeFields
1265 );
1266
1267 NTSTATUS
1268 STDCALL
1269 RtlQueryRegistryValues (
1270 IN ULONG RelativeTo,
1271 IN PCWSTR Path,
1272 IN PRTL_QUERY_REGISTRY_TABLE QueryTable,
1273 IN PVOID Context,
1274 IN PVOID Environment
1275 );
1276
1277 NTSTATUS
1278 STDCALL
1279 RtlWriteRegistryValue (
1280 ULONG RelativeTo,
1281 PCWSTR Path,
1282 PCWSTR ValueName,
1283 ULONG ValueType,
1284 PVOID ValueData,
1285 ULONG ValueLength
1286 );
1287
1288 VOID
1289 STDCALL
1290 RtlUnwind (
1291 PEXCEPTION_REGISTRATION RegistrationFrame,
1292 PVOID ReturnAddress,
1293 PEXCEPTION_RECORD ExceptionRecord,
1294 DWORD EaxValue
1295 );
1296
1297 HANDLE STDCALL
1298 RtlDestroyHeap (HANDLE hheap);
1299
1300 PVOID STDCALL
1301 RtlReAllocateHeap (
1302 HANDLE Heap,
1303 ULONG Flags,
1304 PVOID Ptr,
1305 ULONG Size
1306 );
1307 BOOLEAN STDCALL
1308 RtlLockHeap (IN HANDLE Heap);
1309
1310 BOOLEAN STDCALL
1311 RtlUnlockHeap (IN HANDLE Heap);
1312
1313 ULONG STDCALL
1314 RtlSizeHeap(
1315 IN PVOID HeapHandle,
1316 IN ULONG Flags,
1317 IN PVOID MemoryPointer
1318 );
1319
1320 BOOLEAN STDCALL
1321 RtlValidateHeap (
1322 HANDLE Heap,
1323 ULONG Flags,
1324 PVOID pmem
1325 );
1326
1327 BOOLEAN
1328 STDCALL
1329 RtlValidSid (
1330 IN PSID Sid
1331 );
1332
1333 BOOLEAN
1334 STDCALL
1335 RtlValidAcl (
1336 PACL Acl
1337 );
1338
1339 /* functions exported from NTOSKRNL.EXE which are considered RTL */
1340 char *_itoa (int value, char *string, int radix);
1341 wchar_t *_itow (int value, wchar_t *string, int radix);
1342 int _snprintf(char * buf, size_t cnt, const char *fmt, ...);
1343 int _snwprintf(wchar_t *buf, size_t cnt, const wchar_t *fmt, ...);
1344 int _stricmp(const char *s1, const char *s2);
1345 char * _strlwr(char *x);
1346 int _strnicmp(const char *s1, const char *s2, size_t n);
1347 char * _strnset(char* szToFill, int szFill, size_t sizeMaxFill);
1348 char * _strrev(char *s);
1349 char * _strset(char* szToFill, int szFill);
1350 char * _strupr(char *x);
1351 int _vsnprintf(char *buf, size_t cnt, const char *fmt, va_list args);
1352 int _wcsicmp (const wchar_t* cs, const wchar_t* ct);
1353 wchar_t * _wcslwr (wchar_t *x);
1354 int _wcsnicmp (const wchar_t * cs,const wchar_t * ct,size_t count);
1355 wchar_t* _wcsnset (wchar_t* wsToFill, wchar_t wcFill, size_t sizeMaxFill);
1356 wchar_t * _wcsrev(wchar_t *s);
1357 wchar_t *_wcsupr(wchar_t *x);
1358
1359 int atoi(const char *str);
1360 long atol(const char *str);
1361 int isdigit(int c);
1362 int islower(int c);
1363 int isprint(int c);
1364 int isspace(int c);
1365 int isupper(int c);
1366 int isxdigit(int c);
1367 size_t mbstowcs (wchar_t *wcstr, const char *mbstr, size_t count);
1368 int mbtowc (wchar_t *wchar, const char *mbchar, size_t count);
1369 void * memchr(const void *s, int c, size_t n);
1370 void * memcpy(void *to, const void *from, size_t count);
1371 void * memmove(void *dest,const void *src, size_t count);
1372 void * memset(void *src, int val, size_t count);
1373
1374 int rand(void);
1375 int sprintf(char * buf, const char *fmt, ...);
1376 void srand(unsigned seed);
1377 char * strcat(char *s, const char *append);
1378 char * strchr(const char *s, int c);
1379 int strcmp(const char *s1, const char *s2);
1380 char * strcpy(char *to, const char *from);
1381 size_t strlen(const char *str);
1382 char * strncat(char *dst, const char *src, size_t n);
1383 int strncmp(const char *s1, const char *s2, size_t n);
1384 char *strncpy(char *dst, const char *src, size_t n);
1385 char *strrchr(const char *s, int c);
1386 size_t strspn(const char *s1, const char *s2);
1387 char *strstr(const char *s, const char *find);
1388 int swprintf(wchar_t *buf, const wchar_t *fmt, ...);
1389 int tolower(int c);
1390 int toupper(int c);
1391 wchar_t towlower(wchar_t c);
1392 wchar_t towupper(wchar_t c);
1393 int vsprintf(char *buf, const char *fmt, va_list args);
1394 wchar_t * wcscat(wchar_t *dest, const wchar_t *src);
1395 wchar_t * wcschr(const wchar_t *str, wchar_t ch);
1396 int wcscmp(const wchar_t *cs, const wchar_t *ct);
1397 wchar_t* wcscpy(wchar_t* str1, const wchar_t* str2);
1398 size_t wcscspn(const wchar_t *str,const wchar_t *reject);
1399 size_t wcslen(const wchar_t *s);
1400 wchar_t * wcsncat(wchar_t *dest, const wchar_t *src, size_t count);
1401 int wcsncmp(const wchar_t *cs, const wchar_t *ct, size_t count);
1402 wchar_t * wcsncpy(wchar_t *dest, const wchar_t *src, size_t count);
1403 wchar_t * wcsrchr(const wchar_t *str, wchar_t ch);
1404 size_t wcsspn(const wchar_t *str,const wchar_t *accept);
1405 wchar_t *wcsstr(const wchar_t *s,const wchar_t *b);
1406 size_t wcstombs (char *mbstr, const wchar_t *wcstr, size_t count);
1407 int wctomb (char *mbchar, wchar_t wchar);
1408
1409 #endif