MiCreateForkWsle
VOID __fastcall MiCreateForkWsle(INT64 a1, CHAR a2, UINT64 a3, UINT64 a4, INT64 a5){
int v5;
UINT64 v7;
INT64 v10;
unsigned __int64 v11;
__int64 v12;
_QWORD *v13;
INT64 v14;
__int64 v15;
UINT64 v16;
if( a3 <= a4 )
{
v5 = a5;
v7 = a3;
do
{
v10 = MI_READ_PTE_LOCK_FREE(v7);
v16 = v10;
v11 = v10;
if( (v10 & 1) != 0 && (v10 & 0x80u) == 0i64 )
{
if( v5 > 1 )
{
v12 = (__int64)((v7 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16;
LODWORD(v14) = v5 - 1;
MiCreateForkWsle(a1, a2, v12, v12 + 4088, v14);
}
MiPteInShadowRange((UINT64)&v16);
v13 = (_QWORD *)((char *)MmGetPfnDb() + 48 * ((v11 >> 12) & 0xFFFFFFFFFi64));
if( (*(_BYTE *)v13 & 1) == 0 )
{
LODWORD(v15) = 0;
MiAllocateWsle(a1, v7, v13, 0, ZeroPte, v15, 0i64);
}
}
v7 += 8i64;
}
while( v7 <= a4 );
}
}Referenced by:
MiCreateForkWsle
MiCreateForkWsles