diff --git a/Makefile.in b/Makefile.in
index 1a5649d69ac7ec32341a083de7409eddd3ea03b1..1b73494e944a2d6dac611a0cbf51c8c4171e69ea 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -31,6 +31,7 @@ LIBSUBDIRS = \
 	dlls/imagehlp \
 	dlls/msacm \
 	dlls/msacm32 \
+	dlls/ntdll \
 	dlls/psapi \
 	dlls/shell32 \
 	dlls/winaspi \
@@ -88,6 +89,7 @@ LIBOBJS = \
 	dlls/imagehlp/imagehlp.o \
 	dlls/msacm/msacm.o \
 	dlls/msacm32/msacm32.o \
+	dlls/ntdll/ntdll.o \
 	dlls/psapi/psapi.o \
 	dlls/shell32/shell32.o \
 	dlls/winaspi/winaspi.o \
diff --git a/configure b/configure
index 8d2328c8676a0140fc7ff1f66806262fb2dc1d58..d90282ac596e86cf4db05ff183057c0a3ffb4c73 100755
--- a/configure
+++ b/configure
@@ -3537,6 +3537,7 @@ dlls/comctl32/Makefile
 dlls/imagehlp/Makefile
 dlls/msacm/Makefile
 dlls/msacm32/Makefile
+dlls/ntdll/Makefile
 dlls/psapi/Makefile
 dlls/shell32/Makefile
 dlls/winaspi/Makefile
@@ -3683,6 +3684,7 @@ dlls/comctl32/Makefile
 dlls/imagehlp/Makefile
 dlls/msacm/Makefile
 dlls/msacm32/Makefile
+dlls/ntdll/Makefile
 dlls/psapi/Makefile
 dlls/shell32/Makefile
 dlls/winaspi/Makefile
diff --git a/configure.in b/configure.in
index 76d4d75a75723152b2f3b0c586b12c25325aeb4e..b134116c87f6a366a2799adb4462b54263af5e68 100644
--- a/configure.in
+++ b/configure.in
@@ -488,6 +488,7 @@ dlls/comctl32/Makefile
 dlls/imagehlp/Makefile
 dlls/msacm/Makefile
 dlls/msacm32/Makefile
+dlls/ntdll/Makefile
 dlls/psapi/Makefile
 dlls/shell32/Makefile
 dlls/winaspi/Makefile
diff --git a/dlls/Makefile.in b/dlls/Makefile.in
index 341bfb2ec374afb3bf4bfa47f4204c156696467d..88192d499c9b314c15cc1d3458f6549d71fb59cb 100644
--- a/dlls/Makefile.in
+++ b/dlls/Makefile.in
@@ -3,6 +3,7 @@ SUBDIRS = \
 	imagehlp \
 	msacm \
 	msacm32 \
+	ntdll \
 	psapi \
 	shell32 \
 	winaspi \
