1 /* $Id: rtl.h,v 1.68 2002/09/17 23:41:43 dwelch Exp $
8 #if defined(__NTOSKRNL__) || defined(__NTDRIVER__) || defined(__NTHAL__) || defined(__NTDLL__) || defined (__NTAPP__)
13 #endif /* __NTOSKRNL__ || __NTDRIVER__ || __NTHAL__ || __NTDLL__ || __NTAPP__ */
20 * PURPOSE: Flags for RtlQueryRegistryValues
22 #define RTL_QUERY_REGISTRY_SUBKEY (0x00000001)
23 #define RTL_QUERY_REGISTRY_TOPKEY (0x00000002)
24 #define RTL_QUERY_REGISTRY_REQUIRED (0x00000004)
25 #define RTL_QUERY_REGISTRY_NOVALUE (0x00000008)
26 #define RTL_QUERY_REGISTRY_NOEXPAND (0x00000010)
27 #define RTL_QUERY_REGISTRY_DIRECT (0x00000020)
28 #define RTL_QUERY_REGISTRY_DELETE (0x00000040)
32 * PURPOSE: Used with RtlCheckRegistryKey, RtlCreateRegistryKey,
33 * RtlDeleteRegistryKey
35 #define RTL_REGISTRY_ABSOLUTE 0
36 #define RTL_REGISTRY_SERVICES 1
37 #define RTL_REGISTRY_CONTROL 2
38 #define RTL_REGISTRY_WINDOWS_NT 3
39 #define RTL_REGISTRY_DEVICEMAP 4
40 #define RTL_REGISTRY_USER 5
41 #define RTL_REGISTRY_ENUM 6 // ReactOS specific: Used internally in kernel only
42 #define RTL_REGISTRY_MAXIMUM 7
44 #define RTL_REGISTRY_HANDLE 0x40000000
45 #define RTL_REGISTRY_OPTIONAL 0x80000000
48 #define SHORT_SIZE (sizeof(USHORT))
49 #define SHORT_MASK (SHORT_SIZE-1)
50 #define LONG_SIZE (sizeof(ULONG))
51 #define LONG_MASK (LONG_SIZE-1)
52 #define LOWBYTE_MASK 0x00FF
54 #define FIRSTBYTE(Value) ((Value) & LOWBYTE_MASK)
55 #define SECONDBYTE(Value) (((Value) >> 8) & LOWBYTE_MASK)
56 #define THIRDBYTE(Value) (((Value) >> 16) & LOWBYTE_MASK)
57 #define FOURTHBYTE(Value) (((Value) >> 24) & LOWBYTE_MASK)
59 /* FIXME: reverse byte-order on big-endian machines (e.g. MIPS) */
60 #define SHORT_LEAST_SIGNIFICANT_BIT 0
61 #define SHORT_MOST_SIGNIFICANT_BIT 1
63 #define LONG_LEAST_SIGNIFICANT_BIT 0
64 #define LONG_3RD_MOST_SIGNIFICANT_BIT 1
65 #define LONG_2RD_MOST_SIGNIFICANT_BIT 2
66 #define LONG_MOST_SIGNIFICANT_BIT 3
70 #if defined(__NTOSKRNL__) || defined(__NTDLL__)
71 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
72 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
74 #define NLS_MB_CODE_PAGE_TAG (*NlsMbCodePageTag)
75 #define NLS_MB_OEM_CODE_PAGE_TAG (*NlsMbOemCodePageTag)
76 #endif /* __NTOSKRNL__ || __NTDLL__ */
78 extern BOOLEAN NLS_MB_CODE_PAGE_TAG
;
79 extern BOOLEAN NLS_MB_OEM_CODE_PAGE_TAG
;
83 * NOTE: ReactOS extensions
85 #define RtlMin(X,Y) (((X) < (Y))? (X) : (Y))
86 #define RtlMax(X,Y) (((X) > (Y))? (X) : (Y))
87 #define RtlMin3(X,Y,Z) (((X) < (Y)) ? RtlMin(X,Z) : RtlMin(Y,Z))
88 #define RtlMax3(X,Y,Z) (((X) > (Y)) ? RtlMax(X,Z) : RtlMax(Y,Z))
93 * InitializeObjectAttributes (
94 * POBJECT_ATTRIBUTES InitializedAttributes,
95 * PUNICODE_STRING ObjectName,
97 * HANDLE RootDirectory,
98 * PSECURITY_DESCRIPTOR SecurityDescriptor
101 * FUNCTION: Sets up a parameter of type OBJECT_ATTRIBUTES for a
102 * subsequent call to ZwCreateXXX or ZwOpenXXX
104 * InitializedAttributes (OUT) = Caller supplied storage for the
106 * ObjectName = Full path name for object
107 * Attributes = Attributes for the object
108 * RootDirectory = Where the object should be placed or NULL
109 * SecurityDescriptor = Ignored
111 #define InitializeObjectAttributes(p,n,a,r,s) \
113 (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
114 (p)->ObjectName = n; \
115 (p)->Attributes = a; \
116 (p)->RootDirectory = r; \
117 (p)->SecurityDescriptor = s; \
118 (p)->SecurityQualityOfService = NULL; \
124 * InitializeListHead (
125 * PLIST_ENTRY ListHead
128 * FUNCTION: Initializes a double linked list
130 * ListHead = Caller supplied storage for the head of the list
132 #define InitializeListHead(ListHead) \
134 (ListHead)->Flink = (ListHead); \
135 (ListHead)->Blink = (ListHead); \
142 * PLIST_ENTRY ListHead,
146 * FUNCTION: Inserts an entry in a double linked list
148 * ListHead = Head of the list
149 * Entry = Entry to insert
151 #define InsertHeadList(ListHead, ListEntry) \
153 PLIST_ENTRY OldFlink; \
154 OldFlink = (ListHead)->Flink; \
155 (ListEntry)->Flink = OldFlink; \
156 (ListEntry)->Blink = (ListHead); \
157 OldFlink->Blink = (ListEntry); \
158 (ListHead)->Flink = (ListEntry); \
159 assert((ListEntry) != NULL); \
160 assert((ListEntry)->Blink!=NULL); \
161 assert((ListEntry)->Blink->Flink == (ListEntry)); \
162 assert((ListEntry)->Flink != NULL); \
163 assert((ListEntry)->Flink->Blink == (ListEntry)); \
170 * PLIST_ENTRY ListHead,
175 * Inserts an entry in a double linked list
178 * ListHead = Head of the list
179 * Entry = Entry to insert
181 #define InsertTailList(ListHead, ListEntry) \
183 PLIST_ENTRY OldBlink; \
184 OldBlink = (ListHead)->Blink; \
185 (ListEntry)->Flink = (ListHead); \
186 (ListEntry)->Blink = OldBlink; \
187 OldBlink->Flink = (ListEntry); \
188 (ListHead)->Blink = (ListEntry); \
189 assert((ListEntry) != NULL); \
190 assert((ListEntry)->Blink != NULL); \
191 assert((ListEntry)->Blink->Flink == (ListEntry)); \
192 assert((ListEntry)->Flink != NULL); \
193 assert((ListEntry)->Flink->Blink == (ListEntry)); \
199 * PLIST_ENTRY ListHead
203 * Checks if a double linked list is empty
206 * ListHead = Head of the list
208 #define IsListEmpty(ListHead) \
209 ((ListHead)->Flink == (ListHead))
215 * PSINGLE_LIST_ENTRY ListHead
219 * Removes an entry from the head of a single linked list
222 * ListHead = Head of the list
228 #define PopEntryList(ListHead) \
231 PSINGLE_LIST_ENTRY FirstEntry; \
232 FirstEntry = (ListHead)->Next; \
233 if (FirstEntry != NULL) \
235 (ListHead)->Next = FirstEntry->Next; \
243 PSINGLE_LIST_ENTRY ListHead
246 PSINGLE_LIST_ENTRY ListEntry
;
248 ListEntry
= ListHead
->Next
;
251 ListHead
->Next
= ListEntry
->Next
;
259 PSINGLE_LIST_ENTRY ListHead,
260 PSINGLE_LIST_ENTRY Entry
264 #define PushEntryList(ListHead,Entry) \
265 (Entry)->Next = (ListHead)->Next; \
266 (ListHead)->Next = (Entry)
272 PSINGLE_LIST_ENTRY ListHead
,
273 PSINGLE_LIST_ENTRY Entry
276 Entry
->Next
= ListHead
->Next
;
277 ListHead
->Next
= Entry
;
282 * An ReactOS extension
288 PSLIST_HEADER ListHead
291 PSINGLE_LIST_ENTRY ListEntry
;
293 ListEntry
= ListHead
->s
.Next
.Next
;
296 ListHead
->s
.Next
.Next
= ListEntry
->Next
;
298 ListHead
->s
.Sequence
++;
305 * An ReactOS extension
311 PSLIST_HEADER ListHead
,
312 PSINGLE_LIST_ENTRY Entry
315 Entry
->Next
= ListHead
->s
.Next
.Next
;
316 ListHead
->s
.Next
.Next
= Entry
;
318 ListHead
->s
.Sequence
++;
329 * Removes an entry from a double linked list
332 * ListEntry = Entry to remove
334 #define RemoveEntryList(ListEntry) \
336 PLIST_ENTRY OldFlink; \
337 PLIST_ENTRY OldBlink; \
338 assert((ListEntry) != NULL); \
339 assert((ListEntry)->Blink!=NULL); \
340 assert((ListEntry)->Blink->Flink == (ListEntry)); \
341 assert((ListEntry)->Flink != NULL); \
342 assert((ListEntry)->Flink->Blink == (ListEntry)); \
343 OldFlink = (ListEntry)->Flink; \
344 OldBlink = (ListEntry)->Blink; \
345 OldFlink->Blink = OldBlink; \
346 OldBlink->Flink = OldFlink; \
347 (ListEntry)->Flink = NULL; \
348 (ListEntry)->Blink = NULL; \
355 * PLIST_ENTRY ListHead
359 * Removes the head entry from a double linked list
362 * ListHead = Head of the list
368 #define RemoveHeadList(ListHead) \
370 {RemoveEntryList((ListHead)->Flink)}
387 PLIST_ENTRY OldFlink
;
388 PLIST_ENTRY OldBlink
;
390 Old
= ListHead
->Flink
;
392 OldFlink
= ListHead
->Flink
->Flink
;
393 OldBlink
= ListHead
->Flink
->Blink
;
394 OldFlink
->Blink
= OldBlink
;
395 OldBlink
->Flink
= OldFlink
;
409 * PLIST_ENTRY ListHead
413 * Removes the tail entry from a double linked list
416 * ListHead = Head of the list
422 #define RemoveTailList(ListHead) \
424 {RemoveEntryList((ListHead)->Blink)}
441 PLIST_ENTRY OldFlink
;
442 PLIST_ENTRY OldBlink
;
444 Old
= ListHead
->Blink
;
446 OldFlink
= ListHead
->Blink
->Flink
;
447 OldBlink
= ListHead
->Blink
->Blink
;
448 OldFlink
->Blink
= OldBlink
;
449 OldBlink
->Flink
= OldFlink
;
462 RtlAddAtomToAtomTable (
463 IN PRTL_ATOM_TABLE AtomTable
,
477 RtlAnsiCharToUnicodeChar (
483 RtlAnsiStringToUnicodeSize (
484 PANSI_STRING AnsiString
489 RtlAnsiStringToUnicodeString (
490 PUNICODE_STRING DestinationString
,
491 PANSI_STRING SourceString
,
492 BOOLEAN AllocateDestinationString
497 RtlAppendAsciizToString(
504 RtlAppendStringToString (
511 RtlAppendUnicodeStringToString (
512 PUNICODE_STRING Destination
,
513 PUNICODE_STRING Source
518 RtlAppendUnicodeToString (
519 PUNICODE_STRING Destination
,
526 PRTL_BITMAP BitMapHeader
,
534 PRTL_BITMAP BitMapHeader
,
542 PVOID FailedAssertion
,
558 RtlCheckRegistryKey (
566 IN PRTL_BITMAP BitMapHeader
572 IN PRTL_BITMAP BitMapHeader
,
573 IN ULONG StartingIndex
,
574 IN ULONG NumberToClear
597 BOOLEAN CaseInsensitive
602 RtlCompareUnicodeString (
603 PUNICODE_STRING String1
,
604 PUNICODE_STRING String2
,
605 BOOLEAN BaseInsensitive
609 RtlCompressBuffer(IN USHORT CompressionFormatAndEngine
,
610 IN PUCHAR UncompressedBuffer
,
611 IN ULONG UncompressedBufferSize
,
612 OUT PUCHAR CompressedBuffer
,
613 IN ULONG CompressedBufferSize
,
614 IN ULONG UncompressedChunkSize
,
615 OUT PULONG FinalCompressedSize
,
619 RtlCompressChunks(IN PUCHAR UncompressedBuffer
,
620 IN ULONG UncompressedBufferSize
,
621 OUT PUCHAR CompressedBuffer
,
622 IN ULONG CompressedBufferSize
,
623 IN OUT PCOMPRESSED_DATA_INFO CompressedDataInfo
,
624 IN ULONG CompressedDataInfoLength
,
627 LARGE_INTEGER STDCALL
628 RtlConvertLongToLargeInteger(IN LONG SignedInteger
);
631 RtlConvertSidToUnicodeString(IN OUT PUNICODE_STRING String
,
633 IN BOOLEAN AllocateString
);
635 LARGE_INTEGER STDCALL
636 RtlConvertUlongToLargeInteger(IN ULONG UnsignedInteger
);
654 #define RtlCopyMemory(Destination,Source,Length) \
655 memcpy((Destination),(Source),(Length))
657 #define RtlCopyBytes RtlCopyMemory
660 RtlCopyLuid(IN PLUID LuidDest
,
664 RtlCopyLuidAndAttributesArray(ULONG Count
,
665 PLUID_AND_ATTRIBUTES Src
,
666 PLUID_AND_ATTRIBUTES Dest
);
669 RtlCopySid(ULONG BufferLength
,
674 RtlCopySidAndAttributesArray(ULONG Count
,
675 PSID_AND_ATTRIBUTES Src
,
677 PSID_AND_ATTRIBUTES Dest
,
679 PVOID
* RemainingSidArea
,
680 PULONG RemainingSidAreaSize
);
683 RtlCopyString(PSTRING DestinationString
,
684 PSTRING SourceString
);
687 RtlCopyUnicodeString(PUNICODE_STRING DestinationString
,
688 PUNICODE_STRING SourceString
);
691 RtlCreateAtomTable(IN ULONG TableSize
,
692 IN OUT PRTL_ATOM_TABLE
*AtomTable
);
702 PRTL_HEAP_DEFINITION Definition
707 RtlCreateRegistryKey (
714 RtlCreateSecurityDescriptor (
715 PSECURITY_DESCRIPTOR SecurityDescriptor
,
721 RtlCreateUnicodeString (
722 OUT PUNICODE_STRING Destination
,
727 RtlCreateUnicodeStringFromAsciiz (OUT PUNICODE_STRING Destination
,
732 RtlCustomCPToUnicodeN (
733 PRTL_NLS_DATA NlsData
,
734 PWCHAR UnicodeString
,
742 RtlDecompressBuffer(IN USHORT CompressionFormat
,
743 OUT PUCHAR UncompressedBuffer
,
744 IN ULONG UncompressedBufferSize
,
745 IN PUCHAR CompressedBuffer
,
746 IN ULONG CompressedBufferSize
,
747 OUT PULONG FinalUncompressedSize
);
750 RtlDecompressChunks(OUT PUCHAR UncompressedBuffer
,
751 IN ULONG UncompressedBufferSize
,
752 IN PUCHAR CompressedBuffer
,
753 IN ULONG CompressedBufferSize
,
754 IN PUCHAR CompressedTail
,
755 IN ULONG CompressedTailSize
,
756 IN PCOMPRESSED_DATA_INFO CompressedDataInfo
);
759 RtlDecompressFragment(IN USHORT CompressionFormat
,
760 OUT PUCHAR UncompressedFragment
,
761 IN ULONG UncompressedFragmentSize
,
762 IN PUCHAR CompressedBuffer
,
763 IN ULONG CompressedBufferSize
,
764 IN ULONG FragmentOffset
,
765 OUT PULONG FinalUncompressedSize
,
769 RtlDeleteAtomFromAtomTable(IN PRTL_ATOM_TABLE AtomTable
,
773 RtlDeleteRegistryValue(IN ULONG RelativeTo
,
778 RtlDescribeChunk(IN USHORT CompressionFormat
,
779 IN OUT PUCHAR
*CompressedBuffer
,
780 IN PUCHAR EndOfCompressedBufferPlus1
,
781 OUT PUCHAR
*ChunkBuffer
,
782 OUT PULONG ChunkSize
);
785 RtlDestroyAtomTable(IN PRTL_ATOM_TABLE AtomTable
);
788 RtlDestroyHeap(HANDLE hheap
);
792 RtlDowncaseUnicodeString (
793 IN OUT PUNICODE_STRING DestinationString
,
794 IN PUNICODE_STRING SourceString
,
795 IN BOOLEAN AllocateDestinationString
801 IN PRTL_ATOM_TABLE AtomTable
,
802 IN BOOLEAN DeletePinned
807 RtlEnlargedIntegerMultiply (
814 RtlEnlargedUnsignedDivide (
815 ULARGE_INTEGER Dividend
,
822 RtlEnlargedUnsignedMultiply (
828 RtlEqualLuid(IN PLUID Luid1
,
836 BOOLEAN CaseInSensitive
841 RtlEqualUnicodeString (
842 PUNICODE_STRING String1
,
843 PUNICODE_STRING String2
,
844 BOOLEAN CaseInSensitive
849 RtlExtendedIntegerMultiply (
850 LARGE_INTEGER Multiplicand
,
856 RtlExtendedLargeIntegerDivide (
857 LARGE_INTEGER Dividend
,
864 RtlExtendedMagicDivide (
865 LARGE_INTEGER Dividend
,
866 LARGE_INTEGER MagicDivisor
,
889 PRTL_BITMAP BitMapHeader
,
896 RtlFindClearBitsAndSet (
897 PRTL_BITMAP BitMapHeader
,
904 RtlFindFirstRunClear (
905 PRTL_BITMAP BitMapHeader
,
912 PRTL_BITMAP BitMapHeader
,
918 RtlFindLongestRunClear (
919 PRTL_BITMAP BitMapHeader
,
925 RtlFindLongestRunSet (
926 PRTL_BITMAP BitMapHeader
,
933 IN PVOID BaseAddress
,
937 OUT PRTL_MESSAGE_RESOURCE_ENTRY
*MessageResourceEntry
943 PRTL_BITMAP BitMapHeader
,
950 RtlFindSetBitsAndClear (
951 PRTL_BITMAP BitMapHeader
,
958 RtlFormatCurrentUserKeyPath (
959 IN OUT PUNICODE_STRING KeyPath
965 PANSI_STRING AnsiString
979 POEM_STRING OemString
984 RtlFreeUnicodeString (
985 PUNICODE_STRING UnicodeString
989 RtlGenerate8dot3Name(IN PUNICODE_STRING Name
,
990 IN BOOLEAN AllowExtendedCharacters
,
991 IN OUT PGENERATE_NAME_CONTEXT Context
,
992 OUT PUNICODE_STRING Name8dot3
);
995 RtlGetCallersAddress (
996 PVOID
* CallersAddress
1000 RtlGetCompressionWorkSpaceSize(IN USHORT CompressionFormatAndEngine
,
1001 OUT PULONG CompressBufferAndWorkSpaceSize
,
1002 OUT PULONG CompressFragmentWorkSpaceSize
);
1006 RtlGetDefaultCodePage (
1007 PUSHORT AnsiCodePage
,
1011 #define RtlGetProcessHeap() (NtCurrentPeb()->ProcessHeap)
1015 RtlImageDirectoryEntryToData (
1028 PIMAGE_SECTION_HEADER
1030 RtlImageRvaToSection (
1031 PIMAGE_NT_HEADERS NtHeader
,
1039 PIMAGE_NT_HEADERS NtHeader
,
1042 PIMAGE_SECTION_HEADER
*SectionHeader
1048 PANSI_STRING DestinationString
,
1055 PSTRING DestinationString
,
1061 RtlInitUnicodeString (
1062 PUNICODE_STRING DestinationString
,
1068 InitializeUnicodeString (
1069 PUNICODE_STRING DestinationString,
1071 USHORT MaximumLength,
1075 Initialize an UNICODE_STRING from its fields. Use when you know the values of
1076 all the fields in advance
1080 #define InitializeUnicodeString(__PDEST_STRING__,__LENGTH__,__MAXLENGTH__,__BUFFER__) \
1082 (__PDEST_STRING__)->Length = (__LENGTH__); \
1083 (__PDEST_STRING__)->MaximumLength = (__MAXLENGTH__); \
1084 (__PDEST_STRING__)->Buffer = (__BUFFER__); \
1089 RtlInitUnicodeStringFromLiteral (
1090 PUNICODE_STRING DestinationString,
1094 Initialize an UNICODE_STRING from a wide string literal. WARNING: use only with
1095 string literals and statically initialized arrays, it will calculate the wrong
1100 #define RtlInitUnicodeStringFromLiteral(__PDEST_STRING__,__SOURCE_STRING__) \
1101 InitializeUnicodeString( \
1102 (__PDEST_STRING__), \
1103 sizeof(__SOURCE_STRING__) - sizeof(WCHAR), \
1104 sizeof(__SOURCE_STRING__), \
1105 (__SOURCE_STRING__) \
1109 Static initializer for UNICODE_STRING variables. Usage:
1111 UNICODE_STRING wstr = UNICODE_STRING_INITIALIZER(L"string");
1115 #define UNICODE_STRING_INITIALIZER(__SOURCE_STRING__) \
1117 sizeof((__SOURCE_STRING__)) - sizeof(WCHAR), \
1118 sizeof((__SOURCE_STRING__)), \
1119 (__SOURCE_STRING__) \
1123 Initializer for empty UNICODE_STRING variables. Usage:
1125 UNICODE_STRING wstr = EMPTY_UNICODE_STRING;
1128 #define EMPTY_UNICODE_STRING {0, 0, NULL}
1132 RtlInitializeBitMap (
1133 IN OUT PRTL_BITMAP BitMapHeader
,
1134 IN PULONG BitMapBuffer
,
1135 IN ULONG SizeOfBitMap
1140 RtlInitializeContext (
1141 IN HANDLE ProcessHandle
,
1142 IN PCONTEXT Context
,
1144 IN PTHREAD_START_ROUTINE StartAddress
,
1145 IN OUT PINITIAL_TEB InitialTeb
1150 RtlInitializeGenericTable (
1151 IN OUT PRTL_GENERIC_TABLE Table
,
1152 IN PVOID CompareRoutine
,
1153 IN PVOID AllocateRoutine
,
1154 IN PVOID FreeRoutine
,
1155 IN ULONG UserParameter
1160 RtlInsertElementGenericTable (
1161 IN OUT PRTL_GENERIC_TABLE Table
,
1163 IN ULONG ElementSize
,
1178 RtlIntegerToUnicodeString (
1181 IN OUT PUNICODE_STRING String
1186 RtlIsGenericTableEmpty (
1187 IN PRTL_GENERIC_TABLE Table
1191 RtlIsNameLegalDOS8Dot3(IN PUNICODE_STRING UnicodeName
,
1192 IN PANSI_STRING AnsiName
,
1193 OUT PBOOLEAN SpacesFound
);
1197 RtlLargeIntegerAdd (
1198 LARGE_INTEGER Addend1
,
1199 LARGE_INTEGER Addend2
1204 * RtlLargeIntegerAnd (
1205 * PLARGE_INTEGER Result,
1206 * LARGE_INTEGER Source,
1207 * LARGE_INTEGER Mask
1210 #define RtlLargeIntegerAnd(Result, Source, Mask) \
1212 Result.HighPart = Source.HighPart & Mask.HighPart; \
1213 Result.LowPart = Source.LowPart & Mask.LowPart; \
1218 RtlLargeIntegerArithmeticShift (
1219 LARGE_INTEGER LargeInteger
,
1225 RtlLargeIntegerDivide (
1226 LARGE_INTEGER Dividend
,
1227 LARGE_INTEGER Divisor
,
1228 PLARGE_INTEGER Remainder
1233 * RtlLargeIntegerEqualTo (
1234 * LARGE_INTEGER Operand1,
1235 * LARGE_INTEGER Operand2
1238 #define RtlLargeIntegerEqualTo(X,Y) \
1239 (!(((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)))
1243 * RtlLargeIntegerEqualToZero (
1244 * LARGE_INTEGER Operand
1247 #define RtlLargeIntegerEqualToZero(X) \
1248 (!((X).LowPart | (X).HighPart))
1252 * RtlLargeIntegerGreaterThan (
1253 * LARGE_INTEGER Operand1,
1254 * LARGE_INTEGER Operand2
1257 #define RtlLargeIntegerGreaterThan(X,Y) \
1258 ((((X).HighPart == (Y).HighPart) && ((X).LowPart > (Y).LowPart)) || \
1259 ((X).HighPart > (Y).HighPart))
1263 * RtlLargeIntegerGreaterThanOrEqualTo (
1264 * LARGE_INTEGER Operand1,
1265 * LARGE_INTEGER Operand2
1268 #define RtlLargeIntegerGreaterThanOrEqualTo(X,Y) \
1269 ((((X).HighPart == (Y).HighPart) && ((X).LowPart >= (Y).LowPart)) || \
1270 ((X).HighPart > (Y).HighPart))
1274 * RtlLargeIntegerGreaterThanOrEqualToZero (
1275 * LARGE_INTEGER Operand1
1278 #define RtlLargeIntegerGreaterOrEqualToZero(X) \
1283 * RtlLargeIntegerGreaterThanZero (
1284 * LARGE_INTEGER Operand1
1287 #define RtlLargeIntegerGreaterThanZero(X) \
1288 ((((X).HighPart == 0) && ((X).LowPart > 0)) || \
1289 ((X).HighPart > 0 ))
1293 * RtlLargeIntegerLessThan (
1294 * LARGE_INTEGER Operand1,
1295 * LARGE_INTEGER Operand2
1298 #define RtlLargeIntegerLessThan(X,Y) \
1299 ((((X).HighPart == (Y).HighPart) && ((X).LowPart < (Y).LowPart)) || \
1300 ((X).HighPart < (Y).HighPart))
1304 * RtlLargeIntegerLessThanOrEqualTo (
1305 * LARGE_INTEGER Operand1,
1306 * LARGE_INTEGER Operand2
1309 #define RtlLargeIntegerLessThanOrEqualTo(X,Y) \
1310 ((((X).HighPart == (Y).HighPart) && ((X).LowPart <= (Y).LowPart)) || \
1311 ((X).HighPart < (Y).HighPart))
1315 * RtlLargeIntegerLessThanOrEqualToZero (
1316 * LARGE_INTEGER Operand
1319 #define RtlLargeIntegerLessOrEqualToZero(X) \
1320 (((X).HighPart < 0) || !((X).LowPart | (X).HighPart))
1324 * RtlLargeIntegerLessThanZero (
1325 * LARGE_INTEGER Operand
1328 #define RtlLargeIntegerLessThanZero(X) \
1329 (((X).HighPart < 0))
1333 RtlLargeIntegerNegate (
1334 LARGE_INTEGER Subtrahend
1339 * RtlLargeIntegerNotEqualTo (
1340 * LARGE_INTEGER Operand1,
1341 * LARGE_INTEGER Operand2
1344 #define RtlLargeIntegerNotEqualTo(X,Y) \
1345 ((((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)))
1349 * RtlLargeIntegerNotEqualToZero (
1350 * LARGE_INTEGER Operand
1353 #define RtlLargeIntegerNotEqualToZero(X) \
1354 (((X).LowPart | (X).HighPart))
1358 RtlLargeIntegerShiftLeft (
1359 LARGE_INTEGER LargeInteger
,
1365 RtlLargeIntegerShiftRight (
1366 LARGE_INTEGER LargeInteger
,
1372 RtlLargeIntegerSubtract (
1373 LARGE_INTEGER Minuend
,
1374 LARGE_INTEGER Subtrahend
1379 RtlLengthSecurityDescriptor (
1380 PSECURITY_DESCRIPTOR SecurityDescriptor
1391 RtlLookupAtomInAtomTable (
1392 IN PRTL_ATOM_TABLE AtomTable
,
1398 RtlMoveMemory (PVOID Destination
, CONST VOID
* Source
, ULONG Length
);
1402 RtlMultiByteToUnicodeN (
1403 PWCHAR UnicodeString
,
1412 RtlMultiByteToUnicodeSize (
1420 RtlNtStatusToDosError (
1426 RtlNtStatusToDosErrorNoTeb (
1432 RtlNtStatusToPsxErrno (
1438 RtlNumberGenericTableElements (
1439 IN PRTL_GENERIC_TABLE Table
1444 RtlNumberOfClearBits (
1445 PRTL_BITMAP BitMapHeader
1450 RtlNumberOfSetBits (
1451 PRTL_BITMAP BitMapHeader
1456 RtlOemStringToUnicodeSize (
1457 POEM_STRING AnsiString
1462 RtlOemStringToUnicodeString (
1463 PUNICODE_STRING DestinationString
,
1464 POEM_STRING SourceString
,
1465 BOOLEAN AllocateDestinationString
1471 PWCHAR UnicodeString
,
1480 RtlOpenCurrentUser (
1481 IN ACCESS_MASK DesiredAccess
,
1482 OUT PHANDLE KeyHandle
1486 RtlPinAtomInAtomTable (
1487 IN PRTL_ATOM_TABLE AtomTable
,
1494 PANSI_STRING String1
,
1495 PANSI_STRING String2
,
1496 BOOLEAN CaseInsensitive
1501 RtlPrefixUnicodeString (
1502 PUNICODE_STRING String1
,
1503 PUNICODE_STRING String2
,
1504 BOOLEAN CaseInsensitive
1509 RtlQueryAtomInAtomTable (
1510 IN PRTL_ATOM_TABLE AtomTable
,
1512 IN OUT PULONG RefCount OPTIONAL
,
1513 IN OUT PULONG PinCount OPTIONAL
,
1514 IN OUT PWSTR AtomName OPTIONAL
,
1515 IN OUT PULONG NameLength OPTIONAL
1520 RtlQueryRegistryValues (
1521 IN ULONG RelativeTo
,
1523 IN PRTL_QUERY_REGISTRY_TABLE QueryTable
,
1525 IN PVOID Environment
1530 RtlQueryTimeZoneInformation (
1531 IN OUT PTIME_ZONE_INFORMATION TimeZoneInformation
1537 IN PEXCEPTION_RECORD ExceptionRecord
1550 RtlReserveChunk(IN USHORT CompressionFormat
,
1551 IN OUT PUCHAR
*CompressedBuffer
,
1552 IN PUCHAR EndOfCompressedBufferPlus1
,
1553 OUT PUCHAR
*ChunkBuffer
,
1554 IN ULONG ChunkSize
);
1558 * RtlRetrieveUlong (
1559 * PULONG DestinationAddress,
1560 * PULONG SourceAddress
1563 #define RtlRetrieveUlong(DestAddress,SrcAddress) \
1564 if ((ULONG)(SrcAddress) & LONG_MASK) \
1566 ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
1567 ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
1568 ((PUCHAR)(DestAddress))[2]=((PUCHAR)(SrcAddress))[2]; \
1569 ((PUCHAR)(DestAddress))[3]=((PUCHAR)(SrcAddress))[3]; \
1573 *((PULONG)(DestAddress))=*((PULONG)(SrcAddress)); \
1578 * RtlRetrieveUshort (
1579 * PUSHORT DestinationAddress,
1580 * PUSHORT SourceAddress
1583 #define RtlRetrieveUshort(DestAddress,SrcAddress) \
1584 if ((ULONG)(SrcAddress) & SHORT_MASK) \
1586 ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
1587 ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
1591 *((PUSHORT)(DestAddress))=*((PUSHORT)(SrcAddress)); \
1596 RtlSecondsSince1970ToTime (
1597 ULONG SecondsSince1970
,
1603 RtlSecondsSince1980ToTime (
1604 ULONG SecondsSince1980
,
1611 IN PRTL_BITMAP BitMapHeader
1617 PRTL_BITMAP BitMapHeader
,
1618 ULONG StartingIndex
,
1624 RtlSetDaclSecurityDescriptor (
1625 PSECURITY_DESCRIPTOR SecurityDescriptor
,
1626 BOOLEAN DaclPresent
,
1628 BOOLEAN DaclDefaulted
1633 RtlSetTimeZoneInformation (
1634 IN OUT PTIME_ZONE_INFORMATION TimeZoneInformation
1652 #define RtlStoreUlong(Address,Value) \
1653 if ((ULONG)(Address) & LONG_MASK) \
1655 ((PUCHAR)(Address))[LONG_LEAST_SIGNIFICANT_BIT]=(UCHAR)(FIRSTBYTE(Value)); \
1656 ((PUCHAR)(Address))[LONG_3RD_MOST_SIGNIFICANT_BIT]=(UCHAR)(FIRSTBYTE(Value)); \
1657 ((PUCHAR)(Address))[LONG_2ND_MOST_SIGNIFICANT_BIT]=(UCHAR)(THIRDBYTE(Value)); \
1658 ((PUCHAR)(Address))[LONG_MOST_SIGNIFICANT_BIT]=(UCHAR)(FOURTHBYTE(Value)); \
1662 *((PULONG)(Address))=(ULONG)(Value); \
1672 #define RtlStoreUshort(Address,Value) \
1673 if ((ULONG)(Address) & SHORT_MASK) \
1675 ((PUCHAR)(Address))[SHORT_LEAST_SIGNIFICANT_BIT]=(UCHAR)(FIRSTBYTE(Value)); \
1676 ((PUCHAR)(Address))[SHORT_MOST_SIGNIFICANT_BIT]=(UCHAR)(SECONDBYTE(Value)); \
1680 *((PUSHORT)(Address))=(USHORT)(Value); \
1685 RtlTimeFieldsToTime (
1686 PTIME_FIELDS TimeFields
,
1692 RtlTimeToSecondsSince1970 (
1693 PLARGE_INTEGER Time
,
1694 PULONG SecondsSince1970
1699 RtlTimeToSecondsSince1980 (
1700 PLARGE_INTEGER Time
,
1701 PULONG SecondsSince1980
1706 RtlTimeToTimeFields (
1707 PLARGE_INTEGER Time
,
1708 PTIME_FIELDS TimeFields
1713 RtlUnicodeStringToAnsiSize (
1714 IN PUNICODE_STRING UnicodeString
1719 RtlUnicodeStringToAnsiString (
1720 IN OUT PANSI_STRING DestinationString
,
1721 IN PUNICODE_STRING SourceString
,
1722 IN BOOLEAN AllocateDestinationString
1727 RtlUnicodeStringToInteger (
1728 IN PUNICODE_STRING String
,
1735 RtlUnicodeStringToOemSize (
1736 IN PUNICODE_STRING UnicodeString
1741 RtlUnicodeStringToCountedOemString (
1742 IN OUT POEM_STRING DestinationString
,
1743 IN PUNICODE_STRING SourceString
,
1744 IN BOOLEAN AllocateDestinationString
1749 RtlUnicodeStringToOemString (
1750 IN OUT POEM_STRING DestinationString
,
1751 IN PUNICODE_STRING SourceString
,
1752 IN BOOLEAN AllocateDestinationString
1757 RtlUnicodeToCustomCPN (
1758 PRTL_NLS_DATA NlsData
,
1762 PWCHAR UnicodeString
,
1768 RtlUnicodeToMultiByteN (
1772 PWCHAR UnicodeString
,
1778 RtlUnicodeToMultiByteSize (
1780 PWCHAR UnicodeString
,
1790 PWCHAR UnicodeString
,
1803 PEXCEPTION_REGISTRATION RegistrationFrame
,
1804 PVOID ReturnAddress
,
1805 PEXCEPTION_RECORD ExceptionRecord
,
1811 RtlUpcaseUnicodeChar (
1817 RtlUpcaseUnicodeString (
1818 IN OUT PUNICODE_STRING DestinationString
,
1819 IN PUNICODE_STRING SourceString
,
1820 IN BOOLEAN AllocateDestinationString
1825 RtlUpcaseUnicodeStringToAnsiString (
1826 IN OUT PANSI_STRING DestinationString
,
1827 IN PUNICODE_STRING SourceString
,
1828 IN BOOLEAN AllocateDestinationString
1833 RtlUpcaseUnicodeStringToCountedOemString (
1834 IN OUT POEM_STRING DestinationString
,
1835 IN PUNICODE_STRING SourceString
,
1836 IN BOOLEAN AllocateDestinationString
1841 RtlUpcaseUnicodeStringToOemString (
1842 IN OUT POEM_STRING DestinationString
,
1843 IN PUNICODE_STRING SourceString
,
1844 IN BOOLEAN AllocateDestinationString
1849 RtlUpcaseUnicodeToCustomCPN (
1850 PRTL_NLS_DATA NlsData
,
1854 PWCHAR UnicodeString
,
1860 RtlUpcaseUnicodeToMultiByteN (
1864 PWCHAR UnicodeString
,
1870 RtlUpcaseUnicodeToOemN (
1874 PWCHAR UnicodeString
,
1887 PSTRING DestinationString
,
1888 PSTRING SourceString
1901 RtlValidSecurityDescriptor (
1902 PSECURITY_DESCRIPTOR SecurityDescriptor
1906 RtlValidSid(IN PSID Sid
);
1910 RtlWriteRegistryValue (
1920 RtlZeroMemory (PVOID Destination
, ULONG Length
);
1924 RtlxAnsiStringToUnicodeSize (
1925 IN PANSI_STRING AnsiString
1930 RtlxOemStringToUnicodeSize (
1931 IN POEM_STRING OemString
1936 RtlxUnicodeStringToAnsiSize (
1937 IN PUNICODE_STRING UnicodeString
1942 RtlxUnicodeStringToOemSize (
1943 IN PUNICODE_STRING UnicodeString
1947 /* Register io functions */
1951 READ_REGISTER_UCHAR (
1957 READ_REGISTER_USHORT (
1963 READ_REGISTER_ULONG (
1969 READ_REGISTER_BUFFER_UCHAR (
1977 READ_REGISTER_BUFFER_USHORT (
1985 READ_REGISTER_BUFFER_ULONG (
1993 WRITE_REGISTER_UCHAR (
2000 WRITE_REGISTER_USHORT (
2007 WRITE_REGISTER_ULONG (
2014 WRITE_REGISTER_BUFFER_UCHAR (
2022 WRITE_REGISTER_BUFFER_USHORT (
2030 WRITE_REGISTER_BUFFER_ULONG (
2037 NTSTATUS STDCALL
RtlCreateAcl(PACL Acl
, ULONG AclSize
, ULONG AclRevision
);
2038 NTSTATUS STDCALL
RtlQueryInformationAcl (PACL Acl
, PVOID Information
, ULONG InformationLength
, ACL_INFORMATION_CLASS InformationClass
);
2039 NTSTATUS STDCALL
RtlSetInformationAcl (PACL Acl
, PVOID Information
, ULONG InformationLength
, ACL_INFORMATION_CLASS InformationClass
);
2040 BOOLEAN STDCALL
RtlValidAcl (PACL Acl
);
2042 NTSTATUS STDCALL
RtlAddAccessAllowedAce(PACL Acl
, ULONG Revision
, ACCESS_MASK AccessMask
, PSID Sid
);
2043 NTSTATUS STDCALL
RtlAddAccessDeniedAce(PACL Acl
, ULONG Revision
, ACCESS_MASK AccessMask
, PSID Sid
);
2044 NTSTATUS STDCALL
RtlAddAce(PACL Acl
, ULONG Revision
, ULONG StartingIndex
, PACE AceList
, ULONG AceListLength
);
2045 NTSTATUS STDCALL
RtlAddAuditAccessAce (PACL Acl
, ULONG Revision
, ACCESS_MASK AccessMask
, PSID Sid
, BOOLEAN Success
, BOOLEAN Failure
);
2046 NTSTATUS STDCALL
RtlDeleteAce(PACL Acl
, ULONG AceIndex
);
2047 BOOLEAN STDCALL
RtlFirstFreeAce(PACL Acl
, PACE
* Ace
);
2048 NTSTATUS STDCALL
RtlGetAce(PACL Acl
, ULONG AceIndex
, PACE
*Ace
);
2050 NTSTATUS STDCALL
RtlAbsoluteToSelfRelativeSD (PSECURITY_DESCRIPTOR AbsSD
, PSECURITY_DESCRIPTOR RelSD
, PULONG BufferLength
);
2051 NTSTATUS STDCALL
RtlMakeSelfRelativeSD (PSECURITY_DESCRIPTOR AbsSD
, PSECURITY_DESCRIPTOR RelSD
, PULONG BufferLength
);
2052 NTSTATUS STDCALL
RtlCreateSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor
, ULONG Revision
);
2053 BOOLEAN STDCALL
RtlValidSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor
);
2054 ULONG STDCALL
RtlLengthSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor
);
2055 NTSTATUS STDCALL
RtlSetDaclSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor
, BOOLEAN DaclPresent
, PACL Dacl
, BOOLEAN DaclDefaulted
);
2056 NTSTATUS STDCALL
RtlGetDaclSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor
, PBOOLEAN DaclPresent
, PACL
* Dacl
, PBOOLEAN DaclDefauted
);
2057 NTSTATUS STDCALL
RtlSetOwnerSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor
, PSID Owner
, BOOLEAN OwnerDefaulted
);
2058 NTSTATUS STDCALL
RtlGetOwnerSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor
, PSID
* Owner
, PBOOLEAN OwnerDefaulted
);
2059 NTSTATUS STDCALL
RtlSetGroupSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor
, PSID Group
, BOOLEAN GroupDefaulted
);
2060 NTSTATUS STDCALL
RtlGetGroupSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor
, PSID
* Group
, PBOOLEAN GroupDefaulted
);
2061 NTSTATUS STDCALL
RtlGetControlSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor
, PSECURITY_DESCRIPTOR_CONTROL Control
, PULONG Revision
);
2062 NTSTATUS STDCALL
RtlSetSaclSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor
, BOOLEAN SaclPresent
, PACL Sacl
, BOOLEAN SaclDefaulted
);
2063 NTSTATUS STDCALL
RtlGetSaclSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor
, PBOOLEAN SaclPresent
, PACL
* Sacl
, PBOOLEAN SaclDefauted
);
2064 NTSTATUS STDCALL
RtlSelfRelativeToAbsoluteSD (PSECURITY_DESCRIPTOR RelSD
,
2065 PSECURITY_DESCRIPTOR AbsSD
,
2076 NTSTATUS STDCALL
RtlAllocateAndInitializeSid (PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
,
2077 UCHAR SubAuthorityCount
,
2078 ULONG SubAuthority0
,
2079 ULONG SubAuthority1
,
2080 ULONG SubAuthority2
,
2081 ULONG SubAuthority3
,
2082 ULONG SubAuthority4
,
2083 ULONG SubAuthority5
,
2084 ULONG SubAuthority6
,
2085 ULONG SubAuthority7
,
2087 ULONG STDCALL
RtlLengthRequiredSid (UCHAR SubAuthorityCount
);
2088 PSID_IDENTIFIER_AUTHORITY STDCALL
RtlIdentifierAuthoritySid (PSID Sid
);
2089 NTSTATUS STDCALL
RtlInitializeSid (PSID Sid
, PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
, UCHAR SubAuthorityCount
);
2090 PULONG STDCALL
RtlSubAuthoritySid (PSID Sid
, ULONG SubAuthority
);
2091 BOOLEAN STDCALL
RtlEqualPrefixSid (PSID Sid1
, PSID Sid2
);
2092 BOOLEAN STDCALL
RtlEqualSid(PSID Sid1
, PSID Sid2
);
2093 PSID STDCALL
RtlFreeSid (PSID Sid
);
2094 ULONG STDCALL
RtlLengthSid (PSID Sid
);
2095 PULONG STDCALL
RtlSubAuthoritySid (PSID Sid
, ULONG SubAuthority
);
2096 PUCHAR STDCALL
RtlSubAuthorityCountSid (PSID Sid
);
2097 BOOLEAN STDCALL
RtlValidSid (PSID Sid
);
2098 NTSTATUS STDCALL
RtlConvertSidToUnicodeString (PUNICODE_STRING String
, PSID Sid
, BOOLEAN AllocateBuffer
);
2100 BOOLEAN STDCALL
RtlAreAllAccessesGranted (ACCESS_MASK GrantedAccess
, ACCESS_MASK DesiredAccess
);
2101 BOOLEAN STDCALL
RtlAreAnyAccessesGranted (ACCESS_MASK GrantedAccess
, ACCESS_MASK DesiredAccess
);
2102 VOID STDCALL
RtlMapGenericMask (PACCESS_MASK AccessMask
, PGENERIC_MAPPING GenericMapping
);
2105 /* functions exported from NTOSKRNL.EXE which are considered RTL */
2107 #if defined(__NTOSKRNL__) || defined(__NTDRIVER__) || defined(__NTHAL__) || defined(__NTDLL__) || defined(__NTAPP__)
2109 char *_itoa (int value
, char *string
, int radix
);
2110 int _snprintf(char * buf
, size_t cnt
, const char *fmt
, ...);
2111 int _snwprintf(wchar_t *buf
, size_t cnt
, const wchar_t *fmt
, ...);
2112 int _stricmp(const char *s1
, const char *s2
);
2113 char * _strlwr(char *x
);
2114 int _strnicmp(const char *s1
, const char *s2
, size_t n
);
2115 char * _strnset(char* szToFill
, int szFill
, size_t sizeMaxFill
);
2116 char * _strrev(char *s
);
2117 char * _strset(char* szToFill
, int szFill
);
2118 char * _strupr(char *x
);
2119 int _vsnprintf(char *buf
, size_t cnt
, const char *fmt
, va_list args
);
2120 int _wcsicmp (const wchar_t* cs
, const wchar_t* ct
);
2121 wchar_t * _wcslwr (wchar_t *x
);
2122 int _wcsnicmp (const wchar_t * cs
,const wchar_t * ct
,size_t count
);
2123 wchar_t* _wcsnset (wchar_t* wsToFill
, wchar_t wcFill
, size_t sizeMaxFill
);
2124 wchar_t * _wcsrev(wchar_t *s
);
2125 wchar_t *_wcsupr(wchar_t *x
);
2127 int atoi(const char *str
);
2128 long atol(const char *str
);
2134 int isxdigit(int c
);
2135 size_t mbstowcs (wchar_t *wcstr
, const char *mbstr
, size_t count
);
2136 int mbtowc (wchar_t *wchar
, const char *mbchar
, size_t count
);
2137 void * memchr(const void *s
, int c
, size_t n
);
2138 void * memcpy(void *to
, const void *from
, size_t count
);
2139 void * memmove(void *dest
,const void *src
, size_t count
);
2140 void * memset(void *src
, int val
, size_t count
);
2147 int sprintf(char * buf
, const char *fmt
, ...);
2148 void srand(unsigned seed
);
2149 char * strcat(char *s
, const char *append
);
2150 char * strchr(const char *s
, int c
);
2151 int strcmp(const char *s1
, const char *s2
);
2152 char * strcpy(char *to
, const char *from
);
2153 size_t strlen(const char *str
);
2154 char * strncat(char *dst
, const char *src
, size_t n
);
2155 int strncmp(const char *s1
, const char *s2
, size_t n
);
2156 char *strncpy(char *dst
, const char *src
, size_t n
);
2157 char *strrchr(const char *s
, int c
);
2158 size_t strspn(const char *s1
, const char *s2
);
2159 char *strstr(const char *s
, const char *find
);
2160 int swprintf(wchar_t *buf
, const wchar_t *fmt
, ...);
2163 wchar_t towlower(wchar_t c
);
2164 wchar_t towupper(wchar_t c
);
2165 int vsprintf(char *buf
, const char *fmt
, va_list args
);
2166 wchar_t * wcscat(wchar_t *dest
, const wchar_t *src
);
2167 wchar_t * wcschr(const wchar_t *str
, wchar_t ch
);
2168 int wcscmp(const wchar_t *cs
, const wchar_t *ct
);
2169 wchar_t* wcscpy(wchar_t* str1
, const wchar_t* str2
);
2170 size_t wcscspn(const wchar_t *str
,const wchar_t *reject
);
2171 size_t wcslen(const wchar_t *s
);
2172 wchar_t * wcsncat(wchar_t *dest
, const wchar_t *src
, size_t count
);
2173 int wcsncmp(const wchar_t *cs
, const wchar_t *ct
, size_t count
);
2174 wchar_t * wcsncpy(wchar_t *dest
, const wchar_t *src
, size_t count
);
2175 wchar_t * wcsrchr(const wchar_t *str
, wchar_t ch
);
2176 size_t wcsspn(const wchar_t *str
,const wchar_t *accept
);
2177 wchar_t *wcsstr(const wchar_t *s
,const wchar_t *b
);
2178 size_t wcstombs (char *mbstr
, const wchar_t *wcstr
, size_t count
);
2179 int wctomb (char *mbchar
, wchar_t wchar
);
2181 #endif /* __NTOSKRNL__ || __NTDRIVER__ || __NTHAL__ || __NTDLL__ || __NTAPP__ */
2183 #endif /* __DDK_RTL_H */