MiInitializeVadBitMap
NTSTATUS __stdcall MiInitializeVadBitMap(UINT64 ProcessIsClone){
_ETHREAD *CurrentThread;
NTSTATUS v2;
int v3;
__int64 v4;
_EPROCESS *Process;
_MMWSL_INSTANCE *VmWorkingSetList;
__int64 *i;
unsigned __int64 v8;
NTSTATUS v9;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v2 = 0;
v3 = ProcessIsClone;
v4 = 0i64;
Process = CurrentThread->Tcb.ApcState.Process;
VmWorkingSetList = Process->Vm.Instance.VmWorkingSetList;
if( *(_QWORD *)&VmWorkingSetList[6].LastAccessClearingRemainder )
{
for( i = (__int64 *)&VmWorkingSetList[1].LastAccessClearingRemainder; ; i += 9 )
{
v8 = (unsigned __int64)i[6] >> 15 << 12;
*i = i[6] & 0x7FFF;
*(i - 1) = *(&stru_140C4DB30 + 174) + 4 * (v8 >> 2);
if( v3 == 1 )
*(i - 2) = 0i64;
LOCK_ADDRESS_SPACE(CurrentThread, Process);
v9 = MiExpandVadBitMap((_MI_VAD_ALLOCATION_CELL *)i - 4, 1ui64);
i[2] = *i;
UNLOCK_ADDRESS_SPACE(CurrentThread, Process);
if( !v9 )
break;
if( (unsigned __int64)++v4 >= *(_QWORD *)&VmWorkingSetList[6].LastAccessClearingRemainder )
return v2;
}
return -1073741801;
}
return v2;
}Referenced by:
MmInitializeProcessAddressSpace