Dmitry Timoshkov : advapi32/tests: Test generic access mapping for a file.

Alexandre Julliard julliard at winehq.org
Mon Dec 30 13:06:00 CST 2013


Module: wine
Branch: master
Commit: 2d05a633905175afc341fad52c6a1349e7fa2493
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=2d05a633905175afc341fad52c6a1349e7fa2493

Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date:   Thu Dec 26 16:34:22 2013 +0900

advapi32/tests: Test generic access mapping for a file.

---

 dlls/advapi32/tests/security.c |   45 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 45 insertions(+), 0 deletions(-)

diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c
index cce1339..9f1e611 100644
--- a/dlls/advapi32/tests/security.c
+++ b/dlls/advapi32/tests/security.c
@@ -4756,6 +4756,50 @@ todo_wine
     CloseHandle(file);
 }
 
+static void test_file_security(HANDLE token)
+{
+    DWORD ret, i, access;
+    HANDLE file, dup;
+    static const struct
+    {
+        int generic, mapped;
+    } map[] =
+    {
+        { GENERIC_READ, FILE_GENERIC_READ },
+        { GENERIC_WRITE, FILE_GENERIC_WRITE },
+        { GENERIC_EXECUTE, FILE_GENERIC_EXECUTE },
+        { GENERIC_ALL, STANDARD_RIGHTS_ALL | FILE_ALL_ACCESS }
+    };
+    char temp_path[MAX_PATH];
+    char file_name[MAX_PATH];
+
+    GetTempPathA(MAX_PATH, temp_path);
+    GetTempFileNameA(temp_path, "tmp", 0, file_name);
+
+    SetLastError(0xdeadbeef);
+    file = CreateFileA(file_name, GENERIC_ALL, 0, NULL, CREATE_ALWAYS, 0, NULL);
+    ok(file != INVALID_HANDLE_VALUE, "CreateFile error %d\n", GetLastError());
+
+    access = get_obj_access(file);
+    ok(access == FILE_ALL_ACCESS, "expected FILE_ALL_ACCESS, got %#x\n", access);
+
+    for (i = 0; i < sizeof(map)/sizeof(map[0]); i++)
+    {
+        SetLastError( 0xdeadbeef );
+        ret = DuplicateHandle(GetCurrentProcess(), file, GetCurrentProcess(), &dup,
+                              map[i].generic, FALSE, 0);
+        ok(ret, "DuplicateHandle error %d\n", GetLastError());
+
+        access = get_obj_access(dup);
+        ok(access == map[i].mapped, "%d: expected %#x, got %#x\n", i, map[i].mapped, access);
+
+        CloseHandle(dup);
+    }
+
+    CloseHandle(file);
+    DeleteFileA(file_name);
+}
+
 static BOOL validate_impersonation_token(HANDLE token, DWORD *token_type)
 {
     DWORD ret, needed;
@@ -4830,6 +4874,7 @@ static void test_kernel_objects_security(void)
     test_event_security(token);
     test_named_pipe_security(token);
     test_semaphore_security(token);
+    test_file_security(token);
     /* FIXME: test other kernel object types */
 
     CloseHandle(process_token);




More information about the wine-cvs mailing list