summaryrefslogtreecommitdiffstats
path: root/public/sdk/inc/nturtl.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--public/sdk/inc/nturtl.h897
1 files changed, 897 insertions, 0 deletions
diff --git a/public/sdk/inc/nturtl.h b/public/sdk/inc/nturtl.h
new file mode 100644
index 000000000..804848cba
--- /dev/null
+++ b/public/sdk/inc/nturtl.h
@@ -0,0 +1,897 @@
+/*++ BUILD Version: 0001 // Increment this if a change has global effects
+
+Copyright (c) 1989-1993 Microsoft Corporation
+
+Module Name:
+
+ ntrtl.h
+
+Abstract:
+
+ Include file for NT runtime routines that are callable by only
+ user mode code in various.
+
+Author:
+
+ Steve Wood (stevewo) 10-Aug-1989
+
+Environment:
+
+ These routines are statically linked in the caller's executable and
+ are callable in only from user mode. They make use of Nt system
+ services.
+
+Revision History:
+
+--*/
+
+#ifndef _NTURTL_
+#define _NTURTL_
+
+//
+// CriticalSection function definitions
+//
+// begin_winnt
+
+typedef struct _RTL_CRITICAL_SECTION_DEBUG {
+ USHORT Type;
+ USHORT CreatorBackTraceIndex;
+ struct _RTL_CRITICAL_SECTION *CriticalSection;
+ LIST_ENTRY ProcessLocksList;
+ ULONG EntryCount;
+ ULONG ContentionCount;
+ ULONG Spare[ 2 ];
+} RTL_CRITICAL_SECTION_DEBUG, *PRTL_CRITICAL_SECTION_DEBUG;
+
+#define RTL_CRITSECT_TYPE 0
+#define RTL_RESOURCE_TYPE 1
+
+typedef struct _RTL_CRITICAL_SECTION {
+ PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
+
+ //
+ // The following three fields control entering and exiting the critical
+ // section for the resource
+ //
+
+ LONG LockCount;
+ LONG RecursionCount;
+ HANDLE OwningThread; // from the thread's ClientId->UniqueThread
+ HANDLE LockSemaphore;
+ ULONG Reserved;
+} RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION;
+// end_winnt
+
+//
+// Shared resource function definitions
+//
+
+typedef struct _RTL_RESOURCE_DEBUG {
+ ULONG Reserved[ 5 ]; // Make it the same length as RTL_CRITICAL_SECTION_DEBUG
+
+ ULONG ContentionCount;
+ ULONG Spare[ 2 ];
+} RTL_RESOURCE_DEBUG, *PRTL_RESOURCE_DEBUG;
+
+typedef struct _RTL_RESOURCE {
+
+ //
+ // The following field controls entering and exiting the critical
+ // section for the resource
+ //
+
+ RTL_CRITICAL_SECTION CriticalSection;
+
+ //
+ // The following four fields indicate the number of both shared or
+ // exclusive waiters
+ //
+
+ HANDLE SharedSemaphore;
+ ULONG NumberOfWaitingShared;
+ HANDLE ExclusiveSemaphore;
+ ULONG NumberOfWaitingExclusive;
+
+ //
+ // The following indicates the current state of the resource
+ //
+ // <0 the resource is acquired for exclusive access with the
+ // absolute value indicating the number of recursive accesses
+ // to the resource
+ //
+ // 0 the resource is available
+ //
+ // >0 the resource is acquired for shared access with the
+ // value indicating the number of shared accesses to the resource
+ //
+
+ LONG NumberOfActive;
+ HANDLE ExclusiveOwnerThread;
+
+ ULONG Flags; // See RTL_RESOURCE_FLAG_ equates below.
+
+ PRTL_RESOURCE_DEBUG DebugInfo;
+} RTL_RESOURCE, *PRTL_RESOURCE;
+
+#define RTL_RESOURCE_FLAG_LONG_TERM ((ULONG) 0x00000001)
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlEnterCriticalSection(
+ PRTL_CRITICAL_SECTION CriticalSection
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlLeaveCriticalSection(
+ PRTL_CRITICAL_SECTION CriticalSection
+ );
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlTryEnterCriticalSection(
+ PRTL_CRITICAL_SECTION CriticalSection
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlInitializeCriticalSection(
+ PRTL_CRITICAL_SECTION CriticalSection
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDeleteCriticalSection(
+ PRTL_CRITICAL_SECTION CriticalSection
+ );
+
+NTSYSAPI
+VOID
+NTAPI
+RtlInitializeResource(
+ PRTL_RESOURCE Resource
+ );
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlAcquireResourceShared(
+ PRTL_RESOURCE Resource,
+ BOOLEAN Wait
+ );
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlAcquireResourceExclusive(
+ PRTL_RESOURCE Resource,
+ BOOLEAN Wait
+ );
+
+NTSYSAPI
+VOID
+NTAPI
+RtlReleaseResource(
+ PRTL_RESOURCE Resource
+ );
+
+NTSYSAPI
+VOID
+NTAPI
+RtlConvertSharedToExclusive(
+ PRTL_RESOURCE Resource
+ );
+
+NTSYSAPI
+VOID
+NTAPI
+RtlConvertExclusiveToShared(
+ PRTL_RESOURCE Resource
+ );
+
+NTSYSAPI
+VOID
+NTAPI
+RtlDeleteResource (
+ PRTL_RESOURCE Resource
+ );
+
+//
+// Current Directory Stuff
+//
+
+typedef struct _RTL_RELATIVE_NAME {
+ STRING RelativeName;
+ HANDLE ContainingDirectory;
+} RTL_RELATIVE_NAME, *PRTL_RELATIVE_NAME;
+
+typedef enum _RTL_PATH_TYPE {
+ RtlPathTypeUnknown,
+ RtlPathTypeUncAbsolute,
+ RtlPathTypeDriveAbsolute,
+ RtlPathTypeDriveRelative,
+ RtlPathTypeRooted,
+ RtlPathTypeRelative,
+ RtlPathTypeLocalDevice,
+ RtlPathTypeRootLocalDevice
+} RTL_PATH_TYPE;
+
+NTSYSAPI
+RTL_PATH_TYPE
+NTAPI
+RtlDetermineDosPathNameType_U(
+ PCWSTR DosFileName
+ );
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlIsDosDeviceName_U(
+ PWSTR DosFileName
+ );
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlGetFullPathName_U(
+ PCWSTR lpFileName,
+ ULONG nBufferLength,
+ PWSTR lpBuffer,
+ PWSTR *lpFilePart
+ );
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlGetCurrentDirectory_U(
+ ULONG nBufferLength,
+ PWSTR lpBuffer
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlSetCurrentDirectory_U(
+ PUNICODE_STRING PathName
+ );
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlGetLongestNtPathLength( VOID );
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlDosPathNameToNtPathName_U(
+ PCWSTR DosFileName,
+ PUNICODE_STRING NtFileName,
+ PWSTR *FilePart OPTIONAL,
+ PRTL_RELATIVE_NAME RelativeName OPTIONAL
+ );
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlDosSearchPath_U(
+ PWSTR lpPath,
+ PWSTR lpFileName,
+ PWSTR lpExtension,
+ ULONG nBufferLength,
+ PWSTR lpBuffer,
+ PWSTR *lpFilePart
+ );
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlDoesFileExists_U(
+ PCWSTR FileName
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlInitializeProfile (
+ BOOLEAN KernelToo
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlStartProfile (
+ VOID
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlStopProfile (
+ VOID
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlAnalyzeProfile (
+ VOID
+ );
+
+//
+// User mode only security Rtl routines
+//
+
+//
+// Structure to hold information about an ACE to be created
+//
+
+typedef struct {
+ UCHAR AceType;
+ UCHAR InheritFlags;
+ UCHAR AceFlags;
+ ACCESS_MASK Mask;
+ PSID *Sid;
+} RTL_ACE_DATA, *PRTL_ACE_DATA;
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlNewSecurityObject(
+ PSECURITY_DESCRIPTOR ParentDescriptor,
+ PSECURITY_DESCRIPTOR CreatorDescriptor,
+ PSECURITY_DESCRIPTOR * NewDescriptor,
+ BOOLEAN IsDirectoryObject,
+ HANDLE Token,
+ PGENERIC_MAPPING GenericMapping
+ );
+
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlSetSecurityObject (
+ SECURITY_INFORMATION SecurityInformation,
+ PSECURITY_DESCRIPTOR ModificationDescriptor,
+ PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
+ PGENERIC_MAPPING GenericMapping,
+ HANDLE Token
+ );
+
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlQuerySecurityObject (
+ PSECURITY_DESCRIPTOR ObjectDescriptor,
+ SECURITY_INFORMATION SecurityInformation,
+ PSECURITY_DESCRIPTOR ResultantDescriptor,
+ ULONG DescriptorLength,
+ PULONG ReturnLength
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDeleteSecurityObject (
+ PSECURITY_DESCRIPTOR * ObjectDescriptor
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlNewInstanceSecurityObject(
+ BOOLEAN ParentDescriptorChanged,
+ BOOLEAN CreatorDescriptorChanged,
+ PLUID OldClientTokenModifiedId,
+ PLUID NewClientTokenModifiedId,
+ PSECURITY_DESCRIPTOR ParentDescriptor,
+ PSECURITY_DESCRIPTOR CreatorDescriptor,
+ PSECURITY_DESCRIPTOR * NewDescriptor,
+ BOOLEAN IsDirectoryObject,
+ HANDLE Token,
+ PGENERIC_MAPPING GenericMapping
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCopySecurityDescriptor(
+ PSECURITY_DESCRIPTOR InputSecurityDescriptor,
+ PSECURITY_DESCRIPTOR *OutputSecurityDescriptor
+ );
+
+//
+// list canonicalization
+//
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlConvertUiListToApiList(
+ PUNICODE_STRING UiList OPTIONAL,
+ PUNICODE_STRING ApiList,
+ BOOLEAN BlankIsDelimiter
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCreateAndSetSD(
+ IN PRTL_ACE_DATA AceData,
+ IN ULONG AceCount,
+ IN PSID OwnerSid OPTIONAL,
+ IN PSID GroupSid OPTIONAL,
+ OUT PSECURITY_DESCRIPTOR *NewDescriptor
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCreateUserSecurityObject(
+ IN PRTL_ACE_DATA AceData,
+ IN ULONG AceCount,
+ IN PSID OwnerSid,
+ IN PSID GroupSid,
+ IN BOOLEAN IsDirectoryObject,
+ IN PGENERIC_MAPPING GenericMapping,
+ OUT PSECURITY_DESCRIPTOR *NewDescriptor
+ );
+
+//
+// Per-Thread Curdir Support
+//
+
+typedef struct _RTL_PERTHREAD_CURDIR {
+ PRTL_DRIVE_LETTER_CURDIR CurrentDirectories;
+ PUNICODE_STRING ImageName;
+ PVOID Environment;
+} RTL_PERTHREAD_CURDIR, *PRTL_PERTHREAD_CURDIR;
+
+#define RtlAssociatePerThreadCurdir(BLOCK,CURRENTDIRECTORIES,IMAGENAME,ENVIRONMENT)\
+ (BLOCK)->CurrentDirectories = (CURRENTDIRECTORIES); \
+ (BLOCK)->ImageName = (IMAGENAME); \
+ (BLOCK)->Environment = (ENVIRONMENT); \
+ NtCurrentTeb()->NtTib.SubSystemTib = (PVOID)(BLOCK) \
+
+#define RtlDisAssociatePerThreadCurdir() \
+ NtCurrentTeb()->NtTib.SubSystemTib = NULL;
+
+#define RtlGetPerThreadCurdir() \
+ ((PRTL_PERTHREAD_CURDIR)(NtCurrentTeb()->NtTib.SubSystemTib))
+
+
+//
+// See NTRTL.H for heap functions availble to both kernel and user mode code.
+//
+
+#define RtlProcessHeap() (NtCurrentPeb()->ProcessHeap)
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlLockHeap(
+ IN PVOID HeapHandle
+ );
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlUnlockHeap(
+ IN PVOID HeapHandle
+ );
+
+NTSYSAPI
+PVOID
+NTAPI
+RtlReAllocateHeap(
+ IN PVOID HeapHandle,
+ IN ULONG Flags,
+ IN PVOID BaseAddress,
+ IN ULONG Size
+ );
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlGetUserInfoHeap(
+ IN PVOID HeapHandle,
+ IN ULONG Flags,
+ IN PVOID BaseAddress,
+ OUT PVOID *UserValue OPTIONAL,
+ OUT PULONG UserFlags OPTIONAL
+ );
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlSetUserValueHeap(
+ IN PVOID HeapHandle,
+ IN ULONG Flags,
+ IN PVOID BaseAddress,
+ IN PVOID UserValue
+ );
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlSetUserFlagsHeap(
+ IN PVOID HeapHandle,
+ IN ULONG Flags,
+ IN PVOID BaseAddress,
+ IN ULONG UserFlagsReset,
+ IN ULONG UserFlagsSet
+ );
+
+typedef struct _RTL_HEAP_TAG_INFO {
+ ULONG NumberOfAllocations;
+ ULONG NumberOfFrees;
+ ULONG BytesAllocated;
+} RTL_HEAP_TAG_INFO, *PRTL_HEAP_TAG_INFO;
+
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlCreateTagHeap(
+ IN PVOID HeapHandle,
+ IN ULONG Flags,
+ IN PWSTR TagPrefix OPTIONAL,
+ IN PWSTR TagNames
+ );
+
+#define RTL_HEAP_MAKE_TAG HEAP_MAKE_TAG_FLAGS
+
+NTSYSAPI
+PWSTR
+NTAPI
+RtlQueryTagHeap(
+ IN PVOID HeapHandle,
+ IN ULONG Flags,
+ IN USHORT TagIndex,
+ IN BOOLEAN ResetCounters,
+ OUT PRTL_HEAP_TAG_INFO TagInfo OPTIONAL
+ );
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlSizeHeap(
+ IN PVOID HeapHandle,
+ IN ULONG Flags,
+ IN PVOID BaseAddress
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlExtendHeap(
+ IN PVOID HeapHandle,
+ IN ULONG Flags,
+ IN PVOID Base,
+ IN ULONG Size
+ );
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlCompactHeap(
+ IN PVOID HeapHandle,
+ IN ULONG Flags
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlZeroHeap(
+ IN PVOID HeapHandle,
+ IN ULONG Flags
+ );
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlValidateHeap(
+ IN PVOID HeapHandle,
+ IN ULONG Flags,
+ IN PVOID BaseAddress
+ );
+
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlValidateProcessHeaps( VOID );
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlGetProcessHeaps(
+ ULONG NumberOfHeaps,
+ PVOID *ProcessHeaps
+ );
+
+
+typedef
+NTSTATUS (*PRTL_ENUM_HEAPS_ROUTINE)(
+ PVOID HeapHandle,
+ PVOID Parameter
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlEnumProcessHeaps(
+ PRTL_ENUM_HEAPS_ROUTINE EnumRoutine,
+ PVOID Parameter
+ );
+
+typedef struct _RTL_HEAP_USAGE_ENTRY {
+ struct _RTL_HEAP_USAGE_ENTRY *Next;
+ PVOID Address;
+ ULONG Size;
+ USHORT AllocatorBackTraceIndex;
+ USHORT TagIndex;
+} RTL_HEAP_USAGE_ENTRY, *PRTL_HEAP_USAGE_ENTRY;
+
+typedef struct _RTL_HEAP_USAGE {
+ ULONG Length;
+ ULONG BytesAllocated;
+ ULONG BytesCommitted;
+ ULONG BytesReserved;
+ ULONG BytesReservedMaximum;
+ PRTL_HEAP_USAGE_ENTRY Entries;
+ PRTL_HEAP_USAGE_ENTRY AddedEntries;
+ PRTL_HEAP_USAGE_ENTRY RemovedEntries;
+ ULONG Reserved[ 8 ];
+} RTL_HEAP_USAGE, *PRTL_HEAP_USAGE;
+
+#define HEAP_USAGE_ALLOCATED_BLOCKS HEAP_REALLOC_IN_PLACE_ONLY
+#define HEAP_USAGE_FREE_BUFFER HEAP_ZERO_MEMORY
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlUsageHeap(
+ IN PVOID HeapHandle,
+ IN ULONG Flags,
+ IN OUT PRTL_HEAP_USAGE Usage
+ );
+
+typedef struct _RTL_HEAP_WALK_ENTRY {
+ PVOID DataAddress;
+ ULONG DataSize;
+ UCHAR OverheadBytes;
+ UCHAR SegmentIndex;
+ USHORT Flags;
+ union {
+ struct {
+ ULONG Settable;
+ USHORT TagIndex;
+ USHORT AllocatorBackTraceIndex;
+ ULONG Reserved[ 2 ];
+ } Block;
+ struct {
+ ULONG CommittedSize;
+ ULONG UnCommittedSize;
+ PVOID FirstEntry;
+ PVOID LastEntry;
+ } Segment;
+ };
+} RTL_HEAP_WALK_ENTRY, *PRTL_HEAP_WALK_ENTRY;
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlWalkHeap(
+ IN PVOID HeapHandle,
+ IN OUT PRTL_HEAP_WALK_ENTRY Entry
+ );
+
+typedef struct _RTL_HEAP_ENTRY {
+ ULONG Size;
+ USHORT Flags;
+ USHORT AllocatorBackTraceIndex;
+ union {
+ struct {
+ ULONG Settable;
+ ULONG Tag;
+ } s1; // All other heap entries
+ struct {
+ ULONG CommittedSize;
+ PVOID FirstBlock;
+ } s2; // RTL_SEGMENT
+ } u;
+} RTL_HEAP_ENTRY, *PRTL_HEAP_ENTRY;
+
+#define RTL_HEAP_BUSY (USHORT)0x0001
+#define RTL_HEAP_SEGMENT (USHORT)0x0002
+#define RTL_HEAP_SETTABLE_VALUE (USHORT)0x0010
+#define RTL_HEAP_SETTABLE_FLAG1 (USHORT)0x0020
+#define RTL_HEAP_SETTABLE_FLAG2 (USHORT)0x0040
+#define RTL_HEAP_SETTABLE_FLAG3 (USHORT)0x0080
+#define RTL_HEAP_SETTABLE_FLAGS (USHORT)0x00E0
+#define RTL_HEAP_UNCOMMITTED_RANGE (USHORT)0x0100
+#define RTL_HEAP_PROTECTED_ENTRY (USHORT)0x0200
+
+typedef struct _RTL_HEAP_TAG {
+ ULONG NumberOfAllocations;
+ ULONG NumberOfFrees;
+ ULONG BytesAllocated;
+ USHORT TagIndex;
+ USHORT CreatorBackTraceIndex;
+ WCHAR TagName[ 24 ];
+} RTL_HEAP_TAG, *PRTL_HEAP_TAG;
+
+typedef struct _RTL_HEAP_INFORMATION {
+ PVOID BaseAddress;
+ ULONG Flags;
+ USHORT EntryOverhead;
+ USHORT CreatorBackTraceIndex;
+ ULONG BytesAllocated;
+ ULONG BytesCommitted;
+ ULONG NumberOfTags;
+ ULONG NumberOfEntries;
+ ULONG NumberOfPseudoTags;
+ ULONG PseudoTagGranularity;
+ ULONG Reserved[ 5 ];
+ PRTL_HEAP_TAG Tags;
+ PRTL_HEAP_ENTRY Entries;
+} RTL_HEAP_INFORMATION, *PRTL_HEAP_INFORMATION;
+
+typedef struct _RTL_PROCESS_HEAPS {
+ ULONG NumberOfHeaps;
+ RTL_HEAP_INFORMATION Heaps[ 1 ];
+} RTL_PROCESS_HEAPS, *PRTL_PROCESS_HEAPS;
+
+//
+// Debugging support
+//
+
+typedef struct _RTL_DEBUG_INFORMATION {
+ HANDLE SectionHandleClient;
+ PVOID ViewBaseClient;
+ PVOID ViewBaseTarget;
+ ULONG ViewBaseDelta;
+ HANDLE EventPairClient;
+ HANDLE EventPairTarget;
+ HANDLE TargetProcessId;
+ HANDLE TargetThreadHandle;
+ ULONG Flags;
+ ULONG OffsetFree;
+ ULONG CommitSize;
+ ULONG ViewSize;
+ PRTL_PROCESS_MODULES Modules;
+ PRTL_PROCESS_BACKTRACES BackTraces;
+ PRTL_PROCESS_HEAPS Heaps;
+ PRTL_PROCESS_LOCKS Locks;
+ PVOID SpecificHeap;
+ HANDLE TargetProcessHandle;
+ PVOID Reserved[ 6 ];
+} RTL_DEBUG_INFORMATION, *PRTL_DEBUG_INFORMATION;
+
+NTSYSAPI
+PRTL_DEBUG_INFORMATION
+NTAPI
+RtlCreateQueryDebugBuffer(
+ IN ULONG MaximumCommit OPTIONAL,
+ IN BOOLEAN UseEventPair
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDestroyQueryDebugBuffer(
+ IN PRTL_DEBUG_INFORMATION Buffer
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlQueryProcessDebugInformation(
+ IN HANDLE UniqueProcessId,
+ IN ULONG Flags,
+ IN OUT PRTL_DEBUG_INFORMATION Buffer
+ );
+
+#define RTL_QUERY_PROCESS_MODULES 0x00000001
+#define RTL_QUERY_PROCESS_BACKTRACES 0x00000002
+#define RTL_QUERY_PROCESS_HEAP_SUMMARY 0x00000004
+#define RTL_QUERY_PROCESS_HEAP_TAGS 0x00000008
+#define RTL_QUERY_PROCESS_HEAP_ENTRIES 0x00000010
+#define RTL_QUERY_PROCESS_LOCKS 0x00000020
+
+NTSTATUS
+NTAPI
+RtlQueryProcessModuleInformation(
+ IN OUT PRTL_DEBUG_INFORMATION Buffer
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlQueryProcessBackTraceInformation(
+ IN OUT PRTL_DEBUG_INFORMATION Buffer
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlQueryProcessHeapInformation(
+ IN OUT PRTL_DEBUG_INFORMATION Buffer
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlQueryProcessLockInformation(
+ IN OUT PRTL_DEBUG_INFORMATION Buffer
+ );
+
+
+
+//
+// Routines for manipulating user mode handle tables. Used for Atoms
+// and Local/Global memory allocations.
+//
+
+typedef struct _RTL_HANDLE_TABLE_ENTRY {
+ union {
+ ULONG Flags; // Allocated entries have low bit set
+ struct _RTL_HANDLE_TABLE_ENTRY *NextFree; // Free entries use this word for free list
+ };
+} RTL_HANDLE_TABLE_ENTRY, *PRTL_HANDLE_TABLE_ENTRY;
+
+#define RTL_HANDLE_ALLOCATED (USHORT)0x0001
+
+typedef struct _RTL_HANDLE_TABLE {
+ ULONG MaximumNumberOfHandles;
+ ULONG SizeOfHandleTableEntry;
+ ULONG Reserved[ 2 ];
+ PRTL_HANDLE_TABLE_ENTRY FreeHandles;
+ PRTL_HANDLE_TABLE_ENTRY CommittedHandles;
+ PRTL_HANDLE_TABLE_ENTRY UnCommittedHandles;
+ PRTL_HANDLE_TABLE_ENTRY MaxReservedHandles;
+} RTL_HANDLE_TABLE, *PRTL_HANDLE_TABLE;
+
+void
+RtlInitializeHandleTable(
+ IN ULONG MaximumNumberOfHandles,
+ IN ULONG SizeOfHandleTableEntry,
+ OUT PRTL_HANDLE_TABLE HandleTable
+ );
+
+NTSTATUS
+RtlDestroyHandleTable(
+ IN OUT PRTL_HANDLE_TABLE HandleTable
+ );
+
+PRTL_HANDLE_TABLE_ENTRY
+RtlAllocateHandle(
+ IN PRTL_HANDLE_TABLE HandleTable,
+ OUT PULONG HandleIndex OPTIONAL
+ );
+
+BOOLEAN
+RtlFreeHandle(
+ IN PRTL_HANDLE_TABLE HandleTable,
+ IN PRTL_HANDLE_TABLE_ENTRY Handle
+ );
+
+BOOLEAN
+RtlIsValidHandle(
+ IN PRTL_HANDLE_TABLE HandleTable,
+ IN PRTL_HANDLE_TABLE_ENTRY Handle
+ );
+
+BOOLEAN
+RtlIsValidIndexHandle(
+ IN PRTL_HANDLE_TABLE HandleTable,
+ IN ULONG HandleIndex,
+ OUT PRTL_HANDLE_TABLE_ENTRY *Handle
+ );
+
+#endif // _NTURTL_