[ADVAPI32] -RegOpenKeyExW: Call NtOpenKey again with aligned parameters if STATUS_DATATYPE_MISALIGNMENT was returned the first time. CORE-13689

svn path=/trunk/; revision=75592
This commit is contained in:
Giannis Adamopoulos 2017-08-17 14:37:24 +00:00
parent fb160be266
commit 58edf0b679

View file

@ -3429,6 +3429,39 @@ RegOpenKeyExW(HKEY hKey,
samDesired,
&ObjectAttributes);
if (Status == STATUS_DATATYPE_MISALIGNMENT)
{
HANDLE hAligned;
UNICODE_STRING AlignedString;
Status = RtlDuplicateUnicodeString(RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE,
&SubKeyString,
&AlignedString);
if (NT_SUCCESS(Status))
{
/* Try again with aligned parameters */
InitializeObjectAttributes(&ObjectAttributes,
&AlignedString,
Attributes,
KeyHandle,
NULL);
Status = NtOpenKey(&hAligned,
samDesired,
&ObjectAttributes);
RtlFreeUnicodeString(&AlignedString);
if (NT_SUCCESS(Status))
*phkResult = hAligned;
}
else
{
/* Restore the original error */
Status = STATUS_DATATYPE_MISALIGNMENT;
}
}
if (!NT_SUCCESS(Status))
{
ErrorCode = RtlNtStatusToDosError(Status);