KiCheckForFreezeExecution
CHAR __stdcall KiCheckForFreezeExecution(_KTRAP_FRAME *a1, _KEXCEPTION_FRAME *a2){
struct _KPRCB *CurrentPrcb;
unsigned __int64 v4;
__int64 v5;
_QWORD *v6;
unsigned __int64 v7;
CurrentPrcb = KeGetCurrentPrcb();
if( CurrentPrcb->IpiFrozen != 5 )
return 0;
KiFreezeTargetExecution(a1, (_KTRAP_FRAME *)a2);
if( KiResumeForReboot && a1 )
{
if( a1->SegCs != 16 )
{
a1->SegCs = 16;
a1->SegSs = 24;
a1->_Rsp = CurrentPrcb->RspBase;
}
a1->EFlags &= ~0x200u;
v4 = __readmsr(0xC0000101);
a1->GsBase = ((unsigned __int64)HIDWORD(v4) << 32) | (unsigned int)v4;
a1->_Rip = (unsigned __int64)KiWaitForReboot;
if( KiKvaShadow )
{
v5 = 7i64;
v6 = (_QWORD *)(CurrentPrcb[-1].PrcbPad141[472] + 5168);
do
{
v7 = __readcr3();
v6[1] = v7;
*v6 = __readmsr(0xC0000101);
v6 += 64;
--v5;
}
while( v5 );
}
}
return 1;
}Referenced by:
KeBugCheck2
KiProcessNMI