From c937cf6ad272ce0e7d95ac8a2cd2fbd875f0d4fd Mon Sep 17 00:00:00 2001 From: =?utf8?q?Michael=20M=C3=BCller?= Date: Wed, 10 Feb 2016 22:23:16 +0100 Subject: [PATCH] advapi32/tests: Add tests for Win8 pseudo handles. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Michael Müller Signed-off-by: Sebastian Lackner Signed-off-by: Alexandre Julliard --- dlls/advapi32/tests/security.c | 52 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c index 498d19ab93a..8dafb08ec38 100644 --- a/dlls/advapi32/tests/security.c +++ b/dlls/advapi32/tests/security.c @@ -6103,6 +6103,57 @@ static void test_GetSidIdentifierAuthority(void) ok(GetLastError() == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %u\n", GetLastError()); } +static void test_pseudo_tokens(void) +{ + TOKEN_STATISTICS statistics1, statistics2; + HANDLE token; + DWORD retlen; + BOOL ret; + + ret = OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &token); + ok(ret, "OpenProcessToken failed with error %u\n", GetLastError()); + memset(&statistics1, 0x11, sizeof(statistics1)); + ret = GetTokenInformation(token, TokenStatistics, &statistics1, sizeof(statistics1), &retlen); + ok(ret, "GetTokenInformation failed with %u\n", GetLastError()); + CloseHandle(token); + + /* test GetCurrentProcessToken() */ + SetLastError(0xdeadbeef); + memset(&statistics2, 0x22, sizeof(statistics2)); + ret = GetTokenInformation(GetCurrentProcessToken(), TokenStatistics, + &statistics2, sizeof(statistics2), &retlen); + ok(ret || broken(GetLastError() == ERROR_INVALID_HANDLE), + "GetTokenInformation failed with %u\n", GetLastError()); + if (ret) + ok(!memcmp(&statistics1, &statistics2, sizeof(statistics1)), "Token statistics do not match\n"); + else + win_skip("CurrentProcessToken not supported, skipping test\n"); + + /* test GetCurrentThreadEffectiveToken() */ + SetLastError(0xdeadbeef); + memset(&statistics2, 0x22, sizeof(statistics2)); + ret = GetTokenInformation(GetCurrentThreadEffectiveToken(), TokenStatistics, + &statistics2, sizeof(statistics2), &retlen); + ok(ret || broken(GetLastError() == ERROR_INVALID_HANDLE), + "GetTokenInformation failed with %u\n", GetLastError()); + if (ret) + ok(!memcmp(&statistics1, &statistics2, sizeof(statistics1)), "Token statistics do not match\n"); + else + win_skip("CurrentThreadEffectiveToken not supported, skipping test\n"); + + SetLastError(0xdeadbeef); + ret = OpenThreadToken(GetCurrentThread(), TOKEN_QUERY, TRUE, &token); + ok(!ret, "OpenThreadToken should have failed\n"); + ok(GetLastError() == ERROR_NO_TOKEN, "Expected ERROR_NO_TOKEN, got %u\n", GetLastError()); + + /* test GetCurrentThreadToken() */ + SetLastError(0xdeadbeef); + ret = GetTokenInformation(GetCurrentThreadToken(), TokenStatistics, + &statistics2, sizeof(statistics2), &retlen); + todo_wine ok(GetLastError() == ERROR_NO_TOKEN || broken(GetLastError() == ERROR_INVALID_HANDLE), + "Expected ERROR_NO_TOKEN, got %u\n", GetLastError()); +} + START_TEST(security) { init(); @@ -6148,4 +6199,5 @@ START_TEST(security) test_AddAce(); test_system_security_access(); test_GetSidIdentifierAuthority(); + test_pseudo_tokens(); } -- 2.11.4.GIT