PipProcessEnumeratedChildDevice
VOID __stdcall PipProcessEnumeratedChildDevice(_DEVICE_NODE *DeviceNode, _DEVICE_OBJECT *ChildDeviceObject){
_DEVOBJ_EXTENSION *DeviceObjectExtension;
_DEVICE_NODE *v5;
PROFILE_STATUS v6;
NTSTATUS v7;
_DEVICE_NODE *v8;
NTSTATUS v9;
_DRIVER_OBJECT *DriverObject;
_UNICODE_STRING *p_DriverName;
VOID **v12;
VOID **v13;
_DEVOBJ_EXTENSION *v14;
_WORD *v15;
__int64 v16;
_WORD *v17;
__int64 v18;
_DEVICE_NODE *DeviceNodea;
DeviceObjectExtension = ChildDeviceObject->DeviceObjectExtension;
if( (DeviceObjectExtension->ExtensionFlags & 2) != 0 )
{
IoAddTriageDumpDataBlock(ChildDeviceObject, (_BYTE *)ChildDeviceObject->Size);
DriverObject = ChildDeviceObject->DriverObject;
if( DriverObject )
{
IoAddTriageDumpDataBlock(DriverObject, (_BYTE *)(unsigned int)DriverObject->Size);
p_DriverName = &ChildDeviceObject->DriverObject->DriverName;
if( p_DriverName->Length )
{
IoAddTriageDumpDataBlock(p_DriverName, (_BYTE *)2);
IoAddTriageDumpDataBlock(
ChildDeviceObject->DriverObject->DriverName.Buffer,
(_BYTE *)ChildDeviceObject->DriverObject->DriverName.Length);
}
}
v12 = (VOID **)ChildDeviceObject->DeviceObjectExtension->DeviceNode;
if( v12 )
{
v13 = v12 + 5;
IoAddTriageDumpDataBlock(v12, (_BYTE *)0x310);
if( *(_WORD *)v13 )
{
IoAddTriageDumpDataBlock(v13, (_BYTE *)2);
IoAddTriageDumpDataBlock(v13[1], (_BYTE *)*(unsigned __int16 *)v13);
}
v14 = ChildDeviceObject->DeviceObjectExtension;
v15 = (char *)v14->DeviceNode + 56;
if( *v15 )
{
IoAddTriageDumpDataBlock(v15, (_BYTE *)2);
IoAddTriageDumpDataBlock(
*((VOID **)ChildDeviceObject->DeviceObjectExtension->DeviceNode + 8),
(_BYTE *)*((unsigned __int16 *)ChildDeviceObject->DeviceObjectExtension->DeviceNode + 28));
v14 = ChildDeviceObject->DeviceObjectExtension;
}
v16 = *((_QWORD *)v14->DeviceNode + 2);
if( v16 )
{
v17 = (_WORD *)(v16 + 56);
if( *v17 )
{
IoAddTriageDumpDataBlock(v17, (_BYTE *)2);
v18 = *((_QWORD *)ChildDeviceObject->DeviceObjectExtension->DeviceNode + 2);
IoAddTriageDumpDataBlock(*(VOID **)(v18 + 64), (_BYTE *)*(unsigned __int16 *)(v18 + 56));
}
}
}
KeBugCheckEx(0xCAu, (PVOID)4, ChildDeviceObject, 0i64, 0i64);
}
v5 = (_DEVICE_NODE *)DeviceObjectExtension->DeviceNode;
DeviceNodea = v5;
if( v5 )
{
PipSetDevNodeFlags(v5, 0x10ui64);
if( v5->DockInfo.DockStatus == DOCK_EJECTIRP_COMPLETED )
PpProfileCancelTransitioningDock(v5, v6);
goto LABEL_5;
}
v7 = PipAllocateDeviceNode(ChildDeviceObject, (PDEVICE_NODE *)&DeviceNodea);
v8 = DeviceNodea;
v9 = v7;
if( !DeviceNodea )
{
LABEL_5:
HalPutDmaAdapter((PADAPTER_OBJECT)ChildDeviceObject);
return;
}
PipSetDevNodeFlags(DeviceNodea, 0x10ui64);
ChildDeviceObject->Flags |= 0x1000u;
PpDevNodeInsertIntoTree(DeviceNode, v8);
if( v9 == -1073740946 )
PipSetDevNodeProblem(v8, 0x31ui64, -1073740946);
}Referenced by:
PipEnumerateCompleted