MiTryLockVad

NTSTATUS __stdcall MiTryLockVad(_ETHREAD *Thread, _MMVAD_SHORT *Vad){
  _EX_PUSH_LOCK *p_PushLock; 
  _ETHREAD *CurrentThread; 
  NTSTATUS v5; 
  unsigned __int8 AbEntrySummary; 
  __int64 v7; 
  __int64 v8; 
  bool v9; 
  NTSTATUS SessionId; 
  __int64 AbOrphanedEntrySummary; 
  UINT64 a3; 

  if( Thread->$84F33738BEE95ACDF5C5BF1C8FDC7C8C::_bf_0 < 0 )
    return 0;
  LODWORD(a3) = 0;
  p_PushLock = &Vad->PushLock;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --CurrentThread->Tcb.SpecialApcDisable;
  v5 = 1;
  if( ++CurrentThread->Tcb.AbAllocationRegionCount == 1 )
  {
    AbEntrySummary = CurrentThread->Tcb.AbEntrySummary;
    if( !AbEntrySummary )
    {
      if( !CurrentThread->Tcb.AbOrphanedEntrySummary )
      {
        v8 = 0i64;
        goto LABEL_5;
      }
      AbOrphanedEntrySummary = CurrentThread->Tcb.AbOrphanedEntrySummary;
      CurrentThread->Tcb.AbOrphanedEntrySummary = 0;
      AbEntrySummary = AbOrphanedEntrySummary | CurrentThread->Tcb.AbEntrySummary;
    }
    _BitScanForward((unsigned int *)&v7, AbEntrySummary);
    CurrentThread->Tcb.AbEntrySummary = AbEntrySummary & ~(1 << v7);
    v8 = (__int64)&CurrentThread->Tcb.LockEntries[v7];
    if( v8 )
    {
      if( (unsigned __int64)p_PushLock >= 0xFFFF800000000000ui64
        && *((_BYTE *)&stru_140C4DB30 + (((unsigned __int64)p_PushLock >> 39) & 0x1FF) + 6872) == 1 )
      {
        SessionId = MmGetSessionIdEx(CurrentThread->Tcb.ApcState.Process);
      }
      else
      {
        SessionId = -1;
      }
      *(_DWORD *)(v8 + 40) = SessionId;
      *(_QWORD *)(v8 + 32) = (unsigned __int64)p_PushLock & 0x7FFFFFFFFFFFFFFCi64;
      goto LABEL_6;
    }
  }
  else
  {
    v8 = 0i64;
  }
LABEL_5:
  _interlockedbittestandset((volatile signed __int32 *)&CurrentThread->Tcb.116 + 1, 0x10u);
LABEL_6:
  --CurrentThread->Tcb.AbAllocationRegionCount;
  KiAbThreadRemoveBoosts(&CurrentThread->Tcb, p_PushLock, &a3);
  v9 = CurrentThread->Tcb.SpecialApcDisable++ == -1;
  if( v9
    && ($F25F8C4BA33AF922A5F1AF68CD89DDDF *)CurrentThread->Tcb.ApcState.ApcListHead[0].Flink != &CurrentThread->Tcb.152 )
  {
    KiCheckForKernelApcDelivery();
  }
  if( _interlockedbittestandset64((volatile signed __int32 *)p_PushLock, 0i64) )
  {
    if( v8 )
      KeAbPostReleaseEx(p_PushLock, (VOID *)v8);
    return 0;
  }
  else
  {
    if( v8 )
      *(_BYTE *)(v8 + 26) |= 1u;
    Thread->$84F33738BEE95ACDF5C5BF1C8FDC7C8C::_bf_0 |= 0x80u;
  }
  return v5;
}

Referenced by:

MiDeprioritizeVad