Add new header for native user-mode functios inside the NT library inside the NDK...
authorAlex Ionescu <aionescu@gmail.com>
Tue, 21 Jun 2005 02:08:42 +0000 (02:08 +0000)
committerAlex Ionescu <aionescu@gmail.com>
Tue, 21 Jun 2005 02:08:42 +0000 (02:08 +0000)
svn path=/trunk/; revision=16199

reactos/include/ndk/ldrtypes.h
reactos/include/ndk/ntndk.h
reactos/include/ndk/rtlfuncs.h
reactos/include/ndk/rtltypes.h
reactos/include/ndk/umfuncs.h [new file with mode: 0644]
reactos/lib/kernel32/k32.h
reactos/lib/ntdll/inc/ntdll.h
reactos/subsys/csrss/init.c

index a0fe6de..6bad3f6 100644 (file)
 #define RESOURCE_LANGUAGE_LEVEL  2
 #define RESOURCE_DATA_LEVEL      3
 
+/* FIXME: USE CORRRECT LDR_ FLAGS */
+#define IMAGE_DLL              0x00000004
+#define LOAD_IN_PROGRESS       0x00001000
+#define UNLOAD_IN_PROGRESS     0x00002000
+#define ENTRY_PROCESSED                0x00004000
+#define DONT_CALL_FOR_THREAD   0x00040000
+#define PROCESS_ATTACH_CALLED  0x00080000
+#define IMAGE_NOT_AT_BASE      0x00200000
+
 /* ENUMERATIONS **************************************************************/
 
 /* TYPES *********************************************************************/             
@@ -34,8 +43,26 @@ typedef struct _PEB_LDR_DATA
     PVOID               EntryInProgress;
 } PEB_LDR_DATA, *PPEB_LDR_DATA;
 
