FsRtlAcquireHeaderMutex

volatile INT32 *__fastcall FsRtlAcquireHeaderMutex(INT64 a1, volatile INT32 *a2){
  FAST_MUTEX *v2; 
  _BYTE *v3; 
  _BYTE *v4; 
  unsigned __int8 CurrentIrql; 
  volatile INT32 *result; 
  v2 = *(FAST_MUTEX **)(*(_QWORD *)(a1 + 24) + 48i64);
  LODWORD(v3) = KeAbPreAcquire(v2, 0i64, 0i64);
  v4 = v3;
  CurrentIrql = KeGetCurrentIrql();
  __writecr8(1ui64);
  if( !_interlockedbittestandreset(&v2->Count, 0) )
    ExpAcquireFastMutexContended(v2, v3);
  if( v4 )
    v4[26] |= 1u;
  v2->Owner = KeGetCurrentThread();
  v2->OldIrql = CurrentIrql;
  result = a2;
  if( a2 )
  {
    result = a2;
    _InterlockedIncrement(a2);
  }
  return result;
}

Referenced by:

No references.