IovAllocateMdl
_MDL *__fastcall IovAllocateMdl(
VOID *VirtualAddress,
UINT64 Length,
UINT8 SecondaryBuffer,
UINT8 ChargeQuota,
_IRP *Irp,
VOID *ReturnAddress){
__int16 v6;
unsigned int v7;
unsigned __int64 v10;
_MDL *result;
_QWORD **v12;
_QWORD *i;
v6 = (__int16)VirtualAddress;
v7 = Length;
v10 = (((unsigned __int16)VirtualAddress & 0xFFF) + (unsigned __int64)(unsigned int)Length + 4095) >> 12;
result = (_MDL *)VeAllocatePoolWithTagPriority(
(_POOL_TYPE)640,
8 * v10 + 48,
0x6C644D56ui64,
HighPoolPriority,
ReturnAddress);
if( result )
{
result->Next = 0i64;
result->Size = 8 * (v10 + 6);
result->MdlFlags = 0;
result->StartVa = (void *)((unsigned __int64)VirtualAddress & 0xFFFFFFFFFFFFF000ui64);
result->ByteOffset = v6 & 0xFFF;
result->ByteCount = v7;
if( Irp )
{
if( SecondaryBuffer )
{
v12 = (_QWORD **)*((_QWORD *)Irp + 1);
for( i = *v12; i; i = (_QWORD *)*i )
v12 = (_QWORD **)i;
*v12 = &result->Next;
}
else
{
*((_QWORD *)Irp + 1) = result;
}
}
}
return result;
}Referenced by:
No references.