FsRtlOplockBreakH

NTSTATUS __stdcall FsRtlOplockBreakH(
        POPLOCK Oplock,
        PIRP Irp,
        ULONG Flags,
        PVOID Context,
        POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
        POPLOCK_FS_PREPOST_IRP PostIrpRoutine){
  PFAST_MUTEX *v8; 
  __int64 v9; 
  NTSTATUS v10; 
  void(__fastcall *v12)(__int64, __int64); 
  POPLOCK_WAIT_COMPLETE_ROUTINE v13; 
  __int64 v14; 
  char v15; 
  char v16; 
  PVOID v17; 
  v17 = Context;
  v8 = (PFAST_MUTEX *)*Oplock;
  v9 = *((_QWORD *)Irp + 23);
  v15 = 0;
  v10 = 0;
  v16 = 0;
  if( !v8 )
    return v10;
  v10 = FsRtlpAttachOplockKey(Irp);
  if( !v10 )
  {
    if( *(_BYTE *)v9 )
    {
LABEL_8:
      v12 = (void(__fastcall *)(__int64, __int64))PostIrpRoutine;
      v13 = CompletionRoutine;
      do
      {
        v16 = 0;
        if( !v15 )
        {
          ExAcquireFastMutexUnsafe(v8[19]);
          v15 = 1;
        }
        LODWORD(v14) = 0;
        v10 = FsRtlpOplockBreakByCacheFlags(
                (__int64)v8,
                v9,
                (__int64)Irp,
                Flags,
                v14,
                0x2000,
                (__int64)v17,
                (__int64)v13,
                v12,
                0i64,
                0i64,
                0i64,
                &v15,
                &v16);
      }
      while( v16 );
      goto LABEL_14;
    }
    if( (*(_DWORD *)(*(_QWORD *)(v9 + 8) + 16i64) & 0xFFEFFE7F) != 0 )
    {
      if( (*(_DWORD *)(v9 + 16) & 0x10000) != 0 )
        Flags |= 0x10000000u;
      goto LABEL_8;
    }
    v10 = 0;
  }
LABEL_14:
  if( v15 )
    ExReleaseFastMutexUnsafe(v8[19]);
  return v10;
}

Referenced by:

No references.