KiSendFreeze
VOID __stdcall KiSendFreeze(_KAFFINITY_EX *Affinity, UINT8 Wait){
int v4;
__int64 v5;
signed __int32 v6;
unsigned __int16 *v7[2];
__int16 v8;
int v9;
__int16 v10;
unsigned int v11;
v9 = 0;
v10 = 0;
v4 = 0;
v8 = 0;
v11 = 0;
v7[1] = (unsigned __int16 *)Affinity->Bitmap[0];
v7[0] = &Affinity->Count;
while( !(unsigned int)KeEnumerateNextProcessor(&v11, v7) )
{
v5 = (__int64)*(&KiProcessorBlock + v11);
v6 = _InterlockedCompareExchange((volatile signed __int32 *)(v5 + 11656), 5, 0);
if( Wait )
{
if( v6 )
{
do
{
do
_mm_pause();
while( *(_DWORD *)(v5 + 11656) );
}
while( _InterlockedCompareExchange((volatile signed __int32 *)(v5 + 11656), 5, 0) );
}
LABEL_7:
++v4;
}
else
{
if( !v6 )
goto LABEL_7;
KeRemoveProcessorAffinityEx(&Affinity->Count, v11);
}
}
if( v4 )
HalSendNMI((__int64)Affinity);
}Referenced by:
KeBugCheck2
KeFreezeExecution