PiPnpRtlGatherInterfaceDeleteInfo

INT64 __fastcall PiPnpRtlGatherInterfaceDeleteInfo(WCHAR *a1, INT64 **a2){
  void *v2; 
  INT64 *PoolWithTag; 
  int Object; 
  int ObjectProperty; 
  int v8; 
  int v9; 
  int v10; 
  int v11; 
  INT64 v13; 
  UINT64 v14; 
  INT64 v15; 
  __int128 v16; 
  __int16 v17[40]; 
  v2 = 0i64;
  v14 = 0i64;
  v15 = 0i64;
  v16 = 0i64;
  PoolWithTag = (INT64 *)ExAllocatePoolWithTag(PagedPool, 0x20ui64, 0x47706E50ui64);
  *a2 = PoolWithTag;
  if( PoolWithTag )
  {
    *(_OWORD *)PoolWithTag = 0i64;
    *((_OWORD *)PoolWithTag + 1) = 0i64;
    Object = PiDmGetObject(3i64, a1, *a2);
    if( (int)(Object + 0x80000000) < 0 || Object == -1073741772 )
    {
      ObjectProperty = PnpGetObjectProperty(
                         PiPnpRtlCtx,
                         (__int64)a1,
                         3i64,
                         0i64,
                         0i64,
                         (__int64)&DEVPKEY_DeviceInterface_ClassGuid,
                         (int *)&v14 + 1,
                         (unsigned __int64)&v16,
                         16,
                         (ULONG *)&v14,
                         0);
      Object = ObjectProperty;
      if( ObjectProperty == -1073741772
        || ObjectProperty == -1073741275
        || ObjectProperty >= 0
        && ((PnpStringFromGuid((int *)&v16, (wchar_t *)v17), v8 < 0)
         || (Object = PiDmGetObject(4i64, (WCHAR *)v17, *a2 + 1), (int)(Object + 0x80000000) < 0)
         || Object == -1073741772) )
      {
        LODWORD(v13) = 0;
        v9 = PnpGetObjectProperty(
               1198550608i64,
               200i64,
               (INT64)a1,
               3i64,
               0i64,
               0i64,
               (INT64 *)&DEVPKEY_Device_InstanceId,
               (UINT64)&v14 + 4,
               (INT64)&v15,
               (ULONG *)&v14,
               v13);
        v2 = (void *)v15;
        Object = v9;
        if( v9 == -1073741772
          || v9 == -1073741275
          || v9 >= 0
          && ((Object = PiDmGetObject(1i64, (WCHAR *)v15, *a2 + 2), (int)(Object + 0x80000000) < 0)
           || Object == -1073741772) )
        {
          v10 = PnpGetObjectProperty(
                  PiPnpRtlCtx,
                  (__int64)a1,
                  3i64,
                  0i64,
                  0i64,
                  (__int64)&DEVPKEY_Device_ContainerId,
                  (int *)&v14 + 1,
                  (unsigned __int64)&v16,
                  16,
                  (ULONG *)&v14,
                  0);
          Object = v10;
          if( v10 == -1073741772 || v10 == -1073741275 )
          {
            Object = 0;
            goto LABEL_21;
          }
          if( v10 >= 0 )
          {
            PnpStringFromGuid((int *)&v16, (wchar_t *)v17);
            Object = v11;
            if( v11 >= 0 )
            {
              Object = PiDmGetObject(5i64, (WCHAR *)v17, *a2 + 3);
              if( Object == -1073741772 )
              {
                Object = 0;
                goto LABEL_18;
              }
LABEL_21:
              if( Object >= 0 )
                goto LABEL_18;
            }
          }
        }
      }
    }
  }
  else
  {
    Object = -1073741670;
  }
  PiPnpRtlFreeInterfaceDeleteInfo(*a2);
  *a2 = 0i64;
LABEL_18:
  if( v2 )
    ExFreePoolWithTag(v2, 0x47706E50u);
  return(unsigned int)Object;
}

Referenced by:

PiPnpRtlCmActionCallback