[NTDLL_APITEST] Show that registry strings can be longer than MAXUSHORT.
[reactos.git] / modules / rostests / apitests / ntdll / NtOpenKey.c
1 /*
2 * PROJECT: ReactOS api tests
3 * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory
4 * PURPOSE: Test for NtOpenKey data alignment
5 * PROGRAMMER: Mark Jansen (mark.jansen@reactos.org)
6 */
7
8 #include "precomp.h"
9
10 #define TEST_STR L"\\Registry\\Machine\\SOFTWARE"
11
12 START_TEST(NtOpenKey)
13 {
14 OBJECT_ATTRIBUTES Object;
15 UNICODE_STRING String;
16 char GccShouldNotAlignThis[40 * 2];
17 char GccShouldNotAlignThis2[20];
18 PVOID Alias = GccShouldNotAlignThis + 1;
19 PVOID UnalignedKey = GccShouldNotAlignThis2 + 1;
20
21 HANDLE KeyHandle;
22 NTSTATUS Status;
23
24 memcpy(Alias, TEST_STR, sizeof(TEST_STR));
25
26
27 RtlInitUnicodeString(&String, TEST_STR);
28 InitializeObjectAttributes(&Object, &String, OBJ_CASE_INSENSITIVE, NULL, NULL);
29
30 Status = NtOpenKey(&KeyHandle, KEY_QUERY_VALUE, &Object);
31 ok_ntstatus(Status, STATUS_SUCCESS);
32
33 if (!NT_SUCCESS(Status))
34 return;
35
36 NtClose(KeyHandle);
37
38 String.Buffer = Alias;
39 ok_hex(((ULONG_PTR)String.Buffer) % 2, 1);
40 Status = NtOpenKey(&KeyHandle, KEY_QUERY_VALUE, &Object);
41 ok_ntstatus(Status, STATUS_DATATYPE_MISALIGNMENT); // FIXME: Later windows versions succeed here.
42 if (NT_SUCCESS(Status))
43 NtClose(KeyHandle);
44
45 RtlInitUnicodeString(&String, TEST_STR);
46 ok_hex(((ULONG_PTR)UnalignedKey) % 2, 1);
47 Status = NtOpenKey(UnalignedKey, KEY_QUERY_VALUE, &Object);
48 ok_ntstatus(Status, STATUS_SUCCESS);
49 if (NT_SUCCESS(Status))
50 {
51 NtClose(*(HANDLE*)(UnalignedKey));
52 }
53 }