MiAssignNonPagedPoolPte

INT64 __fastcall MiAssignNonPagedPoolPte(INT64 a1, UINT64 a2){
  UINT64 *v4; 
  INT64 v5; 
  unsigned __int16 v6; 
  INT64 v7; 
  UINT64 ValidPte; 
  UINT64 ContainingPageTable; 
  INT64 v10; 
  UINT64 v11; 
  _MMPFN *PfnDb; 
  __int64 v13; 
  __int64 v14; 
  unsigned int v15; 
  char *v16; 
  INT64 v18; 
  UINT64 SpinCount; 
  v4 = (UINT64 *)((char *)MmGetPteBase() + ((a2 >> 9) & 0x7FFFFFFFF8i64));
  v5 = MiSwizzleInvalidPte(128i64);
  v6 = *(_WORD *)(a1 + 78);
  v7 = v5;
  ValidPte = MiMakeValidPte((UINT64)v4, 0i64, (v6 >> 3) & 0x1F | 0xA0000000);
  ContainingPageTable = MiGetContainingPageTable((UINT64)v4);
  v10 = *(_QWORD *)(a1 + 16);
  v11 = ContainingPageTable;
  PfnDb = MmGetPfnDb();
  if( (v6 & 0x100) != 0 )
  {
    v15 = 1;
    v14 = *(_QWORD *)(v10 + 8 * ((a2 - *(_QWORD *)a1) >> 12));
  }
  else
  {
    *(_QWORD *)(a1 + 16) = *(_QWORD *)v10;
    v13 = *(_QWORD *)(v10 + 40);
    v14 = (v10 - (__int64)PfnDb) / 48;
    if( (*(_BYTE *)(v10 + 35) & 0x10) != 0 )
    {
      v15 = 0;
    }
    else
    {
      *(_QWORD *)(v10 + 16) = v7;
      v13 &= ~0x8000000000000000ui64;
      v15 = 1;
    }
    LODWORD(v18) = 1;
    *(_QWORD *)(v10 + 40) = v13 ^ (ContainingPageTable ^ v13) & 0xFFFFFFFFFi64;
    MiSetPfnOwnedAndActive(v10, 0, (INT64)v4, 1i64, v18);
  }
  *v4 = ValidPte ^ (ValidPte ^ (v14 << 12)) & 0xFFFFFFFFF000i64;
  v16 = (char *)PfnDb + 48 * v11;
  LODWORD(SpinCount) = 0;
  while( _interlockedbittestandset64((volatile signed __int32 *)v16 + 6, 0x3Fui64) )
  {
    do
      KeYieldProcessorEx(&SpinCount);
    while( *((__int64 *)v16 + 3) < 0 );
  }
  *((_QWORD *)v16 + 3) ^= (*((_QWORD *)v16 + 3) ^ (*((_QWORD *)v16 + 3) + 1i64)) & 0x3FFFFFFFFFFFFFFFi64;
  _InterlockedAnd64((volatile signed __int64 *)v16 + 3, 0x7FFFFFFFFFFFFFFFui64);
  return v15;
}

Referenced by:

MiFillPoolCommitPageTable