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