1 /* 2 * PROJECT: ReactOS api tests 3 * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory 4 * PURPOSE: Test for NtOpenThreadToken[Ex] 5 * PROGRAMMER: Thomas Faber <thomas.faber@reactos.org> 6 */ 7 8 #include "precomp.h" 9 10 START_TEST(NtOpenThreadToken) 11 { 12 NTSTATUS Status; 13 HANDLE TokenHandle; 14 BOOLEAN OpenAsSelf; 15 ULONG HandleAttributes[] = { 0, OBJ_KERNEL_HANDLE }; 16 ULONG i; 17 18 TokenHandle = (HANDLE)0x55555555; 19 Status = NtOpenThreadToken(NtCurrentThread(), 20 TOKEN_READ, 21 TRUE, 22 &TokenHandle); 23 ok(Status == STATUS_NO_TOKEN, "Status = %lx\n", Status); 24 ok(TokenHandle == (HANDLE)0x55555555 /* 2003 */ || 25 TokenHandle == NULL /* Win7 */, "TokenHandle = %p\n", TokenHandle); 26 27 Status = RtlImpersonateSelf(SecurityImpersonation); 28 ok(Status == STATUS_SUCCESS, "Status = %lx\n", Status); 29 for (OpenAsSelf = FALSE; OpenAsSelf <= TRUE; OpenAsSelf++) 30 { 31 Status = NtOpenThreadToken(NtCurrentThread(), 32 TOKEN_READ, 33 OpenAsSelf, 34 &TokenHandle); 35 ok(Status == STATUS_SUCCESS, "Status = %lx\n", Status); 36 if (NT_SUCCESS(Status)) 37 { 38 ok((LONG_PTR)TokenHandle > 0, "TokenHandle = %p\n", TokenHandle); 39 Status = NtClose(TokenHandle); 40 ok(Status == STATUS_SUCCESS, "Status = %lx\n", Status); 41 } 42 43 for (i = 0; i < RTL_NUMBER_OF(HandleAttributes); i++) 44 { 45 Status = NtOpenThreadTokenEx(NtCurrentThread(), 46 TOKEN_READ, 47 OpenAsSelf, 48 HandleAttributes[i], 49 &TokenHandle); 50 ok(Status == STATUS_SUCCESS, "Status = %lx\n", Status); 51 if (NT_SUCCESS(Status)) 52 { 53 ok((LONG_PTR)TokenHandle > 0, "TokenHandle = %p\n", TokenHandle); 54 Status = NtClose(TokenHandle); 55 ok(Status == STATUS_SUCCESS, "Status = %lx\n", Status); 56 } 57 } 58 } 59 60 TokenHandle = NULL; 61 Status = NtSetInformationThread(NtCurrentThread(), 62 ThreadImpersonationToken, 63 &TokenHandle, 64 sizeof(TokenHandle)); 65 ok(Status == STATUS_SUCCESS, "Status = %lx\n", Status); 66 } 67