Moved all the content of the DDK files ntdef.h and ntddk.h to
winternl.h.

diff --git a/include/winternl.h b/include/winternl.h
index 7e7f9a7..4c32a7f 100644
--- a/include/winternl.h
+++ b/include/winternl.h
@@ -22,6 +22,8 @@
 #define __WINE_WINTERNAL_H
 
 #include "windef.h"
+#include "winnt.h"
+#include "winreg.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -39,8 +41,9 @@
 } PEB, *PPEB;
 
 /***********************************************************************
- * PEB data structure
+ * TEB data structure
  */
+#if 0
 typedef struct _TEB {
   BYTE Reserved1[1952];
   PVOID Reserved2[412];
@@ -51,15 +54,19 @@
   PVOID Reserved5[4];
   PVOID TlsExpansionSlots;
 } TEB, *PTEB;
+#endif
 
 /**********************************************************************
- * Various types and data structures
+ * Fundamental types and data structures
  */
 
 typedef LONG NTSTATUS;
 
 typedef CONST char *PCSZ;
 
+typedef short CSHORT;
+typedef CSHORT *PCSHORT;
+
 typedef struct _STRING {
   USHORT Length;
   USHORT MaximumLength;
@@ -68,39 +75,189 @@
 
 typedef STRING ANSI_STRING;
 typedef PSTRING PANSI_STRING;
-typedef PSTRING PCANSI_STRING;
+typedef const STRING *PCANSI_STRING;
 
 typedef STRING OEM_STRING;
 typedef PSTRING POEM_STRING;
 typedef const STRING *PCOEM_STRING;
 
 typedef struct _UNICODE_STRING {
-  USHORT Length;
-  USHORT MaximumLength;
+  USHORT Length;        /* bytes */
+  USHORT MaximumLength; /* bytes */
   PWSTR  Buffer;
 } UNICODE_STRING, *PUNICODE_STRING;
 
 typedef const UNICODE_STRING *PCUNICODE_STRING;
 
-typedef struct _OBJECT_ATTRIBUTES {
-  ULONG Length;
-  HANDLE RootDirectory;
-  PUNICODE_STRING ObjectName;
-  ULONG Attributes;
-  PVOID SecurityDescriptor;
-  PVOID SecurityQualityOfService;
-} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
+/***********************************************************************
+ * Enums
+ */
 
-typedef struct _IO_STATUS_BLOCK {
-  union {
-    NTSTATUS Status;
-    PVOID Pointer;
-  } DUMMYUNIONNAME;
+typedef enum _FILE_INFORMATION_CLASS {
+    FileDirectoryInformation = 1,
+    FileFullDirectoryInformation,
+    FileBothDirectoryInformation,
+    FileBasicInformation,
+    FileStandardInformation,
+    FileInternalInformation,
+    FileEaInformation,
+    FileAccessInformation,
+    FileNameInformation,
+    FileRenameInformation,
+    FileLinkInformation,
+    FileNamesInformation,
+    FileDispositionInformation,
+    FilePositionInformation,
+    FileFullEaInformation,
+    FileModeInformation,
+    FileAlignmentInformation,
+    FileAllInformation,
+    FileAllocationInformation,
+    FileEndOfFileInformation,
+    FileAlternateNameInformation,
+    FileStreamInformation,
+    FilePipeInformation,
+    FilePipeLocalInformation,
+    FilePipeRemoteInformation,
+    FileMailslotQueryInformation,
+    FileMailslotSetInformation,
+    FileCompressionInformation,
+    FileObjectIdInformation,
+    FileCompletionInformation,
+    FileMoveClusterInformation,
+    FileQuotaInformation,
+    FileReparsePointInformation,
+    FileNetworkOpenInformation,
+    FileAttributeTagInformation,
+    FileTrackingInformation,
+    FileMaximumInformation
+} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
 
-  ULONG_PTR Information;
-} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
+typedef enum _FSINFOCLASS {
+    FileFsVolumeInformation = 1,
+    FileFsLabelInformation,
+    FileFsSizeInformation,
+    FileFsDeviceInformation,
+    FileFsAttributeInformation,
+    FileFsControlInformation,
+    FileFsFullSizeInformation,
+    FileFsObjectIdInformation,
+    FileFsMaximumInformation
+} FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
 
-typedef void (WINAPI * PIO_APC_ROUTINE)(PVOID,PIO_STATUS_BLOCK,ULONG);
+typedef enum _KEY_INFORMATION_CLASS {
+    KeyBasicInformation,
+    KeyNodeInformation,
+    KeyFullInformation
+} KEY_INFORMATION_CLASS;
+
+typedef enum _KEY_VALUE_INFORMATION_CLASS {
+    KeyValueBasicInformation,
+    KeyValueFullInformation,
+    KeyValuePartialInformation,
+    KeyValueFullInformationAlign64,
+    KeyValuePartialInformationAlign64
+} KEY_VALUE_INFORMATION_CLASS;
+
+typedef enum _OBJECT_INFORMATION_CLASS {
+    DunnoTheConstants1 /* FIXME */
+} OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS;
+
+typedef enum _PROCESSINFOCLASS {
+    ProcessBasicInformation = 0,
+    ProcessQuotaLimits = 1,
+    ProcessIoCounters = 2,
+    ProcessVmCounters = 3,
+    ProcessTimes = 4,
+    ProcessBasePriority = 5,
+    ProcessRaisePriority = 6,
+    ProcessDebugPort = 7,
+    ProcessExceptionPort = 8,
+    ProcessAccessToken = 9,
+    ProcessLdtInformation = 10,
+    ProcessLdtSize = 11,
+    ProcessDefaultHardErrorMode = 12,
+    ProcessIoPortHandlers = 13,
+    ProcessPooledUsageAndLimits = 14,
+    ProcessWorkingSetWatch = 15,
+    ProcessUserModeIOPL = 16,
+    ProcessEnableAlignmentFaultFixup = 17,
+    ProcessPriorityClass = 18,
+    ProcessWx86Information = 19,
+    ProcessHandleCount = 20,
+    ProcessAffinityMask = 21,
+    ProcessPriorityBoost = 22,
+    ProcessDeviceMap = 23,
+    ProcessSessionInformation = 24,
+    ProcessForegroundInformation = 25,
+    ProcessWow64Information = 26,
+    MaxProcessInfoClass
+} PROCESSINFOCLASS;
+
+typedef enum _SECTION_INHERIT {
+    ViewShare = 1,
+    ViewUnmap = 2
+} SECTION_INHERIT;
+
+typedef enum SYSTEM_INFORMATION_CLASS {
+    SystemBasicInformation = 0,
+    Unknown1,
+    SystemPerformanceInformation = 2,
+    SystemTimeOfDayInformation = 3, /* was SystemTimeInformation */
+    Unknown4,
+    SystemProcessInformation = 5,
+    Unknown6,
+    Unknown7,
+    SystemProcessorPerformanceInformation = 8,
+    Unknown9,
+    Unknown10,
+    SystemDriverInformation,
+    Unknown12,
+    Unknown13,
+    Unknown14,
+    Unknown15,
+    SystemHandleList,
+    Unknown17,
+    Unknown18,
+    Unknown19,
+    Unknown20,
+    SystemCacheInformation,
+    Unknown22,
+    SystemInterruptInformation = 23,
+    SystemExceptionInformation = 33,
+    SystemRegistryQuotaInformation = 37,
+    SystemLookasideInformation = 45
+} SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS;
+
+typedef enum _TIMER_TYPE {
+    NotificationTimer,
+    SynchronizationTimer
+} TIMER_TYPE;
+
+typedef enum _THREADINFOCLASS {
+    ThreadBasicInformation,
+    ThreadTimes,
+    ThreadPriority,
+    ThreadBasePriority,
+    ThreadAffinityMask,
+    ThreadImpersonationToken,
+    ThreadDescriptorTableEntry,
+    ThreadEnableAlignmentFaultFixup,
+    ThreadEventPair_Reusable,
+    ThreadQuerySetWin32StartAddress,
+    ThreadZeroTlsCell,
+    ThreadPerformanceCount,
+    ThreadAmILastThread,
+    ThreadIdealProcessor,
+    ThreadPriorityBoost,
+    ThreadSetTlsArrayAddress,
+    ThreadIsIoPending,
+    MaxThreadInfoClass
+} THREADINFOCLASS;
+
+typedef enum _WINSTATIONINFOCLASS {
+    WinStationInformation = 8
+} WINSTATIONINFOCLASS;
 
 /***********************************************************************
  * IA64 specific types and data structures
@@ -138,58 +295,264 @@
 #endif /* defined(__ia64__) */
 
 /***********************************************************************
- * Various types and data structures
+ * Types and data structures
  */
 
+/* This is used by NtQuerySystemInformation */
+/* FIXME: Isn't THREAD_INFO and THREADINFO the same structure? */
+typedef struct {
+    FILETIME ftCreationTime;
+    DWORD dwUnknown1;
+    DWORD dwStartAddress;
+    DWORD dwOwningPID;
+    DWORD dwThreadID;
+    DWORD dwCurrentPriority;
+    DWORD dwBasePriority;
+    DWORD dwContextSwitches;
+    DWORD dwThreadState;
+    DWORD dwWaitReason;
+    DWORD dwUnknown2[5];
+} THREADINFO, *PTHREADINFO;
+
+/* FIXME: Isn't THREAD_INFO and THREADINFO the same structure? */
+typedef struct _THREAD_INFO{
+    DWORD Unknown1[6];
+    DWORD ThreadID;
+    DWORD Unknown2[3];
+    DWORD Status;
+    DWORD WaitReason;
+    DWORD Unknown3[4];
+} THREAD_INFO, PTHREAD_INFO;
+
+/***********************************************************************
+ * Types and data structures
+ */
+
+typedef struct _IO_STATUS_BLOCK {
+  union {
+    NTSTATUS Status;
+    PVOID Pointer;
+  } DUMMYUNIONNAME;
+
+  ULONG_PTR Information;
+} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
+
+typedef void (WINAPI * PIO_APC_ROUTINE)(PVOID,PIO_STATUS_BLOCK,ULONG);
+
+typedef struct _KEY_BASIC_INFORMATION {
+    LARGE_INTEGER LastWriteTime;
+    ULONG         TitleIndex;
+    ULONG         NameLength;
+    WCHAR         Name[1];
+} KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
+
+typedef struct _KEY_NODE_INFORMATION
+{
+    LARGE_INTEGER LastWriteTime;
+    ULONG         TitleIndex;
+    ULONG         ClassOffset;
+    ULONG         ClassLength;
+    ULONG         NameLength;
+    WCHAR         Name[1];
+   /* Class[1]; */
+} KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
+
+typedef struct _KEY_FULL_INFORMATION
+{
+    LARGE_INTEGER LastWriteTime;
+    ULONG         TitleIndex;
+    ULONG         ClassOffset;
+    ULONG         ClassLength;
+    ULONG         SubKeys;
+    ULONG         MaxNameLen;
+    ULONG         MaxClassLen;
+    ULONG         Values;
+    ULONG         MaxValueNameLen;
+    ULONG         MaxValueDataLen;
+    WCHAR         Class[1];
+} KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
+
+typedef struct _KEY_VALUE_ENTRY
+{
+    PUNICODE_STRING ValueName;
+    ULONG           DataLength;
+    ULONG           DataOffset;
+    ULONG           Type;
+} KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
+
+typedef struct _KEY_VALUE_BASIC_INFORMATION {
+    ULONG TitleIndex;
+    ULONG Type;
+    ULONG NameLength;
+    WCHAR Name[1];
+} KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
+
+typedef struct _KEY_VALUE_FULL_INFORMATION {
+    ULONG TitleIndex;
+    ULONG Type;
+    ULONG DataOffset;
+    ULONG DataLength;
+    ULONG NameLength;
+    WCHAR Name[1];
+} KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
+
+typedef struct _KEY_VALUE_PARTIAL_INFORMATION {
+    ULONG TitleIndex;
+    ULONG Type;
+    ULONG DataLength;
+    UCHAR Data[1];
+} KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
+
+typedef struct _OBJECT_ATTRIBUTES {
+  ULONG Length;
+  HANDLE RootDirectory;
+  PUNICODE_STRING ObjectName;
+  ULONG Attributes;
+  PVOID SecurityDescriptor;       /* type SECURITY_DESCRIPTOR */
+  PVOID SecurityQualityOfService; /* type SECURITY_QUALITY_OF_SERVICE */
+} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
+
 typedef struct _PROCESS_BASIC_INFORMATION {
+#ifdef __WINE__
+    DWORD ExitStatus;
+    DWORD PebBaseAddress;
+    DWORD AffinityMask;
+    DWORD BasePriority;
+    ULONG UniqueProcessId;
+    ULONG InheritedFromUniqueProcessId;
+#else
     PVOID Reserved1;
     PPEB PebBaseAddress;
     PVOID Reserved2[2];
     ULONG_PTR UniqueProcessId;
     PVOID Reserved3;
+#endif
 } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
 
-typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION {
-    LARGE_INTEGER IdleTime;
-    LARGE_INTEGER KernelTime;
-    LARGE_INTEGER UserTime;
-    LARGE_INTEGER Reserved1[2];
-    ULONG Reserved2;
-} SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
+typedef struct _PROCESS_INFO {
+    DWORD    Offset;             /* 00 offset to next PROCESS_INFO ok*/
+    DWORD    ThreadCount;        /* 04 number of ThreadInfo member ok */
+    DWORD    Unknown1[6];
+    FILETIME CreationTime;       /* 20 */
+    DWORD    Unknown2[5];
+    PWCHAR   ProcessName;        /* 3c ok */
+    DWORD    BasePriority;
+    DWORD    ProcessID;          /* 44 ok*/
+    DWORD    ParentProcessID;
+    DWORD    HandleCount;
+    DWORD    Unknown3[2];        /* 50 */
+    ULONG    PeakVirtualSize;
+    ULONG    VirtualSize;
+    ULONG    PageFaultCount;
+    ULONG    PeakWorkingSetSize;
+    ULONG    WorkingSetSize;
+    ULONG    QuotaPeakPagedPoolUsage;
+    ULONG    QuotaPagedPoolUsage;
+    ULONG    QuotaPeakNonPagedPoolUsage;
+    ULONG    QuotaNonPagedPoolUsage;
+    ULONG    PagefileUsage;
+    ULONG    PeakPagefileUsage;
+    DWORD    PrivateBytes;
+    DWORD    Unknown6[4];
+    THREAD_INFO ati[ANYSIZE_ARRAY]; /* 94 size=0x40*/
+} PROCESS_INFO, PPROCESS_INFO;
 
-typedef struct _SYSTEM_PROCESS_INFORMATION {
-    ULONG NextEntryOffset;
-    BYTE Reserved1[52];
-    PVOID Reserved2[3];
-    HANDLE UniqueProcessId;
-    PVOID Reserved3;
-    ULONG HandleCount;
-    BYTE Reserved4[4];
-    PVOID Reserved5[11];
-    SIZE_T PeakPagefileUsage;
-    SIZE_T PrivatePageCount;
-    LARGE_INTEGER Reserved6[6];
-} SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
+typedef struct _RTL_HEAP_DEFINITION {
+    ULONG Length; /* = sizeof(RTL_HEAP_DEFINITION) */
 
-typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {
-    ULONG RegistryQuotaAllowed;
-    ULONG RegistryQuotaUsed;
-    PVOID Reserved1;
-} SYSTEM_REGISTRY_QUOTA_INFORMATION, *PSYSTEM_REGISTRY_QUOTA_INFORMATION;
+    ULONG Unknown[11];
+} RTL_HEAP_DEFINITION, *PRTL_HEAP_DEFINITION;
 
+typedef struct tagRTL_BITMAP {
+    ULONG  SizeOfBitMap; /* Number of bits in the bitmap */
+    LPBYTE BitMapBuffer; /* Bitmap data, assumed sized to a DWORD boundary */
+} RTL_BITMAP, *PRTL_BITMAP;
+
+typedef const RTL_BITMAP *PCRTL_BITMAP;
+
+typedef struct tagRTL_BITMAP_RUN {
+    ULONG StartOfRun; /* Bit position at which run starts - FIXME: Name? */
+    ULONG SizeOfRun;  /* Size of the run in bits - FIXME: Name? */
+} RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
+
+typedef const RTL_BITMAP_RUN *PCRTL_BITMAP_RUN;
+
+typedef struct _RTL_RWLOCK {
+    RTL_CRITICAL_SECTION rtlCS;
+
+    HANDLE hSharedReleaseSemaphore;
+    UINT   uSharedWaiters;
+
+    HANDLE hExclusiveReleaseSemaphore;
+    UINT   uExclusiveWaiters;
+
+    INT    iNumberActive;
+    HANDLE hOwningThreadId;
+    DWORD  dwTimeoutBoost;
+    PVOID  pDebugInfo;
+} RTL_RWLOCK, *LPRTL_RWLOCK;
+
+/* System Information Class 0x00 */
 typedef struct _SYSTEM_BASIC_INFORMATION {
+#ifdef __WINE__
+    DWORD dwUnknown1;
+    ULONG uKeMaximumIncrement;
+    ULONG uPageSize;
+    ULONG uMmNumberOfPhysicalPages;
+    ULONG uMmLowestPhysicalPage;
+    ULONG uMmHighestPhysicalPage;
+    ULONG uAllocationGranularity;
+    PVOID pLowestUserAddress;
+    PVOID pMmHighestUserAddress;
+    ULONG uKeActiveProcessors;
+    BYTE bKeNumberProcessors;
+    BYTE bUnknown2;
+    WORD wUnknown3;
+#else
     BYTE Reserved1[24];
     PVOID Reserved2[4];
     CCHAR NumberOfProcessors;
+#endif
 } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
 
-typedef struct _SYSTEM_TIMEOFDAY_INFORMATION {
-    BYTE Reserved1[48];
-} SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION;
+/* System Information Class 0x15 */
+typedef struct {
+    ULONG CurrentSize;
+    ULONG PeakSize;
+    ULONG PageFaultCount;
+    ULONG MinimumWorkingSet;
+    ULONG MaximumWorkingSet;
+    ULONG unused[4];
+} SYSTEM_CACHE_INFORMATION;
 
-typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
-    BYTE Reserved1[312];
-} SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
+typedef struct _SYSTEM_CONFIGURATION_INFO {
+    union {
+        ULONG	OemId;
+        struct {
+	    WORD ProcessorArchitecture;
+	    WORD Reserved;
+	} tag1;
+    } tag2;
+    ULONG PageSize;
+    PVOID MinimumApplicationAddress;
+    PVOID MaximumApplicationAddress;
+    ULONG ActiveProcessorMask;
+    ULONG NumberOfProcessors;
+    ULONG ProcessorType;
+    ULONG AllocationGranularity;
+    WORD  ProcessorLevel;
+    WORD  ProcessorRevision;
+} SYSTEM_CONFIGURATION_INFO, *PSYSTEM_CONFIGURATION_INFO;
+
+/* System Information Class 0x0b */
+typedef struct {
+    PVOID pvAddress;
+    DWORD dwUnknown1;
+    DWORD dwUnknown2;
+    DWORD dwEntryIndex;
+    DWORD dwUnknown3;
+    char szName[MAX_PATH + 1];
+} SYSTEM_DRIVER_INFORMATION;
 
 typedef struct _SYSTEM_EXCEPTION_INFORMATION {
     BYTE Reserved1[16];
@@ -203,104 +566,487 @@
     BYTE Reserved1[24];
 } SYSTEM_INTERRUPT_INFORMATION, *PSYSTEM_INTERRUPT_INFORMATION;
 
