UNICODE_STRING RemainingPath;
KPROCESSOR_MODE PreviousMode;
PVOID Object = NULL;
- HANDLE hKey;
+ HANDLE hKey = NULL;
NTSTATUS Status = STATUS_SUCCESS;
UNICODE_STRING ObjectName;
OBJECT_CREATE_INFORMATION ObjectCreateInfo;
if (!NT_SUCCESS(Status))
{
DPRINT("CmpFindObject() returned 0x%08lx\n", Status);
- Status = STATUS_INVALID_HANDLE; /* Because CmpFindObject returns STATUS_UNSUCCESSFUL */
- hKey = *KeyHandle; /* Preserve hkResult value */
+ Status = STATUS_INVALID_HANDLE; /* Because ObFindObject returns STATUS_UNSUCCESSFUL */
goto openkey_cleanup;
}
{
RtlFreeUnicodeString(&RemainingPath);
Status = STATUS_OBJECT_NAME_NOT_FOUND;
- hKey = NULL;
goto openkey_cleanup;
}
if (((PKEY_OBJECT)Object)->Flags & KO_MARKED_FOR_DELETE)
{
Status = STATUS_UNSUCCESSFUL;
- hKey = NULL;
goto openkey_cleanup;
}
ObjectCreateInfo.Attributes,
&hKey);
- if (!NT_SUCCESS(Status))
- hKey = NULL;
-
openkey_cleanup:
ObpReleaseCapturedAttributes(&ObjectCreateInfo);
ObDereferenceObject(Object);
}
- _SEH_TRY
- {
- *KeyHandle = hKey;
- }
- _SEH_HANDLE
+ if (NT_SUCCESS(Status))
{
- Status = _SEH_GetExceptionCode();
+ _SEH_TRY
+ {
+ *KeyHandle = hKey;
+ }
+ _SEH_HANDLE
+ {
+ Status = _SEH_GetExceptionCode();
+ }
+ _SEH_END;
}
- _SEH_END;
return Status;
}