[PATCH 1/4] kernel32/tests: Test deletion of a mapped file

Ben Peddell klightspeed at netspace.net.au
Wed Jun 27 20:30:21 CDT 2012


Windows NT returns ERROR_ACCESS_DENIED when attempting to delete a
mapped file.

---
 dlls/kernel32/tests/file.c |   30 ++++++++++++++++++++++++++++++
 1 files changed, 30 insertions(+), 0 deletions(-)

diff --git a/dlls/kernel32/tests/file.c b/dlls/kernel32/tests/file.c
index c6e9f18..a021e16 100644
--- a/dlls/kernel32/tests/file.c
+++ b/dlls/kernel32/tests/file.c
@@ -1293,6 +1293,8 @@ static void test_DeleteFileA( void )
     BOOL ret;
     char temp_path[MAX_PATH], temp_file[MAX_PATH];
     HANDLE hfile;
+    HANDLE hmapfile;
+    DWORD written;
 
     ret = DeleteFileA(NULL);
     ok(!ret && (GetLastError() == ERROR_INVALID_PARAMETER ||
@@ -1315,10 +1317,38 @@ static void test_DeleteFileA( void )
     GetTempFileName(temp_path, "tst", 0, temp_file);
 
     SetLastError(0xdeadbeef);
+    hfile = CreateFile(temp_file, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0);
+    ok(hfile != INVALID_HANDLE_VALUE, "CreateFile error %d\n", GetLastError());
+
+    // Write some data to it so CreateFileMapping will work
+    SetLastError(0xdeadbeef);
+    ret = WriteFile(hfile, temp_file, sizeof(temp_file), &written, NULL);
+    ok(ret, "WriteFile error %d\n", GetLastError());
+
+    SetLastError(0xdeadbeef);
+    ret = CloseHandle(hfile);
+    ok(ret, "CloseHandle error %d\n", GetLastError());
+
+    SetLastError(0xdeadbeef);
     hfile = CreateFile(temp_file, GENERIC_READ, FILE_SHARE_DELETE | FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0);
     ok(hfile != INVALID_HANDLE_VALUE, "CreateFile error %d\n", GetLastError());
 
     SetLastError(0xdeadbeef);
+    hmapfile = CreateFileMapping(hfile, NULL, PAGE_READONLY, 0, 0, NULL);
+    ok(hmapfile != NULL, "CreateFileMapping: error %d\n", GetLastError());
+
+    SetLastError(0xdeadbeef);
+    ret = DeleteFile(temp_file);
+todo_wine
+    ok(!ret, "DeleteFile with mapping should fail\n");
+todo_wine
+    ok(GetLastError() == ERROR_ACCESS_DENIED, "DeleteFile: expected ERROR_ACCESS_DENIED, got %d\n", GetLastError());
+
+    SetLastError(0xdeadbeef);
+    ret = CloseHandle(hmapfile);
+    ok(ret, "CloseHandle error %d\n", GetLastError());
+
+    SetLastError(0xdeadbeef);
     ret = DeleteFile(temp_file);
 todo_wine
     ok(ret, "DeleteFile error %d\n", GetLastError());
-- 
1.7.3.4




More information about the wine-patches mailing list