RtlpCSparseBitmapLock

UINT8 __fastcall RtlpCSparseBitmapLock(INT64 a1, INT64 a2, INT64 a3){
  volatile LONG *v5; 
  int v6; 
  UINT8 result; 
  _ETHREAD *CurrentThread; 
  v5 = (volatile LONG *)(a1 + 24);
  v6 = a2;
  if( *(_BYTE *)(a1 + 48) )
  {
    if( (_DWORD)a2 == 1 )
      result = ExAcquireSpinLockExclusive(v5);
    else
      result = ExAcquireSpinLockShared(v5);
  }
  else
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    --*((_WORD *)CurrentThread + 243);
    if( (_DWORD)a2 == 1 )
      ExAcquirePushLockExclusiveEx((UINT64)v5, 0i64);
    else
      ExAcquirePushLockSharedEx((UINT64)v5, 0i64);
    result = -1;
  }
  *(_BYTE *)(a3 + 4) = result;
  *(_QWORD *)(a3 + 8) = a1;
  *(_DWORD *)a3 = v6;
  return result;
}

Referenced by:

RtlpCSparseBitmapPageCommit
RtlpCSparseBitmapPageDecommit