FsRtlpOplockStoreKeyForDeleteOperation

VOID __stdcall FsRtlpOplockStoreKeyForDeleteOperation(VOID **Oplock, _IRP *Irp, UINT64 Flags){
  int v3; 
  _IO_STACK_LOCATION *CurrentStackLocation; 
  void *v6; 
  char v7; 
  unsigned int Options; 
  __int64 v9; 
  __int64 v10; 
  VOID **PoolWithTag; 

  v3 = Flags;
  CurrentStackLocation = Irp->Tail.CurrentStackLocation;
  v6 = *Oplock;
  v7 = 0;
  if( !CurrentStackLocation->MajorFunction && (CurrentStackLocation->Parameters.Options & 0x1000) != 0
    || CurrentStackLocation->MajorFunction == 6
    && ((Options = CurrentStackLocation->Parameters.Options, Options == 13) && Irp->AssociatedIrp.MasterIrp->Type
     || Options == 64 && (*(_DWORD *)Irp->AssociatedIrp.MasterIrp & 1) != 0) )
  {
    LODWORD(v9) = IoGetOplockKeyContextEx((INT64)CurrentStackLocation->FileObject);
    v10 = v9;
    if( v9 )
    {
      if( (*(_BYTE *)(v9 + 2) & 1) != 0 )
      {
        if( !v6 )
        {
          v6 = FsRtlpAllocateOplock();
          *Oplock = v6;
        }
        if( (v3 & 0x20000000) == 0 )
          ExAcquireFastMutexUnsafe(*((PFAST_MUTEX *)v6 + 19));
        v7 = 1;
        PoolWithTag = (VOID **)*((_QWORD *)v6 + 17);
        if( !PoolWithTag )
        {
          PoolWithTag = ExAllocatePoolWithTag(0x11ui64, 0x10ui64, 1869763398i64);
          *((_QWORD *)v6 + 17) = PoolWithTag;
        }
        *(_OWORD *)PoolWithTag = *(_OWORD *)(v10 + 4);
      }
    }
  }
  if( v7 )
  {
    if( (v3 & 0x20000000) == 0 )
      ExReleaseFastMutexUnsafe(*((PFAST_MUTEX *)v6 + 19));
  }
}

Referenced by:

FsRtlCheckOplock
FsRtlCheckOplockEx2