MiInsertVad
VOID __fastcall MiInsertVad(INT64 a1, INT64 a2, CHAR a3){
RTL_BALANCED_NODE *v3;
unsigned __int64 v7;
unsigned __int64 v8;
LONG *v9;
UINT8 CurrentIrql;
unsigned __int64 v11;
unsigned __int64 v12;
__int64 v13;
unsigned __int64 v14;
__int64 v15;
unsigned int v16;
int v17;
v3 = 0i64;
v7 = *(unsigned int *)(a1 + 28) | ((unsigned __int64)*(unsigned __int8 *)(a1 + 33) << 32);
v8 = *(unsigned int *)(a1 + 24) | ((unsigned __int64)*(unsigned __int8 *)(a1 + 32) << 32);
if( (a3 & 1) != 0 )
{
if( (*(_BYTE *)(a2 + 1848) & 7) == 2 )
v9 = &dword_140C4F4C0;
else
v9 = (LONG *)(a2 + 1856);
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
ExpAcquireSpinLockExclusive((INT64 *)v9, CurrentIrql);
v9[1] = 0;
v3 = 0i64;
}
else
{
CurrentIrql = 17;
}
v11 = *(_QWORD *)(a2 + 1496);
++*(_QWORD *)(a2 + 2024);
*(_QWORD *)(a2 + 2016) = a1;
if( v7 <= v11 >> 12 && (a3 & 2) == 0 )
{
*(_QWORD *)(a2 + 1176) += ((v7 - v8) << 12) + 4096;
v12 = *(_QWORD *)(a2 + 1176);
if( *(_QWORD *)(a2 + 1168) < v12 )
*(_QWORD *)(a2 + 1168) = v12;
}
v13 = *(_QWORD *)(a2 + 2008);
v14 = *(unsigned int *)(a1 + 24) | ((unsigned __int64)*(unsigned __int8 *)(a1 + 32) << 32);
LOBYTE(v15) = 0;
if( v13 )
{
while( 1 )
{
if( v14 <= (*(unsigned int *)(v13 + 28) | ((unsigned __int64)*(unsigned __int8 *)(v13 + 33) << 32))
&& v14 < (*(unsigned int *)(v13 + 24) | ((unsigned __int64)*(unsigned __int8 *)(v13 + 32) << 32)) )
{
v15 = *(_QWORD *)v13;
if( !*(_QWORD *)v13 )
break;
}
else
{
v15 = *(_QWORD *)(v13 + 8);
if( !v15 )
{
LOBYTE(v15) = 1;
break;
}
}
v13 = v15;
}
}
RtlAvlInsertNodeEx((unsigned __int64 *)(a2 + 2008), v13, v15, (_QWORD *)a1);
v16 = *(_DWORD *)(a1 + 48);
if( (v16 & 0x100000) == 0 || (v16 & 0x400000) == 0 && (v16 & 0xC0000) < 0x80000 )
{
if( !MiVadMapsLargeImage(a1) )
goto LABEL_18;
v16 = *(_DWORD *)(a1 + 48);
}
if( (unsigned __int64)MiVadPageSizes[((unsigned __int64)v16 >> 18) & 3] >= 0x200 )
++*(_DWORD *)(a2 + 2140);
LABEL_18:
v17 = *(_DWORD *)(a1 + 48);
if( (v17 & 0x70) == 16 )
{
++*(_QWORD *)(*(_QWORD *)(a2 + 1680) + 304i64);
v17 = *(_DWORD *)(a1 + 48);
}
if( (v17 & 0x70) == 48 && (v17 & 0x3100000) != 34603008 )
v3 = (RTL_BALANCED_NODE *)(MiLocateLockedVadEvent(a1, 256i64) + 1);
if( CurrentIrql != 17 )
MiUnlockWorkingSetExclusive(a2 + 1664, CurrentIrql);
if( v3 )
MiAweViewInserter(a2, v3);
}Referenced by:
MiDeletePartialVad
MiInsertPrivateVad
MiInsertViewOfPhysicalSection
MiMapLockedPagesInUserSpaceHelper
MiReInsertPlaceholderVad