Jämförelse av installationsklasser och gränssnittsklasser

Att förstå skillnaden mellan enhetskonfigurationsklasser och enhetsgränssnittsklasser är avgörande för lyckad Windows-drivrutinsutveckling och enhetshantering. Även om de här klasserna kan verka likartade, tjänar de i grunden helt olika syften i Windows-enheternas ekosystem. Installationsklasser styr hur operativsystemet installerar och konfigurerar enheter. Gränssnittsklasser möjliggör kommunikation vid körning 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 konfigurationsklass 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 Konfigurationsklasser Gränssnittsklasser
Primärt syfte Gruppering av enheter med liknande installation och konfiguration Gruppering av enhetsgränssnitt som ger liknande funktioner och kommunikation
Användning Används av Windows under enhetsinstallationen Används av förare och program för enhetsinteraktion
Definitioner av GUID:er Definieras vanligtvis i Devguid.h Definieras i enhetsspecifika huvudfiler (till exempel Ntddmou.h, Ntddpar.h)
Grupperingskriterier Enheter som har installerats och konfigurerats på liknande sätt I allmänhet enhetsgränssnitt som implementerar ett visst I/O-kontrakt
Avisering Används inte för meddelanden om enhets ankomst eller borttagning Används för att registrera meddelanden om ankomst och borttagning av enhetsgränssnittsklass
Examples Sensorer, fast programvara, Bluetooth Ljudinspelning, ljudåtergivning, sensor för omgivande ljus
Relation En enhet tillhör en installationsklass En enhet kan exponera noll eller fler enhetsgränssnitt i olika gränssnittsklasser
Livstid Relevant under installationen Relevant under enhetens drift

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
  • Inställningsklass: Båda enheterna finns i klassen Sensorer.
  • Gränssnittsklasser: Den ena sensorn exponerar ett enhetsgränssnitt för sensor för omgivande ljus, och den andra exponerar ett accelerometerenhetsgränssnitt.

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

Samma gränssnittsklass, olika konfigurationsklasser:

  • 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 installationsklassen Mouse, medan tangentbordsenheten tillhör installationsklassen Keyboard.

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. Konfigurationsklasser ger en mekanism för att gruppera enheter som är installerade och konfigurerade på samma sätt. Mer information om enhetskonfigurationsklasser 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 gemensamma 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 (dyker upp) eller inaktiveras (tas bort). De behöver inte spåra enskilda enheter. Enhetsgränssnittsklasser är grupperingar av enhetsgränssnitt som exponeras av enheter. Du registrerar dig för aviseringar om anslutning och borttagning av enhetsgränssnitt.

Definitioner av gränssnittsklasser tillhandahålls inte i en enda fil. En enhetsgränssnittsklass definieras alltid i en headerfil 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 för aviseringar om enhetsgränssnitt använder du GUID:erna som finns i headerfilerna som är specifika för enhetsgränssnittsklassen. Med dessa GUID:er kan du meddelas när en instans av ett enhetsgränssnitt 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 blir tillgängligt.

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.