RtlpCSparseBitmapLock

UINT8 __fastcall RtlpCSparseBitmapLock(__int64 a1, int a2, __int64 a3){
  _EX_PUSH_LOCK *v5; 
  UINT8 result; 
  _ETHREAD *CurrentThread; 

  v5 = (_EX_PUSH_LOCK *)(a1 + 24);
  if( *(_BYTE *)(a1 + 48) )
  {
    if( a2 == 1 )
      result = ExAcquireSpinLockExclusive(&v5->_bf_0);
    else
      result = ExAcquireSpinLockShared(&v5->_bf_0);
  }
  else
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    --CurrentThread->Tcb.SpecialApcDisable;
    if( a2 == 1 )
      ExAcquirePushLockExclusiveEx(v5, 0i64);
    else
      ExAcquirePushLockSharedEx(v5, 0i64);
    result = -1;
  }
  *(_BYTE *)(a3 + 4) = result;
  *(_QWORD *)(a3 + 8) = a1;
  *(_DWORD *)a3 = a2;
  return result;
}

Referenced by:

RtlpCSparseBitmapPageCommit
RtlpCSparseBitmapPageDecommit