MiCheckPurgeAndUpMapCount
VOID __stdcall MiCheckPurgeAndUpMapCount(_CONTROL_AREA *ControlArea){
INT64 *p_ControlAreaLock;
unsigned __int8 i;
CHAR v4;
__int128 v5;
__int128 v6;
__int64 v7;
p_ControlAreaLock = (INT64 *)&ControlArea->ControlAreaLock;
v7 = 0i64;
v5 = 0i64;
v6 = 0i64;
for( i = ExAcquireSpinLockExclusive((INT64 *)&ControlArea->ControlAreaLock);
(ControlArea->u.LongFlags & 4) != 0;
i = ExAcquireSpinLockExclusive(p_ControlAreaLock) )
{
DWORD1(v6) = 0;
v7 = (__int64)&v6 + 8;
DWORD2(v5) = 2;
*((_QWORD *)&v6 + 1) = (char *)&v6 + 8;
*(_QWORD *)&v5 = ControlArea->WaitList;
ControlArea->WaitList = (_MI_CONTROL_AREA_WAIT_BLOCK *)&v5;
LOWORD(v6) = 263;
BYTE2(v6) = 6;
ExReleaseSpinLockExclusiveFromDpcLevel(p_ControlAreaLock);
__writecr8(i);
KeWaitForGate((_KGATE *)&v6, WrVirtualMemory, v4);
}
++ControlArea->NumberOfMappedViews;
++ControlArea->NumberOfUserReferences;
ExReleaseSpinLockExclusiveFromDpcLevel(p_ControlAreaLock);
__writecr8(i);
}Referenced by:
MiApplyHotPatchToLoadedDriver
MiMapViewInSystemSpace
MiMapViewOfDataSection
MiMapViewOfImageSection
MmLoadSystemImageEx