MiInitializeChannelRangesTemporary
NTSTATUS __stdcall MiInitializeChannelRangesTemporary(){
__int64 v0;
_QWORD *v1;
unsigned int v2;
int v3;
_BYTE *v4;
unsigned int v5;
unsigned int v6;
_BYTE *v7;
unsigned int v8;
char *i;
unsigned int v10;
unsigned int v11;
unsigned int v12;
unsigned int v13;
int v14;
char *v15;
unsigned int v16;
unsigned int v17;
char *v18;
__int64 j;
unsigned int v20;
unsigned __int64 v21;
unsigned int v22;
unsigned int v23;
unsigned int v24;
int v25;
char *v26;
unsigned int v27;
unsigned int v28;
unsigned int v29;
unsigned int v30;
char *v31;
__int64 k;
unsigned int v33;
unsigned __int64 v34;
unsigned int v35;
unsigned int v36;
unsigned int v37;
int v38;
unsigned int v39;
unsigned __int16 *v40;
_QWORD *v42;
int v43[4];
unsigned int v44;
__int128 v45[2];
void *retaddr;
v0 = (__int64)&retaddr;
v43[0] = 0;
v42 = 0i64;
memset(v45, 0, sizeof(v45));
if( dword_140CFA188 )
{
if( *(&stru_140C4DB30 + 4333) != 1 )
{
if( dword_140CFA19C )
{
v44 = 256;
LODWORD(v0) = ((__int64(__fastcall *)(__int64, __int64, _QWORD **, int *))off_140C00A68[0])(
31i64,
8i64,
&v42,
v43);
v1 = v42;
if( v42 )
{
v2 = 0;
v3 = 0;
if( *v42 == -1i64 )
goto LABEL_17;
v4 = (char *)v42 + 14;
do
{
v5 = *((unsigned __int16 *)v4 - 1);
if( v2 <= v5 )
v2 = *((unsigned __int16 *)v4 - 1);
if( *v4 == 1 )
{
v3 = 1;
}
else
{
v6 = *((unsigned __int16 *)v4 - 2);
if( v6 < 0x40 && (unsigned __int16)v5 < 4u )
{
_bittestandset((signed __int32 *)v45, v5 + 4 * v6);
v1 = v42;
}
}
v7 = v4;
v4 += 16;
v0 = (v7 - (_BYTE *)v1 - 14) >> 4;
*(&stru_140C4DB30 + 41) = v0;
}
while( *(_QWORD *)(v4 - 14) != -1i64 );
if( !v3 )
LABEL_17:
v2 = 0;
v8 = v2 + 1;
MmNumberOfChannels = v8;
if( v8 != 1 )
{
if( v8 > 4 )
{
for( i = (char *)v1 + 12; *(_QWORD *)(i - 12) != -1i64; i += 16 )
{
if( *(_WORD *)i >= 4u )
{
v10 = *((unsigned __int16 *)i - 1);
if( v10 < 0x40 )
{
v11 = 4 * v10;
v12 = v44 - 1;
v13 = v11 < v44 ? v11 : 0;
v14 = ((unsigned __int64)v45 & 4) != 0 ? 0x20 : 0;
v15 = (char *)v45 + (-(__int64)(((unsigned __int64)v45 & 4) != 0) & 0xFFFFFFFFFFFFFFFCui64);
while( 1 )
{
v43[1] = 0;
v16 = v14 + v12;
v17 = v14 + v13;
if( v12 - v13 == -1 )
goto LABEL_27;
v18 = &v15[8 * ((unsigned __int64)v17 >> 6)];
for( j = ~*(_QWORD *)v18 | ((1i64 << (v17 & 0x3F)) - 1); j == -1; j = ~*(_QWORD *)v18 )
{
v18 += 8;
if( v18 > &v15[8 * ((unsigned __int64)v16 >> 6)] )
goto LABEL_27;
}
_BitScanForward64(&v21, ~j);
v20 = v21 + ((unsigned int)((v18 - v15) >> 3) << 6);
if( v20 > v16 )
{
LABEL_27:
v20 = -1;
}
else if( v20 != -1 )
{
break;
}
if( !v13 )
break;
v22 = v11 + 1;
if( v11 + 1 > v44 )
v22 = v44;
v12 = v22 - 1;
v13 = 0;
}
v23 = v20 - v14;
if( v20 == -1 )
v23 = -1;
if( v23 < v11 || v23 >= v11 + 4 )
{
i[2] = 0;
*(_WORD *)i = 3;
}
else
{
*(_WORD *)i = v23 & 3;
}
}
}
}
MmNumberOfChannels = 4;
}
v24 = 0;
v25 = ((unsigned __int64)v45 & 4) != 0 ? 0x20 : 0;
v26 = (char *)v45 - (-(__int64)(((unsigned __int64)v45 & 4) != 0) & 4);
while( 1 )
{
v27 = v24 < v44 ? v24 : 0;
v28 = v44 - 1;
while( 1 )
{
v43[2] = 0;
v29 = v25 + v28;
v30 = v25 + v27;
if( v28 - v27 == -1 )
goto LABEL_49;
v31 = &v26[8 * ((unsigned __int64)v30 >> 6)];
for( k = ~*(_QWORD *)v31 | ((1i64 << (v30 & 0x3F)) - 1); k == -1; k = ~*(_QWORD *)v31 )
{
v31 += 8;
if( v31 > &v26[8 * ((unsigned __int64)v29 >> 6)] )
goto LABEL_49;
}
_BitScanForward64(&v34, ~k);
v33 = v34 + ((unsigned int)((v31 - v26) >> 3) << 6);
if( v33 > v29 )
{
LABEL_49:
v33 = -1;
}
else if( v33 != -1 )
{
break;
}
if( !v27 )
break;
v35 = v24 + 1;
if( v24 + 1 > v44 )
v35 = v44;
v28 = v35 - 1;
v27 = 0;
}
v36 = v33 - v25;
if( v33 == -1 )
v36 = -1;
if( v36 == -1 || v36 < v24 )
break;
v24 = v36 + 1;
v37 = v36;
v38 = v36 & 3;
v39 = v37 >> 2;
if( *v42 != -1i64 )
{
v40 = (unsigned __int16 *)v42 + 6;
do
{
if( *(v40 - 1) == v39 && *v40 == v38 )
*((_BYTE *)v40 + 2) = 0;
v40 += 8;
}
while( *(_QWORD *)(v40 - 6) != -1i64 );
}
}
LODWORD(v0) = (_DWORD)v42;
*(&stru_140C4DB30 + 28) = v42;
}
}
}
}
}
return v0;
}Referenced by:
MiInitNucleus