FsRtlpOplockBreakNotify

NTSTATUS __stdcall FsRtlpOplockBreakNotify(_NONOPAQUE_OPLOCK *Oplock, _IO_STACK_LOCATION *IrpSp, _IRP *Irp){
  char v6; 
  unsigned int OplockState; 
  NTSTATUS v8; 

  if( !Oplock )
  {
    Irp->IoStatus.Status = 0;
    IofCompleteRequest(Irp, 1);
    return 0;
  }
  ExAcquireFastMutexUnsafe(Oplock->FastMutex);
  v6 = 1;
  OplockState = Oplock->OplockState;
  if( (OplockState & 0x1F00F00) != 0
    || Oplock->RHBreakQueue.Flink != &Oplock->RHBreakQueue
    || (OplockState & 0x20000) != 0 )
  {
    if( (OplockState & 0x80u) == 0 )
    {
      v6 = 0;
      Irp->IoStatus.Status = 0;
      FsRtlpModifyThreadPriorities(Oplock, 0i64, 1u);
      FsRtlpOplockSendModernAppTermination(Oplock, 0i64);
      v8 = FsRtlpWaitOnIrp(
             (__int64)Oplock,
             (__int64)Irp,
             0i64,
             (void(__fastcall *)(void *, _IRP *))FsRtlpNotifyOplockBreakComplete,
             0i64,
             0i64,
             0,
             0i64,
             0i64,
             0i64,
             0i64);
      goto LABEL_10;
    }
    Oplock->OplockState = Oplock->OplockState & 0x20 | 1;
    Oplock->FileObject = 0i64;
  }
  Irp->IoStatus.Status = 0;
  IofCompleteRequest(Irp, 1);
  v8 = 0;
LABEL_10:
  if( v6 )
    ExReleaseFastMutexUnsafe(Oplock->FastMutex);
  return v8;
}

Referenced by:

FsRtlpOplockFsctrlInternal