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; \
240 static inline PSINGLE_LIST_ENTRY PopEntryList(PSINGLE_LIST_ENTRY ListHead) G_GNUC_UNUSED;
241 #endif /* G_GNUC_UNUSED */
246 PSINGLE_LIST_ENTRY ListHead
249 PSINGLE_LIST_ENTRY ListEntry;
251 ListEntry = ListHead->Next;
254 ListHead->Next = ListEntry->Next;
262 PSINGLE_LIST_ENTRY ListHead,
263 PSINGLE_LIST_ENTRY Entry
267 #define PushEntryList(ListHead,Entry) \
268 (Entry)->Next = (ListHead)->Next; \
269 (ListHead)->Next = (Entry)
272 static inline VOID PushEntryList(PSINGLE_LIST_ENTRY ListHead,PSINGLE_LIST_ENTRY Entry) G_GNUC_UNUSED;
273 #endif /* G_GNUC_UNUSED */
278 PSINGLE_LIST_ENTRY ListHead,
279 PSINGLE_LIST_ENTRY Entry
282 Entry->Next = ListHead->Next;
283 ListHead->Next = Entry;
288 * An ReactOS extension
291 static inline PSINGLE_LIST_ENTRY PopEntrySList(PSLIST_HEADER ListHead) G_GNUC_UNUSED;
292 #endif /* G_GNUC_UNUSED */
297 PSLIST_HEADER ListHead
300 PSINGLE_LIST_ENTRY ListEntry;
302 ListEntry = ListHead->s.Next.Next;
305 ListHead->s.Next.Next = ListEntry->Next;
307 ListHead->s.Sequence++;
314 * An ReactOS extension
317 static inline VOID PushEntrySList(PSLIST_HEADER ListHead,PSINGLE_LIST_ENTRY Entry) G_GNUC_UNUSED;
318 #endif /* G_GNUC_UNUSED */
323 PSLIST_HEADER ListHead,
324 PSINGLE_LIST_ENTRY Entry
327 Entry->Next = ListHead->s.Next.Next;
328 ListHead->s.Next.Next = Entry;
330 ListHead->s.Sequence++;
341 * Removes an entry from a double linked list
344 * ListEntry = Entry to remove
346 #define RemoveEntryList(ListEntry) \
348 PLIST_ENTRY OldFlink; \
349 PLIST_ENTRY OldBlink; \
350 assert((ListEntry) != NULL); \
351 assert((ListEntry)->Blink!=NULL); \
352 assert((ListEntry)->Blink->Flink == (ListEntry)); \
353 assert((ListEntry)->Flink != NULL); \
354 assert((ListEntry)->Flink->Blink == (ListEntry)); \
355 OldFlink = (ListEntry)->Flink; \
356 OldBlink = (ListEntry)->Blink; \
357 OldFlink->Blink = OldBlink; \
358 OldBlink->Flink = OldFlink; \
359 (ListEntry)->Flink = NULL; \
360 (ListEntry)->Blink = NULL; \
367 * PLIST_ENTRY ListHead
371 * Removes the head entry from a double linked list
374 * ListHead = Head of the list
380 #define RemoveHeadList(ListHead) \
382 {RemoveEntryList((ListHead)->Flink)}
392 static inline PLIST_ENTRY RemoveHeadList(PLIST_ENTRY ListHead) G_GNUC_UNUSED;
393 #endif /* G_GNUC_UNUSED */
402 PLIST_ENTRY OldFlink;
403 PLIST_ENTRY OldBlink;
405 Old = ListHead->Flink;
407 OldFlink = ListHead->Flink->Flink;
408 OldBlink = ListHead->Flink->Blink;
409 OldFlink->Blink = OldBlink;
410 OldBlink->Flink = OldFlink;
424 * PLIST_ENTRY ListHead
428 * Removes the tail entry from a double linked list
431 * ListHead = Head of the list
437 #define RemoveTailList(ListHead) \
439 {RemoveEntryList((ListHead)->Blink)}
449 static inline PLIST_ENTRY RemoveTailList(PLIST_ENTRY ListHead) G_GNUC_UNUSED;
450 #endif /* G_GNUC_UNUSED */
459 PLIST_ENTRY OldFlink;
460 PLIST_ENTRY OldBlink;
462 Old = ListHead->Blink;
464 OldFlink = ListHead->Blink->Flink;
465 OldBlink = ListHead->Blink->Blink;
466 OldFlink->Blink = OldBlink;
467 OldBlink->Flink = OldFlink;
480 RtlAddAtomToAtomTable (
481 IN PRTL_ATOM_TABLE AtomTable,
495 RtlAnsiCharToUnicodeChar (
501 RtlAnsiStringToUnicodeSize (
502 PANSI_STRING AnsiString
507 RtlAnsiStringToUnicodeString (
508 PUNICODE_STRING DestinationString,
509 PANSI_STRING SourceString,
510 BOOLEAN AllocateDestinationString
515 RtlAppendAsciizToString(
522 RtlAppendStringToString (
529 RtlAppendUnicodeStringToString (
530 PUNICODE_STRING Destination,
531 PUNICODE_STRING Source
536 RtlAppendUnicodeToString (
537 PUNICODE_STRING Destination,
544 PRTL_BITMAP BitMapHeader,
552 PRTL_BITMAP BitMapHeader,
560 PVOID FailedAssertion,
576 RtlCheckRegistryKey (
584 IN PRTL_BITMAP BitMapHeader
590 IN PRTL_BITMAP BitMapHeader,
591 IN ULONG StartingIndex,
592 IN ULONG NumberToClear
615 BOOLEAN CaseInsensitive
620 RtlCompareUnicodeString (
621 PUNICODE_STRING String1,
622 PUNICODE_STRING String2,
623 BOOLEAN BaseInsensitive
627 RtlCompressBuffer(IN USHORT CompressionFormatAndEngine,
628 IN PUCHAR UncompressedBuffer,
629 IN ULONG UncompressedBufferSize,
630 OUT PUCHAR CompressedBuffer,
631 IN ULONG CompressedBufferSize,
632 IN ULONG UncompressedChunkSize,
633 OUT PULONG FinalCompressedSize,
637 RtlCompressChunks(IN PUCHAR UncompressedBuffer,
638 IN ULONG UncompressedBufferSize,
639 OUT PUCHAR CompressedBuffer,
640 IN ULONG CompressedBufferSize,
641 IN OUT PCOMPRESSED_DATA_INFO CompressedDataInfo,
642 IN ULONG CompressedDataInfoLength,
645 LARGE_INTEGER STDCALL
646 RtlConvertLongToLargeInteger(IN LONG SignedInteger);
649 RtlConvertSidToUnicodeString(IN OUT PUNICODE_STRING String,
651 IN BOOLEAN AllocateString);
653 LARGE_INTEGER STDCALL
654 RtlConvertUlongToLargeInteger(IN ULONG UnsignedInteger);
672 #define RtlCopyMemory(Destination,Source,Length) \
673 memcpy((Destination),(Source),(Length))
675 #define RtlCopyBytes RtlCopyMemory
678 RtlCopyLuid(IN PLUID LuidDest,
682 RtlCopyLuidAndAttributesArray(ULONG Count,
683 PLUID_AND_ATTRIBUTES Src,
684 PLUID_AND_ATTRIBUTES Dest);
687 RtlCopySid(ULONG BufferLength,
692 RtlCopySidAndAttributesArray(ULONG Count,
693 PSID_AND_ATTRIBUTES Src,
695 PSID_AND_ATTRIBUTES Dest,
697 PVOID* RemainingSidArea,
698 PULONG RemainingSidAreaSize);
701 RtlCopyString(PSTRING DestinationString,
702 PSTRING SourceString);
705 RtlCopyUnicodeString(PUNICODE_STRING DestinationString,
706 PUNICODE_STRING SourceString);
709 RtlCreateAtomTable(IN ULONG TableSize,
710 IN OUT PRTL_ATOM_TABLE *AtomTable);
720 PRTL_HEAP_DEFINITION Definition
725 RtlCreateRegistryKey (
732 RtlCreateSecurityDescriptor (
733 PSECURITY_DESCRIPTOR SecurityDescriptor,
739 RtlCreateUnicodeString (
740 OUT PUNICODE_STRING Destination,
745 RtlCreateUnicodeStringFromAsciiz (OUT PUNICODE_STRING Destination,
750 RtlCustomCPToUnicodeN (
751 PRTL_NLS_DATA NlsData,
752 PWCHAR UnicodeString,
760 RtlDecompressBuffer(IN USHORT CompressionFormat,
761 OUT PUCHAR UncompressedBuffer,
762 IN ULONG UncompressedBufferSize,
763 IN PUCHAR CompressedBuffer,
764 IN ULONG CompressedBufferSize,
765 OUT PULONG FinalUncompressedSize);
768 RtlDecompressChunks(OUT PUCHAR UncompressedBuffer,
769 IN ULONG UncompressedBufferSize,
770 IN PUCHAR CompressedBuffer,
771 IN ULONG CompressedBufferSize,
772 IN PUCHAR CompressedTail,
773 IN ULONG CompressedTailSize,
774 IN PCOMPRESSED_DATA_INFO CompressedDataInfo);
777 RtlDecompressFragment(IN USHORT CompressionFormat,
778 OUT PUCHAR UncompressedFragment,
779 IN ULONG UncompressedFragmentSize,
780 IN PUCHAR CompressedBuffer,
781 IN ULONG CompressedBufferSize,
782 IN ULONG FragmentOffset,
783 OUT PULONG FinalUncompressedSize,
787 RtlDeleteAtomFromAtomTable(IN PRTL_ATOM_TABLE AtomTable,
791 RtlDeleteRegistryValue(IN ULONG RelativeTo,
796 RtlDescribeChunk(IN USHORT CompressionFormat,
797 IN OUT PUCHAR *CompressedBuffer,
798 IN PUCHAR EndOfCompressedBufferPlus1,
799 OUT PUCHAR *ChunkBuffer,
800 OUT PULONG ChunkSize);
803 RtlDestroyAtomTable(IN PRTL_ATOM_TABLE AtomTable);
806 RtlDestroyHeap(HANDLE hheap);
810 RtlDowncaseUnicodeString (
811 IN OUT PUNICODE_STRING DestinationString,
812 IN PUNICODE_STRING SourceString,
813 IN BOOLEAN AllocateDestinationString
819 IN PRTL_ATOM_TABLE AtomTable,
820 IN BOOLEAN DeletePinned
825 RtlEnlargedIntegerMultiply (
832 RtlEnlargedUnsignedDivide (
833 ULARGE_INTEGER Dividend,
840 RtlEnlargedUnsignedMultiply (
846 RtlEqualLuid(IN PLUID Luid1,
854 BOOLEAN CaseInSensitive
859 RtlEqualUnicodeString (
860 PUNICODE_STRING String1,
861 PUNICODE_STRING String2,
862 BOOLEAN CaseInSensitive
867 RtlExtendedIntegerMultiply (
868 LARGE_INTEGER Multiplicand,
874 RtlExtendedLargeIntegerDivide (
875 LARGE_INTEGER Dividend,
882 RtlExtendedMagicDivide (
883 LARGE_INTEGER Dividend,
884 LARGE_INTEGER MagicDivisor,
907 PRTL_BITMAP BitMapHeader,
914 RtlFindClearBitsAndSet (
915 PRTL_BITMAP BitMapHeader,
922 RtlFindFirstRunClear (
923 PRTL_BITMAP BitMapHeader,
930 PRTL_BITMAP BitMapHeader,
936 RtlFindLongestRunClear (
937 PRTL_BITMAP BitMapHeader,
943 RtlFindLongestRunSet (
944 PRTL_BITMAP BitMapHeader,
951 IN PVOID BaseAddress,
955 OUT PRTL_MESSAGE_RESOURCE_ENTRY *MessageResourceEntry
961 PRTL_BITMAP BitMapHeader,
968 RtlFindSetBitsAndClear (
969 PRTL_BITMAP BitMapHeader,
976 RtlFormatCurrentUserKeyPath (
977 IN OUT PUNICODE_STRING KeyPath
983 PANSI_STRING AnsiString
997 POEM_STRING OemString
1002 RtlFreeUnicodeString (
1003 PUNICODE_STRING UnicodeString
1007 RtlGenerate8dot3Name(IN PUNICODE_STRING Name,
1008 IN BOOLEAN AllowExtendedCharacters,
1009 IN OUT PGENERATE_NAME_CONTEXT Context,
1010 OUT PUNICODE_STRING Name8dot3);
1013 RtlGetCallersAddress (
1014 PVOID * CallersAddress
1018 RtlGetCompressionWorkSpaceSize(IN USHORT CompressionFormatAndEngine,
1019 OUT PULONG CompressBufferAndWorkSpaceSize,
1020 OUT PULONG CompressFragmentWorkSpaceSize);
1024 RtlGetDefaultCodePage (
1025 PUSHORT AnsiCodePage,
1029 #define RtlGetProcessHeap() (NtCurrentPeb()->ProcessHeap)
1033 RtlImageDirectoryEntryToData (
1046 PIMAGE_SECTION_HEADER
1048 RtlImageRvaToSection (
1049 PIMAGE_NT_HEADERS NtHeader,
1057 PIMAGE_NT_HEADERS NtHeader,
1060 PIMAGE_SECTION_HEADER *SectionHeader
1066 PANSI_STRING DestinationString,
1073 PSTRING DestinationString,
1079 RtlInitUnicodeString (
1080 PUNICODE_STRING DestinationString,
1086 InitializeUnicodeString (
1087 PUNICODE_STRING DestinationString,
1089 USHORT MaximumLength,
1093 Initialize an UNICODE_STRING from its fields. Use when you know the values of
1094 all the fields in advance
1098 #define InitializeUnicodeString(__PDEST_STRING__,__LENGTH__,__MAXLENGTH__,__BUFFER__) \
1100 (__PDEST_STRING__)->Length = (__LENGTH__); \
1101 (__PDEST_STRING__)->MaximumLength = (__MAXLENGTH__); \
1102 (__PDEST_STRING__)->Buffer = (__BUFFER__); \
1107 RtlInitUnicodeStringFromLiteral (
1108 PUNICODE_STRING DestinationString,
1112 Initialize an UNICODE_STRING from a wide string literal. WARNING: use only with
1113 string literals and statically initialized arrays, it will calculate the wrong
1118 /* Prevent hide of the inappropriate passed type by our
1119 * de"const" of the string in the macro below.
1121 #ifdef G_GNUC_UNUSED
1122 static inline const WCHAR *_RtlInitUnicodeStringFromLiteral_typecheck(const WCHAR *s) G_GNUC_UNUSED;
1123 #endif /* G_GNUC_UNUSED */
1124 static inline const WCHAR *_RtlInitUnicodeStringFromLiteral_typecheck(const WCHAR *s) { return s; }
1126 #define RtlInitUnicodeStringFromLiteral(__PDEST_STRING__,__SOURCE_STRING__) \
1127 InitializeUnicodeString( \
1128 (__PDEST_STRING__), \
1129 sizeof(__SOURCE_STRING__) - sizeof(WCHAR), \
1130 sizeof(__SOURCE_STRING__), \
1131 (WCHAR * /* de"const" the string here */ )_RtlInitUnicodeStringFromLiteral_typecheck((__SOURCE_STRING__)) \
1135 Static initializer for UNICODE_STRING variables. Usage:
1137 UNICODE_STRING wstr = UNICODE_STRING_INITIALIZER(L"string");
1141 #define UNICODE_STRING_INITIALIZER(__SOURCE_STRING__) \
1143 sizeof((__SOURCE_STRING__)) - sizeof(WCHAR), \
1144 sizeof((__SOURCE_STRING__)), \
1145 (__SOURCE_STRING__) \
1149 Initializer for empty UNICODE_STRING variables. Usage:
1151 UNICODE_STRING wstr = EMPTY_UNICODE_STRING;
1154 #define EMPTY_UNICODE_STRING {0, 0, NULL}
1158 RtlInitializeBitMap (
1159 IN OUT PRTL_BITMAP BitMapHeader,
1160 IN PULONG BitMapBuffer,
1161 IN ULONG SizeOfBitMap
1166 RtlInitializeContext (
1167 IN HANDLE ProcessHandle,
1168 IN PCONTEXT Context,
1170 IN PTHREAD_START_ROUTINE StartAddress,
1171 IN OUT PINITIAL_TEB InitialTeb
1176 RtlInitializeGenericTable (
1177 IN OUT PRTL_GENERIC_TABLE Table,
1178 IN PVOID CompareRoutine,
1179 IN PVOID AllocateRoutine,
1180 IN PVOID FreeRoutine,
1181 IN ULONG UserParameter
1186 RtlInsertElementGenericTable (
1187 IN OUT PRTL_GENERIC_TABLE Table,
1189 IN ULONG ElementSize,
1190 IN PBOOLEAN NewElement OPTIONAL
1195 RtlLookupElementGenericTableFull (
1196 IN OUT PRTL_GENERIC_TABLE Table,
1198 OUT PVOID *NodeOrParent,
1199 OUT TABLE_SEARCH_RESULT *SearchResult
1213 RtlIntegerToUnicodeString (
1216 IN OUT PUNICODE_STRING String
1221 RtlIsGenericTableEmpty (
1222 IN PRTL_GENERIC_TABLE Table
1226 RtlIsNameLegalDOS8Dot3(IN PUNICODE_STRING UnicodeName,
1227 IN PANSI_STRING AnsiName,
1228 OUT PBOOLEAN SpacesFound);
1232 RtlLargeIntegerAdd (
1233 LARGE_INTEGER Addend1,
1234 LARGE_INTEGER Addend2
1239 * RtlLargeIntegerAnd (
1240 * PLARGE_INTEGER Result,
1241 * LARGE_INTEGER Source,
1242 * LARGE_INTEGER Mask
1245 #define RtlLargeIntegerAnd(Result, Source, Mask) \
1247 Result.HighPart = Source.HighPart & Mask.HighPart; \
1248 Result.LowPart = Source.LowPart & Mask.LowPart; \
1253 RtlLargeIntegerArithmeticShift (
1254 LARGE_INTEGER LargeInteger,
1260 RtlLargeIntegerDivide (
1261 LARGE_INTEGER Dividend,
1262 LARGE_INTEGER Divisor,
1263 PLARGE_INTEGER Remainder
1268 * RtlLargeIntegerEqualTo (
1269 * LARGE_INTEGER Operand1,
1270 * LARGE_INTEGER Operand2
1273 #define RtlLargeIntegerEqualTo(X,Y) \
1274 (!(((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)))
1278 * RtlLargeIntegerEqualToZero (
1279 * LARGE_INTEGER Operand
1282 #define RtlLargeIntegerEqualToZero(X) \
1283 (!((X).LowPart | (X).HighPart))
1287 * RtlLargeIntegerGreaterThan (
1288 * LARGE_INTEGER Operand1,
1289 * LARGE_INTEGER Operand2
1292 #define RtlLargeIntegerGreaterThan(X,Y) \
1293 ((((X).HighPart == (Y).HighPart) && ((X).LowPart > (Y).LowPart)) || \
1294 ((X).HighPart > (Y).HighPart))
1298 * RtlLargeIntegerGreaterThanOrEqualTo (
1299 * LARGE_INTEGER Operand1,
1300 * LARGE_INTEGER Operand2
1303 #define RtlLargeIntegerGreaterThanOrEqualTo(X,Y) \
1304 ((((X).HighPart == (Y).HighPart) && ((X).LowPart >= (Y).LowPart)) || \
1305 ((X).HighPart > (Y).HighPart))
1309 * RtlLargeIntegerGreaterThanOrEqualToZero (
1310 * LARGE_INTEGER Operand1
1313 #define RtlLargeIntegerGreaterOrEqualToZero(X) \
1318 * RtlLargeIntegerGreaterThanZero (
1319 * LARGE_INTEGER Operand1
1322 #define RtlLargeIntegerGreaterThanZero(X) \
1323 ((((X).HighPart == 0) && ((X).LowPart > 0)) || \
1324 ((X).HighPart > 0 ))
1328 * RtlLargeIntegerLessThan (
1329 * LARGE_INTEGER Operand1,
1330 * LARGE_INTEGER Operand2
1333 #define RtlLargeIntegerLessThan(X,Y) \
1334 ((((X).HighPart == (Y).HighPart) && ((X).LowPart < (Y).LowPart)) || \
1335 ((X).HighPart < (Y).HighPart))
1339 * RtlLargeIntegerLessThanOrEqualTo (
1340 * LARGE_INTEGER Operand1,
1341 * LARGE_INTEGER Operand2
1344 #define RtlLargeIntegerLessThanOrEqualTo(X,Y) \
1345 ((((X).HighPart == (Y).HighPart) && ((X).LowPart <= (Y).LowPart)) || \
1346 ((X).HighPart < (Y).HighPart))
1350 * RtlLargeIntegerLessThanOrEqualToZero (
1351 * LARGE_INTEGER Operand
1354 #define RtlLargeIntegerLessOrEqualToZero(X) \
1355 (((X).HighPart < 0) || !((X).LowPart | (X).HighPart))
1359 * RtlLargeIntegerLessThanZero (
1360 * LARGE_INTEGER Operand
1363 #define RtlLargeIntegerLessThanZero(X) \
1364 (((X).HighPart < 0))
1368 RtlLargeIntegerNegate (
1369 LARGE_INTEGER Subtrahend
1374 * RtlLargeIntegerNotEqualTo (
1375 * LARGE_INTEGER Operand1,
1376 * LARGE_INTEGER Operand2
1379 #define RtlLargeIntegerNotEqualTo(X,Y) \
1380 ((((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)))
1384 * RtlLargeIntegerNotEqualToZero (
1385 * LARGE_INTEGER Operand
1388 #define RtlLargeIntegerNotEqualToZero(X) \
1389 (((X).LowPart | (X).HighPart))
1393 RtlLargeIntegerShiftLeft (
1394 LARGE_INTEGER LargeInteger,
1400 RtlLargeIntegerShiftRight (
1401 LARGE_INTEGER LargeInteger,
1407 RtlLargeIntegerSubtract (
1408 LARGE_INTEGER Minuend,
1409 LARGE_INTEGER Subtrahend
1414 RtlLengthSecurityDescriptor (
1415 PSECURITY_DESCRIPTOR SecurityDescriptor
1426 RtlLookupAtomInAtomTable (
1427 IN PRTL_ATOM_TABLE AtomTable,
1433 RtlMoveMemory (PVOID Destination, CONST VOID* Source, ULONG Length);
1437 RtlMultiByteToUnicodeN (
1438 PWCHAR UnicodeString,
1447 RtlMultiByteToUnicodeSize (
1455 RtlNtStatusToDosError (
1461 RtlNtStatusToDosErrorNoTeb (
1467 RtlNtStatusToPsxErrno (
1473 RtlNumberGenericTableElements (
1474 IN PRTL_GENERIC_TABLE Table
1479 RtlNumberOfClearBits (
1480 PRTL_BITMAP BitMapHeader
1485 RtlNumberOfSetBits (
1486 PRTL_BITMAP BitMapHeader
1491 RtlOemStringToUnicodeSize (
1492 POEM_STRING AnsiString
1497 RtlOemStringToUnicodeString (
1498 PUNICODE_STRING DestinationString,
1499 POEM_STRING SourceString,
1500 BOOLEAN AllocateDestinationString
1506 PWCHAR UnicodeString,
1515 RtlOpenCurrentUser (
1516 IN ACCESS_MASK DesiredAccess,
1517 OUT PHANDLE KeyHandle
1521 RtlPinAtomInAtomTable (
1522 IN PRTL_ATOM_TABLE AtomTable,
1529 PANSI_STRING String1,
1530 PANSI_STRING String2,
1531 BOOLEAN CaseInsensitive
1536 RtlPrefixUnicodeString (
1537 PUNICODE_STRING String1,
1538 PUNICODE_STRING String2,
1539 BOOLEAN CaseInsensitive
1544 RtlQueryAtomInAtomTable (
1545 IN PRTL_ATOM_TABLE AtomTable,
1547 IN OUT PULONG RefCount OPTIONAL,
1548 IN OUT PULONG PinCount OPTIONAL,
1549 IN OUT PWSTR AtomName OPTIONAL,
1550 IN OUT PULONG NameLength OPTIONAL
1555 RtlQueryRegistryValues (
1556 IN ULONG RelativeTo,
1558 IN PRTL_QUERY_REGISTRY_TABLE QueryTable,
1560 IN PVOID Environment
1565 RtlQueryTimeZoneInformation (
1566 IN OUT PTIME_ZONE_INFORMATION TimeZoneInformation
1572 IN PEXCEPTION_RECORD ExceptionRecord
1585 RtlReserveChunk(IN USHORT CompressionFormat,
1586 IN OUT PUCHAR *CompressedBuffer,
1587 IN PUCHAR EndOfCompressedBufferPlus1,
1588 OUT PUCHAR *ChunkBuffer,
1589 IN ULONG ChunkSize);
1593 * RtlRetrieveUlong (
1594 * PULONG DestinationAddress,
1595 * PULONG SourceAddress
1598 #define RtlRetrieveUlong(DestAddress,SrcAddress) \
1599 if ((ULONG)(SrcAddress) & LONG_MASK) \
1601 ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
1602 ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
1603 ((PUCHAR)(DestAddress))[2]=((PUCHAR)(SrcAddress))[2]; \
1604 ((PUCHAR)(DestAddress))[3]=((PUCHAR)(SrcAddress))[3]; \
1608 *((PULONG)(DestAddress))=*((PULONG)(SrcAddress)); \
1613 * RtlRetrieveUshort (
1614 * PUSHORT DestinationAddress,
1615 * PUSHORT SourceAddress
1618 #define RtlRetrieveUshort(DestAddress,SrcAddress) \
1619 if ((ULONG)(SrcAddress) & SHORT_MASK) \
1621 ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
1622 ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
1626 *((PUSHORT)(DestAddress))=*((PUSHORT)(SrcAddress)); \
1631 RtlSecondsSince1970ToTime (
1632 ULONG SecondsSince1970,
1638 RtlSecondsSince1980ToTime (
1639 ULONG SecondsSince1980,
1646 IN PRTL_BITMAP BitMapHeader
1652 PRTL_BITMAP BitMapHeader,
1653 ULONG StartingIndex,
1659 RtlSetDaclSecurityDescriptor (
1660 PSECURITY_DESCRIPTOR SecurityDescriptor,
1661 BOOLEAN DaclPresent,
1663 BOOLEAN DaclDefaulted
1668 RtlSetTimeZoneInformation (
1669 IN OUT PTIME_ZONE_INFORMATION TimeZoneInformation
1687 #define RtlStoreUlong(Address,Value) \
1688 if ((ULONG)(Address) & LONG_MASK) \
1690 ((PUCHAR)(Address))[LONG_LEAST_SIGNIFICANT_BIT]=(UCHAR)(FIRSTBYTE(Value)); \
1691 ((PUCHAR)(Address))[LONG_3RD_MOST_SIGNIFICANT_BIT]=(UCHAR)(FIRSTBYTE(Value)); \
1692 ((PUCHAR)(Address))[LONG_2ND_MOST_SIGNIFICANT_BIT]=(UCHAR)(THIRDBYTE(Value)); \
1693 ((PUCHAR)(Address))[LONG_MOST_SIGNIFICANT_BIT]=(UCHAR)(FOURTHBYTE(Value)); \
1697 *((PULONG)(Address))=(ULONG)(Value); \
1707 #define RtlStoreUshort(Address,Value) \
1708 if ((ULONG)(Address) & SHORT_MASK) \
1710 ((PUCHAR)(Address))[SHORT_LEAST_SIGNIFICANT_BIT]=(UCHAR)(FIRSTBYTE(Value)); \
1711 ((PUCHAR)(Address))[SHORT_MOST_SIGNIFICANT_BIT]=(UCHAR)(SECONDBYTE(Value)); \
1715 *((PUSHORT)(Address))=(USHORT)(Value); \
1720 RtlTimeFieldsToTime (
1721 PTIME_FIELDS TimeFields,
1727 RtlTimeToSecondsSince1970 (
1728 PLARGE_INTEGER Time,
1729 PULONG SecondsSince1970
1734 RtlTimeToSecondsSince1980 (
1735 PLARGE_INTEGER Time,
1736 PULONG SecondsSince1980
1741 RtlTimeToTimeFields (
1742 PLARGE_INTEGER Time,
1743 PTIME_FIELDS TimeFields
1748 RtlUnicodeStringToAnsiSize (
1749 IN PUNICODE_STRING UnicodeString
1754 RtlUnicodeStringToAnsiString (
1755 IN OUT PANSI_STRING DestinationString,
1756 IN PUNICODE_STRING SourceString,
1757 IN BOOLEAN AllocateDestinationString
1762 RtlUnicodeStringToInteger (
1763 IN PUNICODE_STRING String,
1770 RtlUnicodeStringToOemSize (
1771 IN PUNICODE_STRING UnicodeString
1776 RtlUnicodeStringToCountedOemString (
1777 IN OUT POEM_STRING DestinationString,
1778 IN PUNICODE_STRING SourceString,
1779 IN BOOLEAN AllocateDestinationString
1784 RtlUnicodeStringToOemString (
1785 IN OUT POEM_STRING DestinationString,
1786 IN PUNICODE_STRING SourceString,
1787 IN BOOLEAN AllocateDestinationString
1792 RtlUnicodeToCustomCPN (
1793 PRTL_NLS_DATA NlsData,
1797 PWCHAR UnicodeString,
1803 RtlUnicodeToMultiByteN (
1807 PWCHAR UnicodeString,
1813 RtlUnicodeToMultiByteSize (
1815 PWCHAR UnicodeString,
1825 PWCHAR UnicodeString,
1838 PEXCEPTION_REGISTRATION RegistrationFrame,
1839 PVOID ReturnAddress,
1840 PEXCEPTION_RECORD ExceptionRecord,
1846 RtlUpcaseUnicodeChar (
1852 RtlUpcaseUnicodeString (
1853 IN OUT PUNICODE_STRING DestinationString,
1854 IN PUNICODE_STRING SourceString,
1855 IN BOOLEAN AllocateDestinationString
1860 RtlUpcaseUnicodeStringToAnsiString (
1861 IN OUT PANSI_STRING DestinationString,
1862 IN PUNICODE_STRING SourceString,
1863 IN BOOLEAN AllocateDestinationString
1868 RtlUpcaseUnicodeStringToCountedOemString (
1869 IN OUT POEM_STRING DestinationString,
1870 IN PUNICODE_STRING SourceString,
1871 IN BOOLEAN AllocateDestinationString
1876 RtlUpcaseUnicodeStringToOemString (
1877 IN OUT POEM_STRING DestinationString,
1878 IN PUNICODE_STRING SourceString,
1879 IN BOOLEAN AllocateDestinationString
1884 RtlUpcaseUnicodeToCustomCPN (
1885 PRTL_NLS_DATA NlsData,
1889 PWCHAR UnicodeString,
1895 RtlUpcaseUnicodeToMultiByteN (
1899 PWCHAR UnicodeString,
1905 RtlUpcaseUnicodeToOemN (
1909 PWCHAR UnicodeString,
1922 PSTRING DestinationString,
1923 PSTRING SourceString
1936 RtlValidSecurityDescriptor (
1937 PSECURITY_DESCRIPTOR SecurityDescriptor
1941 RtlValidSid(IN PSID Sid);
1945 RtlWriteRegistryValue (
1955 RtlZeroMemory (PVOID Destination, ULONG Length);
1959 RtlxAnsiStringToUnicodeSize (
1960 IN PANSI_STRING AnsiString
1965 RtlxOemStringToUnicodeSize (
1966 IN POEM_STRING OemString
1971 RtlxUnicodeStringToAnsiSize (
1972 IN PUNICODE_STRING UnicodeString
1977 RtlxUnicodeStringToOemSize (
1978 IN PUNICODE_STRING UnicodeString
1982 /* Register io functions */
1986 READ_REGISTER_UCHAR (
1992 READ_REGISTER_USHORT (
1998 READ_REGISTER_ULONG (
2004 READ_REGISTER_BUFFER_UCHAR (
2012 READ_REGISTER_BUFFER_USHORT (
2020 READ_REGISTER_BUFFER_ULONG (
2028 WRITE_REGISTER_UCHAR (
2035 WRITE_REGISTER_USHORT (
2042 WRITE_REGISTER_ULONG (
2049 WRITE_REGISTER_BUFFER_UCHAR (
2057 WRITE_REGISTER_BUFFER_USHORT (
2065 WRITE_REGISTER_BUFFER_ULONG (
2072 NTSTATUS STDCALL RtlCreateAcl(PACL Acl, ULONG AclSize, ULONG AclRevision);
2073 NTSTATUS STDCALL RtlQueryInformationAcl (PACL Acl, PVOID Information, ULONG InformationLength, ACL_INFORMATION_CLASS InformationClass);
2074 NTSTATUS STDCALL RtlSetInformationAcl (PACL Acl, PVOID Information, ULONG InformationLength, ACL_INFORMATION_CLASS InformationClass);
2075 BOOLEAN STDCALL RtlValidAcl (PACL Acl);
2077 NTSTATUS STDCALL RtlAddAccessAllowedAce(PACL Acl, ULONG Revision, ACCESS_MASK AccessMask, PSID Sid);
2078 NTSTATUS STDCALL RtlAddAccessDeniedAce(PACL Acl, ULONG Revision, ACCESS_MASK AccessMask, PSID Sid);
2079 NTSTATUS STDCALL RtlAddAce(PACL Acl, ULONG Revision, ULONG StartingIndex, PACE AceList, ULONG AceListLength);
2080 NTSTATUS STDCALL RtlAddAuditAccessAce (PACL Acl, ULONG Revision, ACCESS_MASK AccessMask, PSID Sid, BOOLEAN Success, BOOLEAN Failure);
2081 NTSTATUS STDCALL RtlDeleteAce(PACL Acl, ULONG AceIndex);
2082 BOOLEAN STDCALL RtlFirstFreeAce(PACL Acl, PACE* Ace);
2083 NTSTATUS STDCALL RtlGetAce(PACL Acl, ULONG AceIndex, PACE *Ace);
2085 NTSTATUS STDCALL RtlAbsoluteToSelfRelativeSD (PSECURITY_DESCRIPTOR AbsSD, PSECURITY_DESCRIPTOR RelSD, PULONG BufferLength);
2086 NTSTATUS STDCALL RtlMakeSelfRelativeSD (PSECURITY_DESCRIPTOR AbsSD, PSECURITY_DESCRIPTOR RelSD, PULONG BufferLength);
2087 NTSTATUS STDCALL RtlCreateSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor, ULONG Revision);
2088 BOOLEAN STDCALL RtlValidSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor);
2089 ULONG STDCALL RtlLengthSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor);
2090 NTSTATUS STDCALL RtlSetDaclSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor, BOOLEAN DaclPresent, PACL Dacl, BOOLEAN DaclDefaulted);
2091 NTSTATUS STDCALL RtlGetDaclSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor, PBOOLEAN DaclPresent, PACL* Dacl, PBOOLEAN DaclDefauted);
2092 NTSTATUS STDCALL RtlSetOwnerSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor, PSID Owner, BOOLEAN OwnerDefaulted);
2093 NTSTATUS STDCALL RtlGetOwnerSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor, PSID* Owner, PBOOLEAN OwnerDefaulted);
2094 NTSTATUS STDCALL RtlSetGroupSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor, PSID Group, BOOLEAN GroupDefaulted);
2095 NTSTATUS STDCALL RtlGetGroupSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor, PSID* Group, PBOOLEAN GroupDefaulted);
2096 NTSTATUS STDCALL RtlGetControlSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor, PSECURITY_DESCRIPTOR_CONTROL Control, PULONG Revision);
2097 NTSTATUS STDCALL RtlSetSaclSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor, BOOLEAN SaclPresent, PACL Sacl, BOOLEAN SaclDefaulted);
2098 NTSTATUS STDCALL RtlGetSaclSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor, PBOOLEAN SaclPresent, PACL* Sacl, PBOOLEAN SaclDefauted);
2099 NTSTATUS STDCALL RtlSelfRelativeToAbsoluteSD (PSECURITY_DESCRIPTOR RelSD,
2100 PSECURITY_DESCRIPTOR AbsSD,
2111 NTSTATUS STDCALL RtlAllocateAndInitializeSid (PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
2112 UCHAR SubAuthorityCount,
2113 ULONG SubAuthority0,
2114 ULONG SubAuthority1,
2115 ULONG SubAuthority2,
2116 ULONG SubAuthority3,
2117 ULONG SubAuthority4,
2118 ULONG SubAuthority5,
2119 ULONG SubAuthority6,
2120 ULONG SubAuthority7,
2122 ULONG STDCALL RtlLengthRequiredSid (UCHAR SubAuthorityCount);
2123 PSID_IDENTIFIER_AUTHORITY STDCALL RtlIdentifierAuthoritySid (PSID Sid);
2124 NTSTATUS STDCALL RtlInitializeSid (PSID Sid, PSID_IDENTIFIER_AUTHORITY IdentifierAuthority, UCHAR SubAuthorityCount);
2125 PULONG STDCALL RtlSubAuthoritySid (PSID Sid, ULONG SubAuthority);
2126 BOOLEAN STDCALL RtlEqualPrefixSid (PSID Sid1, PSID Sid2);
2127 BOOLEAN STDCALL RtlEqualSid(PSID Sid1, PSID Sid2);
2128 PSID STDCALL RtlFreeSid (PSID Sid);
2129 ULONG STDCALL RtlLengthSid (PSID Sid);
2130 PULONG STDCALL RtlSubAuthoritySid (PSID Sid, ULONG SubAuthority);
2131 PUCHAR STDCALL RtlSubAuthorityCountSid (PSID Sid);
2132 BOOLEAN STDCALL RtlValidSid (PSID Sid);
2133 NTSTATUS STDCALL RtlConvertSidToUnicodeString (PUNICODE_STRING String, PSID Sid, BOOLEAN AllocateBuffer);
2135 BOOLEAN STDCALL RtlAreAllAccessesGranted (ACCESS_MASK GrantedAccess, ACCESS_MASK DesiredAccess);
2136 BOOLEAN STDCALL RtlAreAnyAccessesGranted (ACCESS_MASK GrantedAccess, ACCESS_MASK DesiredAccess);
2137 VOID STDCALL RtlMapGenericMask (PACCESS_MASK AccessMask, PGENERIC_MAPPING GenericMapping);
2140 /* functions exported from NTOSKRNL.EXE which are considered RTL */
2142 #if defined(__NTOSKRNL__) || defined(__NTDRIVER__) || defined(__NTHAL__) || defined(__NTDLL__) || defined(__NTAPP__)
2144 char *_itoa (int value, char *string, int radix);
2145 int _snprintf(char * buf, size_t cnt, const char *fmt, ...);
2146 int _snwprintf(wchar_t *buf, size_t cnt, const wchar_t *fmt, ...);
2147 int _stricmp(const char *s1, const char *s2);
2148 char * _strlwr(char *x);
2149 int _strnicmp(const char *s1, const char *s2, size_t n);
2150 char * _strnset(char* szToFill, int szFill, size_t sizeMaxFill);
2151 char * _strrev(char *s);
2152 char * _strset(char* szToFill, int szFill);
2153 char * _strupr(char *x);
2154 int _vsnprintf(char *buf, size_t cnt, const char *fmt, va_list args);
2155 int _wcsicmp (const wchar_t* cs, const wchar_t* ct);
2156 wchar_t * _wcslwr (wchar_t *x);
2157 int _wcsnicmp (const wchar_t * cs,const wchar_t * ct,size_t count);
2158 wchar_t* _wcsnset (wchar_t* wsToFill, wchar_t wcFill, size_t sizeMaxFill);
2159 wchar_t * _wcsrev(wchar_t *s);
2160 wchar_t *_wcsupr(wchar_t *x);
2162 int atoi(const char *str);
2163 long atol(const char *str);
2169 int isxdigit(int c);
2170 size_t mbstowcs (wchar_t *wcstr, const char *mbstr, size_t count);
2171 int mbtowc (wchar_t *wchar, const char *mbchar, size_t count);
2172 void * memchr(const void *s, int c, size_t n);
2173 void * memcpy(void *to, const void *from, size_t count);
2174 void * memmove(void *dest,const void *src, size_t count);
2175 void * memset(void *src, int val, size_t count);
2182 int sprintf(char * buf, const char *fmt, ...);
2183 void srand(unsigned seed);
2184 char * strcat(char *s, const char *append);
2185 char * strchr(const char *s, int c);
2186 int strcmp(const char *s1, const char *s2);
2187 char * strcpy(char *to, const char *from);
2188 size_t strlen(const char *str);
2189 char * strncat(char *dst, const char *src, size_t n);
2190 int strncmp(const char *s1, const char *s2, size_t n);
2191 char *strncpy(char *dst, const char *src, size_t n);
2192 char *strrchr(const char *s, int c);
2193 size_t strspn(const char *s1, const char *s2);
2194 char *strstr(const char *s, const char *find);
2195 int swprintf(wchar_t *buf, const wchar_t *fmt, ...);
2198 wchar_t towlower(wchar_t c);
2199 wchar_t towupper(wchar_t c);
2200 int vsprintf(char *buf, const char *fmt, va_list args);
2201 wchar_t * wcscat(wchar_t *dest, const wchar_t *src);
2202 wchar_t * wcschr(const wchar_t *str, wchar_t ch);
2203 int wcscmp(const wchar_t *cs, const wchar_t *ct);
2204 wchar_t* wcscpy(wchar_t* str1, const wchar_t* str2);
2205 size_t wcscspn(const wchar_t *str,const wchar_t *reject);
2206 size_t wcslen(const wchar_t *s);
2207 wchar_t * wcsncat(wchar_t *dest, const wchar_t *src, size_t count);
2208 int wcsncmp(const wchar_t *cs, const wchar_t *ct, size_t count);
2209 wchar_t * wcsncpy(wchar_t *dest, const wchar_t *src, size_t count);
2210 wchar_t * wcsrchr(const wchar_t *str, wchar_t ch);
2211 size_t wcsspn(const wchar_t *str,const wchar_t *accept);
2212 wchar_t *wcsstr(const wchar_t *s,const wchar_t *b);
2213 size_t wcstombs (char *mbstr, const wchar_t *wcstr, size_t count);
2214 int wctomb (char *mbchar, wchar_t wchar);
2216 #endif /* __NTOSKRNL__ || __NTDRIVER__ || __NTHAL__ || __NTDLL__ || __NTAPP__ */
2218 #endif /* __DDK_RTL_H */