EtwpBugCheckMultiPartCallback
VOID __stdcall EtwpBugCheckMultiPartCallback(
_KBUGCHECK_CALLBACK_REASON Reason,
_KBUGCHECK_REASON_CALLBACK_RECORD *Record,
VOID *ReasonSpecificData,
UINT64 ReasonSpecificDataLength){
unsigned __int16 *v4;
__int64 v6;
__int64 v7;
unsigned int v8;
__int64 v9;
_DWORD *v10;
__int64 v11;
unsigned int v12;
unsigned __int16 v13;
__int64 v14;
__int64 v15;
__int64 v16;
bool v17;
__int64 v18;
__int64 v19;
int v20;
v4 = (unsigned __int16 *)*((_QWORD *)ReasonSpecificData + 6);
*((_DWORD *)ReasonSpecificData + 10) = 0;
*((_OWORD *)ReasonSpecificData + 1) = EtwSecondaryDumpDataGuid;
if( !v4 )
{
v4 = (unsigned __int16 *)((char *)&ExBootDevicesRemovedEvent + 1264);
*(&ExBootDevicesRemovedEvent + 79) = 0i64;
*((_QWORD *)ReasonSpecificData + 6) = (char *)&ExBootDevicesRemovedEvent + 1264;
}
if( *((_BYTE *)v4 + 2) )
{
v7 = *((_QWORD *)v4 + 1);
v8 = *v4;
if( v7 )
{
v9 = *(_QWORD *)(*(_QWORD *)(EtwpHostSiloState + 456) + 8i64 * *v4);
v10 = (_DWORD *)*((_QWORD *)v4 + 1);
if( *(_DWORD *)(v7 + 8) <= *v10 )
*(_DWORD *)(*((_QWORD *)v4 + 1) + 48i64) = v10[2];
else
v10[12] = v10[1];
*((_DWORD *)ReasonSpecificData + 10) = *(_DWORD *)(*((_QWORD *)v4 + 1) + 48i64);
if( *((_DWORD *)ReasonSpecificData + 2) )
*((_QWORD *)ReasonSpecificData + 4) = *((_QWORD *)v4 + 1);
v18 = *(_QWORD *)(*((_QWORD *)v4 + 1) + 56i64);
v19 = v18 - 56;
if( v18 == v9 + 96 )
v19 = 0i64;
*((_QWORD *)v4 + 1) = v19;
v17 = v19 == 0;
LABEL_30:
if( v17 )
++*v4;
}
else
{
while( v8 < *(_DWORD *)(EtwpHostSiloState + 16) )
{
v11 = *(_QWORD *)(*(_QWORD *)(EtwpHostSiloState + 456) + 8i64 * (unsigned __int16)v8);
if( (v11 & 1) == 0 && *(int *)(v11 + 12) < 0 && (*(_DWORD *)(v11 + 316) & 1) == 0 )
{
if( *(_QWORD *)(v11 + 712) )
{
_mm_pause();
}
else
{
v12 = 2 * *(unsigned __int16 *)(v11 + 152) + 48;
*((_DWORD *)ReasonSpecificData + 10) = v12;
if( !*((_DWORD *)ReasonSpecificData + 2) )
goto LABEL_21;
if( v12 <= *((_DWORD *)ReasonSpecificData + 3) )
{
v14 = *(_QWORD *)ReasonSpecificData;
*(_DWORD *)v14 = 32223201;
*(_DWORD *)(v14 + 4) = *(_DWORD *)v11;
*(_DWORD *)(v14 + 16) = *(_DWORD *)(v11 + 4);
*(_DWORD *)(v14 + 12) = *(_DWORD *)(v11 + 216);
*(_QWORD *)(v14 + 24) = *(_QWORD *)(v11 + 808);
*(_DWORD *)(v14 + 8) = *(_DWORD *)(v11 + 12);
*(_DWORD *)(v14 + 20) = *(unsigned __int16 *)(v11 + 152);
*(_OWORD *)(v14 + 32) = *(_OWORD *)(v11 + 320);
memmove((VOID *)(v14 + 48), *(const VOID **)(v11 + 160), 2 * *(unsigned __int16 *)(v11 + 152));
*((_QWORD *)ReasonSpecificData + 4) = *(_QWORD *)ReasonSpecificData;
*((_DWORD *)ReasonSpecificData + 10) = v12;
*((_DWORD *)ReasonSpecificData + 2) = v12;
LABEL_21:
v15 = *(_QWORD *)(v11 + 96);
v16 = v15 - 56;
if( v15 == v11 + 96 )
v16 = 0i64;
*((_QWORD *)v4 + 1) = v16;
v17 = v16 == 0;
goto LABEL_30;
}
}
}
v13 = *v4 + 1;
v8 = v13;
*v4 = v13;
}
}
}
else
{
*((_DWORD *)ReasonSpecificData + 10) = 32;
if( *((_DWORD *)ReasonSpecificData + 2) )
{
v6 = *(_QWORD *)ReasonSpecificData;
*(_QWORD *)(v6 + 16) = *(&ExBootDevicesRemovedEvent + 244);
*(_DWORD *)(v6 + 8) = *(&ExBootDevicesRemovedEvent + 381);
*(_QWORD *)(v6 + 24) = *(&ExBootDevicesRemovedEvent + 189);
*(_DWORD *)v6 = KeMaximumIncrement;
*(_DWORD *)(v6 + 4) = NtBuildNumber;
*((_QWORD *)ReasonSpecificData + 4) = *(_QWORD *)ReasonSpecificData;
*((_DWORD *)ReasonSpecificData + 10) = 32;
*((_DWORD *)ReasonSpecificData + 2) = 32;
}
*((_BYTE *)v4 + 2) = 1;
}
v20 = *((_DWORD *)ReasonSpecificData + 14);
if( (unsigned int)*v4 >= *(_DWORD *)(EtwpHostSiloState + 16) )
{
*((_DWORD *)ReasonSpecificData + 14) = v20 & 0xFFFFFFFE;
*((_QWORD *)v4 + 1) = 0i64;
*((_BYTE *)v4 + 2) = 0;
*v4 = 0;
}
else
{
*((_DWORD *)ReasonSpecificData + 14) = v20 | 1;
}
}Referenced by:
No references.