+/* System Information Class 0x10 */
+typedef struct {
+    USHORT dwPID;
+    USHORT dwCreatorBackTraceIndex;
+    BYTE bObjectType;
+    BYTE bHandleAttributes;
+    USHORT usHandleOffset;
+    DWORD dwKeObject;
+    ULONG ulGrantedAccess;
+} HANDLEINFO, *PHANDLEINFO; /* FIXME: SYSTEM_HANDLE_INFORMATION? */
 
-/***********************************************************************
- * Enums
- */
+typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
+    BYTE Reserved1[312];
+} SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
 
-typedef enum _FILE_INFORMATION_CLASS {
-    FileDirectoryInformation = 1
-} FILE_INFORMATION_CLASS;
-
-typedef enum _PROCESSINFOCLASS {
-    ProcessBasicInformation = 0,
-    ProcessWow64Information = 26
-} PROCESSINFOCLASS;
-
-typedef enum _THREADINFOCLASS {
-    ThreadIsIoPending = 16
-} THREADINFOCLASS;
-
-typedef enum _SYSTEM_INFORMATION_CLASS {
-    SystemBasicInformation = 0,
-    SystemPerformanceInformation = 2,
-    SystemTimeOfDayInformation = 3,
-    SystemProcessInformation = 5,
-    SystemProcessorPerformanceInformation = 8,
-    SystemInterruptInformation = 23,
-    SystemExceptionInformation = 33,
-    SystemRegistryQuotaInformation = 37,
-    SystemLookasideInformation = 45
-} SYSTEM_INFORMATION_CLASS;
-
-#if (_WIN32_WINNT >= 0x0501)
-#define INTERNAL_TS_ACTIVE_CONSOLE_ID ( *((volatile ULONG*)(0x7ffe02d8)) )
-#endif /* (_WIN32_WINNT >= 0x0501) */
-
-/***********************************************************************
- * Macro expensions
- */
-
-#define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length))
-#define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
-#define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length))
-
-/***********************************************************************
- * Function declarations
- */
-
-NTSTATUS WINAPI NtClose(HANDLE);
-NTSTATUS WINAPI NtCreateFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,PLARGE_INTEGER,ULONG,ULONG,ULONG,ULONG,PVOID,ULONG);
-NTSTATUS WINAPI NtOpenFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG);
-NTSTATUS WINAPI NtDeviceIoControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
-NTSTATUS WINAPI NtWaitForSingleObject(HANDLE,BOOLEAN,PLARGE_INTEGER);
-BOOLEAN  WINAPI RtlIsNameLegalDOS8Dot3(PUNICODE_STRING,POEM_STRING,PBOOLEAN);
-ULONG    WINAPI RtlNtStatusToDosError(NTSTATUS);
-NTSTATUS WINAPI NtQueryInformationProcess(HANDLE,PROCESSINFOCLASS,PVOID,ULONG,PULONG);
-NTSTATUS WINAPI NtQueryInformationThread(HANDLE,THREADINFOCLASS,PVOID,ULONG,PULONG);
-NTSTATUS WINAPI NtQuerySystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG,PULONG);
-NTSTATUS WINAPI NtQuerySystemTime(PLARGE_INTEGER);
-NTSTATUS WINAPI RtlLocalTimeToSystemTime(PLARGE_INTEGER,PLARGE_INTEGER);
-BOOLEAN  WINAPI RtlTimeToSecondsSince1970(PLARGE_INTEGER,PULONG);
-void     WINAPI RtlFreeAnsiString(PANSI_STRING);
-void     WINAPI RtlFreeUnicodeString(PUNICODE_STRING);
-void     WINAPI RtlFreeOemString(POEM_STRING);
-void     WINAPI RtlInitString(PSTRING,PCSZ);
-void     WINAPI RtlInitAnsiString(PANSI_STRING,PCSZ);
-void     WINAPI RtlInitUnicodeString(PUNICODE_STRING,PCWSTR);
-NTSTATUS WINAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING,PCANSI_STRING,BOOLEAN);
-NTSTATUS WINAPI RtlUnicodeStringToAnsiString(PANSI_STRING,PCUNICODE_STRING,BOOLEAN);
-NTSTATUS WINAPI RtlUnicodeStringToOemString(POEM_STRING,PCUNICODE_STRING,BOOLEAN);
-NTSTATUS WINAPI RtlUnicodeToMultiByteSize(PULONG,PWSTR,ULONG);
-NTSTATUS WINAPI RtlCharToInteger(PCSZ,ULONG,PULONG);
-NTSTATUS WINAPI RtlConvertSidToUnicodeString(PUNICODE_STRING,PSID,BOOLEAN);
-ULONG    WINAPI RtlUniform(PULONG);
-void     WINAPI RtlUnwind(PVOID,PVOID,PEXCEPTION_RECORD,PVOID);
-
-#ifdef __ia64__
-void     WINAPI RtlUnwind2(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT);
-void     WINAPI RtlUnwindEx(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT,PUNWIND_HISTORY_TABLE);
+/* System Information Class 0x02 */
+typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION {
+#ifdef __WINE__
+    LARGE_INTEGER liIdleTime;
+    DWORD dwSpare[76];
+#else
+    LARGE_INTEGER IdleTime;
+    LARGE_INTEGER KernelTime;
+    LARGE_INTEGER UserTime;
+    LARGE_INTEGER Reserved1[2];
+    ULONG Reserved2;
 #endif
+} SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
 
