Compartir a través de


Complemento del modelo de interfaz MB

El descriptor del sistema operativo de Microsoft se divide en los segmentos siguientes:

  • Un descriptor de cadena del sistema operativo de Microsoft
  • Uno o varios descriptores de características del sistema operativo de Microsoft

Para admitir el descriptor del sistema operativo, el dispositivo debe implementar el descriptor de cadena. Descriptor de cadena

El descriptor de cadena del sistema operativo de Microsoft es una cadena que se almacena en el índice de cadena 0xEE. El formato de esta cadena está bien definido.

El descriptor de cadena del sistema operativo de Microsoft se usa para lograr los objetivos siguientes.

  • La presencia del descriptor de cadena del sistema operativo de Microsoft indica al sistema operativo que el dispositivo tiene información insertada en él, en forma de descriptores de características del sistema operativo de Microsoft.
  • El descriptor de cadena del sistema operativo de Microsoft tiene un campo de firma incrustado que se usa para diferenciarlo de cadenas aleatorias que podrían estar en un dispositivo en el índice de cadena 0xEE.
  • El descriptor de cadena del sistema operativo de Microsoft también tiene un número de versión incrustado que permite futuras revisiones del descriptor del sistema operativo de Microsoft.

Solo se almacena un descriptor de cadena del sistema operativo de Microsoft en un dispositivo. En las secciones siguientes se describe la estructura del descriptor de cadena del sistema operativo de Microsoft y su procedimiento de recuperación. Estructura de la cadena del sistema operativo

Esta es la estructura del descriptor de cadena:

Estructura del descriptor de cadena

Campo Longitud (bytes) Value Descripción

BLength

1

0x12

Longitud del descriptor

bDescriptorType

1

0x03

Descriptor de cadena

qwSignature

14

"MSFT100"

Campo firma (4D00530046005400310030003000)

bMS_VendorCode

1

Código de proveedor

Código de proveedor para capturar otros descriptores de características del sistema operativo

bPad

1

0x00

Campo Pad

La estructura del descriptor de cadena del sistema operativo de Microsoft se fija para la versión 1.00 y tiene una longitud total de 18 bytes. El número de versión del descriptor de cadena del sistema operativo de Microsoft se muestra en el campo qwSignature . La información almacenada en el campo bMS_VendorCode debe ser un único valor de byte. Se usará para recuperar descriptores de características del sistema operativo de Microsoft y este valor de byte se usa en el campo bmRequestType descrito de la siguiente manera:

Recuperación del descriptor de cadena del sistema operativo

Para recuperar la información almacenada en la cadena, se debe emitir una solicitud de GET_DESCRIPTOR estándar al dispositivo. Este es el formato de la solicitud:

Solicitud de cadena de Get_Descriptor estándar

bmRequestType bRequest wValue Windex wLength data

1000 0000b

GET_DESCRIPTOR

0x03EE

0x0000

0x12

Devuelve la cadena .

El campo bmRequestType es un mapa de bits compuesto por tres partes: dirección de transferencia de datos, tipo de descriptor y destinatario. Según la especificación USB, el valor de bmRequestType se establece en 1000 0000b (0x80).

Para una solicitud de GET_DESCRIPTOR, el campo wValue se divide en dos partes. El byte alto almacena el tipo de descriptor y el byte bajo almacena el índice del descriptor. Para recuperar el descriptor de cadena del sistema operativo de Microsoft, el byte alto debe establecerse para recuperar un descriptor de cadena, 0x03. Dado que el descriptor de cadena del sistema operativo de Microsoft siempre se almacena en el índice 0xEE, este índice de cadena debe almacenarse en el byte inferior del campo wValue .

wIndex se usa para almacenar el identificador de idioma, pero debe establecerse en cero para un descriptor de cadena del sistema operativo De Microsoft.

El campo wLength se usa para indicar la longitud del descriptor de cadena que se va a recuperar. El dispositivo debe responder a cualquier intervalo válido entre 0x02 y 0xFF.

