PnpWatchdogExtractTriageInformation
_QWORD *__fastcall PnpWatchdogExtractTriageInformation(INT64 a1, _QWORD *a2, _QWORD *a3, _QWORD *a4, _QWORD *a5){
int v5;
__int64 v6;
__int64 v7;
int v8;
int v9;
int v10;
int v11;
__int64 v12;
_QWORD *v13;
_QWORD *v14;
__int64 v15;
_QWORD *result;
v5 = *(_DWORD *)(a1 + 16);
v6 = 0i64;
*a2 = 0i64;
v7 = 0i64;
v8 = v5 - 1;
if( v8 )
{
v9 = v8 - 1;
if( v9 )
{
v10 = v9 - 1;
if( v10 )
{
v11 = v10 - 1;
if( v11 )
{
if( v11 != 1 )
__fastfail(5u);
v12 = *(_QWORD *)(a1 + 24);
v6 = *(_QWORD *)(v12 + 8);
*a3 = *(_QWORD *)(v12 + 16);
}
else
{
v13 = *(_QWORD **)(a1 + 24);
v6 = v13[2];
*a3 = v13[3];
*a2 = v13[1];
}
}
else
{
v14 = *(_QWORD **)(a1 + 24);
*a3 = PnpDelayedRemoveWorkerThread;
v7 = v14[1];
*a2 = *v14;
}
}
else
{
*a3 = *(_QWORD *)PnpDeviceActionThread;
v15 = *(_QWORD *)(*(_QWORD *)(a1 + 24) + 16i64);
*a2 = v15;
if( v15 )
v7 = *(_QWORD *)(v15 + 32);
}
}
else
{
*a3 = PnpDeviceEventThread;
v7 = *(_QWORD *)(*(_QWORD *)(a1 + 24) + 152i64);
if( v7 )
*a2 = *(_QWORD *)(*(_QWORD *)(v7 + 312) + 40i64);
}
if( a4 )
*a4 = v7;
result = a5;
if( a5 )
*a5 = v6;
return result;
}Referenced by:
PnpWatchdogBugcheck
PnpWatchdogEtwWrite