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