Moved kernel32.DeleteFileW core implementation to ntdll.NtDeleteFile.

diff --git a/dlls/kernel/file.c b/dlls/kernel/file.c
index b5b7c49..807fbb4 100644
--- a/dlls/kernel/file.c
+++ b/dlls/kernel/file.c
@@ -1362,16 +1362,32 @@
  */
 BOOL WINAPI DeleteFileW( LPCWSTR path )
 {
-    HANDLE hFile;
+    UNICODE_STRING nameW;
+    OBJECT_ATTRIBUTES attr;
+    NTSTATUS status;
 
     TRACE("%s\n", debugstr_w(path) );
 
-    hFile = CreateFileW( path, GENERIC_READ | GENERIC_WRITE,
-                         FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
-                         NULL, OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, 0 );
-    if (hFile == INVALID_HANDLE_VALUE) return FALSE;
+    if (!RtlDosPathNameToNtPathName_U( path, &nameW, NULL, NULL ))
+    {
+        SetLastError( ERROR_PATH_NOT_FOUND );
+        return FALSE;
+    }
 
-    CloseHandle(hFile);  /* last close will delete the file */
+    attr.Length = sizeof(attr);
+    attr.RootDirectory = 0;
+    attr.Attributes = OBJ_CASE_INSENSITIVE;
+    attr.ObjectName = &nameW;
+    attr.SecurityDescriptor = NULL;
+    attr.SecurityQualityOfService = NULL;
+
+    status = NtDeleteFile(&attr);
+    RtlFreeUnicodeString( &nameW );
+    if (status)
+    {
+        SetLastError( RtlNtStatusToDosError(status) );
+        return FALSE;
+    }
     return TRUE;
 }
 
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
index 4b7b919..e1ee49f 100644
--- a/dlls/ntdll/file.c
+++ b/dlls/ntdll/file.c
@@ -1647,8 +1647,17 @@
  */
 NTSTATUS WINAPI NtDeleteFile( POBJECT_ATTRIBUTES ObjectAttributes )
 {
-    FIXME("%p\n", ObjectAttributes);
-    return STATUS_NOT_IMPLEMENTED;
+    NTSTATUS status;
+    HANDLE hFile;
+    IO_STATUS_BLOCK io;
+
+    TRACE("%p\n", ObjectAttributes);
+    status = NtCreateFile( &hFile, GENERIC_READ | GENERIC_WRITE, ObjectAttributes, 
+                           &io, NULL, 0,
+                           FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, 
+                           FILE_OPEN, FILE_DELETE_ON_CLOSE, NULL, 0 );
+    if (status == STATUS_SUCCESS) status = NtClose(hFile);
+    return status;
 }
 
 /******************************************************************