[2/2] advapi32: Add some mutex security tests.
Dmitry Timoshkov
dmitry at baikal.ru
Wed Mar 14 03:36:29 CDT 2012
---
dlls/advapi32/tests/security.c | 63 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 63 insertions(+)
diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c
index 7b2460f..e5bff4a 100644
--- a/dlls/advapi32/tests/security.c
+++ b/dlls/advapi32/tests/security.c
@@ -3986,6 +3986,68 @@ static void test_CreateRestrictedToken(void)
CloseHandle(process_token);
}
+static void test_mutex_security(void)
+{
+ HANDLE mutex, token, process_token;
+ DWORD ret, length, needed, granted, priv_set_len;
+ BOOL status;
+ PRIVILEGE_SET priv_set;
+ BYTE *sd;
+ GENERIC_MAPPING mapping = { STANDARD_RIGHTS_READ, STANDARD_RIGHTS_WRITE,
+ STANDARD_RIGHTS_EXECUTE | SYNCHRONIZE,
+ STANDARD_RIGHTS_ALL | MUTEX_ALL_ACCESS };
+
+ SetLastError(0xdeadbeef);
+ mutex = OpenMutex(0, FALSE, "WineTestMutex");
+ ok(!mutex, "mutex should not exist\n");
+ ok(GetLastError() == ERROR_FILE_NOT_FOUND, "wrong error %u\n", GetLastError());
+
+ SetLastError(0xdeadbeef);
+ mutex = CreateMutex(NULL, FALSE, "WineTestMutex");
+ ok(mutex != 0, "CreateMutex error %d\n", GetLastError());
+
+ needed = 0xdeadbeef;
+ SetLastError(0xdeadbeef);
+ ret = GetKernelObjectSecurity(mutex, OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION,
+ NULL, 0, &needed);
+ ok(!ret, "GetKernelObjectSecurity should fail\n");
+ ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError());
+ ok(needed != 0xdeadbeef, "GetKernelObjectSecurity should return required buffer length\n");
+
+ length = needed;
+ sd = HeapAlloc(GetProcessHeap(), 0, length);
+
+ needed = 0;
+ SetLastError(0xdeadbeef);
+ ret = GetKernelObjectSecurity(mutex, OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION,
+ sd, length, &needed);
+ ok(ret, "GetKernelObjectSecurity error %d\n", GetLastError());
+ ok(needed == length, "GetKernelObjectSecurity should return required buffer length\n");
+
+ ret = OpenProcessToken(GetCurrentProcess(), TOKEN_DUPLICATE | TOKEN_QUERY, &process_token);
+ ok(ret, "OpenProcessToken error %d\n", GetLastError());
+
+ ret = DuplicateToken(process_token, SecurityImpersonation, &token);
+ ok(ret, "DuplicateToken error %d\n", GetLastError());
+
+ CloseHandle(process_token);
+
+ priv_set_len = sizeof(priv_set);
+ granted = 0xdeadbeef;
+ status = 0xdeadbeef;
+ SetLastError(0xdeadbeef);
+ ret = AccessCheck(sd, token, MAXIMUM_ALLOWED, &mapping, &priv_set, &priv_set_len, &granted, &status);
+todo_wine {
+ ok(ret, "AccessCheck error %d\n", GetLastError());
+ ok(status == 1, "expected 1, got %d\n", status);
+ ok(granted == (STANDARD_RIGHTS_ALL | MUTEX_ALL_ACCESS), "expected STANDARD_RIGHTS_ALL | MUTEX_ALL_ACCESS, got %#x\n", granted);
+}
+ CloseHandle(token);
+
+ HeapFree(GetProcessHeap(), 0, sd);
+ CloseHandle (mutex);
+}
+
START_TEST(security)
{
init();
@@ -3996,6 +4058,7 @@ START_TEST(security)
test_process_security_child();
return;
}
+ test_mutex_security();
test_sid();
test_trustee();
test_luid();
--
1.7.9.2
More information about the wine-patches
mailing list