ExpConvertFastResourceExclusiveToShared

NTSTATUS __stdcall ExpConvertFastResourceExclusiveToShared(INT64 a1, INT64 a2, UINT8 *a3){
  unsigned __int8 CurrentIrql; 
  void *v6; 
  NTSTATUS result; 
  _KLOCK_QUEUE_HANDLE LockQueue[2]; 
  _KWAIT_CHAIN WaitChain; 

  *(_QWORD *)&LockQueue[0].OldIrql = 0i64;
  CurrentIrql = KeGetCurrentIrql();
  __writecr8(2ui64);
  LockQueue[0].LockQueue.Next = 0i64;
  LockQueue[0].LockQueue.Lock = (unsigned __int64 *volatile)(a1 + 96);
  KxAcquireQueuedSpinLock(&LockQueue[0].LockQueue, (UINT64 *)(a1 + 96));
  *(_WORD *)(a1 + 26) &= ~0x80u;
  v6 = *(void **)(a1 + 32);
  *(_QWORD *)(a1 + 32) = 0i64;
  WaitChain.Head = v6;
  LODWORD(v6) = *(_DWORD *)(a1 + 72);
  *(_DWORD *)(a1 + 72) = 0;
  *(_DWORD *)(a1 + 64) += (_DWORD)v6;
  KeReleaseInStackQueuedSpinLockFromDpcLevel(LockQueue);
  KeWakeWaitChain(&WaitChain, 0i64, 0i64);
  *(_BYTE *)(a2 + 17) &= ~4u;
  result = CurrentIrql;
  __writecr8(CurrentIrql);
  return result;
}

Referenced by:

ExConvertFastResourceExclusiveToShared
ExpFastResourceLegacyConvertExclusiveToShared