MiUpdateImagePfnImportRelocations

NTSTATUS __stdcall MiUpdateImagePfnImportRelocations(INT64 a1, UINT64 a2, UINT64 a3, INT64 a4){
  UINT64 v4; 
  unsigned int v5; 
  _EX_PUSH_LOCK *v7; 
  __int64 bf_0; 
  _WORD *v9; 
  _MMPFN *v10; 
  _MMPTE *PteBase; 
  UINT64 v12; 
  UINT64 v13; 
  int v14; 
  __int64 v15; 
  __int64 v16; 
  int v17; 
  _ETHREAD *CurrentThread; 
  _EX_PUSH_LOCK *v19; 
  _KTBFLUSH_TYPE v20; 
  unsigned __int64 Long; 
  int v23; 

  v4 = a2;
  v5 = a3;
  v7 = *(_EX_PUSH_LOCK **)(*(_QWORD *)(a1 + 96) + 32i64);
  bf_0 = v7[12]._bf_0;
  if( !bf_0 )
    return 1;
  v9 = *(_WORD **)(bf_0 + 8i64 * (unsigned int)a3 + 56);
  if( !v9 || !*v9 && v9[3] != 3 )
    return 1;
  v10 = &MmGetPfnDb()[a4];
  PteBase = MmGetPteBase();
  if( a2 && (a2 < (unsigned __int64)PteBase || a2 > (unsigned __int64)MmGetPteLimit()) )
  {
    v13 = 0i64;
    v12 = 0i64;
  }
  else
  {
    v12 = a2;
    v13 = (UINT64)MiReservePtes((_MI_SYSTEM_PTE_TYPE *)((char *)&stru_140C4DB30 + 4432), 1ui64);
    if( !v13 )
    {
      if( !v4 )
        return -1073741670;
      v13 = v4;
    }
    v4 = (__int64)((v13 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16;
    MiMakeProtectionPfnCompatible((_BYTE *)4, v10);
    LODWORD(v15) = MiMakeValidPte((_XSTATE_CONFIGURATION *)v13, a4, v14 | 0xA0000000);
    v16 = v15;
    LOBYTE(v17) = MiPteInShadowRange(v13);
    if( v17 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v16 & 1) != 0 )
      v16 |= 0x8000000000000000ui64;
    *(_QWORD *)v13 = v16;
  }
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v19 = v7 + 3;
  if( (_ETHREAD *)v7[1]._bf_0 == CurrentThread )
  {
    CurrentThread = 0i64;
  }
  else
  {
    --CurrentThread->Tcb.SpecialApcDisable;
    ExAcquirePushLockSharedEx(v7 + 3, 0i64);
  }
  MiUpdateRetpolineImportFixups(v4, v7[12]._bf_0, v5);
  if( CurrentThread )
  {
    if( _InterlockedCompareExchange64(&v19->_bf_0, 0i64, 17i64) != 17 )
      ExfReleasePushLockShared(v19);
    KeAbPostRelease(v19);
    KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
  }
  if( v13 )
  {
    if( v13 == v12 )
    {
      Long = ZeroPte.u.Long;
      LOBYTE(v23) = MiPteInShadowRange(v13);
      if( v23 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (ZeroPte.u.Long & 1) != 0 )
        Long = ZeroPte.u.Long | 0x8000000000000000ui64;
      *(_QWORD *)v13 = Long;
      KeFlushSingleTb(v4, FlushKernel, 1i64);
    }
    else
    {
      MiReleasePtes((_MI_SYSTEM_PTE_TYPE *)((char *)&stru_140C4DB30 + 4432), (_MMPTE *)v13, 1ui64, v20);
    }
  }
  return 0;
}

Referenced by:

MiUpdateImportRelocationsOnDriverPrivatePages
MiWalkEntireImage