IopAllocateIrpExtension

CHAR *__fastcall IopAllocateIrpExtension(INT64 a1, INT64 a2){
  CHAR *v2; 
  char v3; 
  CHAR *PoolWithTag; 
  CHAR *v7; 
  v2 = *(CHAR **)(a1 + 200);
  v3 = a2;
  if( !v2 )
  {
    if( (_DWORD)a2 != 2 )
    {
      PoolWithTag = (CHAR *)ExAllocatePoolWithTag(NonPagedPoolNx, 0x40ui64, 0x58707249ui64);
      v2 = PoolWithTag;
      if( !PoolWithTag )
        return v2;
      memset((INT64)PoolWithTag, 0i64);
      *((_WORD *)v2 + 1) = 1 << v3;
      *(_BYTE *)(a1 + 71) |= 0x40u;
LABEL_10:
      *(_QWORD *)(a1 + 200) = v2;
      *(_WORD *)v2 |= 1u;
      return v2;
    }
    *(_BYTE *)(a1 + 71) |= 0x80u;
    return(CHAR *)(a1 + 196);
  }
  if( *(char *)(a1 + 71) < 0 )
  {
    if( (_DWORD)a2 != 2 )
    {
      v7 = (CHAR *)ExAllocatePoolWithTag(NonPagedPoolNx, 0x40ui64, 0x58707249ui64);
      v2 = v7;
      if( !v7 )
        return v2;
      memset((INT64)v7, 0i64);
      *((_WORD *)v2 + 1) = (1 << (v3 & 0xF)) | 4;
      *((_DWORD *)v2 + 1) = *(_DWORD *)(a1 + 200);
      *(_BYTE *)(a1 + 71) = *(_BYTE *)(a1 + 71) & 0x3F | 0x40;
      goto LABEL_10;
    }
    return(CHAR *)(a1 + 196);
  }
  *((_WORD *)v2 + 1) |= 1 << a2;
  return v2;
}

Referenced by:

IoClearAdapterCryptoEngineExtension
IoPropagateIrpExtensionEx
IoSetActivityIdIrp
IoSetAdapterCryptoEngineExtension
IoSetFsTrackOffsetState
IoSetFsZeroingOffsetRequired
IoSetGenericIrpExtension
IopPerfCallDriver
IopSetDiskIoAttributionExtension
IopSetDriverFlagsExtension
ViGetContextPointer