WebUSB için cihaz oluşturma

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.

Chrome'daki WebUSB bildiriminin ekran görüntüsü
WebUSB bildirimi.

İ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: