Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Дескриптор ОС Майкрософт разбивается на следующие сегменты:
- Дескриптор строки ОС Майкрософт
- Один или несколько дескрипторов компонентов Microsoft OS
Для поддержки дескриптора ОС устройство должно реализовать дескриптор строки. Дескриптор строки
Дескриптор строки ОС Майкрософт — это строка, которая хранится в строковом индексе 0xEE. Формат этой строки четко определен.
Дескриптор строки ОС Майкрософт используется для достижения следующих целей.
- Наличие дескриптора строки ОС Майкрософт указывает операционной системе, что устройство содержит сведения, внедренные в него, в виде дескрипторов компонентов ОС Майкрософт.
- Дескриптор строки ОС Майкрософт имеет внедренное поле сигнатуры, которое используется для отличия от случайных строк, которые могут оказаться на устройстве в строковом индексе 0xEE.
- Дескриптор строки ОС Майкрософт также содержит внедренный номер версии, который позволяет использовать будущие редакции дескриптора ОС Майкрософт.
На устройстве хранится только один дескриптор строки ОС Майкрософт. В следующих разделах описывается структура дескриптора строки ОС Майкрософт и ее процедуры извлечения. Структура строки ОС
Ниже приведена структура дескриптора строки:
Структура дескриптора строки
| Поле | Длина (байты) | Ценность | Описание |
|---|---|---|---|
bLength |
1 |
0x12 |
Длина дескриптора |
bDescriptorType |
1 |
0x03 |
Дескриптор строки |
qwSignature |
14 |
"MSFT100" |
Поле подписи (4D00530046005400310030003000) |
bMS_VendorCode |
1 |
Код поставщика |
Код поставщика для получения других дескрипторов функций ОС |
bPad |
1 |
0x00 |
Поле "Заполнитель" |
Структура дескриптора строки ОС Майкрософт фиксирована для версии 1.00 и имеет общая длина 18 байт. Номер версии дескриптора строки ОС Майкрософт указан в поле qwSignature . Сведения, хранящиеся в поле bMS_VendorCode , должны быть одним байтом. Он будет использоваться для получения дескрипторов компонентов ОС Майкрософт, и это значение байтов используется в поле bmRequestType , описанное следующим образом:
Получение дескриптора строки ОС
Чтобы получить сведения, хранящиеся в строке, необходимо отправить на устройство стандартное GET_DESCRIPTOR запрос. Ниже приведен формат запроса:
Стандартный запрос строки Get_Descriptor
| bmRequestType | bRequest | wValue | wIndex | wLength | Данные |
|---|---|---|---|---|---|
1000 000b |
GET_DESCRIPTOR |
0x03EE |
0x0000 |
0x12 |
Возвращает строку |
Поле bmRequestType — это растровое изображение, состоящее из трех частей— направление передачи данных, типа дескриптора и получателя. Согласно спецификации USB, значение bmRequestType равно 1000 000b (0x80).
Для запроса GET_DESCRIPTOR поле wValue разделено на две части. Высокий байт сохраняет тип дескриптора и низкий байт сохраняет индекс дескриптора. Чтобы получить дескриптор строки ОС Майкрософт, необходимо задать высокий байт, чтобы получить дескриптор строки — 0x03. Так как дескриптор строки ОС Майкрософт всегда хранится в индексе 0xEE, этот индекс строки должен храниться в нижнем байте поля wValue .
WIndex используется для хранения идентификатора языка, но оно должно быть равно нулю для дескриптора строки ОС Майкрософт.
Поле wLength используется для указания длины извлекаемого дескриптора строки. Устройство должно реагировать на любой допустимый диапазон от 0x02–0xFF.
Если у устройства нет допустимого дескриптора по соответствующему адресу (0xEE), он ответит ошибкой запроса или сбоем. Если устройства не реагируют на остановку, устройству будет выдан однонаправленный нулевой сброс (чтобы восстановить его, если оно перейдет в неизвестное состояние).
Проверка целостности дескриптора ОС
Так как поставщики могут использовать любой идентификатор строки для хранения информации, операционная система должна убедиться, что строка, хранящуюся в индексе 0xEE, действительно является дескриптором строки ОС Майкрософт. Чтобы проверить это, будут проведены следующие тесты. Сбой любого из этих методов будет препятствовать получению дескрипторов компонентов ОС Майкрософт.
- Если поставщик хранит строку в расположении индекса 0xEE, операционная система получит строку и запросит ее, чтобы узнать, является ли она строкой ОС Майкрософт. Это можно проверить, сравнивая поле сигнатуры в строке с записью поля подписи, указанной ранее. Несоответствие предотвратит дальнейший синтаксический анализ строки.
- Второй тест будет включать проверку длины строки на основе номера версии, указанного в поле сигнатуры. Номер версии, указанный (в строке "MSFT100") равен 1.00. Это соответствует 18-байтовому дескриптору строки.
Ограничения дескриптора строки ОС Майкрософт
Следующие ограничения применяются к дескрипторам строк microsoft OS и их извлечению:
- Чтобы хранить сведения в соответствии со спецификацией дескриптора ОС Майкрософт, устройство должно иметь один и только дескриптор строки ОС Майкрософт, который соответствует сведениям, описанным в дескрипторах ОС Майкрософт.
- Поставщик устройств может использовать любое значение в поле bMS_VendorCode в дескрипторе строки ОС Майкрософт
Дескриптор компонентов
Дескриптор компонента — это дескриптор фиксированного формата, определенный для определенной цели.
Получение дескриптора компонента ОС
Чтобы получить дескриптор функции Microsoft OS, необходимо отправить специальный запрос GET_MS_DESCRIPTOR на устройство. Ниже приведен формат запроса:
Стандартный формат запроса устройства
| bmRequestType | bRequest | wValue | wIndex | wLength | Данные |
|---|---|---|---|---|---|
1100 0000b |
GET_MS_DESCRIPTOR |
X |
Индекс компонентов |
Длина |
Возвращает дескриптор |
Поле bmRequestType — это растровое изображение, состоящее из трех частей — направление передачи данных, типа дескриптора и получателя— и соответствует спецификации USB. Дескриптор компонента MICROSOFT OS — это дескриптор, зависящий от поставщика, а направление передачи данных — от устройства к узлу. Поэтому для значения bmRequestType задано значение 1100 0000b (0xC0).
Поле bRequest используется для указания формата запроса. Чтобы получить дескриптор компонента Microsoft OS, поле bRequest должно быть заполнено специальным GET_MS_DESCRIPTOR байтом. Значение этого байта указывается кодом bMS_VendorCode, извлекаемого из строкового дескриптора "Майкрософт". Дополнительные сведения о извлечении дескриптора строки ОС Майкрософт см. в разделе "Извлечение дескриптора строки ОС".
Поле wValue используется особым образом и разбивается на старший байт и младший байт. Высокий байт используется для хранения номера интерфейса. Это важно для хранения дескрипторов функций на основе каждого интерфейса, особенно для составных устройств или устройств с несколькими интерфейсами. В большинстве случаев будет использоваться интерфейс 0. Низкий байт используется для хранения номера страницы. Эта функция запрещает дескрипторам иметь границу размера 64 КБ (ограничение, заданное размером поля wLength ). Дескриптор будет возвращен со значением страницы, которое изначально задано равным нулю. Если получен полный дескриптор (размер составляет 64 КБ), значение страницы будет увеличено на единицу, и запрос дескриптора будет отправлен еще раз (на этот раз с увеличенным значением страницы). Этот процесс будет повторяться до тех пор, пока дескриптор с размером менее 64 КБ будет получен. Обратите внимание, что максимальное количество страниц — 255, которое помещает ограничение в 16 МБ на размер дескриптора.
Поле wIndex сохраняет номер индекса компонента для извлекаемого дескриптора компонента Microsoft OS. Корпорация Майкрософт будет поддерживать этот список дескрипторов и индексов компонентов ОС Майкрософт. Дополнительные сведения о дескрипторах функций ОС Майкрософт см. в разделе "Дескрипторы ОС Майкрософт".
Поле wLength указывает длину дескриптора для получения. Если дескриптор больше числа байтов, указанных в поле wLength , возвращаются только начальные байты дескриптора. Если значение меньше значения, указанного в поле wLength , возвращается короткий пакет.
Если определенный дескриптор ОС отсутствует, устройство выдает ошибку запроса или сбой.
Ограничения дескриптора компонентов MICROSOFT OS
Следующие ограничения применяются к дескрипторам функций ОС Майкрософт и их извлечению.
- Все дескрипторы функций ОС Майкрософт определены и стандартизированы. Поставщики не могут изменять, добавлять или создавать дескрипторы компонентов Microsoft OS без прямого согласия от Корпорации Майкрософт.
- Все дескрипторы функций операционных систем Microsoft будут включать размер и номер версии. Эти значения всегда должны сообщать правильные сведения операционной системе.
- Устройство может содержать несколько дескрипторов функций Microsoft OS, внедренных в его встроенное ПО.
- Некоторые дескрипторы функций ОС Майкрософт хранятся на уровне интерфейса, а другие — уникальными для устройства. Дескрипторы функций Microsoft OS на уровне устройства должны задать высокий байт поля wValue как ноль.
Структура дескриптора компонента
Чтобы идентифицировать себя как способный поддерживать MBIM, устройство также должно поддерживать дескриптор расширенной конфигурации, который является одним из определенных дескрипторов функций. Структура этого дескриптора выглядит следующим образом.
Раздел заголовка
В разделе заголовков хранятся сведения о остальной части дескриптора расширенной конфигурации. Поле dwLength содержит длину всего дескриптора расширенной конфигурации. Раздел заголовка также содержит номер версии, который изначально будет иметь значение 1.00 (0100H). Будущие редакции этого дескриптора могут быть выпущены на более позднем этапе. Обратите внимание, что в будущих версиях дескриптора расширенной конфигурации также может потребоваться увеличить количество записей в разделе заголовков, поэтому убедитесь, что это число точно хранится на устройстве и считывается операционной системой.
Раздел заголовка дескриптора расширенной конфигурации
| Offset | Поле | Размер | Ценность | Описание |
|---|---|---|---|---|
0 |
dwLength |
4 |
Неподписанный DWORD |
Поле длины описывает длину дескриптора расширенной конфигурации в байтах. |
4 |
bcdVersion |
2 |
BCD |
Номер выпуска дескриптора расширенной конфигурации в двоичном кодированном десятичном формате (например, версия 1.00 — 0100H). |
6 |
wIndex |
2 |
СЛОВО |
Исправлено = 0x0004 |
8 |
bCount |
1 |
БАЙТ |
Общее количество разделов функций, которые следуют разделу заголовка = 0x01 |
9 |
ЗАРЕЗЕРВИРОВАНО |
7 |
ЗАРЕЗЕРВИРОВАНО |
Раздел функции
Раздел функции содержит два важных фрагмента информации. Он группирует последовательные интерфейсы, которые служат аналогичной цели в группы функций, и предоставляет совместимые и несовместимые идентификаторы для каждой функции.
Ниже приведен формат раздела функции, включая значения, которые должны использоваться устройством MBIM:
Раздел функции дескриптора расширенной конфигурации
| Смещение | Поле | Размер | Ценность | Описание |
|---|---|---|---|---|
0 |
bFirstInterfaceNumber |
1 |
Байт |
Начальный номер интерфейса для этой функции = 0x00 |
1 |
bInterfaceCount |
1 |
Байт |
Общее количество интерфейсов, которые должны быть включены в эту функцию = 0x01 |
2 |
совместимый ИДЕНТИФИКАТОР |
8 |
Байт |
Совместимый идентификатор |
10 |
subCompatibleID |
8 |
Байт |
Частично совместимый идентификатор |
18 |
ЗАРЕЗЕРВИРОВАНО |
6 |
ЗАРЕЗЕРВИРОВАНО = 0 |
¹Offset раздела настраиваемого свойства было сброшено на ноль. Чтобы вычислить смещение поля с начала дескриптора расширенной конфигурации, добавьте длину разделов, предшествующих ему.
Совместимые и несовместимые идентификаторы на основе конфигурации, предоставляющей функцию MBIM
| bКонфигурация | совместимый ИДЕНТИФИКАТОР | 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 относится к значению bConfiguration в дескрипторе конфигурации USB конфигурации, которая предоставляет функцию MBIM. BConfiguration не может быть 1, так как это конфигурация по умолчанию, предоставляющая только функцию CDROM. BConfiguration не может быть больше 4; То есть функция MBIM должна быть представлена в первых четырех конфигурациях.
- совместимый ИДЕНТИФИКАТОР остается одинаковым для всех конфигураций. subcompatibleID изменяется в зависимости от конфигурации
Пример
В этой таблице показан пример сценария с несколькими конфигурациями. В таблице перечислены функции, доступные в каждой конфигурации, и действия, выполняемые разными версиями операционной системы для каждой из этих конфигураций:
Пример мобильного широкополосного устройства с несколькими конфигурациями
| bКонфигурация | 1 (Windows-7-Configuration) | 2 (IHV-NCM-1.0-Configuration) | 3 (Конфигурация Windows-8) | 3 (конфигурация IHV-NCM-2.0-Configuration) |
|---|---|---|---|---|
Открытые функции |
CDROM стандартное разрешение (SD) |
компакт-диск стандартное разрешение (SD) NCM1.0 Модем ТЕЛЕВИДЕНИЕ GPS FP Смарт-карта PC/SC Голос Диаг |
компакт-диск стандартное разрешение (SD) MBIM |
компакт-диск стандартное разрешение (SD) NCM2.0 Модем ТЕЛЕВИДЕНИЕ GPS FP Смарт-карта PC/SC Голос Диаг |
В следующих таблицах показаны значения, используемые дескриптором строки ОС Майкрософт и дескриптором расширенной конфигурации ОС Майкрософт для сценария многоконфигурационного предыдущего примера.
Пример мобильного широкополосного устройства с несколькими конфигурациями
| Поле | Длина (байты) | Ценность |
|---|---|---|
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 |
Пример заголовка дескриптора расширенной конфигурации ОС Майкрософт
| Offset | Поле | Размер | Ценность |
|---|---|---|---|
0 |
dwLength |
4 |
16 |
4 |
bcdVersion |
2 |
0100H |
6 |
wIndex |
2 |
0x0004 |
8 |
bCount |
1 |
1 |
9 |
ЗАРЕЗЕРВИРОВАНО |
7 |
Пример функции дескриптора расширенной конфигурации ОС Майкрософт
| Смещение² | Поле | Размер | Ценность |
|---|---|---|---|
0 |
bFirstInterfaceNumber |
1 |
|
1 |
bInterfaceCount |
1 |
|
2 |
совместимый ИДЕНТИФИКАТОР |
8 |
|
10 |
subCompatibleID |
8 |
|
18 |
ЗАРЕЗЕРВИРОВАНО |
6 |
Смещение раздела настраиваемых свойств было сброшено на ноль. Чтобы вычислить смещение поля с начала дескриптора расширенной конфигурации, добавьте длину разделов, предшествующих ему.