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.