PfLockSharedTryAcquire

UINT64 __stdcall PfLockSharedTryAcquire(_EX_PUSH_LOCK *Lock){
  _ETHREAD *CurrentThread; 
  _ETHREAD *v3; 
  __int64 AbOrphanedEntrySummary; 
  char v5; 
  __int64 v6; 
  NTSTATUS SessionId; 
  bool v8; 
  UINT64 a3; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --CurrentThread->Tcb.KernelApcDisable;
  LODWORD(a3) = 0;
  v3 = (_ETHREAD *)KeGetCurrentThread();
  --v3->Tcb.SpecialApcDisable;
  if( ++v3->Tcb.AbAllocationRegionCount != 1 )
  {
    v6 = 0i64;
    goto LABEL_9;
  }
  LOBYTE(AbOrphanedEntrySummary) = v3->Tcb.AbEntrySummary;
  if( !(_BYTE)AbOrphanedEntrySummary )
  {
    if( !v3->Tcb.AbOrphanedEntrySummary )
    {
      v6 = 0i64;
      goto LABEL_9;
    }
    AbOrphanedEntrySummary = v3->Tcb.AbOrphanedEntrySummary;
    v3->Tcb.AbOrphanedEntrySummary = 0;
    LOBYTE(AbOrphanedEntrySummary) = v3->Tcb.AbEntrySummary | AbOrphanedEntrySummary;
  }
  v5 = AbOrphanedEntrySummary;
  _BitScanForward((unsigned int *)&AbOrphanedEntrySummary, (unsigned __int8)AbOrphanedEntrySummary);
  v3->Tcb.AbEntrySummary = v5 & ~(1 << AbOrphanedEntrySummary);
  v6 = (__int64)&v3->Tcb.LockEntries[AbOrphanedEntrySummary];
  if( !v6 )
  {
LABEL_9:
    _interlockedbittestandset((volatile signed __int32 *)&v3->Tcb.116 + 1, 0x10u);
    goto LABEL_10;
  }
  if( (unsigned __int64)Lock >= 0xFFFF800000000000ui64
    && *((_BYTE *)&stru_140C4DB30 + (((unsigned __int64)Lock >> 39) & 0x1FF) + 6872) == 1 )
  {
    SessionId = MmGetSessionIdEx(v3->Tcb.ApcState.Process);
  }
  else
  {
    SessionId = -1;
  }
  *(_DWORD *)(v6 + 40) = SessionId;
  *(_QWORD *)(v6 + 32) = (unsigned __int64)Lock & 0x7FFFFFFFFFFFFFFCi64;
LABEL_10:
  --v3->Tcb.AbAllocationRegionCount;
  KiAbThreadRemoveBoosts(&v3->Tcb, Lock, &a3);
  v8 = v3->Tcb.SpecialApcDisable++ == -1;
  if( v8 && ($F25F8C4BA33AF922A5F1AF68CD89DDDF *)v3->Tcb.ApcState.ApcListHead[0].Flink != &v3->Tcb.152 )
    KiCheckForKernelApcDelivery();
  if( !_InterlockedCompareExchange64(&Lock->_bf_0, 17i64, 0i64) || ExfTryAcquirePushLockShared(Lock) )
  {
    if( v6 )
      *(_BYTE *)(v6 + 26) |= 1u;
    return 1i64;
  }
  else
  {
    if( v6 )
      KeAbPostReleaseEx(Lock, (VOID *)v6);
    KeLeaveCriticalRegion();
    return 0i64;
  }
}

Referenced by:

PfCheckDeprioritizeFile