WebUSB API'den tam olarak yararlanacak bir cihaz oluşturun.
Bu makalede, sunulan tüm olanaklardan tam olarak yararlanmak için bir cihazın nasıl WebUSB API. API'nin kendisi hakkında kısa bir tanıtım için bkz. USB Cihazlarına Erişim web'de kullanılabilir.
Arka plan
Evrensel Seri Yol (USB), proje yöneticileri için en çok kullanılan fiziksel arayüzdür. çevre birimlerini masaüstü ve mobil bilgi işlem cihazlarına bağlama. Ek olarak otobüsün elektrik özelliklerini ve genel model USB özellikleri, bir cihazla iletişim kurmak için bir dizi cihaz sınıfını özellikler. Bunlar, aşağıdakiler gibi belirli cihaz sınıflarına yönelik genel modellerdir: video, ağ ve benzeri depolama alanı, ses, video ve ağ iletişimi gibi yardımcı olur. Bu cihaz sınıfı spesifikasyonlarının avantajı, işletim sistemi tedarikçi firması, sınıfa göre tek bir sürücü uygulayabilir ("sınıf sürücü" olarak tanımlar) ve bu sınıfı uygulayan herhangi bir cihaz desteklenir. Bu, her bir üretici için yazım denetimi yapmak üzere büyük bir .
Ancak bazı cihazlar bu standart cihaz sınıflarından birine uymuyor. CEVAP üreticinin bunun yerine cihazını sınıfa özgüdür. Bu durumda, hangi cihazı kullandığınızdan işletim sistemi tedarikçinin sürücü paketinde sağlanan bilgilere bağlı olarak yüklenecek sürücüyü genellikle bir tedarikçi firma ve ürün kimliği kümesi belirli bir protokol gerekir.
USB'nin başka bir özelliği de cihazların, veri depolarını görmek için ana makineye uyum sağlamalısınız. Her arayüz, ya da tedarikçiye özgü olmalıdır. Bir işletim sistemi her arayüz için doğru sürücüleri talep edebilir ve ilgili farklı bir gerekir. Örneğin, bir USB web kamerası genellikle biri USB video sınıfını (kamera için) ve USB video sınıfını ses sınıfı (mikrofon için). İşletim sistemi tek bir "web kamerası sürücüsü" bunun yerine bağımsız video ve ses sınıfı sürücülerini yükler cihazın ayrı işlevleri için sorumluluk kabul eder. Bu daha fazla esneklik sağlar.
API temel bilgileri
Standart USB sınıflarının çoğuna karşılık gelen web API'leri bulunur. Örneğin,
sayfa, getUserMedia()
kullanarak bir video sınıfı cihazından video yakalayabilir
veya dinleyerek insan arayüzlü (HID) sınıf bir cihazdan giriş etkinlikleri alın
veya Oyun Kumandası veyaKeyboardEventsPointerEvents
WebHID API'si.
Tüm cihazların standartlaştırılmış bir sınıf tanımı uygulamadığı gibi,
cihazlar, mevcut web platformu API'lerine karşılık gelen özellikleri uygular. Zaman
Bu durumda WebUSB API, sitelere veri eklemek için bir yöntem sağlayarak
tedarikçi firmaya özel bir arayüz üzerinde hak iddia etmek ve doğrudan arayüz için destek uygulamak
bir kontrol listesidir.
Bir cihazın WebUSB üzerinden erişilebilir olması için gereken özel şartlar biraz farklılık gösterir işletim sistemlerinin USB'yi yönetme biçimindeki farklılıklar nedeniyle platformdan platforma ancak temel gereksinim, bir cihazın kendisinde sayfanın kontrol etmek istediği arayüz için hak talebinde bulunan sürücüye aittir. Bu, bir tarafından sağlanan işletim sistemi sağlayıcısı veya cihaz sürücüsü tarafından sağlanan genel sınıf sürücüsü teslim edilir. USB cihazları, her biri kendi sürücüsü varsa, bazı arayüzlerin çalıştığı bir cihaz oluşturabilir tarayıcı tarafından erişilebilir, diğerleri ise tarayıcı tarafından erişilebilir.
Örneğin, ileri teknoloji bir USB klavye, kullanılabilmesini sağlayan bir HID sınıfı arayüzü sağlayabilir. işletim sisteminin giriş alt sistemi ve tedarikçi firmaya özgü bir bir yapılandırma aracı tarafından kullanılmak üzere WebUSB'de kullanılabilen arayüze sahip olur. Bu Araç, üreticinin web sitesinde sunulabiliyor ve kullanıcının kendi web sitesini ziyaret ederek bazı önemli unsurları (ör. makro tuşlar ve ışık efektleri) herhangi bir platforma özel yazılım yüklemekten kaçının. Bu tür bir cihazın yapılandırma tanımlayıcısı, aşağıdaki gibi görünür:
Değer | Alan | Açıklama |
---|---|---|
Yapılandırma açıklayıcısı | ||
0x09 |
bLength | Bu tanımlayıcının boyutu |
0x02 |
bDescriptorType | Yapılandırma açıklayıcısı |
0x0039 |
wTotalLength | Bu tanımlayıcı serisinin toplam uzunluğu |
0x02 |
bNumInterfaces | Arayüz sayısı |
0x01 |
bConfigurationValue | Yapılandırma 1 |
0x00 |
iConfiguration | Yapılandırma adı (yok) |
0b1010000 |
bmAttributes | Uzaktan uyandırma özellikli kendi kendine çalışan cihaz |
0x32 |
bMaxPower | Maksimum Güç, 2 mA'lık artışlarla ifade edilir. |
Arayüz tanımlayıcısı | ||
0x09 |
bLength | Bu tanımlayıcının boyutu |
0x04 |
bDescriptorType | Arayüz tanımlayıcısı |
0x00 |
bInterfaceNumber | Arayüz 0 |
0x00 |
bAlternateSetting | Alternatif ayar 0 (varsayılan) |
0x01 |
bNumEndpoints | 1 uç nokta |
0x03 |
bInterfaceClass | HID arayüz sınıfı |
0x01 |
bInterfaceSubClass | Başlatma arayüzü alt sınıfı |
0x01 |
bInterfaceProtocol | Klavye |
0x00 |
iInterface | Arayüz adı (yok) |
HID tanımlayıcısı | ||
0x09 |
bLength | Bu tanımlayıcının boyutu |
0x21 |
bDescriptorType | HID tanımlayıcısı |
0x0101 |
bcdHID | HID sürüm 1.1 |
0x00 |
bCountryCode | Donanım hedef ülkesi |
0x01 |
bNumDescriptors | Takip edilecek HID sınıfı tanımlayıcılarının sayısı |
0x22 |
bDescriptorType | Rapor açıklayıcı türü |
0x003F |
wDescriptorLength | Rapor açıklayıcının toplam uzunluğu |
Uç nokta tanımlayıcısı | ||
0x07 |
bLength | Bu tanımlayıcının boyutu |
0x05 |
bDescriptorType | Uç nokta tanımlayıcısı |
0b10000001 |
bEndpointAddress | Uç nokta 1 (Hindistan) |
0b00000011 |
bmAttributes | Kes |
0x0008 |
wMaxPacketSize | 8 baytlık paketler |
0x0A |
bInterval | 10 ms aralık |
Arayüz tanımlayıcısı | ||
0x09 |
bLength | Bu tanımlayıcının boyutu |
0x04 |
bDescriptorType | Arayüz tanımlayıcısı |
0x01 |
bInterfaceNumber | Arayüz 1 |
0x00 |
bAlternateSetting | Alternatif ayar 0 (varsayılan) |
0x02 |
bNumEndpoints | 2 uç nokta |
0xFF |
bInterfaceClass | Tedarikçi firmaya özel arayüz sınıfı |
0x00 |
bInterfaceSubClass | |
0x00 |
bInterfaceProtocol | |
0x00 |
iInterface | Arayüz adı (yok) |
Uç nokta tanımlayıcısı | ||
0x07 |
bLength | Bu tanımlayıcının boyutu |
0x05 |
bDescriptorType | Uç nokta tanımlayıcısı |
0b10000010 |
bEndpointAddress | Uç nokta 1 (Hindistan) |
0b00000010 |
bmAttributes | Toplu |
0x0040 |
wMaxPacketSize | 64 baytlık paketler |
0x00 |
bInterval | Toplu uç noktalar için kullanılamaz |
Uç nokta tanımlayıcısı | ||
0x07 |
bLength | Bu tanımlayıcının boyutu |
0x05 |
bDescriptorType | Uç nokta tanımlayıcısı |
0b00000011 |
bEndpointAddress | Uç Nokta 3 (ÇIKIŞ) |
0b00000010 |
bmAttributes | Toplu |
0x0040 |
wMaxPacketSize | 64 baytlık paketler |
0x00 |
bInterval | Toplu uç noktalar için kullanılamaz |
Yapılandırma tanımlayıcısı, birleştirilen birden fazla tanımlayıcıdan oluşur
birlikte. Her biri bLength
ve bDescriptorType
alanlarıyla başlar; böylece
tanımlanabilir. İlk arayüz, bir HID arayüzü ve bununla ilişkili
HID tanımlayıcısı ve giriş etkinliklerini
işletim sistemi. İkinci arayüz ise iki farklı dil paketi içeren, satıcıya özgü bir
cihaza komut göndermek ve yanıt almak için kullanılabilecek uç noktalar
karşılığında.
WebUSB tanımlayıcıları
WebUSB, donanım yazılımında değişiklik yapmadan birçok cihazla çalışabilse de ek işlevleri etkinleştirmek için cihazın belirli WebUSB desteğini gösteren tanımlayıcılar. Örneğin, Arkadaş Bitkiler projesinin cihazınız açıkken tarayıcının kullanıcıyı yönlendirebileceği açılış sayfası URL'si olmalıdır.
İkili Cihaz Nesne Deposu (BOS), USB 3.0'da kullanıma sunulan bir kavramdır ancak ayrıca sürüm 2.1'in bir parçası olarak USB 2.0 cihazlara geri bağlantılıdır. Beyan WebUSB için ilk destek: Aşağıdaki Platform Özellikleri BOS tanımlayıcısındaki açıklayıcı:
Değer | Alan | Açıklama |
---|---|---|
İkili cihaz Nesne Deposu tanımlayıcısı | ||
0x05 |
bLength | Bu tanımlayıcının boyutu |
0x0F |
bDescriptorType | İkili cihaz Nesne Deposu tanımlayıcısı |
0x001D |
wTotalLength | Bu tanımlayıcı serisinin toplam uzunluğu |
0x01 |
bNumDeviceCaps | BOS'deki cihaz özelliği tanımlayıcılarının sayısı |
WebUSB platform özelliği tanımlayıcı | ||
0x18 |
bLength | Bu tanımlayıcının boyutu |
0x10 |
bDescriptorType | Cihaz özellikleri tanımlayıcısı |
0x05 |
bDevCapabilityType | Platform özelliği tanımlayıcısı |
0x00 |
bReserved | |
{0x38, 0xB6, 0x08, 0x34, 0xA9, 0x09, 0xA0, 0x47, 0x8B, 0xFD, 0xA0, 0x76, 0x88, 0x15, 0xB6, 0x65} |
PlatformCapablityUUID | Küçük Endian biçiminde WebUSB platform özelliği tanımlayıcı GUID'si |
0x0100 |
bcdVersion | WebUSB tanımlayıcı sürümü 1.0 |
0x01 |
bVendorCode | WebUSB için bRequest değeri |
0x01 |
iLandingPage | Açılış sayfası URL'si |
Platform özelliği UUID bunu bir WebUSB Platform Özelliği olarak tanımlar
açıklayıcı, bununla ilgili temel bilgiler sağlar. Tarayıcı için
kullanarak bVendorCode
değerini kullandığı cihazla ilgili daha fazla bilgi
istekte bulunabilirsiniz. Şu anda belirtilen tek istek:
GET_URL
; bu değer, bir URL açıklayıcısı döndürür. Bunlar, dizeye benzer
açıklayıcıdır ancak URL'leri en az bayt şeklinde kodlamak için tasarlanmıştır. Bir URL
"https://google.com"
tanımlayıcısı şöyle görünür:
Değer | Alan | Açıklama |
---|---|---|
URL açıklayıcı | ||
0x0D |
bLength | Bu tanımlayıcının boyutu |
0x03 |
bDescriptorType | URL açıklayıcı |
0x01 |
bScheme | https:// |
"google.com" |
URL | UTF-8 olarak kodlanmış URL içeriği |
Cihazınız ilk fişe takıldığında tarayıcı BOS tanımlayıcısını şu şekilde okur:
bu standart GET_DESCRIPTOR
kontrol aktarımını yapma:
bmRequestType | bRequest | wValue | wIndex | wLength | Veri (yanıt) |
---|---|---|---|---|---|
0b10000000 |
0x06 |
0x0F00 |
0x0000 |
* | BOS tanımlayıcısı |
Bu istek genellikle yeterince büyük bir wLength
ile ilkinde olmak üzere iki kez gönderilir.
Böylece ana makine, wTotalLength
alanının değerini
büyük bir aktarım olduğunu gösterir ve ardından tam tanımlayıcı uzunluğu
yardımcı olur.
WebUSB Platform Özelliği tanımlayıcısında iLandingPage
alanı
tarayıcı sıfır dışında bir değer kullanır ve ardından WebUSB'ye özel bir GET_URL
isteği gerçekleştirir
bRequest
öğesinin bVendorCode
değerine ayarlandığı bir kontrol aktarımı yaparak
platform özelliği tanımlayıcısından alınmıştır ve wValue
iLandingPage
olarak ayarlanmıştır
değer. GET_URL
(0x02
) için istek kodu wIndex
bölümüne girilir:
bmRequestType | bRequest | wValue | wIndex | wLength | Veri (yanıt) |
---|---|---|---|---|---|
0b11000000 |
0x01 |
0x0001 |
0x0002 |
* | URL tanımlayıcısı |
Süreç için ilk yoklamadan sonra bu talep de iki kez gönderilebilir. okunan açıklayıcıyı ifade eder.
Platforma özgü dikkat edilmesi gereken noktalar
WebUSB API, erişim için tutarlı bir arayüz sağlamaya çalışırken USB cihaz geliştiricileri, yine de veri güvenliği gereksinimlerinin veya web tarayıcısı gereksinimleri gibi uygulamaların cihazlara erişmesine izin verir.
macOS
macOS için özel bir şey gerekmez. WebUSB kullanan bir web sitesi bir çekirdek sürücüsü veya bir çekirdek sürücüsü tarafından talep edilmeyen arayüzler için devre dışı bırakabilirsiniz.
Linux
Linux, macOS gibidir ancak varsayılan olarak çoğu dağıtımda kullanıcı ayarları yapılmaz.
USB cihazları açma izni olan hesaplar. Udev adlı bir sistem arka plan programı
bir cihaza erişmesine izin verilen kullanıcı ve grubu atamakla yükümlüdür. Kural
Bu seçenekte, verilen tedarikçiyle eşleşen cihazın sahipliğini atar ve
erişimi olan kullanıcılar için ortak bir grup olan plugdev
grubuna ürün kimlikleri
çevre birimlerine:
SUBSYSTEM=="usb", ATTR{idVendor}=="XXXX", ATTR{idProduct}=="XXXX", GROUP="plugdev"
XXXX
değerini cihazınızın on altılı tedarikçi ve ürün kimlikleriyle değiştirin.
ör. ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e11"
cihazı Nexus One ile eşleşir
telefon. Bunlar her zamanki "0x" olmadan yazılmalıdır ön ek ve tümü küçük harfle yazılmalıdır
tarafından tanınmasını istiyoruz. Cihazınızın kimliklerini bulmak için komut satırını çalıştırın
lsusb
aracı.
Bu kural, /etc/udev/rules.d
dizinindeki bir dosyaya yerleştirilmelidir ve
cihaz fişe takılır takılmaz geçerli olur. Yeniden başlatmak gerekmez
udev.
Android
Android platformu Linux tabanlıdır ancak
sistem konfigürasyonu. Yerleşik bir sürücü bulunmayan tüm cihazlar varsayılan olarak
kullanılabilir olduğu anlamına gelir. Geliştiriciler ise
Ancak kullanıcıların bağlantı kurarken ek bir adımla karşılaşacağını unutmayın.
için geçerlidir. Bir kullanıcı tarafından yapılan bir çağrıya yanıt olarak cihaz seçtiğinde
requestDevice()
, Android, izin verilip verilmeyeceğini soran bir istem görüntüler.
Chrome'u açın. Bu istem, kullanıcı web sitesine geri döndüğünde de yeniden görünür
Bir cihaza bağlanma izni olan ve web sitesi çağrılarına sahip olan
open()
.
Ayrıca Android'de, masaüstü Linux'tan daha fazla cihaz erişilebilir olacaktır çünkü varsayılan olarak daha az sürücü dahil edilir. Kayda değer bir eksiklik, örneğin, USB-seri adaptörler tarafından yaygın olarak uygulanan USB CDC-ACM sınıfıdır; Android SDK'da seri cihazla iletişim kurmaya yönelik bir API içermiyor.
ChromeOS
ChromeOS, Linux'u da temel alır ve herhangi bir değişiklik gerektirmez. bağla'ya dokunun. allow_broker hizmeti USB'ye erişimi kontrol eder izin verilir. Tarayıcının, en az bir talep edilmemiş bir arayüze dönüştü.
Windows
Windows sürücü modeli ek bir gereklilik getirir. Şunlardan farklı olarak: USB cihazını açma imkanı sağlayan platformlara izin verilmez. varsayılan ayardır. Bunun yerine, feed'inizde sürücünün, WinUSB'nin, doğrudan yüklenmesini ve kullandığına izin verir. Bu işlem, özel bir sistemde veya cihazın değiştirilmesi sonucunda yüklenmiş sürücü bilgileri dosyasını (INF) sırasında Microsoft OS Uyumluluk Tanımlayıcılarını sağlamak için kullanır.
Sürücü Bilgileri Dosyası (INF)
Sürücü bilgileri dosyası, Windows'a bir cihazla karşılaştığında ne yapması gerektiğini söyler
ilk kez yapıyor. Kullanıcının sisteminde zaten WinUSB sürücüsü bulunduğu için
INF dosyasının tedarikçi firmanızı ve ürün kimliğinizi ilişkilendirmesi yeterlidir.
yeni yükleme kuralından yararlanın. Aşağıdaki dosya temel bir örnektir. Bunu bir
.inf
uzantılı bir dosya kullanıyorsanız, "X" ile işaretlenmiş bölümleri, ardından sağa
tıklayın ve "Yükle"yi seçin içerik menüsünden seçim yapabilirsiniz.
[Version]
Signature = "$Windows NT$"
Class = USBDevice
ClassGUID = {88BAE032-5A81-49f0-BC3D-A4FF138216D6}
Provider = %ManufacturerName%
CatalogFile = WinUSBInstallation.cat
DriverVer = 09/04/2012,13.54.20.543
; ========== Manufacturer/Models sections ===========
[Manufacturer]
%ManufacturerName% = Standard,NTx86,NTia64,NTamd64
[Standard.NTx86]
%USB\MyCustomDevice.DeviceDesc% = USB_Install,USB\VID_XXXX&PID_XXXX
[Standard.NTia64]
%USB\MyCustomDevice.DeviceDesc% = USB_Install,USB\VID_XXXX&PID_XXXX
[Standard.NTamd64]
%USB\MyCustomDevice.DeviceDesc% = USB_Install,USB\VID_XXXX&PID_XXXX
; ========== Class definition ===========
[ClassInstall32]
AddReg = ClassInstall_AddReg
[ClassInstall_AddReg]
HKR,,,,%ClassName%
HKR,,NoInstallClass,,1
HKR,,IconPath,%REG_MULTI_SZ%,"%systemroot%\system32\setupapi.dll,-20"
HKR,,LowerLogoVersion,,5.2
; =================== Installation ===================
[USB_Install]
Include = winusb.inf
Needs = WINUSB.NT
[USB_Install.Services]
Include = winusb.inf
Needs = WINUSB.NT.Services
[USB_Install.HW]
AddReg = Dev_AddReg
[Dev_AddReg]
HKR,,DeviceInterfaceGUIDs,0x10000,"{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"
; =================== Strings ===================
[Strings]
ManufacturerName = "Your Company Name Here"
ClassName = "Your Company Devices"
USB\MyCustomDevice.DeviceDesc = "Your Device Name Here"
[Dev_AddReg]
bölümü,
olanak tanır. Bir uygulamanın çalıştırılabilmesi için her cihaz arayüzünün bir GUID'si olmalıdır
bulup Windows API aracılığıyla bağlanıyor. New-Guid
Powershell'i kullanın
cmdlet'i veya rastgele bir GUID oluşturmak için online bir aracı kullanabilirsiniz.
Zadig aracı, geliştirme amacıyla kullanım için kolay bir arayüz USB arayüzü için yüklenen sürücüyü WinUSB sürücüsüyle değiştirmeyin.
Microsoft OS uyumluluğu tanımlayıcıları
Yukarıdaki INF dosyası yaklaşımı kullanışsızdır çünkü yapmalarına yardımcı olur. Windows 8.1 ve sonraki sürümler alternatif veriler sağlanır. Bu tanımlayıcılar, ilk takıldığında Windows işletim sistemine normal olarak INF dosyasına eklenir.
WebUSB tanımlayıcılarını ayarladıktan sonra Microsoft'un işletim sistemini kolayca ekleyebilirsiniz.
uyumluluk tanımlayıcılarını da içerir. İlk olarak BOS tanımlayıcısını şu şekilde genişletin:
ek platform özelliği tanımlayıcısı. wTotalLength
uygulamasını güncellediğinizden emin olun
bNumDeviceCaps
ve bunu hesaba katın.
Değer | Alan | Açıklama |
---|---|---|
Microsoft OS 2.0 platformu özelliği açıklayıcısı | ||
0x1C |
bLength | Bu tanımlayıcının boyutu |
0x10 |
bDescriptorType | Cihaz özellikleri tanımlayıcısı |
0x05 |
bDevCapabilityType | Platform özelliği tanımlayıcısı |
0x00 |
bReserved | |
{0xDF, 0x60, 0xDD, 0xD8, 0x89, 0x45, 0xC7, 0x4C, 0x9C, 0xD2, 0x65, 0x9D, 0x9E, 0x64, 0x8A, 0x9F} |
PlatformCapablityUUID | Küçük Endian biçimindeki Microsoft OS 2.0 platform uyumluluğu tanımlayıcı GUID'si |
0x06030000 |
dwWindowsVersion | Minimum uyumlu Windows sürümü (Windows 8.1) |
0x00B2 |
wMSOSDescriptorSetTotalLength | Açıklayıcı grubunun toplam uzunluğu |
0x02 |
bMS_VendorCode | Diğer Microsoft tanımlayıcılarını almak için bRequest değeri |
0x00 |
bAltEnumCode | Cihaz, alternatif numaralandırmayı desteklemiyor |
WebUSB tanımlayıcılarında olduğu gibi,bRequest
Bu tanımlayıcılarla ilgili aktarımları kontrol etme. Bu örnekte, benim seçtiğim
0x02
wIndex
konumunda bulunan 0x07
, Microsoft OS'i alma komutudur
2.0 Cihazdaki Açıklayıcı Grubu.
bmRequestType | bRequest | wValue | wIndex | wLength | Veri (yanıt) |
---|---|---|---|---|---|
0b11000000 |
0x02 |
0x0000 |
0x0007 |
* | MS OS 2.0 Tanımlayıcı Grubu |
Bir USB cihazının birden çok işlevi olabilir. Bu nedenle, açıklayıcının ilk bölümü
set değeri, aşağıdaki özelliklerin hangi işlevle ilişkilendirilmiş olduğunu açıklar. İlgili içeriği oluşturmak için kullanılan
aşağıdaki örnekte, bileşik bir cihazın 1. arayüz yapılandırılmaktadır. Açıklayıcı,
işletim sistemine dair iki önemli bilgi paylaşacağım. Uyumlu
Kimlik açıklayıcısı, Windows'a bu cihazın WinUSB ile uyumlu olduğunu bildirir
gerekir. Kayıt defteri özelliği tanımlayıcısı,
[Dev_AddReg]
bölümünde, bir kayıt defteri özelliğinin
bu işleve bir cihaz arayüzü GUID'si atayın.
Değer | Alan | Açıklama |
---|---|---|
Microsoft OS 2.0 açıklayıcı kümesi başlığı | ||
0x000A |
wLength | Bu tanımlayıcının boyutu |
0x0000 |
wDescriptorType | Açıklayıcı grubu başlık tanımlayıcısı |
0x06030000 |
dwWindowsVersion | Minimum uyumlu Windows sürümü (Windows 8.1) |
0x00B2 |
wTotalLength | Açıklayıcı grubunun toplam uzunluğu |
Microsoft OS 2.0 yapılandırması alt kümesi başlığı | ||
0x0008 |
wLength | Bu tanımlayıcının boyutu |
0x0001 |
wDescriptorType | Yapılandırma alt kümesi başlık açıklaması |
0x00 |
bConfigurationValue | Yapılandırma 1 için geçerlidir (yapılandırmalara rağmen 0'dan dizine eklenmiştir normalde 1'den dizine eklenmiştir) |
0x00 |
bReserved | 0 olarak ayarlanmalıdır |
0x00A8 |
wTotalLength | Bu üst bilgi de dahil olmak üzere alt grubun toplam uzunluğu |
Microsoft OS 2.0 işlevi alt kümesi başlığı | ||
0x0008 |
wLength | Bu tanımlayıcının boyutu |
0x0002 |
wDescriptorType | İşlev alt kümesi başlık tanımlayıcısı |
0x01 |
bFirstInterface | Fonksiyonun ilk arayüzü |
0x00 |
bReserved | 0 olarak ayarlanmalıdır |
0x00A0 |
wSubsetLength | Bu üst bilgi de dahil olmak üzere alt grubun toplam uzunluğu |
Microsoft OS 2.0 uyumlu kimlik tanımlayıcısı | ||
0x0014 |
wLength | Bu tanımlayıcının boyutu |
0x0003 |
wDescriptorType | Uyumlu kimlik tanımlayıcısı |
"WINUSB\0\0" |
CompatibileID | ASCII dizesi 8 bayta doldurulur |
"\0\0\0\0\0\0\0\0" |
SubCompatibleID | ASCII dizesi 8 bayta doldurulur |
Microsoft OS 2.0 kayıt defteri özelliği tanımlayıcısı | ||
0x0084 |
wLength | Bu tanımlayıcının boyutu |
0x0004 |
wDescriptorType | Kayıt otoritesi özelliği tanımlayıcısı |
0x0007 |
wPropertyDataType | REG_MULTI_SZ |
0x002A |
wPropertyNameLength | Mülk adının uzunluğu |
"DeviceInterfaceGUIDs\0" |
PropertyName | UTF-16LE'de kodlanmış boş sonlandırıcıya sahip mülk adı |
0x0050 |
wPropertyDataLength | Özellik değerinin uzunluğu |
"{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}\0\0" |
PropertyData | UTF-16LE olarak kodlanmış GUID ve iki null sonlandırıcı |
Windows, bu bilgi için cihazı yalnızca bir kez sorgular. Cihaz çalışıyorsa geçerli tanımlayıcılarla yanıt vermezse, bir sonraki seferde cihaz bağlı. Microsoft, USB Cihaz Kaydı listesini sağladı Bir cihaz numaralandırılırken oluşturulan kayıt defteri girişlerini açıklayan girişler. Zaman test, Windows'u okumaya zorlamak amacıyla bir cihaz için oluşturulan girişleri silin açıklayıcıyı tekrar deneyin.
Daha fazla bilgi için Microsoft'un bu yapılandırmaların nasıl kullanılacağına ilişkin blog yayınına tanımlar.
Örnekler
Her iki WebUSB'yi de içeren WebUSB uyumlu cihazları uygulayan örnek kod tanımlayıcılar ve Microsoft OS tanımlayıcıları şu projelerde bulunabilir: