KeRaiseUserException
NTSTATUS __stdcall KeRaiseUserException(INT64 ExceptionCode){
NTSTATUS v1;
_ETHREAD *CurrentThread;
unsigned __int8 CurrentIrql;
unsigned __int8 v4;
_KTRAP_FRAME *TrapFrame;
v1 = ExceptionCode;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
CurrentIrql = KeGetCurrentIrql();
v4 = 1;
if( !CurrentIrql )
{
CurrentIrql = KeGetCurrentIrql();
__writecr8(1ui64);
}
TrapFrame = CurrentThread->Tcb.TrapFrame;
if( TrapFrame )
{
if( (TrapFrame->SegCs & 1) != 0 )
{
*((_DWORD *)CurrentThread->Tcb.Teb + 176) = v1;
TrapFrame->SegCs = 51;
TrapFrame->_Rip = KeRaiseUserExceptionDispatcher;
if( TrapFrame->ExceptionActive != 2 )
KiSetupForInstrumentationReturn(TrapFrame, (UINT64)CurrentThread);
}
}
if( CurrentIrql < v4 )
__writecr8(CurrentIrql);
return v1;
}Referenced by:
ExHandleLogBadReference
NtClose
ObCloseHandleTableEntry
ObpCloseHandle
PspInsertThread