INT64 __fastcall MiTryLockProtoPoolPageAtDpc(INT64 *a1, INT64 a2, _MMPFN **a3, _MMPFN **a4){
MMPTE *v7;
unsigned __int64 v8;
UINT64 v9;
__int64 v10;
int v11;
volatile signed __int32 *v12;
unsigned __int64 v13;
char v14;
unsigned __int64 v16;
*a3 = 0i64;
v7 = (_MMPTE *)((char *)MmGetPteBase() + (((unsigned __int64)a1 >> 9) & 0x7FFFFFFFF8i64));
v16 = *(_QWORD *)v7;
v8 = v16;
if( (v16 & 1) == 0 )
return 3221435187i64;
MiPteInShadowRange((UINT64)&v16);
v10 = (v8 >> 12) & 0xFFFFFFFFFi64;
if( ((*((_QWORD *)MmGetPfnDb() + 6 * v10 + 5) >> 50) & 1) == 0 )
return 3221225557i64;
v11 = 0;
v12 = (volatile signed __int32 *)((char *)MmGetPfnDb() + 48 * v10);
if( _interlockedbittestandset64(v12 + 6, 0x3Fui64) )
return 3221225557i64;
if( (*((_QWORD *)v12 + 3) & 0x4000000000000000i64) != 0
|| (v13 = *(_QWORD *)v7, v16 = v13, (v13 & 1) == 0)
|| (v13 & 0x200) != 0
|| v10 != ((v13 >> 12) & 0xFFFFFFFFFi64)
|| (*((_BYTE *)v12 + 34) & 0x20) != 0 )
{
v11 = -1073741739;
}
else
{
if( (v16 & 0x20) == 0 )
MiWriteValidPteVolatile(v7, 1ui64);
if( !a4 || (v11 = (unsigned int)MiTryLockLeafPage((_MMPTE *)a1, v9), v11 >= 0) )
{
MiAddLockedPageCharge((INT64)v12, 1);
v14 = *((_BYTE *)v12 + 34) | 0x20;
*a3 = (_MMPFN *)v12;
*((_BYTE *)v12 + 34) = v14;
}
}
_InterlockedAnd64((volatile signed __int64 *)v12 + 3, 0x7FFFFFFFFFFFFFFFui64);
return(unsigned int)v11;
}