Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // The following example will disable EurekaLog for all exceptions raised in ntdll, kernel32 and kernelbase DLLs.
- uses
- EInject;
- var
- EurekaLogExceptionDispatcher: TExceptionDispatcherProc;
- function IgnoreException(const AContext: Windows.TContext; const AExceptionRecord: Windows.TExceptionRecord): Cardinal; stdcall;
- const
- EXCEPTION_CONTINUE_SEARCH = 0;
- cDelphiException = $0EEDFADE; // see System.pas
- var
- ExceptionAddress: Pointer;
- ExceptionModule: HMODULE;
- ExceptionModuleFileName: String;
- ExceptionModuleName: String;
- function IgnoreThisException: Boolean;
- begin
- Result := SameFileName(ExceptionModuleName, 'ntdll.dll') or
- SameFileName(ExceptionModuleName, 'kernel32.dll') or
- SameFileName(ExceptionModuleName, 'kernelbase.dll');
- end;
- begin
- if AExceptionRecord.ExceptionCode = cDelphiException then
- ExceptionAddress := Pointer(AExceptionRecord.ExceptionInformation[0]) // see System.TExceptionRecord
- // Exception object is available in TObject(AExceptionRecord.ExceptionInformation[1])
- else
- ExceptionAddress := AExceptionRecord.ExceptionAddress;
- ExceptionModule := FindHInstance(ExceptionAddress);
- ExceptionModuleFileName := GetModuleName(ExceptionModule);
- ExceptionModuleName := ExtractFileName(ExceptionModuleFileName);
- if IgnoreThisException then
- Result := EXCEPTION_CONTINUE_SEARCH // RTL Handler will be called
- else
- Result := EurekaLogExceptionDispatcher(AContext, AExceptionRecord); // EurekaLog will be called
- end;
- initialization
- EurekaLogExceptionDispatcher := EInject.EventExceptionDispatcher;
- EInject.EventExceptionDispatcher := IgnoreException;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement