[NDK]
[reactos.git] / reactos / include / ndk / rtlfuncs.h
index eea9f29..a2a8511 100644 (file)
@@ -172,6 +172,17 @@ RtlInitEmptyUnicodeString(OUT PUNICODE_STRING UnicodeString,
     UnicodeString->Buffer = Buffer;
 }
 
+FORCEINLINE
+VOID
+RtlInitEmptyAnsiString(OUT PANSI_STRING AnsiString,
+                       IN PSTR Buffer,
+                       IN USHORT BufferSize)
+{
+    AnsiString->Length = 0;
+    AnsiString->MaximumLength = BufferSize;
+    AnsiString->Buffer = Buffer;
+}
+
 //
 // LUID Macros
 //
@@ -233,6 +244,107 @@ RtlConvertUlongToLuid(ULONG Ulong)
 //
 // RTL Splay Tree Functions
 //
+#ifndef RTL_USE_AVL_TABLES
+
+NTSYSAPI
+VOID
+NTAPI
+RtlInitializeGenericTable(
+    OUT PRTL_GENERIC_TABLE Table,
+    IN PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine,
+    IN PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine,
+    IN PRTL_GENERIC_FREE_ROUTINE FreeRoutine,
+    IN PVOID TableContext OPTIONAL
+);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlInsertElementGenericTable(
+    IN PRTL_GENERIC_TABLE Table,
+    IN PVOID Buffer,
+    IN CLONG BufferSize,
+    OUT PBOOLEAN NewElement OPTIONAL
+);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlInsertElementGenericTableFull(
+    IN PRTL_GENERIC_TABLE Table,
+    IN PVOID Buffer,
+    IN CLONG BufferSize,
+    OUT PBOOLEAN NewElement OPTIONAL,
+    IN PVOID NodeOrParent,
+    IN TABLE_SEARCH_RESULT SearchResult
+);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlDeleteElementGenericTable(
+    IN PRTL_GENERIC_TABLE Table,
+    IN PVOID Buffer
+);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlLookupElementGenericTable(
+    IN PRTL_GENERIC_TABLE Table,
+    IN PVOID Buffer
+);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlLookupElementGenericTableFull(
+    IN PRTL_GENERIC_TABLE Table,
+    IN PVOID Buffer,
+    OUT PVOID *NodeOrParent,
+    OUT TABLE_SEARCH_RESULT *SearchResult
+);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlEnumerateGenericTable(
+    IN PRTL_GENERIC_TABLE Table,
+    IN BOOLEAN Restart
+);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlEnumerateGenericTableWithoutSplaying(
+    IN PRTL_GENERIC_TABLE Table,
+    IN OUT PVOID *RestartKey
+);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlGetElementGenericTable(
+    IN PRTL_GENERIC_TABLE Table,
+    IN ULONG I
+);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlNumberGenericTableElements(
+    IN PRTL_GENERIC_TABLE Table
+);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlIsGenericTableEmpty(
+    IN PRTL_GENERIC_TABLE Table
+);
+
+#endif /* !RTL_USE_AVL_TABLES */
+
 NTSYSAPI
 PRTL_SPLAY_LINKS
 NTAPI
