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