mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 17:03:02 +00:00
[KERNEL32]
- Whitespace fixes (dosdev.c, except.c, loader.c) - except.c: Remove some unneeded casts; NtQueryInformationProcess for 'ProcessDebugPort' is implemented and therefore it will never return STATUS_NOT_IMPLEMENTED. svn path=/trunk/; revision=71703
This commit is contained in:
parent
b92e83d7b9
commit
876a3b2681
3 changed files with 91 additions and 82 deletions
|
@ -442,7 +442,7 @@ QueryDosDeviceW(
|
||||||
if (Length + NameLength + 1 >= ucchMax)
|
if (Length + NameLength + 1 >= ucchMax)
|
||||||
{
|
{
|
||||||
Length = 0;
|
Length = 0;
|
||||||
BaseSetLastNTError (STATUS_BUFFER_TOO_SMALL);
|
BaseSetLastNTError(STATUS_BUFFER_TOO_SMALL);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -85,7 +85,7 @@ PrintStackTrace(struct _EXCEPTION_POINTERS *ExceptionInfo)
|
||||||
DbgPrint("Unhandled exception\n");
|
DbgPrint("Unhandled exception\n");
|
||||||
DbgPrint("ExceptionCode: %8x\n", ExceptionRecord->ExceptionCode);
|
DbgPrint("ExceptionCode: %8x\n", ExceptionRecord->ExceptionCode);
|
||||||
|
|
||||||
if ((NTSTATUS)ExceptionRecord->ExceptionCode == STATUS_ACCESS_VIOLATION &&
|
if (ExceptionRecord->ExceptionCode == STATUS_ACCESS_VIOLATION &&
|
||||||
ExceptionRecord->NumberParameters == 2)
|
ExceptionRecord->NumberParameters == 2)
|
||||||
{
|
{
|
||||||
DbgPrint("Faulting Address: %8x\n", ExceptionRecord->ExceptionInformation[1]);
|
DbgPrint("Faulting Address: %8x\n", ExceptionRecord->ExceptionInformation[1]);
|
||||||
|
@ -209,7 +209,7 @@ GetErrorMode(VOID)
|
||||||
/* Query the current setting */
|
/* Query the current setting */
|
||||||
Status = NtQueryInformationProcess(NtCurrentProcess(),
|
Status = NtQueryInformationProcess(NtCurrentProcess(),
|
||||||
ProcessDefaultHardErrorMode,
|
ProcessDefaultHardErrorMode,
|
||||||
(PVOID)&ErrMode,
|
&ErrMode,
|
||||||
sizeof(ErrMode),
|
sizeof(ErrMode),
|
||||||
NULL);
|
NULL);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
|
@ -238,97 +238,106 @@ GetErrorMode(VOID)
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
LONG WINAPI
|
LONG
|
||||||
UnhandledExceptionFilter(struct _EXCEPTION_POINTERS *ExceptionInfo)
|
WINAPI
|
||||||
|
UnhandledExceptionFilter(IN PEXCEPTION_POINTERS ExceptionInfo)
|
||||||
{
|
{
|
||||||
LONG RetValue;
|
NTSTATUS Status;
|
||||||
HANDLE DebugPort = NULL;
|
LONG RetValue;
|
||||||
NTSTATUS ErrCode;
|
HANDLE DebugPort = NULL;
|
||||||
ULONG_PTR ErrorParameters[4];
|
ULONG_PTR ErrorParameters[4];
|
||||||
ULONG ErrorResponse;
|
ULONG ErrorResponse;
|
||||||
PEXCEPTION_RECORD ExceptionRecord = ExceptionInfo->ExceptionRecord;
|
PEXCEPTION_RECORD ExceptionRecord = ExceptionInfo->ExceptionRecord;
|
||||||
LPTOP_LEVEL_EXCEPTION_FILTER RealFilter;
|
LPTOP_LEVEL_EXCEPTION_FILTER RealFilter;
|
||||||
|
|
||||||
if ((NTSTATUS)ExceptionRecord->ExceptionCode == STATUS_ACCESS_VIOLATION &&
|
if (ExceptionRecord->ExceptionCode == STATUS_ACCESS_VIOLATION &&
|
||||||
ExceptionRecord->NumberParameters >= 2)
|
ExceptionRecord->NumberParameters >= 2)
|
||||||
{
|
{
|
||||||
switch(ExceptionRecord->ExceptionInformation[0])
|
switch(ExceptionRecord->ExceptionInformation[0])
|
||||||
{
|
{
|
||||||
case EXCEPTION_WRITE_FAULT:
|
case EXCEPTION_WRITE_FAULT:
|
||||||
/* Change the protection on some write attempts, some InstallShield setups
|
/* Change the protection on some write attempts, some InstallShield setups
|
||||||
have this bug */
|
have this bug */
|
||||||
RetValue = BasepCheckForReadOnlyResource(
|
RetValue = BasepCheckForReadOnlyResource(
|
||||||
(PVOID)ExceptionRecord->ExceptionInformation[1]);
|
(PVOID)ExceptionRecord->ExceptionInformation[1]);
|
||||||
if (RetValue == EXCEPTION_CONTINUE_EXECUTION)
|
if (RetValue == EXCEPTION_CONTINUE_EXECUTION)
|
||||||
return EXCEPTION_CONTINUE_EXECUTION;
|
return EXCEPTION_CONTINUE_EXECUTION;
|
||||||
break;
|
break;
|
||||||
case EXCEPTION_EXECUTE_FAULT:
|
|
||||||
/* FIXME */
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Is there a debugger running ? */
|
case EXCEPTION_EXECUTE_FAULT:
|
||||||
ErrCode = NtQueryInformationProcess(NtCurrentProcess(), ProcessDebugPort,
|
/* FIXME */
|
||||||
&DebugPort, sizeof(HANDLE), NULL);
|
break;
|
||||||
if (!NT_SUCCESS(ErrCode) && ErrCode != STATUS_NOT_IMPLEMENTED)
|
}
|
||||||
{
|
}
|
||||||
BaseSetLastNTError(ErrCode);
|
|
||||||
return EXCEPTION_EXECUTE_HANDLER;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (DebugPort)
|
/* Is there a debugger running? */
|
||||||
{
|
Status = NtQueryInformationProcess(NtCurrentProcess(),
|
||||||
/* Pass the exception to debugger. */
|
ProcessDebugPort,
|
||||||
DPRINT("Passing exception to debugger\n");
|
&DebugPort,
|
||||||
return EXCEPTION_CONTINUE_SEARCH;
|
sizeof(DebugPort),
|
||||||
}
|
NULL);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
BaseSetLastNTError(Status);
|
||||||
|
return EXCEPTION_EXECUTE_HANDLER;
|
||||||
|
}
|
||||||
|
|
||||||
RealFilter = RtlDecodePointer(GlobalTopLevelExceptionFilter);
|
if (DebugPort)
|
||||||
if (RealFilter)
|
{
|
||||||
{
|
/* Pass the exception to debugger. */
|
||||||
LONG ret = RealFilter(ExceptionInfo);
|
DPRINT("Passing exception to debugger\n");
|
||||||
if (ret != EXCEPTION_CONTINUE_SEARCH)
|
return EXCEPTION_CONTINUE_SEARCH;
|
||||||
return ret;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
PrintStackTrace(ExceptionInfo);
|
RealFilter = RtlDecodePointer(GlobalTopLevelExceptionFilter);
|
||||||
|
if (RealFilter)
|
||||||
|
{
|
||||||
|
LONG ret = RealFilter(ExceptionInfo);
|
||||||
|
if (ret != EXCEPTION_CONTINUE_SEARCH)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/* Save exception code and address */
|
PrintStackTrace(ExceptionInfo);
|
||||||
ErrorParameters[0] = (ULONG)ExceptionRecord->ExceptionCode;
|
|
||||||
ErrorParameters[1] = (ULONG_PTR)ExceptionRecord->ExceptionAddress;
|
|
||||||
|
|
||||||
if ((NTSTATUS)ExceptionRecord->ExceptionCode == STATUS_ACCESS_VIOLATION)
|
/* Save exception code and address */
|
||||||
{
|
ErrorParameters[0] = (ULONG)ExceptionRecord->ExceptionCode;
|
||||||
/* get the type of operation that caused the access violation */
|
ErrorParameters[1] = (ULONG_PTR)ExceptionRecord->ExceptionAddress;
|
||||||
ErrorParameters[2] = ExceptionRecord->ExceptionInformation[0];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ErrorParameters[2] = ExceptionRecord->ExceptionInformation[2];
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Save faulting address */
|
if (ExceptionRecord->ExceptionCode == STATUS_ACCESS_VIOLATION)
|
||||||
ErrorParameters[3] = ExceptionRecord->ExceptionInformation[1];
|
{
|
||||||
|
/* get the type of operation that caused the access violation */
|
||||||
|
ErrorParameters[2] = ExceptionRecord->ExceptionInformation[0];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ErrorParameters[2] = ExceptionRecord->ExceptionInformation[2];
|
||||||
|
}
|
||||||
|
|
||||||
/* Raise the harderror */
|
/* Save faulting address */
|
||||||
ErrCode = NtRaiseHardError(STATUS_UNHANDLED_EXCEPTION,
|
ErrorParameters[3] = ExceptionRecord->ExceptionInformation[1];
|
||||||
4, 0, ErrorParameters, OptionOkCancel, &ErrorResponse);
|
|
||||||
|
|
||||||
if (NT_SUCCESS(ErrCode) && (ErrorResponse == ResponseCancel))
|
/* Raise the harderror */
|
||||||
{
|
Status = NtRaiseHardError(STATUS_UNHANDLED_EXCEPTION,
|
||||||
/* FIXME: Check the result, if the "Cancel" button was
|
4,
|
||||||
clicked run a debugger */
|
0,
|
||||||
DPRINT1("Debugging is not implemented yet\n");
|
ErrorParameters,
|
||||||
}
|
OptionOkCancel,
|
||||||
|
&ErrorResponse);
|
||||||
|
|
||||||
/*
|
if (NT_SUCCESS(Status) && (ErrorResponse == ResponseCancel))
|
||||||
* Returning EXCEPTION_EXECUTE_HANDLER means that the code in
|
{
|
||||||
* the __except block will be executed. Normally this will end up in a
|
/* FIXME: Check the result, if the "Cancel" button was
|
||||||
* Terminate process.
|
clicked run a debugger */
|
||||||
*/
|
DPRINT1("Debugging is not implemented yet\n");
|
||||||
|
}
|
||||||
|
|
||||||
return EXCEPTION_EXECUTE_HANDLER;
|
/*
|
||||||
|
* Returning EXCEPTION_EXECUTE_HANDLER means that the code in
|
||||||
|
* the __except block will be executed. Normally this will end up in a
|
||||||
|
* Terminate process.
|
||||||
|
*/
|
||||||
|
|
||||||
|
return EXCEPTION_EXECUTE_HANDLER;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -177,7 +177,7 @@ DECLSPEC_HOTPATCH
|
||||||
LoadLibraryW(LPCWSTR lpLibFileName)
|
LoadLibraryW(LPCWSTR lpLibFileName)
|
||||||
{
|
{
|
||||||
/* Call Ex version of the API */
|
/* Call Ex version of the API */
|
||||||
return LoadLibraryExW (lpLibFileName, 0, 0);
|
return LoadLibraryExW(lpLibFileName, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue