PnpWatchdogBugcheck
void __fastcall __noreturn PnpWatchdogBugcheck(__int64 a1){
unsigned __int64 v2;
unsigned __int64 v3;
VOID **v4;
__int64 v5;
__int16 *v6;
_WORD *v7;
__int64 v8;
__int64 v9;
VOID *v10;
__int64 v11;
__int64 v12;
__int64 v13;
__int64 v14;
__int64 v15;
__int64 v16;
__int64 v17;
__int64 v18;
__int64 v19;
__int64 v20;
__int64 v21;
_QWORD *v22;
unsigned int v23;
_WORD *v24;
_OWORD BugCheckParameter2[5];
PVOID BugCheckParameter1;
VOID *v27;
PVOID BugCheckParameter3;
memset(BugCheckParameter2, 0i64, sizeof(BugCheckParameter2));
*(_QWORD *)&BugCheckParameter2[0] = 0x1504E5057i64;
v2 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart - *(_QWORD *)a1;
v27 = 0i64;
BugCheckParameter1 = 0i64;
BugCheckParameter2[4] = 0i64;
*(_QWORD *)&BugCheckParameter2[1] = PnpDeviceEventThread;
*((PVOID *)&BugCheckParameter2[1] + 1) = qword_140CEC8C0[0];
*(_QWORD *)&BugCheckParameter2[2] = *(&PnpReplaceEvent + 1016);
*((_QWORD *)&BugCheckParameter2[2] + 1) = (char *)&PnpReplaceEvent + 5920;
BugCheckParameter2[3] = *(&WheapDeferredInternalLogsEventLock + 337);
*((_QWORD *)&BugCheckParameter2[0] + 1) = *(unsigned int *)(a1 + 16);
BugCheckParameter3 = 0i64;
v3 = v2 / 0x2710;
PnpWatchdogExtractTriageInformation(
a1,
&v27,
(_LIST_ENTRY **)&BugCheckParameter3,
&BugCheckParameter2[4],
(_QWORD *)&BugCheckParameter2[4] + 1);
v4 = (VOID **)v27;
*((_QWORD *)&BugCheckParameter2[3] + 1) = v27;
if( *(_QWORD *)&BugCheckParameter2[4] )
{
IoAddTriageDumpDataBlock(
*(VOID **)&BugCheckParameter2[4],
(_BYTE *)*(unsigned __int16 *)(*(_QWORD *)&BugCheckParameter2[4] + 2i64));
v5 = *(_QWORD *)&BugCheckParameter2[4];
v6 = *(__int16 **)(*(_QWORD *)&BugCheckParameter2[4] + 8i64);
if( v6 )
{
IoAddTriageDumpDataBlock(v6, (_BYTE *)(unsigned int)v6[1]);
v5 = *(_QWORD *)&BugCheckParameter2[4];
v7 = (_WORD *)(*(_QWORD *)(*(_QWORD *)&BugCheckParameter2[4] + 8i64) + 56i64);
if( *v7 )
{
IoAddTriageDumpDataBlock(v7, (_BYTE *)2);
IoAddTriageDumpDataBlock(
*(VOID **)(*(_QWORD *)(*(_QWORD *)&BugCheckParameter2[4] + 8i64) + 64i64),
(_BYTE *)*(unsigned __int16 *)(*(_QWORD *)(*(_QWORD *)&BugCheckParameter2[4] + 8i64) + 56i64));
v5 = *(_QWORD *)&BugCheckParameter2[4];
}
}
if( v5 )
v8 = *(_QWORD *)(*(_QWORD *)(v5 + 312) + 40i64);
else
v8 = 0i64;
if( v8 )
{
if( v5 )
v9 = *(_QWORD *)(*(_QWORD *)(v5 + 312) + 40i64);
else
v9 = 0i64;
if( v5 )
v10 = *(VOID **)(*(_QWORD *)(v5 + 312) + 40i64);
else
v10 = 0i64;
IoAddTriageDumpDataBlock(v10, (_BYTE *)0x310);
if( *(_WORD *)(v9 + 40) )
{
IoAddTriageDumpDataBlock((VOID *)(v9 + 40), (_BYTE *)2);
IoAddTriageDumpDataBlock(*(VOID **)(v9 + 48), (_BYTE *)*(unsigned __int16 *)(v9 + 40));
}
v11 = *(_QWORD *)&BugCheckParameter2[4];
if( *(_QWORD *)&BugCheckParameter2[4] )
v12 = *(_QWORD *)(*(_QWORD *)(*(_QWORD *)&BugCheckParameter2[4] + 312i64) + 40i64);
else
v12 = 0i64;
if( *(_WORD *)(v12 + 56) )
{
if( *(_QWORD *)&BugCheckParameter2[4] )
v13 = *(_QWORD *)(*(_QWORD *)(*(_QWORD *)&BugCheckParameter2[4] + 312i64) + 40i64);
else
v13 = 0i64;
IoAddTriageDumpDataBlock((VOID *)(v13 + 56), (_BYTE *)2);
if( *(_QWORD *)&BugCheckParameter2[4] )
v14 = *(_QWORD *)(*(_QWORD *)(*(_QWORD *)&BugCheckParameter2[4] + 312i64) + 40i64);
else
v14 = 0i64;
if( *(_QWORD *)&BugCheckParameter2[4] )
v15 = *(_QWORD *)(*(_QWORD *)(*(_QWORD *)&BugCheckParameter2[4] + 312i64) + 40i64);
else
v15 = 0i64;
IoAddTriageDumpDataBlock(*(VOID **)(v15 + 64), (_BYTE *)*(unsigned __int16 *)(v14 + 56));
v11 = *(_QWORD *)&BugCheckParameter2[4];
}
if( v11 )
v16 = *(_QWORD *)(*(_QWORD *)(v11 + 312) + 40i64);
else
v16 = 0i64;
if( *(_QWORD *)(v16 + 16) )
{
v17 = v11 ? *(_QWORD *)(*(_QWORD *)(v11 + 312) + 40i64) : 0i64;
if( *(_WORD *)(*(_QWORD *)(v17 + 16) + 56i64) )
{
if( v11 )
v18 = *(_QWORD *)(*(_QWORD *)(v11 + 312) + 40i64);
else
v18 = 0i64;
IoAddTriageDumpDataBlock((VOID *)(*(_QWORD *)(v18 + 16) + 56i64), (_BYTE *)2);
if( *(_QWORD *)&BugCheckParameter2[4] )
v19 = *(_QWORD *)(*(_QWORD *)(*(_QWORD *)&BugCheckParameter2[4] + 312i64) + 40i64);
else
v19 = 0i64;
if( *(_QWORD *)&BugCheckParameter2[4] )
v20 = *(_QWORD *)(*(_QWORD *)(*(_QWORD *)&BugCheckParameter2[4] + 312i64) + 40i64);
else
v20 = 0i64;
IoAddTriageDumpDataBlock(
*(VOID **)(*(_QWORD *)(v20 + 16) + 64i64),
(_BYTE *)*(unsigned __int16 *)(*(_QWORD *)(v19 + 16) + 56i64));
}
}
}
}
if( *((_QWORD *)&BugCheckParameter2[4] + 1) )
{
v21 = *(_QWORD *)(*((_QWORD *)&BugCheckParameter2[4] + 1) + 48i64) + 24i64;
}
else
{
if( !v4 )
goto LABEL_67;
v21 = (__int64)(v4 + 7);
}
if( v21 )
{
v22 = *(_QWORD **)(v21 + 8);
if( v22 )
{
v23 = *(unsigned __int16 *)(v21 + 2);
if( (_WORD)v23 )
{
if( v23 < 8 )
memmove(&BugCheckParameter1, v22, *(unsigned __int16 *)(v21 + 2));
else
BugCheckParameter1 = (PVOID)*v22;
}
}
if( v4 )
{
IoAddTriageDumpDataBlock(v4, (_BYTE *)0x310);
if( *((_WORD *)v4 + 20) )
{
IoAddTriageDumpDataBlock(v4 + 5, (_BYTE *)2);
IoAddTriageDumpDataBlock(v4[6], (_BYTE *)*((unsigned __int16 *)v4 + 20));
}
if( *((_WORD *)v4 + 28) )
{
IoAddTriageDumpDataBlock(v4 + 7, (_BYTE *)2);
IoAddTriageDumpDataBlock(v4[8], (_BYTE *)*((unsigned __int16 *)v4 + 28));
}
v24 = v4[2];
if( v24 )
{
if( v24[28] )
{
IoAddTriageDumpDataBlock(v24 + 28, (_BYTE *)2);
IoAddTriageDumpDataBlock(*((VOID **)v4[2] + 8), (_BYTE *)*((unsigned __int16 *)v4[2] + 28));
}
}
}
}
LABEL_67:
KeBugCheckEx(0x1D5u, BugCheckParameter1, BugCheckParameter2, BugCheckParameter3, (PVOID)(unsigned int)v3);
}Referenced by:
No references.