[HEADERS]
[reactos.git] / reactos / include / ndk / rtlfuncs.h
index ec76c60..debd1ee 100644 (file)
@@ -77,8 +77,8 @@ InsertTailList(
     ListHead->Blink = Entry;
 }
 
-BOOLEAN
 FORCEINLINE
+BOOLEAN
 IsListEmpty(
     IN const LIST_ENTRY * ListHead
 )
@@ -195,14 +195,14 @@ RtlConvertUlongToLuid(ULONG Ulong)
 #if DBG
 
 #define ASSERT( exp ) \
-    ((!(exp)) ? \
+    ((void)((!(exp)) ? \
         (RtlAssert( #exp, __FILE__, __LINE__, NULL ),FALSE) : \
-        TRUE)
+        TRUE))
 
 #define ASSERTMSG( msg, exp ) \
-    ((!(exp)) ? \
+    ((void)((!(exp)) ? \
         (RtlAssert( #exp, __FILE__, __LINE__, msg ),FALSE) : \
-        TRUE)
+        TRUE))
 
 #else
 
@@ -212,51 +212,74 @@ RtlConvertUlongToLuid(ULONG Ulong)
 #endif
 #endif
 
+#ifdef NTOS_KERNEL_RUNTIME
+
 //
-// This macro does nothing in kernel mode
+// Executing RTL functions at DISPATCH_LEVEL or higher will result in a
+// bugcheck.
+//
+#define RTL_PAGED_CODE PAGED_CODE
+
+#else
+
+//
+// This macro does nothing in user mode
 //
 #define RTL_PAGED_CODE NOP_FUNCTION
 
+#endif
+
 //
 // RTL Splay Tree Functions
 //
 NTSYSAPI
 PRTL_SPLAY_LINKS
 NTAPI
-RtlSplay(PRTL_SPLAY_LINKS Links);
+RtlSplay(
+    IN PRTL_SPLAY_LINKS Links
+);
 
 NTSYSAPI
 PRTL_SPLAY_LINKS
 NTAPI
-RtlDelete(PRTL_SPLAY_LINKS Links);
+RtlDelete(IN PRTL_SPLAY_LINKS Links
+);
 
 NTSYSAPI
 VOID
 NTAPI
 RtlDeleteNoSplay(
-    PRTL_SPLAY_LINKS Links,
-    PRTL_SPLAY_LINKS *Root
+    IN PRTL_SPLAY_LINKS Links,
+    OUT PRTL_SPLAY_LINKS *Root
 );
 
 NTSYSAPI
 PRTL_SPLAY_LINKS
 NTAPI
-RtlSubtreeSuccessor(PRTL_SPLAY_LINKS Links);
+RtlSubtreeSuccessor(
+    IN PRTL_SPLAY_LINKS Links
+);
 
 NTSYSAPI
 PRTL_SPLAY_LINKS
 NTAPI
-RtlSubtreePredecessor(PRTL_SPLAY_LINKS Links);
+RtlSubtreePredecessor(
+    IN PRTL_SPLAY_LINKS Links
+);
 
 NTSYSAPI
 PRTL_SPLAY_LINKS
 NTAPI
-RtlRealSuccessor(PRTL_SPLAY_LINKS Links);
+RtlRealSuccessor(
+    IN PRTL_SPLAY_LINKS Links
+);
 
 NTSYSAPI
 PRTL_SPLAY_LINKS
 NTAPI
-RtlRealPredecessor(PRTL_SPLAY_LINKS Links);
+RtlRealPredecessor(
+    IN PRTL_SPLAY_LINKS Links
+);
 
 #define RtlIsLeftChild(Links) \
     (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
@@ -306,16 +329,6 @@ RtlRealPredecessor(PRTL_SPLAY_LINKS Links);
     }
 #endif
 
-#ifdef NTOS_KERNEL_RUNTIME
-
-//
-// Executing RTL functions at DISPATCH_LEVEL or higher will result in a
-// bugcheck.
-//
-#define RTL_PAGED_CODE PAGED_CODE
-
-#endif
-
 //
 // Error and Exception Functions
 //
@@ -394,6 +407,13 @@ RtlNtStatusToDosError(
     IN NTSTATUS Status
 );
 
+NTSYSAPI
+ULONG
+NTAPI
+RtlNtStatusToDosErrorNoTeb(
+    IN NTSTATUS Status
+);
+
 NTSYSAPI
 VOID
 NTAPI
@@ -408,6 +428,7 @@ RtlRaiseException(
     IN PEXCEPTION_RECORD ExceptionRecord
 );
 
+DECLSPEC_NORETURN
 NTSYSAPI
 VOID
 NTAPI
@@ -435,6 +456,15 @@ RtlUnwind(
 //
 // Tracing Functions
 //
+NTSYSAPI
+ULONG
+NTAPI
+RtlWalkFrameChain(
+    OUT PVOID *Callers,
+    IN ULONG Count,
+    IN ULONG Flags
+);
+
 NTSYSAPI
 USHORT
 NTAPI
@@ -451,7 +481,7 @@ NTAPI
 RtlAllocateHeap(
     IN HANDLE HeapHandle,
     IN ULONG Flags,
-    IN ULONG Size
+    IN SIZE_T Size
 );
 
 NTSYSAPI
@@ -509,7 +539,7 @@ RtlExtendHeap(
     IN HANDLE Heap,
     IN ULONG Flags,
     IN PVOID P,
-    IN ULONG Size
+    IN SIZE_T Size
 );
 
 NTSYSAPI
@@ -545,6 +575,14 @@ RtlGetUserInfoHeap(
     OUT PULONG UserFlags
 );
 
+NTSYSAPI
+PVOID
+NTAPI
+RtlProtectHeap(
+    IN PVOID HeapHandle,
+    IN BOOLEAN Protect
+);
+
 NTSYSAPI
 PWSTR
 NTAPI
@@ -563,7 +601,7 @@ RtlReAllocateHeap(
     HANDLE Heap,
     ULONG Flags,
     PVOID Ptr,
-    ULONG Size
+    SIZE_T Size
 );
 
 NTSYSAPI
@@ -598,8 +636,17 @@ RtlSetUserValueHeap(
     IN PVOID UserValue
 );
 
+BOOLEAN
+NTAPI
+RtlSetUserFlagsHeap(
+    IN PVOID HeapHandle,
+    IN ULONG Flags,
+    IN PVOID BaseAddress,
+    IN ULONG UserFlags
+);
+
 NTSYSAPI
-ULONG
+SIZE_T
 NTAPI
 RtlSizeHeap(
     IN PVOID HeapHandle,
@@ -616,6 +663,14 @@ RtlValidateHeap(
     PVOID P
 );
 
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlWalkHeap(
+    IN HANDLE HeapHandle,
+    IN PVOID HeapEntry
+);
+
 #define RtlGetProcessHeap() (NtCurrentPeb()->ProcessHeap)
 
 //
@@ -647,7 +702,7 @@ RtlAddAccessAllowedAceEx(
     IN OUT PACL pAcl,
     IN ULONG dwAceRevision,
     IN ULONG AceFlags,
-    IN ULONG AccessMask,
+    IN ACCESS_MASK AccessMask,
     IN PSID pSid
 );
 
@@ -658,7 +713,7 @@ RtlAddAccessAllowedObjectAce(
     IN OUT PACL pAcl,
     IN ULONG dwAceRevision,
     IN ULONG AceFlags,
-    IN ULONG AccessMask,
+    IN ACCESS_MASK AccessMask,
     IN GUID *ObjectTypeGuid  OPTIONAL,
     IN GUID *InheritedObjectTypeGuid  OPTIONAL,
     IN PSID pSid
@@ -692,7 +747,7 @@ RtlAddAccessDeniedObjectAce(
     IN OUT PACL pAcl,
     IN ULONG dwAceRevision,
     IN ULONG AceFlags,
-    IN ULONG AccessMask,
+    IN ACCESS_MASK AccessMask,
     IN GUID *ObjectTypeGuid  OPTIONAL,
     IN GUID *InheritedObjectTypeGuid  OPTIONAL,
     IN PSID pSid
@@ -759,6 +814,17 @@ RtlAddAuditAccessObjectAce(
     IN BOOLEAN Failure
 );
 
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlAddMandatoryAce(
+    IN OUT PACL Acl,
+    IN ULONG Revision,
+    IN ULONG Flags,
+    IN ULONG MandatoryFlags,
+    IN ULONG AceType,
+    IN PSID LabelSid);
+
 NTSYSAPI
 NTSTATUS
 NTAPI
@@ -875,6 +941,14 @@ RtlCreateSecurityDescriptorRelative(
     IN ULONG Revision
 );
 
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCopySecurityDescriptor(
+    IN PSECURITY_DESCRIPTOR pSourceSecurityDescriptor,
+    OUT PSECURITY_DESCRIPTOR pDestinationSecurityDescriptor
+);
+
 NTSYSAPI
 NTSTATUS
 NTAPI
@@ -1023,6 +1097,8 @@ RtlMapGenericMask(
     PGENERIC_MAPPING GenericMapping
 );
 
+#ifdef NTOS_MODE_USER
+
 NTSYSAPI
 NTSTATUS
 NTAPI
@@ -1033,6 +1109,8 @@ RtlQueryInformationAcl(
     ACL_INFORMATION_CLASS InformationClass
 );
 
+#endif
+
 NTSYSAPI
 VOID
 NTAPI
@@ -1102,6 +1180,8 @@ RtlSetGroupSecurityDescriptor(
     IN BOOLEAN GroupDefaulted
 );
 
+#ifdef NTOS_MODE_USER
+
 NTSYSAPI
 NTSTATUS
 NTAPI
@@ -1112,6 +1192,8 @@ RtlSetInformationAcl(
     ACL_INFORMATION_CLASS InformationClass
 );
 
+#endif
+
 NTSYSAPI
 NTSTATUS
 NTAPI
@@ -1288,6 +1370,8 @@ RtlCharToInteger(
 //
 // Byte Swap Functions
 //
+#ifdef NTOS_MODE_USER
+
 #if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037)) || \
     ((defined(_M_AMD64) || \
      defined(_M_IA64)) && (_MSC_FULL_VER > 13009175))
@@ -1302,8 +1386,15 @@ unsigned __int64 __cdecl _byteswap_uint64(unsigned __int64);
 #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
 #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
 
+#elif defined (__GNUC__)
+
+#define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
+#define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
+#define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
+
 #else
 
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
 NTSYSAPI
 USHORT
 FASTCALL
@@ -1318,8 +1409,10 @@ NTSYSAPI
 ULONGLONG
 FASTCALL
 RtlUlonglongByteSwap(IN ULONGLONG Source);
+#endif
 
 #endif
+#endif // NTOS_MODE_USER
 
 //
 // Unicode->Ansi String Functions
@@ -1385,7 +1478,7 @@ RtlUpcaseUnicodeToOemN(
     PCHAR OemString,
     ULONG OemSize,
     PULONG ResultSize,
-    PWCHAR UnicodeString,
+    PCWCH UnicodeString,
     ULONG UnicodeSize
 );
 
@@ -1415,7 +1508,7 @@ RtlUnicodeToOemN(
     PCHAR OemString,
     ULONG OemSize,
     PULONG ResultSize,
-    PWCHAR UnicodeString,
+    PCWCH UnicodeString,
     ULONG UnicodeSize
 );
 
@@ -1440,7 +1533,7 @@ RtlUpcaseUnicodeToMultiByteN(
     PCHAR MbString,
     ULONG MbSize,
     PULONG ResultSize,
-    PWCHAR UnicodeString,
+    PCWCH UnicodeString,
     ULONG UnicodeSize
 );
 
@@ -1449,7 +1542,7 @@ NTSTATUS
 NTAPI
 RtlUnicodeToMultiByteSize(
     PULONG MbSize,
-    PWCHAR UnicodeString,
+    PCWCH UnicodeString,
     ULONG UnicodeSize
 );
 
@@ -1477,7 +1570,7 @@ RtlOemToUnicodeN(
     PWSTR UnicodeString,
     ULONG MaxBytesInUnicodeString,
     PULONG BytesInUnicodeString,
-    IN PCHAR OemString,
+    IN PCCH OemString,
     ULONG BytesInOemString
 );
 
@@ -1587,8 +1680,6 @@ RtlDowncaseUnicodeString(
     IN BOOLEAN AllocateDestinationString
 );
 
-#endif
-
 NTSYSAPI
 NTSTATUS
 NTAPI
@@ -1598,6 +1689,8 @@ RtlDuplicateUnicodeString(
     OUT PUNICODE_STRING DestinationString
 );
 
+#endif
+
 NTSYSAPI
 BOOLEAN
 NTAPI
@@ -1649,12 +1742,12 @@ RtlInitUnicodeStringEx(
 );
 
 NTSYSAPI
-ULONG
+BOOLEAN
 NTAPI
 RtlIsTextUnicode(
     PVOID Buffer,
-    ULONG Length,
-    ULONG *Flags
+    INT Length,
+    INT *Flags
 );
 
 NTSYSAPI
@@ -1717,6 +1810,14 @@ RtlInitAnsiString(
     PCSZ SourceString
 );
 
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlInitAnsiStringEx(
+    PANSI_STRING DestinationString,
+    PCSZ SourceString
+);
+
 //
 // OEM String Functions
 //
@@ -1825,6 +1926,13 @@ RtlFillMemoryUlong(
 //
 // Process Management Functions
 //
+NTSYSAPI
+PPEB
+NTAPI
+RtlGetCurrentPeb(
+    VOID
+);
+
 NTSYSAPI
 VOID
 NTAPI
@@ -1869,9 +1977,9 @@ RtlCreateUserThread(
     IN HANDLE ProcessHandle,
     IN PSECURITY_DESCRIPTOR SecurityDescriptor,
     IN BOOLEAN CreateSuspended,
-    IN LONG StackZeroBits,
-    IN ULONG StackReserve,
-    IN ULONG StackCommit,
+    IN ULONG StackZeroBits,
+    IN SIZE_T StackReserve,
+    IN SIZE_T StackCommit,
     IN PTHREAD_START_ROUTINE StartAddress,
     IN PVOID Parameter,
     IN OUT PHANDLE ThreadHandle,
@@ -1904,6 +2012,11 @@ RtlInitializeContext(
     IN PINITIAL_TEB InitialTeb
 );
 
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlIsThreadWithinLoaderCallout(VOID);
+
 NTSYSAPI
 PRTL_USER_PROCESS_PARAMETERS
 NTAPI
@@ -1914,6 +2027,19 @@ VOID
 NTAPI
 RtlReleasePebLock(VOID);
 
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlRemoteCall(
+    IN HANDLE Process,
+    IN HANDLE Thread,
+    IN PVOID CallSite,
+    IN ULONG ArgumentCount,
+    IN PULONG Arguments,
+    IN BOOLEAN PassContext,
+    IN BOOLEAN AlreadySuspended
+);
+
 NTSYSAPI
 VOID
 NTAPI
@@ -1923,11 +2049,33 @@ RtlSetProcessIsCritical(
     IN BOOLEAN IsWinlogon
 );
 
+NTSYSAPI
+ULONG
+NTAPI
+RtlGetCurrentProcessorNumber(
+    VOID
+);
+
 #define NtCurrentPeb() (NtCurrentTeb()->ProcessEnvironmentBlock)
 
 //
 // Thread Pool Functions
 //
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDeregisterWaitEx(
+    IN HANDLE hWaitHandle,
+    IN HANDLE hCompletionEvent
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDeregisterWait(
+    IN HANDLE hWaitHandle
+);
+
 NTSYSAPI
 NTSTATUS
 NTAPI
@@ -1937,6 +2085,27 @@ RtlQueueWorkItem(
     IN ULONG Flags
 );
 
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlSetIoCompletionCallback(
+    IN HANDLE FileHandle,
+    IN PIO_APC_ROUTINE Callback,
+    IN ULONG Flags
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlRegisterWait(
+    IN PHANDLE phNewWaitObject,
+    IN HANDLE hObject,
+    IN WAITORTIMERCALLBACKFUNC Callback,
+    IN PVOID pvContext,
+    IN ULONG ulMilliseconds,
+    IN ULONG ulFlags
+);
+
 //
 // Environment/Path Functions
 //
@@ -2375,6 +2544,21 @@ RtlSetBits(
     IN ULONG NumberToSet
 );
 
+NTSYSAPI
+VOID
+NTAPI
+RtlSetAllBits(
+    PRTL_BITMAP BitMapHeader
+);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlTestBit(
+    PRTL_BITMAP BitMapHeader,
+    ULONG BitNumber
+);
+
 //
 // Timer Functions
 //
@@ -2468,17 +2652,87 @@ DbgPrintEx(
     IN ...
 );
 
+NTSYSAPI
 ULONG
 NTAPI
 DbgPrompt(
-    IN PCH PromptString,
-    OUT PCH OutputString,
-    IN ULONG OutputSize
+    IN PCCH Prompt,
+    OUT PCH Response,
+    IN ULONG MaximumResponseLength
+);
+
+VOID
+NTAPI
+DbgBreakPoint(
+    VOID
+);
+
+VOID
+NTAPI
+DbgLoadImageSymbols(
+    IN PSTRING Name,
+    IN PVOID Base,
+    IN ULONG_PTR ProcessId
 );
 
 VOID
 NTAPI
-DbgBreakPoint(VOID);
+DbgUnLoadImageSymbols(
+    IN PSTRING Name,
+    IN PVOID Base,
+    IN ULONG_PTR ProcessId
+);
+
+VOID
+NTAPI
+DbgCommandString(
+    IN PCCH Name,
+    IN PCCH Command
+);
+
+//
+// Generic Table Functions
+//
+#if defined(NTOS_MODE_USER) || defined(_NTIFS_)
+NTSYSAPI
+PVOID
+NTAPI
+RtlInsertElementGenericTable(
+    IN PRTL_GENERIC_TABLE Table,
+    IN PVOID Buffer,
+    IN ULONG BufferSize,
+    OUT PBOOLEAN NewElement OPTIONAL
+);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlInsertElementGenericTableFull(
+    IN PRTL_GENERIC_TABLE Table,
+    IN PVOID Buffer,
+    IN ULONG BufferSize,
+    OUT PBOOLEAN NewElement OPTIONAL,
+    IN PVOID NodeOrParent,
+    IN TABLE_SEARCH_RESULT SearchResult
+);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlIsGenericTableEmpty(
+    IN PRTL_GENERIC_TABLE Table
+);
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlLookupElementGenericTableFull(
+    IN PRTL_GENERIC_TABLE Table,
+    IN PVOID Buffer,
+    OUT PVOID *NodeOrParent,
+    OUT TABLE_SEARCH_RESULT *SearchResult
+);
+#endif
 
 //
 // Handle Table Functions
@@ -2593,10 +2847,40 @@ RtlImageRvaToSection(
     ULONG Rva
 );
 
+NTSYSAPI
+ULONG
+NTAPI
+LdrRelocateImageWithBias(
+    IN PVOID NewAddress,
+    IN LONGLONG AdditionalBias,
+    IN PCCH LoaderName,
+    IN ULONG Success,
+    IN ULONG Conflict,
+    IN ULONG Invalid
+);
+
 //
 // Activation Context Functions
 //
 #ifdef NTOS_MODE_USER
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlActivateActivationContext(
+    IN ULONG Unknown,
+    IN HANDLE Handle,
+    OUT PULONG_PTR Cookie
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlAddRefActivationContext(
+    PVOID Context
+);
+
+
 NTSYSAPI
 NTSTATUS
 NTAPI
@@ -2612,6 +2896,14 @@ RtlAllocateActivationContextStack(
     IN PVOID *Context
 );
 
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCreateActivationContext(
+    OUT PHANDLE Handle,
+    IN OUT PVOID ReturnedData
+);
+
 NTSYSAPI
 NTSTATUS
 NTAPI
@@ -2623,9 +2915,22 @@ NTSYSAPI
 VOID
 NTAPI
 RtlReleaseActivationContext(
-    IN PVOID *Context
+    IN HANDLE handle
 );
 
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDeactivateActivationContext(
+    ULONG dwFlags,
+    ULONG_PTR ulCookie
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlFreeThreadActivationContextStack(void);
+
 NTSYSAPI
 NTSTATUS
 NTAPI
@@ -2652,12 +2957,34 @@ NTSYSAPI
 NTSTATUS
 NTAPI
 RtlFindActivationContextSectionString(
-    IN PVOID Unknown0,
-    IN PVOID Unknown1,
+    IN ULONG dwFlags,
+    IN const GUID *ExtensionGuid,
     IN ULONG SectionType,
     IN PUNICODE_STRING SectionName,
-    IN PVOID Unknown2
+    IN OUT PVOID ReturnedData
 );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlQueryInformationActivationContext(
+    DWORD dwFlags,
+    PVOID Context,
+    PVOID pvSubInstance,
+    ULONG ulInfoClass,
+    PVOID pvBuffer,
+    SIZE_T cbBuffer OPTIONAL,
+    SIZE_T *pcbWrittenOrRequired OPTIONAL
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlZombifyActivationContext(
+    PVOID Context
+);
+
+
 #endif
 
 //
@@ -2674,7 +3001,17 @@ RtlCheckRegistryKey(
 NTSYSAPI
 NTSTATUS
 NTAPI
-RtlFormatCurrentUserKeyPath(IN OUT PUNICODE_STRING KeyPath);
+RtlCreateRegistryKey(
+    IN ULONG RelativeTo,
+    IN PWSTR Path
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlFormatCurrentUserKeyPath(
+    IN OUT PUNICODE_STRING KeyPath
+);
 
 NTSYSAPI
 NTSTATUS
@@ -2720,6 +3057,14 @@ RtlWriteRegistryValue(
 //
 // NLS Functions
 //
+NTSYSAPI
+VOID
+NTAPI
+RtlGetDefaultCodePage(
+    OUT PUSHORT AnsiCodePage,
+    OUT PUSHORT OemCodePage
+);
+
 NTSYSAPI
 VOID
 NTAPI
@@ -2816,6 +3161,13 @@ RtlUniform(
     IN PULONG Seed
 );
 
+NTSYSAPI
+ULONG
+NTAPI
+RtlRandom(
+    IN OUT PULONG Seed
+);
+
 NTSYSAPI
 ULONG
 NTAPI
@@ -2906,6 +3258,14 @@ RtlTimeFieldsToTime(
     PLARGE_INTEGER Time
 );
 
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlTimeToSecondsSince1970(
+    PLARGE_INTEGER Time,
+    OUT PULONG SecondsSince1970
+);
+
 NTSYSAPI
 VOID
 NTAPI