-/* FIXME: Update with _LDR_DATA_TABLE_ENTRY and LDR_ flags */
-//typedef struct _LDR_MODULE
+typedef struct _LDR_DATA_TABLE_ENTRY
+{
+    LIST_ENTRY InLoadOrderModuleList;
+    LIST_ENTRY InMemoryOrderModuleList;
+    LIST_ENTRY InInitializationOrderModuleList;
+    PVOID DllBase;
+    PVOID EntryPoint;
+    ULONG SizeOfImage;
+    UNICODE_STRING FullDllName;
+    UNICODE_STRING BaseDllName;
+    ULONG Flags;
+    SHORT LoadCount; /* FIXME: HACK!!! FIX ASAP */
+    SHORT TlsIndex;  /* FIXME: HACK!!! FIX ASAP */
+    LIST_ENTRY HashLinks;
+    PVOID SectionPointer;
+    ULONG CheckSum;
+    ULONG TimeDateStamp;
+    PVOID LoadedImports;
+    PVOID EntryPointActivationContext;
+} LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY;
 
 typedef struct _LDR_RESOURCE_INFO 
 {
index 66d5c62..48cbbb9 100644 (file)
@@ -34,6 +34,9 @@
 #else
     /* User-Mode NDK */
     #include "umtypes.h"    /* Native Types in DDK/IFS but not in PSDK */
+    #ifdef READY_FOR_NEW_NTDLL /* This hack will be removed in the next commit */
+    #include "umfuncs.h"    /* User-Mode NT Library Functions */
+    #endif
 #endif
 
 /* Shared NDK */
index 1c223df..b3b8e8d 100644 (file)
@@ -204,19 +204,14 @@ RemoveTailList(
 }
 
 /*
- * Debug Functions 
+ * Error and Exception Functions
  */
-
-ULONG
-CDECL
-DbgPrint(
-    IN PCH  Format,
-    IN ...
-);
-
-VOID
+PVOID
 STDCALL
-DbgBreakPoint(VOID);
+RtlAddVectoredExceptionHandler(
+    IN ULONG FirstHandler,
+    IN PRTL_VECTORED_EXCEPTION_HANDLER VectoredHandler
+);
 
 VOID
 STDCALL
@@ -227,6 +222,14 @@ RtlAssert(
     PCHAR Message
 );
 
+PVOID
+STDCALL
+RtlEncodePointer(IN PVOID Pointer);
+
+PVOID
+STDCALL
+RtlDecodePointer(IN PVOID Pointer);
+
 ULONG
 STDCALL
 RtlNtStatusToDosError(IN NTSTATUS Status);
@@ -271,6 +274,13 @@ RtlCreateHeap(
     IN PRTL_HEAP_DEFINITION Definition OPTIONAL
 );
 
+DWORD
+STDCALL
+RtlCompactHeap(
+    HANDLE heap,
+    DWORD flags
+);
+    
 HANDLE 
 STDCALL
 RtlDestroyHeap(HANDLE hheap);
@@ -283,6 +293,13 @@ RtlFreeHeap(
     IN PVOID P
 );
 
+ULONG
+STDCALL
+RtlGetProcessHeaps(
+    ULONG HeapCount,
+    HANDLE *HeapArray
+);
+    
 PVOID 
 STDCALL
 RtlReAllocateHeap(
@@ -1138,7 +1155,9 @@ RtlFillMemoryUlong(
                  
 /*
  * Process Management Functions
- */      
+ */
+/* FIXME: Some of these will be split up into enviro/path functions */
+
 VOID
 STDCALL
 RtlAcquirePebLock(VOID);
@@ -1224,6 +1243,41 @@ RtlExpandEnvironmentStrings_U(
     PULONG Length
 );
 
+BOOLEAN
+STDCALL
+RtlDoesFileExists_U(PWSTR FileName);
+
+ULONG
+STDCALL
+RtlDetermineDosPathNameType_U(PCWSTR Path);
+    
+ULONG
+STDCALL
+RtlDosSearchPath_U(
+    WCHAR *sp,
+    WCHAR *name,
+    WCHAR *ext,
+    ULONG buf_sz,
+    WCHAR *buffer,
+    WCHAR **shortname
+);
+    
+ULONG
+STDCALL
+RtlGetCurrentDirectory_U(
+    ULONG MaximumLength,
+    PWSTR Buffer
+);
+
+ULONG
+STDCALL
+RtlGetFullPathName_U(
+    const WCHAR *dosname,
+    ULONG size,
+    WCHAR *buf,
+    WCHAR **shortname
+);
+
 PRTL_USER_PROCESS_PARAMETERS
 STDCALL
 RtlNormalizeProcessParams(
@@ -1238,6 +1292,10 @@ RtlQueryEnvironmentVariable_U(
     PUNICODE_STRING Value
 );
 
+NTSTATUS
+STDCALL
+RtlSetCurrentDirectory_U(PUNICODE_STRING name);
+    
 NTSTATUS
 STDCALL
 RtlSetEnvironmentVariable(
@@ -1267,6 +1325,13 @@ RtlInitializeCriticalSection(
      PRTL_CRITICAL_SECTION CriticalSection
 );
 
+NTSTATUS 
+STDCALL
+RtlInitializeCriticalSectionAndSpinCount(
+    PRTL_CRITICAL_SECTION CriticalSection,
+    ULONG SpinCount
+);
+
 NTSTATUS
 STDCALL
 RtlLeaveCriticalSection(
@@ -1308,6 +1373,28 @@ RtlGetCompressionWorkSpaceSize(
     OUT PULONG CompressFragmentWorkSpaceSize
 );
 
+/*
+ * Debug Info Functions
+ */
+PDEBUG_BUFFER 
+STDCALL
+RtlCreateQueryDebugBuffer(
+    IN ULONG Size,
+    IN BOOLEAN EventPair
+);
+
+NTSTATUS
+STDCALL
+RtlDestroyQueryDebugBuffer(IN PDEBUG_BUFFER DebugBuffer);
+
+NTSTATUS 
+STDCALL
+RtlQueryProcessDebugInformation(
+    IN ULONG ProcessId,
+    IN ULONG DebugInfoClassMask,
+    IN OUT PDEBUG_BUFFER DebugBuffer
+);
+                
 /*
  * Bitmap Functions
  */
@@ -1368,17 +1455,113 @@ RtlSetBits (
 );
 
 /*
- * PE Functions
+ * Timer Functions
  */
-NTSTATUS 
+NTSTATUS
 STDCALL
-LdrVerifyImageMatchesChecksum(
-    IN HANDLE FileHandle,
-    ULONG Unknown1,
-    ULONG Unknown2,
-    ULONG Unknown3
+RtlCreateTimer(
+    HANDLE TimerQueue,
+    PHANDLE phNewTimer, 
+    WAITORTIMERCALLBACKFUNC Callback,
+    PVOID Parameter,
+    DWORD DueTime,
+    DWORD Period,
+    ULONG Flags
 );
 
+NTSTATUS
+STDCALL
+RtlCreateTimerQueue(PHANDLE TimerQueue);
+
+NTSTATUS
+STDCALL
+RtlDeleteTimer(
+    HANDLE TimerQueue,
+    HANDLE Timer,
+    HANDLE CompletionEvent
+);
+
+NTSTATUS
+STDCALL
+RtlUpdateTimer(
+    HANDLE TimerQueue,
+    HANDLE Timer,
+    ULONG DueTime,
+    ULONG Period
+);
+
+NTSTATUS
+STDCALL
+RtlDeleteTimerQueueEx(
+    HANDLE TimerQueue,
+    HANDLE CompletionEvent
+);
+
+NTSTATUS
+STDCALL
+RtlDeleteTimerQueue(HANDLE TimerQueue);
+
+/*
+ * Debug Functions 
+ */
+ULONG
+CDECL
+DbgPrint(
+    IN PCH  Format,
+    IN ...
+);
+
+VOID
+STDCALL
+DbgBreakPoint(VOID);
+
+/*
+ * Handle Table Functions
+ */
+PRTL_HANDLE
+STDCALL
+RtlAllocateHandle (
+    IN PRTL_HANDLE_TABLE       HandleTable,
+    IN OUT     PULONG                  Index
+);
+
+VOID
+STDCALL
+RtlDestroyHandleTable (IN      PRTL_HANDLE_TABLE       HandleTable);
+
+BOOLEAN
+STDCALL
+RtlFreeHandle (
+    IN PRTL_HANDLE_TABLE       HandleTable,
+    IN PRTL_HANDLE             Handle
+);
+
+VOID
+STDCALL
+RtlInitializeHandleTable (
+    IN ULONG                   TableSize,
+    IN ULONG                   HandleSize,
+    IN PRTL_HANDLE_TABLE       HandleTable
+);
+
+BOOLEAN
+STDCALL
+RtlIsValidHandle (
+    IN PRTL_HANDLE_TABLE       HandleTable,
+    IN PRTL_HANDLE             Handle
+);
+
+BOOLEAN
+STDCALL
+RtlIsValidIndexHandle (
+    IN PRTL_HANDLE_TABLE       HandleTable,
+    IN OUT     PRTL_HANDLE             *Handle,
+    IN ULONG                   Index
+);
+    
+/*
+ * PE Functions
+ */
 NTSTATUS
 STDCALL
 RtlFindMessage(
@@ -1388,6 +1571,10 @@ RtlFindMessage(
     IN ULONG MessageId,
     OUT PRTL_MESSAGE_RESOURCE_ENTRY *MessageResourceEntry
 );
+
+ULONG 
+STDCALL
+RtlGetNtGlobalFlags(VOID);
               
 PVOID
 STDCALL
index d7c2768..b929e5e 100644 (file)
 #define RTL_RANGE_SHARED      0x01
 #define RTL_RANGE_CONFLICT    0x02
 
+/* FIXME: Rename these */
+#define PDI_MODULES     0x01   /* The loaded modules of the process */
+#define PDI_BACKTRACE   0x02   /* The heap stack back traces */
+#define PDI_HEAPS       0x04   /* The heaps of the process */
+#define PDI_HEAP_TAGS   0x08   /* The heap tags */
+#define PDI_HEAP_BLOCKS 0x10   /* The heap blocks */
+#define PDI_LOCKS       0x20   /* The locks created by the process */
 /* ENUMERATIONS **************************************************************/
 
 typedef enum 
@@ -53,6 +60,18 @@ typedef enum
     ExceptionCollidedUnwind
 } EXCEPTION_DISPOSITION;
 
+typedef enum
+{
+    INVALID_PATH = 0,
+    UNC_PATH,              /* "//foo" */
+    ABSOLUTE_DRIVE_PATH,   /* "c:/foo" */
+    RELATIVE_DRIVE_PATH,   /* "c:foo" */
+    ABSOLUTE_PATH,         /* "/foo" */
+    RELATIVE_PATH,         /* "foo" */
+    DEVICE_PATH,           /* "//./foo" */
+    UNC_DOT_PATH           /* "//." */
+} DOS_PATHNAME_TYPE;
+
 /* FUNCTION TYPES ************************************************************/
 typedef NTSTATUS
 (*PHEAP_ENUMERATION_ROUTINE)(
@@ -68,6 +87,10 @@ typedef EXCEPTION_DISPOSITION
     PVOID
 );
 
+typedef LONG (STDCALL *PRTL_VECTORED_EXCEPTION_HANDLER)(
+    PEXCEPTION_POINTERS ExceptionPointers
+);
+
 typedef DWORD (STDCALL *PTHREAD_START_ROUTINE)(
     LPVOID Parameter
 );
@@ -91,6 +114,98 @@ typedef struct _ACE
     ACCESS_MASK AccessMask;
 } ACE, *PACE;
 
+/* FIXME: Review definitions and give these guys a better name */
+typedef struct _DEBUG_BUFFER
+{
+    HANDLE SectionHandle;
+    PVOID SectionBase;
+    PVOID RemoteSectionBase;
+    ULONG SectionBaseDelta;
+    HANDLE EventPairHandle;
+    ULONG Unknown[2];
+    HANDLE RemoteThreadHandle;
+    ULONG InfoClassMask;
+    ULONG SizeOfInfo;
+    ULONG AllocatedSize;
+    ULONG SectionSize;
+    PVOID ModuleInformation;
+    PVOID BackTraceInformation;
+    PVOID HeapInformation;
+    PVOID LockInformation;
+    PVOID Reserved[8];
+} DEBUG_BUFFER, *PDEBUG_BUFFER;
+typedef struct _DEBUG_MODULE_INFORMATION
+{
+    ULONG Reserved[2];
+    PVOID Base;
+    ULONG Size;
+    ULONG Flags;
+    USHORT Index;
+    USHORT Unknown;
+    USHORT LoadCount;
+    USHORT ModuleNameOffset;
+    CHAR ImageName[256];
+} DEBUG_MODULE_INFORMATION, *PDEBUG_MODULE_INFORMATION;
+typedef struct _DEBUG_HEAP_INFORMATION
+{
+    PVOID Base;
+    ULONG Flags;
+    USHORT Granularity;
+    USHORT Unknown;
+    ULONG Allocated;
+    ULONG Committed;
+    ULONG TagCount;
+    ULONG BlockCount;
+    ULONG Reserved[7];
+    PVOID Tags;
+    PVOID Blocks;
+} DEBUG_HEAP_INFORMATION, *PDEBUG_HEAP_INFORMATION;
+typedef struct _DEBUG_LOCK_INFORMATION 
+{
+    PVOID Address;
+    USHORT Type;
+    USHORT CreatorBackTraceIndex;
+    ULONG OwnerThreadId;
+    ULONG ActiveCount;
+    ULONG ContentionCount;
+    ULONG EntryCount;
+    ULONG RecursionCount;
+    ULONG NumberOfSharedWaiters;
+    ULONG NumberOfExclusiveWaiters;
+} DEBUG_LOCK_INFORMATION, *PDEBUG_LOCK_INFORMATION;
+typedef struct _RTL_HANDLE
+{
+     struct _RTL_HANDLE *Next; /* pointer to next free handle */
+} RTL_HANDLE, *PRTL_HANDLE;
+
+typedef struct _RTL_HANDLE_TABLE
+{
+     ULONG TableSize;          /* maximum number of handles */
+     ULONG HandleSize;         /* size of handle in bytes */
+     PRTL_HANDLE Handles;              /* pointer to handle array */
+     PRTL_HANDLE Limit;                /* limit of pointers */
+     PRTL_HANDLE FirstFree;    /* pointer to first free handle */
+     PRTL_HANDLE LastUsed;     /* pointer to last allocated handle */
+} RTL_HANDLE_TABLE, *PRTL_HANDLE_TABLE;
+#ifdef READY_FOR_NEW_NTDLL
+typedef struct _LOCK_INFORMATION
+{
+    ULONG LockCount;
+    DEBUG_LOCK_INFORMATION LockEntry[1];
+} LOCK_INFORMATION, *PLOCK_INFORMATION;
+typedef struct _HEAP_INFORMATION
+{
+    ULONG HeapCount;
+    DEBUG_HEAP_INFORMATION HeapEntry[1];
+} HEAP_INFORMATION, *PHEAP_INFORMATION;
+typedef struct _MODULE_INFORMATION
+{
+    ULONG ModuleCount;
+    DEBUG_MODULE_INFORMATION ModuleEntry[1];
+} MODULE_INFORMATION, *PMODULE_INFORMATION;
+/* END REVIEW AREA */
+#endif
+
 typedef struct _EXCEPTION_REGISTRATION 
 {
     struct _EXCEPTION_REGISTRATION*    prev;
@@ -138,6 +253,19 @@ typedef BOOLEAN
     PRTL_RANGE Range
 );
 
+typedef struct _RTL_RESOURCE
+{
+    RTL_CRITICAL_SECTION Lock;
+    HANDLE SharedSemaphore;
+    ULONG SharedWaiters;
+    HANDLE ExclusiveSemaphore;
+    ULONG ExclusiveWaiters;
+    LONG NumberActive;
+    HANDLE OwningThread;
+    ULONG TimeoutBoost; /* ?? */    
+    PVOID DebugInfo; /* ?? */
+} RTL_RESOURCE, *PRTL_RESOURCE;
+
 typedef struct _RANGE_LIST_ITERATOR
 {
   PLIST_ENTRY RangeListHead;
diff --git a/reactos/include/ndk/umfuncs.h b/reactos/include/ndk/umfuncs.h
new file mode 100644 (file)
index 0000000..35041a2
--- /dev/null
@@ -0,0 +1,218 @@
+/*
+ * PROJECT:         ReactOS Native Headers
+ * FILE:            include/ndk/umfuncs.h
+ * PURPOSE:         Prototypes for NT Library Functions
+ * PROGRAMMER:      Alex Ionescu (alex@relsoft.net)
+ */
+#ifndef _UMFUNCS_H
+#define _UMFUNCS_H
+
+/* DEPENDENCIES **************************************************************/
+#include "ldrtypes.h"
+#include "lpctypes.h"
+#include <csrss/csrss.h> /* FIXME: Temporary */
+
+/* PROTOTYPES ****************************************************************/
+
+/*
+ * CSR Functions
+ */
+NTSTATUS 
+STDCALL 
+CsrClientConnectToServer(VOID);
+
+NTSTATUS 
+STDCALL 
+CsrClientCallServer(
+    PCSRSS_API_REQUEST Request,
+    PCSRSS_API_REPLY Reply OPTIONAL,
+    ULONG Length,
+    ULONG ReplyLength
+);
+
+NTSTATUS 
+STDCALL 
+CsrIdentifyAlertableThread(VOID);
+
+NTSTATUS 
+STDCALL 
+CsrNewThread(VOID);
+
+NTSTATUS 
+STDCALL 
+CsrSetPriorityClass(
+    HANDLE Process,
+    PULONG PriorityClass
+);
+
+VOID 
+STDCALL 
+CsrProbeForRead(
+    IN CONST PVOID Address,
+    IN ULONG Length,
+    IN ULONG Alignment
+);
+
+VOID 
+STDCALL 
+CsrProbeForWrite(
+    IN CONST PVOID Address,
+    IN ULONG Length,
+    IN ULONG Alignment
+);
+
+NTSTATUS 
+STDCALL
+CsrCaptureParameterBuffer(
+    PVOID ParameterBuffer,
+    ULONG ParameterBufferSize,
+    PVOID* ClientAddress,
+    PVOID* ServerAddress
+);
+
+NTSTATUS 
+STDCALL
+CsrReleaseParameterBuffer(PVOID ClientAddress);
+
+/*
+ * Debug Functions 
+ */
+ULONG
+CDECL
+DbgPrint(
+    IN PCH  Format,
+    IN ...
+);
+
+VOID
+STDCALL
+DbgBreakPoint(VOID);
+
+NTSTATUS
+STDCALL
+DbgSsInitialize(
+    HANDLE ReplyPort,
+    ULONG Unknown1,
+    ULONG Unknown2,
+    ULONG Unknown3
+);
+
+NTSTATUS
+STDCALL
+DbgUiConnectToDbg(VOID);
+
+NTSTATUS
+STDCALL
+DbgUiContinue(
+    PCLIENT_ID ClientId,
+    ULONG ContinueStatus
+);
+
+NTSTATUS
+STDCALL
+DbgUiWaitStateChange(
+    ULONG Unknown1,
+    ULONG Unknown2
+);
+
+NTSTATUS 
+STDCALL 
+DbgUiRemoteBreakin(VOID);
+
+NTSTATUS 
+STDCALL 
+DbgUiIssueRemoteBreakin(HANDLE Process);
+
+/*
+ * Loader Functions
+ */
+NTSTATUS 
+STDCALL
+LdrDisableThreadCalloutsForDll(IN PVOID BaseAddress);
+
+NTSTATUS 
+STDCALL
+LdrGetDllHandle(
+    IN PWCHAR Path OPTIONAL,
+    IN ULONG Unknown2,
+    IN PUNICODE_STRING DllName,
+    OUT PVOID *BaseAddress
+);
+
+NTSTATUS 
+STDCALL
+LdrFindEntryForAddress(
+    IN PVOID Address,
+    OUT PLDR_DATA_TABLE_ENTRY *Module
+);
+
+NTSTATUS 
+STDCALL
+LdrGetProcedureAddress(
+    IN PVOID BaseAddress,
+    IN PANSI_STRING Name,
+    IN ULONG Ordinal,
+    OUT PVOID *ProcedureAddress
+);
+
+VOID 
+STDCALL
+LdrInitializeThunk(
+    ULONG Unknown1,
+    ULONG Unknown2,
+    ULONG Unknown3,
+    ULONG Unknown4
+);
+
+NTSTATUS 
+STDCALL
+LdrLoadDll(
+    IN PWSTR SearchPath OPTIONAL,
+    IN ULONG LoadFlags,
+    IN PUNICODE_STRING Name,
+    OUT PVOID *BaseAddress OPTIONAL
+);
+
+PIMAGE_BASE_RELOCATION 
+STDCALL
+LdrProcessRelocationBlock(
+    IN PVOID Address,
+    IN USHORT Count,
+    IN PUSHORT TypeOffset,
+    IN ULONG_PTR Delta
+);
+
+NTSTATUS 
+STDCALL
+LdrQueryImageFileExecutionOptions(
+    IN PUNICODE_STRING SubKey,
+    IN PCWSTR ValueName,
+    IN ULONG ValueSize,
+    OUT PVOID Buffer,
+    IN ULONG BufferSize,
+    OUT PULONG RetunedLength OPTIONAL
+);
+
+NTSTATUS 
+STDCALL
+LdrShutdownProcess(VOID);
+
+NTSTATUS 
+STDCALL
+LdrShutdownThread(VOID);
+        
+NTSTATUS 
+STDCALL
+LdrUnloadDll(IN PVOID BaseAddress);
+           
+NTSTATUS 
+STDCALL
+LdrVerifyImageMatchesChecksum(
+    IN HANDLE FileHandle,
+    ULONG Unknown1,
+    ULONG Unknown2,
+    ULONG Unknown3
+);
+
+#endif
+/* EOF */
index ca6bba1..2185e7f 100755 (executable)
@@ -23,7 +23,6 @@
 
 /* FIXME: Clean this sh*t up */
 #include <ntdll/base.h>
-#include <ntdll/rtl.h>
 #include <ntdll/dbg.h>
 #include <ntdll/csr.h>
 #include <ntdll/ldr.h>
index dc2ca45..9559282 100644 (file)
 #define NTOS_MODE_USER
 #include <ndk/ntndk.h>
 
+/* NTDLL Headers FIXME: These will be gone imminently */
+#include <ntdll/ntdll.h>
+#include <ntdll/ldr.h>
+#include <ntdll/csr.h>
+
+/* Internal NTDLL */
+#include "ntdllp.h"
+
+/* CSRSS Header */
+#include <csrss/csrss.h>
+
 /* Helper Macros */
 #include <reactos/helper.h>
 
-/* NTDLL Public Headers. FIXME: Combine/clean these after NDK */
-#include <ntdll/csr.h>
-#include <ntdll/rtl.h>
-#include <ntdll/ldr.h>
-#include <ntdll/ntdll.h>
-
 /* EOF */
index 5a2b823..5adf245 100644 (file)
@@ -14,7 +14,6 @@
 #define NTOS_MODE_USER
 #include <ndk/ntndk.h>
 #include <ntdll/csr.h>
-#include <ntdll/rtl.h>
 #include <ntdll/ldr.h>
 #include <rosrtl/string.h>
 #include <sm/helper.h>