Si un dispositivo no tiene un descriptor válido en la dirección correspondiente (0xEE), responderá con un error de solicitud o se detuvo. Cuando los dispositivos no responden con un bloqueo, se emitirá un restablecimiento cero de un solo fin al dispositivo (para recuperarlo, si debe entrar en un estado desconocido).

Comprobación de la integridad del descriptor del sistema operativo

Dado que los proveedores pueden usar cualquier identificador de cadena para almacenar información, el sistema operativo debe comprobar que la cadena almacenada en el índice 0xEE es realmente el descriptor de cadena del sistema operativo de Microsoft. Para comprobarlo, se realizarán las siguientes pruebas. El error de cualquiera de los dos impedirá la recuperación de los descriptores de características del sistema operativo de Microsoft.

  • Si un proveedor almacena una cadena en la ubicación del índice 0xEE, el sistema operativo recuperará la cadena y la consultará para ver si es la cadena del sistema operativo de Microsoft. Esto se puede comprobar comparando el campo de firma de la cadena con la entrada de campo de firma especificada anteriormente. Una falta de coincidencia impediría el análisis adicional de la cadena.
  • La segunda prueba incluirá una comprobación de la longitud de la cadena en función del número de versión especificado en el campo de firma. El número de versión especificado (en la cadena "MSFT100") es 1.00. Esto corresponde a un descriptor de cadena de 18 bytes.

Restricciones del descriptor de cadena del sistema operativo de Microsoft

Las restricciones siguientes se aplican a los descriptores de cadena del sistema operativo de Microsoft y su recuperación:

  • Para almacenar información conforme a la especificación del descriptor del sistema operativo de Microsoft, el dispositivo debe tener uno y solo descriptor de cadena del sistema operativo De Microsoft que cumpla la información descrita en Descriptores del sistema operativo de Microsoft.
  • Un proveedor de dispositivos puede usar cualquier valor en el campo bMS_VendorCode en el descriptor de cadena del sistema operativo de Microsoft.

Descriptor de características

Un descriptor de características es un descriptor de formato fijo que se ha definido para un propósito específico.

Recuperación de un descriptor de características del sistema operativo

Para recuperar un descriptor de características del sistema operativo de Microsoft, es necesario emitir una solicitud de GET_MS_DESCRIPTOR especial al dispositivo. Este es el formato de la solicitud:

Formato de solicitud de dispositivo estándar

bmRequestType bRequest wValue Windex wLength data

1100 0000b

GET_MS_DESCRIPTOR

X

Índice de características

Longitud

Devuelve el descriptor.

El campo bmRequestType es un mapa de bits compuesto por tres partes (dirección de transferencia de datos, tipo de descriptor y destinatario) y se ajusta a la especificación USB. El descriptor de características del sistema operativo de Microsoft es un descriptor específico del proveedor y la dirección de la transferencia de datos es desde el dispositivo al host. Por lo tanto, el valor de bmRequestType se establece en 1100 0000b (0xC0).

El campo bRequest se usa para indicar el formato de la solicitud. Para recuperar un descriptor de características del sistema operativo de Microsoft, el campo bRequest debe rellenarse con un byte de GET_MS_DESCRIPTOR especial. El valor de este byte se indica mediante el bMS_VendorCode, que se recupera del descriptor de cadena de Microsoft. Para obtener más información sobre la recuperación del descriptor de cadena del sistema operativo de Microsoft, consulte Recuperación del descriptor de cadena del sistema operativo.

El campo wValue se pone en uso especial y se divide en un byte alto y un byte bajo. El byte alto se usa para almacenar el número de interfaz. Esto es esencial para almacenar descriptores de características por interfaz, especialmente para dispositivos compuestos o dispositivos con varias interfaces. En la mayoría de los casos, se usará la interfaz 0. El byte bajo se usa para almacenar un número de página. Esta característica impide que los descriptores tengan un límite de tamaño de 64 KB (un límite establecido por el tamaño del campo wLength ). Se capturará un descriptor con el valor de página establecido inicialmente en cero. Si se recibe un descriptor completo (el tamaño es de 64 KB), el valor de la página se incrementará en uno y la solicitud del descriptor se enviará de nuevo (esta vez con el valor de página incrementado). Este proceso se repetirá hasta que se reciba un descriptor con un tamaño inferior a 64 KB. Tenga en cuenta que el número máximo de páginas es 255, lo que coloca un límite de 16 MB en el tamaño del descriptor.

El campo wIndex almacena el número de índice de características para el descriptor de características del sistema operativo de Microsoft que se está recuperando. Microsoft mantendrá esta lista de descriptores e índices de características del sistema operativo de Microsoft. Para obtener más información sobre los descriptores de características del sistema operativo de Microsoft, consulte Descriptores de so de Microsoft.

El campo wLength especifica la longitud del descriptor que se va a capturar. Si el descriptor es mayor que el número de bytes indicado en el campo wLength , solo se devuelven los bytes iniciales del descriptor. Si es más corto que el valor especificado en el campo wLength , se devuelve un paquete corto.

Si un descriptor de sistema operativo determinado no está presente, el dispositivo emitirá un error de solicitud o se detuvo.

Restricciones del descriptor de características del sistema operativo De Microsoft

Las restricciones siguientes se aplican a los descriptores de características del sistema operativo de Microsoft y a su recuperación.

  • Todos los descriptores de características del sistema operativo de Microsoft se definen y estandarizan. Los proveedores no pueden modificar, anexar ni crear descriptores de características del sistema operativo de Microsoft sin el consentimiento directo de Microsoft.
  • Todos los descriptores de características del sistema operativo de Microsoft tendrán un tamaño y un número de versión incrustados en ellos. Estos valores siempre deben informar de la información correcta al sistema operativo.
  • Un dispositivo puede tener más de un descriptor de características del sistema operativo de Microsoft insertado en su firmware.
  • Algunos descriptores de características del sistema operativo de Microsoft se almacenan en un nivel por interfaz, mientras que otros son únicos para el dispositivo. Los descriptores de características del sistema operativo Microsoft de nivel de dispositivo deben establecer el byte alto del campo wValue como cero.

Estructura del descriptor de características

Para identificarse como capaz de admitir MBIM, un dispositivo también debe admitir el descriptor de configuración extendido, que es uno de los descriptores de características definidos. La estructura de este descriptor es la siguiente.

Sección de encabezado

La sección de encabezado almacena información sobre el resto del descriptor de configuración extendido. El campo dwLength contiene la longitud de todo el descriptor de configuración extendido. La sección de encabezado también contiene un número de versión, que se establecerá inicialmente en 1.00 (0100H). Las revisiones futuras de este descriptor se pueden publicar en una fase posterior. Tenga en cuenta que es posible que las versiones futuras del descriptor de configuración extendida también necesiten aumentar el número de entradas de la sección de encabezado, por lo que compruebe que este número se almacena con precisión en el dispositivo y lo lee el sistema operativo.

Sección de encabezado del descriptor de configuración extendida

Offset Campo Size Value Descripción

0

dwLength

4

DWORD sin firmar

El campo length describe la longitud del descriptor de configuración extendido, en bytes.

4

bcdVersion

2

BCD

Número de versión del descriptor de configuración extendida en decimal codificado binario (por ejemplo, la versión 1.00 es 0100H).

6

Windex

2

WORD

Corregido = 0x0004

8

bCount

1

BYTE

Número total de secciones de función que siguen a la sección de encabezado = 0x01

9

RESERVED

7

RESERVED

Sección función

La sección de función proporciona dos fragmentos importantes de información. Agrupa interfaces consecutivas que sirven para un propósito similar en grupos de funciones y proporciona identificadores compatibles y subcompatibles para cada función.

Este es el formato de la sección de funciones, incluidos los valores que debe usar un dispositivo MBIM:

Sección función descriptor de configuración extendida

Offset¹ Campo Size Value Descripción

0

bFirstInterfaceNumber

1

Byte

Número de interfaz inicial de esta función = 0x00

