IopQueryConflictFillConflicts

INT64 IopQueryConflictFillConflicts(_DEVICE_OBJECT *PhysicalDeviceObject, UINT64 a2, _QWORD *a3, INT64 a4, ...){
  unsigned int v4; 
  INT64 v5; 
  _QWORD *v6; 
  unsigned int v7; 
  unsigned int v9; 
  unsigned int v10; 
  unsigned int v11; 
  unsigned int v12; 
  __int64 v13; 
  unsigned int v14; 
  unsigned int v15; 
  __int64 v16; 
  unsigned int v17; 
  _QWORD *v18; 
  __int64 v19; 
  unsigned int v20; 
  __int64 v21; 
  __int64 v22; 
  int v23; 
  unsigned int v24; 
  __int64 v25; 
  unsigned int v26; 
  unsigned int v27; 
  unsigned int v28; 
  DEVICE_OBJECT **v29; 
  __int64 v30; 
  DEVICE_OBJECT *v31; 
  unsigned int v32; 
  unsigned __int64 v33; 
  unsigned int v34; 
  unsigned int v35; 
  unsigned int v36; 
  INT64 v37; 
  unsigned int v39; 
  int v40; 
  UINT64 Length; 
  __int64 v44; 
  va_list va1; 
  va_list Lengtha; 
  va_start(va1, a4);
  va_start(Lengtha, a4);
  Length = va_arg(va1, _QWORD);
  v44 = va_arg(va1, _QWORD);
  v4 = 0;
  v5 = a4;
  v40 = 0;
  v6 = a3;
  v7 = a2;
  v9 = 0;
  if( (_DWORD)a2 )
  {
    v10 = 1;
    do
    {
      if( IopEliminateBogusConflict(PhysicalDeviceObject, (_DEVICE_OBJECT *)v6[3 * v9]) )
      {
        if( v10 < v7 )
        {
          *(_OWORD *)&v6[3 * v9] = *(_OWORD *)&v6[3 * v7 - 3];
          v6[3 * v9 + 2] = v6[3 * v7 - 1];
        }
        --v7;
        --v9;
        --v10;
      }
      ++v9;
      ++v10;
    }
    while( v9 < v7 );
  }
LABEL_8:
  v11 = 0;
  v12 = 1;
  while( v11 < v7 )
  {
    v13 = 3i64 * v11;
    if( v6[3 * v11] )
    {
      v14 = v12;
      if( v12 < v7 )
      {
        v15 = v12 + 1;
        do
        {
          if( IopEliminateBogusConflict((_DEVICE_OBJECT *)v6[v13], (_DEVICE_OBJECT *)v6[3 * v14]) )
          {
            if( v15 < v7 )
            {
              *(_OWORD *)&v6[3 * v14] = *(_OWORD *)&v6[3 * v7 - 3];
              v6[3 * v14 + 2] = v6[3 * v7 - 1];
            }
            --v7;
            --v14;
            --v15;
          }
          else if( IopEliminateBogusConflict((_DEVICE_OBJECT *)v6[3 * v14], (_DEVICE_OBJECT *)v6[3 * v11]) )
          {
            v16 = 3i64 * v11;
            *(_OWORD *)&v6[v16] = *(_OWORD *)&v6[3 * v14];
            v6[v16 + 2] = v6[3 * v14 + 2];
            if( v14 + 1 < v7 )
            {
              *(_OWORD *)&v6[3 * v14] = *(_OWORD *)&v6[3 * v7 - 3];
              v6[3 * v14 + 2] = v6[3 * v7 - 1];
            }
            --v7;
            goto LABEL_8;
          }
          v13 = 3i64 * v11;
          ++v14;
          ++v15;
        }
        while( v14 < v7 );
      }
    }
    ++v11;
    ++v12;
  }
  v17 = 0;
  if( v7 )
  {
    v18 = v6;
    while( 1 )
    {
      v19 = v17 + 1;
      if( !*v18 )
        break;
      v18 += 3;
      ++v17;
      if( (unsigned int)v19 >= v7 )
        goto LABEL_39;
    }
    if( (unsigned int)v19 < v7 )
    {
      v20 = v17 + 2;
      do
      {
        if( !v6[3 * v19] )
        {
          if( v20 < v7 )
          {
            *(_OWORD *)&v6[3 * v19] = *(_OWORD *)&v6[3 * v7 - 3];
            v6[3 * v19 + 2] = v6[3 * v7 - 1];
          }
          --v7;
          LODWORD(v19) = v19 - 1;
          --v20;
        }
        v19 = (unsigned int)(v19 + 1);
        ++v20;
      }
      while( (unsigned int)v19 < v7 );
    }
    if( v7 != 1 )
    {
      v21 = v7 - 1;
      if( v17 + 1 < v7 )
      {
        v22 = 3i64 * v17;
        *(_OWORD *)&v6[v22] = *(_OWORD *)&v6[3 * v21];
        v6[v22 + 2] = v6[3 * v21 + 2];
      }
      --v7;
    }
  }
LABEL_39:
  v23 = v44;
  v24 = 0;
  v25 = (unsigned int)Length;
  if( (_DWORD)v44 )
    LOBYTE(v24) = (unsigned int)Length >= 0x4A;
  v26 = v24;
  v39 = v24;
  v27 = v24;
  v28 = (_DWORD)v44 != 0 ? 74 : 32;
  if( v7 )
  {
    v29 = (DEVICE_OBJECT **)v6;
    v30 = v7;
    do
    {
      v31 = *v29;
      LODWORD(Length) = 0;
      IopQueryConflictFillString(v31, 0i64, (UINT64 *)Lengtha, 0i64);
      v28 += 2 * Length + 40;
      if( v28 <= (unsigned int)v25 )
        v27 += Length;
      v32 = v24 + 1;
      if( v28 > (unsigned int)v25 )
        v32 = v24;
      v29 += 3;
      v24 = v32;
      --v30;
    }
    while( v30 );
    v6 = a3;
    v5 = a4;
    v26 = v39;
    v23 = v44;
  }
  *(_DWORD *)(v5 + 16) = v28;
  *(_DWORD *)(v5 + 8) = v26 + v7;
  *(_DWORD *)(v5 + 12) = v24;
  v33 = v5 + 8 * (v24 + 4i64 * v24 + 3);
  if( v33 <= v5 + v25 - 8 )
  {
    *(_DWORD *)v33 = -1;
    if( v26 )
    {
      v34 = 1;
      *(_DWORD *)(v5 + 24) = 0;
      *(_DWORD *)(v5 + 28) = v23;
      --v27;
      *(_DWORD *)(v5 + 32) = 0;
      *(_QWORD *)(v5 + 40) = 0i64;
      *(_QWORD *)(v5 + 48) = 0i64;
      *(_DWORD *)(v5 + 56) = 0;
      v40 = 1;
      *(_WORD *)(v33 + 4) = 0;
    }
    else
    {
      v34 = 0;
    }
    LODWORD(v44) = 0;
    v35 = 0;
    v36 = v34;
    if( v34 < v24 )
    {
      v37 = v5 + 40i64 * v34 + 28;
      do
      {
        *(_DWORD *)(v37 - 4) = v36;
        *(_QWORD *)v37 = 0i64;
        *(_QWORD *)(v37 + 12) = 1i64;
        *(_QWORD *)(v37 + 20) = 0i64;
        *(_DWORD *)(v37 + 28) = 0;
        LODWORD(Length) = v27;
        IopQueryConflictFillString(
          (DEVICE_OBJECT *)v6[3 * v35],
          (WCHAR *)(v33 + 2 * (v36 + 2i64)),
          (UINT64 *)Lengtha,
          (UINT64 *)(v5 + 40i64 * v34 + 28));
        v37 += 40i64;
        v35 = v44 + 1;
        v27 -= Length;
        v34 = v40 + 1;
        v36 += Length;
        LODWORD(v44) = v44 + 1;
        v40 = v34;
      }
      while( v34 < v24 );
    }
    *(_WORD *)(v33 + 2i64 * v36 + 4) = 0;
  }
  else
  {
    return(unsigned int)-1073741789;
  }
  return v4;
}

Referenced by:

IopQueryConflictListInternal