Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Deskryptor systemu operacyjnego Microsoft jest podzielony na następujące segmenty:
- Deskryptor ciągu systemu operacyjnego Microsoft
- Co najmniej jeden deskryptor funkcji systemu operacyjnego Microsoft
Aby obsługiwać deskryptor systemu operacyjnego, urządzenie musi zaimplementować deskryptor ciągu. Deskryptor ciągu
Deskryptor ciągu systemu operacyjnego Microsoft jest ciągiem przechowywanym pod indeksem 0xEE. Format tego ciągu jest dobrze zdefiniowany.
Deskryptor ciągu systemu operacyjnego Microsoft służy do osiągnięcia następujących celów
- Obecność deskryptora ciągów systemu operacyjnego Microsoft wskazuje systemowi operacyjnemu, że urządzenie zawiera informacje osadzone w nim, w postaci deskryptorów funkcji systemu operacyjnego Microsoft.
- Deskryptor ciągu systemu operacyjnego Microsoft ma wbudowane pole sygnatury, które jest używane do odróżniania go od losowych ciągów, które mogą występować na urządzeniu na indeksie ciągu 0xEE.
- Deskryptor ciągu systemu operacyjnego Microsoft ma również osadzony numer wersji, który umożliwia przyszłe wersje deskryptora systemu operacyjnego Microsoft.
Na urządzeniu jest przechowywany tylko jeden deskryptor ciągu systemu operacyjnego Microsoft. W poniższych sekcjach opisano strukturę deskryptora ciągu systemu operacyjnego Microsoft oraz procedurę pobierania. Struktura ciągu systemu operacyjnego
Oto struktura deskryptora ciągów:
Struktura deskryptora ciągów
| (No changes needed) | Długość (bajty) | Wartość | Opis |
|---|---|---|---|
bLength |
1 |
0x12 |
Długość deskryptora |
bDescriptorType |
1 |
0x03 |
Deskryptor ciągu |
qwSignature |
14 |
"MSFT100" |
Pole podpisu (4D00530046005400310030003000) |
bMS_VendorCode |
1 |
Kod dostawcy |
Kod dostawcy do pobierania innych deskryptorów funkcji systemu operacyjnego |
bPad |
1 |
0x00 |
Pole okienka |
Struktura deskryptora ciągów systemu operacyjnego Microsoft jest stała dla wersji 1.00 i ma ogólną długość 18 bajtów. Numer wersji deskryptora ciągu systemu operacyjnego Microsoft znajduje się w polu qwSignature . Informacje przechowywane w polu bMS_VendorCode muszą być pojedynczą wartością bajtu. Będzie on używany do pobierania deskryptorów funkcji systemu operacyjnego Microsoft, a ta wartość bajtu jest używana w polu bmRequestType opisanym w następujący sposób:
Pobieranie deskryptora ciągu systemu operacyjnego
Aby pobrać informacje przechowywane w ciągu, do urządzenia musi zostać wysłane standardowe żądanie GET_DESCRIPTOR. Oto format żądania:
Standardowe żądanie ciągu Get_Descriptor
| bmRequestType | bRequest | wValue | wIndex | długość | Dane |
|---|---|---|---|---|---|
1000 0000b |
GET_DESCRIPTOR |
0x03EE |
0x0000 |
0x12 |
Zwraca ciąg |
Pole bmRequestType to mapa bitowa składająca się z trzech części — kierunku transferu danych, typu deskryptora i adresata. Zgodnie ze specyfikacją USB wartość bmRequestType jest ustawiona na 1000 0000b (0x80).
W przypadku żądania GET_DESCRIPTOR pole wValue jest podzielone na dwie części. Wysoki bajt przechowuje typ deskryptora, a bajt niski przechowuje indeks deskryptora. Aby pobrać deskryptor ciągu systemu operacyjnego Microsoft, należy ustawić wysoki bajt, aby pobrać deskryptor ciągu — 0x03. Ponieważ deskryptor łańcucha systemu operacyjnego Microsoft jest zawsze przechowywany w indeksie łańcucha 0xEE, ten indeks powinien być przechowywany w dolnym bajcie pola wValue.
Indeks wIndex służy do przechowywania identyfikatora języka, ale musi być ustawiony na zero dla deskryptora ciągu systemu operacyjnego Microsoft.
Pole wLength służy do wskazywania długości deskryptora ciągu do pobrania. Urządzenie powinno odpowiadać na dowolny ważny zakres od 0x02 do 0xFF.
Jeśli urządzenie nie ma prawidłowego deskryptora na odpowiednim adresie (0xEE), odpowie błędem żądania lub zawieszeniem. pl-PL: Gdy urządzenia nie odpowiadają za pomocą sygnału STOP, reset z sygnałem zero zostanie wystawiony dla urządzenia (w celu odzyskania go, jeśli powinno przejść do nieznanego stanu).
Weryfikowanie integralności deskryptora systemu operacyjnego
Ponieważ dostawcy mogą używać dowolnego identyfikatora ciągu do przechowywania informacji, system operacyjny musi sprawdzić, czy ciąg przechowywany w indeksie 0xEE jest rzeczywiście deskryptorem ciągu systemu operacyjnego Microsoft. Aby to sprawdzić, zostaną przeprowadzone następujące testy. Awaria któregokolwiek uniemożliwi odzyskiwanie deskryptorów funkcji systemu operacyjnego firmy Microsoft.
- Jeśli dostawca przechowuje ciąg w lokalizacji indeksu 0xEE, system operacyjny pobierze ciąg i wyśle do niego zapytanie, aby sprawdzić, czy jest to ciąg systemu operacyjnego Microsoft. Można to zweryfikować, porównując pole podpisu w ciągu z wcześniej określonym wpisem w polu podpisu. Niezgodność uniemożliwiłaby dalsze analizowanie ciągu.
- Drugi test będzie zawierać weryfikację długości ciągu na podstawie numeru wersji określonego w polu podpisu. Określony numer wersji (w ciągu "MSFT100") to 1,00. Odpowiada to deskryptorowi ciągu 18-bajtowego.
Ograniczenia deskryptora ciągów systemu operacyjnego Microsoft
Następujące ograniczenia dotyczą deskryptorów ciągów systemu operacyjnego Microsoft i ich pobierania:
- Aby przechowywać informacje zgodne ze specyfikacją deskryptora systemu operacyjnego Microsoft, urządzenie musi mieć deskryptor ciągu systemu operacyjnego Microsoft, który jest zgodny z informacjami opisanymi w deskryptorach systemu operacyjnego Microsoft.
- Dostawca urządzenia może używać dowolnej wartości w polu bMS_VendorCode w deskryptorze ciągu systemu operacyjnego Microsoft
Atrybut funkcji
Deskryptor funkcji to deskryptor o stałym formacie, który został zdefiniowany w określonym celu.
Pobieranie deskryptora funkcji systemu operacyjnego
Aby pobrać deskryptor funkcji systemu operacyjnego Microsoft, do urządzenia należy wysłać specjalne żądanie GET_MS_DESCRIPTOR. Oto format żądania:
Standardowy format żądania urządzenia
| bmRequestType | bRequest | wValue | wIndex | długość | Dane |
|---|---|---|---|---|---|
1100 0000b |
GET_MS_DESCRIPTOR |
X |
Indeks funkcji |
Długość |
Zwraca deskryptor |
Pole bmRequestType to mapa bitowa składająca się z trzech części — kierunku transferu danych, typu deskryptora i adresata — i jest zgodna ze specyfikacją USB. Deskryptor funkcji systemu operacyjnego Microsoft jest deskryptorem specyficznym dla dostawcy, a kierunek transferu danych jest z urządzenia do hosta. W związku z tym wartość bmRequestType jest ustawiona na 1100 0000b (0xC0).
Pole bRequest służy do wskazywania formatu żądania. Aby pobrać deskryptor funkcji systemu operacyjnego Microsoft, pole bRequest powinno zostać wypełnione specjalnym GET_MS_DESCRIPTOR bajtem. Wartość tego bajtu jest wskazywana przez bMS_VendorCode, który jest pobierany z deskryptora ciągów firmy Microsoft. Aby uzyskać więcej informacji na temat pobierania deskryptora ciągu systemu operacyjnego Microsoft, zobacz Pobieranie deskryptora ciągu systemu operacyjnego.
Pole wValue jest używane w specjalny sposób i jest podzielone na bajt wyższy i bajt niższy. Wysoki bajt służy do przechowywania numeru interfejsu. Jest to niezbędne do przechowywania deskryptorów funkcji na podstawie interfejsu, zwłaszcza w przypadku urządzeń złożonych lub urządzeń z wieloma interfejsami. W większości przypadków zostanie użyty interfejs 0. Niski bajt służy do przechowywania numeru strony. Ta funkcja uniemożliwia deskryptorom posiadanie granicy rozmiaru 64 KB (limit ustawiony przez rozmiar pola wLength ). Deskryptor zostanie pobrany z wartością strony początkowo ustawioną na zero. Jeśli zostanie odebrany pełny deskryptor (rozmiar to 64 KB), wartość strony zostanie zwiększona o jeden i żądanie deskryptora zostanie wysłane ponownie (tym razem z wartością strony zwiększoną o jeden). Ten proces będzie powtarzany do momentu odebrania deskryptora o rozmiarze mniejszym niż 64 KB. Należy pamiętać, że maksymalna liczba stron to 255, co powoduje ograniczenie rozmiaru deskryptora wynoszącego 16 MB.
Pole wIndex przechowuje numer indeksu funkcji dla deskryptora funkcji systemu operacyjnego Microsoft, który jest pobierany. Firma Microsoft będzie obsługiwać tę listę deskryptorów i indeksów funkcji systemu operacyjnego Microsoft. Aby dowiedzieć się więcej na temat deskryptorów funkcji systemu operacyjnego Microsoft, zobacz Deskryptory systemu operacyjnego Microsoft.
Pole wLength określa długość deskryptora do pobrania. Jeśli deskryptor jest dłuższy niż liczba bajtów określonych w polu wLength , zwracane są tylko początkowe bajty deskryptora. Jeśli jest krótszy niż wartość określona w polu wLength , zwracany jest krótki pakiet.
Jeśli określony deskryptor systemu operacyjnego nie jest obecny, urządzenie zgłosi błąd żądania lub zatrzyma się.
Ograniczenia deskryptora funkcji systemu operacyjnego Microsoft
Następujące ograniczenia dotyczą deskryptorów funkcji systemu operacyjnego Microsoft i ich pobierania.
- Wszystkie deskryptory funkcji systemu operacyjnego Microsoft są zdefiniowane i ustandaryzowane. Dostawcy nie mogą modyfikować, dołączać ani tworzyć deskryptorów funkcji systemu operacyjnego Microsoft bez bezpośredniej zgody firmy Microsoft.
- Wszystkie deskryptory funkcji systemu operacyjnego Microsoft będą miały w nich osadzony rozmiar i numer wersji. Te wartości powinny zawsze zgłaszać poprawne informacje do systemu operacyjnego.
- Urządzenie może mieć więcej niż jeden deskryptor funkcji systemu operacyjnego Microsoft osadzony w oprogramowaniu układowym.
- Niektóre deskryptory funkcji systemu operacyjnego Microsoft są przechowywane na poziomie interfejsu, a inne są unikatowe dla urządzenia. Deskryptory funkcji systemu operacyjnego Microsoft na poziomie urządzenia powinny ustawić wysoki bajt pola wValue jako zero.
Struktura deskryptora funkcji
Aby zidentyfikować się jako zdolny do obsługi MBIM, urządzenie musi również obsługiwać deskryptor rozszerzonej konfiguracji, który jest jednym ze zdefiniowanych deskryptorów funkcji. Struktura tego deskryptora jest następująca.
Sekcja Nagłówek
Sekcja nagłówka przechowuje informacje o pozostałej części deskryptora rozszerzonej konfiguracji. Pole dwLength zawiera długość całego deskryptora rozszerzonej konfiguracji. Sekcja nagłówka zawiera również numer wersji, który zostanie początkowo ustawiony na 1,00 (0100H). Przyszłe wersje tego deskryptora mogą zostać wydane na późniejszym etapie. Należy pamiętać, że przyszłe wersje deskryptora rozszerzonej konfiguracji mogą również wymagać zwiększenia liczby wpisów w sekcji nagłówka, dlatego sprawdź, czy ta liczba jest dokładnie przechowywana na urządzeniu i odczytywana przez system operacyjny.
Sekcja nagłówka rozszerzonego deskryptora konfiguracji
| Przesunięcie | (No changes needed) | Rozmiar | Wartość | Opis |
|---|---|---|---|---|
0 |
dwLength |
4 |
DWORD bez znaku |
Pole długości opisuje długość deskryptora rozszerzonej konfiguracji w bajtach. |
4 |
bcdVersion |
2 |
BCD |
Numer wydania deskryptora rozszerzonej konfiguracji w kodzie binarnym dziesiętny (na przykład wersja 1.00 to 0100H). |
6 |
wIndex |
2 |
SŁOWO |
Stała = 0x0004 |
8 |
bCount |
1 |
BAJT |
Łączna liczba sekcji funkcji, które są zgodne z sekcją nagłówka = 0x01 |
9 |
ZASTRZEŻONY |
7 |
ZASTRZEŻONY |
Sekcja funkcji
Sekcja funkcji zawiera dwa ważne informacje. Grupuje kolejne interfejsy, które służą podobnemu celowi do grup funkcji, i udostępnia zgodne i niezgodne identyfikatory dla każdej funkcji.
Oto format sekcji funkcji, w tym wartości, które powinny być używane przez urządzenie MBIM:
Sekcja funkcji deskryptora rozszerzonej konfiguracji
| Przesunięcie | (No changes needed) | Rozmiar | Wartość | Opis |
|---|---|---|---|---|
0 |
bFirstInterfaceNumber |
1 |
Byte |
Numer interfejsu początkowego dla tej funkcji = 0x00 |
1 |
bInterfaceCount |
1 |
Byte |
Całkowita liczba interfejsów, które muszą zostać dołączone do tej funkcji = 0x01 |
2 |
zgodny identyfikator |
8 |
Bajty |
Identyfikator zgodności |
10 |
subCompatibleID |
8 |
Bajty |
Identyfikator niezgodny |
18 |
ZASTRZEŻONY |
6 |
ZAREZERWOWANE = 0 |
¹Offset sekcji właściwości niestandardowej został zresetowany do zera. Aby obliczyć przesunięcie pola od początku deskryptora rozszerzonej konfiguracji, dodaj długość poprzednich sekcji.
Zgodne i niezgodne identyfikatory oparte na konfiguracji uwidaczniającej funkcję MBIM
| bConfiguration | identyfikator kompatybilności | 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) |
- Funkcja bConfiguration odnosi się do wartości bConfiguration w deskryptorze konfiguracji USB, która uwidacznia funkcję MBIM. Konfiguracja bConfiguration nie może być 1, ponieważ jest to domyślna konfiguracja uwidaczniająca tylko funkcję CDROM. Konfiguracja bConfiguration nie może być większa niż 4; oznacza to, że funkcja MBIM powinna być uwidoczniona w ramach pierwszych czterech konfiguracji.
- wartość compatibleID pozostaje taka sama dla wszystkich konfiguracji. Identyfikator subcompatibleID zmienia się na podstawie konfiguracji
Przykład
W tej tabeli przedstawiono przykładowy scenariusz z wieloma konfiguracjami. W tabeli wymieniono funkcje dostępne w każdej konfiguracji oraz akcje podejmowane przez różne wersje systemu operacyjnego dla każdej z tych konfiguracji.
Przykład urządzenia szerokopasmowego z wieloma konfiguracjami
| bConfiguration | 1 (Konfiguracja-Windows-7) | 2 (IHV-NCM-1.0-Configuration) | 3 (Konfiguracja Windows 8) | 3 (IHV-NCM-2.0-Configuration) |
|---|---|---|---|---|
Uwidocznione funkcje |
CDROM SD |
CD-ROM SD NCM1.0 Modem TELEWIZJA GPS FP Karta inteligentna PC/SC Voice Diag |
CD-ROM SD MBIM |
CD-ROM SD NCM2.0 Modem TELEWIZJA GPS FP Karta inteligentna PC/SC Voice Diag |
W poniższych tabelach przedstawiono wartości używane przez deskryptor ciągu systemu operacyjnego Microsoft oraz deskryptor funkcji rozszerzonej konfiguracji systemu operacyjnego Microsoft dla scenariusza z wieloma konfiguracjami poprzedniego przykładu.
Przykład urządzenia szerokopasmowego z wieloma konfiguracjami
| (No changes needed) | Długość (bajty) | Wartość |
|---|---|---|
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 |
Przykładowy nagłówek deskryptora funkcji rozszerzonej konfiguracji systemu operacyjnego Microsoft
| Przesunięcie | (No changes needed) | Rozmiar | Wartość |
|---|---|---|---|
0 |
dwLength |
4 |
16 |
4 |
bcdVersion |
2 |
0100H |
6 |
wIndex |
2 |
0x0004 |
8 |
bCount |
1 |
1 |
9 |
ZASTRZEŻONY |
7 |
Przykładowa funkcja deskryptora funkcji rozszerzonej konfiguracji systemu operacyjnego Microsoft
| Przesunięcie² | (No changes needed) | Rozmiar | Wartość |
|---|---|---|---|
0 |
bFirstInterfaceNumber |
1 |
|
1 |
bInterfaceCount |
1 |
|
2 |
zgodny identyfikator |
8 |
|
10 |
subCompatibleID |
8 |
|
18 |
ZASTRZEŻONY |
6 |
²Offset sekcji właściwości niestandardowej został zresetowany do zera. Aby obliczyć przesunięcie pola od początku deskryptora rozszerzonej konfiguracji, dodaj długość poprzednich sekcji.