RtlIoDecodeMemIoResource

UINT64 __stdcall RtlIoDecodeMemIoResource(
        _IO_RESOURCE_DESCRIPTOR *Descriptor,
        UINT64 *Alignment,
        UINT64 *MinimumAddress,
        UINT64 *MaximumAddress){
  UINT64 Length; 
  UINT64 v6; 
  unsigned __int16 Flags; 

  Length = 0i64;
  v6 = 0i64;
  if( ((Descriptor->Type - 1) & 0xFD) != 0 )
  {
    Flags = Descriptor->Flags;
    if( (Flags & 0x200) != 0 )
    {
      Length = (unsigned __int64)Descriptor->u.Port.Length << 8;
      v6 = (unsigned __int64)Descriptor->u.Port.Alignment << 8;
    }
    else if( (Flags & 0x400) != 0 )
    {
      Length = (unsigned __int64)Descriptor->u.Port.Length << 16;
      v6 = (unsigned __int64)Descriptor->u.Port.Alignment << 16;
    }
    else if( (Flags & 0x800) != 0 )
    {
      Length = (unsigned __int64)Descriptor->u.Port.Length << 32;
      v6 = (unsigned __int64)Descriptor->u.Port.Alignment << 32;
    }
  }
  else
  {
    Length = Descriptor->u.Port.Length;
    v6 = Descriptor->u.Port.Alignment;
  }
  if( Alignment )
    *Alignment = v6;
  if( MinimumAddress )
    *MinimumAddress = Descriptor->u.Port.MinimumAddress.QuadPart;
  if( MaximumAddress )
    *MaximumAddress = Descriptor->u.Interrupt.TargetedProcessors;
  return Length;
}

Referenced by:

IopGenericScoreRequirement
IopGenericUnpackRequirement
PnpFilterResourceRequirementsList