FsRtlpReleaseIrpsWaitingForRH

VOID __fastcall FsRtlpReleaseIrpsWaitingForRH(INT64 a1){
  INT64 v1; 
  _WAITING_IRP *Blink; 
  char v4; 
  _QWORD **v5; 
  _QWORD *v6; 
  _WAITING_IRP *v7; 
  INT64 v8; 
  _QWORD *v9; 
  v1 = a1 + 88;
  Blink = *(_WAITING_IRP **)(a1 + 88);
  v4 = 1;
  if( Blink != (_WAITING_IRP *)(a1 + 88) )
  {
    v5 = (_QWORD **)(a1 + 72);
    do
    {
      v6 = *v5;
      v7 = Blink;
      if( *v5 == v5 && (*(_DWORD *)(a1 + 144) & 0x10000) == 0 )
        goto LABEL_17;
      if( !Blink->BreakAllRH )
      {
        if( (*(_DWORD *)(a1 + 144) & 0x10000) != 0 )
          v6 = *(_QWORD **)(a1 + 120);
        v8 = a1 + ((*(_DWORD *)(a1 + 144) & 0x10000) != 0 ? 120i64 : 72i64);
        while( v6 != (_QWORD *)v8 )
        {
          v9 = v6 - 7;
          if( (*(_DWORD *)(a1 + 144) & 0x10000) == 0 )
            v9 = v6;
          if( !FsRtlpOplockKeysEqual(Blink->FileObject, (_FILE_OBJECT *)v9[3], 0i64) )
          {
            v4 = 0;
            break;
          }
          v6 = (_QWORD *)*v6;
        }
        if( v4 )
        {
LABEL_17:
          Blink = (_WAITING_IRP *)Blink->Links.Blink;
          FsRtlpRemoveAndCompleteWaitingIrp(v7);
        }
      }
      Blink = (_WAITING_IRP *)Blink->Links.Flink;
    }
    while( Blink != (_WAITING_IRP *)v1 );
  }
}

Referenced by:

FsRtlCheckOplockEx2
FsRtlpAcknowledgeOplockBreakByCacheFlags
FsRtlpCancelOplockRHIrp
FsRtlpOplockBreakByCacheFlags
FsRtlpOplockCleanup
FsRtlpOplockFsctrlInternal