ExpConvertExclusiveToSharedLite

VOID __stdcall ExpConvertExclusiveToSharedLite(ERESOURCE *Resource){
  unsigned int NumberOfSharedWaiters; 
  void *SharedWaiters; 
  unsigned __int8 WaiterPriority; 
  void *v5; 
  struct _KLOCK_QUEUE_HANDLE LockHandle; 
  void *MultiSz; 
  memset(&LockHandle, 0, sizeof(LockHandle));
  KeAcquireInStackQueuedSpinLock(&Resource->SpinLock, &LockHandle);
  NumberOfSharedWaiters = Resource->NumberOfSharedWaiters;
  Resource->NumberOfSharedWaiters = 0;
  Resource->Flag &= ~0x80u;
  SharedWaiters = Resource->SharedWaiters;
  Resource->SharedWaiters = 0i64;
  Resource->ActiveEntries += NumberOfSharedWaiters;
  WaiterPriority = Resource->WaiterPriority;
  MultiSz = SharedWaiters;
  KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
  __writecr8(LockHandle.OldIrql);
  KeWakeWaitChain((const WCHAR *)&MultiSz, 0i64, 0);
  if( NumberOfSharedWaiters && WaiterPriority )
    ExpApplyPriorityBoost((__int64)Resource, 65280, (__int64)KeGetCurrentThread(), v5);
  __incgsdword(0x8674u);
}

Referenced by:

ExConvertExclusiveToSharedLite