mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 16:36:33 +00:00
[NTOSKRNL] Simplify NtRaiseHardError() by merging the terminating blocks.
- Return the status codes provided by the Ex(p)RaiseHardError() calls. - Fix the return values in case of failure.
This commit is contained in:
parent
ea390c2b3f
commit
6cefd1242d
1 changed files with 34 additions and 31 deletions
|
@ -394,7 +394,7 @@ ExRaiseHardError(IN NTSTATUS ErrorStatus,
|
|||
PVOID UserData = NULL;
|
||||
PHARDERROR_USER_PARAMETERS UserParams;
|
||||
PWSTR BufferBase;
|
||||
ULONG SafeResponse;
|
||||
ULONG SafeResponse = ResponseNotHandled;
|
||||
|
||||
PAGED_CODE();
|
||||
|
||||
|
@ -430,7 +430,12 @@ ExRaiseHardError(IN NTSTATUS ErrorStatus,
|
|||
&Size,
|
||||
MEM_COMMIT,
|
||||
PAGE_READWRITE);
|
||||
if (!NT_SUCCESS(Status)) return Status;
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
/* Return failure */
|
||||
*Response = ResponseNotHandled;
|
||||
return Status;
|
||||
}
|
||||
|
||||
/* Set the pointers to our data */
|
||||
UserParams = UserData;
|
||||
|
@ -551,12 +556,14 @@ NtRaiseHardError(IN NTSTATUS ErrorStatus,
|
|||
{
|
||||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
PULONG_PTR SafeParams = NULL;
|
||||
ULONG SafeResponse;
|
||||
ULONG SafeResponse = ResponseNotHandled;
|
||||
UNICODE_STRING SafeString;
|
||||
ULONG i;
|
||||
ULONG ParamSize = 0;
|
||||
KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
|
||||
|
||||
PAGED_CODE();
|
||||
|
||||
/* Validate parameter count */
|
||||
if (NumberOfParameters > MAXIMUM_HARDERROR_PARAMETERS)
|
||||
{
|
||||
|
@ -662,37 +669,17 @@ NtRaiseHardError(IN NTSTATUS ErrorStatus,
|
|||
_SEH2_END;
|
||||
|
||||
/* Call the system function directly, because we probed */
|
||||
ExpRaiseHardError(ErrorStatus,
|
||||
NumberOfParameters,
|
||||
UnicodeStringParameterMask,
|
||||
SafeParams,
|
||||
ValidResponseOptions,
|
||||
&SafeResponse);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Reuse variable */
|
||||
SafeParams = Parameters;
|
||||
Status = ExpRaiseHardError(ErrorStatus,
|
||||
NumberOfParameters,
|
||||
UnicodeStringParameterMask,
|
||||
SafeParams,
|
||||
ValidResponseOptions,
|
||||
&SafeResponse);
|
||||
|
||||
/*
|
||||
* Call the Executive Function. It will probe and copy pointers to
|
||||
* user-mode
|
||||
*/
|
||||
ExRaiseHardError(ErrorStatus,
|
||||
NumberOfParameters,
|
||||
UnicodeStringParameterMask,
|
||||
SafeParams,
|
||||
ValidResponseOptions,
|
||||
&SafeResponse);
|
||||
}
|
||||
|
||||
/* Check if we were called in user-mode */
|
||||
if (PreviousMode != KernelMode)
|
||||
{
|
||||
/* That means we have a buffer to free */
|
||||
/* Free captured buffer */
|
||||
if (SafeParams) ExFreePoolWithTag(SafeParams, TAG_ERR);
|
||||
|
||||
/* Enter SEH Block for return */
|
||||
/* Enter SEH Block to return the response */
|
||||
_SEH2_TRY
|
||||
{
|
||||
/* Return the response */
|
||||
|
@ -707,6 +694,20 @@ NtRaiseHardError(IN NTSTATUS ErrorStatus,
|
|||
}
|
||||
else
|
||||
{
|
||||
/* Reuse variable */
|
||||
SafeParams = Parameters;
|
||||
|
||||
/*
|
||||
* Call the Executive Function. It will probe
|
||||
* and copy pointers to user-mode.
|
||||
*/
|
||||
Status = ExRaiseHardError(ErrorStatus,
|
||||
NumberOfParameters,
|
||||
UnicodeStringParameterMask,
|
||||
SafeParams,
|
||||
ValidResponseOptions,
|
||||
&SafeResponse);
|
||||
|
||||
/* Return the response */
|
||||
*Response = SafeResponse;
|
||||
}
|
||||
|
@ -740,6 +741,8 @@ NtSetDefaultHardErrorPort(IN HANDLE PortHandle)
|
|||
KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
|
||||
NTSTATUS Status = STATUS_UNSUCCESSFUL;
|
||||
|
||||
PAGED_CODE();
|
||||
|
||||
/* Check if we have the privileges */
|
||||
if (!SeSinglePrivilegeCheck(SeTcbPrivilege, PreviousMode))
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue