1 /* $Id: rtl.h,v 1.20 2003/11/03 20:30:23 gdalsnes Exp $
8 #if defined(__NTOSKRNL__) || defined(__NTDRIVER__) || defined(__NTHAL__) || defined(__NTDLL__) || defined (__NTAPP__)
13 #endif /* __NTOSKRNL__ || __NTDRIVER__ || __NTHAL__ || __NTDLL__ || __NTAPP__ */
21 * PURPOSE: Flags for RtlQueryRegistryValues
23 #define RTL_QUERY_REGISTRY_SUBKEY (0x00000001)
24 #define RTL_QUERY_REGISTRY_TOPKEY (0x00000002)
25 #define RTL_QUERY_REGISTRY_REQUIRED (0x00000004)
26 #define RTL_QUERY_REGISTRY_NOVALUE (0x00000008)
27 #define RTL_QUERY_REGISTRY_NOEXPAND (0x00000010)
28 #define RTL_QUERY_REGISTRY_DIRECT (0x00000020)
29 #define RTL_QUERY_REGISTRY_DELETE (0x00000040)
33 * PURPOSE: Flags used by RtlIsTextUnicode and IsTextUnicode
35 #define IS_TEXT_UNICODE_ASCII16 (0x00000001)
36 #define IS_TEXT_UNICODE_REVERSE_ASCII16 (0x00000010)
37 #define IS_TEXT_UNICODE_STATISTICS (0x00000002)
38 #define IS_TEXT_UNICODE_REVERSE_STATISTICS (0x00000020)
39 #define IS_TEXT_UNICODE_CONTROLS (0x00000004)
40 #define IS_TEXT_UNICODE_REVERSE_CONTROLS (0x00000040)
41 #define IS_TEXT_UNICODE_SIGNATURE (0x00000008)
42 #define IS_TEXT_UNICODE_REVERSE_SIGNATURE (0x00000080)
43 #define IS_TEXT_UNICODE_ILLEGAL_CHARS (0x00000100)
44 #define IS_TEXT_UNICODE_ODD_LENGTH (0x00000200)
45 #define IS_TEXT_UNICODE_NULL_BYTES (0x00001000)
46 #define IS_TEXT_UNICODE_UNICODE_MASK (0x0000000F)
47 #define IS_TEXT_UNICODE_REVERSE_MASK (0x000000F0)
48 #define IS_TEXT_UNICODE_NOT_UNICODE_MASK (0x00000F00)
49 #define IS_TEXT_UNICODE_NOT_ASCII_MASK (0x0000F000)
53 * InitializeObjectAttributes (
54 * POBJECT_ATTRIBUTES InitializedAttributes,
55 * PUNICODE_STRING ObjectName,
57 * HANDLE RootDirectory,
58 * PSECURITY_DESCRIPTOR SecurityDescriptor
61 * FUNCTION: Sets up a parameter of type OBJECT_ATTRIBUTES for a
62 * subsequent call to ZwCreateXXX or ZwOpenXXX
64 * InitializedAttributes (OUT) = Caller supplied storage for the
66 * ObjectName = Full path name for object
67 * Attributes = Attributes for the object
68 * RootDirectory = Where the object should be placed or NULL
69 * SecurityDescriptor = Ignored
71 #define InitializeObjectAttributes(p,n,a,r,s) \
73 (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
74 (p)->ObjectName = n; \
75 (p)->Attributes = a; \
76 (p)->RootDirectory = r; \
77 (p)->SecurityDescriptor = s; \
78 (p)->SecurityQualityOfService = NULL; \
84 * InitializeListHead (
85 * PLIST_ENTRY ListHead
88 * FUNCTION: Initializes a double linked list
90 * ListHead = Caller supplied storage for the head of the list
92 #define InitializeListHead(ListHead) \
94 (ListHead)->Flink = (ListHead); \
95 (ListHead)->Blink = (ListHead); \
102 * PLIST_ENTRY ListHead,
106 * FUNCTION: Inserts an entry in a double linked list
108 * ListHead = Head of the list
109 * Entry = Entry to insert
111 #define InsertHeadList(ListHead, ListEntry) \
113 PLIST_ENTRY OldFlink; \
114 OldFlink = (ListHead)->Flink; \
115 (ListEntry)->Flink = OldFlink; \
116 (ListEntry)->Blink = (ListHead); \
117 OldFlink->Blink = (ListEntry); \
118 (ListHead)->Flink = (ListEntry); \
119 assert((ListEntry) != NULL); \
120 assert((ListEntry)->Blink!=NULL); \
121 assert((ListEntry)->Blink->Flink == (ListEntry)); \
122 assert((ListEntry)->Flink != NULL); \
123 assert((ListEntry)->Flink->Blink == (ListEntry)); \
130 * PLIST_ENTRY ListHead,
135 * Inserts an entry in a double linked list
138 * ListHead = Head of the list
139 * Entry = Entry to insert
141 #define InsertTailList(ListHead, ListEntry) \
143 PLIST_ENTRY OldBlink; \
144 OldBlink = (ListHead)->Blink; \
145 (ListEntry)->Flink = (ListHead); \
146 (ListEntry)->Blink = OldBlink; \
147 OldBlink->Flink = (ListEntry); \
148 (ListHead)->Blink = (ListEntry); \
149 assert((ListEntry) != NULL); \
150 assert((ListEntry)->Blink != NULL); \
151 assert((ListEntry)->Blink->Flink == (ListEntry)); \
152 assert((ListEntry)->Flink != NULL); \
153 assert((ListEntry)->Flink->Blink == (ListEntry)); \
159 * PLIST_ENTRY ListHead
163 * Checks if a double linked list is empty
166 * ListHead = Head of the list
168 #define IsListEmpty(ListHead) \
169 ((ListHead)->Flink == (ListHead))
175 * PSINGLE_LIST_ENTRY ListHead
179 * Removes an entry from the head of a single linked list
182 * ListHead = Head of the list
188 #define PopEntryList(ListHead) \
191 PSINGLE_LIST_ENTRY FirstEntry; \
192 FirstEntry = (ListHead)->Next; \
193 if (FirstEntry != NULL) \
195 (ListHead)->Next = FirstEntry->Next; \
199 static inline PSINGLE_LIST_ENTRY
200 PopEntryList(PSINGLE_LIST_ENTRY ListHead
)
202 PSINGLE_LIST_ENTRY ListEntry
;
204 ListEntry
= ListHead
->Next
;
207 ListHead
->Next
= ListEntry
->Next
;
213 #define RtlCopyMemory(Destination,Source,Length) \
214 memcpy((Destination),(Source),(Length))
220 PSINGLE_LIST_ENTRY ListHead
,
221 PSINGLE_LIST_ENTRY Entry
224 Entry
->Next
= ListHead
->Next
;
225 ListHead
->Next
= Entry
;
235 * Removes an entry from a double linked list
238 * ListEntry = Entry to remove
240 #define RemoveEntryList(ListEntry) \
242 PLIST_ENTRY OldFlink; \
243 PLIST_ENTRY OldBlink; \
244 assert((ListEntry) != NULL); \
245 assert((ListEntry)->Blink!=NULL); \
246 assert((ListEntry)->Blink->Flink == (ListEntry)); \
247 assert((ListEntry)->Flink != NULL); \
248 assert((ListEntry)->Flink->Blink == (ListEntry)); \
249 OldFlink = (ListEntry)->Flink; \
250 OldBlink = (ListEntry)->Blink; \
251 OldFlink->Blink = OldBlink; \
252 OldBlink->Flink = OldFlink; \
253 (ListEntry)->Flink = NULL; \
254 (ListEntry)->Blink = NULL; \
261 * PLIST_ENTRY ListHead
265 * Removes the head entry from a double linked list
268 * ListHead = Head of the list
274 #define RemoveHeadList(ListHead) \
276 {RemoveEntryList((ListHead)->Flink)}
293 PLIST_ENTRY OldFlink
;
294 PLIST_ENTRY OldBlink
;
296 Old
= ListHead
->Flink
;
298 OldFlink
= ListHead
->Flink
->Flink
;
299 OldBlink
= ListHead
->Flink
->Blink
;
300 OldFlink
->Blink
= OldBlink
;
301 OldBlink
->Flink
= OldFlink
;
315 * PLIST_ENTRY ListHead
319 * Removes the tail entry from a double linked list
322 * ListHead = Head of the list
328 #define RemoveTailList(ListHead) \
330 {RemoveEntryList((ListHead)->Blink)}
347 PLIST_ENTRY OldFlink
;
348 PLIST_ENTRY OldBlink
;
350 Old
= ListHead
->Blink
;
352 OldFlink
= ListHead
->Blink
->Flink
;
353 OldBlink
= ListHead
->Blink
->Blink
;
354 OldFlink
->Blink
= OldBlink
;
355 OldBlink
->Flink
= OldFlink
;
367 Macros for sorted inserts. Lists are walked in reverse order to maintain
368 FIFO behaviour required by some callers...
370 VOID InsertXcendingList(
371 PLIST_ENTRY ListHead,
372 PLIST_ENTRY NewEntry,
378 #define InsertDescendingList(ListHead, NewEntry, Type, ListEntryField, SortField)\
380 PLIST_ENTRY current;\
381 BOOL Inserted = FALSE;\
383 current = (ListHead)->Blink;\
384 while (current != (ListHead))\
386 if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField >=\
387 CONTAINING_RECORD((NewEntry), Type, ListEntryField)->SortField)\
389 InsertTailList(current, (NewEntry));\
393 current = current->Blink;\
398 InsertHeadList((ListHead), (NewEntry));\
403 #define InsertAscendingList(ListHead, NewEntry, Type, ListEntryField, SortField)\
405 PLIST_ENTRY current;\
406 BOOL Inserted = FALSE;\
408 current = (ListHead)->Blink;\
409 while (current != (ListHead))\
411 if (CONTAINING_RECORD(current, Type, ListEntryField)->SortField <=\
412 CONTAINING_RECORD((NewEntry), Type, ListEntryField)->SortField)\
414 InsertTailList(current, (NewEntry));\
418 current = current->Blink;\
423 InsertHeadList((ListHead), (NewEntry));\
431 * PLIST_ENTRY ListHead,
435 #define IsFirstEntry(ListHead, Entry) ((ListHead)->Flink == Entry)
437 #define IsLastEntry(ListHead, Entry) ((ListHead)->Blink == Entry)
442 RtlAppendUnicodeToString (
443 PUNICODE_STRING Destination
,
457 RtlEqualUnicodeString (
458 PUNICODE_STRING String1
,
459 PUNICODE_STRING String2
,
460 BOOLEAN CaseInSensitive
465 RtlGetCallersAddress (
466 PVOID
* CallersAddress
471 RtlQueryRegistryValues (
474 IN PRTL_QUERY_REGISTRY_TABLE QueryTable
,
481 RtlWriteRegistryValue (
491 RtlDeleteRegistryValue(IN ULONG RelativeTo
,
493 IN PCWSTR ValueName
);
496 RtlMoveMemory (PVOID Destination
, CONST VOID
* Source
, ULONG Length
);
499 RtlEqualLuid(IN PLUID Luid1
,
511 RtlZeroMemory (PVOID Destination
, ULONG Length
);
513 #else /* __USE_W32API */
515 #include <ddk/ntifs.h>
517 #endif /* __USE_W32API */
521 * PURPOSE: Used with RtlCheckRegistryKey, RtlCreateRegistryKey,
522 * RtlDeleteRegistryKey
524 #define RTL_REGISTRY_ABSOLUTE 0
525 #define RTL_REGISTRY_SERVICES 1
526 #define RTL_REGISTRY_CONTROL 2
527 #define RTL_REGISTRY_WINDOWS_NT 3
528 #define RTL_REGISTRY_DEVICEMAP 4
529 #define RTL_REGISTRY_USER 5
530 #define RTL_REGISTRY_ENUM 6 /* ReactOS specific: Used internally in kernel only */
531 #define RTL_REGISTRY_MAXIMUM 7
533 #define RTL_REGISTRY_HANDLE 0x40000000
534 #define RTL_REGISTRY_OPTIONAL 0x80000000
537 #define SHORT_SIZE (sizeof(USHORT))
538 #define SHORT_MASK (SHORT_SIZE-1)
539 #define LONG_SIZE (sizeof(ULONG))
540 #define LONG_MASK (LONG_SIZE-1)
541 #define LOWBYTE_MASK 0x00FF
543 #define FIRSTBYTE(Value) ((Value) & LOWBYTE_MASK)
544 #define SECONDBYTE(Value) (((Value) >> 8) & LOWBYTE_MASK)
545 #define THIRDBYTE(Value) (((Value) >> 16) & LOWBYTE_MASK)
546 #define FOURTHBYTE(Value) (((Value) >> 24) & LOWBYTE_MASK)
548 /* FIXME: reverse byte-order on big-endian machines (e.g. MIPS) */
549 #define SHORT_LEAST_SIGNIFICANT_BIT 0
550 #define SHORT_MOST_SIGNIFICANT_BIT 1
552 #define LONG_LEAST_SIGNIFICANT_BIT 0
553 #define LONG_3RD_MOST_SIGNIFICANT_BIT 1
554 #define LONG_2RD_MOST_SIGNIFICANT_BIT 2
555 #define LONG_MOST_SIGNIFICANT_BIT 3
558 #define NLS_ANSI_CODE_PAGE NlsAnsiCodePage
559 #define NLS_LEAD_BYTE_INFO NlsLeadByteInfo
560 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
561 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
562 #define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo
564 #if defined(__NTOSKRNL__) || defined(__NTDLL__)
565 extern USHORT EXPORTED NlsAnsiCodePage
;
566 extern PUSHORT EXPORTED NlsLeadByteInfo
;
567 extern BOOLEAN EXPORTED NlsMbCodePageTag
;
568 extern BOOLEAN EXPORTED NlsMbOemCodePageTag
;
569 extern PUSHORT EXPORTED NlsOemLeadByteInfo
;
571 extern USHORT IMPORTED NlsAnsiCodePage
;
572 extern PUSHORT IMPORTED NlsLeadByteInfo
;
573 extern BOOLEAN IMPORTED NlsMbCodePageTag
;
574 extern BOOLEAN IMPORTED NlsMbOemCodePageTag
;
575 extern PUSHORT IMPORTED NlsOemLeadByteInfo
;
576 #endif /* __NTOSKRNL__ || __NTDLL__ */
580 * NOTE: ReactOS extensions
582 #define RtlMin(X,Y) (((X) < (Y))? (X) : (Y))
583 #define RtlMax(X,Y) (((X) > (Y))? (X) : (Y))
584 #define RtlMin3(X,Y,Z) (((X) < (Y)) ? RtlMin(X,Z) : RtlMin(Y,Z))
585 #define RtlMax3(X,Y,Z) (((X) > (Y)) ? RtlMax(X,Z) : RtlMax(Y,Z))
590 * InitializeUnicodeString(PUNICODE_STRING DestinationString,
592 * USHORT MaximumLength,
595 * Initialize n UNICODE_STRING from its fields. Use when you know the values of
596 * all the fields in advance
599 #define InitializeUnicodeString(__PDEST_STRING__,__LENGTH__,__MAXLENGTH__,__BUFFER__) \
601 (__PDEST_STRING__)->Length = (__LENGTH__); \
602 (__PDEST_STRING__)->MaximumLength = (__MAXLENGTH__); \
603 (__PDEST_STRING__)->Buffer = (__BUFFER__); \
609 * RtlInitUnicodeStringFromLiteral(PUNICODE_STRING DestinationString,
610 * PCWSTR SourceString);
612 * Initialize a UNICODE_STRING from a wide string literal. WARNING: use only with
613 * string literals and statically initialized arrays, it will calculate the wrong
617 #define RtlInitUnicodeStringFromLiteral(__PDEST_STRING__,__SOURCE_STRING__) \
618 InitializeUnicodeString( \
619 (__PDEST_STRING__), \
620 sizeof(__SOURCE_STRING__) - sizeof(WCHAR), \
621 sizeof(__SOURCE_STRING__), \
622 (__SOURCE_STRING__) \
627 * Static initializer for UNICODE_STRING variables.
630 * UNICODE_STRING wstr = UNICODE_STRING_INITIALIZER(L"string");
633 #define UNICODE_STRING_INITIALIZER(__SOURCE_STRING__) \
635 sizeof((__SOURCE_STRING__)) - sizeof(WCHAR), \
636 sizeof((__SOURCE_STRING__)), \
637 (__SOURCE_STRING__) \
642 * Initializer for empty UNICODE_STRING variables.
645 * UNICODE_STRING wstr = EMPTY_UNICODE_STRING;
648 #define EMPTY_UNICODE_STRING {0, 0, NULL}
654 PSINGLE_LIST_ENTRY ListHead,
655 PSINGLE_LIST_ENTRY Entry
659 #define PushEntryList(ListHead,Entry) \
660 (Entry)->Next = (ListHead)->Next; \
661 (ListHead)->Next = (Entry)
667 RtlAddAtomToAtomTable (
668 IN PRTL_ATOM_TABLE AtomTable
,
682 RtlAnsiCharToUnicodeChar (
688 RtlAnsiStringToUnicodeSize (
689 PANSI_STRING AnsiString
694 RtlAnsiStringToUnicodeString (
695 PUNICODE_STRING DestinationString
,
696 PANSI_STRING SourceString
,
697 BOOLEAN AllocateDestinationString
702 RtlAppendAsciizToString(
709 RtlAppendStringToString (
716 RtlAppendUnicodeStringToString (
717 PUNICODE_STRING Destination
,
718 PUNICODE_STRING Source
724 PRTL_BITMAP BitMapHeader
,
732 PRTL_BITMAP BitMapHeader
,
740 PVOID FailedAssertion
,
756 RtlCheckRegistryKey (
764 IN PRTL_BITMAP BitMapHeader
770 IN PRTL_BITMAP BitMapHeader
,
771 IN ULONG StartingIndex
,
772 IN ULONG NumberToClear
787 BOOLEAN CaseInsensitive
792 RtlCompareUnicodeString (
793 PUNICODE_STRING String1
,
794 PUNICODE_STRING String2
,
795 BOOLEAN CaseInsensitive
799 RtlCompressBuffer(IN USHORT CompressionFormatAndEngine
,
800 IN PUCHAR UncompressedBuffer
,
801 IN ULONG UncompressedBufferSize
,
802 OUT PUCHAR CompressedBuffer
,
803 IN ULONG CompressedBufferSize
,
804 IN ULONG UncompressedChunkSize
,
805 OUT PULONG FinalCompressedSize
,
809 RtlCompressChunks(IN PUCHAR UncompressedBuffer
,
810 IN ULONG UncompressedBufferSize
,
811 OUT PUCHAR CompressedBuffer
,
812 IN ULONG CompressedBufferSize
,
813 IN OUT PCOMPRESSED_DATA_INFO CompressedDataInfo
,
814 IN ULONG CompressedDataInfoLength
,
817 LARGE_INTEGER STDCALL
818 RtlConvertLongToLargeInteger(IN LONG SignedInteger
);
821 RtlConvertSidToUnicodeString(IN OUT PUNICODE_STRING String
,
823 IN BOOLEAN AllocateString
);
825 LARGE_INTEGER STDCALL
826 RtlConvertUlongToLargeInteger(IN ULONG UnsignedInteger
);
844 #define RtlCopyBytes RtlCopyMemory
847 RtlCopyLuid(IN PLUID LuidDest
,
851 RtlCopyLuidAndAttributesArray(ULONG Count
,
852 PLUID_AND_ATTRIBUTES Src
,
853 PLUID_AND_ATTRIBUTES Dest
);
856 RtlCopySid(ULONG BufferLength
,
861 RtlCopySidAndAttributesArray(ULONG Count
,
862 PSID_AND_ATTRIBUTES Src
,
864 PSID_AND_ATTRIBUTES Dest
,
866 PVOID
* RemainingSidArea
,
867 PULONG RemainingSidAreaSize
);
870 RtlCopyString(PSTRING DestinationString
,
871 PSTRING SourceString
);
874 RtlCopyUnicodeString(PUNICODE_STRING DestinationString
,
875 PUNICODE_STRING SourceString
);
878 RtlCreateAtomTable(IN ULONG TableSize
,
879 IN OUT PRTL_ATOM_TABLE
*AtomTable
);
886 ULONG SizeToReserve
, /* dwMaximumSize */
887 ULONG SizeToCommit
, /* dwInitialSize */
889 PRTL_HEAP_DEFINITION Definition
894 RtlCreateRegistryKey (
901 RtlCreateSecurityDescriptor (
902 PSECURITY_DESCRIPTOR SecurityDescriptor
,
908 RtlCreateUnicodeString (
909 OUT PUNICODE_STRING Destination
,
914 RtlCreateUnicodeStringFromAsciiz (OUT PUNICODE_STRING Destination
,
919 RtlCustomCPToUnicodeN (
920 IN PCPTABLEINFO CustomCP
,
921 PWCHAR UnicodeString
,
929 RtlDecompressBuffer(IN USHORT CompressionFormat
,
930 OUT PUCHAR UncompressedBuffer
,
931 IN ULONG UncompressedBufferSize
,
932 IN PUCHAR CompressedBuffer
,
933 IN ULONG CompressedBufferSize
,
934 OUT PULONG FinalUncompressedSize
);
937 RtlDecompressChunks(OUT PUCHAR UncompressedBuffer
,
938 IN ULONG UncompressedBufferSize
,
939 IN PUCHAR CompressedBuffer
,
940 IN ULONG CompressedBufferSize
,
941 IN PUCHAR CompressedTail
,
942 IN ULONG CompressedTailSize
,
943 IN PCOMPRESSED_DATA_INFO CompressedDataInfo
);
946 RtlDecompressFragment(IN USHORT CompressionFormat
,
947 OUT PUCHAR UncompressedFragment
,
948 IN ULONG UncompressedFragmentSize
,
949 IN PUCHAR CompressedBuffer
,
950 IN ULONG CompressedBufferSize
,
951 IN ULONG FragmentOffset
,
952 OUT PULONG FinalUncompressedSize
,
956 RtlDeleteAtomFromAtomTable(IN PRTL_ATOM_TABLE AtomTable
,
960 RtlDescribeChunk(IN USHORT CompressionFormat
,
961 IN OUT PUCHAR
*CompressedBuffer
,
962 IN PUCHAR EndOfCompressedBufferPlus1
,
963 OUT PUCHAR
*ChunkBuffer
,
964 OUT PULONG ChunkSize
);
967 RtlDestroyAtomTable(IN PRTL_ATOM_TABLE AtomTable
);
970 RtlDestroyHeap(HANDLE hheap
);
974 RtlDowncaseUnicodeString (
975 IN OUT PUNICODE_STRING DestinationString
,
976 IN PUNICODE_STRING SourceString
,
977 IN BOOLEAN AllocateDestinationString
983 IN PRTL_ATOM_TABLE AtomTable
,
984 IN BOOLEAN DeletePinned
989 RtlEnlargedIntegerMultiply (
996 RtlEnlargedUnsignedDivide (
997 ULARGE_INTEGER Dividend
,
1004 RtlEnlargedUnsignedMultiply (
1014 BOOLEAN CaseInSensitive
1019 RtlExtendedIntegerMultiply (
1020 LARGE_INTEGER Multiplicand
,
1026 RtlExtendedLargeIntegerDivide (
1027 LARGE_INTEGER Dividend
,
1034 RtlExtendedMagicDivide (
1035 LARGE_INTEGER Dividend
,
1036 LARGE_INTEGER MagicDivisor
,
1042 RtlFillMemoryUlong (
1051 PRTL_BITMAP BitMapHeader
,
1058 RtlFindClearBitsAndSet (
1059 PRTL_BITMAP BitMapHeader
,
1066 RtlFindFirstRunClear (
1067 PRTL_BITMAP BitMapHeader
,
1068 PULONG StartingIndex
1073 RtlFindFirstRunSet (
1074 PRTL_BITMAP BitMapHeader
,
1075 PULONG StartingIndex
1080 RtlFindLongestRunClear (
1081 PRTL_BITMAP BitMapHeader
,
1082 PULONG StartingIndex
1087 RtlFindLongestRunSet (
1088 PRTL_BITMAP BitMapHeader
,
1089 PULONG StartingIndex
1095 IN PVOID BaseAddress
,
1099 OUT PRTL_MESSAGE_RESOURCE_ENTRY
*MessageResourceEntry
1105 PRTL_BITMAP BitMapHeader
,
1112 RtlFindSetBitsAndClear (
1113 PRTL_BITMAP BitMapHeader
,
1120 RtlFormatCurrentUserKeyPath (
1121 IN OUT PUNICODE_STRING KeyPath
1127 PANSI_STRING AnsiString
1141 POEM_STRING OemString
1146 RtlFreeUnicodeString (
1147 PUNICODE_STRING UnicodeString
1151 RtlGenerate8dot3Name(IN PUNICODE_STRING Name
,
1152 IN BOOLEAN AllowExtendedCharacters
,
1153 IN OUT PGENERATE_NAME_CONTEXT Context
,
1154 OUT PUNICODE_STRING Name8dot3
);
1157 RtlGetCompressionWorkSpaceSize(IN USHORT CompressionFormatAndEngine
,
1158 OUT PULONG CompressBufferAndWorkSpaceSize
,
1159 OUT PULONG CompressFragmentWorkSpaceSize
);
1163 RtlGetDefaultCodePage (
1164 PUSHORT AnsiCodePage
,
1170 RtlImageDirectoryEntryToData (
1180 IN PVOID BaseAddress
1183 PIMAGE_SECTION_HEADER
1185 RtlImageRvaToSection (
1186 PIMAGE_NT_HEADERS NtHeader
,
1194 PIMAGE_NT_HEADERS NtHeader
,
1197 PIMAGE_SECTION_HEADER
*SectionHeader
1203 PANSI_STRING DestinationString
,
1209 RtlInitCodePageTable (
1210 IN PUSHORT TableBase
,
1211 OUT PCPTABLEINFO CodePageTable
1217 IN PUSHORT AnsiTableBase
,
1218 IN PUSHORT OemTableBase
,
1219 IN PUSHORT CaseTableBase
,
1220 OUT PNLSTABLEINFO NlsTable
1226 PSTRING DestinationString
,
1232 RtlInitUnicodeString (
1233 PUNICODE_STRING DestinationString
,
1239 RtlInitializeBitMap (
1240 IN OUT PRTL_BITMAP BitMapHeader
,
1241 IN PULONG BitMapBuffer
,
1242 IN ULONG SizeOfBitMap
1247 RtlInitializeContext (
1248 IN HANDLE ProcessHandle
,
1249 IN PCONTEXT Context
,
1251 IN PTHREAD_START_ROUTINE StartAddress
,
1252 IN OUT PUSER_STACK UserStack
1257 RtlInitializeGenericTable (
1258 IN OUT PRTL_GENERIC_TABLE Table
,
1259 IN PVOID CompareRoutine
,
1260 IN PVOID AllocateRoutine
,
1261 IN PVOID FreeRoutine
,
1262 IN ULONG UserParameter
1267 RtlInsertElementGenericTable (
1268 IN OUT PRTL_GENERIC_TABLE Table
,
1270 IN ULONG ElementSize
,
1285 RtlIntegerToUnicodeString (
1288 IN OUT PUNICODE_STRING String
1293 RtlIsGenericTableEmpty (
1294 IN PRTL_GENERIC_TABLE Table
1299 RtlIsNameLegalDOS8Dot3 (
1300 IN PUNICODE_STRING UnicodeName
,
1301 IN PANSI_STRING AnsiName
,
1302 OUT PBOOLEAN SpacesFound
1315 RtlLargeIntegerAdd (
1316 LARGE_INTEGER Addend1
,
1317 LARGE_INTEGER Addend2
1322 * RtlLargeIntegerAnd (
1323 * PLARGE_INTEGER Result,
1324 * LARGE_INTEGER Source,
1325 * LARGE_INTEGER Mask
1328 #define RtlLargeIntegerAnd(Result, Source, Mask) \
1330 Result.HighPart = Source.HighPart & Mask.HighPart; \
1331 Result.LowPart = Source.LowPart & Mask.LowPart; \
1336 RtlLargeIntegerArithmeticShift (
1337 LARGE_INTEGER LargeInteger
,
1343 RtlLargeIntegerDivide (
1344 LARGE_INTEGER Dividend
,
1345 LARGE_INTEGER Divisor
,
1346 PLARGE_INTEGER Remainder
1351 * RtlLargeIntegerEqualTo (
1352 * LARGE_INTEGER Operand1,
1353 * LARGE_INTEGER Operand2
1356 #define RtlLargeIntegerEqualTo(X,Y) \
1357 (!(((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)))
1361 * RtlLargeIntegerEqualToZero (
1362 * LARGE_INTEGER Operand
1365 #define RtlLargeIntegerEqualToZero(X) \
1366 (!((X).LowPart | (X).HighPart))
1370 * RtlLargeIntegerGreaterThan (
1371 * LARGE_INTEGER Operand1,
1372 * LARGE_INTEGER Operand2
1375 #define RtlLargeIntegerGreaterThan(X,Y) \
1376 ((((X).HighPart == (Y).HighPart) && ((X).LowPart > (Y).LowPart)) || \
1377 ((X).HighPart > (Y).HighPart))
1381 * RtlLargeIntegerGreaterThanOrEqualTo (
1382 * LARGE_INTEGER Operand1,
1383 * LARGE_INTEGER Operand2
1386 #define RtlLargeIntegerGreaterThanOrEqualTo(X,Y) \
1387 ((((X).HighPart == (Y).HighPart) && ((X).LowPart >= (Y).LowPart)) || \
1388 ((X).HighPart > (Y).HighPart))
1392 * RtlLargeIntegerGreaterThanOrEqualToZero (
1393 * LARGE_INTEGER Operand1
1396 #define RtlLargeIntegerGreaterOrEqualToZero(X) \
1401 * RtlLargeIntegerGreaterThanZero (
1402 * LARGE_INTEGER Operand1
1405 #define RtlLargeIntegerGreaterThanZero(X) \
1406 ((((X).HighPart == 0) && ((X).LowPart > 0)) || \
1407 ((X).HighPart > 0 ))
1411 * RtlLargeIntegerLessThan (
1412 * LARGE_INTEGER Operand1,
1413 * LARGE_INTEGER Operand2
1416 #define RtlLargeIntegerLessThan(X,Y) \
1417 ((((X).HighPart == (Y).HighPart) && ((X).LowPart < (Y).LowPart)) || \
1418 ((X).HighPart < (Y).HighPart))
1422 * RtlLargeIntegerLessThanOrEqualTo (
1423 * LARGE_INTEGER Operand1,
1424 * LARGE_INTEGER Operand2
1427 #define RtlLargeIntegerLessThanOrEqualTo(X,Y) \
1428 ((((X).HighPart == (Y).HighPart) && ((X).LowPart <= (Y).LowPart)) || \
1429 ((X).HighPart < (Y).HighPart))
1433 * RtlLargeIntegerLessThanOrEqualToZero (
1434 * LARGE_INTEGER Operand
1437 #define RtlLargeIntegerLessOrEqualToZero(X) \
1438 (((X).HighPart < 0) || !((X).LowPart | (X).HighPart))
1442 * RtlLargeIntegerLessThanZero (
1443 * LARGE_INTEGER Operand
1446 #define RtlLargeIntegerLessThanZero(X) \
1447 (((X).HighPart < 0))
1451 RtlLargeIntegerNegate (
1452 LARGE_INTEGER Subtrahend
1457 * RtlLargeIntegerNotEqualTo (
1458 * LARGE_INTEGER Operand1,
1459 * LARGE_INTEGER Operand2
1462 #define RtlLargeIntegerNotEqualTo(X,Y) \
1463 ((((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)))
1467 * RtlLargeIntegerNotEqualToZero (
1468 * LARGE_INTEGER Operand
1471 #define RtlLargeIntegerNotEqualToZero(X) \
1472 (((X).LowPart | (X).HighPart))
1476 RtlLargeIntegerShiftLeft (
1477 LARGE_INTEGER LargeInteger
,
1483 RtlLargeIntegerShiftRight (
1484 LARGE_INTEGER LargeInteger
,
1490 RtlLargeIntegerSubtract (
1491 LARGE_INTEGER Minuend
,
1492 LARGE_INTEGER Subtrahend
1497 RtlLengthSecurityDescriptor (
1498 PSECURITY_DESCRIPTOR SecurityDescriptor
1509 RtlLookupAtomInAtomTable (
1510 IN PRTL_ATOM_TABLE AtomTable
,
1517 RtlMultiByteToUnicodeN (
1518 PWCHAR UnicodeString
,
1521 const PCHAR MbString
,
1527 RtlMultiByteToUnicodeSize (
1535 RtlNtStatusToDosError (
1541 RtlNtStatusToDosErrorNoTeb (
1547 RtlNtStatusToPsxErrno (
1553 RtlNumberGenericTableElements (
1554 IN PRTL_GENERIC_TABLE Table
1559 RtlNumberOfClearBits (
1560 PRTL_BITMAP BitMapHeader
1565 RtlNumberOfSetBits (
1566 PRTL_BITMAP BitMapHeader
1571 RtlOemStringToUnicodeSize (
1572 POEM_STRING AnsiString
1577 RtlOemStringToUnicodeString (
1578 PUNICODE_STRING DestinationString
,
1579 POEM_STRING SourceString
,
1580 BOOLEAN AllocateDestinationString
1586 PWCHAR UnicodeString
,
1594 RtlPinAtomInAtomTable (
1595 IN PRTL_ATOM_TABLE AtomTable
,
1602 PANSI_STRING String1
,
1603 PANSI_STRING String2
,
1604 BOOLEAN CaseInsensitive
1609 RtlPrefixUnicodeString (
1610 PUNICODE_STRING String1
,
1611 PUNICODE_STRING String2
,
1612 BOOLEAN CaseInsensitive
1617 RtlQueryAtomInAtomTable (
1618 IN PRTL_ATOM_TABLE AtomTable
,
1620 IN OUT PULONG RefCount OPTIONAL
,
1621 IN OUT PULONG PinCount OPTIONAL
,
1622 IN OUT PWSTR AtomName OPTIONAL
,
1623 IN OUT PULONG NameLength OPTIONAL
1628 RtlQueryTimeZoneInformation (
1629 IN OUT PTIME_ZONE_INFORMATION TimeZoneInformation
1635 IN PEXCEPTION_RECORD ExceptionRecord
1650 IN USHORT CompressionFormat
,
1651 IN OUT PUCHAR
*CompressedBuffer
,
1652 IN PUCHAR EndOfCompressedBufferPlus1
,
1653 OUT PUCHAR
*ChunkBuffer
,
1659 RtlResetRtlTranslations (
1660 IN PNLSTABLEINFO NlsTable
1665 * RtlRetrieveUlong (
1666 * PULONG DestinationAddress,
1667 * PULONG SourceAddress
1670 #define RtlRetrieveUlong(DestAddress,SrcAddress) \
1671 if ((ULONG)(SrcAddress) & LONG_MASK) \
1673 ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
1674 ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
1675 ((PUCHAR)(DestAddress))[2]=((PUCHAR)(SrcAddress))[2]; \
1676 ((PUCHAR)(DestAddress))[3]=((PUCHAR)(SrcAddress))[3]; \
1680 *((PULONG)(DestAddress))=*((PULONG)(SrcAddress)); \
1685 * RtlRetrieveUshort (
1686 * PUSHORT DestinationAddress,
1687 * PUSHORT SourceAddress
1690 #define RtlRetrieveUshort(DestAddress,SrcAddress) \
1691 if ((ULONG)(SrcAddress) & SHORT_MASK) \
1693 ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
1694 ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
1698 *((PUSHORT)(DestAddress))=*((PUSHORT)(SrcAddress)); \
1703 RtlSecondsSince1970ToTime (
1704 ULONG SecondsSince1970
,
1710 RtlSecondsSince1980ToTime (
1711 ULONG SecondsSince1980
,
1718 IN PRTL_BITMAP BitMapHeader
1724 PRTL_BITMAP BitMapHeader
,
1725 ULONG StartingIndex
,
1731 RtlSetDaclSecurityDescriptor (
1732 PSECURITY_DESCRIPTOR SecurityDescriptor
,
1733 BOOLEAN DaclPresent
,
1735 BOOLEAN DaclDefaulted
1740 RtlSetTimeZoneInformation (
1741 IN OUT PTIME_ZONE_INFORMATION TimeZoneInformation
1759 #define RtlStoreUlong(Address,Value) \
1760 if ((ULONG)(Address) & LONG_MASK) \
1762 ((PUCHAR)(Address))[LONG_LEAST_SIGNIFICANT_BIT]=(UCHAR)(FIRSTBYTE(Value)); \
1763 ((PUCHAR)(Address))[LONG_3RD_MOST_SIGNIFICANT_BIT]=(UCHAR)(FIRSTBYTE(Value)); \
1764 ((PUCHAR)(Address))[LONG_2ND_MOST_SIGNIFICANT_BIT]=(UCHAR)(THIRDBYTE(Value)); \
1765 ((PUCHAR)(Address))[LONG_MOST_SIGNIFICANT_BIT]=(UCHAR)(FOURTHBYTE(Value)); \
1769 *((PULONG)(Address))=(ULONG)(Value); \
1779 #define RtlStoreUshort(Address,Value) \
1780 if ((ULONG)(Address) & SHORT_MASK) \
1782 ((PUCHAR)(Address))[SHORT_LEAST_SIGNIFICANT_BIT]=(UCHAR)(FIRSTBYTE(Value)); \
1783 ((PUCHAR)(Address))[SHORT_MOST_SIGNIFICANT_BIT]=(UCHAR)(SECONDBYTE(Value)); \
1787 *((PUSHORT)(Address))=(USHORT)(Value); \
1792 RtlTimeFieldsToTime (
1793 PTIME_FIELDS TimeFields
,
1799 RtlTimeToSecondsSince1970 (
1800 PLARGE_INTEGER Time
,
1801 PULONG SecondsSince1970
1806 RtlTimeToSecondsSince1980 (
1807 PLARGE_INTEGER Time
,
1808 PULONG SecondsSince1980
1813 RtlTimeToTimeFields (
1814 PLARGE_INTEGER Time
,
1815 PTIME_FIELDS TimeFields
1820 RtlUnicodeStringToAnsiSize (
1821 IN PUNICODE_STRING UnicodeString
1826 RtlUnicodeStringToAnsiString (
1827 IN OUT PANSI_STRING DestinationString
,
1828 IN PUNICODE_STRING SourceString
,
1829 IN BOOLEAN AllocateDestinationString
1834 RtlUnicodeStringToInteger (
1835 IN PUNICODE_STRING String
,
1842 RtlUnicodeStringToOemSize (
1843 IN PUNICODE_STRING UnicodeString
1848 RtlUnicodeStringToCountedOemString (
1849 IN OUT POEM_STRING DestinationString
,
1850 IN PUNICODE_STRING SourceString
,
1851 IN BOOLEAN AllocateDestinationString
1856 RtlUnicodeStringToOemString (
1857 IN OUT POEM_STRING DestinationString
,
1858 IN PUNICODE_STRING SourceString
,
1859 IN BOOLEAN AllocateDestinationString
1864 RtlUnicodeToCustomCPN (
1865 IN PCPTABLEINFO CustomCP
,
1869 PWCHAR UnicodeString
,
1875 RtlUnicodeToMultiByteN (
1879 PWCHAR UnicodeString
,
1885 RtlUnicodeToMultiByteSize (
1887 PWCHAR UnicodeString
,
1897 PWCHAR UnicodeString
,
1910 PEXCEPTION_REGISTRATION RegistrationFrame
,
1911 PVOID ReturnAddress
,
1912 PEXCEPTION_RECORD ExceptionRecord
,
1918 RtlUpcaseUnicodeChar (
1924 RtlUpcaseUnicodeString (
1925 IN OUT PUNICODE_STRING DestinationString
,
1926 IN PCUNICODE_STRING SourceString
,
1927 IN BOOLEAN AllocateDestinationString
1932 RtlUpcaseUnicodeStringToAnsiString (
1933 IN OUT PANSI_STRING DestinationString
,
1934 IN PUNICODE_STRING SourceString
,
1935 IN BOOLEAN AllocateDestinationString
1940 RtlUpcaseUnicodeStringToCountedOemString (
1941 IN OUT POEM_STRING DestinationString
,
1942 IN PUNICODE_STRING SourceString
,
1943 IN BOOLEAN AllocateDestinationString
1948 RtlUpcaseUnicodeStringToOemString (
1949 IN OUT POEM_STRING DestinationString
,
1950 IN PUNICODE_STRING SourceString
,
1951 IN BOOLEAN AllocateDestinationString
1956 RtlUpcaseUnicodeToCustomCPN (
1957 IN PCPTABLEINFO CustomCP
,
1961 PWCHAR UnicodeString
,
1967 RtlUpcaseUnicodeToMultiByteN (
1971 PWCHAR UnicodeString
,
1977 RtlUpcaseUnicodeToOemN (
1981 PWCHAR UnicodeString
,
1994 PSTRING DestinationString
,
1995 PSTRING SourceString
2008 RtlValidSecurityDescriptor (
2009 PSECURITY_DESCRIPTOR SecurityDescriptor
2013 RtlValidSid(IN PSID Sid
);
2017 RtlxAnsiStringToUnicodeSize (
2018 IN PANSI_STRING AnsiString
2023 RtlxOemStringToUnicodeSize (
2024 IN POEM_STRING OemString
2029 RtlxUnicodeStringToAnsiSize (
2030 IN PUNICODE_STRING UnicodeString
2035 RtlxUnicodeStringToOemSize (
2036 IN PUNICODE_STRING UnicodeString
2040 /* Register io functions */
2044 READ_REGISTER_UCHAR (
2050 READ_REGISTER_USHORT (
2056 READ_REGISTER_ULONG (
2062 READ_REGISTER_BUFFER_UCHAR (
2070 READ_REGISTER_BUFFER_USHORT (
2078 READ_REGISTER_BUFFER_ULONG (
2086 WRITE_REGISTER_UCHAR (
2093 WRITE_REGISTER_USHORT (
2100 WRITE_REGISTER_ULONG (
2107 WRITE_REGISTER_BUFFER_UCHAR (
2115 WRITE_REGISTER_BUFFER_USHORT (
2123 WRITE_REGISTER_BUFFER_ULONG (
2130 NTSTATUS STDCALL
RtlCreateAcl(PACL Acl
, ULONG AclSize
, ULONG AclRevision
);
2131 NTSTATUS STDCALL
RtlQueryInformationAcl (PACL Acl
, PVOID Information
, ULONG InformationLength
, ACL_INFORMATION_CLASS InformationClass
);
2132 NTSTATUS STDCALL
RtlSetInformationAcl (PACL Acl
, PVOID Information
, ULONG InformationLength
, ACL_INFORMATION_CLASS InformationClass
);
2133 BOOLEAN STDCALL
RtlValidAcl (PACL Acl
);
2135 NTSTATUS STDCALL
RtlAddAccessAllowedAce(PACL Acl
, ULONG Revision
, ACCESS_MASK AccessMask
, PSID Sid
);
2136 NTSTATUS STDCALL
RtlAddAccessDeniedAce(PACL Acl
, ULONG Revision
, ACCESS_MASK AccessMask
, PSID Sid
);
2137 NTSTATUS STDCALL
RtlAddAce(PACL Acl
, ULONG Revision
, ULONG StartingIndex
, PACE AceList
, ULONG AceListLength
);
2138 NTSTATUS STDCALL
RtlAddAuditAccessAce (PACL Acl
, ULONG Revision
, ACCESS_MASK AccessMask
, PSID Sid
, BOOLEAN Success
, BOOLEAN Failure
);
2139 NTSTATUS STDCALL
RtlDeleteAce(PACL Acl
, ULONG AceIndex
);
2140 BOOLEAN STDCALL
RtlFirstFreeAce(PACL Acl
, PACE
* Ace
);
2141 NTSTATUS STDCALL
RtlGetAce(PACL Acl
, ULONG AceIndex
, PACE
*Ace
);
2143 NTSTATUS STDCALL
RtlAbsoluteToSelfRelativeSD (PSECURITY_DESCRIPTOR AbsSD
, PSECURITY_DESCRIPTOR RelSD
, PULONG BufferLength
);
2144 NTSTATUS STDCALL
RtlMakeSelfRelativeSD (PSECURITY_DESCRIPTOR AbsSD
, PSECURITY_DESCRIPTOR RelSD
, PULONG BufferLength
);
2145 NTSTATUS STDCALL
RtlCreateSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor
, ULONG Revision
);
2146 BOOLEAN STDCALL
RtlValidSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor
);
2147 ULONG STDCALL
RtlLengthSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor
);
2148 NTSTATUS STDCALL
RtlSetDaclSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor
, BOOLEAN DaclPresent
, PACL Dacl
, BOOLEAN DaclDefaulted
);
2149 NTSTATUS STDCALL
RtlGetDaclSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor
, PBOOLEAN DaclPresent
, PACL
* Dacl
, PBOOLEAN DaclDefauted
);
2150 NTSTATUS STDCALL
RtlSetOwnerSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor
, PSID Owner
, BOOLEAN OwnerDefaulted
);
2151 NTSTATUS STDCALL
RtlGetOwnerSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor
, PSID
* Owner
, PBOOLEAN OwnerDefaulted
);
2152 NTSTATUS STDCALL
RtlSetGroupSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor
, PSID Group
, BOOLEAN GroupDefaulted
);
2153 NTSTATUS STDCALL
RtlGetGroupSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor
, PSID
* Group
, PBOOLEAN GroupDefaulted
);
2154 NTSTATUS STDCALL
RtlGetControlSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor
, PSECURITY_DESCRIPTOR_CONTROL Control
, PULONG Revision
);
2155 NTSTATUS STDCALL
RtlSetSaclSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor
, BOOLEAN SaclPresent
, PACL Sacl
, BOOLEAN SaclDefaulted
);
2156 NTSTATUS STDCALL
RtlGetSaclSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor
, PBOOLEAN SaclPresent
, PACL
* Sacl
, PBOOLEAN SaclDefauted
);
2157 NTSTATUS STDCALL
RtlSelfRelativeToAbsoluteSD (PSECURITY_DESCRIPTOR RelSD
,
2158 PSECURITY_DESCRIPTOR AbsSD
,
2169 NTSTATUS STDCALL
RtlAllocateAndInitializeSid (PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
,
2170 UCHAR SubAuthorityCount
,
2171 ULONG SubAuthority0
,
2172 ULONG SubAuthority1
,
2173 ULONG SubAuthority2
,
2174 ULONG SubAuthority3
,
2175 ULONG SubAuthority4
,
2176 ULONG SubAuthority5
,
2177 ULONG SubAuthority6
,
2178 ULONG SubAuthority7
,
2180 ULONG STDCALL
RtlLengthRequiredSid (UCHAR SubAuthorityCount
);
2181 PSID_IDENTIFIER_AUTHORITY STDCALL
RtlIdentifierAuthoritySid (PSID Sid
);
2182 NTSTATUS STDCALL
RtlInitializeSid (PSID Sid
, PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
, UCHAR SubAuthorityCount
);
2183 PULONG STDCALL
RtlSubAuthoritySid (PSID Sid
, ULONG SubAuthority
);
2184 BOOLEAN STDCALL
RtlEqualPrefixSid (PSID Sid1
, PSID Sid2
);
2185 BOOLEAN STDCALL
RtlEqualSid(PSID Sid1
, PSID Sid2
);
2186 PSID STDCALL
RtlFreeSid (PSID Sid
);
2187 ULONG STDCALL
RtlLengthSid (PSID Sid
);
2188 PULONG STDCALL
RtlSubAuthoritySid (PSID Sid
, ULONG SubAuthority
);
2189 PUCHAR STDCALL
RtlSubAuthorityCountSid (PSID Sid
);
2190 BOOLEAN STDCALL
RtlValidSid (PSID Sid
);
2191 NTSTATUS STDCALL
RtlConvertSidToUnicodeString (PUNICODE_STRING String
, PSID Sid
, BOOLEAN AllocateBuffer
);
2193 BOOLEAN STDCALL
RtlAreAllAccessesGranted (ACCESS_MASK GrantedAccess
, ACCESS_MASK DesiredAccess
);
2194 BOOLEAN STDCALL
RtlAreAnyAccessesGranted (ACCESS_MASK GrantedAccess
, ACCESS_MASK DesiredAccess
);
2195 VOID STDCALL
RtlMapGenericMask (PACCESS_MASK AccessMask
, PGENERIC_MAPPING GenericMapping
);
2198 RtlRandom (PULONG Seed
);
2200 PRTL_SPLAY_LINKS STDCALL
2201 RtlSubtreePredecessor (IN PRTL_SPLAY_LINKS Links
);
2203 PRTL_SPLAY_LINKS STDCALL
2204 RtlSubtreeSuccessor (IN PRTL_SPLAY_LINKS Links
);
2207 RtlUniform (PULONG Seed
);
2209 /* functions exported from NTOSKRNL.EXE which are considered RTL */
2211 #if defined(__NTOSKRNL__) || defined(__NTDRIVER__) || defined(__NTHAL__) || defined(__NTDLL__) || defined(__NTAPP__)
2213 char *_itoa (int value
, char *string
, int radix
);
2214 int _snprintf(char * buf
, size_t cnt
, const char *fmt
, ...);
2215 int _snwprintf(wchar_t *buf
, size_t cnt
, const wchar_t *fmt
, ...);
2216 int _stricmp(const char *s1
, const char *s2
);
2217 char * _strlwr(char *x
);
2218 int _strnicmp(const char *s1
, const char *s2
, size_t n
);
2219 char * _strnset(char* szToFill
, int szFill
, size_t sizeMaxFill
);
2220 char * _strrev(char *s
);
2221 char * _strset(char* szToFill
, int szFill
);
2222 char * _strupr(char *x
);
2223 int _vsnprintf(char *buf
, size_t cnt
, const char *fmt
, va_list args
);
2224 int _wcsicmp (const wchar_t* cs
, const wchar_t* ct
);
2225 wchar_t * _wcslwr (wchar_t *x
);
2226 int _wcsnicmp (const wchar_t * cs
,const wchar_t * ct
,size_t count
);
2227 wchar_t* _wcsnset (wchar_t* wsToFill
, wchar_t wcFill
, size_t sizeMaxFill
);
2228 wchar_t * _wcsrev(wchar_t *s
);
2229 wchar_t *_wcsupr(wchar_t *x
);
2231 int atoi(const char *str
);
2232 long atol(const char *str
);
2238 int isxdigit(int c
);
2239 size_t mbstowcs (wchar_t *wcstr
, const char *mbstr
, size_t count
);
2240 int mbtowc (wchar_t *wchar
, const char *mbchar
, size_t count
);
2241 void * memchr(const void *s
, int c
, size_t n
);
2242 void * memcpy(void *to
, const void *from
, size_t count
);
2243 void * memmove(void *dest
,const void *src
, size_t count
);
2244 void * memset(void *src
, int val
, size_t count
);
2251 int sprintf(char * buf
, const char *fmt
, ...);
2252 void srand(unsigned seed
);
2253 char * strcat(char *s
, const char *append
);
2254 char * strchr(const char *s
, int c
);
2255 int strcmp(const char *s1
, const char *s2
);
2256 char * strcpy(char *to
, const char *from
);
2257 size_t strlen(const char *str
);
2258 char * strncat(char *dst
, const char *src
, size_t n
);
2259 int strncmp(const char *s1
, const char *s2
, size_t n
);
2260 char *strncpy(char *dst
, const char *src
, size_t n
);
2261 char *strrchr(const char *s
, int c
);
2262 size_t strspn(const char *s1
, const char *s2
);
2263 char *strstr(const char *s
, const char *find
);
2264 int swprintf(wchar_t *buf
, const wchar_t *fmt
, ...);
2267 wchar_t towlower(wchar_t c
);
2268 wchar_t towupper(wchar_t c
);
2269 int vsprintf(char *buf
, const char *fmt
, va_list args
);
2270 wchar_t * wcscat(wchar_t *dest
, const wchar_t *src
);
2271 wchar_t * wcschr(const wchar_t *str
, wchar_t ch
);
2272 int wcscmp(const wchar_t *cs
, const wchar_t *ct
);
2273 wchar_t* wcscpy(wchar_t* str1
, const wchar_t* str2
);
2274 size_t wcscspn(const wchar_t *str
,const wchar_t *reject
);
2275 size_t wcslen(const wchar_t *s
);
2276 wchar_t * wcsncat(wchar_t *dest
, const wchar_t *src
, size_t count
);
2277 int wcsncmp(const wchar_t *cs
, const wchar_t *ct
, size_t count
);
2278 wchar_t * wcsncpy(wchar_t *dest
, const wchar_t *src
, size_t count
);
2279 wchar_t * wcsrchr(const wchar_t *str
, wchar_t ch
);
2280 size_t wcsspn(const wchar_t *str
,const wchar_t *accept
);
2281 wchar_t *wcsstr(const wchar_t *s
,const wchar_t *b
);
2282 size_t wcstombs (char *mbstr
, const wchar_t *wcstr
, size_t count
);
2283 int wctomb (char *mbchar
, wchar_t wchar
);
2285 #endif /* __NTOSKRNL__ || __NTDRIVER__ || __NTHAL__ || __NTDLL__ || __NTAPP__ */
2287 #endif /* __DDK_RTL_H */