IovAllocateMdl

_MDL *__stdcall IovAllocateMdl(
        VOID *VirtualAddress,
        UINT64 Length,
        UINT8 SecondaryBuffer,
        UINT8 ChargeQuota,
        _IRP *Irp,
        VOID *ReturnAddress){
  __int16 v6; 
  unsigned int v7; 
  unsigned __int64 v10; 
  _MDL *result; 
  _MDL *MdlAddress; 
  _MDL *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 )
      {
        MdlAddress = Irp->MdlAddress;
        for( i = MdlAddress->Next; i; i = i->Next )
          MdlAddress = i;
        MdlAddress->Next = result;
      }
      else
      {
        Irp->MdlAddress = result;
      }
    }
  }
  return result;
}

Referenced by:

No references.