MiTryLockVad

__int64 __fastcall MiTryLockVad(__int64 a1, __int64 a2){
  unsigned __int64 v3; 
  _ETHREAD *CurrentThread; 
  unsigned int v5; 
  unsigned __int8 v6; 
  __int64 v7; 
  __int64 v8; 
  bool v9; 
  int SessionId; 
  char v12; 
  unsigned int v13; 
  if( *(char *)(a1 + 1304) < 0 )
    return 0i64;
  v13 = 0;
  v3 = a2 + 40;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 243);
  v5 = 1;
  if( ++*((_BYTE *)CurrentThread + 794) == 1 )
  {
    v6 = *((_BYTE *)CurrentThread + 792);
    if( !v6 )
    {
      if( !*((_BYTE *)CurrentThread + 870) )
      {
        v8 = 0i64;
        goto LABEL_5;
      }
      v12 = *((_BYTE *)CurrentThread + 870);
      *((_BYTE *)CurrentThread + 870) = 0;
      v6 = v12 | *((_BYTE *)CurrentThread + 792);
    }
    _BitScanForward((unsigned int *)&v7, v6);
    *((_BYTE *)CurrentThread + 792) = v6 & ~(1 << v7);
    v8 = *((_QWORD *)CurrentThread + 100) + 96 * v7;
    if( v8 )
    {
      if( v3 >= 0xFFFF800000000000ui64 && *((_BYTE *)&antNameB + ((v3 >> 39) & 0x1FF) - 256) == 1 )
        SessionId = MmGetSessionIdEx(*((_QWORD *)CurrentThread + 23));
      else
        SessionId = -1;
      *(_DWORD *)(v8 + 40) = SessionId;
      *(_QWORD *)(v8 + 32) = v3 & 0x7FFFFFFFFFFFFFFCi64;
      goto LABEL_6;
    }
  }
  else
  {
    v8 = 0i64;
  }
LABEL_5:
  _interlockedbittestandset((volatile signed __int32 *)CurrentThread + 30, 0x10u);
LABEL_6:
  --*((_BYTE *)CurrentThread + 794);
  KiAbThreadRemoveBoosts((ULONG_PTR)CurrentThread, v3, &v13);
  v9 = (*((_WORD *)CurrentThread + 243))++ == 0xFFFF;
  if( v9 && *((_ETHREAD **)CurrentThread + 19) != (_ETHREAD *)((char *)CurrentThread + 152) )
    KiCheckForKernelApcDelivery();
  if( _interlockedbittestandset64((volatile signed __int32 *)v3, 0i64) )
  {
    if( v8 )
      KeAbPostReleaseEx((PVOID)v3, (PVOID)v8);
    return 0;
  }
  else
  {
    if( v8 )
      *(_BYTE *)(v8 + 26) |= 1u;
    *(_BYTE *)(a1 + 1304) |= 0x80u;
  }
  return v5;
}

Referenced by:

MiDeprioritizeVad