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