PiPnpRtlCmActionCallback

NTSTATUS __stdcall PiPnpRtlCmActionCallback(
        HPNPCTX *hPnpCtx,
        WCHAR *CmObjectName,
        _CM_OBJECT_TYPE CmObjectType,
        _CM_ACTION_TYPE CmActionType,
        _CM_ACTION_TIME CmActionTime,
        _CM_ACTION_INFORMATION *CmObjectActionInfo){
  NTSTATUS v9; 
  __int32 v10; 
  __int32 v11; 
  __int32 v12; 
  unsigned __int64 v13; 
  NTSTATUS FilteredDeviceInterfaceList; 
  PNP_OBJECT_TYPE v15; 
  VOID **v16; 
  __int32 v18; 
  __int32 v19; 
  __int32 v20; 
  unsigned int v21; 
  VOID **PoolWithTag; 
  INT64 v23; 
  NTSTATUS DeviceRegProp; 
  _CM_ACTION_INFORMATION v25; 
  bool v26; 
  PNP_OBJECT_TYPE v27; 
  WCHAR *v28; 
  NTSTATUS v29; 
  WCHAR *v30; 
  _PI_DM_OBJECT *v31; 
  _PI_DM_OBJECT **v32; 
  _PI_DM_OBJECT *v33; 
  _PI_DM_OBJECT *v34; 
  PNP_OBJECT_TYPE v35; 
  WCHAR *v36; 
  VOID *v37; 
  _PI_DM_OBJECT *v38; 
  NTSTATUS v39; 
  _PI_DM_OBJECT *v40; 
  NTSTATUS v41; 
  _PI_DM_OBJECT *v42; 
  PNP_OBJECT_TYPE v43; 
  WCHAR *v44; 
  _PI_DM_OBJECT v45; 
  VOID *v46; 
  PNP_OBJECT_TYPE v47; 
  VOID **v48; 
  void *v49; 
  wchar_t *v50; 
  bool v51; 
  __int64 v52; 
  WCHAR *v53; 
  _PI_DM_OBJECT **v54; 
  _PI_DM_OBJECT *v55; 
  _PI_DM_OBJECT *v56; 
  _PI_DM_OBJECT *v57; 
  _PI_DM_OBJECT **v58; 
  _PI_DM_OBJECT *v59; 
  _PI_DM_OBJECT *v60; 
  INT64 v61; 
  bool IsNullGuid; 
  __int64 v63; 
  _ADAPTER_OBJECT *v64; 
  _DWORD *v65; 
  NTSTATUS v66; 
  NTSTATUS v67; 
  NTSTATUS v68; 
  _EX_PUSH_LOCK *v69; 
  WCHAR *v70; 
  _PI_DM_OBJECT **v71; 
  _PI_DM_OBJECT *v72; 
  UINT64 *CmRegPropType; 
  UINT8 *PropertyBuffer; 
  UINT64 *PropertySize; 
  VOID *Flags; 
  _DIAGNOSTIC_CONTEXT *v77; 
  INT64 v78; 
  __int128 AlreadyInList; 
  _PI_DM_OBJECT *a3; 
  _PI_DM_OBJECT *v81; 
  _UNICODE_STRING DestinationString; 
  PI_PNPRTL_INSTALLER_CLASS_CHANGE_INFO *v83; 
  UINT8 *a2; 
  _PI_PNPRTL_INTERFACE_DELETE_INFO *Info; 
  _PI_DM_OBJECT *Cache; 
  _PI_DM_OBJECT *Object; 
  _PI_DM_OBJECT *PushLock; 
  _EX_PUSH_LOCK *v89; 
  _EX_PUSH_LOCK *v90; 
  PVOID v91; 
  PVOID v92; 
  INT64 v93[3]; 
  char v94; 
  int v95; 
  __int16 v96; 
  char v97; 
  INT64 v98[3]; 
  char v99; 
  int v100; 
  __int16 v101; 
  char v102; 
  __int64 v103; 
  _GUID Guid; 

  v9 = -1073741822;
  if( CmActionType > CM_ACTION_TYPE_ADD_DEVICE_TO_CONTAINER )
  {
    v18 = CmActionType - 14;
    if( !v18 )
    {
      if( CmActionTime != CM_ACTION_TIME_PRE )
      {
        if( CmObjectType == CM_OBJECT_TYPE_DEVICE_CONTAINER )
        {
          if( *CmObjectActionInfo >= 0 )
          {
            v58 = (_PI_DM_OBJECT **)*((_QWORD *)CmObjectActionInfo + 1);
            BYTE1(AlreadyInList) = 0;
            v59 = v58[1];
            if( v59 )
            {
              if( *v58 )
              {
                PiDmListRemoveObject(PiDmListDevicesInInstallerClass, v59, *v58, (UINT8 *)&AlreadyInList + 1);
                if( BYTE1(AlreadyInList) )
                  PiDmListRemoveList(v60, v58[1]);
              }
            }
            PiPnpRtlFreePanelRemoveInfo(v58);
          }
        }
        else if( CmObjectType == CM_OBJECT_TYPE_MAX && *CmObjectActionInfo >= 0 )
        {
          v71 = (_PI_DM_OBJECT **)*((_QWORD *)CmObjectActionInfo + 1);
          v72 = v71[1];
          if( v72 && *v71 )
            PiDmListRemoveObject(
              PiDmListDevicesInInstallerClass|PiDmListInterfacesInContainer,
              v72,
              *v71,
              (UINT8 *)&AlreadyInList + 3);
          PiPnpRtlFreePanelRemoveInfo(v71);
        }
        return 0;
      }
      if( CmObjectType == CM_OBJECT_TYPE_DEVICE_CONTAINER )
      {
        v53 = (WCHAR *)*((_QWORD *)CmObjectActionInfo + 3);
        v91 = 0i64;
        FilteredDeviceInterfaceList = PiPnpRtlGatherContainerRemoveInfo(v53, CmObjectName, &v91);
        v9 = FilteredDeviceInterfaceList;
        if( FilteredDeviceInterfaceList < 0 )
          goto LABEL_28;
        v49 = v91;
      }
      else
      {
        if( CmObjectType != CM_OBJECT_TYPE_MAX )
          return v9;
        v70 = (WCHAR *)*((_QWORD *)CmObjectActionInfo + 3);
        v92 = 0i64;
        FilteredDeviceInterfaceList = PiPnpRtlGatherPanelRemoveInfo(v70, CmObjectName, &v92);
        v9 = FilteredDeviceInterfaceList;
        if( FilteredDeviceInterfaceList < 0 )
          goto LABEL_28;
        v49 = v92;
      }
LABEL_125:
      *((_QWORD *)CmObjectActionInfo + 1) = v49;
      return v9;
    }
    v19 = v18 - 1;
    if( v19 )
    {
      v20 = v19 - 1;
      if( v20 )
      {
        if( v20 != 1 || CmActionTime != CM_ACTION_TIME_PRE || (CmObjectActionInfo[20] & 0x10000) != 0 )
          return v9;
        FilteredDeviceInterfaceList = PiPnpRtlGetFilteredDeviceInterfaceList(CmObjectActionInfo);
      }
      else
      {
        if( CmActionTime != CM_ACTION_TIME_PRE || (CmObjectActionInfo[18] & 0x10000) != 0 )
          return v9;
        FilteredDeviceInterfaceList = PiPnpRtlGetFilteredDeviceList(CmObjectActionInfo);
      }
LABEL_27:
      if( FilteredDeviceInterfaceList != -1073741802 )
      {
LABEL_28:
        *CmObjectActionInfo = FilteredDeviceInterfaceList;
        return -1073741536;
      }
      return 0;
    }
    if( CmActionTime != CM_ACTION_TIME_PRE )
      return v9;
    if( CmObjectType == CM_OBJECT_TYPE_DEVICE_CONTAINER )
    {
      if( (CmObjectActionInfo[10] & 0x10000) != 0 )
        return v9;
      v95 = 0;
      v96 = 0;
      v97 = 0;
      v89 = 0i64;
      v68 = PiDmGetObject(5, CmObjectName, (PI_DM_OBJECT **)&v89);
      if( v68 < 0 )
        goto LABEL_178;
      v69 = v89;
      v93[1] = *((_QWORD *)CmObjectActionInfo + 3);
      v93[2] = *((_QWORD *)CmObjectActionInfo + 4);
      v93[0] = (INT64)hPnpCtx;
      do
      {
        v94 = 0;
        v68 = PiDmListEnumObjectsWithCallback(4i64, v69, (INT64)PiPnpRtlEnumDevicesCallback, (INT64)v93);
      }
      while( v68 >= 0 && v94 );
    }
    else
    {
      if( CmObjectType != CM_OBJECT_TYPE_MAX || (CmObjectActionInfo[10] & 0x10000) != 0 )
        return v9;
      v100 = 0;
      v101 = 0;
      v102 = 0;
      v90 = 0i64;
      v68 = PiDmGetObject(6, CmObjectName, (PI_DM_OBJECT **)&v90);
      if( v68 < 0 )
        goto LABEL_178;
      v69 = v90;
      v98[1] = *((_QWORD *)CmObjectActionInfo + 3);
      v98[2] = *((_QWORD *)CmObjectActionInfo + 4);
      v98[0] = (INT64)hPnpCtx;
      do
      {
        v99 = 0;
        v68 = PiDmListEnumObjectsWithCallback(6i64, v69, (INT64)PiPnpRtlEnumDevicesCallback, (INT64)v98);
      }
      while( v68 >= 0 && v99 );
    }
    if( v69 )
      PiDmObjectRelease((_PI_DM_OBJECT *)v69);
LABEL_178:
    *CmObjectActionInfo = v68;
    return -1073741536;
  }
  if( CmActionType == CM_ACTION_TYPE_ADD_DEVICE_TO_CONTAINER )
  {
    if( CmActionTime == CM_ACTION_TIME_PRE )
      return 0;
    if( CmObjectType == CM_OBJECT_TYPE_DEVICE_CONTAINER )
    {
      if( *CmObjectActionInfo < 0 )
        return 0;
      Object = 0i64;
      a3 = 0i64;
      v38 = 0i64;
      LOBYTE(AlreadyInList) = 0;
      v39 = PiDmGetObject(5, CmObjectName, &Object);
      v40 = Object;
      if( v39 >= 0 )
      {
        v41 = PiDmGetObject(1, *((WCHAR **)CmObjectActionInfo + 3), &a3);
        v38 = a3;
        if( v41 >= 0 )
        {
          PiDmListAddObject(PiDmListDevicesInInstallerClass, v40, a3, (UINT8 *)&AlreadyInList);
          if( !(_BYTE)AlreadyInList )
            PiDmListAddList(v42, v40);
        }
      }
    }
    else
    {
      if( CmObjectType != CM_OBJECT_TYPE_MAX || *CmObjectActionInfo < 0 )
        return 0;
      PushLock = 0i64;
      v81 = 0i64;
      v38 = 0i64;
      v66 = PiDmGetObject(6, CmObjectName, &PushLock);
      v40 = PushLock;
      if( v66 >= 0 )
      {
        v67 = PiDmGetObject(1, *((WCHAR **)CmObjectActionInfo + 3), &v81);
        v38 = v81;
        if( v67 >= 0 )
          PiDmListAddObject(
            PiDmListDevicesInInstallerClass|PiDmListInterfacesInContainer,
            v40,
            v81,
            (UINT8 *)&AlreadyInList + 2);
      }
    }
    if( v40 )
      PiDmObjectRelease(v40);
    if( !v38 )
      return 0;
    goto LABEL_97;
  }
  v10 = CmActionType - 2;
  if( !v10 )
  {
    if( CmActionTime == CM_ACTION_TIME_PRE )
    {
      v27 = CmMapCmObjectTypeToPnpObjectType(CmObjectType);
      v29 = PiDmAddCacheReferenceForObject(v27, v28, 0i64);
      *CmObjectActionInfo = v29;
      return(v29 >> 31) & 0xC0000120;
    }
    if( *CmObjectActionInfo < 0 || !*((_BYTE *)CmObjectActionInfo + 32) )
    {
      v35 = CmMapCmObjectTypeToPnpObjectType(CmObjectType);
      PiDmRemoveCacheReferenceForObject(v35, v36, v37);
      return 0;
    }
    Cache = 0i64;
    v43 = CmMapCmObjectTypeToPnpObjectType(CmObjectType);
    if( PiDmGetObject(v43, v44, &Cache) < 0 )
      return 0;
    v38 = Cache;
    KsepCacheLock(Cache);
    v45 = v38[8];
    v38[8] = v45 | 1;
    PiDmObjectReleaseLock(v38);
    if( (v45 & 1) != 0 )
      PiDmRemoveCacheReferenceForObject(v43, CmObjectName, v46);
LABEL_97:
    PiDmObjectRelease(v38);
    return 0;
  }
  v11 = v10 - 1;
  if( !v11 )
  {
    if( CmActionTime != CM_ACTION_TIME_PRE )
    {
      if( CmObjectType == CM_OBJECT_TYPE_DEVICE )
      {
        v50 = (wchar_t *)*((_QWORD *)CmObjectActionInfo + 1);
        DestinationString = 0i64;
        Guid = 0i64;
        RtlInitUnicodeString(&DestinationString, v50 + 2);
        if( RtlGUIDFromString(&DestinationString, &Guid) < 0 )
          Guid = 0i64;
        if( *CmObjectActionInfo < 0 )
        {
          if( (byte_140C130BA & 0x10) != 0 )
          {
            IsNullGuid = PnpIsNullGuid(&Guid);
            McTemplateK0zjdd_EtwWriteTransfer(
              (unsigned int)-!IsNullGuid,
              (const _EVENT_DESCRIPTOR *)KMPnPEvt_DeviceDelete_Failure,
              v63,
              CmObjectName,
              (unsigned __int64)&Guid & -(__int64)!IsNullGuid,
              *(_DWORD *)v50,
              *CmObjectActionInfo);
          }
        }
        else if( (byte_140C130BA & 8) != 0 )
        {
          v51 = PnpIsNullGuid(&Guid);
          McTemplateK0zjdd_EtwWriteTransfer(
            (unsigned int)-!v51,
            (const _EVENT_DESCRIPTOR *)KMPnPEvt_DeviceDelete_Success,
            v52,
            CmObjectName,
            (unsigned __int64)&Guid & -(__int64)!v51,
            *(_DWORD *)v50,
            *CmObjectActionInfo);
        }
        if( *CmObjectActionInfo >= 0 )
        {
          if( v50[2] )
          {
            v103 = *(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart;
            PnpSetObjectProperty(
              (INT64)hPnpCtx,
              (INT64)(v50 + 2),
              2u,
              0i64,
              0i64,
              (__int64)&DEVPKEY_DeviceClass_LastDeleteDate,
              16,
              (__int64)&v103,
              8,
              0);
          }
          if( CmIsRootEnumeratedDevice(CmObjectName) )
          {
            RtlInitUnicodeString(&DestinationString, CmObjectName);
            if( DestinationString.Length >= 2u )
            {
              if( *DestinationString.Buffer )
              {
                v64 = (_ADAPTER_OBJECT *)PnpDeviceObjectFromDeviceInstanceWithTag(
                                           (__int64)&DestinationString,
                                           0x746C6644u);
                if( v64 )
                {
                  v65 = *(_DWORD **)&v64->AdapterObject.ContiguousTranslationEnd.Offset;
                  if( v65 )
                    *v65 |= 1u;
                  HalPutDmaAdapter(v64);
                }
              }
            }
          }
        }
        PiPnpRtlFreeDeviceDeleteInfo(v50);
      }
      else if( CmObjectType == CM_OBJECT_TYPE_DEVICE_INTERFACE )
      {
        v54 = (_PI_DM_OBJECT **)*((_QWORD *)CmObjectActionInfo + 1);
        if( *CmObjectActionInfo >= 0 && *v54 )
        {
          v55 = v54[1];
          if( v55 )
            PiDmListRemoveObject(PiDmListInterfacesInInterfaceClass, v55, *v54, 0i64);
          v56 = v54[2];
          if( v56 )
            PiDmListRemoveObject(PiDmListInterfacesInDevice, v56, *v54, 0i64);
          v57 = v54[3];
          if( v57 )
            PiDmListRemoveObject(PiDmListInterfacesInContainer, v57, *v54, 0i64);
        }
        PiPnpRtlFreeInterfaceDeleteInfo((_PI_PNPRTL_INTERFACE_DELETE_INFO *)v54);
      }
      return 0;
    }
    if( CmObjectType == CM_OBJECT_TYPE_DEVICE )
    {
      a2 = 0i64;
      FilteredDeviceInterfaceList = PiPnpRtlGatherDeviceDeleteInfo(CmObjectName, (ULONG_PTR *)&a2);
      v9 = FilteredDeviceInterfaceList;
      if( FilteredDeviceInterfaceList < 0 )
        goto LABEL_28;
      v49 = a2;
    }
    else
    {
      if( CmObjectType != CM_OBJECT_TYPE_DEVICE_INTERFACE )
        return v9;
      Info = 0i64;
      FilteredDeviceInterfaceList = PiPnpRtlGatherInterfaceDeleteInfo(CmObjectName, &Info);
      v9 = FilteredDeviceInterfaceList;
      if( FilteredDeviceInterfaceList < 0 )
        goto LABEL_28;
      v49 = Info;
    }
    goto LABEL_125;
  }
  v12 = v11 - 1;
  if( !v12 )
  {
    if( CmActionTime != CM_ACTION_TIME_PRE || (CmObjectActionInfo[14] & 0x10000) != 0 )
      return v9;
    LODWORD(CmRegPropType) = CmObjectActionInfo[10];
    FilteredDeviceInterfaceList = PiDmGetCmObjectListFromCache(
                                    CmObjectType,
                                    *((_QWORD *)CmObjectActionInfo + 2),
                                    *((INT64 **)CmObjectActionInfo + 3),
                                    *((HPNPCTX **)CmObjectActionInfo + 4),
                                    (const WCHAR *)CmRegPropType,
                                    (_CM_OBJECT_TYPE)*((_QWORD *)CmObjectActionInfo + 6),
                                    PropertySize,
                                    Flags,
                                    (WCHAR *)v77,
                                    v78,
                                    (UINT64 *)AlreadyInList);
    goto LABEL_27;
  }
  v13 = (unsigned int)(v12 - 5);
  if( (_DWORD)v13 )
  {
    if( (_DWORD)v13 != 1 )
      return v9;
    if( CmActionTime != CM_ACTION_TIME_PRE )
    {
      if( *CmObjectActionInfo < 0 )
        return v9;
      LODWORD(CmRegPropType) = CmObjectActionInfo[7];
      PiDmObjectUpdateCachedCmProperty(
        CmObjectType,
        CmObjectName,
        (_CM_REG_PROP)CmObjectType,
        (unsigned int)CmObjectActionInfo[6],
        (UINT8 *)CmRegPropType,
        *((_QWORD *)CmObjectActionInfo + 4),
        CmObjectActionInfo[10],
        (UINT64)Flags);
      if( CmObjectType == CM_OBJECT_TYPE_DEVICE && CmObjectActionInfo[6] == 9 )
      {
        v32 = (_PI_DM_OBJECT **)*((_QWORD *)CmObjectActionInfo + 1);
        v33 = *v32;
        if( *v32 )
        {
          v34 = v32[1];
          if( v34 )
            PiDmListRemoveObject(PiDmListDevicesInInstallerClass|PiDmListInterfacesInDevice, v34, v33, 0i64);
          v31 = v32[2];
          if( v31 )
            PiDmListAddObject(PiDmListDevicesInInstallerClass|PiDmListInterfacesInDevice, v31, *v32, 0i64);
        }
        PiPnpRtlFreeInstallerClassChangeInfo(v32, (INT64)v31, (CHAR *)v33);
      }
      return 0;
    }
    v9 = 0;
    if( (CmObjectActionInfo[11] & 0x20000) != 0
      || ((v21 = CmObjectActionInfo[10], PoolWithTag = 0i64, DWORD1(AlreadyInList) = 0, !v21)
       || (PoolWithTag = ExAllocatePoolWithTag(1ui64, v21, 1198550608i64)) == 0i64)
      && CmObjectActionInfo[10] )
    {
LABEL_56:
      if( *((_QWORD *)CmObjectActionInfo + 2) )
      {
LABEL_57:
        if( CmObjectType != CM_OBJECT_TYPE_DEVICE || CmObjectActionInfo[6] != 9 )
          return v9;
        v30 = 0i64;
        v83 = 0i64;
        if( CmObjectActionInfo[7] == 1
          && CmObjectActionInfo[10] == 78
          && PnpIsValidGuidString(*((PCWSTR *)CmObjectActionInfo + 4)) )
        {
          v30 = (WCHAR *)*((_QWORD *)CmObjectActionInfo + 4);
        }
        FilteredDeviceInterfaceList = PiPnpRtlGatherInstallerClassChangeInfo(CmObjectName, v30, &v83);
        v9 = FilteredDeviceInterfaceList;
        if( FilteredDeviceInterfaceList >= 0 )
        {
          *((_QWORD *)CmObjectActionInfo + 1) = v83;
          return v9;
        }
        goto LABEL_28;
      }
      v47 = CmMapCmObjectTypeToPnpObjectType(CmObjectType);
      PiPnpRtlCacheObjectBaseKey(hPnpCtx, CmObjectName, v47, v48);
      v26 = v9 < 0;
LABEL_52:
      if( v26 )
        return v9;
      goto LABEL_57;
    }
    DWORD2(AlreadyInList) = CmObjectActionInfo[10];
    if( CmObjectType == CM_OBJECT_TYPE_DEVICE )
    {
      v23 = (unsigned int)CmObjectActionInfo[6];
      if( (unsigned int)(v23 - 1) > 0x24
        || !CmDevicePropertyRead((unsigned int)(CmObjectType - 1), (unsigned int)v23)
        || CmDevicePropertyWrite() )
      {
        LODWORD(Flags) = 0;
        DeviceRegProp = CmGetDeviceRegProp(
                          *(&stru_140CF2E80 + 607),
                          CmObjectName,
                          *((VOID **)CmObjectActionInfo + 2),
                          v23,
                          (UINT64 *)((char *)&AlreadyInList + 4),
                          (UINT8 *)PoolWithTag,
                          (UINT64 *)&AlreadyInList + 1,
                          (UINT64)Flags);
        goto LABEL_45;
      }
    }
    else
    {
      if( CmObjectType != CM_OBJECT_TYPE_DEVICE_INSTALLER_CLASS )
      {
LABEL_77:
        v9 = 0;
LABEL_49:
        if( PoolWithTag )
          ExFreePoolWithTag(PoolWithTag, 0x47706E50u);
        v26 = v9 < 0;
        if( v9 )
          goto LABEL_52;
        goto LABEL_56;
      }
      v61 = (unsigned int)CmObjectActionInfo[6];
      if( (unsigned int)(v61 - 1) > 0x24
        || !(unsigned __int8)CmClassPropertyRead(
                               (VOID *)v61,
                               (INT8)CmObjectName,
                               *(_LARGE_INTEGER **)&CmObjectType,
                               (VOID *)v13,
                               CmRegPropType,
                               (UINT64)PropertyBuffer,
                               (INT64)PropertySize,
                               Flags,
                               v77,
                               v78,
                               AlreadyInList,
                               *((UINT64 *)&AlreadyInList + 1),
                               (UINT8 *)a3)
        || CmClassPropertyWrite(v61) )
      {
        DeviceRegProp = CmGetInstallerClassRegProp(
                          *(&stru_140CF2E80 + 607),
                          CmObjectName,
                          *((VOID **)CmObjectActionInfo + 2),
                          (unsigned int)v61,
                          (UINT64 *)((char *)&AlreadyInList + 4),
                          (UINT8 *)PoolWithTag,
                          (UINT64 *)&AlreadyInList + 1,
                          (UINT64)Flags);
LABEL_45:
        v25 = DeviceRegProp;
        if( (DeviceRegProp < 0
           || *(_QWORD *)((char *)&AlreadyInList + 4) != __PAIR64__(CmObjectActionInfo[10], CmObjectActionInfo[7])
           || memcmp(PoolWithTag, *((const VOID **)CmObjectActionInfo + 4), DWORD2(AlreadyInList)))
          && (v25 != -1073741275 || CmObjectActionInfo[10])
          && v25 != -1073741790 )
        {
          goto LABEL_77;
        }
LABEL_48:
        *CmObjectActionInfo = v25;
        v9 = -1073741536;
        goto LABEL_49;
      }
    }
    v25 = -1073741790;
    goto LABEL_48;
  }
  if( CmActionTime != CM_ACTION_TIME_PRE )
  {
    if( *CmObjectActionInfo >= 0 )
    {
      LODWORD(CmRegPropType) = **((_DWORD **)CmObjectActionInfo + 4);
      PiDmObjectUpdateCachedCmProperty(
        CmObjectType,
        CmObjectName,
        (_CM_REG_PROP)CmObjectType,
        (unsigned int)CmObjectActionInfo[6],
        (UINT8 *)CmRegPropType,
        *((_QWORD *)CmObjectActionInfo + 5),
        **((_DWORD **)CmObjectActionInfo + 6),
        (UINT64)Flags);
    }
    else if( *CmObjectActionInfo == -1073741275 )
    {
      LODWORD(CmRegPropType) = 0;
      PiDmObjectUpdateCachedCmProperty(
        CmObjectType,
        CmObjectName,
        (_CM_REG_PROP)CmObjectType,
        (unsigned int)CmObjectActionInfo[6],
        (UINT8 *)CmRegPropType,
        0i64,
        0,
        (UINT64)Flags);
    }
    return 0;
  }
  if( (CmObjectActionInfo[14] & 0x10000) != 0 )
    goto LABEL_14;
  FilteredDeviceInterfaceList = PiDmObjectGetCachedCmProperty(
                                  CmObjectType,
                                  CmObjectName,
                                  *(PI_DM_OBJECT **)&CmObjectType,
                                  (_CM_REG_PROP)CmObjectActionInfo[6],
                                  *((UINT8 **)CmObjectActionInfo + 4),
                                  *((UINT8 **)CmObjectActionInfo + 5),
                                  *((UINT64 **)CmObjectActionInfo + 6));
  if( FilteredDeviceInterfaceList >= 0
    || FilteredDeviceInterfaceList == -1073741275
    || FilteredDeviceInterfaceList == -1073741789
    || FilteredDeviceInterfaceList == -1073741772 )
  {
    goto LABEL_28;
  }
  v9 = 0;
LABEL_14:
  if( !*((_QWORD *)CmObjectActionInfo + 2) )
  {
    v15 = CmMapCmObjectTypeToPnpObjectType(CmObjectType);
    PiPnpRtlCacheObjectBaseKey(hPnpCtx, CmObjectName, v15, v16);
  }
  return v9;
}

Referenced by:

No references.