IopLiveDumpInitiateCorralStateChange
VOID __stdcall IopLiveDumpInitiateCorralStateChange(_LIVEDUMP_CORRAL_CONTEXT *CorralContext, UINT64 NewState){
_QWORD *v2;
__int64 v3;
__int64 v4;
_QWORD *v5;
__int32 v6;
__int64 v8;
__int64 v9;
UINT64 SpinCount;
v3 = *(_QWORD *)CorralContext;
v4 = 0i64;
*v2 = 0i64;
v5 = v2;
v6 = NewState;
if( (*(_DWORD *)(v3 + 80) & 0x80u) != 0 )
{
LODWORD(v8) = IopLiveDumpGetMillisecondCounter(0);
v4 = v8;
}
_InterlockedExchange(CorralContext + 4, 0);
_InterlockedExchange(CorralContext + 3, v6);
if( v6 == 7 )
_InterlockedIncrement(CorralContext + 4);
else
IopLiveDumpProcessCorralStateChange(CorralContext, (_LIVEDUMP_PROCESSOR_PRIVATE_CONTEXT *)(CorralContext + 28));
LODWORD(SpinCount) = 0;
while( CorralContext[4] != CorralContext[5] )
KeYieldProcessorEx(&SpinCount);
if( (*(_DWORD *)(v3 + 80) & 0x80u) != 0 )
{
LODWORD(v9) = IopLiveDumpGetMillisecondCounter(0);
*v5 = v9 - v4;
}
}Referenced by:
IopLiveDumpCorralProcessors
IopLiveDumpStartDumpDataBuffering
IopLiveDumpUncorralProcessors