PipProcessStartPhase1
VOID __fastcall PipProcessStartPhase1(_DEVICE_NODE *DeviceNode, UINT64 Synchronous, UINT64 OperationsPending){
int v3;
int v4;
INT64 v6;
int v7;
ULONG_PTR v8;
__int64 v9;
PNP_VETO_TYPE v10;
v3 = OperationsPending;
v4 = Synchronous;
v10 = PNP_VetoTypeUnknown;
if( (byte_140C130BB & 0x10) != 0 )
McTemplateK0dz_EtwWriteTransfer(
(INT64)DeviceNode,
&KMPnPEvt_ProcessDeviceStart_Start,
OperationsPending,
1i64,
*((const WCHAR **)DeviceNode + 6));
if( !v3 || (*((_DWORD *)DeviceNode + 99) & 0x400000) == 0 )
{
IopUncacheInterfaceInformation(*((_DEVICE_OBJECT **)DeviceNode + 4), 1ui64);
if( !*((_DWORD *)DeviceNode + 142)
|| (PpProfileBeginHardwareProfileTransition(0),
PpProfileIncludeInHardwareProfileTransition((__int64)DeviceNode, 2),
(int)PpProfileQueryHardwareProfileChange(0, 2i64, &v10, 0i64) >= 0) )
{
if( PipHalIommuSecurityEnabled )
{
v6 = *((_QWORD *)DeviceNode + 90);
if( v6 )
{
v7 = PiIommuUnblockDevice(v6);
v8 = v7;
if( v7 < 0 )
{
IoAddTriageDumpDataBlock(DeviceNode, 0x310ui64);
if( *((_WORD *)DeviceNode + 20) )
{
IoAddTriageDumpDataBlock((char *)DeviceNode + 40, 2ui64);
IoAddTriageDumpDataBlock(*((PVOID *)DeviceNode + 6), *((unsigned __int16 *)DeviceNode + 20));
}
if( *((_WORD *)DeviceNode + 28) )
{
IoAddTriageDumpDataBlock((char *)DeviceNode + 56, 2ui64);
IoAddTriageDumpDataBlock(*((PVOID *)DeviceNode + 8), *((unsigned __int16 *)DeviceNode + 28));
}
v9 = *((_QWORD *)DeviceNode + 2);
if( v9 && *(_WORD *)(v9 + 56) )
{
IoAddTriageDumpDataBlock((PVOID)(v9 + 56), 2ui64);
IoAddTriageDumpDataBlock(
*(PVOID *)(*((_QWORD *)DeviceNode + 2) + 64i64),
*(unsigned __int16 *)(*((_QWORD *)DeviceNode + 2) + 56i64));
}
KeBugCheckEx(0xCAu, 0x13ui64, 0x1000ui64, v8, (ULONG_PTR)DeviceNode);
}
}
}
PnpStartDeviceNode((__int64)DeviceNode, 0, v4);
}
}
if( (byte_140C130BB & 0x10) != 0 )
McTemplateK0dz_EtwWriteTransfer(
(INT64)DeviceNode,
&KMPnPEvt_ProcessDeviceStart_Stop,
OperationsPending,
1i64,
*((const WCHAR **)DeviceNode + 6));
}Referenced by:
PipProcessDevNodeTree