Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354/* * PROJECT: ReactOS api tests * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory * PURPOSE: Test for NtOpenKey data alignment * PROGRAMMER: Mark Jansen (mark.jansen@reactos.org) */
#include "precomp.h"
#define TEST_STR L"\\Registry\\Machine\\SOFTWARE"
START_TEST(NtOpenKey){ OBJECT_ATTRIBUTES Object; UNICODE_STRING String; char GccShouldNotAlignThis[40 * 2]; char GccShouldNotAlignThis2[20]; PVOID Alias = GccShouldNotAlignThis + 1; PVOID UnalignedKey = GccShouldNotAlignThis2 + 1;
HANDLE KeyHandle; NTSTATUS Status;
memcpy(Alias, TEST_STR, sizeof(TEST_STR));
RtlInitUnicodeString(&String, TEST_STR); InitializeObjectAttributes(&Object, &String, OBJ_CASE_INSENSITIVE, NULL, NULL);
Status = NtOpenKey(&KeyHandle, KEY_QUERY_VALUE, &Object); ok_ntstatus(Status, STATUS_SUCCESS);
if (!NT_SUCCESS(Status)) return;
NtClose(KeyHandle);
String.Buffer = Alias; ok_hex(((ULONG_PTR)String.Buffer) % 2, 1); Status = NtOpenKey(&KeyHandle, KEY_QUERY_VALUE, &Object); ok_ntstatus(Status, STATUS_DATATYPE_MISALIGNMENT); // FIXME: Later windows versions succeed here. if (NT_SUCCESS(Status)) NtClose(KeyHandle);
RtlInitUnicodeString(&String, TEST_STR); ok_hex(((ULONG_PTR)UnalignedKey) % 2, 1); Status = NtOpenKey(UnalignedKey, KEY_QUERY_VALUE, &Object); ok_ntstatus(Status, STATUS_SUCCESS); if (NT_SUCCESS(Status)) { NtClose(*(HANDLE*)(UnalignedKey)); }}