diff --git a/dlls/ntdll/.cvsignore b/dlls/ntdll/.cvsignore
new file mode 100644
index 0000000000000000000000000000000000000000..f3c7a7c5da68804a1bdf391127ba34aed33c3cca
--- /dev/null
+++ b/dlls/ntdll/.cvsignore
@@ -0,0 +1 @@
+Makefile
diff --git a/dlls/ntdll/Makefile.in b/dlls/ntdll/Makefile.in
new file mode 100644
index 0000000000000000000000000000000000000000..ff1ff1898deef53104b61f34600c702ae947f997
--- /dev/null
+++ b/dlls/ntdll/Makefile.in
@@ -0,0 +1,17 @@
+DEFS      = @DLLFLAGS@ -D__WINE__
+TOPSRCDIR = @top_srcdir@
+TOPOBJDIR = ../..
+SRCDIR    = @srcdir@
+VPATH     = @srcdir@
+MODULE    = ntdll
+
+C_SRCS = \
+	nt.c \
+	rtl.c
+
+all: $(MODULE).o
+
+@MAKE_RULES@
+
+### Dependencies:
+
diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c
new file mode 100644
index 0000000000000000000000000000000000000000..721669323dbf27147e1e7e70bbda95e3760f4d0f
--- /dev/null
+++ b/dlls/ntdll/nt.c
@@ -0,0 +1,485 @@
+/*
+ * NT basis DLL
+ * 
+ * This file contains the Nt* API functions of NTDLL.DLL.
+ * In the original ntdll.dll they all seem to just call int 0x2e (down to the
+ * HAL), so parameter counts/parameters are just guesswork from -debugmsg
+ * +relay.
+ *
+ * Copyright 1996-1998 Marcus Meissner
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include "win.h"
+#include "file.h"
+#include "windows.h"
+#include "winnls.h"
+#include "ntdll.h"
+#include "heap.h"
+#include "debug.h"
+#include "module.h"
+#include "debugstr.h"
+#include "winreg.h"
+
+/**************************************************************************
+ *                 NtOpenFile				[NTDLL.127]
+ */
+NTSTATUS WINAPI NtOpenFile(
+	DWORD x1, DWORD flags, DWORD x3, DWORD x4, DWORD alignment, DWORD x6
+) {
+	FIXME(ntdll,"(%08lx,0x%08lx,%08lx,%08lx,%08lx,%08lx): stub\n",
+	      x1,flags,x3,x4,alignment,x6);
+	return 0;
+}
+
+/**************************************************************************
+ *		NtCreateFile				[NTDLL.73]
+ */
+NTSTATUS WINAPI NtCreateFile(
+	PHANDLE filehandle, DWORD access, LPLONG attributes, LPLONG status,
+	LPVOID x5, DWORD x6, DWORD x7, LPLONG x8, DWORD x9, DWORD x10, 
+	LPLONG x11
+) {
+	FIXME(ntdll,"(%p,%lx,%lx,%lx,%p,%08lx,%08lx,%p,%08lx,%08lx,%p): empty stub\n",
+	filehandle,access,*attributes,*status,x5,x6,x7,x8,x9,x10,x11);
+	return 0;
+}
+/**************************************************************************
+ *		NtCreateTimer				[NTDLL.87]
+ */
+NTSTATUS WINAPI NtCreateTimer(DWORD x1, DWORD x2, DWORD x3)
+{
+	FIXME(ntdll,"(%08lx,%08lx,%08lx), empty stub\n",x1,x2,x3);
+	return 0;
+}
+/**************************************************************************
+ *		NtSetTimer				[NTDLL.221]
+ */
+NTSTATUS WINAPI NtSetTimer(DWORD x1,DWORD x2,DWORD x3,DWORD x4, DWORD x5,DWORD x6)
+{
+	FIXME(ntdll,"(%08lx,%08lx,%08lx,%08lx,%08lx,%08lx): empty stub\n",
+		x1,x2,x3,x4,x5,x6);
+	return 0;
+}
+
+/**************************************************************************
+ *		NtCreateEvent				[NTDLL.71]
+ */
+NTSTATUS WINAPI NtCreateEvent(PHANDLE eventhandle, DWORD desiredaccess, 
+	DWORD attributes, DWORD eventtype, DWORD initialstate)
+{
+	FIXME(ntdll,"(%p,%08lx,%08lx,%08lx,%08lx): empty stub\n",
+		eventhandle,desiredaccess,attributes,eventtype,initialstate);
+	return 0;
+}
+/**************************************************************************
+ *		NtDeviceIoControlFile			[NTDLL.94]
+ */
+NTSTATUS WINAPI NtDeviceIoControlFile(HANDLE32 filehandle, HANDLE32 event, 
+	DWORD x3, DWORD x4, DWORD x5, UINT32 iocontrolcode,
+	LPVOID inputbuffer,  DWORD inputbufferlength,
+	LPVOID outputbuffer, DWORD outputbufferlength)
+{
+	FIXME(ntdll,"(%x,%x,%08lx,%08lx,%08lx,%08x,%lx,%lx): empty stub\n",
+		filehandle,event,x3,x4,x5,iocontrolcode,inputbufferlength,outputbufferlength);
+	return 0;
+}
+
+/**************************************************************************
+ * NtOpenDirectoryObject [NTDLL.124]
+ */
+NTSTATUS WINAPI NtOpenDirectoryObject(DWORD x1,DWORD x2,LPUNICODE_STRING name)
+{
+    FIXME(ntdll,"(0x%08lx,0x%08lx,%s): stub\n",x1,x2,debugstr_w(name->Buffer));
+    return 0;
+}
+
+
+/******************************************************************************
+ * NtQueryDirectoryObject [NTDLL.149]
+ */
+NTSTATUS WINAPI NtQueryDirectoryObject( DWORD x1, DWORD x2, DWORD x3, DWORD x4,
+                                     DWORD x5, DWORD x6, DWORD x7 )
+{
+    FIXME(ntdll,"(%lx,%lx,%lx,%lx,%lx,%lx,%lx): stub\n",x1,x2,x3,x4,x5,x6,x7);
+    return 0xc0000000; /* We don't have any. Whatever. (Yet.) */
+}
+
+/******************************************************************************
+ * NtQuerySystemInformation [NTDLL.168]
+ */
+NTSTATUS WINAPI NtQuerySystemInformation( DWORD x1, DWORD x2, DWORD x3, DWORD x4 )
+{
+    FIXME(ntdll,"(%lx,%lx,%lx,%lx): stub\n",x1,x2,x3,x4);
+    return 0;
+}
+
+/******************************************************************************
+ * NtQueryObject [NTDLL.161]
+ */
+NTSTATUS WINAPI NtQueryObject( DWORD x1, DWORD x2 ,DWORD x3, DWORD x4, DWORD x5 )
+{
+    FIXME(ntdll,"(0x%lx,%lx,%lx,%lx,%lx): stub\n",x1,x2,x3,x4,x5);
+    return 0;
+}
+
+
+/******************************************************************************
+ * NtSetInformationProcess [NTDLL.207]
+ */
+NTSTATUS WINAPI NtSetInformationProcess( DWORD x1, DWORD x2, DWORD x3, DWORD x4 )
+{
+    FIXME(ntdll,"(%lx,%lx,%lx,%lx): stub\n",x1,x2,x3,x4);
+    return 0;
+}
+
+/******************************************************************************
+ * NtFsControlFile [NTDLL.108]
+ */
+NTSTATUS WINAPI NtFsControlFile(
+	DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5,DWORD x6,DWORD x7,DWORD x8,
+	DWORD x9,DWORD x10
+) {
+    FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx): stub\n",x1,x2,x3,x4,x5,x6,x7,x8,x9,x10);
+    return 0;
+}
+
+/******************************************************************************
+ * NtOpenKey [NTDLL.129]
+ */
+NTSTATUS WINAPI NtOpenKey(DWORD x1,DWORD x2,LPUNICODE_STRING key) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx,%s),stub!\n",x1,x2,debugstr_w(key->Buffer));
+	return RegOpenKey32W(HKEY_LOCAL_MACHINE,key->Buffer,x1);
+}
+
+/******************************************************************************
+ * NtQueryValueKey [NTDLL.129]
+ */
+NTSTATUS WINAPI NtQueryValueKey(DWORD x1,LPUNICODE_STRING key,DWORD x3,DWORD x4,DWORD x5,DWORD x6) {
+	FIXME(ntdll,"(%08lx,%s,%08lx,%08lx,%08lx,%08lx),stub!\n",
+		x1,debugstr_w(key->Buffer),x3,x4,x5,x6
+	);
+	return 0;
+}
+
+NTSTATUS WINAPI NtQueryTimerResolution(DWORD x1,DWORD x2,DWORD x3) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx), stub!\n",x1,x2,x3);
+	return 1;
+}
+
+/**************************************************************************
+ *                 NtClose				[NTDLL.65]
+ */
+NTSTATUS WINAPI NtClose(DWORD x1) {
+	FIXME(ntdll,"(0x%08lx),stub!\n",x1);
+	return 1;
+}
+/******************************************************************************
+*  NtQueryInformationProcess		[NTDLL.] 
+*
+*/
+NTSTATUS WINAPI NtQueryInformationProcess(DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",
+		x1,x2,x3,x4,x5
+	);
+	return 0;
+}
+/******************************************************************************
+*  NtQueryInformationThread		[NTDLL.] 
+*
+*/
+NTSTATUS WINAPI NtQueryInformationThread(DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",
+		x1,x2,x3,x4,x5
+	);
+	return 0;
+}
+/******************************************************************************
+*  NtQueryInformationToken		[NTDLL.156] 
+*
+*/
+NTSTATUS WINAPI NtQueryInformationToken(DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",
+		x1,x2,x3,x4,x5
+	);
+	return 0;
+}
+
+/******************************************************************************
+ *  NtCreatePagingFile		[NTDLL] 
+ */
+NTSTATUS WINAPI NtCreatePagingFile(DWORD x1,DWORD x2,DWORD x3,DWORD x4) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4);
+	return 0;
+}
+
+/******************************************************************************
+ *  NtDuplicateObject		[NTDLL] 
+ */
+NTSTATUS WINAPI NtDuplicateObject(DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5,
+	DWORD x6,DWORD x7
+) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4,x5,x6,x7);
+	return 0;
+}
+
+/******************************************************************************
+ *  NtDuplicateToken		[NTDLL] 
+ */
+NTSTATUS WINAPI NtDuplicateToken(
+	DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5,DWORD x6
+) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4,x5,x6);
+	return 0;
+}
+
+/******************************************************************************
+ *  NtAdjustPrivilegesToken		[NTDLL] 
+ */
+NTSTATUS WINAPI NtAdjustPrivilegesToken(
+	DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5,DWORD x6
+) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4,x5,x6);
+	return 0;
+}
+
+/******************************************************************************
+ *  NtOpenProcessToken		[NTDLL] 
+ */
+NTSTATUS WINAPI NtOpenProcessToken(DWORD x1,DWORD x2,DWORD x3) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3);
+	return 0;
+}
+
+/******************************************************************************
+ *  NtSetInformationThread		[NTDLL] 
+ */
+NTSTATUS WINAPI NtSetInformationThread(DWORD x1,DWORD x2,DWORD x3,DWORD x4) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4);
+	return 0;
+}
+
+/******************************************************************************
+ *  NtOpenThreadToken		[NTDLL] 
+ */
+NTSTATUS WINAPI NtOpenThreadToken(DWORD x1,DWORD x2,DWORD x3,DWORD x4) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4);
+	return 0;
+}
+
+/******************************************************************************
+ *  NtSetVolumeInformationFile		[NTDLL] 
+ */
+NTSTATUS WINAPI NtSetVolumeInformationFile(DWORD x1,DWORD x2,DWORD x3,DWORD x4,
+	DWORD x5
+) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4,x5);
+	return 0;
+}
+
+/******************************************************************************
+ *  NtCreatePort		[NTDLL] 
+ */
+NTSTATUS WINAPI NtCreatePort(DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4,x5);
+	return 0;
+}
+
+/******************************************************************************
+ *  NtSetInformationFile		[NTDLL] 
+ */
+NTSTATUS WINAPI NtSetInformationFile(DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx)\n",x1,x2,x3,x4,x5);
+	return 0;
+}
+
+/******************************************************************************
+ *  NtSetEvent		[NTDLL] 
+ */
+NTSTATUS WINAPI NtSetEvent(DWORD x1,DWORD x2) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx)\n",x1,x2);
+	return 0;
+}
+
+/******************************************************************************
+ *  NtCreateKey		[NTDLL] 
+ */
+NTSTATUS WINAPI NtCreateKey(DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5,DWORD x6,DWORD x7) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4,x5,x6,x7);
+	return 0;
+}
+
+/******************************************************************************
+ *  NtQueryInformationFile		[NTDLL] 
+ */
+NTSTATUS WINAPI NtQueryInformationFile(DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4,x5);
+	return 0;
+}
+
+/******************************************************************************
+ *  NtSetValueKey		[NTDLL] 
+ */
+NTSTATUS WINAPI NtSetValueKey(DWORD x1,LPUNICODE_STRING key,DWORD x3,DWORD x4,DWORD x5,DWORD x6) {
+	FIXME(ntdll,"(0x%08lx,%s,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,debugstr_w(key->Buffer),x3,x4,x5,x6);
+	return 0;
+}
+
+/******************************************************************************
+ *  NtOpenEvent		[NTDLL] 
+ */
+NTSTATUS WINAPI NtOpenEvent(DWORD x1,DWORD x2,DWORD x3) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3);
+	return 0;
+}
+
+/******************************************************************************
+ *  NtWaitForSingleObject		[NTDLL] 
+ */
+NTSTATUS WINAPI NtWaitForSingleObject(DWORD x1,DWORD x2,DWORD x3) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3);
+	return 0;
+}
+
+/******************************************************************************
+ *  NtConnectPort		[NTDLL] 
+ */
+NTSTATUS WINAPI NtConnectPort(DWORD x1,LPUNICODE_STRING uni,DWORD x3,DWORD x4,DWORD x5,DWORD x6,DWORD x7,DWORD x8) {
+	FIXME(ntdll,"(0x%08lx,%s,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,debugstr_w(uni->Buffer),x3,x4,x5,x6,x7,x8);
+	return 0;
+}
+
+/******************************************************************************
+ *  NtListenPort		[NTDLL] 
+ */
+NTSTATUS WINAPI NtListenPort(DWORD x1,DWORD x2) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx),stub!\n",x1,x2);
+	return 0;
+}
+
+/******************************************************************************
+ *  NtRequestWaitReplyPort		[NTDLL] 
+ */
+NTSTATUS WINAPI NtRequestWaitReplyPort(DWORD x1,DWORD x2,DWORD x3) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3);
+	return 0;
+}
+
+/******************************************************************************
+ *  NtCreateDirectoryObject	[NTDLL] 
+ */
+NTSTATUS WINAPI NtCreateDirectoryObject(DWORD x1,DWORD x2,DWORD x3) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3);
+	return 0;
+}
+
+/******************************************************************************
+ *  NtMapViewOfSection	[NTDLL] 
+ */
+NTSTATUS WINAPI NtMapViewOfSection(
+	DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5,DWORD x6,DWORD x7,
+	DWORD x8,DWORD x9,DWORD x10
+) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4,x5,x6,x7,x8,x9,x10);
+	return 0;
+}
+
+/******************************************************************************
+ *  NtCreateMailSlotFile	[NTDLL] 
+ */
+NTSTATUS WINAPI NtCreateMailslotFile(DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5,DWORD x6,DWORD x7,DWORD x8) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4,x5,x6,x7,x8);
+	return 0;
+}
+
+/******************************************************************************
+ *  NtReadFile	[NTDLL] 
+ */
+NTSTATUS WINAPI NtReadFile(
+	DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5,DWORD x6,DWORD x7,
+	DWORD x8,DWORD x9
+) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4,x5,x6,x7,x8,x9);
+	return 0;
+}
+
+
+/******************************************************************************
+ *  NtCreateSection	[NTDLL] 
+ */
+NTSTATUS WINAPI NtCreateSection(
+	DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5,DWORD x6,DWORD x7
+) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4,x5,x6,x7);
+	return 0;
+}
+
+/******************************************************************************
+ *  NtResumeThread	[NTDLL] 
+ */
+NTSTATUS WINAPI NtResumeThread(DWORD x1,DWORD x2) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx),stub!\n",x1,x2);
+	return 0;
+}
+
+/******************************************************************************
+ *  NtReplyWaitReceivePort	[NTDLL] 
+ */
+NTSTATUS WINAPI NtReplyWaitReceivePort(DWORD x1,DWORD x2,DWORD x3,DWORD x4) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4);
+	return 0;
+}
+
+/******************************************************************************
+ *  NtAcceptConnectPort	[NTDLL] 
+ */
+NTSTATUS WINAPI NtAcceptConnectPort(DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5,DWORD x6) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4,x5,x6);
+	return 0;
+}
+
+/******************************************************************************
+ *  NtCompleteConnectPort	[NTDLL] 
+ */
+NTSTATUS WINAPI NtCompleteConnectPort(DWORD x1) {
+	FIXME(ntdll,"(0x%08lx),stub!\n",x1);
+	return 0;
+}
+
+/******************************************************************************
+ *  NtRegisterThreadTerminatePort	[NTDLL] 
+ */
+NTSTATUS WINAPI NtRegisterThreadTerminatePort(DWORD x1) {
+	FIXME(ntdll,"(0x%08lx),stub!\n",x1);
+	return 0;
+}
+
+/******************************************************************************
+ *  NtTerminateThread	[NTDLL] 
+ */
+NTSTATUS WINAPI NtTerminateThread(HANDLE32 hThread,DWORD exitcode) {
+	BOOL32	ret = TerminateThread(hThread,exitcode);
+
+	if (ret)
+		return 0;
+	return 0xc0000000; /* FIXME: lasterror->ntstatus */
+}
+
+/******************************************************************************
+ *  NtSetIntervalProfile	[NTDLL] 
+ */
+NTSTATUS WINAPI NtSetIntervalProfile(DWORD x1,DWORD x2) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx),stub!\n",x1,x2);
+	return 0;
+}
+
+/******************************************************************************
+ *  NtOpenSection	[NTDLL] 
+ */
+NTSTATUS WINAPI NtOpenSection(DWORD x1,DWORD x2,DWORD x3) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3);
+	return 0;
+}
+
diff --git a/misc/ntdll.c b/dlls/ntdll/rtl.c
similarity index 72%
rename from misc/ntdll.c
rename to dlls/ntdll/rtl.c
index 3e863f15813dcaba2c78f780f30ca34156d89163..5e2a29726398f25f70cdf948bdcb9c7f460d55fe 100644
--- a/misc/ntdll.c
+++ b/dlls/ntdll/rtl.c
@@ -1,7 +1,9 @@
 /*
  * NT basis DLL
  * 
- * Copyright 1996 Marcus Meissner
+ * This file contains the Rtl* API functions. These should be implementable.
+ * 
+ * Copyright 1996-1998 Marcus Meissner
  */
 
 #include <stdlib.h>
