IopLiveDumpCorralProcessors
char __fastcall IopLiveDumpCorralProcessors(PVOID DeferredContext){
GUID *v1;
INT64 v2;
INT64 MillisecondCounter;
unsigned __int8 CurrentIrql;
int v6;
unsigned int Data1;
INT64 v8;
unsigned int v9;
__int64 v11;
struct _GROUP_AFFINITY Affinity;
unsigned __int16 *v13[2];
__int16 v14;
int v15;
__int16 v16;
int v17;
UINT64 SpinCount;
__int64 v19;
__int64 v20;
v1 = *(GUID **)DeferredContext;
v2 = 0i64;
*((_DWORD *)DeferredContext + 2) = 0;
v15 = 0;
v16 = 0;
v17 = 0;
MillisecondCounter = 0i64;
LODWORD(SpinCount) = 0;
v11 = 0i64;
v20 = 0i64;
v19 = 0i64;
*((_DWORD *)DeferredContext + 3) = 0;
*((_DWORD *)DeferredContext + 4) = 0;
*((_DWORD *)DeferredContext + 5) = 0;
*((_QWORD *)DeferredContext + 14) = 0i64;
*((_DWORD *)DeferredContext + 30) = 0;
IopLiveDumpLockPages();
Affinity.Group = (unsigned int)KiProcessorIndexToNumberMappingTable[0] >> 6;
*(_DWORD *)Affinity.Reserved = 0;
Affinity.Reserved[2] = 0;
Affinity.Mask = 1i64 << (KiProcessorIndexToNumberMappingTable[0] & 0x3F);
KeSetSystemGroupAffinityThread(&Affinity, (PGROUP_AFFINITY)DeferredContext + 6);
*((_QWORD *)DeferredContext + 14) = 0i64;
*((_DWORD *)DeferredContext + 3) = 1;
IopLiveDumpTraceSystemQuiesceStart();
if( (v1[5].Data1 & 0x80u) != 0 )
MillisecondCounter = IopLiveDumpGetMillisecondCounter(0);
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
*((_BYTE *)DeferredContext + 88) = CurrentIrql;
KeInitializeDpc((PRKDPC)((char *)DeferredContext + 24), IopLiveDumpCorralDpc, DeferredContext);
*((_BYTE *)DeferredContext + 25) = 2;
v13[1] = (unsigned __int16 *)KeActiveProcessors.Bitmap[0];
v13[0] = (unsigned __int16 *)&KeActiveProcessors;
v14 = 0;
while( !(unsigned int)KeEnumerateNextProcessor(&v17, v13) )
{
if( v17 == *((_DWORD *)DeferredContext + 28) )
{
_InterlockedAdd((volatile signed __int32 *)DeferredContext + 4, 1u);
}
else
{
v6 = *((_DWORD *)DeferredContext + 4);
if( !*((_QWORD *)DeferredContext + 10) )
*((_WORD *)DeferredContext + 13) = v17 + 1280;
KeInsertQueueDpc((PRKDPC)((char *)DeferredContext + 24), 0i64, 0i64);
LODWORD(SpinCount) = 0;
while( v6 == *((_DWORD *)DeferredContext + 4) )
KeYieldProcessorEx(&SpinCount);
}
}
*((_DWORD *)DeferredContext + 5) = *((_DWORD *)DeferredContext + 4);
Data1 = v1[5].Data1;
if( (Data1 & 0x80u) != 0 )
{
v8 = IopLiveDumpGetMillisecondCounter(0);
Data1 = v1[5].Data1;
v2 = v8 - MillisecondCounter;
}
if( (Data1 & 0x100) == 0 )
IopLiveDumpInitiateCorralStateChange((__int64)DeferredContext, 2, &v11);
PoAllProcIntrDisabled = 1;
IopLiveDumpInitiateCorralStateChange((__int64)DeferredContext, 7, &v20);
IopLiveDumpInitiateCorralStateChange((__int64)DeferredContext, 3, &v19);
*((_DWORD *)DeferredContext + 2) |= 1u;
v9 = v1[5].Data1;
if( (v9 & 0x80u) != 0 )
LOBYTE(v9) = IopLiveDumpTraceCorralProcessorsDuration(*(GUID **)DeferredContext, v2, v11, v20, v19);
return v9;
}Referenced by:
IopLiveDumpEndMirroringCallback