Dela via


Jämförelse av installationsklasser och gränssnittsklasser

Att förstå skillnaden mellan enhetskonfigurationsklasser och enhetsgränssnittsklasser är avgörande för att windows-drivrutinsutveckling och enhetshantering ska lyckas. Även om de här klasserna kan se ut ungefär så fungerar de i grunden olika syften i Windows-enhetens ekosystem. Installationsklasser styr hur operativsystemet installerar och konfigurerar enheter. Gränssnittsklasser möjliggör körningskommunikation och funktioner mellan drivrutiner, program och enheter. Genom att förstå den här skillnaden kan du välja rätt klasstyp för enhetsinstallation, implementera rätt enhetsmeddelanden och undvika vanliga utvecklingsfallgropar.

En enhet tillhör ofta en installationsklass och exponerar flera enhetsgränssnitt i olika gränssnittsklasser samtidigt. De två typerna av klasser har dock olika syften och är inte utbytbara.

Diagram som visar relationen mellan en enhet, dess installationsklass och dess olika gränssnittsklasser.

Jämförelse

I följande tabell sammanfattas de viktigaste skillnaderna och relationerna mellan installationsklasser och gränssnittsklasser:

Aspekt Installationsklasser Gränssnittsklasser
Primärt syfte Gruppera enheter med liknande installation och konfiguration Gruppera enhetsgränssnitt som ger liknande funktioner och kommunikation
Användning Används av Windows under enhetsinstallationen Används av drivrutiner och program för enhetsinteraktion
GUID-definitioner Definieras vanligtvis i Devguid.h Definieras i enhetsspecifika huvudfiler (till exempel Ntddmou.h, Ntddpar.h)
Grupperingsvillkor Enheter som har installerats och konfigurerats på liknande sätt I allmänhet är enhetsgränssnitt som implementerar ett visst I/O-kontrakt
Anmälan Används inte för meddelanden om enhets ankomst eller borttagning Används för att registrera ankomst- och borttagningsmeddelanden för enhetsgränssnitt
Examples Sensorer, Inbyggd programvara, Bluetooth Ljudinspelning, ljudåtergivning, sensor för omgivande ljus
Förhållande En enhet tillhör en installationsklass En enhet kan exponera noll eller fler enhetsgränssnitt i olika gränssnittsklasser
Livstid Relevant under installationsprocessen Relevant under enhetsåtgärd

Det är viktigt att skilja mellan de två typerna av enhetsklasser: enhetsgränssnittsklasser och enhetskonfigurationsklasser. De två kan lätt förväxlas. I användarlägeskod använder båda klasserna samma uppsättning enhetsinstallationsfunktioner. De använder också samma uppsättning datastrukturer (enhetsinformationsuppsättningar).

Samma installationsklass, olika gränssnittsklasser:

  • Enheter: Två olika sensorenheter
  • Installationsklass: Båda enheterna finns i klassen Sensorer .
  • Gränssnittsklasser: En sensor exponerar ett gränssnitt för sensor för omgivande ljus och den andra exponerar ett accelerometerenhetsgränssnitt.

Överväg en USB-musenhet och en USB-tangentbordsenhet. Båda använder samma gränssnittsklass (Human Interface Device). Men de tillhör olika installationsklasser, mus respektive tangentbord.

Samma gränssnittsklass, olika installationsklasser:

  • Enheter: En USB-mus och ett USB-tangentbord
  • Gränssnittsklass: Båda enheterna använder samma gränssnittsklass (Human Interface Device) för att kommunicera med systemet.
  • Installationsklasser: Musenheten tillhör klassen Muskonfiguration , medan tangentbordsenheten tillhör klassen Tangentbordskonfiguration .

Enhetskonfigurationsklasser

Enhetskonfigurationsklasser är fördefinierade kategorier som endast används för installation och konfiguration av enheter i Windows. De hjälper operativsystemet att förstå hur enheten hanteras under installationsprocessen. Installationsklasser ger en mekanism för att gruppera enheter som är installerade och konfigurerade på samma sätt. Mer information om installationsklasser finns i Systemdefinierade enhetskonfigurationsklasser som är tillgängliga för leverantörer.

Installationsklasser för Windows-enheter definieras i systemfilen Devguid.h. Den här filen definierar en serie GUID:er för installationsklasser. Enhetskonfigurationsklasserna som representeras i Devguid.h får dock inte förväxlas med enhetsgränssnittsklasser . Devguid.h-filen innehåller endast GUID:er för installationsklasser.

Enhetsgränssnittsklasser

Enhetsgränssnittsklasser ger en mekanism för att gruppera enhetsgränssnitt enligt delade egenskaper eller funktioner. Drivrutiner och användarprogram kan registrera sig för meddelanden om enhetsgränssnitt i en viss gränssnittsklass. Det innebär att de meddelas när ett enhetsgränssnitt som tillhör den klassen är aktiverat (tas emot) eller inaktiveras (tas bort). De behöver inte spåra enskilda enheter. Enhetsgränssnittsklasser grupperar enhetsgränssnitt som exponeras av enheter. Du registrerar dig för meddelanden om ankomst och borttagning av enhetsgränssnitt.

Definitioner av gränssnittsklasser tillhandahålls inte i en enda fil. En enhetsgränssnittsklass definieras alltid i en rubrikfil som uteslutande tillhör en viss klass av enheter. Till exempel innehåller Ntddmou.h definitionen av GUID_DEVINTERFACE_MOUSE, GUID som representerar musgränssnittsklassen. Ntddpar.h definierar gränssnittsklassens GUID för parallella enheter. Ntddpcm.h definierar standardgränssnittsklassens GUID för PCMCIA-enheter. Ntddstor.h definierar gränssnittsklassens GUID för lagringsenheter.

Om du vill registrera dig för meddelanden i enhetsgränssnittet använder du GUID:erna som finns i huvudfilerna som är specifika för enhetsgränssnittsklassen. Med dessa GUID:er kan du meddelas när en instans av enhetsgränssnittet kommer. Om en drivrutin registreras för avisering med hjälp av ett GUID för installationsklassen i stället för ett gränssnittsklass-GUID meddelas den inte när ett gränssnitt tas emot.

När du definierar en ny gränssnittsklass ska du inte använda ett enda GUID för att identifiera både en installationsklass och en gränssnittsklass.