@@ -10,6 +12,8 @@
 #include <ctype.h>
 #include <math.h>
 #include "win.h"
+#include "stackframe.h"
+#include "file.h"
 #include "windows.h"
 #include "winnls.h"
 #include "ntdll.h"
@@ -393,6 +397,16 @@ VOID WINAPI RtlFreeUnicodeString(LPUNICODE_STRING str)
 		HeapFree(GetProcessHeap(),0,str->Buffer);
 }
 
+/**************************************************************************
+ * RtlFreeAnsiString [NTDLL.373]
+ */
+VOID WINAPI RtlFreeAnsiString(LPANSI_STRING AnsiString)
+{
+    if( AnsiString->Buffer )
+        HeapFree( GetProcessHeap(),0,AnsiString->Buffer );
+}
+
+
 /**************************************************************************
  *                 RtlUnicodeToOemN			[NTDLL.515]
  */
@@ -442,6 +456,17 @@ WINAPI RtlUnicodeStringToAnsiString(LPANSI_STRING oem,LPUNICODE_STRING uni,BOOL3
 	return 0;
 }
 
+/**************************************************************************
+ *                 RtlEqualUnicodeString		[NTDLL]
+ */
+DWORD WINAPI RtlEqualUnicodeString(LPUNICODE_STRING s1,LPUNICODE_STRING s2,DWORD x) {
+	FIXME(ntdll,"(%s,%s,%ld),stub!\n",debugstr_w(s1->Buffer),debugstr_w(s2->Buffer),x);
+	return 0;
+	if (s1->Length != s2->Length)
+		return 1;
+	return !lstrncmp32W(s1->Buffer,s2->Buffer,s1->Length/2);
+}
+
 /**************************************************************************
  *                 RtlNtStatusToDosErro			[NTDLL.442]
  */
