PipProcessEnumeratedChildDevice
void __fastcall PipProcessEnumeratedChildDevice(__int64 a1, ULONG_PTR a2){
__int64 v2;
_DWORD *v5;
int v6;
int DeviceNode;
__int64 v8;
int v9;
__int16 *v10;
_WORD *v11;
PVOID *v12;
PVOID *v13;
__int64 v14;
_WORD *v15;
__int64 v16;
_WORD *v17;
__int64 v18;
__int64 v19;
v2 = *(_QWORD *)(a2 + 312);
if( (*(_DWORD *)(v2 + 32) & 2) != 0 )
{
IoAddTriageDumpDataBlock((PVOID)a2, *(unsigned __int16 *)(a2 + 2));
v10 = *(__int16 **)(a2 + 8);
if( v10 )
{
IoAddTriageDumpDataBlock(v10, (unsigned int)v10[1]);
v11 = (_WORD *)(*(_QWORD *)(a2 + 8) + 56i64);
if( *v11 )
{
IoAddTriageDumpDataBlock(v11, 2ui64);
IoAddTriageDumpDataBlock(
*(PVOID *)(*(_QWORD *)(a2 + 8) + 64i64),
*(unsigned __int16 *)(*(_QWORD *)(a2 + 8) + 56i64));
}
}
v12 = *(PVOID **)(*(_QWORD *)(a2 + 312) + 40i64);
if( v12 )
{
v13 = v12 + 5;
IoAddTriageDumpDataBlock(v12, 0x310ui64);
if( *(_WORD *)v13 )
{
IoAddTriageDumpDataBlock(v13, 2ui64);
IoAddTriageDumpDataBlock(v13[1], *(unsigned __int16 *)v13);
}
v14 = *(_QWORD *)(a2 + 312);
v15 = (_WORD *)(*(_QWORD *)(v14 + 40) + 56i64);
if( *v15 )
{
IoAddTriageDumpDataBlock(v15, 2ui64);
IoAddTriageDumpDataBlock(
*(PVOID *)(*(_QWORD *)(*(_QWORD *)(a2 + 312) + 40i64) + 64i64),
*(unsigned __int16 *)(*(_QWORD *)(*(_QWORD *)(a2 + 312) + 40i64) + 56i64));
v14 = *(_QWORD *)(a2 + 312);
}
v16 = *(_QWORD *)(*(_QWORD *)(v14 + 40) + 16i64);
if( v16 )
{
v17 = (_WORD *)(v16 + 56);
if( *v17 )
{
IoAddTriageDumpDataBlock(v17, 2ui64);
v18 = *(_QWORD *)(*(_QWORD *)(*(_QWORD *)(a2 + 312) + 40i64) + 16i64);
IoAddTriageDumpDataBlock(*(PVOID *)(v18 + 64), *(unsigned __int16 *)(v18 + 56));
}
}
}
KeBugCheckEx(0xCAu, 4ui64, a2, 0i64, 0i64);
}
v5 = *(_DWORD **)(v2 + 40);
v19 = (__int64)v5;
if( v5 )
{
PipSetDevNodeFlags((__int64)v5, 16);
if( v5[142] == 4 )
PpProfileCancelTransitioningDock((__int64)v5, v6);
goto LABEL_5;
}
DeviceNode = PipAllocateDeviceNode(a2, (void **)&v19);
v8 = v19;
v9 = DeviceNode;
if( !v19 )
{
LABEL_5:
HalPutDmaAdapter((PADAPTER_OBJECT)a2);
return;
}
PipSetDevNodeFlags(v19, 16);
*(_DWORD *)(a2 + 48) |= 0x1000u;
PpDevNodeInsertIntoTree(a1, v8);
if( v9 == -1073740946 )
PipSetDevNodeProblem(v8, 49, -1073740946);
}Referenced by:
PipEnumerateCompleted