MiDeleteEmptyPageTableTail
INT64 __fastcall MiDeleteEmptyPageTableTail(INT64 *a1){
__int64 v2;
unsigned __int64 *v3;
unsigned __int64 v4;
unsigned __int64 v5;
unsigned int i;
UINT64 v7;
UINT64 SetBits;
unsigned __int64 v9;
UINT64 v10;
UINT64 NextForwardRunClear;
UINT64 v12;
UINT64 v13;
unsigned __int64 v14;
INT64 v15;
INT64 v17;
INT64 result;
UINT64 v19;
UINT64 v20;
v2 = a1[2];
v19 = 0i64;
MiFlushTbList(v2);
v3 = (unsigned __int64 *)a1[21];
v17 = 512i64;
v4 = *v3;
result = (INT64)(v3 + 3);
if( v4 )
{
v5 = v4 & 0xFFFFFFFFFFFFF000ui64;
for( i = 0; i < 2; ++i )
{
v7 = 0i64;
do
{
SetBits = RtlFindSetBitsEx((UINT64 *)&v17, 1ui64, v7);
v9 = v17;
v10 = SetBits;
if( SetBits < v7 || SetBits == -1i64 )
break;
NextForwardRunClear = RtlFindNextForwardRunClearEx((INT64)&v17, SetBits, &v19);
v12 = v19;
v20 = NextForwardRunClear;
if( !NextForwardRunClear )
v12 = v9;
v13 = v12 - v10;
v14 = v5 + 8 * v10;
*v3 = v14;
v3[1] = v14 + 8 * v13 - 8;
if( i )
MiDeleteEmptyPageTableCommit(a1);
else
MiDeletePteRun(a1[3], (__int64)v3);
v7 = v20 + v10 + v13;
}
while( v7 < v9 );
if( !i )
{
if( !v3[12] )
break;
MiReleaseWalkLocks((INT64)a1);
}
}
v15 = result;
*v3 = 0i64;
v3[1] = 0i64;
memset(v15, 0i64);
}
return 0i64;
}Referenced by:
No references.