@@ -561,142 +586,15 @@ BOOL32  WINAPI RtlDosPathNameToNtPathName_U(
 	return TRUE;
 }
 
-/**************************************************************************
- *                 NtOpenFile				[NTDLL.127]
- */
-DWORD WINAPI NtOpenFile(DWORD x1,DWORD flags,DWORD x3,DWORD x4,DWORD alignment,DWORD x6)
-{
-	FIXME(ntdll,"(%08lx,0x%08lx,%08lx,%08lx,%08lx,%08lx): stub\n",
-	      x1,flags,x3,x4,alignment,x6);
-	/* returns file io completion status */
-	return 0;
-}
-
-/**************************************************************************
- *		NtCreateFile				[NTDLL.73]
- */
-DWORD /* NTSTATUS */ 
-WINAPI NtCreateFile(PHANDLE filehandle,DWORD access,LPLONG attributes,
-			LPLONG status,LPVOID x5,DWORD x6,DWORD x7,
-			LPLONG x8,DWORD x9,DWORD x10,LPLONG x11)
-{
-	/* parameter count checked with wine debugger */
-	FIXME(ntdll,"(%p,%lx,%lx,%lx,%p,%08lx,%08lx,%p,%08lx,%08lx,%p): empty stub\n",
-	  filehandle,access,*attributes,*status,x5,x6,x7,x8,x9,x10,x11);
-	return 0;
-}
-/**************************************************************************
- *		NtCreateTimer				[NTDLL.87]
- */
-DWORD WINAPI NtCreateTimer(DWORD x1, DWORD x2, DWORD x3)
-{
-	/* parameter count checked (obscure doc from internet said 4, debugger showed only 3) */
-	FIXME(ntdll,"(%08lx,%08lx,%08lx): empty stub\n",
-		x1,x2,x3);
-	return 0;
-}
-/**************************************************************************
- *		NtSetTimer				[NTDLL.221]
- */
-DWORD WINAPI NtSetTimer(DWORD x1,DWORD x2,DWORD x3,DWORD x4,
-		DWORD x5,DWORD x6)
-{
-	/* parameter count checked (obscure doc from internet said 7, debugger showed only 6) */
-	FIXME(ntdll,"(%08lx,%08lx,%08lx,%08lx,%08lx,%08lx): empty stub\n",
-		x1,x2,x3,x4,x5,x6);
-	return 0;
-}
-
-/**************************************************************************
- *		NtCreateEvent				[NTDLL.71]
- */
-DWORD /* NTSTATUS */ 
-WINAPI NtCreateEvent(PHANDLE eventhandle, DWORD desiredaccess, 
-	DWORD attributes, DWORD eventtype, DWORD initialstate)
-{
-	/* parameter count checked with wine debugger */
-	FIXME(ntdll,"(%p,%08lx,%08lx,%08lx,%08lx): empty stub\n",
-		eventhandle,desiredaccess,attributes,eventtype,initialstate);
-	return 0;
-}
-/**************************************************************************
- *		NtDeviceIoControlFile			[NTDLL.94]
- */
-DWORD /* NTSTATUS */ 
-WINAPI NtDeviceIoControlFile(HANDLE32 filehandle, HANDLE32 event, 
-	DWORD x3, DWORD x4, DWORD x5, UINT32 iocontrolcode,
-	LPVOID inputbuffer,  DWORD inputbufferlength,
-	LPVOID outputbuffer, DWORD outputbufferlength)
-{
-	/* parameter count checked with wine debugger */
-	FIXME(ntdll,"(%x,%x,%08lx,%08lx,%08lx,%08x,%lx,%lx): empty stub\n",
-		filehandle,event,x3,x4,x5,iocontrolcode,inputbufferlength,outputbufferlength);
-	return 0;
-}
 /**************************************************************************
  *                 NTDLL_chkstk				[NTDLL.862]
  */
-
-VOID WINAPI NTDLL_chkstk (DWORD x1, DWORD x2, DWORD x3, DWORD x4,
-	DWORD x5, DWORD x6, DWORD x7, DWORD x8,
-	DWORD x9, DWORD x10)
+REGS_ENTRYPOINT(NTDLL_chkstk)
 {
 	/* FIXME: should subtract %eax bytes from stack pointer */
-	FIXME(ntdll, "(void): stub\n");
-}
-
-
-/**************************************************************************
- * NtOpenDirectoryObject [NTDLL.124]
- */
-DWORD WINAPI NtOpenDirectoryObject(DWORD x1,DWORD x2,DWORD x3)
-{
-    FIXME(ntdll,"(%lx,%lx,%lx): stub\n",x1,x2,x3);
-    return 0;
-}
-
-
-/******************************************************************************
- * NtQueryDirectoryObject [NTDLL.149]
- */
-DWORD WINAPI NtQueryDirectoryObject( DWORD x1, DWORD x2, DWORD x3, DWORD x4,
-                                     DWORD x5, DWORD x6, DWORD x7 )
-{
-    FIXME(ntdll,"(%lx,%lx,%lx,%lx,%lx,%lx,%lx): stub\n",x1,x2,x3,x4,x5,x6,x7);
-    return 0;
-}
-
-
-/**************************************************************************
- * RtlFreeAnsiString [NTDLL.373]
- */
-VOID WINAPI RtlFreeAnsiString(LPANSI_STRING AnsiString)
-{
-    if( AnsiString->Buffer )
-        HeapFree( GetProcessHeap(),0,AnsiString->Buffer );
-}
-
-
-/******************************************************************************
- * NtQuerySystemInformation [NTDLL.168]
- */
-DWORD WINAPI NtQuerySystemInformation( DWORD x1, DWORD x2, DWORD x3, DWORD x4 )
-{
-    FIXME(ntdll,"(%lx,%lx,%lx,%lx): stub\n",x1,x2,x3,x4);
-    return 0;
-}
-
-
-/******************************************************************************
- * NtQueryObject [NTDLL.161]
- */
-DWORD WINAPI NtQueryObject( DWORD x1, DWORD x2 ,DWORD x3, DWORD x4, DWORD x5 )
-{
-    FIXME(ntdll,"(0x%lx,%lx,%lx,%lx,%lx): stub\n",x1,x2,x3,x4,x5);
-    return 0;
+	FIXME(ntdll, "(eax=%ld): stub\n",EAX_reg(context));
 }
 
