FsRtlpRemoveAndCompleteRHIrp

INT8 __fastcall FsRtlpRemoveAndCompleteRHIrp(
        VOID *P,
        _NONOPAQUE_OPLOCK *Oplock,
        INT64 a3,
        UINT64 a4,
        INT64 a5,
        INT64 a6,
        INT16 a7){
  __int64 v7; 
  unsigned int v9; 
  int v10; 
  INT8 v12; 
  _KIRQL v13; 
  __int64 v14; 
  __int64 v15; 
  _CCHAR v16; 

  v7 = *((_QWORD *)P + 2);
  *((_QWORD *)P + 2) = 0i64;
  v9 = a4;
  v10 = a3;
  v12 = 1;
  IoAcquireCancelSpinLock((PKIRQL)(v7 + 69));
  _InterlockedExchange64((volatile __int64 *)(v7 + 104), 0i64);
  LOBYTE(v13) = *(_BYTE *)(v7 + 69);
  IoReleaseCancelSpinLock(v13);
  FsRtlpOplockDequeueRH((_RH_OP_CONTEXT *)P);
  if( *(_BYTE *)(v7 + 68) )
  {
    v10 = -1073741536;
    v12 = 0;
    HalPutDmaAdapter(*((PADAPTER_OBJECT *)P + 3));
    if( *((_QWORD *)P + 5) )
      FsRtlpClearOwner(Oplock, (_RH_OP_CONTEXT *)P);
    ExFreePoolWithTag(P, 0);
    v15 = 0i64;
  }
  else
  {
    v14 = *(_QWORD *)(v7 + 24);
    v15 = 24i64;
    *(_QWORD *)(v14 + 16) = 0i64;
    *(_DWORD *)v14 = 1572865;
    *(_DWORD *)(v14 + 4) = 3;
    *(_DWORD *)(v14 + 8) = (v9 >> 12) & 7;
    *(_DWORD *)(v14 + 12) = a5;
    if( (a5 & 2) != 0 )
    {
      *(_DWORD *)(v14 + 16) = a6;
      *(_WORD *)(v14 + 20) = a7;
    }
    if( (a5 & 1) != 0 )
    {
      *((_DWORD *)P + 12) = *((_DWORD *)P + 12) & 0xFF0FFFFF | (v9 != 0 ? 0x100000 : 0x800000);
      FsRtlpOplockEnqueueRH(&Oplock->RHBreakQueue, P, 1i64);
      FsRtlpModifyThreadPriorities(Oplock, (_RH_OP_CONTEXT *)P, 1u);
      FsRtlpOplockSendModernAppTermination(Oplock, (_RH_OP_CONTEXT *)P);
    }
    else
    {
      HalPutDmaAdapter(*((PADAPTER_OBJECT *)P + 3));
      if( *((_QWORD *)P + 5) )
        FsRtlpClearOwner(Oplock, (_RH_OP_CONTEXT *)P);
      ExFreePoolWithTag(P, 0);
    }
  }
  *(_QWORD *)(v7 + 56) = v15;
  LOBYTE(v16) = 1;
  *(_DWORD *)(v7 + 48) = v10;
  IofCompleteRequest((PIRP)v7, v16);
  return v12;
}

Referenced by:

FsRtlUninitializeOplock
FsRtlpCancelOplockRHIrp
FsRtlpOplockBreakByCacheFlags
FsRtlpOplockCleanup
FsRtlpRequestExclusiveOplock
FsRtlpRequestShareableOplock