Removed a few dependencies on kernel32 functions.

diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c
index 092a4e3..6b0bed5 100644
--- a/dlls/ntdll/nt.c
+++ b/dlls/ntdll/nt.c
@@ -584,12 +584,17 @@
  * 
  * writes a string to the nt-textmode screen eg. during startup
  */
-NTSTATUS WINAPI NtDisplayString (
-	PUNICODE_STRING string)
+NTSTATUS WINAPI NtDisplayString ( PUNICODE_STRING string )
 {
-	TRACE("%p(%s)\n",string->Buffer, debugstr_w(string->Buffer));
-	WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE), string->Buffer, string->Length, 0, 0);
-	return 0;
+    STRING stringA;
+    NTSTATUS ret;
+
+    if (!(ret = RtlUnicodeStringToAnsiString( &stringA, string, TRUE )))
+    {
+        MESSAGE( "%.*s", stringA.Length, stringA.Buffer );
+        RtlFreeAnsiString( &stringA );
+    }
+    return ret;
 }
 
 /******************************************************************************
diff --git a/dlls/ntdll/rtl.c b/dlls/ntdll/rtl.c
index 79c4fe0..3097148 100644
--- a/dlls/ntdll/rtl.c
+++ b/dlls/ntdll/rtl.c
@@ -41,7 +41,7 @@
 	rwl->uSharedWaiters = 0;
 	rwl->hOwningThreadId = 0;
 	rwl->dwTimeoutBoost = 0; /* no info on this one, default value is 0 */
-	InitializeCriticalSection( &rwl->rtlCS );
+	RtlInitializeCriticalSection( &rwl->rtlCS );
         NtCreateSemaphore( &rwl->hExclusiveReleaseSemaphore, 0, NULL, 0, 65535 );
         NtCreateSemaphore( &rwl->hSharedReleaseSemaphore, 0, NULL, 0, 65535 );
     }
@@ -55,7 +55,7 @@
 {
     if( rwl )
     {
-	EnterCriticalSection( &rwl->rtlCS );
+	RtlEnterCriticalSection( &rwl->rtlCS );
 	if( rwl->iNumberActive || rwl->uExclusiveWaiters || rwl->uSharedWaiters )
 	    MESSAGE("Deleting active MRSW lock (%p), expect failure\n", rwl );
 	rwl->hOwningThreadId = 0;
@@ -63,8 +63,8 @@
 	rwl->iNumberActive = 0;
 	NtClose( rwl->hExclusiveReleaseSemaphore );
 	NtClose( rwl->hSharedReleaseSemaphore );
-	LeaveCriticalSection( &rwl->rtlCS );
-	DeleteCriticalSection( &rwl->rtlCS );
+	RtlLeaveCriticalSection( &rwl->rtlCS );
+	RtlDeleteCriticalSection( &rwl->rtlCS );
     }
 }
 
@@ -78,7 +78,7 @@
     if( !rwl ) return 0;
 
 start:
-    EnterCriticalSection( &rwl->rtlCS );
+    RtlEnterCriticalSection( &rwl->rtlCS );
     if( rwl->iNumberActive == 0 ) /* lock is free */
     {
 	rwl->iNumberActive = -1;
@@ -97,7 +97,7 @@
 	 {
 	     rwl->uExclusiveWaiters++;
 
-	     LeaveCriticalSection( &rwl->rtlCS );
+	     RtlLeaveCriticalSection( &rwl->rtlCS );
 	     if( WaitForSingleObject( rwl->hExclusiveReleaseSemaphore, INFINITE ) == WAIT_FAILED )
 		 goto done;
 	     goto start; /* restart the acquisition to avoid deadlocks */
@@ -110,7 +110,7 @@
     if( retVal == 1 )
 	rwl->hOwningThreadId = GetCurrentThreadId();
 done:
-    LeaveCriticalSection( &rwl->rtlCS );
+    RtlLeaveCriticalSection( &rwl->rtlCS );
     return retVal;
 }
 
@@ -124,7 +124,7 @@
     if( !rwl ) return 0;
 
 start:
-    EnterCriticalSection( &rwl->rtlCS );
+    RtlEnterCriticalSection( &rwl->rtlCS );
     if( rwl->iNumberActive < 0 )
     {
 	if( rwl->hOwningThreadId == GetCurrentThreadId() )
@@ -137,7 +137,7 @@
 	if( fWait )
 	{
 	    rwl->uSharedWaiters++;
-	    LeaveCriticalSection( &rwl->rtlCS );
+	    RtlLeaveCriticalSection( &rwl->rtlCS );
 	    if( (dwWait = WaitForSingleObject( rwl->hSharedReleaseSemaphore, INFINITE )) == WAIT_FAILED )
 		goto done;
 	    goto start;
@@ -150,7 +150,7 @@
 	retVal = 1;
     }
 done:
-    LeaveCriticalSection( &rwl->rtlCS );
+    RtlLeaveCriticalSection( &rwl->rtlCS );
     return retVal;
 }
 
@@ -160,7 +160,7 @@
  */
 void WINAPI RtlReleaseResource(LPRTL_RWLOCK rwl)
 {
-    EnterCriticalSection( &rwl->rtlCS );
+    RtlEnterCriticalSection( &rwl->rtlCS );
 
     if( rwl->iNumberActive > 0 ) /* have one or more readers */
     {
@@ -193,7 +193,7 @@
 		}
 	}
     }
-    LeaveCriticalSection( &rwl->rtlCS );
+    RtlLeaveCriticalSection( &rwl->rtlCS );
 }
 
 
@@ -421,12 +421,9 @@
 BOOLEAN  WINAPI RtlDosPathNameToNtPathName_U(
 	LPWSTR from,PUNICODE_STRING us,DWORD x2,DWORD x3)
 {
-	LPSTR	fromA = HEAP_strdupWtoA(GetProcessHeap(),0,from);
-
-	FIXME("(%s,%p,%08lx,%08lx)\n",fromA,us,x2,x3);
-	if (us)
-		RtlInitUnicodeString(us,HEAP_strdupW(GetProcessHeap(),0,from));
-	return TRUE;
+    FIXME("(%s,%p,%08lx,%08lx)\n",debugstr_w(from),us,x2,x3);
+    if (us) RtlCreateUnicodeString( us, from );
+    return TRUE;
 }
 
 
diff --git a/dlls/ntdll/sec.c b/dlls/ntdll/sec.c
index 7ff4bb1..8ca7329 100644
--- a/dlls/ntdll/sec.c
+++ b/dlls/ntdll/sec.c
@@ -11,6 +11,7 @@
 #include <math.h>
 #include "windef.h"
 #include "winbase.h"
+#include "wine/exception.h"
 #include "wine/winestring.h"
 #include "file.h"
 #include "heap.h"
@@ -27,6 +28,14 @@
 
 #define NT_SUCCESS(status) (status == STATUS_SUCCESS)
 
+/* filter for page-fault exceptions */
+static WINE_EXCEPTION_FILTER(page_fault)
+{
+    if (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION)
+        return EXCEPTION_EXECUTE_HANDLER;
+    return EXCEPTION_CONTINUE_SEARCH;
+}
+
 /*
  *	SID FUNCTIONS
  */
@@ -226,19 +235,23 @@
 BOOL WINAPI
 RtlValidSid( PSID pSid )
 {
-    if (IsBadReadPtr(pSid, 4))
+    BOOL ret;
+    __TRY
+    {
+        ret = TRUE;
+        if (!pSid || pSid->Revision != SID_REVISION ||
+            pSid->SubAuthorityCount > SID_MAX_SUB_AUTHORITIES)
+        {
+            ret = FALSE;
+        }
+    }
+    __EXCEPT(page_fault)
     {
         WARN("(%p): invalid pointer!\n", pSid);
         return FALSE;
     }
-
-    if (pSid->SubAuthorityCount > SID_MAX_SUB_AUTHORITIES)
-        return FALSE;
-
-    if (!pSid || pSid->Revision != SID_REVISION)
-        return FALSE;
-
-    return TRUE;
+    __ENDTRY
+    return ret;
 }