MiCaptureSectionCreateExtendedParameters
NTSTATUS __stdcall MiCaptureSectionCreateExtendedParameters(PVOID Address, ULONGLONG ullMultiplicand){
_OWORD *v2;
_OWORD *v3;
_QWORD *v4;
int v5;
__int64 v7;
char v8;
int v9;
unsigned __int64 v10;
int v11;
int v12;
int v13;
int v14;
ULONGLONG pullResult;
_QWORD *v16;
unsigned __int64 v17;
v3 = v2;
v4 = Address;
pullResult = 0i64;
*v2 = 0i64;
if( !(_DWORD)ullMultiplicand )
return Address != 0i64 ? 0xC000000D : 0;
if( !Address )
return -1073741811;
v7 = (unsigned int)ullMultiplicand;
v5 = RtlULongLongMult((unsigned int)ullMultiplicand, 0x10ui64, &pullResult);
if( v5 >= 0 )
{
v9 = 0;
if( v8 )
ProbeForWrite(v4, pullResult, 8ui64);
v16 = v4;
v10 = (unsigned __int64)&v4[2 * v7];
v17 = v10;
while( (unsigned __int64)v4 < v10 )
{
v11 = (unsigned __int8)*(_DWORD *)v4;
if( (unsigned int)(v11 - 1) > 1 || *v4 >= 0x100ui64 )
return -1073741811;
v12 = 1 << v11;
if( ((1 << v11) & 6) == 0 )
return -1073741811;
if( (v12 & v9) != 0 )
return -1073741811;
v9 |= v12;
v13 = v11 - 1;
if( v13 )
{
if( v13 != 1 )
return -1073741811;
if( v4[1] > 0xFFFFFFFFui64 )
return -1073741811;
v14 = *((_DWORD *)v4 + 2);
*((_DWORD *)v3 + 2) = v14;
if( v14 == -1 )
return -1073741811;
*((_DWORD *)v3 + 2) = v14 + 1;
}
else
{
if( (v4[1] & 0xFFFFFFFFFFFFFFFEui64) != 0 )
return -1073741811;
*(_BYTE *)v3 = 1;
*((_DWORD *)v3 + 1) = *((_DWORD *)v4 + 2);
}
v4 += 2;
v16 = v4;
}
*((_DWORD *)v3 + 3) = v9;
return 0;
}
return v5;
}Referenced by:
MiCreateSectionCommon