- NDK 0.98, now with versionned headers. Too many changes to list, see the TinyKRNL...
[reactos.git] / reactos / include / ndk / rtlfuncs.h
index 98cf6ae..cd03f37 100644 (file)
@@ -1,4 +1,4 @@
-/*++ NDK Version: 0095
+/*++ NDK Version: 0098
 
 Copyright (c) Alex Ionescu.  All rights reserved.
 
@@ -12,7 +12,7 @@ Abstract:
 
 Author:
 
-    Alex Ionescu (alex.ionescu@reactos.com)   06-Oct-2004
+    Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
 
 --*/
 
@@ -24,8 +24,14 @@ Author:
 //
 #include <umtypes.h>
 #include <ntnls.h>
-#include <extypes.h>
 #include <rtltypes.h>
+#include <extypes.h>
+#include "in6addr.h"
+#include "inaddr.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
 
 #ifdef NTOS_MODE_USER
 
@@ -109,7 +115,7 @@ PushEntryList(
 FORCEINLINE
 BOOLEAN
 RemoveEntryList(
-    IN PLIST_ENTRY  Entry)
+    IN PLIST_ENTRY Entry)
 {
     PLIST_ENTRY OldFlink;
     PLIST_ENTRY OldBlink;
@@ -124,7 +130,7 @@ RemoveEntryList(
 FORCEINLINE
 PLIST_ENTRY
 RemoveHeadList(
-    IN PLIST_ENTRY  ListHead)
+    IN PLIST_ENTRY ListHead)
 {
     PLIST_ENTRY Flink;
     PLIST_ENTRY Entry;
@@ -139,7 +145,7 @@ RemoveHeadList(
 FORCEINLINE
 PLIST_ENTRY
 RemoveTailList(
-    IN PLIST_ENTRY  ListHead)
+    IN PLIST_ENTRY ListHead)
 {
     PLIST_ENTRY Blink;
     PLIST_ENTRY Entry;
@@ -151,11 +157,60 @@ RemoveTailList(
     return Entry;
 }
 
+//
+// Unicode string macros
+//
+FORCEINLINE
+VOID
+RtlInitEmptyUnicodeString(OUT PUNICODE_STRING UnicodeString,
+                          IN PWSTR Buffer,
+                          IN USHORT BufferSize)
+{
+    UnicodeString->Length = 0;
+    UnicodeString->MaximumLength = BufferSize;
+    UnicodeString->Buffer = Buffer;
+}
+
 //
 // LUID Macros
 //
 #define RtlEqualLuid(L1, L2) (((L1)->HighPart == (L2)->HighPart) && \
                               ((L1)->LowPart  == (L2)->LowPart))
+FORCEINLINE
+LUID
+NTAPI_INLINE
+RtlConvertUlongToLuid(ULONG Ulong)
+{
+    LUID TempLuid;
+
+    TempLuid.LowPart = Ulong;
+    TempLuid.HighPart = 0;
+    return TempLuid;
+}
+
+//
+// ASSERT Macros
+//
+#ifndef ASSERT
+#if DBG
+
+#define ASSERT( exp ) \
+    ((!(exp)) ? \
+        (RtlAssert( #exp, __FILE__, __LINE__, NULL ),FALSE) : \
+        TRUE)
+
+#define ASSERTMSG( msg, exp ) \
+    ((!(exp)) ? \
+        (RtlAssert( #exp, __FILE__, __LINE__, msg ),FALSE) : \
+        TRUE)
+
+#else
+
+#define ASSERT( exp )         ((void) 0)
+#define ASSERTMSG( msg, exp ) ((void) 0)
+
+#endif
+#endif
 
 //
 // RTL Splay Tree Functions
@@ -268,17 +323,16 @@ RtlAssert(
 );
 
 NTSYSAPI
-VOID
+PVOID
 NTAPI
-RtlCaptureContext(OUT PCONTEXT ContextRecord);
+RtlSetUnhandledExceptionFilter(
+    IN PVOID TopLevelExceptionFilter
+);
 
 NTSYSAPI
-ULONG
+VOID
 NTAPI
-RtlComputeCrc32(
-    IN ULONG Initial,
-    IN PUCHAR Data,
-    IN ULONG Length);
+RtlCaptureContext(OUT PCONTEXT ContextRecord);
 
 NTSYSAPI
 PVOID
@@ -290,6 +344,16 @@ PVOID
 NTAPI
 RtlDecodePointer(IN PVOID Pointer);
 
+NTSYSAPI
+PVOID
+NTAPI
+RtlEncodeSystemPointer(IN PVOID Pointer);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlDecodeSystemPointer(IN PVOID Pointer);
+
 NTSYSAPI
 BOOLEAN
 NTAPI
@@ -328,6 +392,14 @@ RtlUnwind(
     IN PVOID ReturnValue
 );
 
+//
+// Tracing Functions
+//
+NTSYSAPI
+USHORT
+NTAPI
+RtlLogStackBackTrace(VOID);
+
 //
 // Heap Functions
 //
@@ -353,6 +425,15 @@ RtlCreateHeap(
 );
 
 NTSYSAPI
+ULONG
+NTAPI
+RtlCreateTagHeap(
+    IN HANDLE HeapHandle,
+    IN ULONG Flags,
+    IN PWSTR TagName,
+    IN PWSTR TagSubName
+);
+
 ULONG
 NTAPI
 RtlCompactHeap(
@@ -525,6 +606,16 @@ RtlAddAuditAccessAce(
     BOOLEAN Failure
 );
 
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlAcquirePrivilege(
+    IN PULONG Privilege,
+    IN ULONG NumPriv,
+    IN ULONG Flags,
+    OUT PVOID *ReturnedState
+);
+
 NTSYSAPI
 NTSTATUS
 NTAPI
@@ -827,6 +918,13 @@ RtlQueryInformationAcl(
     ACL_INFORMATION_CLASS InformationClass
 );
 
+NTSYSAPI
+VOID
+NTAPI
+RtlReleasePrivilege(
+    IN PVOID ReturnedState
+);
+
 NTSYSAPI
 NTSTATUS
 NTAPI
@@ -1091,14 +1189,17 @@ unsigned __int64 __cdecl _byteswap_uint64(unsigned __int64);
 
 #else
 
+NTSYSAPI
 USHORT
 FASTCALL
 RtlUshortByteSwap(IN USHORT Source);
 
+NTSYSAPI
 ULONG
 FASTCALL
 RtlUlongByteSwap(IN ULONG Source);
 
+NTSYSAPI
 ULONGLONG
 FASTCALL
 RtlUlonglongByteSwap(IN ULONGLONG Source);
@@ -1391,6 +1492,16 @@ RtlEqualUnicodeString(
     BOOLEAN CaseInsensitive
 );
 
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlFindCharInUnicodeString(
+    IN ULONG Flags,
+    IN PUNICODE_STRING SearchString,
+    IN PCUNICODE_STRING MatchString,
+    OUT PUSHORT Position
+);
+
 NTSYSAPI
 VOID
 NTAPI
@@ -1410,8 +1521,17 @@ NTSYSAPI
 VOID
 NTAPI
 RtlInitUnicodeString(
-  IN OUT PUNICODE_STRING DestinationString,
-  IN PCWSTR SourceString);
+    IN OUT PUNICODE_STRING DestinationString,
+    IN PCWSTR SourceString
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlInitUnicodeStringEx(
+    OUT PUNICODE_STRING DestinationString,
+    IN PCWSTR SourceString OPTIONAL
+);
 
 NTSYSAPI
 ULONG
@@ -1458,6 +1578,14 @@ RtlUnicodeStringToInteger(
     PULONG Value
 );
 
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlValidateUnicodeString(
+    IN ULONG Flags,
+    IN PCUNICODE_STRING String
+);
+
 //
 // Ansi String Functions
 //
@@ -1693,31 +1821,61 @@ RtlCreateEnvironment(
     PWSTR *Environment
 );
 
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlComputePrivatizedDllName_U(
+    IN PUNICODE_STRING DllName,
+    OUT PUNICODE_STRING RealName,
+    OUT PUNICODE_STRING LocalName
+);
+
 NTSYSAPI
 VOID
 NTAPI
-RtlDestroyEnvironment(PWSTR Environment);
+RtlDestroyEnvironment(
+    IN PWSTR Environment
+);
 
 NTSYSAPI
 BOOLEAN
 NTAPI
-RtlDoesFileExists_U(PWSTR FileName);
+RtlDoesFileExists_U(
+    IN PCWSTR FileName
+);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlDoesFileExists_UstrEx(
+    IN PCUNICODE_STRING FileName,
+    IN BOOLEAN SucceedIfBusy
+);
 
 NTSYSAPI
 ULONG
 NTAPI
-RtlDetermineDosPathNameType_U(PCWSTR Path);
+RtlDetermineDosPathNameType_U(
+    IN PCWSTR Path
+);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlDetermineDosPathNameType_Ustr(
+    IN PCUNICODE_STRING Path
+);
 
 NTSYSAPI
 ULONG
 NTAPI
 RtlDosSearchPath_U(
-    WCHAR *sp,
-    WCHAR *name,
-    WCHAR *ext,
-    ULONG buf_sz,
-    WCHAR *buffer,
-    WCHAR **shortname
+    IN PCWSTR Path,
+    IN PCWSTR FileName,
+    IN PCWSTR Extension,
+    IN ULONG BufferSize,
+    OUT PWSTR Buffer,
+    OUT PWSTR *PartName
 );
 
 NTSYSAPI
@@ -1752,12 +1910,39 @@ NTSYSAPI
 ULONG
 NTAPI
 RtlGetFullPathName_U(
-    const WCHAR *dosname,
-    ULONG size,
-    WCHAR *buf,
-    WCHAR **shortname
+    IN PCWSTR FileName,
+    IN ULONG Size,
+    IN PWSTR Buffer,
+    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
+RtlIsDosDeviceName_U(
+    IN PWSTR Name
 );
 
+NTSYSAPI
+ULONG
+NTAPI
+RtlIsDosDeviceName_Ustr(
+    IN PUNICODE_STRING Name
+);
+
+
 NTSYSAPI
 BOOLEAN
 NTAPI
@@ -1779,7 +1964,9 @@ RtlQueryEnvironmentVariable_U(
 NTSYSAPI
 NTSTATUS
 NTAPI
-RtlSetCurrentDirectory_U(PUNICODE_STRING name);
+RtlSetCurrentDirectory_U(
+    IN PUNICODE_STRING name
+);
 
 NTSYSAPI
 NTSTATUS
@@ -1829,6 +2016,13 @@ RtlLeaveCriticalSection(
     IN PRTL_CRITICAL_SECTION CriticalSection
 );
 
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlTryEnterCriticalSection(
+    IN PRTL_CRITICAL_SECTION CriticalSection
+);
+
 NTSYSAPI
 VOID
 NTAPI
@@ -1943,7 +2137,7 @@ RtlGetCompressionWorkSpaceSize(
 // Debug Info Functions
 //
 NTSYSAPI
-PRTL_DEBUG_BUFFER
+PRTL_DEBUG_INFORMATION
 NTAPI
 RtlCreateQueryDebugBuffer(
     IN ULONG Size,
@@ -1953,7 +2147,7 @@ RtlCreateQueryDebugBuffer(
 NTSYSAPI
 NTSTATUS
 NTAPI
-RtlDestroyQueryDebugBuffer(IN PRTL_DEBUG_BUFFER DebugBuffer);
+RtlDestroyQueryDebugBuffer(IN PRTL_DEBUG_INFORMATION DebugBuffer);
 
 NTSYSAPI
 NTSTATUS
@@ -1961,7 +2155,7 @@ NTAPI
 RtlQueryProcessDebugInformation(
     IN ULONG ProcessId,
     IN ULONG DebugInfoClassMask,
-    IN OUT PRTL_DEBUG_BUFFER DebugBuffer
+    IN OUT PRTL_DEBUG_INFORMATION DebugBuffer
 );
 
 //
@@ -2024,7 +2218,15 @@ RtlInitializeBitMap(
 NTSYSAPI
 VOID
 NTAPI
-RtlSetBits (
+RtlSetBit(
+    PRTL_BITMAP BitMapHeader,
+    ULONG BitNumber
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlSetBits(
     IN PRTL_BITMAP BitMapHeader,
     IN ULONG StartingIndex,
     IN ULONG NumberToSet
@@ -2083,6 +2285,26 @@ NTSTATUS
 NTAPI
 RtlDeleteTimerQueue(HANDLE TimerQueue);
 
+//
+// SList functions
+//
+PSLIST_ENTRY
+FASTCALL
+InterlockedPushListSList(
+    IN PSLIST_HEADER ListHead,
+    IN PSLIST_ENTRY List,
+    IN PSLIST_ENTRY ListEnd,
+    IN ULONG Count
+);
+
+//
+// Range List functions
+//
+NTSYSAPI
+VOID
+NTAPI
+RtlFreeRangeList(IN PRTL_RANGE_LIST RangeList);
+
 //
 // Debug Functions
 //
@@ -2093,6 +2315,24 @@ DbgPrint(
     IN ...
 );
 
+NTSYSAPI
+ULONG
+__cdecl
+DbgPrintEx(
+    IN ULONG ComponentId,
+    IN ULONG Level,
+    IN PCH Format,
+    IN ...
+);
+
+ULONG
+NTAPI
+DbgPrompt(
+    IN PCH PromptString,
+    OUT PCH OutputString,
+    IN ULONG OutputSize
+);
+
 VOID
 NTAPI
 DbgBreakPoint(VOID);
@@ -2170,9 +2410,9 @@ NTSYSAPI
 PVOID
 NTAPI
 RtlImageDirectoryEntryToData(
-    PVOID  BaseAddress,
-    BOOLEAN bFlag,
-    ULONG Directory,
+    PVOID BaseAddress,
+    BOOLEAN MappedAsImage,
+    USHORT Directory,
     PULONG Size
 );
 
@@ -2191,6 +2431,16 @@ PIMAGE_NT_HEADERS
 NTAPI
 RtlImageNtHeader(IN PVOID BaseAddress);
 
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlImageNtHeaderEx(
+    IN ULONG Flags,
+    IN PVOID BaseAddress,
+    IN ULONGLONG Size,
+    IN PIMAGE_NT_HEADERS *NtHeader
+);
+
 NTSYSAPI
 PIMAGE_SECTION_HEADER
 NTAPI
@@ -2200,6 +2450,73 @@ RtlImageRvaToSection(
     ULONG Rva
 );
 
+//
+// Activation Context Functions
+//
+#ifdef NTOS_MODE_USER
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlActivateActivationContextUnsafeFast(
+    IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame,
+    IN PVOID Context
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlAllocateActivationContextStack(
+    IN PVOID *Context
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlGetActiveActivationContext(
+    IN PVOID *Context
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlReleaseActivationContext(
+    IN PVOID *Context
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDeactivateActivationContextUnsafeFast(
+    IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDosApplyFileIsolationRedirection_Ustr(
+    IN BOOLEAN Unknown,
+    IN PUNICODE_STRING OriginalName,
+    IN PUNICODE_STRING Extension,
+    IN OUT PUNICODE_STRING RedirectedName,
+    IN OUT PUNICODE_STRING RedirectedName2,
+    IN OUT PUNICODE_STRING *OriginalName2,
+    IN PVOID Unknown1,
+    IN PVOID Unknown2,
+    IN PVOID Unknown3
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlFindActivationContextSectionString(
+    IN PVOID Unknown0,
+    IN PVOID Unknown1,
+    IN ULONG SectionType,
+    IN PUNICODE_STRING SectionName,
+    IN PVOID Unknown2
+);
+#endif
+
 //
 // Registry Functions
 //
@@ -2352,7 +2669,18 @@ RtlEnlargedUnsignedMultiply(
 NTSYSAPI
 ULONG
 NTAPI
-RtlUniform(PULONG Seed);
+RtlUniform(
+    IN PULONG Seed
+);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlComputeCrc32(
+    IN UINT PartialCrc,
+    IN PUCHAR Buffer,
+    IN ULONG Length
+);
 
 //
 // Network Functions
@@ -2361,36 +2689,36 @@ NTSYSAPI
 NTSTATUS
 NTAPI
 RtlIpv4StringToAddressW(
-    IN LPWSTR IpString,
-    IN ULONG Base,
-    OUT PULONG PtrToIpAddr,
-    OUT PULONG IpAddr
+    IN PWCHAR String,
+    IN UCHAR Strict,
+    OUT PWCHAR Terminator,
+    OUT struct in_addr *Addr
 );
 
 NTSYSAPI
 NTSTATUS
 NTAPI
 RtlIpv6StringToAddressA(
-    IN LPSTR Name,
-    OUT PULONG Unknown,
-    OUT PVOID IpAddr
+    IN PCHAR Name,
+    OUT PCHAR *Terminator,
+    OUT struct in6_addr *Addr
 );
 
 NTSYSAPI
 NTSTATUS
 NTAPI
 RtlIpv6StringToAddressW(
-    IN LPWSTR Name,
-    OUT PULONG Unknown,
-    OUT PVOID IpAddr
+    IN PWCHAR Name,
+    OUT PCHAR *Terminator,
+    OUT struct in6_addr *Addr
 );
 
 NTSYSAPI
 NTSTATUS
 NTAPI
 RtlIpv6StringToAddressExA(
-    IN LPSTR AddressName,
-    IN PVOID Address,
+    IN PCHAR AddressString,
+    IN struct in6_addr *Address,
     IN PULONG ScopeId,
     IN PUSHORT Port
 );
@@ -2399,8 +2727,8 @@ NTSYSAPI
 NTSTATUS
 NTAPI
 RtlIpv6StringToAddressExW(
-    IN LPWSTR AddressName,
-    IN PVOID Address,
+    IN PWCHAR AddressName,
+    IN struct in6_addr *Address,
     IN PULONG ScopeId,
     IN PUSHORT Port
 );
@@ -2409,6 +2737,7 @@ RtlIpv6StringToAddressExW(
 //
 // Time Functions
 //
+struct _RTL_TIME_ZONE_INFORMATION;
 NTSYSAPI
 NTSTATUS
 NTAPI
@@ -2443,6 +2772,14 @@ RtlTimeToTimeFields(
     PTIME_FIELDS TimeFields
 );
 
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlSystemTimeToLocalTime(
+    IN PLARGE_INTEGER SystemTime,
+    OUT PLARGE_INTEGER LocalTime
+);
+
 //
 // Version Functions
 //
@@ -2465,4 +2802,8 @@ BOOLEAN
 NTAPI
 RtlGetNtProductType(OUT PNT_PRODUCT_TYPE ProductType);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif