FsRtlpOplockBreakByCacheFlags

__int64 __fastcall FsRtlpOplockBreakByCacheFlags(
        __int64 a1,
        __int64 a2,
        __int64 a3,
        int a4,
        __int64 a5,
        int a6,
        __int64 a7,
        __int64 a8,
        void (__fastcall *a9)(__int64, __int64),
        __int64 a10,
        __int64 a11,
        void (__fastcall *a12)(__int128 *),
        _BYTE *a13,
        _BYTE *a14){
  unsigned int v14; 
  __int64 v15; 
  char v17; 
  int v18; 
  int v21; 
  int v22; 
  int v23; 
  unsigned int v24; 
  unsigned int v25; 
  unsigned int v26; 
  bool v27; 
  __int64 v28; 
  __int64 v29; 
  _IRP *v30; 
  __int64 v31; 
  char v32; 
  int v33; 
  __int64 *v34; 
  UINT8 v35; 
  __int64 *i; 
  LIST_ENTRY *v37; 
  _LIST_ENTRY *Flink; 
  LIST_ENTRY **p_Flink; 
  __int64 v40; 
  INT64 v41; 
  __int64 v42; 
  int v43; 
  INT16 v44; 
  int v45; 
  int v46; 
  int v47; 
  UINT16 ShareMode; 
  __int64 *v49; 
  UINT8 v50; 
  __int64 v51; 
  INT64 v52; 
  __int64 v53; 
  char v54; 
  char v55; 
  _LIST_ENTRY *v56; 
  __int64 *v57; 
  _IRP *v58; 
  __int64 v59; 
  _IRP *v60; 
  __int64 v61; 
  int v62; 
  _IRP *v63; 
  _IRP *v64; 
  _WAITING_IRP *v65; 
  __int64 v66; 
  int v67; 
  __int64 *v68; 
  INT64 v69; 
  INT64 v70; 
  UINT64 v71; 
  char v72; 
  char v73; 
  bool v74; 
  char v75; 
  __int128 v76; 
  __int64 v77; 
  unsigned int v81; 
  int v82; 
  v14 = a4;
  v15 = a2;
  v81 = 0;
  v76 = 0i64;
  v77 = 0i64;
  v17 = 0;
  v72 = 0;
  v75 = 0;
  v74 = 0;
  v73 = 1;
  v18 = v14 & 8;
  if( a6 == 28672 || a6 == 20480 || a6 == 0x4000 || a6 == 0x2000 )
  {
    if( !a1 )
      return v81;
    v21 = *(_DWORD *)(a1 + 144);
    if( v21 != 1 && (v21 & a6) != 0 )
    {
      if( (v14 & 8) != 0 )
      {
LABEL_14:
        v22 = *(_DWORD *)(a1 + 144);
        v23 = v14 & 0x10010000;
        v82 = v14 & 0x10010000;
        if( (v22 & 0x40) != 0 && v23 )
          return(unsigned int)-1073739511;
        v24 = v22 & 0x1F0FFDF;
        if( (v22 & 0x1F0FFDFu) > 0x105040 )
        {
          if( v24 <= 0x803000 )
          {
            if( v24 == 8400896 )
            {
              if( (a6 & 0x3000) != 0 )
              {
                if( v23 )
                  return(unsigned int)-1073739511;
                if( (a6 & 0x2000) != 0 )
                {
                  v68 = *(__int64 **)(a1 + 72);
                  while( v68 != (__int64 *)(a1 + 72) )
                  {
                    if( v18 || !FsRtlpOplockKeysEqual(*(_FILE_OBJECT **)(v15 + 48), (_FILE_OBJECT *)v68[3], 0i64) )
                      goto LABEL_151;
                    v68 = (__int64 *)*v68;
                    v15 = a2;
                  }
                }
              }
LABEL_152:
              if( v17 )
              {
                if( (a4 & 1) != 0 )
                {
                  v67 = *(_DWORD *)(a1 + 144);
                  if( (v67 & 0x10000) != 0 )
                    *(_DWORD *)(a1 + 144) = v67 | 0x20000;
                  return 264;
                }
                else
                {
                  if( v73 )
                  {
                    FsRtlpModifyThreadPriorities((_NONOPAQUE_OPLOCK *)a1, 0i64, 1u);
                    FsRtlpOplockSendModernAppTermination((_NONOPAQUE_OPLOCK *)a1, 0i64);
                  }
                  *a13 = 0;
                  return(unsigned int)FsRtlpWaitOnIrp(a1, a3, a7, a8, a9, (char *)&v76, v74, a10, a11, a12, a14);
                }
              }
              return v81;
            }
            if( v24 != 1077312 )
            {
              if( v24 == 3174464 )
              {
                if( a6 == 0x4000 )
                {
                  *(_DWORD *)(a1 + 144) = *(_DWORD *)(a1 + 144) & 0x20 | 0x107040;
                }
                else if( (a6 & 0x5000) == 20480 )
                {
                  *(_DWORD *)(a1 + 144) = *(_DWORD *)(a1 + 144) & 0x20 | 0x807040;
                }
                goto LABEL_151;
              }
              if( v24 != 5271616 )
                goto LABEL_180;
              if( a6 == 0x2000 )
              {
                *(_DWORD *)(a1 + 144) = *(_DWORD *)(a1 + 144) & 0x20 | 0x107040;
                goto LABEL_151;
              }
            }
            if( (a6 & 0x1000) != 0 )
              *(_DWORD *)(a1 + 144) = *(_DWORD *)(a1 + 144) & 0x20 | 0x807040;
            goto LABEL_151;
          }
          if( v24 != 8409152 )
          {
            if( v24 == 8417344 )
              goto LABEL_151;
            goto LABEL_180;
          }
        }
        else
        {
          if( v24 != 1069120 )
          {
            if( v24 <= 0x5040 )
            {
              if( v24 != 20544 )
              {
                v25 = v24 - 4096;
                if( v25 )
                {
                  v26 = v25 - 16;
                  if( v26 )
                  {
                    if( v26 == 8176 )
                      goto LABEL_64;
                    v27 = (v22 & 0x1000000) == 0;
LABEL_150:
                    if( v27 )
                      goto LABEL_152;
                    goto LABEL_151;
                  }
                }
                goto LABEL_51;
              }
              if( (a6 & 0x5000) == 20480 )
              {
                v28 = *(_QWORD *)a1;
                *(_BYTE *)(v28 + 69) = KeAcquireQueuedSpinLock(7ui64);
                _InterlockedExchange64((volatile __int64 *)(v28 + 104), 0i64);
                KeReleaseQueuedSpinLock(7ui64, *(_BYTE *)(v28 + 69));
                if( !*(_BYTE *)(v28 + 68) )
                {
                  v29 = *(_QWORD *)(v28 + 24);
                  *(_OWORD *)v29 = 0i64;
                  *(_QWORD *)(v29 + 16) = 0i64;
                  *(_DWORD *)v29 = 1572865;
                  *(_DWORD *)(v29 + 4) = (*(_DWORD *)(a1 + 144) >> 12) & 7;
                  *(_DWORD *)(v29 + 12) |= 1u;
                  *(_QWORD *)(v28 + 56) = 24i64;
                  *(_DWORD *)(*(_QWORD *)a1 + 48i64) = 0;
                  IofCompleteRequest(*(_IRP **)a1, 1);
                  *(_QWORD *)a1 = 0i64;
                  *(_DWORD *)(a1 + 144) = *(_DWORD *)(a1 + 144) & 0x20 | 0x805040;
LABEL_151:
                  v17 = 1;
                  goto LABEL_152;
                }
              }
              else
              {
                if( (a6 & 0x4000) == 0 )
                  goto LABEL_152;
                v30 = *(_IRP **)a1;
                *((_BYTE *)v30 + 69) = KeAcquireQueuedSpinLock(7ui64);
                _InterlockedExchange64((volatile __int64 *)v30 + 13, 0i64);
                KeReleaseQueuedSpinLock(7ui64, *((_BYTE *)v30 + 69));
                if( !*((_BYTE *)v30 + 68) )
                {
                  v31 = *((_QWORD *)v30 + 3);
                  *(_OWORD *)v31 = 0i64;
                  *(_QWORD *)(v31 + 16) = 0i64;
                  *(_DWORD *)v31 = 1572865;
                  *(_DWORD *)(v31 + 4) = (*(_DWORD *)(a1 + 144) >> 12) & 7;
                  *(_DWORD *)(v31 + 8) = 1;
                  *(_DWORD *)(v31 + 12) |= 1u;
                  *((_QWORD *)v30 + 7) = 24i64;
                  *(_DWORD *)(*(_QWORD *)a1 + 48i64) = 0;
                  IofCompleteRequest(*(_IRP **)a1, 1);
                  *(_QWORD *)a1 = 0i64;
                  *(_DWORD *)(a1 + 144) = *(_DWORD *)(a1 + 144) & 0x20 | 0x105040;
                  v17 = 1;
                  goto LABEL_152;
                }
              }
              goto LABEL_140;
            }
            switch( v24 )
            {
              case 0x7040u:
                if( a6 == 0x4000 )
                {
                  v58 = *(_IRP **)a1;
                  *((_BYTE *)v58 + 69) = KeAcquireQueuedSpinLock(7ui64);
                  _InterlockedExchange64((volatile __int64 *)v58 + 13, 0i64);
                  KeReleaseQueuedSpinLock(7ui64, *((_BYTE *)v58 + 69));
                  if( !*((_BYTE *)v58 + 68) )
                  {
                    v59 = *((_QWORD *)v58 + 3);
                    *(_OWORD *)v59 = 0i64;
                    *(_QWORD *)(v59 + 16) = 0i64;
                    *(_DWORD *)v59 = 1572865;
                    *(_DWORD *)(v59 + 4) = (*(_DWORD *)(a1 + 144) >> 12) & 7;
                    *(_DWORD *)(v59 + 8) = 3;
                    *(_DWORD *)(v59 + 12) |= 1u;
                    *((_QWORD *)v58 + 7) = 24i64;
                    *(_DWORD *)(*(_QWORD *)a1 + 48i64) = 0;
                    IofCompleteRequest(*(_IRP **)a1, 1);
                    *(_QWORD *)a1 = 0i64;
                    *(_DWORD *)(a1 + 144) = *(_DWORD *)(a1 + 144) & 0x20 | 0x507040;
                    goto LABEL_151;
                  }
                }
                else if( a6 == 0x2000 )
                {
                  v60 = *(_IRP **)a1;
                  *((_BYTE *)v60 + 69) = KeAcquireQueuedSpinLock(7ui64);
                  _InterlockedExchange64((volatile __int64 *)v60 + 13, 0i64);
                  KeReleaseQueuedSpinLock(7ui64, *((_BYTE *)v60 + 69));
                  if( !*((_BYTE *)v60 + 68) )
                  {
                    v61 = *((_QWORD *)v60 + 3);
                    *(_OWORD *)v61 = 0i64;
                    *(_QWORD *)(v61 + 16) = 0i64;
                    *(_DWORD *)v61 = 1572865;
                    *(_DWORD *)(v61 + 4) = (*(_DWORD *)(a1 + 144) >> 12) & 7;
                    *(_DWORD *)(v61 + 8) = 5;
                    v62 = *(_DWORD *)(v61 + 12) | 1;
                    *(_DWORD *)(v61 + 12) = v62;
                    if( !*(_BYTE *)a2 )
                    {
                      *(_DWORD *)(v61 + 12) = v62 | 2;
                      *(_DWORD *)(v61 + 16) = *(_DWORD *)(*(_QWORD *)(*(_QWORD *)(a2 + 8) + 8i64) + 20i64);
                      *(_WORD *)(v61 + 20) = *(_WORD *)(a2 + 26);
                    }
                    *((_QWORD *)v60 + 7) = 24i64;
                    *(_DWORD *)(*(_QWORD *)a1 + 48i64) = 0;
                    IofCompleteRequest(*(_IRP **)a1, 1);
                    *(_QWORD *)a1 = 0i64;
                    *(_DWORD *)(a1 + 144) = *(_DWORD *)(a1 + 144) & 0x20 | 0x307040;
                    goto LABEL_151;
                  }
                }
                else
                {
                  if( (a6 & 0x5000) != 20480 )
                    goto LABEL_152;
                  v63 = *(_IRP **)a1;
                  *((_BYTE *)v63 + 69) = KeAcquireQueuedSpinLock(7ui64);
                  _InterlockedExchange64((volatile __int64 *)v63 + 13, 0i64);
                  KeReleaseQueuedSpinLock(7ui64, *((_BYTE *)v63 + 69));
                  if( !*((_BYTE *)v63 + 68) )
                  {
                    v66 = *((_QWORD *)v63 + 3);
                    *(_OWORD *)v66 = 0i64;
                    *(_QWORD *)(v66 + 16) = 0i64;
                    *(_DWORD *)v66 = 1572865;
                    *(_DWORD *)(v66 + 4) = (*(_DWORD *)(a1 + 144) >> 12) & 7;
                    *(_DWORD *)(v66 + 12) |= 1u;
                    *((_QWORD *)v63 + 7) = 24i64;
                    *(_DWORD *)(*(_QWORD *)a1 + 48i64) = 0;
                    IofCompleteRequest(*(_IRP **)a1, 1);
                    *(_QWORD *)a1 = 0i64;
                    *(_DWORD *)(a1 + 144) = *(_DWORD *)(a1 + 144) & 0x20 | 0x807040;
                    goto LABEL_151;
                  }
                }
LABEL_140:
                FsRtlpModifyThreadPriorities((_NONOPAQUE_OPLOCK *)a1, 0i64, 0);
                FsRtlpClearOwner(a1, 0i64);
                *(_BYTE *)(a1 + 32) = 0;
                v64 = *(_IRP **)a1;
                if( *(_QWORD *)(*(_QWORD *)a1 + 56i64) == a1 )
                {
                  *((_QWORD *)v64 + 7) = 0i64;
                  v64 = *(_IRP **)a1;
                }
                *((_DWORD *)v64 + 12) = -1073741536;
                IofCompleteRequest(*(_IRP **)a1, 1);
                *(_QWORD *)a1 = 0i64;
                ObfDereferenceObjectWithTag(*(PVOID *)(a1 + 8), 0x746C6644ui64);
                *(_QWORD *)(a1 + 8) = 0i64;
                *(_DWORD *)(a1 + 144) = *(_DWORD *)(a1 + 144) & 0x20 | 1;
                while( 1 )
                {
                  v65 = *(_WAITING_IRP **)(a1 + 88);
                  if( v65 == (_WAITING_IRP *)(a1 + 88) )
                    break;
                  FsRtlpRemoveAndCompleteWaitingIrp(v65);
                }
                v74 = 0;
                v73 = 1;
                goto LABEL_152;
              case 0xB000u:
LABEL_51:
                if( (a6 & 0x1000) == 0 )
                  goto LABEL_63;
                v37 = *(LIST_ENTRY **)(a1 + 40);
                while( v37 != (LIST_ENTRY *)(a1 + 40) )
                {
                  Flink = v37[1].Flink;
                  if( LODWORD(Flink[1].Blink) == 590400 )
                  {
                    if( v18 )
                      goto LABEL_59;
                    if( FsRtlpOplockKeysEqual(*(_FILE_OBJECT **)(v15 + 48), (_FILE_OBJECT *)Flink[3].Flink, v14) )
                    {
                      v14 = a4;
                      v37 = v37->Flink;
                      v15 = a2;
                    }
                    else
                    {
                      v14 = a4;
LABEL_59:
                      if( (v14 & 0x10010000) != 0 )
                        return(unsigned int)-1073739511;
                      p_Flink = &v37->Blink->Flink;
                      FsRtlpRemoveAndCompleteReadOnlyIrp(*p_Flink, 0i64, 0i64);
                      v14 = a4;
                      v37 = *p_Flink;
                      v15 = a2;
                    }
                  }
                  else
                  {
                    v37 = v37->Flink;
                    v15 = a2;
                  }
                }
                v23 = v82;
LABEL_63:
                if( (*(_DWORD *)(a1 + 144) & 0x1F0FFDF) == 45056 )
                {
LABEL_64:
                  if( a6 == 0x2000 )
                  {
                    v40 = a1 + 56;
                    v41 = *(_QWORD *)(a1 + 56);
                    while( 1 )
                    {
                      while( 1 )
                      {
                        if( v41 == v40 )
                          goto LABEL_119;
                        v42 = *(_QWORD *)(v41 + 16);
                        if( !v18 )
                        {
                          if( FsRtlpOplockKeysEqual(*(_FILE_OBJECT **)(v15 + 48), *(_FILE_OBJECT **)(v41 + 24), 0i64) )
                            goto LABEL_85;
                          v23 = v82;
                        }
                        if( v23 )
                          return(unsigned int)-1073739511;
                        if( !*(_QWORD *)(v41 + 56) )
                          break;
                        v17 = 1;
                        v72 = 1;
                        v41 = *(_QWORD *)v41;
                        v15 = a2;
                        v40 = a1 + 56;
                      }
                      v41 = *(_QWORD *)(v41 + 8);
                      if( (unsigned int)Feature_Servicing_39887415__private_IsEnabled() )
                      {
                        v43 = 1;
                        v44 = 0;
                        v45 = 0;
                        if( !*(_BYTE *)a2 )
                        {
                          v43 = 3;
                          v45 = *(_DWORD *)(*(_QWORD *)(*(_QWORD *)(a2 + 8) + 8i64) + 20i64);
                          v44 = *(_WORD *)(a2 + 26);
                        }
                        LODWORD(v70) = v45;
                        LODWORD(v69) = v43;
                        if( !FsRtlpRemoveAndCompleteRHIrp(*(_QWORD *)v41, a1, 0i64, 0x1000ui64, v69, v70, v44) )
                        {
                          v75 = 1;
                          goto LABEL_85;
                        }
                        v73 = 0;
                      }
                      else
                      {
                        *(_BYTE *)(v42 + 69) = KeAcquireQueuedSpinLock(7ui64);
                        _InterlockedExchange64((volatile __int64 *)(v42 + 104), 0i64);
                        KeReleaseQueuedSpinLock(7ui64, *(_BYTE *)(v42 + 69));
                        if( *(_BYTE *)(v42 + 68) )
                        {
                          LODWORD(v71) = 0;
                          LODWORD(v70) = 0;
                          LODWORD(v69) = 0;
                          FsRtlpRemoveAndBreakRHIrp(
                            *(_LIST_ENTRY **)v41,
                            (_NONOPAQUE_OPLOCK *)a1,
                            0,
                            3221225760i64,
                            v69,
                            v70,
                            v71,
                            0);
                          v75 = 1;
                          v17 = v72;
                          goto LABEL_85;
                        }
                        v46 = 1;
                        v47 = 0;
                        ShareMode = 0;
                        if( !*(_BYTE *)a2 )
                        {
                          v46 = 3;
                          v47 = *(_DWORD *)(*(_QWORD *)(*(_QWORD *)(a2 + 8) + 8i64) + 20i64);
                          ShareMode = *(_WORD *)(a2 + 26);
                        }
                        LODWORD(v71) = v47;
                        LODWORD(v70) = v46;
                        LODWORD(v69) = 4096;
                        FsRtlpRemoveAndBreakRHIrp(
                          *(_LIST_ENTRY **)v41,
                          (_NONOPAQUE_OPLOCK *)a1,
                          0,
                          0i64,
                          v69,
                          v70,
                          v71,
                          ShareMode);
                        v73 = 0;
                      }
                      v17 = 1;
                      v72 = 1;
                      v74 = v18 != 0;
LABEL_85:
                      v23 = v82;
                      v41 = *(_QWORD *)v41;
                      v15 = a2;
                      v40 = a1 + 56;
                    }
                  }
                  if( (a6 & 0x5000) == 20480 )
                  {
                    v49 = *(__int64 **)(a1 + 72);
                    while( v49 != (__int64 *)(a1 + 72) )
                    {
                      if( v18
                        || (v50 = FsRtlpOplockKeysEqual(*(_FILE_OBJECT **)(v15 + 48), (_FILE_OBJECT *)v49[3], v14),
                            v14 = a4,
                            !v50) )
                      {
                        if( (v14 & 0x10010000) != 0 )
                          return(unsigned int)-1073739511;
                        *((_DWORD *)v49 + 12) &= 0xFF0FFFFF;
                        *((_DWORD *)v49 + 12) |= 0x800000u;
                        if( (a6 & 0x2000) != 0 )
                          v17 = 1;
                        v72 = v17;
                      }
                      v49 = (__int64 *)*v49;
                      v15 = a2;
                    }
                    v51 = a1 + 56;
                    v52 = *(_QWORD *)(a1 + 56);
                    while( 1 )
                    {
                      while( 1 )
                      {
                        if( v52 == v51 )
                          goto LABEL_119;
                        v53 = *(_QWORD *)(v52 + 16);
                        if( !v18 )
                        {
                          if( FsRtlpOplockKeysEqual(*(_FILE_OBJECT **)(v15 + 48), *(_FILE_OBJECT **)(v52 + 24), v14) )
                            goto LABEL_118;
                          v14 = a4;
                        }
                        if( (v14 & 0x10010000) != 0 )
                          return(unsigned int)-1073739511;
                        if( !*(_QWORD *)(v52 + 56) )
                          break;
                        v54 = v17;
                        if( (a6 & 0x2000) != 0 )
                          v54 = 1;
                        v17 = v54;
                        v72 = v54;
                        v52 = *(_QWORD *)v52;
                        v15 = a2;
                        v51 = a1 + 56;
                      }
                      v52 = *(_QWORD *)(v52 + 8);
                      if( (unsigned int)Feature_Servicing_39887415__private_IsEnabled() )
                      {
                        LODWORD(v70) = 0;
                        LODWORD(v69) = 1;
                        if( !FsRtlpRemoveAndCompleteRHIrp(*(_QWORD *)v52, a1, 0i64, 0i64, v69, v70, 0) )
                        {
                          v75 = 1;
                          goto LABEL_118;
                        }
                        v73 = 0;
                        v55 = v17;
                        if( (a6 & 0x2000) != 0 )
                          v55 = 1;
                        v72 = v55;
                        v74 = v18 != 0;
                      }
                      else
                      {
                        *(_BYTE *)(v53 + 69) = KeAcquireQueuedSpinLock(7ui64);
                        _InterlockedExchange64((volatile __int64 *)(v53 + 104), 0i64);
                        KeReleaseQueuedSpinLock(7ui64, *(_BYTE *)(v53 + 69));
                        v56 = *(_LIST_ENTRY **)v52;
                        LODWORD(v71) = 0;
                        if( *(_BYTE *)(v53 + 68) )
                        {
                          LODWORD(v70) = 0;
                          LODWORD(v69) = 0;
                          FsRtlpRemoveAndBreakRHIrp(v56, (_NONOPAQUE_OPLOCK *)a1, 0, 3221225760i64, v69, v70, v71, 0);
                          v75 = 1;
                          v17 = v72;
                          goto LABEL_118;
                        }
                        LODWORD(v70) = 1;
                        LODWORD(v69) = 0;
                        FsRtlpRemoveAndBreakRHIrp(v56, (_NONOPAQUE_OPLOCK *)a1, 0, 0i64, v69, v70, v71, 0);
                        v73 = 0;
                        v55 = v72;
                        if( (a6 & 0x2000) != 0 )
                          v55 = 1;
                        v72 = v55;
                        v74 = v18 != 0;
                      }
                      v17 = v55;
LABEL_118:
                      v14 = a4;
                      v52 = *(_QWORD *)v52;
                      v15 = a2;
                      v51 = a1 + 56;
                    }
                  }
LABEL_119:
                  if( v75 )
                    FsRtlpReleaseIrpsWaitingForRH(a1);
                  if( !v17 )
                  {
                    v57 = *(__int64 **)(a1 + 72);
                    if( v57 != (__int64 *)(a1 + 72) && (a6 & 0x2000) != 0 )
                    {
                      if( v18 )
                      {
LABEL_128:
                        v17 = 1;
                      }
                      else
                      {
                        while( v57 != (__int64 *)(a1 + 72) )
                        {
                          if( !FsRtlpOplockKeysEqual((_FILE_OBJECT *)v57[3], *(_FILE_OBJECT **)(a2 + 48), 0i64) )
                            goto LABEL_128;
                          v57 = (__int64 *)*v57;
                        }
                      }
                    }
                  }
                }
                FsRtlpComputeShareableOplockState((_NONOPAQUE_OPLOCK *)a1);
                goto LABEL_152;
              case 0x103000u:
                v32 = 0;
                v33 = a6 & 0x1000;
                if( (a6 & 0x1000) != 0 )
                {
                  v34 = *(__int64 **)(a1 + 72);
                  while( v34 != (__int64 *)(a1 + 72) )
                  {
                    if( v18
                      || (v35 = FsRtlpOplockKeysEqual(*(_FILE_OBJECT **)(v15 + 48), (_FILE_OBJECT *)v34[3], v14),
                          v14 = a4,
                          !v35) )
                    {
                      v32 = 1;
                      if( (v14 & 0x10010000) != 0 )
                        return(unsigned int)-1073739511;
                      *((_DWORD *)v34 + 12) &= 0xFF0FFFFF;
                      *((_DWORD *)v34 + 12) |= 0x800000u;
                    }
                    v34 = (__int64 *)*v34;
                    v15 = a2;
                  }
                  FsRtlpComputeShareableOplockState((_NONOPAQUE_OPLOCK *)a1);
                  v33 = a6 & 0x1000;
                }
                if( (a6 & 0x2000) == 0 )
                  goto LABEL_152;
                if( !v32 )
                {
                  if( !v33 )
                  {
                    for( i = *(__int64 **)(a1 + 72); i != (__int64 *)(a1 + 72); i = (__int64 *)*i )
                    {
                      if( v18 || !FsRtlpOplockKeysEqual(*(_FILE_OBJECT **)(a2 + 48), (_FILE_OBJECT *)i[3], 0i64) )
                        goto LABEL_151;
                    }
                  }
                  goto LABEL_152;
                }
                goto LABEL_151;
            }
LABEL_180:
            v27 = (v22 & 0x1000000) == 0;
            goto LABEL_150;
          }
          if( (a6 & 0x1000) != 0 )
            *(_DWORD *)(a1 + 144) = *(_DWORD *)(a1 + 144) & 0x20 | 0x805040;
        }
        v27 = (a6 & 0x5000) == 0;
        goto LABEL_150;
      }
      if( !FsRtlpOplockKeysEqual(*(_FILE_OBJECT **)(a2 + 48), *(_FILE_OBJECT **)(a1 + 8), v14) )
      {
        v15 = a2;
        v14 = a4;
        goto LABEL_14;
      }
    }
    return 0;
  }
  if( a3 )
  {
    *(_DWORD *)(a3 + 48) = -1073741597;
    IofCompleteRequest((_IRP *)a3, 1);
  }
  return 3221225699i64;
}

Referenced by:

FsRtlCheckOplockEx2
FsRtlCheckUpperOplock
FsRtlOplockBreakH
FsRtlOplockBreakToNoneEx