IopQueryConflictFillConflicts

__int64 IopQueryConflictFillConflicts(
        _DEVICE_OBJECT *PhysicalDeviceObject,
        unsigned int a2,
        _QWORD *a3,
        __int64 a4,
        ...){
  unsigned int v4; 
  __int64 v5; 
  _QWORD *v6; 
  unsigned int v7; 
  unsigned int v9; 
  unsigned int v10; 
  char v11; 
  unsigned int v12; 
  unsigned int v13; 
  __int64 v14; 
  unsigned int v15; 
  unsigned int v16; 
  char v17; 
  char v18; 
  __int64 v19; 
  unsigned int v20; 
  _QWORD *v21; 
  __int64 v22; 
  unsigned int v23; 
  __int64 v24; 
  __int64 v25; 
  int v26; 
  unsigned int v27; 
  __int64 v28; 
  unsigned int v29; 
  unsigned int v30; 
  unsigned int v31; 
  _DEVICE_OBJECT **v32; 
  __int64 v33; 
  _DEVICE_OBJECT *v34; 
  unsigned int v35; 
  unsigned __int64 v36; 
  unsigned int v37; 
  unsigned int v38; 
  unsigned int v39; 
  __int64 v40; 
  unsigned int v42; 
  int v43; 
  __int64 Length; 
  va_list Lengtha; 
  __int64 v48; 
  va_list va1; 

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

Referenced by:

IopQueryConflictListInternal