Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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.
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.