FsRtlpAllocateOplock
_NONOPAQUE_OPLOCK *__stdcall FsRtlpAllocateOplock(){
VOID **v0;
_NONOPAQUE_OPLOCK *PoolWithTag;
PoolWithTag = (_NONOPAQUE_OPLOCK *)ExAllocatePoolWithTag(0x11ui64, 0xA0ui64, 1869763398i64);
memset(PoolWithTag, 0i64, sizeof(_NONOPAQUE_OPLOCK));
v0 = ExAllocatePoolWithTag(0x210ui64, 0x38ui64, 1869763398i64);
PoolWithTag->FastMutex = (_FAST_MUTEX *)v0;
*(_DWORD *)v0 = 1;
v0[1] = 0i64;
*((_DWORD *)v0 + 4) = 0;
KeInitializeEvent((INT64)(v0 + 3), 1, 0);
PoolWithTag->IrpOplocksR.Blink = &PoolWithTag->IrpOplocksR;
PoolWithTag->IrpOplocksR.Flink = &PoolWithTag->IrpOplocksR;
PoolWithTag->IrpOplocksRH.Blink = &PoolWithTag->IrpOplocksRH;
PoolWithTag->IrpOplocksRH.Flink = &PoolWithTag->IrpOplocksRH;
PoolWithTag->RHBreakQueue.Blink = &PoolWithTag->RHBreakQueue;
PoolWithTag->RHBreakQueue.Flink = &PoolWithTag->RHBreakQueue;
PoolWithTag->WaitingIrps.Blink = &PoolWithTag->WaitingIrps;
PoolWithTag->WaitingIrps.Flink = &PoolWithTag->WaitingIrps;
PoolWithTag->DelayAckFileObjectQueue.Blink = &PoolWithTag->DelayAckFileObjectQueue;
PoolWithTag->DelayAckFileObjectQueue.Flink = &PoolWithTag->DelayAckFileObjectQueue;
PoolWithTag->AtomicQueue.Blink = &PoolWithTag->AtomicQueue;
PoolWithTag->AtomicQueue.Flink = &PoolWithTag->AtomicQueue;
PoolWithTag->OplockState = 1;
return PoolWithTag;
}Referenced by:
FsRtlpOplockFsctrlInternal
FsRtlpOplockStoreKeyForDeleteOperation
FsRtlpRequestExclusiveOplock
FsRtlpRequestShareableOplock