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