ListHead->Blink = Entry;
}
-BOOLEAN
FORCEINLINE
+BOOLEAN
IsListEmpty(
IN const LIST_ENTRY * ListHead
)
#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
#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))
}
#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
//
IN NTSTATUS Status
);
+NTSYSAPI
+ULONG
+NTAPI
+RtlNtStatusToDosErrorNoTeb(
+ IN NTSTATUS Status
+);
+
NTSYSAPI
VOID
NTAPI
IN PEXCEPTION_RECORD ExceptionRecord
);
+DECLSPEC_NORETURN
NTSYSAPI
VOID
NTAPI
//
// Tracing Functions
//
+NTSYSAPI
+ULONG
+NTAPI
+RtlWalkFrameChain(
+ OUT PVOID *Callers,
+ IN ULONG Count,
+ IN ULONG Flags
+);
+
NTSYSAPI
USHORT
NTAPI
RtlAllocateHeap(
IN HANDLE HeapHandle,
IN ULONG Flags,
- IN ULONG Size
+ IN SIZE_T Size
);
NTSYSAPI
IN HANDLE Heap,
IN ULONG Flags,
IN PVOID P,
- IN ULONG Size
+ IN SIZE_T Size
);
NTSYSAPI
OUT PULONG UserFlags
);
+NTSYSAPI
+PVOID
+NTAPI
+RtlProtectHeap(
+ IN PVOID HeapHandle,
+ IN BOOLEAN Protect
+);
+
NTSYSAPI
PWSTR
NTAPI
HANDLE Heap,
ULONG Flags,
PVOID Ptr,
- ULONG Size
+ SIZE_T Size
);
NTSYSAPI
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,
PVOID P
);
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlWalkHeap(
+ IN HANDLE HeapHandle,
+ IN PVOID HeapEntry
+);
+
#define RtlGetProcessHeap() (NtCurrentPeb()->ProcessHeap)
//
IN OUT PACL pAcl,
IN ULONG dwAceRevision,
IN ULONG AceFlags,
- IN ULONG AccessMask,
+ IN ACCESS_MASK AccessMask,
IN PSID pSid
);
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
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
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
IN ULONG Revision
);
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCopySecurityDescriptor(
+ IN PSECURITY_DESCRIPTOR pSourceSecurityDescriptor,
+ OUT PSECURITY_DESCRIPTOR pDestinationSecurityDescriptor
+);
+
NTSYSAPI
NTSTATUS
NTAPI
PGENERIC_MAPPING GenericMapping
);
+#ifdef NTOS_MODE_USER
+
NTSYSAPI
NTSTATUS
NTAPI
ACL_INFORMATION_CLASS InformationClass
);
+#endif
+
NTSYSAPI
VOID
NTAPI
IN BOOLEAN GroupDefaulted
);
+#ifdef NTOS_MODE_USER
+
NTSYSAPI
NTSTATUS
NTAPI
ACL_INFORMATION_CLASS InformationClass
);
+#endif
+
NTSYSAPI
NTSTATUS
NTAPI
//
// 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))
#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
ULONGLONG
FASTCALL
RtlUlonglongByteSwap(IN ULONGLONG Source);
+#endif
#endif
+#endif // NTOS_MODE_USER
//
// Unicode->Ansi String Functions
PCHAR OemString,
ULONG OemSize,
PULONG ResultSize,
- PWCHAR UnicodeString,
+ PCWCH UnicodeString,
ULONG UnicodeSize
);
PCHAR OemString,
ULONG OemSize,
PULONG ResultSize,
- PWCHAR UnicodeString,
+ PCWCH UnicodeString,
ULONG UnicodeSize
);
PCHAR MbString,
ULONG MbSize,
PULONG ResultSize,
- PWCHAR UnicodeString,
+ PCWCH UnicodeString,
ULONG UnicodeSize
);
NTAPI
RtlUnicodeToMultiByteSize(
PULONG MbSize,
- PWCHAR UnicodeString,
+ PCWCH UnicodeString,
ULONG UnicodeSize
);
PWSTR UnicodeString,
ULONG MaxBytesInUnicodeString,
PULONG BytesInUnicodeString,
- IN PCHAR OemString,
+ IN PCCH OemString,
ULONG BytesInOemString
);
IN BOOLEAN AllocateDestinationString
);
-#endif
-
NTSYSAPI
NTSTATUS
NTAPI
OUT PUNICODE_STRING DestinationString
);
+#endif
+
NTSYSAPI
BOOLEAN
NTAPI
);
NTSYSAPI
-ULONG
+BOOLEAN
NTAPI
RtlIsTextUnicode(
PVOID Buffer,
- ULONG Length,
- ULONG *Flags
+ INT Length,
+ INT *Flags
);
NTSYSAPI
PCSZ SourceString
);
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlInitAnsiStringEx(
+ PANSI_STRING DestinationString,
+ PCSZ SourceString
+);
+
//
// OEM String Functions
//
//
// Process Management Functions
//
+NTSYSAPI
+PPEB
+NTAPI
+RtlGetCurrentPeb(
+ VOID
+);
+
NTSYSAPI
VOID
NTAPI
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,
IN PINITIAL_TEB InitialTeb
);
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlIsThreadWithinLoaderCallout(VOID);
+
NTSYSAPI
PRTL_USER_PROCESS_PARAMETERS
NTAPI
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
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
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
//
IN ULONG NumberToSet
);
+NTSYSAPI
+VOID
+NTAPI
+RtlSetAllBits(
+ PRTL_BITMAP BitMapHeader
+);
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlTestBit(
+ PRTL_BITMAP BitMapHeader,
+ ULONG BitNumber
+);
+
//
// Timer Functions
//
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
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
IN PVOID *Context
);
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCreateActivationContext(
+ OUT PHANDLE Handle,
+ IN OUT PVOID ReturnedData
+);
+
NTSYSAPI
NTSTATUS
NTAPI
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
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
//
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
//
// NLS Functions
//
+NTSYSAPI
+VOID
+NTAPI
+RtlGetDefaultCodePage(
+ OUT PUSHORT AnsiCodePage,
+ OUT PUSHORT OemCodePage
+);
+
NTSYSAPI
VOID
NTAPI
IN PULONG Seed
);
+NTSYSAPI
+ULONG
+NTAPI
+RtlRandom(
+ IN OUT PULONG Seed
+);
+
NTSYSAPI
ULONG
NTAPI
PLARGE_INTEGER Time
);
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlTimeToSecondsSince1970(
+ PLARGE_INTEGER Time,
+ OUT PULONG SecondsSince1970
+);
+
NTSYSAPI
VOID
NTAPI