1

bInterfaceCount

1

Byte

Número total de interfaces a las que se debe incluir desde esta función = 0x01

2

compatibleID

8

Bytes

Id. compatible

10

subCompatibleID

8

Bytes

Id. de subcompatible

18

RESERVED

6

RESERVED = 0

¹Offset de la sección de propiedades personalizadas se ha restablecido a cero. Para calcular el desplazamiento de un campo desde el principio del descriptor de configuración extendido, agregue la longitud de las secciones que lo preceden.

Identificadores compatibles y subcompatibles basados en la configuración que expone la función MBIM

bConfiguration compatibleID subCompatibleID

2

ALTRCFG

(0x41 0x4C 0x54 0x52 0x43 0x46 0x47 0x00)

20000000

(0x32 0x00 0x00 0x00 0x00 0x00 0x00 0x00)

3

ALTRCFG

(0x41 0x4C 0x54 0x52 0x43 0x46 0x47 0x00)

30000000

(0x33 0x00 0x00 0x00 0x00 0x00 0x00 0x00)

4

ALTRCFG

(0x41 0x4C 0x54 0x52 0x43 0x46 0x47 0x00)

40000000

(0x34 0x00 0x00 0x00 0x00 0x00 0x00 0x00)

  • bConfiguration hace referencia al valor bConfiguration dentro del descriptor de configuración USB de la configuración que expone la función MBIM. bConfiguration no puede ser 1 porque esa es la configuración predeterminada que expone solo la función CDROM. bConfiguration no puede ser mayor que 4; es decir, la función MBIM debe exponerse dentro de las cuatro primeras configuraciones.
  • compatibleID sigue siendo el mismo para todas las configuraciones. El valor de subcompatibleID cambia en función de la configuración.

Ejemplo

En esta tabla se muestra un escenario de configuración múltiple de ejemplo. En la tabla se enumeran las funciones disponibles en cada configuración y las acciones que realiza distintas versiones del sistema operativo para cada una de estas configuraciones:

Ejemplo de un dispositivo de banda ancha móvil multiconfiguración

bConfiguration 1 (Windows-7-Configuration) 2 (IHV-NCM-1.0-Configuration) 3 (Windows-8-Configuration) 3 (IHV-NCM-2.0-Configuration)

Funciones expuestas

CDROM

SD

CD-ROM

SD

NCM1.0

Módem

TV

GPS

FP

Tarjeta inteligente PC/SC

Voz

Diag

CD-ROM

SD

MBIM

CD-ROM

SD

NCM2.0

Módem

TV

GPS

FP

Tarjeta inteligente PC/SC

Voz

Diag

En las tablas siguientes se muestran los valores usados por el descriptor de cadena del sistema operativo de Microsoft y el descriptor de características de configuración extendida de Microsoft OS para el escenario de configuración múltiple del ejemplo anterior.

Ejemplo de un dispositivo de banda ancha móvil multiconfiguración

Campo Longitud (bytes) Value

BLength

1

0x12

bDescriptorType

1

0x03

qwSignature

14

'MSFT100'

0x4D 0x00 0x53 0x00 0x46 0x00 0x54 0x00 0x31 0x00 0x30 0x00 0x30 0x00

bMS_VendorCode

1

0xA5

bPad

1

0x00

Ejemplo de encabezado del descriptor de características de configuración extendida del sistema operativo de Microsoft

Offset Campo Size Value

0

dwLength

4

16

4

bcdVersion

2

0100H

6

Windex

2

0x0004

8

bCount

1

1

9

RESERVED

7

Ejemplo de función de descriptor de características de configuración extendida del sistema operativo de Microsoft

Offset² Campo Size Value

0

bFirstInterfaceNumber

1

1

bInterfaceCount

1

2

compatibleID

8

10

subCompatibleID

8

18

RESERVED

6

²Offset de la sección de propiedades personalizadas se ha restablecido a cero. Para calcular el desplazamiento de un campo desde el principio del descriptor de configuración extendido, agregue la longitud de las secciones que lo preceden.