Author: hbelusca Date: Sun May 15 22:23:14 2016 New Revision: 71336
URL: http://svn.reactos.org/svn/reactos?rev=71336&view=rev Log: [NTOS]: Remove hardcoded constants; fix a comment; move some code around to reduce the level of code indentation.
Modified: trunk/reactos/ntoskrnl/ex/harderr.c
Modified: trunk/reactos/ntoskrnl/ex/harderr.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ex/harderr.c?rev=7... ============================================================================== --- trunk/reactos/ntoskrnl/ex/harderr.c [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/ex/harderr.c [iso-8859-1] Sun May 15 22:23:14 2016 @@ -148,7 +148,7 @@ if (!Thread->HardErrorsAreDisabled) { /* Check if we can't do errors anymore, and this is serious */ - if ((!ExReadyForErrors) && (NT_ERROR(ErrorStatus))) + if (!ExReadyForErrors && NT_ERROR(ErrorStatus)) { /* Use the system handler */ ExpSystemErrorHandler(ErrorStatus, @@ -162,7 +162,7 @@ /* Enable hard error processing if it is enabled for the process * or if the exception status forces it */ if ((Process->DefaultHardErrorProcessing & 1) || - (ErrorStatus & 0x10000000)) + (ErrorStatus & HARDERROR_OVERRIDE_ERRORMODE)) { /* Check if we have an exception port */ if (Process->ExceptionPort) @@ -186,80 +186,78 @@ if (Thread->HardErrorsAreDisabled) PortHandle = NULL;
/* Now check if we have a port */ - if (PortHandle) - { - /* Check if this is the default process */ - if (Process == ExpDefaultErrorPortProcess) - { - /* We can't handle the error, check if this is critical */ - if (NT_ERROR(ErrorStatus)) - { - /* It is, invoke the system handler */ - ExpSystemErrorHandler(ErrorStatus, - NumberOfParameters, - UnicodeStringParameterMask, - Parameters, - (PreviousMode != KernelMode) ? TRUE: FALSE); - - /* If we survived, return to caller */ - *Response = ResponseReturnToCaller; - return STATUS_SUCCESS; - } - } - - /* Setup the LPC Message */ - Message->h.u1.Length = (sizeof(HARDERROR_MSG) << 16) | - (sizeof(HARDERROR_MSG) - sizeof(PORT_MESSAGE)); - Message->h.u2.ZeroInit = 0; - Message->h.u2.s2.Type = LPC_ERROR_EVENT; - Message->Status = ErrorStatus &~ 0x10000000; - Message->ValidResponseOptions = ValidResponseOptions; - Message->UnicodeStringParameterMask = UnicodeStringParameterMask; - Message->NumberOfParameters = NumberOfParameters; - KeQuerySystemTime(&Message->ErrorTime); - - /* Copy the parameters */ - if (Parameters) RtlMoveMemory(&Message->Parameters, - Parameters, - sizeof(ULONG_PTR) * NumberOfParameters); - - /* Send the LPC Message */ - Status = LpcRequestWaitReplyPort(PortHandle, - (PVOID)Message, - (PVOID)Message); - if (NT_SUCCESS(Status)) - { - /* Check what kind of response we got */ - if ((Message->Response != ResponseReturnToCaller) && - (Message->Response != ResponseNotHandled) && - (Message->Response != ResponseAbort) && - (Message->Response != ResponseCancel) && - (Message->Response != ResponseIgnore) && - (Message->Response != ResponseNo) && - (Message->Response != ResponseOk) && - (Message->Response != ResponseRetry) && - (Message->Response != ResponseYes) && - (Message->Response != ResponseTryAgain) && - (Message->Response != ResponseContinue)) - { - /* Reset to a default one */ - Message->Response = ResponseReturnToCaller; - } - - /* Set the response */ - *Response = Message->Response; - } - else - { - /* Set the response */ + if (PortHandle == NULL) + { + /* Just return to caller */ + *Response = ResponseReturnToCaller; + return STATUS_SUCCESS; + } + + /* Check if this is the default process */ + if (Process == ExpDefaultErrorPortProcess) + { + /* We can't handle the error, check if this is critical */ + if (NT_ERROR(ErrorStatus)) + { + /* It is, invoke the system handler */ + ExpSystemErrorHandler(ErrorStatus, + NumberOfParameters, + UnicodeStringParameterMask, + Parameters, + (PreviousMode != KernelMode) ? TRUE: FALSE); + + /* If we survived, return to caller */ *Response = ResponseReturnToCaller; - } + return STATUS_SUCCESS; + } + } + + /* Setup the LPC Message */ + Message->h.u1.Length = (sizeof(HARDERROR_MSG) << 16) | + (sizeof(HARDERROR_MSG) - sizeof(PORT_MESSAGE)); + Message->h.u2.ZeroInit = 0; + Message->h.u2.s2.Type = LPC_ERROR_EVENT; + Message->Status = ErrorStatus & ~HARDERROR_OVERRIDE_ERRORMODE; + Message->ValidResponseOptions = ValidResponseOptions; + Message->UnicodeStringParameterMask = UnicodeStringParameterMask; + Message->NumberOfParameters = NumberOfParameters; + KeQuerySystemTime(&Message->ErrorTime); + + /* Copy the parameters */ + if (Parameters) RtlMoveMemory(&Message->Parameters, + Parameters, + sizeof(ULONG_PTR) * NumberOfParameters); + + /* Send the LPC Message */ + Status = LpcRequestWaitReplyPort(PortHandle, + (PPORT_MESSAGE)Message, + (PPORT_MESSAGE)Message); + if (NT_SUCCESS(Status)) + { + /* Check what kind of response we got */ + if ((Message->Response != ResponseReturnToCaller) && + (Message->Response != ResponseNotHandled) && + (Message->Response != ResponseAbort) && + (Message->Response != ResponseCancel) && + (Message->Response != ResponseIgnore) && + (Message->Response != ResponseNo) && + (Message->Response != ResponseOk) && + (Message->Response != ResponseRetry) && + (Message->Response != ResponseYes) && + (Message->Response != ResponseTryAgain) && + (Message->Response != ResponseContinue)) + { + /* Reset to a default one */ + Message->Response = ResponseReturnToCaller; + } + + /* Set the response */ + *Response = Message->Response; } else { - /* Set defaults */ + /* Set the response */ *Response = ResponseReturnToCaller; - Status = STATUS_SUCCESS; }
/* Return status */ @@ -687,7 +685,7 @@ * @implemented * * NtSetDefaultHardErrorPort is typically called only once. After call, - * kernel set BOOLEAN flag named _ExReadyForErrors to TRUE, and all other + * kernel set BOOLEAN flag named ExReadyForErrors to TRUE, and all other * tries to change default port are broken with STATUS_UNSUCCESSFUL error code * See: http://www.windowsitlibrary.com/Content/356/08/2.html * http://undocumented.ntinternals.net/UserMode/Undocumented%20Functions/Error/...