Dmitry Timoshkov : advapi32: Add distinct tests for Read, Write and Execute access rights for kernel objects.
Alexandre Julliard
julliard at winehq.org
Thu Apr 19 13:27:52 CDT 2012
Module: wine
Branch: master
Commit: 27a3c43bb00fe69c4652b89cf723b5cb9e9fbec5
URL: http://source.winehq.org/git/wine.git/?a=commit;h=27a3c43bb00fe69c4652b89cf723b5cb9e9fbec5
Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date: Wed Apr 18 16:29:46 2012 +0900
advapi32: Add distinct tests for Read, Write and Execute access rights for kernel objects.
---
dlls/advapi32/tests/security.c | 49 +++++++++++++++++++++++++++++++++++----
1 files changed, 44 insertions(+), 5 deletions(-)
diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c
index 9db84a4..40691ad 100644
--- a/dlls/advapi32/tests/security.c
+++ b/dlls/advapi32/tests/security.c
@@ -38,6 +38,10 @@
/* PROCESS_ALL_ACCESS in Vista+ PSDKs is incompatible with older Windows versions */
#define PROCESS_ALL_ACCESS_NT4 (PROCESS_ALL_ACCESS & ~0xf000)
+#ifndef EVENT_QUERY_STATE
+#define EVENT_QUERY_STATE 0x0001
+#endif
+
/* copied from Wine winternl.h - not included in the Windows SDK */
typedef enum _OBJECT_INFORMATION_CLASS {
ObjectBasicInformation,
@@ -3992,6 +3996,9 @@ static void validate_default_security_descriptor(SECURITY_DESCRIPTOR *sd)
ACL *acl;
void *sid;
+ ret = IsValidSecurityDescriptor(sd);
+ ok(ret, "security descriptor is not valid\n");
+
present = -1;
defaulted = -1;
acl = (void *)0xdeadbeef;
@@ -4041,12 +4048,12 @@ static void test_default_handle_security(HANDLE token, HANDLE handle, GENERIC_MA
length = needed;
sd = HeapAlloc(GetProcessHeap(), 0, length);
- needed = 0;
+ needed = 0xdeadbeef;
SetLastError(0xdeadbeef);
ret = GetKernelObjectSecurity(handle, 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");
+ ok(needed == length, "GetKernelObjectSecurity should return %u instead of %u\n", length, needed);
validate_default_security_descriptor(sd);
@@ -4058,7 +4065,7 @@ static void test_default_handle_security(HANDLE token, HANDLE handle, GENERIC_MA
todo_wine {
ok(ret, "AccessCheck error %d\n", GetLastError());
ok(status == 1, "expected 1, got %d\n", status);
- ok(granted == mapping->GenericAll, "expected %#x, got %#x\n", mapping->GenericAll, granted);
+ ok(granted == mapping->GenericAll, "expected all access %#x, got %#x\n", mapping->GenericAll, granted);
}
priv_set_len = sizeof(priv_set);
granted = 0xdeadbeef;
@@ -4080,13 +4087,44 @@ todo_wine {
ok(status == 0, "expected 0, got %d\n", status);
ok(granted == 0, "expected 0, got %#x\n", granted);
}
+ priv_set_len = sizeof(priv_set);
+ granted = 0xdeadbeef;
+ status = 0xdeadbeef;
+ SetLastError(0xdeadbeef);
+ ret = AccessCheck(sd, token, mapping->GenericRead, 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 == mapping->GenericRead, "expected read access %#x, got %#x\n", mapping->GenericRead, granted);
+}
+ priv_set_len = sizeof(priv_set);
+ granted = 0xdeadbeef;
+ status = 0xdeadbeef;
+ SetLastError(0xdeadbeef);
+ ret = AccessCheck(sd, token, mapping->GenericWrite, 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 == mapping->GenericWrite, "expected write access %#x, got %#x\n", mapping->GenericWrite, granted);
+}
+ priv_set_len = sizeof(priv_set);
+ granted = 0xdeadbeef;
+ status = 0xdeadbeef;
+ SetLastError(0xdeadbeef);
+ ret = AccessCheck(sd, token, mapping->GenericExecute, 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 == mapping->GenericExecute, "expected execute access %#x, got %#x\n", mapping->GenericExecute, granted);
+}
HeapFree(GetProcessHeap(), 0, sd);
}
static void test_mutex_security(HANDLE token)
{
HANDLE mutex;
- GENERIC_MAPPING mapping = { STANDARD_RIGHTS_READ, STANDARD_RIGHTS_WRITE,
+ GENERIC_MAPPING mapping = { STANDARD_RIGHTS_READ | MUTANT_QUERY_STATE | SYNCHRONIZE,
+ STANDARD_RIGHTS_WRITE | MUTEX_MODIFY_STATE | SYNCHRONIZE,
STANDARD_RIGHTS_EXECUTE | SYNCHRONIZE,
STANDARD_RIGHTS_ALL | MUTEX_ALL_ACCESS };
@@ -4107,7 +4145,8 @@ static void test_mutex_security(HANDLE token)
static void test_event_security(HANDLE token)
{
HANDLE event;
- GENERIC_MAPPING mapping = { STANDARD_RIGHTS_READ, STANDARD_RIGHTS_WRITE,
+ GENERIC_MAPPING mapping = { STANDARD_RIGHTS_READ | EVENT_QUERY_STATE | SYNCHRONIZE,
+ STANDARD_RIGHTS_WRITE | EVENT_MODIFY_STATE | SYNCHRONIZE,
STANDARD_RIGHTS_EXECUTE | SYNCHRONIZE,
STANDARD_RIGHTS_ALL | EVENT_ALL_ACCESS };
More information about the wine-cvs
mailing list