Move some types from winternl.h to ddk/ntddk.h

Francois Gouget fgouget at free.fr
Tue Aug 24 18:07:54 CDT 2004


Some of the types that we define in winternl.h are defined in
ddk/ntddk.h in the Windows 2000 DDK. Moving these types to the right
header allows us to use ddk/ntddk.h in dlls/ntdll/tests/rtlbitmap.c
which makes it possible to compile this test with the Windows headers.
It also makes our headers more similar to the Windows ones which is
generally regarded as a good thing.

The tricky part is that in the Windows headers ddk/ntddk.h needs
ddk/ntdef.h which pretty much redefines most of the windef.h and winnt.h
basic types. This also makes it incompatible with most headers like
winbase.h, while many types are defined both in winternl.h and ntddk.h
which also makes them incompatible with each other.

However Wine really needs to be able to use both winternl.h and ntddk.h
at the same time. Also some of our dlls use just one or two Rtl
functions (e.g. RtlLargeIntegerAdd) which requires them to include
ntddk.h although they also use other headers such as winbase.h.

So instead of redefining most of windef.h and winnt.h in ntdef.h, I just
#include them. This makes ntdef.h/ntddk.h compatible with the other Wine
headers, including winternl.h. This probably breaks Microsoft's Device
Driver Kit / Platform SDK separation but I don't think we care much. The
important thing is that it makes the patch simpler and lays the ground
work for going further if we want to.

Wine also uses winternl.h as a repository for many undocumented
low-level APIs. The policy I used for the migration is the following:
 1) anything that is defined both in winternl.h in the Platform SDK and
    in ntddk.h in the Windows 200 DDK gets duplicated.
 2) anything defined in ntddk.h in the Windows 2000 DDK but not in
    the Platform SDK moves to ntddk.h
 3) anything that needs a declaration that was moved to ntddk.h due
    to rule 2) also moves to ntddk.h
 4) anything that's not documented at all stays in winternl.h

It may make sense to modify rule 4 to try to move more related APIs to
ntddk.h but that gets fuzzy.


Changelog:

 * dlls/advapi32/registry.c
   dlls/advapi32/security.c
   dlls/kernel/change.c
   dlls/kernel/computername.c
   dlls/kernel/console.c
   dlls/kernel/local16.c
   dlls/kernel/ne_module.c
   dlls/kernel/path.c
   dlls/kernel/profile.c
   dlls/kernel/relay16.c
   dlls/kernel/resource.c
   dlls/kernel/sync.c
   dlls/kernel/time.c
   dlls/kernel/version.c
   dlls/kernel/virtual.c
   dlls/kernel/volume.c
   dlls/kernel/vxd.c
   dlls/mapi32/util.c
   dlls/msvcrt/except.c
   dlls/msvcrt/scanf.c
   dlls/ntdll/rtlbitmap.c
   dlls/ntdll/tests/rtlbitmap.c
   dlls/ole32/compobj_private.h
   dlls/ole32/hglobalstream.c
   dlls/ole32/stg_stream.c
   dlls/winedos/int21.c
   dlls/winedos/ioports.c
   dlls/winedos/ppdev.c
   include/module.h
   include/thread.h
   include/windef.h
   include/winternl.h
   misc/registry.c
   server/fd.c
   server/file.c
   server/registry.c
   server/serial.c
   server/trace.c
   include/ddk/ntdef.h
   include/ddk/ntddk.h

   Move some declarations from winternl.h to ddk/ntddk.h where they
belong. Adjust the Wine code accordingly.
   #include "ddk/ntddk.h" in dlls/ntdll/tests/rtlbitmap.c. This test now
compiles with the Windows 2000 DDK headers.

-- 
Francois Gouget         fgouget at free.fr        http://fgouget.free.fr/
              Linux: Because rebooting is for adding new hardware
-------------- next part --------------
Index: dlls/advapi32/registry.c
===================================================================
RCS file: /var/cvs/wine/dlls/advapi32/registry.c,v
retrieving revision 1.64
diff -u -r1.64 registry.c
--- dlls/advapi32/registry.c	24 Jul 2004 02:32:50 -0000	1.64
+++ dlls/advapi32/registry.c	24 Aug 2004 13:11:35 -0000
@@ -38,7 +38,7 @@
 #include "wine/unicode.h"
 #include "wine/server.h"
 #include "wine/debug.h"
-#include "winternl.h"
+#include "ddk/ntddk.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(reg);
 
Index: dlls/advapi32/security.c
===================================================================
RCS file: /var/cvs/wine/dlls/advapi32/security.c,v
retrieving revision 1.79
diff -u -r1.79 security.c
--- dlls/advapi32/security.c	19 Aug 2004 19:01:12 -0000	1.79
+++ dlls/advapi32/security.c	24 Aug 2004 13:12:04 -0000
@@ -27,6 +27,7 @@
 #include "winerror.h"
 #include "rpcnterr.h"
 #include "winreg.h"
+#include "ddk/ntddk.h"
 #include "winternl.h"
 #include "ntstatus.h"
 #include "ntsecapi.h"
Index: dlls/kernel/change.c
===================================================================
RCS file: /var/cvs/wine/dlls/kernel/change.c,v
retrieving revision 1.6
diff -u -r1.6 change.c
--- dlls/kernel/change.c	13 May 2004 20:21:25 -0000	1.6
+++ dlls/kernel/change.c	24 Aug 2004 12:43:12 -0000
@@ -28,6 +28,7 @@
 #include "winbase.h"
 #include "winerror.h"
 #include "ntstatus.h"
+#include "ddk/ntddk.h"
 #include "kernel_private.h"
 #include "wine/windef16.h"
 #include "wine/server.h"
Index: dlls/kernel/computername.c
===================================================================
RCS file: /var/cvs/wine/dlls/kernel/computername.c,v
retrieving revision 1.10
diff -u -r1.10 computername.c
--- dlls/kernel/computername.c	10 Aug 2004 23:43:21 -0000	1.10
+++ dlls/kernel/computername.c	24 Aug 2004 12:43:33 -0000
@@ -40,6 +40,7 @@
 #include "winerror.h"
 #include "winnls.h"
 #include "winreg.h"
+#include "ddk/ntddk.h"
 #include "winternl.h"
 #include "wine/unicode.h"
 #include "wine/exception.h"
Index: dlls/kernel/console.c
===================================================================
RCS file: /var/cvs/wine/dlls/kernel/console.c,v
retrieving revision 1.34
diff -u -r1.34 console.c
--- dlls/kernel/console.c	10 Aug 2004 23:43:21 -0000	1.34
+++ dlls/kernel/console.c	24 Aug 2004 12:45:28 -0000
@@ -44,6 +44,7 @@
 #include "winnls.h"
 #include "winerror.h"
 #include "wincon.h"
+#include "ddk/ntddk.h"
 #include "wine/winbase16.h"
 #include "wine/server.h"
 #include "wine/exception.h"
Index: dlls/kernel/local16.c
===================================================================
RCS file: /var/cvs/wine/dlls/kernel/local16.c,v
retrieving revision 1.7
diff -u -r1.7 local16.c
--- dlls/kernel/local16.c	9 Jan 2004 22:18:50 -0000	1.7
+++ dlls/kernel/local16.c	24 Aug 2004 12:50:16 -0000
@@ -40,6 +40,7 @@
 #include "stackframe.h"
 #include "toolhelp.h"
 #include "kernel_private.h"
+#include "winternl.h"
 #include "wine/debug.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(local);
Index: dlls/kernel/ne_module.c
===================================================================
RCS file: /var/cvs/wine/dlls/kernel/ne_module.c,v
retrieving revision 1.25
diff -u -r1.25 ne_module.c
--- dlls/kernel/ne_module.c	10 Aug 2004 23:43:21 -0000	1.25
+++ dlls/kernel/ne_module.c	24 Aug 2004 12:50:31 -0000
@@ -44,6 +44,7 @@
 #include "stackframe.h"
 #include "excpt.h"
 #include "kernel_private.h"
+#include "winternl.h"
 #include "wine/unicode.h"
 #include "wine/exception.h"
 #include "wine/debug.h"
Index: dlls/kernel/path.c
===================================================================
RCS file: /var/cvs/wine/dlls/kernel/path.c,v
retrieving revision 1.14
diff -u -r1.14 path.c
--- dlls/kernel/path.c	2 Jun 2004 21:32:55 -0000	1.14
+++ dlls/kernel/path.c	24 Aug 2004 12:51:35 -0000
@@ -35,6 +35,7 @@
 #include "windef.h"
 #include "winbase.h"
 #include "winreg.h"
+#include "ddk/ntddk.h"
 #include "winternl.h"
 
 #include "kernel_private.h"
Index: dlls/kernel/profile.c
===================================================================
RCS file: /var/cvs/wine/dlls/kernel/profile.c,v
retrieving revision 1.13
diff -u -r1.13 profile.c
--- dlls/kernel/profile.c	16 Jul 2004 02:45:00 -0000	1.13
+++ dlls/kernel/profile.c	24 Aug 2004 12:52:48 -0000
@@ -30,7 +30,7 @@
 #include "winnls.h"
 #include "winerror.h"
 #include "winreg.h"
-#include "winternl.h"
+#include "ddk/ntddk.h"
 #include "wine/winbase16.h"
 #include "wine/unicode.h"
 #include "wine/server.h"
Index: dlls/kernel/relay16.c
===================================================================
RCS file: /var/cvs/wine/dlls/kernel/relay16.c,v
retrieving revision 1.8
diff -u -r1.8 relay16.c
--- dlls/kernel/relay16.c	17 Nov 2003 20:31:30 -0000	1.8
+++ dlls/kernel/relay16.c	24 Aug 2004 12:53:00 -0000
@@ -33,6 +33,7 @@
 #include "stackframe.h"
 #include "builtin16.h"
 #include "kernel_private.h"
+#include "winternl.h"
 #include "wine/unicode.h"
 #include "wine/library.h"
 #include "wine/debug.h"
Index: dlls/kernel/resource.c
===================================================================
RCS file: /var/cvs/wine/dlls/kernel/resource.c,v
retrieving revision 1.8
diff -u -r1.8 resource.c
--- dlls/kernel/resource.c	10 Aug 2004 23:43:21 -0000	1.8
+++ dlls/kernel/resource.c	24 Aug 2004 21:37:02 -0000
@@ -30,6 +30,7 @@
 #include "windef.h"
 #include "winbase.h"
 #include "winreg.h"
+#include "ddk/ntddk.h"
 #include "winternl.h"
 #include "wownt32.h"
 #include "wine/winbase16.h"
Index: dlls/kernel/sync.c
===================================================================
RCS file: /var/cvs/wine/dlls/kernel/sync.c,v
retrieving revision 1.59
diff -u -r1.59 sync.c
--- dlls/kernel/sync.c	18 Aug 2004 00:04:58 -0000	1.59
+++ dlls/kernel/sync.c	24 Aug 2004 12:53:30 -0000
@@ -44,7 +44,7 @@
 #include "winerror.h"
 #include "winnls.h"
 #include "winreg.h"
-#include "winternl.h"
+#include "ddk/ntddk.h"
 
 #include "wine/server.h"
 #include "wine/unicode.h"
Index: dlls/kernel/time.c
===================================================================
RCS file: /var/cvs/wine/dlls/kernel/time.c,v
retrieving revision 1.42
diff -u -r1.42 time.c
--- dlls/kernel/time.c	28 Apr 2004 03:53:19 -0000	1.42
+++ dlls/kernel/time.c	24 Aug 2004 12:53:55 -0000
@@ -40,6 +40,7 @@
 #include "winbase.h"
 #include "winreg.h"
 #include "ntstatus.h"
+#include "ddk/ntddk.h"
 #include "winternl.h"
 #include "winerror.h"
 #include "winnls.h"
Index: dlls/kernel/version.c
===================================================================
RCS file: /var/cvs/wine/dlls/kernel/version.c,v
retrieving revision 1.3
diff -u -r1.3 version.c
--- dlls/kernel/version.c	19 May 2004 03:22:56 -0000	1.3
+++ dlls/kernel/version.c	24 Aug 2004 12:54:23 -0000
@@ -34,6 +34,7 @@
 #include "wingdi.h"
 #include "winuser.h"
 #include "winreg.h"
+#include "ddk/ntddk.h"
 #include "winternl.h"
 #include "winerror.h"
 #include "wine/winbase16.h"
Index: dlls/kernel/virtual.c
===================================================================
RCS file: /var/cvs/wine/dlls/kernel/virtual.c,v
retrieving revision 1.3
diff -u -r1.3 virtual.c
--- dlls/kernel/virtual.c	21 May 2004 20:58:44 -0000	1.3
+++ dlls/kernel/virtual.c	24 Aug 2004 12:54:43 -0000
@@ -37,6 +37,7 @@
 #include "winbase.h"
 #include "winnls.h"
 #include "winreg.h"
+#include "ddk/ntddk.h"
 #include "winternl.h"
 #include "winerror.h"
 #include "wine/exception.h"
Index: dlls/kernel/volume.c
===================================================================
RCS file: /var/cvs/wine/dlls/kernel/volume.c,v
retrieving revision 1.20
diff -u -r1.20 volume.c
--- dlls/kernel/volume.c	10 Aug 2004 23:43:21 -0000	1.20
+++ dlls/kernel/volume.c	24 Aug 2004 12:55:11 -0000
@@ -33,6 +33,7 @@
 #include "winbase.h"
 #include "winreg.h"
 #include "winnls.h"
+#include "ddk/ntddk.h"
 #include "winternl.h"
 #include "ntstatus.h"
 #include "winioctl.h"
Index: dlls/kernel/vxd.c
===================================================================
RCS file: /var/cvs/wine/dlls/kernel/vxd.c,v
retrieving revision 1.15
diff -u -r1.15 vxd.c
--- dlls/kernel/vxd.c	18 Aug 2004 00:04:58 -0000	1.15
+++ dlls/kernel/vxd.c	24 Aug 2004 12:55:41 -0000
@@ -32,6 +32,7 @@
 #include <string.h>
 #include <stdarg.h>
 
+#include "ddk/ntddk.h"
 #include "windef.h"
 #include "winbase.h"
 #include "winreg.h"
Index: dlls/mapi32/util.c
===================================================================
RCS file: /var/cvs/wine/dlls/mapi32/util.c,v
retrieving revision 1.3
diff -u -r1.3 util.c
--- dlls/mapi32/util.c	1 May 2004 02:39:34 -0000	1.3
+++ dlls/mapi32/util.c	24 Aug 2004 13:16:04 -0000
@@ -26,7 +26,7 @@
 #include "winbase.h"
 #include "winreg.h"
 #include "winerror.h"
-#include "winternl.h"
+#include "ddk/ntddk.h"
 #include "objbase.h"
 #include "shlwapi.h"
 #include "wine/debug.h"
Index: dlls/msvcrt/except.c
===================================================================
RCS file: /var/cvs/wine/dlls/msvcrt/except.c,v
retrieving revision 1.32
diff -u -r1.32 except.c
--- dlls/msvcrt/except.c	22 Aug 2004 02:07:13 -0000	1.32
+++ dlls/msvcrt/except.c	24 Aug 2004 13:20:57 -0000
@@ -33,6 +33,7 @@
 #include "windef.h"
 #include "winbase.h"
 #include "winreg.h"
+#include "ddk/ntddk.h"
 #include "winternl.h"
 #include "wine/exception.h"
 #include "msvcrt.h"
Index: dlls/msvcrt/scanf.c
===================================================================
RCS file: /var/cvs/wine/dlls/msvcrt/scanf.c,v
retrieving revision 1.7
diff -u -r1.7 scanf.c
--- dlls/msvcrt/scanf.c	25 Jun 2004 01:19:15 -0000	1.7
+++ dlls/msvcrt/scanf.c	24 Aug 2004 13:22:24 -0000
@@ -28,7 +28,7 @@
 #include "windef.h"
 #include "winbase.h"
 #include "winreg.h"
-#include "winternl.h"
+#include "ddk/ntddk.h"
 #include "msvcrt.h"
 #include "wine/debug.h"
 
Index: dlls/ntdll/rtlbitmap.c
===================================================================
RCS file: /var/cvs/wine/dlls/ntdll/rtlbitmap.c,v
retrieving revision 1.10
diff -u -r1.10 rtlbitmap.c
--- dlls/ntdll/rtlbitmap.c	23 Aug 2004 18:52:54 -0000	1.10
+++ dlls/ntdll/rtlbitmap.c	24 Aug 2004 13:23:25 -0000
@@ -35,7 +35,7 @@
 #include "windef.h"
 #include "winbase.h"
 #include "winreg.h"
-#include "winternl.h"
+#include "ddk/ntddk.h"
 #include "wine/debug.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(ntdll);
Index: dlls/ntdll/tests/rtlbitmap.c
===================================================================
RCS file: /var/cvs/wine/dlls/ntdll/tests/rtlbitmap.c,v
retrieving revision 1.8
diff -u -r1.8 rtlbitmap.c
--- dlls/ntdll/tests/rtlbitmap.c	23 Aug 2004 18:52:54 -0000	1.8
+++ dlls/ntdll/tests/rtlbitmap.c	24 Aug 2004 13:46:56 -0000
@@ -21,7 +21,9 @@
  * in later versions of ntdll.
  */
 
-#include "ntdll_test.h"
+#include <ddk/ntddk.h>
+#include <windef.h>
+#include <wine/test.h>
 
 /* Function ptrs for ordinal calls */
 static HMODULE hntdll = 0;
@@ -43,8 +45,11 @@
 static ULONG (WINAPI *pRtlFindLongestRunSet)(PRTL_BITMAP,PULONG);
 static ULONG (WINAPI *pRtlFindLongestRunClear)(PRTL_BITMAP,PULONG);
 
-static BYTE buff[256];
-static RTL_BITMAP bm;
+/* On Windows ntddk.h is incompatible with winbase.h so we need to provide
+ * our own prototypes here.
+ */
+HMODULE WINAPI LoadLibraryA(LPCSTR);
+FARPROC WINAPI GetProcAddress(HMODULE,LPCSTR);
 
 static void InitFunctionPtrs()
 {
@@ -71,7 +76,11 @@
     pRtlFindLongestRunClear = (void *)GetProcAddress(hntdll, "RtlFindLongestRunClear");
   }
 }
+
 
