advapi32/tests: Add a few tests for GetKernelObjectSecurity() parameter validation.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
aa1bd1e0a0
commit
16955db2aa
|
@ -7930,6 +7930,95 @@ static void test_duplicate_token(void)
|
||||||
CloseHandle(token);
|
CloseHandle(token);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_GetKernelObjectSecurity(void)
|
||||||
|
{
|
||||||
|
/* Basic tests for parameter validation. */
|
||||||
|
|
||||||
|
SECURITY_DESCRIPTOR_CONTROL control;
|
||||||
|
DWORD size, ret_size, revision;
|
||||||
|
BOOL ret, present, defaulted;
|
||||||
|
PSECURITY_DESCRIPTOR sd;
|
||||||
|
PSID sid;
|
||||||
|
ACL *acl;
|
||||||
|
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
size = 0xdeadbeef;
|
||||||
|
ret = GetKernelObjectSecurity(NULL, OWNER_SECURITY_INFORMATION, NULL, 0, &size);
|
||||||
|
ok(!ret, "expected failure\n");
|
||||||
|
ok(GetLastError() == ERROR_INVALID_HANDLE, "got error %u\n", GetLastError());
|
||||||
|
ok(size == 0xdeadbeef, "got size %u\n", size);
|
||||||
|
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
ret = GetKernelObjectSecurity(GetCurrentProcess(), OWNER_SECURITY_INFORMATION, NULL, 0, NULL);
|
||||||
|
ok(!ret, "expected failure\n");
|
||||||
|
ok(GetLastError() == ERROR_NOACCESS, "got error %u\n", GetLastError());
|
||||||
|
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
size = 0xdeadbeef;
|
||||||
|
ret = GetKernelObjectSecurity(GetCurrentProcess(), OWNER_SECURITY_INFORMATION, NULL, 0, &size);
|
||||||
|
ok(!ret, "expected failure\n");
|
||||||
|
ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "got error %u\n", GetLastError());
|
||||||
|
ok(size > 0 && size != 0xdeadbeef, "got size 0\n");
|
||||||
|
|
||||||
|
sd = malloc(size + 1);
|
||||||
|
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
ret = GetKernelObjectSecurity(GetCurrentProcess(), OWNER_SECURITY_INFORMATION, sd, size - 1, &ret_size);
|
||||||
|
ok(!ret, "expected failure\n");
|
||||||
|
ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "got error %u\n", GetLastError());
|
||||||
|
ok(ret_size == size, "expected size %u, got %u\n", size, ret_size);
|
||||||
|
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
ret = GetKernelObjectSecurity(GetCurrentProcess(), OWNER_SECURITY_INFORMATION, sd, size + 1, &ret_size);
|
||||||
|
ok(ret, "expected success\n");
|
||||||
|
ok(GetLastError() == 0xdeadbeef, "got error %u\n", GetLastError());
|
||||||
|
ok(ret_size == size, "expected size %u, got %u\n", size, ret_size);
|
||||||
|
|
||||||
|
free(sd);
|
||||||
|
|
||||||
|
/* Calling the function with flags not defined succeeds and yields an empty
|
||||||
|
* descriptor. */
|
||||||
|
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
ret = GetKernelObjectSecurity(GetCurrentProcess(), 0x100000, NULL, 0, &size);
|
||||||
|
ok(!ret, "expected failure\n");
|
||||||
|
ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "got error %u\n", GetLastError());
|
||||||
|
|
||||||
|
sd = malloc(size);
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
ret = GetKernelObjectSecurity(GetCurrentProcess(), 0x100000, sd, size, &ret_size);
|
||||||
|
ok(ret, "expected success\n");
|
||||||
|
ok(GetLastError() == 0xdeadbeef, "got error %u\n", GetLastError());
|
||||||
|
ok(ret_size == size, "expected size %u, got %u\n", size, ret_size);
|
||||||
|
|
||||||
|
ret = GetSecurityDescriptorControl(sd, &control, &revision);
|
||||||
|
ok(ret, "got error %u\n", GetLastError());
|
||||||
|
todo_wine ok(control == SE_SELF_RELATIVE, "got control %#x\n", control);
|
||||||
|
ok(revision == SECURITY_DESCRIPTOR_REVISION1, "got revision %u\n", revision);
|
||||||
|
|
||||||
|
ret = GetSecurityDescriptorOwner(sd, &sid, &defaulted);
|
||||||
|
ok(ret, "got error %u\n", GetLastError());
|
||||||
|
ok(!sid, "expected no owner SID\n");
|
||||||
|
ok(!defaulted, "expected owner not defaulted\n");
|
||||||
|
|
||||||
|
ret = GetSecurityDescriptorGroup(sd, &sid, &defaulted);
|
||||||
|
ok(ret, "got error %u\n", GetLastError());
|
||||||
|
ok(!sid, "expected no group SID\n");
|
||||||
|
ok(!defaulted, "expected group not defaulted\n");
|
||||||
|
|
||||||
|
ret = GetSecurityDescriptorDacl(sd, &present, &acl, &defaulted);
|
||||||
|
ok(ret, "got error %u\n", GetLastError());
|
||||||
|
todo_wine ok(!present, "expeced no DACL present\n");
|
||||||
|
/* the descriptor is defaulted only on Windows >= 7 */
|
||||||
|
|
||||||
|
ret = GetSecurityDescriptorSacl(sd, &present, &acl, &defaulted);
|
||||||
|
ok(ret, "got error %u\n", GetLastError());
|
||||||
|
ok(!present, "expeced no SACL present\n");
|
||||||
|
/* the descriptor is defaulted only on Windows >= 7 */
|
||||||
|
|
||||||
|
free(sd);
|
||||||
|
}
|
||||||
|
|
||||||
START_TEST(security)
|
START_TEST(security)
|
||||||
{
|
{
|
||||||
init();
|
init();
|
||||||
|
@ -7996,6 +8085,7 @@ START_TEST(security)
|
||||||
test_create_process_token();
|
test_create_process_token();
|
||||||
test_pseudo_handle_security();
|
test_pseudo_handle_security();
|
||||||
test_duplicate_token();
|
test_duplicate_token();
|
||||||
|
test_GetKernelObjectSecurity();
|
||||||
|
|
||||||
/* Must be the last test, modifies process token */
|
/* Must be the last test, modifies process token */
|
||||||
test_token_security_descriptor();
|
test_token_security_descriptor();
|
||||||
|
|
Loading…
Reference in New Issue