FsRtlOplockBreakToNoneEx

NTSTATUS __fastcall FsRtlOplockBreakToNoneEx(
        INT64 *a1,
        UINT64 a2,
        INT64 a3,
        INT64 a4,
        INT64 CompletionRoutine,
        INT64 PostIrpRoutine){
  _NONOPAQUE_OPLOCK *v8; 
  NTSTATUS v9; 
  unsigned int v10; 
  __int64 v11; 
  __int64 v12; 
  int v14; 
  __int64 v15[2]; 
  __int64 v16; 

  v8 = (_NONOPAQUE_OPLOCK *)*a1;
  v15[1] = *a1;
  LOBYTE(v16) = 0;
  LOBYTE(v15[0]) = 0;
  if( (a3 & 0x10) != 0 )
  {
    v9 = -1073741811;
  }
  else
  {
    v10 = a3 | 8;
    v11 = PostIrpRoutine;
    v12 = CompletionRoutine;
    do
    {
      LOBYTE(v15[0]) = 0;
      if( !(_BYTE)v16 )
      {
        ExAcquireFastMutexUnsafe(v8->FastMutex);
        LOBYTE(v16) = 1;
      }
      v9 = FsRtlpOplockBreakToNone(
             v8,
             *(_QWORD *)(a2 + 184),
             a2,
             v10,
             v14,
             a4,
             v12,
             v11,
             0i64,
             0i64,
             0i64,
             (__int64)&v16,
             (__int64)v15);
      if( !v9 )
        v9 = FsRtlpOplockBreakByCacheFlags(
               v8,
               *(_QWORD *)(a2 + 184),
               (_IRP *)a2,
               v10,
               0,
               28672,
               a4,
               v12,
               v11,
               0i64,
               0i64,
               0i64,
               (__int64)&v16,
               (__int64)v15);
    }
    while( LOBYTE(v15[0]) );
  }
  if( (_BYTE)v16 )
    ExReleaseFastMutexUnsafe(v8->FastMutex);
  return v9;
}

Referenced by:

FsRtlOplockBreakToNone