-
 /******************************************************************************
  * RtlTimeToElapsedTimeFields [NTDLL.502]
  */
@@ -707,23 +605,6 @@ DWORD WINAPI RtlTimeToElapsedTimeFields( DWORD x1, DWORD x2 )
 }
 
 
-/******************************************************************************
- * NtSetInformationProcess [NTDLL.207]
- */
-DWORD WINAPI NtSetInformationProcess( DWORD x1, DWORD x2, DWORD x3, DWORD x4 )
-{
-    FIXME(ntdll,"(%lx,%lx,%lx,%lx): stub\n",x1,x2,x3,x4);
-    return 0;
-}
-
-/******************************************************************************
- * NtFsControlFile [NTDLL.108]
- */
-VOID WINAPI NtFsControlFile(VOID)
-{
-    FIXME(ntdll,"(void): stub\n");
-}
-
 /******************************************************************************
  * RtlExtendedLargeIntegerDivide [NTDLL.359]
  */
@@ -761,69 +642,18 @@ WINAPI RtlExtendedIntegerMultiply(
 #endif
 }
 
-DWORD WINAPI NtOpenKey(DWORD x1,DWORD x2,LPUNICODE_STRING key) {
-	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx(%s)),stub!\n",x1,x2,key,key->Buffer);
-	return RegOpenKey32W(HKEY_LOCAL_MACHINE,key->Buffer,x1);
-}
-
-DWORD WINAPI NtQueryValueKey(DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5,DWORD x6) {
-	FIXME(ntdll,"(%08lx,%08lx,%08lx,%08lx,%08lx,%08lx),stub!\n",
-		x1,x2,x3,x4,x5,x6
-	);
-	return 0;
-}
-
-DWORD WINAPI NtQueryTimerResolution(DWORD x1,DWORD x2,DWORD x3) {
-	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx), stub!\n",x1,x2,x3);
-	return 1;
-}
-
-/**************************************************************************
- *                 NtClose				[NTDLL.65]
- */
-DWORD WINAPI NtClose(DWORD x1) {
-	FIXME(ntdll,"(0x%08lx),stub!\n",x1);
-	return 1;
-}
-/******************************************************************************
-*  NtQueryInformationProcess		[NTDLL.] 
-*
-*/
-DWORD WINAPI NtQueryInformationProcess(DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5) {
-	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",
-		x1,x2,x3,x4,x5
-	);
-	return 0;
-}
-/******************************************************************************
-*  NtQueryInformationThread		[NTDLL.] 
-*
-*/
-DWORD WINAPI NtQueryInformationThread(DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5) {
-	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",
-		x1,x2,x3,x4,x5
-	);
-	return 0;
-}
 /******************************************************************************
-*  NtQueryInformationToken		[NTDLL.156] 
-*
-*/
-DWORD WINAPI NtQueryInformationToken(DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5) {
-	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",
-		x1,x2,x3,x4,x5
-	);
-	return 0;
-}
-/******************************************************************************
-*  RtlFormatCurrentUserKeyPath		[NTDLL.371] 
-*
-*/
-DWORD WINAPI RtlFormatCurrentUserKeyPath()
+ *  RtlFormatCurrentUserKeyPath		[NTDLL.371] 
+ */
+DWORD WINAPI RtlFormatCurrentUserKeyPath(DWORD x)
 {
-    FIXME(ntdll,"(): stub\n");
+    FIXME(ntdll,"(0x%08lx): stub\n",x);
     return 1;
 }
