MiCaptureImageCfgContext

NTSTATUS __stdcall MiCaptureImageCfgContext(
        INT64 a1,
        INT64 a2,
        INT64 a3,
        UINT64 a4,
        UINT64 a5,
        INT64 a6,
        INT64 a7,
        INT64 a8,
        UINT64 a9,
        INT64 *a10,
        INT64 a11){
  unsigned int v12; 
  NTSTATUS v13; 
  INT64 v14; 
  UINT64 v15; 
  unsigned int v16; 
  unsigned __int64 v17; 
  unsigned int v18; 
  unsigned int v19; 
  int v20; 
  UINT64 v21; 
  unsigned int v22; 
  unsigned __int64 v23; 
  unsigned int v24; 
  unsigned __int64 v25; 
  INT64 v26; 
  unsigned __int64 v27; 
  size_t v28; 
  char *Pool; 
  size_t v31; 
  UINT64 v32; 
  int v33; 
  UINT64 v34; 
  char *v35; 
  unsigned int v40; 

  v12 = 0;
  v13 = 0;
  *(_DWORD *)a10 = 0;
  v14 = a11;
  *(_OWORD *)a11 = 0i64;
  *(_OWORD *)(a11 + 16) = 0i64;
  v15 = 0i64;
  v16 = 0;
  if( *(_WORD *)(a7 + 48) == 523 )
  {
    v17 = *(_QWORD *)(a8 + 128);
    v18 = *(_DWORD *)(a8 + 136);
    v40 = v18;
    v19 = *(_DWORD *)(a8 + 144);
    v20 = v19 & 0x4000;
    if( (v19 & 0x4000) != 0 && (unsigned int)a9 >= 0xB0 )
    {
      v15 = *(_QWORD *)(a8 + 160);
      v16 = *(_DWORD *)(a8 + 168);
    }
    v21 = *(_QWORD *)(a8 + 120);
  }
  else
  {
    v17 = *(unsigned int *)(a8 + 80);
    v18 = *(_DWORD *)(a8 + 84);
    v40 = v18;
    v19 = *(_DWORD *)(a8 + 88);
    v20 = v19 & 0x4000;
    if( (v19 & 0x4000) != 0 && (unsigned int)a9 >= 0x70 )
    {
      v15 = *(unsigned int *)(a8 + 104);
      v16 = *(_DWORD *)(a8 + 108);
    }
    v21 = *(unsigned int *)(a8 + 76);
  }
  v34 = v21;
  if( (v19 & 0x400) != 0 && v17 )
  {
    v22 = (v19 >> 28) + 4;
    if( v17 >= a4 && v18 && v18 < 0xFFFFFFFF / v22 )
    {
      if( v20 && v15 )
      {
        if( v15 < a4 || !v16 || v16 >= 0xFFFFFFFF / v22 )
        {
          v13 = -1073741819;
          dword_140C4C988 = 10;
          goto LABEL_32;
        }
        v23 = v15 - a4;
        v24 = v22 * v16;
        v25 = v23 + v24;
        if( v25 <= v23 || (v26 = a7, v25 > *(unsigned int *)(a7 + 16)) || v24 + 4 < v24 )
        {
          v13 = -1073741819;
          dword_140C4C988 = 11;
          goto LABEL_32;
        }
      }
      else
      {
        v26 = a7;
      }
      v27 = v17 - a4;
      v28 = v18 * v22;
      if( v28 + v27 <= v27 || v28 + v27 > *(unsigned int *)(v26 + 16) || v28 + 4 < v28 )
      {
        v13 = -1073741819;
        dword_140C4C988 = 5;
      }
      else
      {
        Pool = (char *)MiAllocatePool(256i64, v28, 0x5443694Dui64);
        v35 = Pool;
        if( !Pool )
        {
          v13 = -1073741670;
          dword_140C4C988 = 6;
LABEL_31:
          v14 = a11;
          goto LABEL_32;
        }
        memmove(Pool, (const VOID *)(v27 + a3), v28);
        if( a2 )
          MiLogRelocationRva((unsigned int)v27, v28, (_FILE_OBJECT *)a2, (_CONTROL_AREA *)a1);
        v31 = 0;
        if( v28 )
        {
          while( 1 )
          {
            v32 = *(unsigned int *)&v35[v31];
            if( v32 >= a5 )
              break;
            if( v31 && (unsigned int)v32 < v12 )
            {
              dword_140C4C988 = 9;
              goto LABEL_45;
            }
            v12 = *(_DWORD *)&v35[v31];
            v31 += v22;
            if( v31 >= v28 )
              goto LABEL_46;
          }
          dword_140C4C988 = 8;
LABEL_45:
          v13 = -1073741701;
        }
LABEL_46:
        if( v13 < 0 )
          goto LABEL_31;
        if( v34 )
        {
          if( v34 < a4 || v34 >= a4 + a5 )
          {
            v13 = -1073741701;
            dword_140C4C988 = 10;
            goto LABEL_31;
          }
          v14 = a11;
          *(_DWORD *)(a11 + 24) = v34 - a4;
        }
        else
        {
          v14 = a11;
        }
        v33 = *(_DWORD *)a10 | 1;
        *(_DWORD *)a10 = v33;
        if( (*(_WORD *)(a7 + 60) & 0x4000) != 0 )
        {
          v33 |= 2u;
          *(_DWORD *)a10 = v33;
        }
        if( (v19 & 0x8000) != 0 )
        {
          v33 |= 0x10u;
          *(_DWORD *)a10 = v33;
        }
        if( (v19 & 0x4000) != 0 )
        {
          v33 |= 8u;
          *(_DWORD *)a10 = v33;
        }
        if( (v19 & 0x100000) != 0 )
        {
          v33 |= 0x20u;
          *(_DWORD *)a10 = v33;
        }
        if( (v19 & 0x400000) != 0 )
          *(_DWORD *)a10 = v33 | 0x40;
        *(_DWORD *)v14 = v19;
        *(_QWORD *)(v14 + 8) = v35;
        *(_DWORD *)(v14 + 16) = v40;
        *(_DWORD *)(v14 + 20) = v22;
      }
    }
    else
    {
      v13 = -1073741819;
      dword_140C4C988 = 4;
    }
  }
LABEL_32:
  if( v13 < 0 )
    MiFreeImageCfgContext(v14);
  return v13;
}

Referenced by:

MiParseImageLoadConfig