+static BYTE buff[256];
+static RTL_BITMAP bm;
+
 static void test_RtlInitializeBitMap(void)
 {
   bm.SizeOfBitMap = 0;
Index: dlls/ole32/compobj_private.h
===================================================================
RCS file: /var/cvs/wine/dlls/ole32/compobj_private.h,v
retrieving revision 1.18
diff -u -r1.18 compobj_private.h
--- dlls/ole32/compobj_private.h	13 Aug 2004 00:44:22 -0000	1.18
+++ dlls/ole32/compobj_private.h	24 Aug 2004 13:01:07 -0000
@@ -33,7 +33,7 @@
 #include "wtypes.h"
 #include "dcom.h"
 #include "winreg.h"
-#include "winternl.h"
+#include "ddk/ntddk.h"
 
 /* Windows maps COINIT values to 0x80 for apartment threaded, 0x140
  * for free threaded, and 0 for uninitialized apartments. There is
Index: dlls/ole32/hglobalstream.c
===================================================================
RCS file: /var/cvs/wine/dlls/ole32/hglobalstream.c,v
retrieving revision 1.25
diff -u -r1.25 hglobalstream.c
--- dlls/ole32/hglobalstream.c	23 Aug 2004 19:39:50 -0000	1.25
+++ dlls/ole32/hglobalstream.c	24 Aug 2004 13:02:00 -0000
@@ -38,7 +38,7 @@
 #include "ole2.h"
 #include "winerror.h"
 #include "winreg.h"
-#include "winternl.h"
+#include "ddk/ntddk.h"
 
 #include "wine/debug.h"
 
Index: dlls/ole32/stg_stream.c
===================================================================
RCS file: /var/cvs/wine/dlls/ole32/stg_stream.c,v
retrieving revision 1.21
diff -u -r1.21 stg_stream.c
--- dlls/ole32/stg_stream.c	23 Aug 2004 19:39:50 -0000	1.21
+++ dlls/ole32/stg_stream.c	24 Aug 2004 13:02:21 -0000
@@ -35,7 +35,7 @@
 #include "winbase.h"
 #include "winerror.h"
 #include "winreg.h"
-#include "winternl.h"
+#include "ddk/ntddk.h"
 #include "wine/debug.h"
 
 #include "storage32.h"
Index: dlls/winedos/int21.c
===================================================================
RCS file: /var/cvs/wine/dlls/winedos/int21.c,v
retrieving revision 1.68
diff -u -r1.68 int21.c
--- dlls/winedos/int21.c	18 Aug 2004 00:04:58 -0000	1.68
+++ dlls/winedos/int21.c	24 Aug 2004 13:10:06 -0000
@@ -36,7 +36,7 @@
 #include "windef.h"
 #include "winbase.h"
 #include "winreg.h"
-#include "winternl.h"
+#include "ddk/ntddk.h"
 #include "wine/winbase16.h"
 #include "dosexe.h"
 #include "winerror.h"
Index: dlls/winedos/ioports.c
===================================================================
RCS file: /var/cvs/wine/dlls/winedos/ioports.c,v
retrieving revision 1.8
diff -u -r1.8 ioports.c
--- dlls/winedos/ioports.c	17 Sep 2003 22:45:46 -0000	1.8
+++ dlls/winedos/ioports.c	24 Aug 2004 13:10:42 -0000
@@ -34,6 +34,7 @@
 #include "winbase.h"
 #include "winnls.h"
 #include "winreg.h"
+#include "ddk/ntddk.h"
 #include "winternl.h"
 #include "dosexe.h"
 #include "vga.h"
Index: dlls/winedos/ppdev.c
===================================================================
RCS file: /var/cvs/wine/dlls/winedos/ppdev.c,v
retrieving revision 1.3
diff -u -r1.3 ppdev.c
--- dlls/winedos/ppdev.c	1 Mar 2004 21:32:02 -0000	1.3
+++ dlls/winedos/ppdev.c	24 Aug 2004 13:11:06 -0000
@@ -41,6 +41,7 @@
 #include "winerror.h"
 #include "winbase.h"
 #include "winreg.h"
+#include "ddk/ntddk.h"
 #include "winternl.h"
 #include "miscemu.h"
 
Index: include/module.h
===================================================================
RCS file: /var/cvs/wine/include/module.h,v
retrieving revision 1.107
diff -u -r1.107 module.h
--- include/module.h	3 Jun 2004 00:25:08 -0000	1.107
+++ include/module.h	24 Aug 2004 12:33:14 -0000
@@ -27,7 +27,7 @@
 #include <winreg.h>
 #include <wine/windef16.h>
 #include <wine/winbase16.h>
-#include <winternl.h>
+#include <ddk/ntddk.h>
 
 #include <pshpack1.h>
 
Index: include/thread.h
===================================================================
RCS file: /var/cvs/wine/include/thread.h,v
retrieving revision 1.96
diff -u -r1.96 thread.h
--- include/thread.h	10 May 2004 19:58:48 -0000	1.96
+++ include/thread.h	24 Aug 2004 12:32:07 -0000
@@ -26,7 +26,7 @@
 #include <winbase.h>
 #include <winreg.h>
 #define WINE_NO_TEB
-#include <winternl.h>
+#include <ddk/ntddk.h>
 #include <wine/windef16.h>
 
 struct _SECURITY_ATTRIBUTES;
Index: include/windef.h
===================================================================
RCS file: /var/cvs/wine/include/windef.h,v
retrieving revision 1.92
diff -u -r1.92 windef.h
--- include/windef.h	16 Aug 2004 20:07:06 -0000	1.92
+++ include/windef.h	24 Aug 2004 21:12:29 -0000
@@ -178,6 +178,7 @@
 typedef unsigned long   DWORD,      *PDWORD,   *LPDWORD;
 typedef unsigned long   ULONG,      *PULONG;
 typedef float           FLOAT,      *PFLOAT;
+typedef char                        *PSZ;
 
 /* Macros to map Winelib names to the correct implementation name */
 /* Note that Winelib is purely Win32.                             */
Index: include/winternl.h
===================================================================
RCS file: /var/cvs/wine/include/winternl.h,v
retrieving revision 1.89
diff -u -r1.89 winternl.h
--- include/winternl.h	23 Aug 2004 18:52:54 -0000	1.89
+++ include/winternl.h	24 Aug 2004 12:47:43 -0000
@@ -32,178 +32,77 @@
  * Fundamental types and data structures
  */
 
-typedef LONG NTSTATUS;
+#ifndef WINTERNL_TYPES
+#define WINTERNL_TYPES
 
-typedef CONST char *PCSZ;
+typedef LONG  NTSTATUS;
+typedef const char *PCSZ;
 
-typedef short CSHORT;
-typedef CSHORT *PCSHORT;
-
-typedef struct _STRING {
-  USHORT Length;
-  USHORT MaximumLength;
-  PCHAR Buffer;
+typedef struct _STRING
+{
+    USHORT Length;
+    USHORT MaximumLength;
+    PCHAR Buffer;
 } STRING, *PSTRING;
-
-typedef STRING ANSI_STRING;
-typedef PSTRING PANSI_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;        /* bytes */
-  USHORT MaximumLength; /* bytes */
-  PWSTR  Buffer;
+typedef STRING         ANSI_STRING, *PANSI_STRING;
+typedef STRING                      *PCANSI_STRING;
+typedef STRING         OEM_STRING,  *POEM_STRING;
+
+typedef struct _UNICODE_STRING
+{
+    USHORT Length;        /* bytes */
+    USHORT MaximumLength; /* bytes */
+    PWSTR  Buffer;
 } UNICODE_STRING, *PUNICODE_STRING;
+typedef const UNICODE_STRING        *PCUNICODE_STRING;
 
-typedef const UNICODE_STRING *PCUNICODE_STRING;
-
-typedef struct _CLIENT_ID
-{
-   HANDLE UniqueProcess;
-   HANDLE UniqueThread;
-} CLIENT_ID, *PCLIENT_ID;
-
-typedef struct _CURDIR
-{
-    UNICODE_STRING DosPath;
-    PVOID Handle;
-} CURDIR, *PCURDIR;
-
-typedef struct RTL_DRIVE_LETTER_CURDIR
-{
-    USHORT              Flags;
-    USHORT              Length;
-    ULONG               TimeStamp;
-    UNICODE_STRING      DosPath;
-} RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;
-
-typedef struct tagRTL_BITMAP {
-    ULONG  SizeOfBitMap; /* Number of bits in the bitmap */
-    PULONG Buffer; /* Bitmap data, assumed sized to a DWORD boundary */
-} RTL_BITMAP, *PRTL_BITMAP;
-
-typedef const RTL_BITMAP *PCRTL_BITMAP;
-
-typedef struct tagRTL_BITMAP_RUN {
-    ULONG StartingIndex; /* Bit position at which run starts */
-    ULONG NumberOfBits;  /* Size of the run in bits */
-} RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
-
-typedef const RTL_BITMAP_RUN *PCRTL_BITMAP_RUN;
-
-typedef struct _RTL_USER_PROCESS_PARAMETERS
-{
-    ULONG               AllocationSize;
-    ULONG               Size;
-    ULONG               Flags;
-    ULONG               DebugFlags;
-    HANDLE              hConsole;
-    ULONG               ProcessGroup;
-    HANDLE              hStdInput;
-    HANDLE              hStdOutput;
-    HANDLE              hStdError;
-    CURDIR              CurrentDirectory;
-    UNICODE_STRING      DllPath;
-    UNICODE_STRING      ImagePathName;
-    UNICODE_STRING      CommandLine;
-    PWSTR               Environment;
-    ULONG               dwX;
-    ULONG               dwY;
-    ULONG               dwXSize;
-    ULONG               dwYSize;
-    ULONG               dwXCountChars;
-    ULONG               dwYCountChars;
-    ULONG               dwFillAttribute;
-    ULONG               dwFlags;
-    ULONG               wShowWindow;
-    UNICODE_STRING      WindowTitle;
-    UNICODE_STRING      Desktop;
-    UNICODE_STRING      ShellInfo;
-    UNICODE_STRING      RuntimeInfo;
-    RTL_DRIVE_LETTER_CURDIR DLCurrentDirectory[0x20];
-} RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
+#endif
 
-/* value for Flags field (FIXME: not the correct name) */
-#define PROCESS_PARAMS_FLAG_NORMALIZED 1
+typedef const STRING                *PCOEM_STRING;
 
-typedef struct _PEB_LDR_DATA
-{
-    ULONG               Length;
-    BOOLEAN             Initialized;
-    PVOID               SsHandle;
-    LIST_ENTRY          InLoadOrderModuleList;
-    LIST_ENTRY          InMemoryOrderModuleList;
-    LIST_ENTRY          InInitializationOrderModuleList;
-} PEB_LDR_DATA, *PPEB_LDR_DATA;
 
 /***********************************************************************
  * PEB data structure
  */
+
+#ifndef __WINESRC__
+/* Yes, this type is incompatible with the one defined in ddk/ntddk.h! */
 typedef struct _PEB
 {
-    BYTE                         Reserved1[2];       /*  00 */
-    BYTE                         BeingDebugged;      /*  02 */
-    BYTE                         Reserved2[5];       /*  03 */
-    HMODULE                      ImageBaseAddress;   /*  08 */
-    PPEB_LDR_DATA                LdrData;            /*  0c */
-    RTL_USER_PROCESS_PARAMETERS *ProcessParameters;  /*  10 */
-    PVOID                        __pad_14;           /*  14 */
-    HANDLE                       ProcessHeap;        /*  18 */
-    BYTE                         __pad_1c[36];       /*  1c */
-    PRTL_BITMAP                  TlsBitmap;          /*  40 */
-    ULONG                        TlsBitmapBits[2];   /*  44 */
-    BYTE                         __pad_4c[24];       /*  4c */
-    ULONG                        NumberOfProcessors; /*  64 */
-    BYTE                         __pad_68[128];      /*  68 */
-    PVOID                        Reserved3[59];      /*  e8 */
-    ULONG                        SessionId;          /* 1d4 */
+    BYTE  Reserved1[2];
+    BYTE  BeingDebugged;
+    BYTE  Reserved2[229];
+    PVOID Reserved3[59];
+    ULONG SessionId;
 } PEB, *PPEB;
+#endif
 
 
 /***********************************************************************
  * TEB data structure
  */
-#if defined(_NTSYSTEM_) || defined(_KERNEL32_)  /* hack, should go away */
-# define WINE_NO_TEB
-#endif
-
-#ifndef WINE_NO_TEB  /* don't define TEB if included from thread.h */
-# ifndef WINE_TEB_DEFINED
-# define WINE_TEB_DEFINED
+#if !defined(__WINESRC__) && !defined(WINE_NO_TEB)
+/* Yes, this type is incompatible with the one defined in ddk/ntddk.h! */
 typedef struct _TEB
 {
-    NT_TIB          Tib;                        /* 000 */
-    PVOID           EnvironmentPointer;         /* 01c */
-    CLIENT_ID       ClientId;                   /* 020 */
-    PVOID           ActiveRpcHandle;            /* 028 */
-    PVOID           ThreadLocalStoragePointer;  /* 02c */
-    PPEB            Peb;                        /* 030 */
-    ULONG           LastErrorValue;             /* 034 */
-    BYTE            __pad038[140];              /* 038 */
-    ULONG           CurrentLocale;              /* 0c4 */
-    BYTE            __pad0c8[1752];             /* 0c8 */
-    PVOID           Reserved2[278];             /* 7a0 */
-    UNICODE_STRING  StaticUnicodeString;        /* bf8 used by advapi32 */
-    WCHAR           StaticUnicodeBuffer[261];   /* c00 used by advapi32 */
-    PVOID           DeallocationStack;          /* e0c */
-    PVOID           TlsSlots[64];               /* e10 */
-    LIST_ENTRY      TlsLinks;                   /* f10 */
-    PVOID           Reserved4[26];              /* f18 */
-    PVOID           ReservedForOle;             /* f80 Windows 2000 only */
-    PVOID           Reserved5[4];               /* f84 */
-    PVOID           TlsExpansionSlots;          /* f94 */
+    BYTE  Reserved1[1952];
+    PVOID Reserved2[412];
+    PVOID TlsSlots[64];
+    BYTE  Reserved3[8];
+    PVOID Reserved4[26];
+    PVOID ReservedForOle;
+    PVOID Reserved5[4];
+    PVOID TlsExpansionSlots;
 } TEB, *PTEB;
-# endif /* WINE_TEB_DEFINED */
-#endif  /* WINE_NO_TEB */
+#endif
+
 
 /***********************************************************************
  * Enums
  */
 
+#ifndef FILE_INFORMATION_CLASS_DEFINED
+#define FILE_INFORMATION_CLASS_DEFINED
 typedef enum _FILE_INFORMATION_CLASS {
     FileDirectoryInformation = 1,
     FileFullDirectoryInformation,
@@ -243,206 +142,10 @@
     FileTrackingInformation,
     FileMaximumInformation
 } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
+#endif
 
-typedef struct _FILE_DIRECTORY_INFORMATION {
-    ULONG               NextEntryOffset;
-    ULONG               FileIndex;
-    LARGE_INTEGER       CreationTime;
-    LARGE_INTEGER       LastAccessTime;
-    LARGE_INTEGER       LastWriteTime;
-    LARGE_INTEGER       ChangeTime;
-    LARGE_INTEGER       EndOfFile;
-    LARGE_INTEGER       AllocationSize;
-    ULONG               FileAttributes;
-    ULONG               FileNameLength;
-    WCHAR               FileName[ANYSIZE_ARRAY];
-} FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
-
-typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
-    ULONG               NextEntryOffset;
-    ULONG               FileIndex;
-    LARGE_INTEGER       CreationTime;
-    LARGE_INTEGER       LastAccessTime;
-    LARGE_INTEGER       LastWriteTime;
-    LARGE_INTEGER       ChangeTime;
-    LARGE_INTEGER       EndOfFile;
-    LARGE_INTEGER       AllocationSize;
-    ULONG               FileAttributes;
-    ULONG               FileNameLength;
-    ULONG               EaSize;
-    WCHAR               FileName[ANYSIZE_ARRAY];
-} FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION,
-  FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION;
-
-typedef struct _FILE_BOTH_DIRECTORY_INFORMATION {
-    ULONG               NextEntryOffset;
-    ULONG               FileIndex;
-    LARGE_INTEGER       CreationTime;
-    LARGE_INTEGER       LastAccessTime;
-    LARGE_INTEGER       LastWriteTime;
-    LARGE_INTEGER       ChangeTime;
-    LARGE_INTEGER       EndOfFile;
-    LARGE_INTEGER       AllocationSize;
-    ULONG               FileAttributes;
-    ULONG               FileNameLength;
-    ULONG               EaSize;
-    CHAR                ShortNameLength;
-    WCHAR               ShortName[12];
-    WCHAR               FileName[ANYSIZE_ARRAY];
-} FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION,
-  FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
-
-typedef struct _FILE_BASIC_INFORMATION {
-    LARGE_INTEGER CreationTime;
-    LARGE_INTEGER LastAccessTime;
-    LARGE_INTEGER LastWriteTime;
-    LARGE_INTEGER ChangeTime;
-    ULONG FileAttributes;
-} FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
-
-typedef struct _FILE_STANDARD_INFORMATION {
-    LARGE_INTEGER AllocationSize;
-    LARGE_INTEGER EndOfFile;
-    ULONG NumberOfLinks;
-    BOOLEAN DeletePending;
-    BOOLEAN Directory;
-} FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
-
-typedef struct _FILE_INTERNAL_INFORMATION {
-    LARGE_INTEGER IndexNumber;
-} FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
-
-typedef struct _FILE_EA_INFORMATION {
-    ULONG EaSize;
-} FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
-
-typedef struct _FILE_ACCESS_INFORMATION {
-    ACCESS_MASK AccessFlags;
-} FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
-
-typedef struct _FILE_NAME_INFORMATION {
-    ULONG FileNameLength;
-    WCHAR FileName[1];
-} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
-
-typedef struct _FILE_RENAME_INFORMATION {
-    BOOLEAN Replace;
-    HANDLE RootDir;
-    ULONG FileNameLength;
-    WCHAR FileName[1];
-} FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
-
-typedef struct _FILE_NAMES_INFORMATION {
-    ULONG NextEntryOffset;
-    ULONG FileIndex;
-    ULONG FileNameLength;
-    WCHAR FileName[1];
-} FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
-
-typedef struct _FILE_DISPOSITION_INFORMATION {
-    BOOLEAN DoDeleteFile;
-} FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
-
-typedef struct _FILE_POSITION_INFORMATION {
-    LARGE_INTEGER CurrentByteOffset;
-} FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
-
-typedef struct _FILE_ALIGNMENT_INFORMATION {
-    ULONG AlignmentRequirement;
-} FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
-
-typedef struct _FILE_ALLOCATION_INFORMATION {
-    LARGE_INTEGER AllocationSize;
-} FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
-
-typedef struct _FILE_END_OF_FILE_INFORMATION {
-    LARGE_INTEGER EndOfFile;
-} FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
-
-typedef struct _FILE_NETWORK_OPEN_INFORMATION {
-    LARGE_INTEGER CreationTime;
-    LARGE_INTEGER LastAccessTime;
-    LARGE_INTEGER LastWriteTime;
-    LARGE_INTEGER ChangeTime;
-    LARGE_INTEGER AllocationSize;
-    LARGE_INTEGER EndOfFile;
-    ULONG FileAttributes;
-} FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
-
-typedef struct _FILE_FULL_EA_INFORMATION {
-    ULONG NextEntryOffset;
-    UCHAR Flags;
-    UCHAR EaNameLength;
-    USHORT EaValueLength;
-    CHAR EaName[1];
-} FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
-
-typedef struct _FILE_MODE_INFORMATION {
-    ULONG Mode;
-} FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
-
-typedef struct _FILE_STREAM_INFORMATION
-{
-    ULONG NextEntryOffset;
-    ULONG StreamNameLength;
-    LARGE_INTEGER StreamSize;
-    LARGE_INTEGER StreamAllocationSize;
-    WCHAR StreamName[1];
-} FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
-
-typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
-{
-    ULONG FileAttributes;
-    ULONG ReparseTag;
-} FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION;
-
-typedef struct _FILE_ALL_INFORMATION
-{
-    FILE_BASIC_INFORMATION     BasicInformation;
-    FILE_STANDARD_INFORMATION  StandardInformation;
-    FILE_INTERNAL_INFORMATION  InternalInformation;
-    FILE_EA_INFORMATION        EaInformation;
-    FILE_ACCESS_INFORMATION    AccessInformation;
-    FILE_POSITION_INFORMATION  PositionInformation;
-    FILE_MODE_INFORMATION      ModeInformation;
-    FILE_ALIGNMENT_INFORMATION AlignmentInformation;
-    FILE_NAME_INFORMATION      NameInformation;
-} FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
-
-typedef enum _FSINFOCLASS {
-    FileFsVolumeInformation = 1,
-    FileFsLabelInformation,
-    FileFsSizeInformation,
-    FileFsDeviceInformation,
-    FileFsAttributeInformation,
-    FileFsControlInformation,
-    FileFsFullSizeInformation,
-    FileFsObjectIdInformation,
-    FileFsMaximumInformation
-} FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
-
-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 {
-    ObjectBasicInformation,
-    ObjectNameInformation,
-    ObjectTypeInformation,
-    ObjectAllInformation,
-    ObjectDataInformation
-} OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS;
-
+#ifndef PROCESSINFOCLASS_DEFINED
+#define PROCESSINFOCLASS_DEFINED
 typedef enum _PROCESSINFOCLASS {
     ProcessBasicInformation = 0,
     ProcessQuotaLimits = 1,
@@ -473,13 +176,9 @@
     ProcessWow64Information = 26,
     MaxProcessInfoClass
 } PROCESSINFOCLASS;
+#endif
 
-typedef enum _SECTION_INHERIT {
-    ViewShare = 1,
-    ViewUnmap = 2
-} SECTION_INHERIT;
-
-typedef enum SYSTEM_INFORMATION_CLASS {
+typedef enum _SYSTEM_INFORMATION_CLASS {
     SystemBasicInformation = 0,
     Unknown1,
     SystemPerformanceInformation = 2,
@@ -536,11 +235,8 @@
     SystemInformationClassMax
 } SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS;
 
-typedef enum _TIMER_TYPE {
-    NotificationTimer,
-    SynchronizationTimer
-} TIMER_TYPE;
-
+#ifndef THREADINFOCLASS_DEFINED
+#define THREADINFOCLASS_DEFINED
 typedef enum _THREADINFOCLASS {
     ThreadBasicInformation,
     ThreadTimes,
@@ -561,17 +257,7 @@
     ThreadIsIoPending,
     MaxThreadInfoClass
 } THREADINFOCLASS;
-
-typedef struct _THREAD_BASIC_INFORMATION
-{
-    NTSTATUS  ExitStatus;
-    PVOID     TebBaseAddress;
-    CLIENT_ID ClientId;
-    ULONG     AffinityMask;
-    LONG      Priority;
-    LONG      BasePriority;
-} THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
-
+#endif
 
 typedef enum _WINSTATIONINFOCLASS {
     WinStationInformation = 8
@@ -665,6 +351,8 @@
  * Types and data structures
  */
 
+#ifndef IO_STATUS_BLOCK_DEFINED
+#define IO_STATUS_BLOCK_DEFINED
 typedef struct _IO_STATUS_BLOCK {
   union {
     NTSTATUS Status;
@@ -673,73 +361,12 @@
 
   ULONG_PTR Information;
 } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
+#endif
 
 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;
-
+#ifndef OBJECT_ATTRIBUTES_DEFINED
+#define OBJECT_ATTRIBUTES_DEFINED
 typedef struct _OBJECT_ATTRIBUTES {
   ULONG Length;
   HANDLE RootDirectory;
@@ -748,28 +375,23 @@
   PVOID SecurityDescriptor;       /* type SECURITY_DESCRIPTOR */
   PVOID SecurityQualityOfService; /* type SECURITY_QUALITY_OF_SERVICE */
 } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
+#endif
 
 typedef struct _OBJECT_DATA_INFORMATION {
     BOOLEAN InheritHandle;
     BOOLEAN ProtectFromClose;
 } OBJECT_DATA_INFORMATION, *POBJECT_DATA_INFORMATION;
 
+#ifndef __WINESRC__
+/* Yes, this type is incompatible with the one defined in ddk/ntddk.h! */
 typedef struct _PROCESS_BASIC_INFORMATION {
-#ifdef __WINESRC__
-    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;
+#endif
 
 typedef struct _PROCESS_INFO {
     DWORD    Offset;             /* 00 offset to next PROCESS_INFO ok*/
@@ -996,37 +618,12 @@
 #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;
 
-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);
 
 typedef struct _LDR_RESOURCE_INFO
@@ -1104,89 +701,19 @@
   ULONG  NumberOfExclusiveWaiters;
 } DEBUG_LOCK_INFORMATION, *PDEBUG_LOCK_INFORMATION;
 
-typedef struct _PORT_MESSAGE_HEADER {
-  USHORT DataSize;
-  USHORT MessageSize;
-  USHORT MessageType;
-  USHORT VirtualRangesOffset;
-  CLIENT_ID ClientId;
-  ULONG MessageId;
-  ULONG SectionSize;
-} PORT_MESSAGE_HEADER, *PPORT_MESSAGE_HEADER, PORT_MESSAGE, *PPORT_MESSAGE;
-
 /***********************************************************************
  * Defines
  */
 
-/* flags for NtCreateFile and NtOpenFile */
-#define FILE_DIRECTORY_FILE             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
-#define FILE_COMPLETE_IF_OPLOCKED       0x00000100
-#define FILE_NO_EA_KNOWLEDGE            0x00000200
-#define FILE_OPEN_FOR_RECOVERY          0x00000400
-#define FILE_RANDOM_ACCESS              0x00000800
-#define FILE_DELETE_ON_CLOSE            0x00001000
-#define FILE_OPEN_BY_FILE_ID            0x00002000
-#define FILE_OPEN_FOR_BACKUP_INTENT     0x00004000
-#define FILE_NO_COMPRESSION             0x00008000
-#define FILE_RESERVE_OPFILTER           0x00100000
-#define FILE_TRANSACTED_MODE            0x00200000
-#define FILE_OPEN_OFFLINE_FILE          0x00400000
-
-#define FILE_ATTRIBUTE_VALID_FLAGS      0x00007fb7
-#define FILE_ATTRIBUTE_VALID_SET_FLAGS  0x000031a7
-
-/* status for NtCreateFile or NtOpenFile */
-#define FILE_SUPERSEDED                 0
-#define FILE_OPENED                     1
-#define FILE_CREATED                    2
-#define FILE_OVERWRITTEN                3
-#define FILE_EXISTS                     4
-#define FILE_DOES_NOT_EXIST             5
-
-/* disposition for NtCreateFile */
-#define FILE_SUPERSEDE                  0
-#define FILE_OPEN                       1
-#define FILE_CREATE                     2
-#define FILE_OPEN_IF                    3
-#define FILE_OVERWRITE                  4
-#define FILE_OVERWRITE_IF               5
-#define FILE_MAXIMUM_DISPOSITION        5
-
-/* Characteristics of a File System */
-#define FILE_REMOVABLE_MEDIA            0x00000001
-#define FILE_READ_ONLY_DEVICE           0x00000002
-#define FILE_FLOPPY_DISKETTE            0x00000004
-#define FILE_WRITE_ONE_MEDIA            0x00000008
-#define FILE_REMOTE_DEVICE              0x00000010
-#define FILE_DEVICE_IS_MOUNTED          0x00000020
-#define FILE_VIRTUAL_VOLUME             0x00000040
-
 #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)
 
 typedef void (CALLBACK *PNTAPCFUNC)(ULONG_PTR,ULONG_PTR,ULONG_PTR); /* FIXME: not the right name */
-typedef void (CALLBACK *PRTL_THREAD_START_ROUTINE)(LPVOID); /* FIXME: not the right name */
 
 
 /* DbgPrintEx default levels */
@@ -1235,14 +762,11 @@
 NTSTATUS  WINAPI NtCreateNamedPipeFile(PHANDLE,ULONG,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,PLARGE_INTEGER);
 NTSTATUS  WINAPI NtCreateSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const LARGE_INTEGER*,ULONG,ULONG,HANDLE);
 NTSTATUS  WINAPI NtCreateSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,ULONG);
-NTSTATUS  WINAPI NtCreateTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*, TIMER_TYPE);
 NTSTATUS  WINAPI NtDelayExecution(BOOLEAN,const LARGE_INTEGER*);
 NTSTATUS  WINAPI NtDeleteKey(HKEY);
 NTSTATUS  WINAPI NtDeleteValueKey(HKEY,const UNICODE_STRING *);
 NTSTATUS  WINAPI NtDeviceIoControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
 NTSTATUS  WINAPI NtDuplicateObject(HANDLE,HANDLE,HANDLE,PHANDLE,ACCESS_MASK,ULONG,ULONG);
-NTSTATUS  WINAPI NtEnumerateKey(HKEY,ULONG,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
-NTSTATUS  WINAPI NtEnumerateValueKey(HKEY,ULONG,KEY_VALUE_INFORMATION_CLASS,PVOID,ULONG,PULONG);
 NTSTATUS  WINAPI NtFlushBuffersFile(HANDLE,IO_STATUS_BLOCK*);
 NTSTATUS  WINAPI NtFlushInstructionCache(HANDLE,LPCVOID,ULONG);
 NTSTATUS  WINAPI NtFlushKey(HKEY);
@@ -1250,12 +774,10 @@
 NTSTATUS  WINAPI NtFreeVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
 NTSTATUS  WINAPI NtGetContextThread(HANDLE,CONTEXT*);
 NTSTATUS  WINAPI NtImpersonateAnonymousToken(HANDLE);
-NTSTATUS  WINAPI NtImpersonateClientOfPort(HANDLE,PPORT_MESSAGE);
 NTSTATUS  WINAPI NtImpersonateThread(HANDLE,HANDLE,PSECURITY_QUALITY_OF_SERVICE);
 NTSTATUS  WINAPI NtLoadKey(const OBJECT_ATTRIBUTES *,const OBJECT_ATTRIBUTES *);
 NTSTATUS  WINAPI NtLockFile(HANDLE,HANDLE,PIO_APC_ROUTINE,void*,PIO_STATUS_BLOCK,PLARGE_INTEGER,PLARGE_INTEGER,ULONG*,BOOLEAN,BOOLEAN);
 NTSTATUS  WINAPI NtLockVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG);
-NTSTATUS  WINAPI NtMapViewOfSection(HANDLE,HANDLE,PVOID*,ULONG,ULONG,const LARGE_INTEGER*,ULONG*,SECTION_INHERIT,ULONG,ULONG);
 NTSTATUS  WINAPI NtNotifyChangeKey(HKEY,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);
@@ -1263,32 +785,25 @@
 NTSTATUS  WINAPI NtOpenKey(PHKEY,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
 NTSTATUS  WINAPI NtOpenProcessToken(HANDLE,DWORD,HANDLE *);
 NTSTATUS  WINAPI NtOpenSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
-NTSTATUS  WINAPI NtOpenThread(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*);
 NTSTATUS  WINAPI NtOpenThreadToken(HANDLE,DWORD,BOOLEAN,HANDLE *);
 NTSTATUS  WINAPI NtOpenTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*);
 NTSTATUS  WINAPI NtProtectVirtualMemory(HANDLE,PVOID*,ULONG*,ULONG,ULONG*);
 NTSTATUS  WINAPI NtPulseEvent(HANDLE,PULONG);
 NTSTATUS  WINAPI NtQueueApcThread(HANDLE,PNTAPCFUNC,ULONG_PTR,ULONG_PTR,ULONG_PTR);
-NTSTATUS  WINAPI NtQueryAttributesFile(const OBJECT_ATTRIBUTES*,FILE_BASIC_INFORMATION*);
 NTSTATUS  WINAPI NtQueryDefaultLocale(BOOLEAN,LCID*);
 NTSTATUS  WINAPI NtQueryDefaultUILanguage(LANGID*);
 NTSTATUS  WINAPI NtQueryDirectoryFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS,BOOLEAN,PUNICODE_STRING,BOOLEAN);
 NTSTATUS  WINAPI NtQueryEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,BOOLEAN,PVOID,ULONG,PVOID,BOOLEAN);
