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)
10 #define TEST_STR L"\\Registry\\Machine\\SOFTWARE"
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;
24 memcpy(Alias
, TEST_STR
, sizeof(TEST_STR
));
27 RtlInitUnicodeString(&String
, TEST_STR
);
28 InitializeObjectAttributes(&Object
, &String
, OBJ_CASE_INSENSITIVE
, NULL
, NULL
);
30 Status
= NtOpenKey(&KeyHandle
, KEY_QUERY_VALUE
, &Object
);
31 ok_ntstatus(Status
, STATUS_SUCCESS
);
33 if (!NT_SUCCESS(Status
))
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
))
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
))
51 NtClose(*(HANDLE
*)(UnalignedKey
));