dd8d0849b925004ca64cce88a5b8f2e6352ab95e
[reactos.git] / rostests / apitests / ntdll / NtOpenThreadToken.c
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 <apitest.h>
9
10 #include <ndk/obfuncs.h>
11 #include <ndk/psfuncs.h>
12 #include <ndk/rtlfuncs.h>
13
14 START_TEST(NtOpenThreadToken)
15 {
16 NTSTATUS Status;
17 HANDLE TokenHandle;
18 BOOLEAN OpenAsSelf;
19 ULONG HandleAttributes[] = { 0, OBJ_KERNEL_HANDLE };
20 ULONG i;
21
22 TokenHandle = (HANDLE)0x55555555;
23 Status = NtOpenThreadToken(NtCurrentThread(),
24 TOKEN_READ,
25 TRUE,
26 &TokenHandle);
27 ok(Status == STATUS_NO_TOKEN, "Status = %lx\n", Status);
28 ok(TokenHandle == NULL, "TokenHandle = %p\n", TokenHandle);
29
30 Status = RtlImpersonateSelf(SecurityImpersonation);
31 ok(Status == STATUS_SUCCESS, "Status = %lx\n", Status);
32 for (OpenAsSelf = FALSE; OpenAsSelf <= TRUE; OpenAsSelf++)
33 {
34 Status = NtOpenThreadToken(NtCurrentThread(),
35 TOKEN_READ,
36 OpenAsSelf,
37 &TokenHandle);
38 ok(Status == STATUS_SUCCESS, "Status = %lx\n", Status);
39 if (NT_SUCCESS(Status))
40 {
41 ok((LONG_PTR)TokenHandle > 0, "TokenHandle = %p\n", TokenHandle);
42 Status = NtClose(TokenHandle);
43 ok(Status == STATUS_SUCCESS, "Status = %lx\n", Status);
44 }
45
46 for (i = 0; i < RTL_NUMBER_OF(HandleAttributes); i++)
47 {
48 Status = NtOpenThreadTokenEx(NtCurrentThread(),
49 TOKEN_READ,
50 OpenAsSelf,
51 HandleAttributes[i],
52 &TokenHandle);
53 ok(Status == STATUS_SUCCESS, "Status = %lx\n", Status);
54 if (NT_SUCCESS(Status))
55 {
56 ok((LONG_PTR)TokenHandle > 0, "TokenHandle = %p\n", TokenHandle);
57 Status = NtClose(TokenHandle);
58 ok(Status == STATUS_SUCCESS, "Status = %lx\n", Status);
59 }
60 }
61 }
62
63 TokenHandle = NULL;
64 Status = NtSetInformationThread(NtCurrentThread(),
65 ThreadImpersonationToken,
66 &TokenHandle,
67 sizeof(TokenHandle));
68 ok(Status == STATUS_SUCCESS, "Status = %lx\n", Status);
69 }