+
+/******************************************************************************
+ *  RtlOpenCurrentUser		[NTDLL] 
+ */
 DWORD WINAPI RtlOpenCurrentUser(DWORD x1, DWORD *x2)
 {
 /* Note: this is not the correct solution, 
@@ -837,9 +667,9 @@ DWORD WINAPI RtlOpenCurrentUser(DWORD x1, DWORD *x2)
 	return FALSE;
 }
 /******************************************************************************
-*  RtlAllocateAndInitializeSid		[NTDLL.265] 
-*
-*/
+ *  RtlAllocateAndInitializeSid		[NTDLL.265] 
+ *
+ */
 BOOL32 WINAPI RtlAllocateAndInitializeSid (LPSID_IDENTIFIER_AUTHORITY pIdentifierAuthority,DWORD nSubAuthorityCount,
 		DWORD x3,DWORD x4,DWORD x5,DWORD x6,DWORD x7,DWORD x8,DWORD x9,DWORD x10, LPSID pSid) 
 {	FIXME(ntdll,"(%p,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,%p),stub!\n",
@@ -847,11 +677,11 @@ BOOL32 WINAPI RtlAllocateAndInitializeSid (LPSID_IDENTIFIER_AUTHORITY pIdentifie
 	return 0;
 }
 /******************************************************************************
-*  RtlEqualSid		[NTDLL.352] 
-*
-*/
-DWORD WINAPI RtlEqualSid(DWORD x1,DWORD x2) 
-{	FIXME(ntdll,"(0x%08lx,0x%08lx),stub!\n", x1,x2);
+ *  RtlEqualSid		[NTDLL.352] 
+ *
+ */
+DWORD WINAPI RtlEqualSid(DWORD x1,DWORD x2) {	
+	FIXME(ntdll,"(0x%08lx,0x%08lx),stub!\n", x1,x2);
 	return TRUE;
 }
 
@@ -863,14 +693,6 @@ DWORD WINAPI RtlFreeSid(DWORD x1)
 	return TRUE;
 }
 
-/******************************************************************************
- *  NtCreatePagingFile		[NTDLL] 
- */
-DWORD WINAPI NtCreatePagingFile(DWORD x1,DWORD x2,DWORD x3,DWORD x4) {
-	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4);
-	return 0;
-}
-
 /******************************************************************************
  *  RtlGetDaclSecurityDescriptor		[NTDLL] 
  */
@@ -879,16 +701,6 @@ DWORD WINAPI RtlGetDaclSecurityDescriptor(DWORD x1,DWORD x2,DWORD x3,DWORD x4) {
 	return 0;
 }
 
-/******************************************************************************
- *  NtDuplicateObject		[NTDLL] 
- */
-DWORD WINAPI NtDuplicateObject(DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5,
-	DWORD x6,DWORD x7
-) {
-	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4,x5,x6,x7);
-	return 0;
-}
-
 /******************************************************************************
  *  RtlCreateEnvironment		[NTDLL] 
  */
@@ -897,6 +709,7 @@ DWORD WINAPI RtlCreateEnvironment(DWORD x1,DWORD x2) {
 	return 0;
 }
 
+
 /******************************************************************************
  *  RtlDestroyEnvironment		[NTDLL] 
  */
@@ -908,94 +721,96 @@ DWORD WINAPI RtlDestroyEnvironment(DWORD x) {
 /******************************************************************************
  *  RtlQueryEnvironmentVariable_U		[NTDLL] 
  */
-DWORD WINAPI RtlQueryEnvironmentVariable_U(DWORD x1,DWORD x2,DWORD x3) {
-	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3);
+DWORD WINAPI RtlQueryEnvironmentVariable_U(DWORD x1,LPUNICODE_STRING key,LPUNICODE_STRING val) {
+	FIXME(ntdll,"(0x%08lx,%s,%p),stub!\n",x1,debugstr_w(key->Buffer),val);
 	return 0;
 }
 
 /******************************************************************************
  *  RtlSetEnvironmentVariable		[NTDLL] 
  */
-DWORD WINAPI RtlSetEnvironmentVariable(DWORD x1,DWORD x2,DWORD x3) {
-	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3);
+DWORD WINAPI RtlSetEnvironmentVariable(DWORD x1,LPUNICODE_STRING key,LPUNICODE_STRING val) {
+	FIXME(ntdll,"(0x%08lx,%s,%s),stub!\n",x1,debugstr_w(key->Buffer),debugstr_w(val->Buffer));
 	return 0;
 }
 
 /******************************************************************************
- *  NtDuplicateToken		[NTDLL] 
+ *  RtlNewSecurityObject		[NTDLL] 
  */
-DWORD WINAPI NtDuplicateToken(
-	DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5,DWORD x6
-) {
+DWORD WINAPI RtlNewSecurityObject(DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5,DWORD x6) {
 	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4,x5,x6);
 	return 0;
 }
 
 /******************************************************************************
- *  NtAdjustPrivilegesToken		[NTDLL] 
+ *  RtlDeleteSecurityObject		[NTDLL] 
  */
-DWORD WINAPI NtAdjustPrivilegesToken(
-	DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5,DWORD x6
-) {
-	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4,x5,x6);
+DWORD WINAPI RtlDeleteSecurityObject(DWORD x1) {
+	FIXME(ntdll,"(0x%08lx),stub!\n",x1);
 	return 0;
 }
 
 /******************************************************************************
- *  NtOpenProcessToken		[NTDLL] 
+ *  RtlToTimeInSecondsSince1980		[NTDLL] 
  */
-DWORD WINAPI NtOpenProcessToken(DWORD x1,DWORD x2,DWORD x3) {
-	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3);
-	return 0;
+BOOL32 WINAPI RtlTimeToSecondsSince1980(LPFILETIME ft,LPDWORD timeret) {
+	/* 1980 = 1970+10*365 days +  29. februar 1972 + 29.februar 1976 */
+	*timeret = DOSFS_FileTimeToUnixTime(ft,NULL) - (10*365+2)*24*3600;
+	return 1;
 }
 
 /******************************************************************************
- *  NtSetInformationThread		[NTDLL] 
+ *  RtlToTimeInSecondsSince1970		[NTDLL] 
  */
-DWORD WINAPI NtSetInformationThread(DWORD x1,DWORD x2,DWORD x3,DWORD x4) {
-	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4);
-	return 0;
+BOOL32 WINAPI RtlTimeToSecondsSince1970(LPFILETIME ft,LPDWORD timeret) {
+	*timeret = DOSFS_FileTimeToUnixTime(ft,NULL);
+	return 1;
 }
 
 /******************************************************************************
- *  NtOpenThreadToken		[NTDLL] 
+ *  RtlAcquirePebLock		[NTDLL] 
  */
-DWORD WINAPI NtOpenThreadToken(DWORD x1,DWORD x2,DWORD x3,DWORD x4) {
-	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4);
-	return 0;
+VOID WINAPI RtlAcquirePebLock(void) {
+	FIXME(ntdll,"()\n");
+	/* enter critical section ? */
 }
 
 /******************************************************************************
- *  RtlNewSecurityObject		[NTDLL] 
+ *  RtlReleasePebLock		[NTDLL] 
  */
-DWORD WINAPI RtlNewSecurityObject(DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5,DWORD x6) {
-	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4,x5,x6);
-	return 0;
+VOID WINAPI RtlReleasePebLock(void) {
+	FIXME(ntdll,"()\n");
+	/* leave critical section ? */
 }
 
 /******************************************************************************
- *  RtlDeleteSecurityObject		[NTDLL] 
+ *  RtlAddAccessAllowedAce		[NTDLL] 
  */
-DWORD WINAPI RtlDeleteSecurityObject(DWORD x1) {
-	FIXME(ntdll,"(0x%08lx),stub!\n",x1);
+DWORD WINAPI RtlAddAccessAllowedAce(DWORD x1,DWORD x2,DWORD x3,DWORD x4) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4);
 	return 0;
 }
 
 /******************************************************************************
- *  NtSetVolumeInformationFile		[NTDLL] 
+ *  RtlGetAce		[NTDLL] 
  */
-DWORD WINAPI NtSetVolumeInformationFile(DWORD x1,DWORD x2,DWORD x3,DWORD x4,
-	DWORD x5
-) {
-	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4,x5);
+DWORD WINAPI RtlGetAce(LPACL pAcl,DWORD dwAceIndex,LPVOID *pAce ) {
+	FIXME(ntdll,"(%p,%ld,%p),stub!\n",pAcl,dwAceIndex,pAce);
 	return 0;
 }
 
 /******************************************************************************
- *  NtCreatePort		[NTDLL] 
+ *  RtlAdjustPrivilege		[NTDLL] 
  */
-DWORD WINAPI NtCreatePort(DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5) {
-	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4,x5);
+DWORD WINAPI RtlAdjustPrivilege(DWORD x1,DWORD x2,DWORD x3,DWORD x4) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4);
 	return 0;
 }
 