@@ -243,7 +355,8 @@ RtlSplay(
 NTSYSAPI
 PRTL_SPLAY_LINKS
 NTAPI
-RtlDelete(IN PRTL_SPLAY_LINKS Links
+RtlDelete(
+    IN PRTL_SPLAY_LINKS Links
 );
 
 NTSYSAPI
@@ -328,7 +441,146 @@ RtlRealPredecessor(
         _SplayParent->RightChild = _SplayChild;         \
         _SplayChild->Parent = _SplayParent;             \
     }
-#endif
+
+//
+// RTL AVL Tree Functions
+//
+NTSYSAPI
+VOID
+NTAPI
+RtlInitializeGenericTableAvl(
+    OUT PRTL_AVL_TABLE Table,
+    IN PRTL_AVL_COMPARE_ROUTINE CompareRoutine,
+    IN PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine,
+    IN PRTL_AVL_FREE_ROUTINE FreeRoutine,
+    IN PVOID TableContext OPTIONAL
+);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlInsertElementGenericTableAvl(
+    IN PRTL_AVL_TABLE Table,
+    IN PVOID Buffer,
+    IN CLONG BufferSize,
+    OUT PBOOLEAN NewElement OPTIONAL
+);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlInsertElementGenericTableFullAvl(
+    IN PRTL_AVL_TABLE Table,
+    IN PVOID Buffer,
+    IN CLONG BufferSize,
+    OUT PBOOLEAN NewElement OPTIONAL,
+    IN PVOID NodeOrParent,
+    IN TABLE_SEARCH_RESULT SearchResult
+);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlDeleteElementGenericTableAvl(
+    IN PRTL_AVL_TABLE Table,
+    IN PVOID Buffer
+);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlLookupElementGenericTableAvl(
+    IN PRTL_AVL_TABLE Table,
+    IN PVOID Buffer
+);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlLookupElementGenericTableFullAvl(
+    IN PRTL_AVL_TABLE Table,
+    IN PVOID Buffer,
+    OUT PVOID *NodeOrParent,
+    OUT TABLE_SEARCH_RESULT *SearchResult
+);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlEnumerateGenericTableAvl(
+    IN PRTL_AVL_TABLE Table,
+    IN BOOLEAN Restart
+);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlEnumerateGenericTableWithoutSplayingAvl(
+    IN PRTL_AVL_TABLE Table,
+    IN OUT PVOID *RestartKey
+);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlLookupFirstMatchingElementGenericTableAvl(
+    IN PRTL_AVL_TABLE Table,
+    IN PVOID Buffer,
+    OUT PVOID *RestartKey
+);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlEnumerateGenericTableLikeADirectory(
+    IN PRTL_AVL_TABLE Table,
+    IN PRTL_AVL_MATCH_FUNCTION MatchFunction OPTIONAL,
+    IN PVOID MatchData OPTIONAL,
+    IN ULONG NextFlag,
+    IN OUT PVOID *RestartKey,
+    IN OUT PULONG DeleteCount,
+    IN PVOID Buffer
+);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlGetElementGenericTableAvl(
+    IN PRTL_AVL_TABLE Table,
+    IN ULONG I
+);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlNumberGenericTableElementsAvl(
+    IN PRTL_AVL_TABLE Table
+);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlIsGenericTableEmptyAvl(
+    IN PRTL_AVL_TABLE Table
+);
+
+#ifdef RTL_USE_AVL_TABLES
+
+#define RtlInitializeGenericTable               RtlInitializeGenericTableAvl
+#define RtlInsertElementGenericTable            RtlInsertElementGenericTableAvl
+#define RtlInsertElementGenericTableFull        RtlInsertElementGenericTableFullAvl
+#define RtlDeleteElementGenericTable            RtlDeleteElementGenericTableAvl
+#define RtlLookupElementGenericTable            RtlLookupElementGenericTableAvl
+#define RtlLookupElementGenericTableFull        RtlLookupElementGenericTableFullAvl
+#define RtlEnumerateGenericTable                RtlEnumerateGenericTableAvl
+#define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl
+#define RtlGetElementGenericTable               RtlGetElementGenericTableAvl
+#define RtlNumberGenericTableElements           RtlNumberGenericTableElementsAvl
+#define RtlIsGenericTableEmpty                  RtlIsGenericTableEmptyAvl
+
+#endif /* RTL_USE_AVL_TABLES */
+
+#endif /* NTOS_MODE_USER */
 
 //
 // Error and Exception Functions
@@ -584,6 +836,17 @@ RtlProtectHeap(
     IN BOOLEAN Protect
 );
 
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlQueryHeapInformation (
+    IN PVOID HeapHandle,
+    IN HEAP_INFORMATION_CLASS HeapInformationClass,
+    OUT PVOID HeapInformation OPTIONAL,
+    IN SIZE_T HeapInformationLength OPTIONAL,
+    OUT PSIZE_T ReturnLength OPTIONAL
+    );
+
 NTSYSAPI
 PWSTR
 NTAPI
@@ -605,6 +868,16 @@ RtlReAllocateHeap(
     SIZE_T Size
 );
 
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlSetHeapInformation (
+    IN PVOID HeapHandle,
+    IN HEAP_INFORMATION_CLASS HeapInformationClass,
+    IN PVOID HeapInformation OPTIONAL,
+    IN SIZE_T HeapInformationLength OPTIONAL
+    );
+
 NTSYSAPI
 BOOLEAN
 NTAPI
@@ -612,6 +885,27 @@ RtlLockHeap(
     IN HANDLE Heap
 );
 
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlMultipleAllocateHeap (
+    IN PVOID HeapHandle,
+    IN ULONG Flags,
+    IN SIZE_T Size,
+    IN ULONG Count,
+    OUT PVOID * Array
+    );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlMultipleFreeHeap (
+    IN PVOID HeapHandle,
+    IN ULONG Flags,
+    IN ULONG Count,
+    OUT PVOID * Array
+    );
+
 NTSYSAPI
 NTSTATUS
 NTAPI
@@ -643,7 +937,8 @@ RtlSetUserFlagsHeap(
     IN PVOID HeapHandle,
     IN ULONG Flags,
     IN PVOID BaseAddress,
-    IN ULONG UserFlags
+    IN ULONG UserFlagsReset,
+    IN ULONG UserFlagsSet
 );
 
 NTSYSAPI
@@ -1702,6 +1997,19 @@ RtlFillMemoryUlong(
     IN ULONG Fill
 );
 
+NTSYSAPI
+SIZE_T
+NTAPI
+RtlCompareMemoryUlong(
+    IN PVOID Source,
+    IN SIZE_T Length,
+    IN ULONG Pattern
+);
+
+#define RtlCopyBytes RtlCopyMemory
+#define RtlFillBytes RtlFillMemory
+#define RtlZeroBytes RtlZeroMemory
+
 #endif
 
 NTSYSAPI
@@ -2157,7 +2465,7 @@ RtlDetermineDosPathNameType_U(
 );
 
 NTSYSAPI
-ULONG
+RTL_PATH_TYPE
 NTAPI
 RtlDetermineDosPathNameType_Ustr(
     IN PCUNICODE_STRING Path
@@ -2182,7 +2490,7 @@ RtlDosPathNameToNtPathName_U(
     IN PCWSTR DosPathName,
     OUT PUNICODE_STRING NtPathName,
     OUT PCWSTR *NtFileNamePart,
-    OUT CURDIR *DirectoryInfo
+    OUT PRTL_RELATIVE_NAME_U DirectoryInfo
 );
 
 NTSYSAPI
@@ -2213,18 +2521,6 @@ RtlGetFullPathName_U(
     OUT PWSTR *ShortName
 );
 
-NTSYSAPI
-ULONG
-NTAPI
-RtlGetFullPathName_Ustr(
-    IN PUNICODE_STRING FileName,
-    IN ULONG Size,
-    IN PWSTR Buffer,
-    OUT PWSTR *ShortName,
-    OUT PBOOLEAN InvalidName,
-    OUT RTL_PATH_TYPE *PathType
-);
-
 NTSYSAPI
 ULONG
 NTAPI
@@ -2258,6 +2554,12 @@ RtlQueryEnvironmentVariable_U(
     PUNICODE_STRING Value
 );
 
+VOID
+NTAPI
+RtlReleaseRelativeName(
+    IN PRTL_RELATIVE_NAME_U RelativeName
+);
+
 NTSYSAPI
 NTSTATUS
 NTAPI
@@ -2634,7 +2936,7 @@ NTAPI
 RtlInitializeRangeList(
     IN OUT PRTL_RANGE_LIST RangeList
 );
-    
+
 NTSYSAPI
 VOID
 NTAPI
@@ -2886,12 +3188,21 @@ LdrRelocateImageWithBias(
 // Activation Context Functions
 //
 #ifdef NTOS_MODE_USER
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlActivateActivationContextEx(
+    IN ULONG Flags,
+    IN PTEB Teb,
+    IN PVOID Context,
+    IN PULONG_PTR Cookie
+);
 
 NTSYSAPI
 NTSTATUS
 NTAPI
 RtlActivateActivationContext(
-    IN ULONG Unknown,
+    IN ULONG Flags,
     IN HANDLE Handle,
     OUT PULONG_PTR Cookie
 );
@@ -2903,10 +3214,9 @@ RtlAddRefActivationContext(
     PVOID Context
 );
 
-
 NTSYSAPI
-NTSTATUS
-NTAPI
+PRTL_ACTIVATION_CONTEXT_STACK_FRAME
+FASTCALL
 RtlActivateActivationContextUnsafeFast(
     IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame,
     IN PVOID Context
@@ -2955,8 +3265,8 @@ NTAPI
 RtlFreeThreadActivationContextStack(void);
 
 NTSYSAPI
-NTSTATUS
-NTAPI
+PRTL_ACTIVATION_CONTEXT_STACK_FRAME
+FASTCALL
 RtlDeactivateActivationContextUnsafeFast(
     IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame
 );
@@ -3036,16 +3346,6 @@ RtlFormatCurrentUserKeyPath(
     IN OUT PUNICODE_STRING KeyPath
 );
 
-NTSYSAPI
-NTSTATUS
-NTAPI
-RtlpNtOpenKey(
-    OUT HANDLE KeyHandle,
-    IN ACCESS_MASK DesiredAccess,
-    IN POBJECT_ATTRIBUTES ObjectAttributes,
-    IN ULONG Unused
-);
-
 NTSYSAPI
 NTSTATUS
 NTAPI
@@ -3077,6 +3377,68 @@ RtlWriteRegistryValue(
     ULONG ValueLength
 );
 
+#ifdef NTOS_MODE_USER
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlpNtCreateKey(
+    OUT HANDLE KeyHandle,
+    IN ACCESS_MASK DesiredAccess,
+    IN POBJECT_ATTRIBUTES ObjectAttributes,
+    IN ULONG TitleIndex,
+    IN PUNICODE_STRING Class,
+    OUT PULONG Disposition
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlpNtEnumerateSubKey(
+    IN HANDLE KeyHandle,
+    OUT PUNICODE_STRING SubKeyName,
+    IN ULONG Index,
+    IN ULONG Unused
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlpNtMakeTemporaryKey(
+    IN HANDLE KeyHandle
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlpNtOpenKey(
+    OUT HANDLE KeyHandle,
+    IN ACCESS_MASK DesiredAccess,
+    IN POBJECT_ATTRIBUTES ObjectAttributes,
+    IN ULONG Unused
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlpNtQueryValueKey(
+    IN HANDLE KeyHandle,
+    OUT PULONG Type OPTIONAL,
+    OUT PVOID Data OPTIONAL,
+    IN OUT PULONG DataLength OPTIONAL,
+    IN ULONG Unused
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlpNtSetValueKey(
+    IN HANDLE KeyHandle,
+    IN ULONG Type,
+    IN PVOID Data,
+    IN ULONG DataLength
+);
+#endif
+
 //
 // NLS Functions
 //
@@ -3195,7 +3557,7 @@ NTSYSAPI
 ULONG
 NTAPI
 RtlComputeCrc32(
-    IN USHORT PartialCrc,
+    IN ULONG InitialCrc,
     IN PUCHAR Buffer,
     IN ULONG Length
 );
@@ -3373,17 +3735,26 @@ NTSYSAPI
 NTSTATUS
 NTAPI
 RtlLockBootStatusData(
-    HANDLE FileHandle
+    OUT PHANDLE FileHandle
 );
 
 NTSYSAPI
 NTSTATUS
 NTAPI
 RtlUnlockBootStatusData(
-    HANDLE FileHandle
+    IN HANDLE FileHandle
 );
 #endif
 
+#ifdef NTOS_MODE_USER
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlGUIDFromString(
+  IN PUNICODE_STRING GuidString,
+  OUT GUID *Guid);
+#endif
+
 #ifdef __cplusplus
 }
 #endif