MiComputeOptimalZeroPath
INT64 __stdcall MiComputeOptimalZeroPath(){
int *v0;
unsigned int v1;
__int64 i;
INT64 result;
INT64 v4;
char *v5;
int *v6;
__int64 v7;
UINT64 v8;
unsigned __int64 v9;
__int64 v10;
__int64 v11;
unsigned __int64 v12;
unsigned __int64 v13;
INT64 v14;
__int64 *v15;
UINT64 v16;
unsigned __int64 v17;
unsigned __int64 v18;
unsigned __int64 v19;
__int64 v20;
__int64 v21;
unsigned __int64 v22;
unsigned __int64 v23;
bool v24;
__int64 v25;
__int64 v26;
INT64 v27;
unsigned __int64 v28;
__int64 v29;
INT64 v30;
unsigned __int64 v31;
signed __int32 v32[8];
__int64 *v33;
__int64 v34;
UINT64 PageFrameIndex;
unsigned __int64 v36;
INT64 v37[2];
ULONG_PTR BugCheckParameter2[4];
int v39;
int v40;
__int64 v41;
__int64 v42;
int *v43;
v39 = 0;
v0 = &v39;
v1 = 0;
v40 = 2;
*(_OWORD *)v37 = 0i64;
for( i = 0i64; ; ++i )
{
result = MiGetPage((_MI_PARTITION *)&MiSystemPartition, v1, 0i64);
BugCheckParameter2[i] = result;
if( result == -1 )
break;
v4 = (unsigned int)*v0;
v5 = (char *)MmGetPfnDb() + 48 * result;
v37[i] = (INT64)v5;
if( (unsigned __int8)v5[34] >> 6 != (_DWORD)v4 )
MiChangePageAttribute((INT64)v5, v4, 0);
++v1;
++v0;
if( v1 >= 2 )
{
v34 = 2i64;
v6 = &v39;
v33 = qword_140C4DD28;
v7 = 0i64;
v43 = &v39;
v42 = 0i64;
do
{
v8 = *(ULONG_PTR *)((char *)BugCheckParameter2 + v7);
v9 = 0i64;
v10 = *v6;
PageFrameIndex = v8;
v11 = 3i64;
do
{
v12 = __rdtsc();
_InterlockedOr(v32, 0);
MiZeroPhysicalPage(v8, 3ui64, (_MI_PFN_CACHE_ATTRIBUTE)v10);
_InterlockedOr(v32, 0);
v13 = __rdtsc();
v9 += (((unsigned __int64)HIDWORD(v13) << 32) | (unsigned int)v13) - v12;
--v11;
}
while( v11 );
v14 = *(INT64 *)((char *)v37 + v7);
v15 = v33;
v16 = PageFrameIndex;
v41 = 3i64;
v36 = v9 / 3;
v17 = 0i64;
do
{
v18 = __rdtsc();
_InterlockedOr(v32, 0);
MiChangePageAttribute(v14, 1i64, 0);
MiZeroPhysicalPage(v16, 3ui64, (_MI_PFN_CACHE_ATTRIBUTE)v10);
MiChangePageAttribute(v14, (unsigned int)v10, 0);
_InterlockedOr(v32, 0);
v19 = __rdtsc();
v17 += (((unsigned __int64)HIDWORD(v19) << 32) | (unsigned int)v19) - v18;
--v41;
}
while( v41 );
v20 = v42;
v21 = (__int64)v43;
v22 = v17;
v23 = v36;
if( v22 / 3 < 9 * (v36 / 0xA) )
dword_140C4DCDC[4 * v10] = 1;
v7 = v20 + 8;
*(v15 - 1) = v23;
v6 = (int *)(v21 + 4);
*v15 = v22 / 3;
v42 = v7;
v24 = v34-- == 1;
v43 = v6;
v33 = v15 + 2;
}
while( !v24 );
v25 = 0i64;
v26 = 2i64;
do
{
v27 = v37[v25];
v28 = (unsigned __int8)MiLockPageInline(v27);
MiInsertPageInFreeOrZeroedList(BugCheckParameter2[v25], 2ui64);
_InterlockedAnd64((volatile signed __int64 *)(v27 + 24), 0x7FFFFFFFFFFFFFFFui64);
result = (unsigned int)KiIrqlFlags;
__writecr8(v28);
++v25;
--v26;
}
while( v26 );
return result;
}
}
if( v1 )
{
v29 = v1;
do
{
--v29;
--v1;
v30 = v37[v29];
v31 = (unsigned __int8)MiLockPageInline(v30);
MiInsertPageInFreeOrZeroedList(BugCheckParameter2[v29], 2ui64);
_InterlockedAnd64((volatile signed __int64 *)(v30 + 24), 0x7FFFFFFFFFFFFFFFui64);
result = (unsigned int)KiIrqlFlags;
__writecr8(v31);
}
while( v1 );
}
return result;
}Referenced by:
MiInitSystem