-NTSTATUS  WINAPI NtQueryFullAttributesFile(const OBJECT_ATTRIBUTES*,FILE_NETWORK_OPEN_INFORMATION*);
 NTSTATUS  WINAPI NtQueryInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,LONG,FILE_INFORMATION_CLASS);
 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 NtQueryInstallUILanguage(LANGID*);
-NTSTATUS  WINAPI NtQueryKey(HKEY,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
 NTSTATUS  WINAPI NtQueryMultipleValueKey(HKEY,PVALENTW,ULONG,PVOID,ULONG,PULONG);
-NTSTATUS  WINAPI NtQueryObject(HANDLE, OBJECT_INFORMATION_CLASS, 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(HKEY,const UNICODE_STRING *,KEY_VALUE_INFORMATION_CLASS,void *,DWORD,DWORD *);
 NTSTATUS  WINAPI NtQueryVirtualMemory(HANDLE,LPCVOID,MEMORY_INFORMATION_CLASS,PVOID,ULONG,ULONG*);
-NTSTATUS  WINAPI NtQueryVolumeInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS);
 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 NtReadVirtualMemory(HANDLE,const void*,void*,SIZE_T,SIZE_T*);
@@ -1306,7 +821,6 @@
 NTSTATUS  WINAPI NtSetEvent(HANDLE,PULONG);
 NTSTATUS  WINAPI NtSetInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS);
 NTSTATUS  WINAPI NtSetInformationKey(HKEY,const int,PVOID,ULONG);