-/***********************************************************************
- * Various macros, types and data structures
- */
+/* System Information Class 0x05 */
+typedef struct _SYSTEM_PROCESS_INFORMATION {
+#ifdef __WINE__
+    DWORD dwOffset;
+    DWORD dwThreadCount;
+    DWORD dwUnknown1[6];
+    FILETIME ftCreationTime;
+    DWORD dwUnknown2[5];
+    WCHAR *pszProcessName;
+    DWORD dwBasePriority;
+    DWORD dwProcessID;
+    DWORD dwParentProcessID;
+    DWORD dwHandleCount;
+    DWORD dwUnknown3;
+    DWORD dwUnknown4;
+    DWORD dwVirtualBytesPeak;
+    DWORD dwVirtualBytes;
+    DWORD dwPageFaults;
+    DWORD dwWorkingSetPeak;
+    DWORD dwWorkingSet;
+    DWORD dwUnknown5;
+    DWORD dwPagedPool;
+    DWORD dwUnknown6;
+    DWORD dwNonPagedPool;
+    DWORD dwPageFileBytesPeak;
+    DWORD dwPrivateBytes;
+    DWORD dwPageFileBytes;
+    DWORD dwUnknown7[4];
+    THREADINFO ti[1];
+#else
+    ULONG NextEntryOffset;
+    BYTE Reserved1[52];
+    PVOID Reserved2[3];
+    HANDLE UniqueProcessId;
+    PVOID Reserved3;
+    ULONG HandleCount;
+    BYTE Reserved4[4];
+    PVOID Reserved5[11];
+    SIZE_T PeakPagefileUsage;
+    SIZE_T PrivatePageCount;
+    LARGE_INTEGER Reserved6[6];
+#endif
+} SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
 
-#define LOGONID_CURRENT    ((ULONG)-1)
-#define SERVERNAME_CURRENT ((HANDLE)NULL)
+typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {
+    ULONG RegistryQuotaAllowed;
+    ULONG RegistryQuotaUsed;
+    PVOID Reserved1;
+} SYSTEM_REGISTRY_QUOTA_INFORMATION, *PSYSTEM_REGISTRY_QUOTA_INFORMATION;
 
-typedef enum _WINSTATIONINFOCLASS {
-    WinStationInformation = 8
-} WINSTATIONINFOCLASS;
+typedef struct _SYSTEM_TIME_ADJUSTMENT {
+    ULONG   TimeAdjustment;
+    BOOLEAN TimeAdjustmentDisabled;
+} SYSTEM_TIME_ADJUSTMENT, *PSYSTEM_TIME_ADJUSTMENT;
+
+/* System Information Class 0x03 */
+typedef struct _SYSTEM_TIMEOFDAY_INFORMATION {
+#ifdef __WINE__
+    LARGE_INTEGER liKeBootTime;
+    LARGE_INTEGER liKeSystemTime;
+    LARGE_INTEGER liExpTimeZoneBias;
+    ULONG uCurrentTimeZoneId;
+    DWORD dwReserved;
+#else
+    BYTE Reserved1[48];
+#endif
+} SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION; /* was SYSTEM_TIME_INFORMATION */
+
+typedef struct _TIME_FIELDS
+{   CSHORT Year;
+    CSHORT Month;
+    CSHORT Day;
+    CSHORT Hour;
+    CSHORT Minute;
+    CSHORT Second;
+    CSHORT Milliseconds;
+    CSHORT Weekday;
+} TIME_FIELDS, *PTIME_FIELDS;
 
 typedef struct _WINSTATIONINFORMATIONW {
   BYTE Reserved2[70];
   ULONG LogonId;
   BYTE Reserved3[1140];
-} WINSTATIONINFORMATIONW, * PWINSTATIONINFORMATIONW;
+} WINSTATIONINFORMATIONW, *PWINSTATIONINFORMATIONW;
+
+typedef struct _VM_COUNTERS_ {
+    ULONG PeakVirtualSize;
+    ULONG VirtualSize;
+    ULONG PageFaultCount;
+    ULONG PeakWorkingSetSize;
+    ULONG WorkingSetSize;
+    ULONG QuotaPeakPagedPoolUsage;
+    ULONG QuotaPagedPoolUsage;
+    ULONG QuotaPeakNonPagedPoolUsage;
+    ULONG QuotaNonPagedPoolUsage;
+    ULONG PagefileUsage;
+    ULONG PeakPagefileUsage;
+} VM_COUNTERS, *PVM_COUNTERS;
 
 typedef BOOLEAN (WINAPI * PWINSTATIONQUERYINFORMATIONW)(HANDLE,ULONG,WINSTATIONINFOCLASS,PVOID,ULONG,PULONG);
 
