KeRaiseUserException
UINT8 __stdcall KeRaiseUserException(KSPIN_LOCK_QUEUE_NUMBER Number){
int v1;
_ETHREAD *CurrentThread;
unsigned __int8 CurrentIrql;
unsigned __int8 v4;
KTRAP_FRAME *v5;
v1 = Number;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
CurrentIrql = KeGetCurrentIrql();
v4 = 1;
if( !CurrentIrql )
{
CurrentIrql = KeGetCurrentIrql();
__writecr8(1ui64);
}
v5 = (KTRAP_FRAME *)*((_QWORD *)CurrentThread + 18);
if( v5 )
{
if( (v5->SegCs & 1) != 0 )
{
*(_DWORD *)(*((_QWORD *)CurrentThread + 30) + 704i64) = v1;
v5->SegCs = 51;
v5->Rip = KeRaiseUserExceptionDispatcher;
if( v5->ExceptionActive != 2 )
KiSetupForInstrumentationReturn(v5, (UINT64)CurrentThread);
}
}
if( CurrentIrql < v4 )
__writecr8(CurrentIrql);
return v1;
}Referenced by:
ExHandleLogBadReference
NtClose
ObCloseHandleTableEntry
ObpCloseHandle
PspInsertThread