-NTSTATUS  WINAPI NtSetInformationObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG);
 NTSTATUS  WINAPI NtSetInformationThread(HANDLE,THREADINFOCLASS,LPCVOID,ULONG);
 NTSTATUS  WINAPI NtSetInformationToken(HANDLE,TOKEN_INFORMATION_CLASS,PVOID,ULONG);
 NTSTATUS  WINAPI NtSetIoCompletion(HANDLE,ULONG,ULONG,NTSTATUS,ULONG);
@@ -1342,61 +856,37 @@
 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 RtlAreAllAccessesGranted(ACCESS_MASK,ACCESS_MASK);
 BOOLEAN   WINAPI RtlAreAnyAccessesGranted(ACCESS_MASK,ACCESS_MASK);
-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);
 DWORD     WINAPI RtlComputeCrc32(DWORD,PBYTE,INT);
 NTSTATUS  WINAPI RtlConvertSidToUnicodeString(PUNICODE_STRING,PSID,BOOLEAN);
-LONGLONG  WINAPI RtlConvertLongToLargeInteger(LONG);
-ULONGLONG WINAPI RtlConvertUlongToLargeInteger(ULONG);
 void      WINAPI RtlCopyLuid(PLUID,const LUID*);
 void      WINAPI RtlCopyLuidAndAttributesArray(ULONG,const LUID_AND_ATTRIBUTES*,PLUID_AND_ATTRIBUTES);
 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);
 NTSTATUS  WINAPI RtlCreateEnvironment(BOOLEAN, PWSTR*);
 HANDLE    WINAPI RtlCreateHeap(ULONG,PVOID,ULONG,ULONG,PVOID,PRTL_HEAP_DEFINITION);
-NTSTATUS  WINAPI RtlCreateProcessParameters(RTL_USER_PROCESS_PARAMETERS**,const UNICODE_STRING*,
-                                            const UNICODE_STRING*,const UNICODE_STRING*,
-                                            const UNICODE_STRING*,PWSTR,const UNICODE_STRING*,
-                                            const UNICODE_STRING*,const UNICODE_STRING*,
-                                            const UNICODE_STRING*);
-NTSTATUS  WINAPI RtlCreateSecurityDescriptor(PSECURITY_DESCRIPTOR,DWORD);
 BOOLEAN   WINAPI RtlCreateUnicodeString(PUNICODE_STRING,LPCWSTR);
 BOOLEAN   WINAPI RtlCreateUnicodeStringFromAsciiz(PUNICODE_STRING,LPCSTR);
-NTSTATUS  WINAPI RtlCreateUserThread(HANDLE,const SECURITY_DESCRIPTOR*,BOOLEAN,PVOID,SIZE_T,SIZE_T,PRTL_THREAD_START_ROUTINE,void*,HANDLE*,CLIENT_ID*);
 
 NTSTATUS  WINAPI RtlDeleteAce(PACL,DWORD);
 NTSTATUS  WINAPI RtlDeleteCriticalSection(RTL_CRITICAL_SECTION *);
 void      WINAPI RtlDeleteResource(LPRTL_RWLOCK);
 DWORD     WINAPI RtlDeleteSecurityObject(DWORD);
-PRTL_USER_PROCESS_PARAMETERS WINAPI RtlDeNormalizeProcessParams(RTL_USER_PROCESS_PARAMETERS*);
 NTSTATUS  WINAPI RtlDestroyEnvironment(PWSTR);
 HANDLE    WINAPI RtlDestroyHeap(HANDLE);
-void      WINAPI RtlDestroyProcessParameters(RTL_USER_PROCESS_PARAMETERS*);
 DOS_PATHNAME_TYPE WINAPI RtlDetermineDosPathNameType_U(PCWSTR);
 BOOLEAN   WINAPI RtlDoesFileExists_U(LPCWSTR);
-BOOLEAN   WINAPI RtlDosPathNameToNtPathName_U(PCWSTR,PUNICODE_STRING,PWSTR*,CURDIR*);
 ULONG     WINAPI RtlDosSearchPath_U(LPCWSTR, LPCWSTR, LPCWSTR, ULONG, LPWSTR, LPWSTR*);
 WCHAR     WINAPI RtlDowncaseUnicodeChar(WCHAR);
 NTSTATUS  WINAPI RtlDowncaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
 void      WINAPI RtlDumpResource(LPRTL_RWLOCK);
 NTSTATUS  WINAPI RtlDuplicateUnicodeString(int,const UNICODE_STRING*,UNICODE_STRING*);
 
-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*);
 NTSTATUS  WINAPI RtlEqualComputerName(const UNICODE_STRING*,const UNICODE_STRING*);
@@ -1404,33 +894,13 @@
 BOOLEAN   WINAPI RtlEqualLuid(const LUID*,const LUID*);
 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);
 NTSTATUS  WINAPI RtlExpandEnvironmentStrings_U(PWSTR, const UNICODE_STRING*, UNICODE_STRING*, ULONG*);
-LONGLONG  WINAPI RtlExtendedMagicDivide(LONGLONG,LONGLONG,INT);
-LONGLONG  WINAPI RtlExtendedIntegerMultiply(LONGLONG,INT);
-LONGLONG  WINAPI RtlExtendedLargeIntegerDivide(LONGLONG,INT,INT *);
 
 NTSTATUS  WINAPI RtlFindCharInUnicodeString(int,const UNICODE_STRING*,const UNICODE_STRING*,USHORT*);
-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);
 NTSTATUS  WINAPI RtlFindMessage(HMODULE,ULONG,ULONG,ULONG,const MESSAGE_RESOURCE_ENTRY**);
-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);
 NTSTATUS  WINAPI RtlFormatMessage(LPWSTR,UCHAR,BOOLEAN,BOOLEAN,BOOLEAN,va_list *,LPWSTR,ULONG);
-void      WINAPI RtlFreeAnsiString(PANSI_STRING);
 BOOLEAN   WINAPI RtlFreeHeap(HANDLE,ULONG,PVOID);
 void      WINAPI RtlFreeOemString(POEM_STRING);
 DWORD     WINAPI RtlFreeSid(PSID);
@@ -1448,7 +918,6 @@
 NTSTATUS  WINAPI RtlGetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
 ULONG     WINAPI RtlGetProcessHeaps(ULONG,HANDLE*);
 NTSTATUS  WINAPI RtlGetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
-NTSTATUS  WINAPI RtlGetVersion(RTL_OSVERSIONINFOEXW*);
 
 PSID_IDENTIFIER_AUTHORITY WINAPI RtlIdentifierAuthoritySid(PSID);
 PVOID     WINAPI RtlImageDirectoryEntryToData(HMODULE,BOOL,WORD,ULONG *);
@@ -1456,49 +925,33 @@
 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 RtlInitString(PSTRING,PCSZ);
 void      WINAPI RtlInitUnicodeString(PUNICODE_STRING,PCWSTR);
 NTSTATUS  WINAPI RtlInitUnicodeStringEx(PUNICODE_STRING,PCWSTR);
 NTSTATUS  WINAPI RtlInitializeCriticalSection(RTL_CRITICAL_SECTION *);
 NTSTATUS  WINAPI RtlInitializeCriticalSectionAndSpinCount(RTL_CRITICAL_SECTION *,DWORD);
-void      WINAPI RtlInitializeBitMap(PRTL_BITMAP,PULONG,ULONG);
 void      WINAPI RtlInitializeResource(LPRTL_RWLOCK);
 BOOL      WINAPI RtlInitializeSid(PSID,PSID_IDENTIFIER_AUTHORITY,BYTE);
-
-NTSTATUS  WINAPI RtlInt64ToUnicodeString(ULONGLONG,ULONG,UNICODE_STRING *);
 NTSTATUS  WINAPI RtlIntegerToChar(ULONG,ULONG,ULONG,PCHAR);
-NTSTATUS  WINAPI RtlIntegerToUnicodeString(ULONG,ULONG,UNICODE_STRING *);
 ULONG     WINAPI RtlIsDosDeviceName_U(PCWSTR);
 BOOLEAN   WINAPI RtlIsNameLegalDOS8Dot3(const UNICODE_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 RtlLargeIntegerToChar(const ULONGLONG *,ULONG,ULONG,PCHAR);
 NTSTATUS  WINAPI RtlLeaveCriticalSection(RTL_CRITICAL_SECTION *);
 DWORD     WINAPI RtlLengthRequiredSid(DWORD);
-ULONG     WINAPI RtlLengthSecurityDescriptor(PSECURITY_DESCRIPTOR);
 DWORD     WINAPI RtlLengthSid(PSID);
 NTSTATUS  WINAPI RtlLocalTimeToSystemTime(const LARGE_INTEGER*,PLARGE_INTEGER);
 BOOLEAN   WINAPI RtlLockHeap(HANDLE);
 
 NTSTATUS  WINAPI RtlMakeSelfRelativeSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,LPDWORD);
-void      WINAPI RtlMapGenericMask(PACCESS_MASK,const GENERIC_MAPPING*);
 NTSTATUS  WINAPI RtlMultiByteToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
 NTSTATUS  WINAPI RtlMultiByteToUnicodeSize(DWORD*,LPCSTR,UINT);
 
 DWORD     WINAPI RtlNewSecurityObject(DWORD,DWORD,DWORD,DWORD,DWORD,DWORD);
-PRTL_USER_PROCESS_PARAMETERS WINAPI RtlNormalizeProcessParams(RTL_USER_PROCESS_PARAMETERS*);
 ULONG     WINAPI RtlNtStatusToDosError(NTSTATUS);
 ULONG     WINAPI RtlNtStatusToDosErrorNoTeb(NTSTATUS);
-ULONG     WINAPI RtlNumberOfSetBits(PCRTL_BITMAP);
-ULONG     WINAPI RtlNumberOfClearBits(PCRTL_BITMAP);
 
 UINT      WINAPI RtlOemStringToUnicodeSize(const STRING*);
 NTSTATUS  WINAPI RtlOemStringToUnicodeString(UNICODE_STRING*,const STRING*,BOOLEAN);
@@ -1506,7 +959,6 @@
 DWORD     WINAPI RtlOpenCurrentUser(ACCESS_MASK,PHKEY);
 
 BOOLEAN   WINAPI RtlPrefixString(const STRING*,const STRING*,BOOLEAN);
-BOOLEAN   WINAPI RtlPrefixUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
 
 NTSTATUS  WINAPI RtlQueryEnvironmentVariable_U(PWSTR,PUNICODE_STRING,PUNICODE_STRING);
 NTSTATUS  WINAPI RtlQueryInformationAcl(PACL,LPVOID,DWORD,ACL_INFORMATION_CLASS);
@@ -1525,12 +977,9 @@
 void      WINAPI RtlSecondsSince1980ToTime(DWORD,LARGE_INTEGER *);
 NTSTATUS  WINAPI RtlSelfRelativeToAbsoluteSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,
                                              PDWORD,PACL,PDWORD,PACL,PDWORD,PSID,PDWORD,PSID,PDWORD);
-void      WINAPI RtlSetAllBits(PRTL_BITMAP);
-void      WINAPI RtlSetBits(PRTL_BITMAP,ULONG,ULONG);
 ULONG     WINAPI RtlSetCriticalSectionSpinCount(RTL_CRITICAL_SECTION*,ULONG);
 NTSTATUS  WINAPI RtlSetCurrentDirectory_U(const UNICODE_STRING*);
 void      WINAPI RtlSetCurrentEnvironment(PWSTR, PWSTR*);
-NTSTATUS  WINAPI RtlSetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
 NTSTATUS  WINAPI RtlSetEnvironmentVariable(PWSTR*,PUNICODE_STRING,PUNICODE_STRING);
 NTSTATUS  WINAPI RtlSetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
 NTSTATUS  WINAPI RtlSetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
@@ -1542,17 +991,12 @@
 LPBYTE    WINAPI RtlSubAuthorityCountSid(PSID);
 NTSTATUS  WINAPI RtlSystemTimeToLocalTime(const LARGE_INTEGER*,PLARGE_INTEGER);
 
-void      WINAPI RtlTimeToTimeFields(const LARGE_INTEGER*,PTIME_FIELDS);
-BOOLEAN   WINAPI RtlTimeFieldsToTime(PTIME_FIELDS,PLARGE_INTEGER);
-void      WINAPI RtlTimeToElapsedTimeFields(const LARGE_INTEGER *,PTIME_FIELDS);
 BOOLEAN   WINAPI RtlTimeToSecondsSince1970(const LARGE_INTEGER *,LPDWORD);
 BOOLEAN   WINAPI RtlTimeToSecondsSince1980(const LARGE_INTEGER *,LPDWORD);
 BOOL      WINAPI RtlTryEnterCriticalSection(RTL_CRITICAL_SECTION *);
 
-ULONGLONG __cdecl RtlUlonglongByteSwap(ULONGLONG);
 DWORD     WINAPI RtlUnicodeStringToAnsiSize(const UNICODE_STRING*);
 NTSTATUS  WINAPI RtlUnicodeStringToAnsiString(PANSI_STRING,PCUNICODE_STRING,BOOLEAN);
-NTSTATUS  WINAPI RtlUnicodeStringToInteger(const UNICODE_STRING *,ULONG,ULONG *);
 DWORD     WINAPI RtlUnicodeStringToOemSize(const UNICODE_STRING*);
 NTSTATUS  WINAPI RtlUnicodeStringToOemString(POEM_STRING,PCUNICODE_STRING,BOOLEAN);
 NTSTATUS  WINAPI RtlUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
@@ -1565,21 +1009,15 @@
 void      WINAPI RtlUnwind2(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT);
 void      WINAPI RtlUnwindEx(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT,PUNWIND_HISTORY_TABLE);
 #endif
-WCHAR     WINAPI RtlUpcaseUnicodeChar(WCHAR);
-NTSTATUS  WINAPI RtlUpcaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING *,BOOLEAN);
 NTSTATUS  WINAPI RtlUpcaseUnicodeStringToAnsiString(STRING*,const UNICODE_STRING*,BOOLEAN);
 NTSTATUS  WINAPI RtlUpcaseUnicodeStringToCountedOemString(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);
-CHAR      WINAPI RtlUpperChar(CHAR);
-void      WINAPI RtlUpperString(STRING *,const STRING *);
 
-NTSTATUS  WINAPI RtlValidSecurityDescriptor(PSECURITY_DESCRIPTOR);
 BOOLEAN   WINAPI RtlValidAcl(PACL);
 BOOLEAN   WINAPI RtlValidSid(PSID);
 BOOLEAN   WINAPI RtlValidateHeap(HANDLE,ULONG,LPCVOID);
-NTSTATUS  WINAPI RtlVerifyVersionInfo(const RTL_OSVERSIONINFOEXW*,DWORD,DWORDLONG);
 
 NTSTATUS  WINAPI RtlWalkHeap(HANDLE,PVOID);
 
@@ -1595,49 +1033,6 @@
  * 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->Buffer[ulBit >> 5] & (1 << (ulBit & 31)))
-        return TRUE;
-    return FALSE;
-}
-
-/* These are implemented as __fastcall, so we can't let Winelib apps link with them */
-inline static USHORT RtlUshortByteSwap(USHORT s)
-{
-    return (s >> 8) | (s << 8);
-}
-inline static ULONG RtlUlongByteSwap(ULONG i)
-{
-#if defined(__i386__) && defined(__GNUC__)
-    ULONG ret;
-    __asm__("bswap %0" : "=r" (ret) : "0" (i) );
-    return ret;
-#else
-    return ((ULONG)RtlUshortByteSwap((USHORT)i) << 16) | RtlUshortByteSwap((USHORT)(i >> 16));
-#endif
-}
 
 /*************************************************************************
  * Loader functions and structures.
Index: misc/registry.c
===================================================================
RCS file: /var/cvs/wine/misc/registry.c,v
retrieving revision 1.148
diff -u -r1.148 registry.c
--- misc/registry.c	18 Aug 2004 00:04:58 -0000	1.148
+++ misc/registry.c	24 Aug 2004 12:40:08 -0000
@@ -64,6 +64,7 @@
 #include "winbase.h"
 #include "winerror.h"
 #include "winioctl.h"
+#include "ddk/ntddk.h"
 #include "ntddscsi.h"
 
 #include "wine/winbase16.h"
Index: server/fd.c
===================================================================
RCS file: /var/cvs/wine/server/fd.c,v
retrieving revision 1.22
diff -u -r1.22 fd.c
--- server/fd.c	18 Aug 2004 00:04:58 -0000	1.22
+++ server/fd.c	24 Aug 2004 13:28:29 -0000
@@ -46,7 +46,7 @@
 
 #include "winbase.h"
 #include "winreg.h"
-#include "winternl.h"
+#include "ddk/ntddk.h"
 
 /* Because of the stupid Posix locking semantics, we need to keep
  * track of all file descriptors referencing a given file, and not
Index: server/file.c
===================================================================
RCS file: /var/cvs/wine/server/file.c,v
retrieving revision 1.88
diff -u -r1.88 file.c
--- server/file.c	18 Aug 2004 00:04:58 -0000	1.88
+++ server/file.c	24 Aug 2004 13:28:49 -0000
@@ -44,7 +44,7 @@
 #include "windef.h"
 #include "winbase.h"
 #include "winreg.h"
-#include "winternl.h"
+#include "ddk/ntddk.h"
 
 #include "file.h"
 #include "handle.h"
Index: server/registry.c
===================================================================
RCS file: /var/cvs/wine/server/registry.c,v
retrieving revision 1.59
diff -u -r1.59 registry.c
--- server/registry.c	14 May 2004 00:45:11 -0000	1.59
+++ server/registry.c	24 Aug 2004 13:33:08 -0000
@@ -47,7 +47,7 @@
 
 #include "winbase.h"
 #include "winreg.h"
-#include "winternl.h"
+#include "ddk/ntddk.h"
 #include "wine/library.h"
 
 struct notify
Index: server/serial.c
===================================================================
RCS file: /var/cvs/wine/server/serial.c,v
retrieving revision 1.35
diff -u -r1.35 serial.c
--- server/serial.c	18 Aug 2004 00:04:58 -0000	1.35
+++ server/serial.c	24 Aug 2004 13:34:51 -0000
@@ -47,7 +47,7 @@
 #include "windef.h"
 #include "winbase.h"
 #include "winreg.h"
-#include "winternl.h"
+#include "ddk/ntddk.h"
 
 #include "file.h"
 #include "handle.h"
Index: server/trace.c
===================================================================
RCS file: /var/cvs/wine/server/trace.c,v
retrieving revision 1.212
diff -u -r1.212 trace.c
--- server/trace.c	18 Aug 2004 00:04:58 -0000	1.212
+++ server/trace.c	24 Aug 2004 13:36:12 -0000
@@ -34,7 +34,7 @@
 #include "winbase.h"
 #include "wincon.h"
 #include "winreg.h"
-#include "winternl.h"
+#include "ddk/ntddk.h"
 #include "request.h"
 #include "unicode.h"
 
--- /dev/null	2004-08-10 11:44:31.000000000 +0200
+++ include/ddk/ntddk.h	2004-08-24 19:13:16.000000000 +0200
@@ -0,0 +1,841 @@
+/*
+ * Device driver APIs and data structures
+ *
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#ifndef _NTDDK_
+#define _NTDDK_
+
+#include <excpt.h>
+#include <ddk/ntdef.h>
+#include <ntstatus.h>
+/* #include <bugcodes.h> */
+/* #include <ntiologc.h> */
+
+
+/***********************************************************************
+ * Defines
+ */
+
+/* flags for NtCreateFile and NtOpenFile */
+#define FILE_DIRECTORY_FILE             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
+#define FILE_COMPLETE_IF_OPLOCKED       0x00000100
+#define FILE_NO_EA_KNOWLEDGE            0x00000200
+#define FILE_OPEN_FOR_RECOVERY          0x00000400
+#define FILE_RANDOM_ACCESS              0x00000800
+#define FILE_DELETE_ON_CLOSE            0x00001000
+#define FILE_OPEN_BY_FILE_ID            0x00002000
+#define FILE_OPEN_FOR_BACKUP_INTENT     0x00004000
+#define FILE_NO_COMPRESSION             0x00008000
+#define FILE_RESERVE_OPFILTER           0x00100000
+#define FILE_OPEN_REPARSE_POINT         0x00200000
+#define FILE_OPEN_NO_RECALL             0x00400000
+#define FILE_OPEN_FOR_FREE_SPACE_QUERY  0x00800000
+
+#define FILE_ATTRIBUTE_VALID_FLAGS      0x00007fb7
+#define FILE_ATTRIBUTE_VALID_SET_FLAGS  0x000031a7
+
+/* status for NtCreateFile or NtOpenFile */
+#define FILE_SUPERSEDED                 0
+#define FILE_OPENED                     1
+#define FILE_CREATED                    2
+#define FILE_OVERWRITTEN                3
+#define FILE_EXISTS                     4
+#define FILE_DOES_NOT_EXIST             5
+
+/* disposition for NtCreateFile */
+#define FILE_SUPERSEDE                  0
+#define FILE_OPEN                       1
+#define FILE_CREATE                     2
+#define FILE_OPEN_IF                    3
+#define FILE_OVERWRITE                  4
+#define FILE_OVERWRITE_IF               5
+#define FILE_MAXIMUM_DISPOSITION        5
+
+/* Characteristics of a File System */
+#define FILE_REMOVABLE_MEDIA            0x00000001
+#define FILE_READ_ONLY_DEVICE           0x00000002
+#define FILE_FLOPPY_DISKETTE            0x00000004
+#define FILE_WRITE_ONCE_MEDIA           0x00000008
+#define FILE_REMOTE_DEVICE              0x00000010
+#define FILE_DEVICE_IS_MOUNTED          0x00000020
+#define FILE_VIRTUAL_VOLUME             0x00000040
+#define FILE_AUTOGENERATED_DEVICE_NAME  0x00000080
+#define FILE_DEVICE_SECURE_OPEN         0x00000100
+
+
+/***********************************************************************
+ * Enums
+ */
+
+#ifndef FILE_INFORMATION_CLASS_DEFINED
+#define FILE_INFORMATION_CLASS_DEFINED
+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;
+#endif
+
+typedef struct _FILE_DIRECTORY_INFORMATION {
+    ULONG               NextEntryOffset;
+    ULONG               FileIndex;
+    LARGE_INTEGER       CreationTime;
+    LARGE_INTEGER       LastAccessTime;
+    LARGE_INTEGER       LastWriteTime;
+    LARGE_INTEGER       ChangeTime;
+    LARGE_INTEGER       EndOfFile;
+    LARGE_INTEGER       AllocationSize;
+    ULONG               FileAttributes;
+    ULONG               FileNameLength;
+    WCHAR               FileName[ANYSIZE_ARRAY];
+} FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
+
+typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
+    ULONG               NextEntryOffset;
+    ULONG               FileIndex;
+    LARGE_INTEGER       CreationTime;
+    LARGE_INTEGER       LastAccessTime;
+    LARGE_INTEGER       LastWriteTime;
+    LARGE_INTEGER       ChangeTime;
+    LARGE_INTEGER       EndOfFile;
+    LARGE_INTEGER       AllocationSize;
+    ULONG               FileAttributes;
+    ULONG               FileNameLength;
+    ULONG               EaSize;
+    WCHAR               FileName[ANYSIZE_ARRAY];
+} FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION,
+  FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION;
+
+typedef struct _FILE_BOTH_DIRECTORY_INFORMATION {
+    ULONG               NextEntryOffset;
+    ULONG               FileIndex;
+    LARGE_INTEGER       CreationTime;
+    LARGE_INTEGER       LastAccessTime;
+    LARGE_INTEGER       LastWriteTime;
+    LARGE_INTEGER       ChangeTime;
+    LARGE_INTEGER       EndOfFile;
+    LARGE_INTEGER       AllocationSize;
+    ULONG               FileAttributes;
+    ULONG               FileNameLength;
+    ULONG               EaSize;
+    CHAR                ShortNameLength;
+    WCHAR               ShortName[12];
+    WCHAR               FileName[ANYSIZE_ARRAY];
+} FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION,
+  FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
+
+typedef struct _FILE_BASIC_INFORMATION {
+    LARGE_INTEGER CreationTime;
+    LARGE_INTEGER LastAccessTime;
+    LARGE_INTEGER LastWriteTime;
+    LARGE_INTEGER ChangeTime;
+    ULONG FileAttributes;
+} FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
+
+typedef struct _FILE_STANDARD_INFORMATION {
+    LARGE_INTEGER AllocationSize;
+    LARGE_INTEGER EndOfFile;
+    ULONG NumberOfLinks;
+    BOOLEAN DeletePending;
+    BOOLEAN Directory;
+} FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
+
+typedef struct _FILE_INTERNAL_INFORMATION {
+    LARGE_INTEGER IndexNumber;
+} FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
+
+typedef struct _FILE_EA_INFORMATION {
+    ULONG EaSize;
+} FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
+
+typedef struct _FILE_ACCESS_INFORMATION {
+    ACCESS_MASK AccessFlags;
+} FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
+
+typedef struct _FILE_NAME_INFORMATION {
+    ULONG FileNameLength;
+    WCHAR FileName[1];
+} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
+
+typedef struct _FILE_RENAME_INFORMATION {
+    BOOLEAN Replace;
+    HANDLE RootDir;
+    ULONG FileNameLength;
+    WCHAR FileName[1];
+} FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
+
+typedef struct _FILE_NAMES_INFORMATION {
+    ULONG NextEntryOffset;
+    ULONG FileIndex;
+    ULONG FileNameLength;
+    WCHAR FileName[1];
+} FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
+
+typedef struct _FILE_DISPOSITION_INFORMATION {
+    BOOLEAN DoDeleteFile;
+} FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
+
+typedef struct _FILE_POSITION_INFORMATION {
+    LARGE_INTEGER CurrentByteOffset;
+} FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
+
+typedef struct _FILE_ALIGNMENT_INFORMATION {
+    ULONG AlignmentRequirement;
+} FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
+
+typedef struct _FILE_ALLOCATION_INFORMATION {
+    LARGE_INTEGER AllocationSize;
+} FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
+
+typedef struct _FILE_END_OF_FILE_INFORMATION {
+    LARGE_INTEGER EndOfFile;
+} FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
+
+typedef struct _FILE_NETWORK_OPEN_INFORMATION {
+    LARGE_INTEGER CreationTime;
+    LARGE_INTEGER LastAccessTime;
+    LARGE_INTEGER LastWriteTime;
+    LARGE_INTEGER ChangeTime;
+    LARGE_INTEGER AllocationSize;
+    LARGE_INTEGER EndOfFile;
+    ULONG FileAttributes;
+} FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
+
+typedef struct _FILE_FULL_EA_INFORMATION {
+    ULONG NextEntryOffset;
+    UCHAR Flags;
+    UCHAR EaNameLength;
+    USHORT EaValueLength;
+    CHAR EaName[1];
+} FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
+
+typedef struct _FILE_MODE_INFORMATION {
+    ULONG Mode;
+} FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
+
+typedef struct _FILE_STREAM_INFORMATION
+{
+    ULONG NextEntryOffset;
+    ULONG StreamNameLength;
+    LARGE_INTEGER StreamSize;
+    LARGE_INTEGER StreamAllocationSize;
+    WCHAR StreamName[1];
+} FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
+
+typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
+{
+    ULONG FileAttributes;
+    ULONG ReparseTag;
+} FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION;
+
+typedef struct _FILE_ALL_INFORMATION
+{
+    FILE_BASIC_INFORMATION     BasicInformation;
+    FILE_STANDARD_INFORMATION  StandardInformation;
+    FILE_INTERNAL_INFORMATION  InternalInformation;
+    FILE_EA_INFORMATION        EaInformation;
+    FILE_ACCESS_INFORMATION    AccessInformation;
+    FILE_POSITION_INFORMATION  PositionInformation;
+    FILE_MODE_INFORMATION      ModeInformation;
+    FILE_ALIGNMENT_INFORMATION AlignmentInformation;
+    FILE_NAME_INFORMATION      NameInformation;
+} FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
+
+typedef enum _FSINFOCLASS {
+    FileFsVolumeInformation = 1,
+    FileFsLabelInformation,
+    FileFsSizeInformation,
+    FileFsDeviceInformation,
+    FileFsAttributeInformation,
+    FileFsControlInformation,
+    FileFsFullSizeInformation,
+    FileFsObjectIdInformation,
+    FileFsMaximumInformation
+} FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
+
+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 {
+    ObjectBasicInformation,
+    ObjectNameInformation,
+    ObjectTypeInformation,
+    ObjectAllInformation,
+    ObjectDataInformation
+} OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS;
+
+#ifndef PROCESSINFOCLASS_DEFINED
+#define PROCESSINFOCLASS_DEFINED
+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;
+#endif
+
+typedef enum _SECTION_INHERIT {
+    ViewShare = 1,
+    ViewUnmap = 2
+} SECTION_INHERIT;
+
+typedef enum _TIMER_TYPE {
+    NotificationTimer,
+    SynchronizationTimer
+} TIMER_TYPE;
+
+#ifndef THREADINFOCLASS_DEFINED
+#define THREADINFOCLASS_DEFINED
+typedef enum _THREADINFOCLASS {
+    ThreadBasicInformation,
+    ThreadTimes,
+    ThreadPriority,
+    ThreadBasePriority,
+    ThreadAffinityMask,
+    ThreadImpersonationToken,
+    ThreadDescriptorTableEntry,
+    ThreadEnableAlignmentFaultFixup,
+    ThreadEventPair_Reusable,
+    ThreadQuerySetWin32StartAddress,
+    ThreadZeroTlsCell,
+    ThreadPerformanceCount,
+    ThreadAmILastThread,
+    ThreadIdealProcessor,
+    ThreadPriorityBoost,
+    ThreadSetTlsArrayAddress,
+    ThreadIsIoPending,
+    MaxThreadInfoClass
+} THREADINFOCLASS;
+#endif
+
+
+/***********************************************************************
+ * Types and data structures
+ */
+
+typedef struct _CLIENT_ID
+{
+   HANDLE UniqueProcess;
+   HANDLE UniqueThread;
+} CLIENT_ID, *PCLIENT_ID;
+
+typedef struct tagRTL_BITMAP {
+    ULONG  SizeOfBitMap; /* Number of bits in the bitmap */
+    PULONG Buffer; /* Bitmap data, assumed sized to a DWORD boundary */
+} RTL_BITMAP, *PRTL_BITMAP;
+
+typedef const RTL_BITMAP *PCRTL_BITMAP;
+
+typedef struct tagRTL_BITMAP_RUN {
+    ULONG StartingIndex; /* Bit position at which run starts */
+    ULONG NumberOfBits;  /* Size of the run in bits */
+} RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
+
+typedef const RTL_BITMAP_RUN *PCRTL_BITMAP_RUN;
+
+typedef struct _TIME_FIELDS
+{   CSHORT Year;
+    CSHORT Month;
+    CSHORT Day;
+    CSHORT Hour;
+    CSHORT Minute;
+    CSHORT Second;
+    CSHORT Milliseconds;
+    CSHORT Weekday;
+} TIME_FIELDS, *PTIME_FIELDS;
+
+#ifndef IO_STATUS_BLOCK_DEFINED
+#define IO_STATUS_BLOCK_DEFINED
+typedef struct _IO_STATUS_BLOCK {
+  union {
+    NTSTATUS Status;
+    PVOID Pointer;
+  } DUMMYUNIONNAME;
+
+  ULONG_PTR Information;
+} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
+#endif
+
+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 _PORT_MESSAGE_HEADER {
+  USHORT DataSize;
+  USHORT MessageSize;
+  USHORT MessageType;
+  USHORT VirtualRangesOffset;
+  CLIENT_ID ClientId;
+  ULONG MessageId;
+  ULONG SectionSize;
+} PORT_MESSAGE_HEADER, *PPORT_MESSAGE_HEADER, PORT_MESSAGE, *PPORT_MESSAGE;
+
+/* Yes, this type is incompatible with the one defined in winternl.h! */
+typedef struct _PROCESS_BASIC_INFORMATION {
+    DWORD ExitStatus;
+    DWORD PebBaseAddress;
+    DWORD AffinityMask;
+    DWORD BasePriority;
+    ULONG UniqueProcessId;
+    ULONG InheritedFromUniqueProcessId;
+} PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
+
+typedef void (__stdcall *PRTL_THREAD_START_ROUTINE)(LPVOID); /* FIXME: not the right name */
+
+typedef struct _THREAD_BASIC_INFORMATION
+{
+    NTSTATUS  ExitStatus;
+    PVOID     TebBaseAddress;
+    CLIENT_ID ClientId;
+    ULONG     AffinityMask;
+    LONG      Priority;
+    LONG      BasePriority;
+} THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
+
+typedef struct _VM_COUNTERS {
+    SIZE_T PeakVirtualSize;
+    SIZE_T VirtualSize;
+    ULONG  PageFaultCount;
+    SIZE_T PeakWorkingSetSize;
+    SIZE_T WorkingSetSize;
+    SIZE_T QuotaPeakPagedPoolUsage;
+    SIZE_T QuotaPagedPoolUsage;
+    SIZE_T QuotaPeakNonPagedPoolUsage;
+    SIZE_T QuotaNonPagedPoolUsage;
+    SIZE_T PagefileUsage;
+    SIZE_T PeakPagefileUsage;
+} VM_COUNTERS, *PVM_COUNTERS;
+
+
+/***********************************************************************
+ * PEB data structure
+ */
+
+typedef struct _PEB_LDR_DATA
+{
+    ULONG               Length;
+    BOOLEAN             Initialized;
+    PVOID               SsHandle;
+    LIST_ENTRY          InLoadOrderModuleList;
+    LIST_ENTRY          InMemoryOrderModuleList;
+    LIST_ENTRY          InInitializationOrderModuleList;
+} PEB_LDR_DATA, *PPEB_LDR_DATA;
+
+typedef struct _CURDIR
+{
+    UNICODE_STRING DosPath;
+    PVOID Handle;
+} CURDIR, *PCURDIR;
+
+typedef struct RTL_DRIVE_LETTER_CURDIR
+{
+    USHORT              Flags;
+    USHORT              Length;
+    ULONG               TimeStamp;
+    UNICODE_STRING      DosPath;
+} RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;
+
+typedef struct _RTL_USER_PROCESS_PARAMETERS
+{
+    ULONG               AllocationSize;
+    ULONG               Size;
+    ULONG               Flags;
+    ULONG               DebugFlags;
+    HANDLE              hConsole;
+    ULONG               ProcessGroup;
+    HANDLE              hStdInput;
+    HANDLE              hStdOutput;
+    HANDLE              hStdError;
+    CURDIR              CurrentDirectory;
+    UNICODE_STRING      DllPath;
+    UNICODE_STRING      ImagePathName;
+    UNICODE_STRING      CommandLine;
+    PWSTR               Environment;
+    ULONG               dwX;
+    ULONG               dwY;
+    ULONG               dwXSize;
+    ULONG               dwYSize;
+    ULONG               dwXCountChars;
+    ULONG               dwYCountChars;
+    ULONG               dwFillAttribute;
+    ULONG               dwFlags;
+    ULONG               wShowWindow;
+    UNICODE_STRING      WindowTitle;
+    UNICODE_STRING      Desktop;
+    UNICODE_STRING      ShellInfo;
+    UNICODE_STRING      RuntimeInfo;
+    RTL_DRIVE_LETTER_CURDIR DLCurrentDirectory[0x20];
+} RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
+
+/* value for Flags field (FIXME: not the correct name) */
+#define PROCESS_PARAMS_FLAG_NORMALIZED 1
+
+typedef struct _PEB
+{
+    UCHAR                        Reserved1[2];       /*  00 */
+    UCHAR                        BeingDebugged;      /*  02 */
+    UCHAR                        Reserved2[5];       /*  03 */
+    HMODULE                      ImageBaseAddress;   /*  08 */
+    PPEB_LDR_DATA                LdrData;            /*  0c */
+    RTL_USER_PROCESS_PARAMETERS *ProcessParameters;  /*  10 */
+    PVOID                        __pad_14;           /*  14 */
+    HANDLE                       ProcessHeap;        /*  18 */
+    UCHAR                        __pad_1c[36];       /*  1c */
+    PRTL_BITMAP                  TlsBitmap;          /*  40 */
+    ULONG                        TlsBitmapBits[2];   /*  44 */
+    UCHAR                        __pad_4c[24];       /*  4c */
+    ULONG                        NumberOfProcessors; /*  64 */
+    UCHAR                        __pad_68[128];      /*  68 */
+    PVOID                        Reserved3[59];      /*  e8 */
+    ULONG                        SessionId;          /* 1d4 */
+} PEB, *PPEB;
+
+
+/***********************************************************************
+ * TEB data structure
+ */
+#if defined(_NTSYSTEM_) || defined(_KERNEL32_)  /* hack, should go away */
+# define WINE_NO_TEB
+#endif
+
+#ifndef WINE_NO_TEB  /* don't define TEB if included from thread.h */
+# ifndef WINE_TEB_DEFINED
+# define WINE_TEB_DEFINED
+typedef struct _TEB
+{
+    NT_TIB          Tib;                        /* 000 */
+    PVOID           EnvironmentPointer;         /* 01c */
+    CLIENT_ID       ClientId;                   /* 020 */
+    PVOID           ActiveRpcHandle;            /* 028 */
+    PVOID           ThreadLocalStoragePointer;  /* 02c */
+    PPEB            Peb;                        /* 030 */
+    ULONG           LastErrorValue;             /* 034 */
+    UCHAR           __pad038[140];              /* 038 */
+    ULONG           CurrentLocale;              /* 0c4 */
+    UCHAR           __pad0c8[1752];             /* 0c8 */
+    PVOID           Reserved2[278];             /* 7a0 */
+    UNICODE_STRING  StaticUnicodeString;        /* bf8 used by advapi32 */
+    WCHAR           StaticUnicodeBuffer[261];   /* c00 used by advapi32 */
+    PVOID           DeallocationStack;          /* e0c */
+    PVOID           TlsSlots[64];               /* e10 */
+    LIST_ENTRY      TlsLinks;                   /* f10 */
+    PVOID           Reserved4[26];              /* f18 */
+    PVOID           ReservedForOle;             /* f80 Windows 2000 only */
+    PVOID           Reserved5[4];               /* f84 */
+    PVOID           TlsExpansionSlots;          /* f94 */
+} TEB, *PTEB;
+# endif /* WINE_TEB_DEFINED */
+#endif  /* WINE_NO_TEB */
+
+
+/***********************************************************************
+ * Inline functions
+ */
+
+#define NtCurrentProcess() ((HANDLE)-1)
+#define NtCurrentProcess() ((HANDLE)-1)
+
+inline static BOOLEAN RtlCheckBit(PCRTL_BITMAP lpBits, ULONG ulBit)
+{
+    if (lpBits && ulBit < lpBits->SizeOfBitMap &&
+        lpBits->Buffer[ulBit >> 5] & (1 << (ulBit & 31)))
+        return TRUE;
+    return FALSE;
+}
+
+#define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length))
+#define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length))
+#define RtlRetrieveUlong(p,s) memcpy((p), (s), sizeof(ULONG))
+#define RtlRetrieveUlonglong(p,s) memcpy((p), (s), sizeof(ULONGLONG))
+#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 RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
+
+
+/* These are implemented as __fastcall, so we can't let Winelib apps link with them */
+inline static USHORT RtlUshortByteSwap(USHORT s)
+{
+    return (s >> 8) | (s << 8);
+}
+
+inline static ULONG RtlUlongByteSwap(ULONG i)
+{
+#if defined(__i386__) && defined(__GNUC__)
+    ULONG ret;
+    __asm__("bswap %0" : "=r" (ret) : "0" (i) );
+    return ret;
+#else
+    return ((ULONG)RtlUshortByteSwap((USHORT)i) << 16) | RtlUshortByteSwap((USHORT)(i >> 16));
+#endif
+}
+
+
+/***********************************************************************
+ * Function declarations
+ */
+
+NTSTATUS  WINAPI NtCreateTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*, TIMER_TYPE);
+NTSTATUS  WINAPI NtEnumerateKey(HKEY,ULONG,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
+NTSTATUS  WINAPI NtEnumerateValueKey(HKEY,ULONG,KEY_VALUE_INFORMATION_CLASS,PVOID,ULONG,PULONG);
+NTSTATUS  WINAPI NtImpersonateClientOfPort(HANDLE,PPORT_MESSAGE);
+NTSTATUS  WINAPI NtMapViewOfSection(HANDLE,HANDLE,PVOID*,ULONG,ULONG,const LARGE_INTEGER*,ULONG*,SECTION_INHERIT,ULONG,ULONG);
+NTSTATUS  WINAPI NtOpenThread(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*);
+NTSTATUS  WINAPI NtQueryAttributesFile(const OBJECT_ATTRIBUTES*,FILE_BASIC_INFORMATION*);
+NTSTATUS  WINAPI NtQueryFullAttributesFile(const OBJECT_ATTRIBUTES*,FILE_NETWORK_OPEN_INFORMATION*);
+NTSTATUS  WINAPI NtQueryInformationProcess(HANDLE,PROCESSINFOCLASS,PVOID,ULONG,PULONG);
+NTSTATUS  WINAPI NtQueryKey(HKEY,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
+NTSTATUS  WINAPI NtQueryObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG, PULONG);
+NTSTATUS  WINAPI NtQueryValueKey(HKEY,const UNICODE_STRING *,KEY_VALUE_INFORMATION_CLASS,void *,DWORD,DWORD *);
+NTSTATUS  WINAPI NtQueryVolumeInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS);
+NTSTATUS  WINAPI NtSetInformationObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG);
+
+NTSTATUS  WINAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING,PCANSI_STRING,BOOLEAN);
+NTSTATUS  WINAPI RtlAppendUnicodeStringToString(UNICODE_STRING *,const UNICODE_STRING *);
+NTSTATUS  WINAPI RtlAppendUnicodeToString(UNICODE_STRING *,LPCWSTR);
+BOOLEAN   WINAPI RtlAreBitsClear(PCRTL_BITMAP,ULONG,ULONG);
+BOOLEAN   WINAPI RtlAreBitsSet(PCRTL_BITMAP,ULONG,ULONG);
+
+NTSTATUS  WINAPI RtlCharToInteger(PCSZ,ULONG,PULONG);
+void      WINAPI RtlClearAllBits(PRTL_BITMAP);
+void      WINAPI RtlClearBits(PRTL_BITMAP,ULONG,ULONG);
+LONG      WINAPI RtlCompareString(const STRING*,const STRING*,BOOLEAN);
+LONG      WINAPI RtlCompareUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
+LONGLONG  WINAPI RtlConvertLongToLargeInteger(LONG);
+ULONGLONG WINAPI RtlConvertUlongToLargeInteger(ULONG);
+void      WINAPI RtlCopyUnicodeString(UNICODE_STRING*,const UNICODE_STRING*);
+NTSTATUS  WINAPI RtlCreateProcessParameters(RTL_USER_PROCESS_PARAMETERS**,const UNICODE_STRING*,
+                                            const UNICODE_STRING*,const UNICODE_STRING*,
+                                            const UNICODE_STRING*,PWSTR,const UNICODE_STRING*,
+                                            const UNICODE_STRING*,const UNICODE_STRING*,
+                                            const UNICODE_STRING*);
+NTSTATUS  WINAPI RtlCreateSecurityDescriptor(PSECURITY_DESCRIPTOR,DWORD);
+NTSTATUS  WINAPI RtlCreateUserThread(HANDLE,const SECURITY_DESCRIPTOR*,BOOLEAN,PVOID,SIZE_T,SIZE_T,PRTL_THREAD_START_ROUTINE,void*,HANDLE*,CLIENT_ID*);
+
+PRTL_USER_PROCESS_PARAMETERS WINAPI RtlDeNormalizeProcessParams(RTL_USER_PROCESS_PARAMETERS*);
+void      WINAPI RtlDestroyProcessParameters(RTL_USER_PROCESS_PARAMETERS*);
+BOOLEAN   WINAPI RtlDosPathNameToNtPathName_U(PCWSTR,PUNICODE_STRING,PWSTR*,CURDIR*);
+
+LONGLONG  WINAPI RtlEnlargedIntegerMultiply(INT,INT);
+ULONGLONG WINAPI RtlEnlargedUnsignedMultiply(UINT,UINT);
+UINT      WINAPI RtlEnlargedUnsignedDivide(ULONGLONG,UINT,UINT *);
+BOOLEAN   WINAPI RtlEqualString(const STRING*,const STRING*,BOOLEAN);
+BOOLEAN   WINAPI RtlEqualUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
+LONGLONG  WINAPI RtlExtendedIntegerMultiply(LONGLONG,INT);
+LONGLONG  WINAPI RtlExtendedLargeIntegerDivide(LONGLONG,INT,INT *);
+LONGLONG  WINAPI RtlExtendedMagicDivide(LONGLONG,LONGLONG,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 RtlFindLastBackwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
+ULONG     WINAPI RtlFindLastBackwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
+CCHAR     WINAPI RtlFindLeastSignificantBit(ULONGLONG);
+ULONG     WINAPI RtlFindLongestRunClear(PCRTL_BITMAP,PULONG);
+ULONG     WINAPI RtlFindLongestRunSet(PCRTL_BITMAP,PULONG);
+CCHAR     WINAPI RtlFindMostSignificantBit(ULONGLONG);
+ULONG     WINAPI RtlFindNextForwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
+ULONG     WINAPI RtlFindNextForwardRunSet(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);
+void      WINAPI RtlFreeAnsiString(PANSI_STRING);
+void      WINAPI RtlFreeUnicodeString(PUNICODE_STRING);
+
+NTSTATUS  WINAPI RtlGetVersion(RTL_OSVERSIONINFOEXW*);
+
+void      WINAPI RtlInitAnsiString(PANSI_STRING,PCSZ);
+void      WINAPI RtlInitString(PSTRING,PCSZ);
+void      WINAPI RtlInitUnicodeString(PUNICODE_STRING,PCWSTR);
+void      WINAPI RtlInitializeBitMap(PRTL_BITMAP,PULONG,ULONG);
+NTSTATUS  WINAPI RtlInt64ToUnicodeString(ULONGLONG,ULONG,UNICODE_STRING *);
+NTSTATUS  WINAPI RtlIntegerToUnicodeString(ULONG,ULONG,UNICODE_STRING *);
+
+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);
+ULONG     WINAPI RtlLengthSecurityDescriptor(PSECURITY_DESCRIPTOR);
+
+void      WINAPI RtlMapGenericMask(PACCESS_MASK,const GENERIC_MAPPING*);
+
+PRTL_USER_PROCESS_PARAMETERS WINAPI RtlNormalizeProcessParams(RTL_USER_PROCESS_PARAMETERS*);
+ULONG     WINAPI RtlNumberOfClearBits(PCRTL_BITMAP);
+ULONG     WINAPI RtlNumberOfSetBits(PCRTL_BITMAP);
+
+BOOLEAN   WINAPI RtlPrefixUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
+
+void      WINAPI RtlSetAllBits(PRTL_BITMAP);
+void      WINAPI RtlSetBits(PRTL_BITMAP,ULONG,ULONG);
+NTSTATUS  WINAPI RtlSetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
+
+BOOLEAN   WINAPI RtlTimeFieldsToTime(PTIME_FIELDS,PLARGE_INTEGER);
+void      WINAPI RtlTimeToElapsedTimeFields(const LARGE_INTEGER *,PTIME_FIELDS);
+void      WINAPI RtlTimeToTimeFields(const LARGE_INTEGER*,PTIME_FIELDS);
+
+ULONGLONG __cdecl RtlUlonglongByteSwap(ULONGLONG);
+NTSTATUS  WINAPI RtlUnicodeStringToAnsiString(PANSI_STRING,PCUNICODE_STRING,BOOLEAN);
+NTSTATUS  WINAPI RtlUnicodeStringToInteger(const UNICODE_STRING *,ULONG,ULONG *);
+WCHAR     WINAPI RtlUpcaseUnicodeChar(WCHAR);
+NTSTATUS  WINAPI RtlUpcaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING *,BOOLEAN);
+CHAR      WINAPI RtlUpperChar(CHAR);
+void      WINAPI RtlUpperString(STRING *,const STRING *);
+
+NTSTATUS  WINAPI RtlValidSecurityDescriptor(PSECURITY_DESCRIPTOR);
+NTSTATUS  WINAPI RtlVerifyVersionInfo(const RTL_OSVERSIONINFOEXW*,DWORD,DWORDLONG);
+
+#endif
--- /dev/null	2004-08-10 11:44:31.000000000 +0200
+++ include/ddk/ntdef.h	2004-08-24 19:12:54.000000000 +0200
@@ -0,0 +1,111 @@
+/*
+ * Device driver APIs and data structures
+ *
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#ifndef _NTDEF_
+#define _NTDEF_
+
+#include <ctype.h>
+#include <basetsd.h>
+
+/* We should duplicate the definition of many types from windef.h and
+ * winnt.h. However that creates too many conflicts with the other headers.
+ */
+#include <windef.h>
+
+
+/***********************************************************************
+ * Types and data structures
+ */
+
+#ifndef WINTERNL_TYPES
+#define WINTERNL_TYPES
+
+typedef LONG  NTSTATUS;
+typedef const char *PCSZ;
+
+typedef struct _STRING
+{
+    USHORT Length;
+    USHORT MaximumLength;
+    PCHAR Buffer;
+} STRING, *PSTRING;
+typedef STRING         ANSI_STRING, *PANSI_STRING;
+typedef STRING                      *PCANSI_STRING;
+typedef STRING         OEM_STRING,  *POEM_STRING;
+
+typedef struct _UNICODE_STRING
+{
+    USHORT Length;        /* bytes */
+    USHORT MaximumLength; /* bytes */
+    PWSTR  Buffer;
+} UNICODE_STRING, *PUNICODE_STRING;
+typedef const UNICODE_STRING        *PCUNICODE_STRING;
+
+#endif
+
+typedef short          CSHORT,      *PCSHORT;
+typedef ULONG          CLONG,       *PCLONG;
+typedef NTSTATUS                    *PNTSTATUS;
+typedef STRING         CANSI_STRING;
+
+#ifndef OBJECT_ATTRIBUTES_DEFINED
+#define OBJECT_ATTRIBUTES_DEFINED
+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;
+#endif
+
+
+/***********************************************************************
+ * Defines
+ */
+
+#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
+
+
+/***********************************************************************
+ * 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)
+
+
+#endif


More information about the wine-patches mailing list