RtlCmEncodeMemIoResource

NTSTATUS __stdcall RtlCmEncodeMemIoResource(
        _CM_PARTIAL_RESOURCE_DESCRIPTOR *Descriptor,
        UINT8 Type,
        UINT64 Length,
        UINT64 Start){
  unsigned __int16 v4; 
  UINT64 v6; 
  __int16 v7; 

  if( ((Type - 3) & 0xFB) != 0 )
  {
    if( Type != 1 )
      return -1073741811;
    goto LABEL_9;
  }
  if( Type == 1 )
  {
LABEL_9:
    if( Length <= 0xFFFFFFFF )
      goto LABEL_3;
    return -1073741811;
  }
LABEL_3:
  Descriptor->u.Start.QuadPart = Start;
  if( Type == 1 )
  {
    Descriptor->Type = 1;
    goto LABEL_6;
  }
  v4 = Descriptor->Flags & 0xF1FF;
  Descriptor->Flags = v4;
  if( Length <= 0xFFFFFFFF )
  {
    Descriptor->Type = 3;
LABEL_6:
    Descriptor->u.Length = Length;
    return 0;
  }
  if( Length > 0xFFFFFFFF00i64 )
  {
    if( Length > 0xFFFFFFFF0000i64 )
    {
      if( Length <= 0xFFFFFFFF00000000ui64 )
      {
        v6 = HIDWORD(Length);
        if( Length == HIDWORD(Length) << 32 )
        {
          v7 = 2048;
          goto LABEL_15;
        }
      }
    }
    else
    {
      v6 = Length >> 16;
      if( Length == (unsigned __int64)(unsigned int)(Length >> 16) << 16 )
      {
        v7 = 1024;
        goto LABEL_15;
      }
    }
  }
  else
  {
    v6 = Length >> 8;
    if( Length == (unsigned __int64)(unsigned int)(Length >> 8) << 8 )
    {
      v7 = 512;
LABEL_15:
      Descriptor->Type = 7;
      Descriptor->Flags = v7 | v4;
      Descriptor->u.Length = v6;
      return 0;
    }
  }
  return -1073741823;
}

Referenced by:

HalpReportResourceUsage
IopInitializeResourceMap