+/******************************************************************************
+ *  RtlIntegerToChar	[NTDLL] 
+ */
+DWORD WINAPI RtlIntegerToChar(DWORD x1,DWORD x2,DWORD x3,DWORD x4) {
+	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4);
+	return 0;
+}
diff --git a/include/ntdll.h b/include/ntdll.h
index 1791a6dc748790fd0588a3b610bf7dddc6ad3802..2b1120710c5198ffd96b9a4bcbd99779937e7835 100644
--- a/include/ntdll.h
+++ b/include/ntdll.h
@@ -13,6 +13,8 @@
 extern "C" {
 #endif
 
+typedef DWORD NTSTATUS;
+
 /* Security Ids of NT */
 
 /* Moved to windows.h
diff --git a/misc/Makefile.in b/misc/Makefile.in
index 2ab8f547641711fc8b07f8ecabaf672590120eed..81ed99369431c3af7e03384814a2d25020dd71f5 100644
--- a/misc/Makefile.in
+++ b/misc/Makefile.in
@@ -19,7 +19,6 @@ C_SRCS = \
 	lzexpand.c \
 	main.c \
 	network.c \
-	ntdll.c \
 	port.c \
 	printdrv.c \
 	registry.c \
diff --git a/relay32/ntdll.spec b/relay32/ntdll.spec
index e1f905f6dc8fe42cfaa45cb44917063f84ac7e76..9477dd412eef351e7c03cb781ea1477d7f9ccb86 100644
--- a/relay32/ntdll.spec
+++ b/relay32/ntdll.spec
@@ -51,7 +51,7 @@ type	win32
 048 stub NPXEMULATORTABLE
 049 stub NlsMbCodePageTag
 050 stub NlsMbOemCodePageTag
-051 stub NtAcceptConnectPort
+051 stdcall NtAcceptConnectPort(long long long long long long) NtAcceptConnectPort
 052 stub NtAccessCheck
 053 stub NtAccessCheckAndAuditAlarm
 054 stub NtAdjustGroupsToken
@@ -67,23 +67,23 @@ type	win32
 064 stub NtClearEvent
 065 stdcall NtClose(long) NtClose
 066 stub NtCloseObjectAuditAlarm
-067 stub NtCompleteConnectPort
-068 stub NtConnectPort
+067 stdcall NtCompleteConnectPort(long) NtCompleteConnectPort
+068 stdcall NtConnectPort(long long long long long long long long) NtConnectPort
 069 stub NtContinue
-070 stub NtCreateDirectoryObject
+070 stdcall NtCreateDirectoryObject(long long long) NtCreateDirectoryObject
 071 stdcall NtCreateEvent(long long long long long) NtCreateEvent
 072 stub NtCreateEventPair
 073 stdcall NtCreateFile(ptr long ptr ptr long long long ptr long long ptr) NtCreateFile
 074 stub NtCreateIoCompletion
-075 stub NtCreateKey
-076 stub NtCreateMailslotFile
+075 stdcall NtCreateKey(long long long long long long long) NtCreateKey
+076 stdcall NtCreateMailslotFile(long long long long long long long long) NtCreateMailslotFile
 077 stub NtCreateMutant
 078 stub NtCreateNamedPipeFile
 079 stdcall NtCreatePagingFile(long long long long) NtCreatePagingFile
 080 stdcall NtCreatePort(long long long long long) NtCreatePort
 081 stub NtCreateProcess
 082 stub NtCreateProfile
-083 stub NtCreateSection
+083 stdcall NtCreateSection(long long long long long long long) NtCreateSection
 084 stub NtCreateSemaphore
 085 stub NtCreateSymbolicLinkObject
 086 stub NtCreateThread
@@ -115,17 +115,17 @@ type	win32
 112 stub NtImpersonateClientOfPort
 113 stub NtImpersonateThread
 114 stub NtInitializeRegistry
-115 stub NtListenPort
+115 stdcall NtListenPort(long long) NtListenPort
 116 stub NtLoadDriver
 117 stub NtLoadKey
 118 stub NtLockFile
 119 stub NtLockVirtualMemory
 120 stub NtMakeTemporaryObject
-121 stub NtMapViewOfSection
+121 stdcall NtMapViewOfSection(long long long long long long long long long long) NtMapViewOfSection
 122 stub NtNotifyChangeDirectoryFile
 123 stub NtNotifyChangeKey
 124 stdcall NtOpenDirectoryObject(long long long) NtOpenDirectoryObject
-125 stub NtOpenEvent
+125 stdcall NtOpenEvent(long long long) NtOpenEvent
 126 stub NtOpenEventPair
 127 stdcall NtOpenFile(ptr long ptr ptr long long) NtOpenFile
 128 stub NtOpenIoCompletion
@@ -134,7 +134,7 @@ type	win32
 131 stub NtOpenObjectAuditAlarm
 132 stub NtOpenProcess
 133 stdcall NtOpenProcessToken(long long long) NtOpenProcessToken
-134 stub NtOpenSection
+134 stdcall NtOpenSection(long long long) NtOpenSection
 135 stub NtOpenSemaphore
 136 stub NtOpenSymbolicLinkObject
 137 stub NtOpenThread
@@ -152,7 +152,7 @@ type	win32
 149 stdcall NtQueryDirectoryObject(long long long long long long long) NtQueryDirectoryObject
 150 stub NtQueryEaFile
 151 stub NtQueryEvent
-152 stub NtQueryInformationFile
+152 stdcall NtQueryInformationFile(long long long long long) NtQueryInformationFile
 153 stub NtQueryInformationPort
 154 stdcall NtQueryInformationProcess(long long long long long) NtQueryInformationProcess
 155 stdcall NtQueryInformationThread (long long long long long) NtQueryInformationThread
@@ -177,40 +177,40 @@ type	win32
 174 stub NtQueryVolumeInformationFile
 175 stub NtRaiseException
 176 stub NtRaiseHardError
-177 stub NtReadFile
+177 stdcall NtReadFile(long long long long long long long long long) NtReadFile
 178 stub NtReadRequestData
 179 stub NtReadVirtualMemory
 180 stub NtRegisterNewDevice
-181 stub NtRegisterThreadTerminatePort
+181 stdcall NtRegisterThreadTerminatePort(long) NtRegisterThreadTerminatePort
 182 stub NtReleaseMutant
 183 stub NtReleaseProcessMutant
 184 stub NtReleaseSemaphore
 185 stub NtRemoveIoCompletion
 186 stub NtReplaceKey
 187 stub NtReplyPort
-188 stub NtReplyWaitReceivePort
+188 stdcall NtReplyWaitReceivePort(long long long long) NtReplyWaitReceivePort
 189 stub NtReplyWaitReplyPort
 190 stub NtRequestPort
-191 stub NtRequestWaitReplyPort
+191 stdcall NtRequestWaitReplyPort(long long long) NtRequestWaitReplyPort
 192 stub NtResetEvent
 193 stub NtRestoreKey
-194 stub NtResumeThread
+194 stdcall NtResumeThread(long long) NtResumeThread
 195 stub NtSaveKey
 196 stub NtSetContextThread
 197 stub NtSetDefaultHardErrorPort
 198 stub NtSetDefaultLocale
 199 stub NtSetEaFile
-200 stub NtSetEvent
+200 stdcall NtSetEvent(long long) NtSetEvent
 201 stub NtSetHighEventPair
 202 stub NtSetHighWaitLowEventPair
 203 stub NtSetHighWaitLowThread
-204 stub NtSetInformationFile
+204 stdcall NtSetInformationFile(long long long long long) NtSetInformationFile
 205 stub NtSetInformationKey
 206 stub NtSetInformationObject
 207 stdcall NtSetInformationProcess(long long long long) NtSetInformationProcess
 208 stdcall NtSetInformationThread(long long long long) NtSetInformationThread
 209 stub NtSetInformationToken
-210 stub NtSetIntervalProfile
+210 stdcall NtSetIntervalProfile(long long) NtSetIntervalProfile
 211 stub NtSetIoCompletion
 212 stub NtSetLdtEntries
 213 stub NtSetLowEventPair
@@ -223,7 +223,7 @@ type	win32
 220 stub NtSetSystemTime
 221 stdcall NtSetTimer(long long long long long long) NtSetTimer
 222 stub NtSetTimerResolution
-223 stub NtSetValueKey
+223 stdcall NtSetValueKey(long long long long long long) NtSetValueKey
 224 stdcall NtSetVolumeInformationFile(long long long long long) NtSetVolumeInformationFile
 225 stub NtShutdownSystem
 226 stub NtStartProfile
@@ -231,7 +231,7 @@ type	win32
 228 stub NtSuspendThread
 229 stub NtSystemDebugControl
 230 stub NtTerminateProcess
-231 stub NtTerminateThread
+231 stdcall NtTerminateThread(long long) NtTerminateThread
 232 stub NtTestAlert
 233 stub NtUnloadDriver
 234 stub NtUnloadKey
@@ -242,7 +242,7 @@ type	win32
 239 stub NtW32Call
 240 stub NtWaitForMultipleObjects
 241 stub NtWaitForProcessMutant
-242 stub NtWaitForSingleObject
+242 stdcall NtWaitForSingleObject(long long long) NtWaitForSingleObject
 243 stub NtWaitHighEventPair
 244 stub NtWaitLowEventPair
 245 stub NtWriteFile
@@ -255,16 +255,16 @@ type	win32
 252 stub RestoreEm87Context
 253 stub RtlAbortRXact
 254 stub RtlAbsoluteToSelfRelativeSD
-255 stub RtlAcquirePebLock
+255 stdcall RtlAcquirePebLock() RtlAcquirePebLock
 256 stub RtlAcquireResourceExclusive
 257 stub RtlAcquireResourceShared
-258 stub RtlAddAccessAllowedAce
+258 stdcall RtlAddAccessAllowedAce(long long long long) RtlAddAccessAllowedAce
 259 stub RtlAddAccessDeniedAce
 260 stdcall RtlAddAce(ptr long long ptr long) RtlAddAce
 261 stub RtlAddActionToRXact
 262 stub RtlAddAttributeActionToRXact
 263 stub RtlAddAuditAccessAce
-264 stub RtlAdjustPrivilege
+264 stdcall RtlAdjustPrivilege(long long long long) RtlAdjustPrivilege
 265 stdcall RtlAllocateAndInitializeSid (ptr long long long long long long long long long ptr) RtlAllocateAndInitializeSid
 266 stdcall RtlAllocateHeap(long long long) HeapAlloc
 267 stub RtlAnsiCharToUnicodeChar
@@ -333,7 +333,7 @@ type	win32
 330 stub RtlDeleteResource
 331 stdcall RtlDeleteSecurityObject(long) RtlDeleteSecurityObject
 332 stdcall RtlDestroyEnvironment(long) RtlDestroyEnvironment
-333 stub RtlDestroyHeap
+333 stdcall RtlDestroyHeap(long) HeapDestroy
 334 stub RtlDestroyProcessParameters
 335 stub RtlDestroyQueryDebugBuffer
 336 stub RtlDetermineDosPathNameType_U
@@ -354,7 +354,7 @@ type	win32
 351 stub RtlEqualPrefixSid
 352 stdcall RtlEqualSid (long long) RtlEqualSid
 353 stub RtlEqualString
-354 stub RtlEqualUnicodeString
+354 stdcall RtlEqualUnicodeString(long long long) RtlEqualUnicodeString
 355 stub RtlEraseUnicodeString
 356 stub RtlExpandEnvironmentStrings_U
 357 stub RtlExtendHeap
@@ -379,7 +379,7 @@ type	win32
 376 stdcall RtlFreeSid (long) RtlFreeSid
 377 stdcall RtlFreeUnicodeString(ptr) RtlFreeUnicodeString
 378 stub RtlGenerate8dot3Name
-379 stub RtlGetAce
+379 stdcall RtlGetAce(ptr long ptr) RtlGetAce
 380 stub RtlGetCallersAddress
 381 stub RtlGetCompressionWorkSpaceSize
 382 stub RtlGetControlSecurityDescriptor
@@ -412,7 +412,7 @@ type	win32
 409 stub RtlInitializeResource
 410 stdcall RtlInitializeSid(ptr ptr long) RtlInitializeSid
 411 stub RtlInsertElementGenericTable
-412 stub RtlIntegerToChar
+412 stdcall RtlIntegerToChar(long long long long) RtlIntegerToChar
 413 stub RtlIntegerToUnicodeString
 414 stub RtlIsDosDeviceName_U
 415 stub RtlIsGenericTableEmpty
@@ -470,7 +470,7 @@ type	win32
 467 stub RtlReAllocateHeap
 468 stub RtlRealPredecessor
 469 stub RtlRealSuccessor
-470 stub RtlReleasePebLock
+470 stdcall RtlReleasePebLock() RtlReleasePebLock
 471 stub RtlReleaseResource
 472 stub RtlRemoteCall
 473 stub RtlResetRtlTranslations
@@ -503,8 +503,8 @@ type	win32
 500 stub RtlSystemTimeToLocalTime
 501 stub RtlTimeFieldsToTime
 502 stdcall RtlTimeToElapsedTimeFields(long long) RtlTimeToElapsedTimeFields
-503 stub RtlTimeToSecondsSince1970
-504 stub RtlTimeToSecondsSince1980
+503 stdcall RtlTimeToSecondsSince1970(ptr ptr) RtlTimeToSecondsSince1970
+504 stdcall RtlTimeToSecondsSince1980(ptr ptr) RtlTimeToSecondsSince1980
 505 stub RtlTimeToTimeFields
 506 stub RtlUnicodeStringToAnsiSize
 507 stdcall RtlUnicodeStringToAnsiString(ptr ptr long) RtlUnicodeStringToAnsiString
@@ -570,7 +570,7 @@ type	win32
 567 stub ZwClose
 568 stub ZwCloseObjectAuditAlarm
 569 stub ZwCompleteConnectPort
-570 stub ZwConnectPort
+570 stdcall ZwConnectPort(long long long long long long long long) NtConnectPort
 571 stub ZwContinue
 572 stub ZwCreateDirectoryObject
 573 stub ZwCreateEvent
@@ -692,7 +692,7 @@ type	win32
 689 stub ZwReplyWaitReceivePort
 690 stub ZwReplyWaitReplyPort
 691 stub ZwRequestPort
-692 stub ZwRequestWaitReplyPort
+692 stdcall ZwRequestWaitReplyPort(long long long) NtRequestWaitReplyPort
 693 stub ZwResetEvent
 694 stub ZwRestoreKey
 695 stub ZwResumeThread
@@ -862,7 +862,7 @@ type	win32
 859 stub __eFYL2XP1
 860 stub __eGetStatusWord
 861 stub _alloca_probe
-862 cdecl _chkstk() NTDLL_chkstk
+862 register _chkstk() NTDLL_chkstk
 863 stub _fltused
 864 cdecl _ftol(double) CRTDLL__ftol
 865 stub _itoa
@@ -941,14 +941,14 @@ type	win32
 938 stub wcscspn
 939 cdecl wcslen(wstr) CRTDLL_wcslen
 940 stub wcsncat
-941 stub wcsncmp
+941 cdecl wcsncmp(wstr wstr long) CRTDLL_wcsncmp
 942 cdecl wcsncpy(ptr wstr long) CRTDLL_wcsncpy
 943 stub wcspbrk
 944 cdecl wcsrchr(wstr long) CRTDLL_wcsrchr
 945 cdecl wcsspn(wstr wstr) CRTDLL_wcsspn
 946 cdecl wcsstr(wstr wstr) CRTDLL_wcsstr
-947 stub wcstok
-948 stub wcstol
+947 cdecl wcstok(wstr wstr) CRTDLL_wcstok
+948 cdecl wcstol(wstr ptr long) CRTDLL_wcstol
 949 cdecl wcstombs(ptr ptr long) CRTDLL_wcstombs
 950 stub wcstoul