MiCommitVadCfgBits
NTSTATUS __stdcall MiCommitVadCfgBits(_MMVAD *Vad, _MI_VA_PAIR *VaRange, UINT8 *FillSet){
_SEGMENT *v3;
_EPROCESS *Process;
__int64 v5;
__int64 v6;
VOID *v7;
unsigned __int64 BitMapInfo;
_SEGMENT ***v9;
UINT8 *v10;
UINT8 *v11;
_MMVAD *v12;
_MI_CFG_MODE v13;
VOID *v14;
NTSTATUS result;
_EWOW64PROCESS *WoW64Process;
unsigned __int16 Machine;
_MMWSL_INSTANCE *VmWorkingSetList;
_MI_CFG_BITMAP_INFO *p_LockedEntries;
v3 = 0i64;
Process = KeGetCurrentThread()->ApcState.Process;
if( !MiIsProcessCfgEnabled() )
return 0;
v7 = (VOID *)((*(unsigned int *)(v6 + 24) | ((unsigned __int64)*(unsigned __int8 *)(v6 + 32) << 32)) << 12);
BitMapInfo = ((*(unsigned int *)(v6 + 28) | ((unsigned __int64)*(unsigned __int8 *)(v6 + 33) << 32)) << 12) + 4096;
if( v5 )
{
v7 = *(VOID **)v5;
BitMapInfo = (*(_QWORD *)(v5 + 8) | 0xFFFi64) + 1;
}
else if( (*(_DWORD *)(v6 + 48) & 0x100000) == 0 )
{
v9 = *(_SEGMENT ****)(v6 + 72);
if( ((_DWORD)(*v9)[7] & 0x20) != 0 )
v3 = **v9;
}
LODWORD(v10) = MiSelectCfgBitMap(Process, v7, v3);
v11 = v10;
result = MiMarkProcessCfgBits(v13, v12, v14, v7, (_MI_CFG_BITMAP_INFO *)BitMapInfo, v10);
WoW64Process = Process->WoW64Process;
if( WoW64Process )
{
Machine = WoW64Process->Machine;
if( (Machine == 332 || Machine == 452) && result >= 0 )
{
VmWorkingSetList = Process->Vm.Instance.VmWorkingSetList;
p_LockedEntries = (_MI_CFG_BITMAP_INFO *)&VmWorkingSetList[11];
if( v11 != (UINT8 *)&VmWorkingSetList[11] )
return MiMarkPrivateOpenCfgBits(p_LockedEntries, v7, (VOID *)BitMapInfo, 0i64);
p_LockedEntries = (_MI_CFG_BITMAP_INFO *)&VmWorkingSetList[11].LockedEntries;
if( (unsigned __int64)v7 <= 0x100000000i64 )
{
if( BitMapInfo > 0x100000000i64 )
BitMapInfo = 0x100000000i64;
return MiMarkPrivateOpenCfgBits(p_LockedEntries, v7, (VOID *)BitMapInfo, 0i64);
}
}
}
return result;
}Referenced by:
MiCfgInitializeProcess
MiMapViewOfDataSection
MiMapViewOfImageSection
MiMapViewOfPhysicalSection
MiReserveUserMemory
MmProtectVirtualMemory