IopFreeIrpExtension

void __fastcall IopFreeIrpExtension(__int64 a1, int a2, char a3){
  char v3; 
  __int64 v4; 
  char v5; 
  int v7; 
  v3 = *(_BYTE *)(a1 + 71);
  v4 = *(_QWORD *)(a1 + 200);
  v5 = a3;
  if( v3 < 0 )
  {
    *(_QWORD *)(a1 + 200) = 0i64;
    *(_BYTE *)(a1 + 71) = v3 & 0x7F;
  }
  else if( v4 )
  {
    if( a2 == -1 )
    {
      if( IopIrpHasExtensionType((IRP *)a1, 5ui64) )
        *(_QWORD *)(v4 + 40) = 0i64;
      *(_WORD *)(v4 + 2) = 0;
      LOWORD(v7) = 0;
    }
    else
    {
      v7 = *(unsigned __int16 *)(v4 + 2) & ~(1 << a2);
      *(_WORD *)(v4 + 2) = v7;
      if( a2 == 5 )
        *(_QWORD *)(v4 + 40) = 0i64;
    }
    if( !(_WORD)v7 && (*(_BYTE *)(a1 + 71) & 0x40) != 0 )
    {
      if( v5 )
      {
        ExFreePoolWithTag((PVOID)v4, 0x58707249u);
        *(_BYTE *)(a1 + 71) &= ~0x40u;
        *(_QWORD *)(a1 + 200) = 0i64;
      }
    }
  }
}

Referenced by:

IoCleanupIrp
IoClearAdapterCryptoEngineExtension
IoClearFsTrackOffsetState
IoSetActivityIdIrp
IopCompleteRequest
IopFreeIrp
IopPerfCompleteRequest
IopfCompleteRequest