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