MiLockVadCore
UINT8 __fastcall MiLockVadCore(INT64 a1){
UINT8 CurrentIrql;
signed __int32 v3;
signed __int32 v4;
UINT64 SpinCount;
LODWORD(SpinCount) = 0;
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
v3 = *(_DWORD *)(a1 + 48);
do
{
while( (v3 & 1) != 0 )
{
if( (v3 & 2) != 0 )
{
LODWORD(SpinCount) = 0;
do
{
KeYieldProcessorEx(&SpinCount);
v3 = *(_DWORD *)(a1 + 48);
}
while( (v3 & 1) != 0 );
}
else
{
v3 = _InterlockedCompareExchange((volatile signed __int32 *)(a1 + 48), v3 | 2, v3);
}
}
v4 = v3;
v3 = _InterlockedCompareExchange((volatile signed __int32 *)(a1 + 48), v3 & 0xFFFFFFFC | 1, v3);
}
while( v4 != v3 );
return CurrentIrql;
}Referenced by:
MiCaptureWriteWatchDirtyBit
NtGetWriteWatch