+/***********************************************************************
+ * Defines
+ */
+
+/* flags for NtCreateFile and NtOpenFile */
+#define FILE_DIRECTORY_FLAG  0x00000001
+#define FILE_WRITE_THROUGH   0x00000002
+#define FILE_SEQUENTIAL_ONLY 0x00000004
+#define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
+#define FILE_SYNCHRONOUS_IO_ALERT    0x00000010
+#define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
+#define FILE_NON_DIRECTORY_FILE      0x00000040
+#define FILE_CREATE_TREE_CONNECTION  0x00000080
+
+/* status for NtCreateFile or NtOpenFile */
+#define FILE_SUPERSEDED  0x00000000
+#define FILE_OPENED      0x00000001
+#define FILE_CREATED     0x00000002
+#define FILE_OVERWRITTEN 0x00000003
+#define FILE_EXISTS      0x00000004
+#define FILE_DOES_NOT_EXIST 0x00000005
+
+#if (_WIN32_WINNT >= 0x0501)
+#define INTERNAL_TS_ACTIVE_CONSOLE_ID ( *((volatile ULONG*)(0x7ffe02d8)) )
+#endif /* (_WIN32_WINNT >= 0x0501) */
+
+#define LOGONID_CURRENT    ((ULONG)-1)
+
+#define OBJ_INHERIT          0x00000002L
+#define OBJ_PERMANENT        0x00000010L
+#define OBJ_EXCLUSIVE        0x00000020L
+#define OBJ_CASE_INSENSITIVE 0x00000040L
+#define OBJ_OPENIF           0x00000080L
+#define OBJ_OPENLINK         0x00000100L
+#define OBJ_KERNEL_HANDLE    0x00000200L
+#define OBJ_VALID_ATTRIBUTES 0x000003F2L
+
+#define SERVERNAME_CURRENT ((HANDLE)NULL)
+
+/***********************************************************************
+ * Function declarations
+ */
+
+extern LPSTR _strlwr(LPSTR str); /* FIXME: Doesn't belong here */
+extern LPSTR _strupr(LPSTR str); /* FIXME: Doesn't belong here */
+
+#if defined(__i386__) && defined(__GNUC__)
+static inline void WINAPI DbgBreakPoint(void) { __asm__ __volatile__("int3"); }
+static inline void WINAPI DbgUserBreakPoint(void) { __asm__ __volatile__("int3"); }
+#else  /* __i386__ && __GNUC__ */
+void WINAPI DbgBreakPoint(void);
+void WINAPI DbgUserBreakPoint(void);
+#endif  /* __i386__ && __GNUC__ */
+void WINAPIV DbgPrint(LPCSTR fmt, ...);
+
+NTSTATUS  WINAPI NtAccessCheck(PSECURITY_DESCRIPTOR,HANDLE,ACCESS_MASK,PGENERIC_MAPPING,PPRIVILEGE_SET,PULONG,PULONG,PBOOLEAN);
+NTSTATUS  WINAPI NtAdjustPrivilegesToken(HANDLE,BOOLEAN,PTOKEN_PRIVILEGES,DWORD,PTOKEN_PRIVILEGES,PDWORD);
+NTSTATUS  WINAPI NtClearEvent(HANDLE);
+NTSTATUS  WINAPI NtClose(HANDLE);
+NTSTATUS  WINAPI NtCreateEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *,BOOLEAN,BOOLEAN);
+NTSTATUS  WINAPI NtCreateFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,PLARGE_INTEGER,ULONG,ULONG,ULONG,ULONG,PVOID,ULONG);
+NTSTATUS  WINAPI NtCreateKey(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,PULONG);
+NTSTATUS  WINAPI NtCreateSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,ULONG);
+NTSTATUS  WINAPI NtDeleteKey(HANDLE);
+NTSTATUS  WINAPI NtDeleteValueKey(HANDLE,const UNICODE_STRING *);
+NTSTATUS  WINAPI NtDeviceIoControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
+NTSTATUS  WINAPI NtEnumerateKey(HANDLE,ULONG,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
+NTSTATUS  WINAPI NtEnumerateValueKey(HANDLE,ULONG,KEY_VALUE_INFORMATION_CLASS,PVOID,ULONG,PULONG);
+NTSTATUS  WINAPI NtFlushKey(HANDLE);
+NTSTATUS  WINAPI NtLoadKey(const OBJECT_ATTRIBUTES *,const OBJECT_ATTRIBUTES *);
+NTSTATUS  WINAPI NtNotifyChangeKey(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,BOOLEAN,PVOID,ULONG,BOOLEAN);
+NTSTATUS  WINAPI NtOpenEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
+NTSTATUS  WINAPI NtOpenFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG);
+NTSTATUS  WINAPI NtOpenKey(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
+NTSTATUS  WINAPI NtOpenProcessToken(HANDLE,DWORD,HANDLE *);
+NTSTATUS  WINAPI NtOpenThreadToken(HANDLE,DWORD,BOOLEAN,HANDLE *);
+NTSTATUS  WINAPI NtPulseEvent(HANDLE,PULONG);
+NTSTATUS  WINAPI NtQueryInformationProcess(HANDLE,PROCESSINFOCLASS,PVOID,ULONG,PULONG);
+NTSTATUS  WINAPI NtQueryInformationThread(HANDLE,THREADINFOCLASS,PVOID,ULONG,PULONG);
+NTSTATUS  WINAPI NtQueryInformationToken(HANDLE,DWORD,LPVOID,DWORD,LPDWORD);
+NTSTATUS  WINAPI NtQueryKey(HANDLE,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
+NTSTATUS  WINAPI NtQueryMultipleValueKey(HANDLE,PVALENTW,ULONG,PVOID,ULONG,PULONG);
+NTSTATUS  WINAPI NtQuerySecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,ULONG,PULONG);
+NTSTATUS  WINAPI NtQuerySystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG,PULONG);
+NTSTATUS  WINAPI NtQuerySystemTime(PLARGE_INTEGER);
+NTSTATUS  WINAPI NtQueryValueKey(HANDLE,const UNICODE_STRING *,KEY_VALUE_INFORMATION_CLASS,void *,DWORD,DWORD *);
+void      WINAPI NtRaiseException(PEXCEPTION_RECORD,PCONTEXT,BOOL);
+NTSTATUS  WINAPI NtReadFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,PLARGE_INTEGER,PULONG);
+NTSTATUS  WINAPI NtReleaseSemaphore(HANDLE,ULONG,PULONG);
+NTSTATUS  WINAPI NtResetEvent(HANDLE,PULONG);
+NTSTATUS  WINAPI NtRestoreKey(HANDLE,HANDLE,ULONG);
+NTSTATUS  WINAPI NtReplaceKey(POBJECT_ATTRIBUTES,HANDLE,POBJECT_ATTRIBUTES);
+NTSTATUS  WINAPI NtSaveKey(HANDLE,HANDLE);
+NTSTATUS  WINAPI NtSetEvent(HANDLE,PULONG);
+NTSTATUS  WINAPI NtSetInformationKey(HANDLE,const int,PVOID,ULONG);
+NTSTATUS  WINAPI NtSetSecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
+NTSTATUS  WINAPI NtSetValueKey(HANDLE,const UNICODE_STRING *,ULONG,ULONG,const void *,ULONG);
+NTSTATUS  WINAPI NtTerminateProcess(HANDLE,LONG);
+NTSTATUS  WINAPI NtTerminateThread(HANDLE,LONG);
+NTSTATUS  WINAPI NtUnloadKey(HANDLE);
+NTSTATUS  WINAPI NtWaitForSingleObject(HANDLE,BOOLEAN,PLARGE_INTEGER);
+
+void      WINAPI RtlAcquirePebLock(void);
+BYTE      WINAPI RtlAcquireResourceExclusive(LPRTL_RWLOCK,BYTE);
+BYTE      WINAPI RtlAcquireResourceShared(LPRTL_RWLOCK,BYTE);
+NTSTATUS  WINAPI RtlAddAce(PACL,DWORD,DWORD,PACE_HEADER,DWORD);
+BOOL      WINAPI RtlAddAccessAllowedAce(PACL,DWORD,DWORD,PSID);
+BOOL      WINAPI RtlAddAccessAllowedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
+DWORD     WINAPI RtlAdjustPrivilege(DWORD,DWORD,DWORD,DWORD);
+BOOLEAN   WINAPI RtlAllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY,BYTE,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,PSID *);
+PVOID     WINAPI RtlAllocateHeap(HANDLE,ULONG,ULONG);
+DWORD     WINAPI RtlAnsiStringToUnicodeSize(const STRING *);
+NTSTATUS  WINAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING,PCANSI_STRING,BOOLEAN);
+NTSTATUS  WINAPI RtlAppendAsciizToString(STRING *,LPCSTR);
+NTSTATUS  WINAPI RtlAppendStringToString(STRING *,const STRING *);
+NTSTATUS  WINAPI RtlAppendUnicodeStringToString(UNICODE_STRING *,const UNICODE_STRING *);
+NTSTATUS  WINAPI RtlAppendUnicodeToString(UNICODE_STRING *,LPCWSTR);
+BOOLEAN   WINAPI RtlAreBitsSet(PCRTL_BITMAP,ULONG,ULONG);
+BOOLEAN   WINAPI RtlAreBitsClear(PCRTL_BITMAP,ULONG,ULONG);
+
+NTSTATUS  WINAPI RtlCharToInteger(PCSZ,ULONG,PULONG);
+void      WINAPI RtlClearAllBits(PRTL_BITMAP);
+void      WINAPI RtlClearBits(PRTL_BITMAP,ULONG,ULONG);
+ULONG     WINAPI RtlCompactHeap(HANDLE,ULONG);
+LONG      WINAPI RtlCompareString(const STRING*,const STRING*,BOOLEAN);
+LONG      WINAPI RtlCompareUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
+NTSTATUS  WINAPI RtlConvertSidToUnicodeString(PUNICODE_STRING,PSID,BOOLEAN);
+LONGLONG  WINAPI RtlConvertLongToLargeInteger(LONG);
+ULONGLONG WINAPI RtlConvertUlongToLargeInteger(ULONG);
+DWORD     WINAPI RtlCopySid(DWORD,PSID,PSID);
+void      WINAPI RtlCopyString(STRING*,const STRING*);
+void      WINAPI RtlCopyUnicodeString(UNICODE_STRING*,const UNICODE_STRING*);
+NTSTATUS  WINAPI RtlCreateAcl(PACL,DWORD,DWORD);
+DWORD     WINAPI RtlCreateEnvironment(DWORD,DWORD);
+HANDLE    WINAPI RtlCreateHeap(ULONG,PVOID,ULONG,ULONG,PVOID,PRTL_HEAP_DEFINITION);
+NTSTATUS  WINAPI RtlCreateSecurityDescriptor(PSECURITY_DESCRIPTOR,DWORD);
+BOOLEAN   WINAPI RtlCreateUnicodeString(PUNICODE_STRING,LPCWSTR);
+BOOLEAN   WINAPI RtlCreateUnicodeStringFromAsciiz(PUNICODE_STRING,LPCSTR);
+
+NTSTATUS  WINAPI RtlDeleteCriticalSection(RTL_CRITICAL_SECTION *);
+void      WINAPI RtlDeleteResource(LPRTL_RWLOCK);
+DWORD     WINAPI RtlDeleteSecurityObject(DWORD);
+DWORD     WINAPI RtlDestroyEnvironment(DWORD);
+HANDLE    WINAPI RtlDestroyHeap(HANDLE);
+BOOLEAN   WINAPI RtlDosPathNameToNtPathName_U(LPWSTR,PUNICODE_STRING,DWORD,DWORD);
+void      WINAPI RtlDumpResource(LPRTL_RWLOCK);
+
+LONGLONG  WINAPI RtlEnlargedIntegerMultiply(INT,INT);
+ULONGLONG WINAPI RtlEnlargedUnsignedMultiply(UINT,UINT);
+UINT      WINAPI RtlEnlargedUnsignedDivide(ULONGLONG,UINT,UINT *);
+NTSTATUS  WINAPI RtlEnterCriticalSection(RTL_CRITICAL_SECTION *);
+void      WINAPI RtlEraseUnicodeString(UNICODE_STRING*);
+BOOL      WINAPI RtlEqualPrefixSid(PSID,PSID);
+BOOL      WINAPI RtlEqualSid(PSID,PSID);
+BOOLEAN   WINAPI RtlEqualString(const STRING*,const STRING*,BOOLEAN);
+BOOLEAN   WINAPI RtlEqualUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
+LONGLONG  WINAPI RtlExtendedMagicDivide(LONGLONG,LONGLONG,INT);
+LONGLONG  WINAPI RtlExtendedIntegerMultiply(LONGLONG,INT);
+LONGLONG  WINAPI RtlExtendedLargeIntegerDivide(LONGLONG,INT,INT *);
+
+ULONG     WINAPI RtlFindClearBits(PCRTL_BITMAP,ULONG,ULONG);
+ULONG     WINAPI RtlFindClearBitsAndSet(PRTL_BITMAP,ULONG,ULONG);
+ULONG     WINAPI RtlFindClearRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
+ULONG     WINAPI RtlFindLastBackwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
+ULONG     WINAPI RtlFindLastBackwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
+CCHAR     WINAPI RtlFindLeastSignificantBit(ULONGLONG);
+ULONG     WINAPI RtlFindLongestRunSet(PCRTL_BITMAP,PULONG);
+ULONG     WINAPI RtlFindLongestRunClear(PCRTL_BITMAP,PULONG);
+CCHAR     WINAPI RtlFindMostSignificantBit(ULONGLONG);
+ULONG     WINAPI RtlFindNextForwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
+ULONG     WINAPI RtlFindNextForwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
+ULONG     WINAPI RtlFindSetBits(PCRTL_BITMAP,ULONG,ULONG);
+ULONG     WINAPI RtlFindSetBitsAndClear(PRTL_BITMAP,ULONG,ULONG);
+ULONG     WINAPI RtlFindSetRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
+BOOLEAN   WINAPI RtlFirstFreeAce(PACL,PACE_HEADER *);
+NTSTATUS  WINAPI RtlFormatCurrentUserKeyPath(PUNICODE_STRING);
+void      WINAPI RtlFreeAnsiString(PANSI_STRING);
+BOOLEAN   WINAPI RtlFreeHeap(HANDLE,ULONG,PVOID);
+void      WINAPI RtlFreeOemString(POEM_STRING);
+DWORD     WINAPI RtlFreeSid(PSID);
+void      WINAPI RtlFreeUnicodeString(PUNICODE_STRING);
+
+DWORD     WINAPI RtlGetAce(PACL,DWORD,LPVOID *);
+NTSTATUS  WINAPI RtlGetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
+NTSTATUS  WINAPI RtlGetControlSecurityDescriptor(PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR_CONTROL,LPDWORD);
+NTSTATUS  WINAPI RtlGetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
+BOOLEAN   WINAPI RtlGetNtProductType(LPDWORD);
+NTSTATUS  WINAPI RtlGetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
+ULONG     WINAPI RtlGetProcessHeaps(ULONG,HANDLE*);
+NTSTATUS  WINAPI RtlGetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
+
+PSID_IDENTIFIER_AUTHORITY WINAPI RtlIdentifierAuthoritySid(PSID);
+PVOID     WINAPI RtlImageDirectoryEntryToData(HMODULE,BOOL,WORD,ULONG *);
+PIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE);
+PIMAGE_SECTION_HEADER WINAPI RtlImageRvaToSection(const IMAGE_NT_HEADERS *,HMODULE,DWORD);
+PVOID     WINAPI RtlImageRvaToVa(const IMAGE_NT_HEADERS *,HMODULE,DWORD,IMAGE_SECTION_HEADER **);
+BOOL      WINAPI RtlImpersonateSelf(SECURITY_IMPERSONATION_LEVEL);
+void      WINAPI RtlInitString(PSTRING,PCSZ);
+void      WINAPI RtlInitAnsiString(PANSI_STRING,PCSZ);
+void      WINAPI RtlInitUnicodeString(PUNICODE_STRING,PCWSTR);
+NTSTATUS  WINAPI RtlInitializeCriticalSection(RTL_CRITICAL_SECTION *);
+NTSTATUS  WINAPI RtlInitializeCriticalSectionAndSpinCount(RTL_CRITICAL_SECTION *,DWORD);
+void      WINAPI RtlInitializeBitMap(PRTL_BITMAP,LPBYTE,ULONG);
+void      WINAPI RtlInitializeResource(LPRTL_RWLOCK);
+BOOL      WINAPI RtlInitializeSid(PSID,PSID_IDENTIFIER_AUTHORITY,BYTE);
+
+DWORD     WINAPI RtlIntegerToChar(DWORD,DWORD,DWORD,DWORD);
+BOOLEAN   WINAPI RtlIsNameLegalDOS8Dot3(PUNICODE_STRING,POEM_STRING,PBOOLEAN);
+DWORD     WINAPI RtlIsTextUnicode(LPVOID,DWORD,DWORD *);
+
+LONGLONG  WINAPI RtlLargeIntegerAdd(LONGLONG,LONGLONG);
+LONGLONG  WINAPI RtlLargeIntegerArithmeticShift(LONGLONG,INT);
+ULONGLONG WINAPI RtlLargeIntegerDivide( ULONGLONG,ULONGLONG,ULONGLONG *);
+LONGLONG  WINAPI RtlLargeIntegerNegate(LONGLONG);
+LONGLONG  WINAPI RtlLargeIntegerShiftLeft(LONGLONG,INT);
+LONGLONG  WINAPI RtlLargeIntegerShiftRight(LONGLONG,INT);
+LONGLONG  WINAPI RtlLargeIntegerSubtract(LONGLONG,LONGLONG);
+NTSTATUS  WINAPI RtlLeaveCriticalSection(RTL_CRITICAL_SECTION *);
+DWORD     WINAPI RtlLengthRequiredSid(DWORD);
+ULONG     WINAPI RtlLengthSecurityDescriptor(PSECURITY_DESCRIPTOR);
+DWORD     WINAPI RtlLengthSid(PSID);
+NTSTATUS  WINAPI RtlLocalTimeToSystemTime(PLARGE_INTEGER,PLARGE_INTEGER);
+BOOLEAN   WINAPI RtlLockHeap(HANDLE);
+
+NTSTATUS  WINAPI RtlMakeSelfRelativeSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,LPDWORD);
+NTSTATUS  WINAPI RtlMultiByteToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
+NTSTATUS  WINAPI RtlMultiByteToUnicodeSize(DWORD*,LPCSTR,UINT);
+
+DWORD     WINAPI RtlNewSecurityObject(DWORD,DWORD,DWORD,DWORD,DWORD,DWORD);
+LPVOID    WINAPI RtlNormalizeProcessParams(LPVOID);
+ULONG     WINAPI RtlNtStatusToDosError(NTSTATUS);
+ULONG     WINAPI RtlNumberOfSetBits(PCRTL_BITMAP);
+ULONG     WINAPI RtlNumberOfClearBits(PCRTL_BITMAP);
+
+UINT      WINAPI RtlOemStringToUnicodeSize(const STRING*);
+NTSTATUS  WINAPI RtlOemStringToUnicodeString(UNICODE_STRING*,const STRING*,BOOLEAN);
+NTSTATUS  WINAPI RtlOemToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
+DWORD     WINAPI RtlOpenCurrentUser(ACCESS_MASK,PHANDLE);
+
+BOOLEAN   WINAPI RtlPrefixString(const STRING*,const STRING*,BOOLEAN);
+BOOLEAN   WINAPI RtlPrefixUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
+
+DWORD     WINAPI RtlQueryEnvironmentVariable_U(DWORD,PUNICODE_STRING,PUNICODE_STRING) ;
+
+void      WINAPI RtlRaiseException(PEXCEPTION_RECORD);
+void      WINAPI RtlRaiseStatus(NTSTATUS);
+PVOID     WINAPI RtlReAllocateHeap(HANDLE,ULONG,PVOID,ULONG);
+void      WINAPI RtlReleasePebLock(void);
+void      WINAPI RtlReleaseResource(LPRTL_RWLOCK);
+
+void      WINAPI RtlSecondsSince1970ToTime(DWORD,LARGE_INTEGER *);
+void      WINAPI RtlSecondsSince1980ToTime(DWORD,LARGE_INTEGER *);
+void      WINAPI RtlSetAllBits(PRTL_BITMAP);
+void      WINAPI RtlSetBits(PRTL_BITMAP,ULONG,ULONG);
+NTSTATUS  WINAPI RtlSetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
+DWORD     WINAPI RtlSetEnvironmentVariable(DWORD,PUNICODE_STRING,PUNICODE_STRING);
+NTSTATUS  WINAPI RtlSetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
+NTSTATUS  WINAPI RtlSetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
+NTSTATUS  WINAPI RtlSetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
+ULONG     WINAPI RtlSizeHeap(HANDLE,ULONG,PVOID);
+LPDWORD   WINAPI RtlSubAuthoritySid(PSID,DWORD);
+LPBYTE    WINAPI RtlSubAuthorityCountSid(PSID);
+void      WINAPI RtlSystemTimeToLocalTime(PLARGE_INTEGER,PLARGE_INTEGER);
+
+void      WINAPI RtlTimeToTimeFields(PLARGE_INTEGER,PTIME_FIELDS);
+BOOLEAN   WINAPI RtlTimeFieldsToTime(PTIME_FIELDS,PLARGE_INTEGER);
+void      WINAPI RtlTimeToElapsedTimeFields(PLARGE_INTEGER,PTIME_FIELDS);
+BOOLEAN   WINAPI RtlTimeToSecondsSince1970(const LARGE_INTEGER *,PULONG);
+BOOLEAN   WINAPI RtlTimeToSecondsSince1980(const LARGE_INTEGER *,LPDWORD);
+BOOL      WINAPI RtlTryEnterCriticalSection(RTL_CRITICAL_SECTION *);
+
+DWORD     WINAPI RtlUnicodeStringToAnsiSize(const UNICODE_STRING*);
+NTSTATUS  WINAPI RtlUnicodeStringToAnsiString(PANSI_STRING,PCUNICODE_STRING,BOOLEAN);
+DWORD     WINAPI RtlUnicodeStringToOemSize(const UNICODE_STRING*);
+NTSTATUS  WINAPI RtlUnicodeStringToOemString(POEM_STRING,PCUNICODE_STRING,BOOLEAN);
+NTSTATUS  WINAPI RtlUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
+NTSTATUS  WINAPI RtlUnicodeToMultiByteSize(PULONG,PCWSTR,ULONG);
+NTSTATUS  WINAPI RtlUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
+ULONG     WINAPI RtlUniform(PULONG);
+BOOLEAN   WINAPI RtlUnlockHeap(HANDLE);
+void      WINAPI RtlUnwind(PVOID,PVOID,PEXCEPTION_RECORD,PVOID);
+#ifdef __ia64__
+void      WINAPI RtlUnwind2(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT);
+void      WINAPI RtlUnwindEx(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT,PUNWIND_HISTORY_TABLE);
+#endif
+NTSTATUS  WINAPI RtlUpcaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING *,BOOLEAN);
+NTSTATUS  WINAPI RtlUpcaseUnicodeStringToAnsiString(STRING*,const UNICODE_STRING*,BOOLEAN);
+NTSTATUS  WINAPI RtlUpcaseUnicodeStringToOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
+NTSTATUS  WINAPI RtlUpcaseUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
+NTSTATUS  WINAPI RtlUpcaseUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
+
+NTSTATUS  WINAPI RtlValidSecurityDescriptor(PSECURITY_DESCRIPTOR);
+BOOL      WINAPI RtlValidSid(PSID);
+BOOLEAN   WINAPI RtlValidateHeap(HANDLE,ULONG,PCVOID);
+
+NTSTATUS  WINAPI RtlWalkHeap(HANDLE,PVOID);
+
+NTSTATUS  WINAPI RtlpWaitForCriticalSection(RTL_CRITICAL_SECTION *);
+NTSTATUS  WINAPI RtlpUnWaitCriticalSection(RTL_CRITICAL_SECTION *);
+
+/***********************************************************************
+ * Inline functions
+ */
+
+#define InitializeObjectAttributes(p,n,a,r,s) \
+    do { \
+        (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
+        (p)->RootDirectory = r; \
+        (p)->Attributes = a; \
+        (p)->ObjectName = n; \
+        (p)->SecurityDescriptor = s; \
+        (p)->SecurityQualityOfService = NULL; \
+    } while (0)
+
+#define NtCurrentProcess() ((HANDLE)-1)
+
+#define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length))
+#define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length))
+#define RtlStoreUlong(p,v)  do { ULONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
+#define RtlStoreUlonglong(p,v) do { ULONGLONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
+#define RtlRetrieveUlong(p,s) memcpy((p), (s), sizeof(ULONG))
+#define RtlRetrieveUlonglong(p,s) memcpy((p), (s), sizeof(ULONGLONG))
+#define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
+
+inline static BOOLEAN RtlCheckBit(PCRTL_BITMAP lpBits, ULONG ulBit)
+{
+    if (lpBits && ulBit < lpBits->SizeOfBitMap &&
+        lpBits->BitMapBuffer[ulBit >> 3] & (1 << (ulBit & 7)))
+        return TRUE;
+    return FALSE;
+}
+
+#define RtlClearAllBits(p) \
+    do { \
+        PRTL_BITMAP _p = (p); \
+        memset(_p->BitMapBuffer,0,((_p->SizeOfBitMap + 31) & 0xffffffe0) >> 3); \
+    } while (0)
+
+#define RtlInitializeBitMap(p,b,s) \
+    do { \
+        PRTL_BITMAP _p = (p); \
+        _p->SizeOfBitMap = (s); \
+        _p->BitMapBuffer = (b); \
+    } while (0)
+
+#define RtlSetAllBits(p) \
+    do { \
+        PRTL_BITMAP _p = (p); \
+        memset(_p->BitMapBuffer,0xff,((_p->SizeOfBitMap + 31) & 0xffffffe0) >> 3); \
+    } while (0)
+
 #ifdef __cplusplus
 } /* extern "C" */
 #endif /* defined(__cplusplus) */