Porównanie klas konfiguracji i klas interfejsów

Zrozumienie różnic między klasami konfiguracji urządzeń i klasami interfejsów urządzeń ma kluczowe znaczenie dla pomyślnego tworzenia sterowników systemu Windows i zarządzania urządzeniami. Chociaż te klasy mogą wydawać się podobne, pełnią one zasadniczo różne cele w ekosystemie urządzeń z systemem Windows. Klasy konfiguracji określają sposób instalowania i konfigurowania urządzeń przez system operacyjny. Klasy interfejsów umożliwiają komunikację w czasie wykonywania i funkcjonalność między sterownikami, aplikacjami i urządzeniami. Zrozumienie tego rozróżnienia pomaga wybrać prawidłowy typ klasy dla instalacji urządzenia, zaimplementować odpowiednie powiadomienia o urządzeniach i uniknąć typowych pułapek programistycznych.

Urządzenie często należy do klasy instalacji i udostępnia kilka interfejsów urządzeń w różnych klasach interfejsów jednocześnie. Niemniej jednak dwa typy klas służą różnym celom i nie są zamienne.

Diagram przedstawiający relację między urządzeniem, klasą konfiguracji i różnymi klasami interfejsów.

Comparison

W poniższej tabeli przedstawiono podsumowanie kluczowych różnic i relacji między klasami konfiguracji i klasami interfejsów:

Aspekt Klasy instalacyjne Klasy interfejsów
Główny cel Grupowanie urządzeń o podobnej instalacji i konfiguracji Grupowanie interfejsów urządzeń, które zapewniają podobne funkcje i łączność
Użycie Używane przez system Windows podczas instalacji sterownika Używane przez kierowców i aplikacje do interakcji z urządzeniem
Definicje GUID Zwykle zdefiniowane w pliku Devguid.h Zdefiniowane w plikach nagłówków specyficznych dla urządzenia (na przykład Ntddmou.h, Ntddpar.h)
Kryteria grupowania Urządzenia zainstalowane i skonfigurowane podobnie Ogólnie rzecz biorąc, interfejsy urządzeń implementujące określony kontrakt we/wy
Powiadomienie Nie jest używane do powiadomień o podłączeniu lub odłączeniu urządzenia Służy do rejestrowania powiadomień dotyczących pojawienia się i usuwania interfejsu urządzenia
Examples Czujniki, oprogramowanie układowe, Bluetooth Przechwytywanie dźwięku, odtwarzanie dźwięku, czujnik światła otoczenia
Związek Urządzenie należy do jednej klasy konfiguracji Urządzenie może udostępniać zero lub więcej interfejsów urządzeń w różnych klasach interfejsów
Dożywotnio Istotne podczas procesu instalacji Istotne podczas pracy urządzenia

Należy rozróżnić dwa typy klas urządzeń: klasy interfejsów urządzeń i klasy konfiguracji urządzeń. Te dwa można łatwo ze sobą pomylić. W kodzie trybu użytkownika obie klasy używają tego samego zestawu funkcji instalacji urządzeń. Używają również tego samego zestawu struktur danych (zestawy informacji o urządzeniach).

Ta sama klasa konfiguracji, różne klasy interfejsów:

  • Urządzenia: dwa różne urządzenia czujnikowe
  • Klasa konfiguracji: oba urządzenia znajdują się w klasie Czujniki .
  • Klasy interfejsu: Jeden czujnik udostępnia interfejs urządzenia czujnika oświetlenia zewnętrznego, a drugi udostępnia interfejs urządzenia akcelerometru.

Rozważ mysz USB i klawiaturę USB. Oba używają tej samej klasy interfejsu (Human Interface Device (HID)). Należą one jednak odpowiednio do różnych klas konfiguracji, Mouse i Keyboard.

Ta sama klasa interfejsu, różne klasy konfiguracji:

  • Urządzenia: mysz USB i klawiatura USB
  • Klasa interfejsu: oba urządzenia używają tej samej klasy interfejsu (Human Interface Device (HID)) do komunikacji z systemem.
  • Klasy konfiguracji: urządzenie myszy należy do klasy konfiguracji Mysz, podczas gdy urządzenie klawiaturowe należy do klasy konfiguracji Klawiatura.

Klasy konfiguracji urządzeń

Klasy instalacji urządzeń to wstępnie zdefiniowane kategorie używane wyłącznie do instalacji i konfiguracji urządzeń w systemie Windows. Pomagają one systemowi operacyjnemu zrozumieć, jak zarządzać urządzeniem podczas procesu instalacji. Klasy konfiguracji zapewniają mechanizm grupowania urządzeń, które są instalowane i konfigurowane w taki sam sposób. Aby uzyskać więcej informacji na temat klas konfiguracji, zobacz Klasy konfiguracji urządzeń zdefiniowane przez system dostępne dla dostawców.

Klasy instalacji urządzeń systemu Windows są definiowane w pliku systemowym Devguid.h. Ten plik definiuje serię identyfikatorów GUID dla klas konfiguracji. Jednak klasy konfiguracji urządzeń reprezentowane w pliku Devguid.h nie mogą być mylone z klasami interfejsów urządzeń. Plik Devguid.h zawiera tylko identyfikatory GUID dla klas konfiguracji.

Klasy interfejsu urządzenia

Klasy interfejsów urządzeń zapewniają mechanizm grupowania interfejsów urządzeń zgodnie ze współdzieloną charakterystyką lub funkcjonalnością. Sterowniki i aplikacje użytkownika mogą rejestrować się w celu otrzymywania powiadomień o interfejsach urządzeń w określonej klasie interfejsu. Oznacza to, że otrzymują powiadomienia, gdy dowolny interfejs urządzenia należący do tej klasy jest włączony (pojawia się) lub jest wyłączony (odłączony). Nie muszą śledzić poszczególnych urządzeń. Klasy interfejsów urządzeń grupują interfejsy urządzeń udostępniane przez urządzenia. Rejestrujesz się w celu otrzymywania powiadomień o pojawieniu się i usunięciu interfejsów urządzeń.

Definicje klas interfejsów nie są podane w jednym pliku. Klasa interfejsu urządzenia jest zawsze definiowana w pliku nagłówkowym, który należy wyłącznie do określonej klasy urządzeń. Na przykład Ntddmou.h zawiera definicję GUID_DEVINTERFACE_MOUSE, identyfikator GUID reprezentujący klasę interfejsu myszy. Ntddpar.h definiuje identyfikator GUID klasy interfejsu dla urządzeń równoległych. Ntddpcm.h definiuje identyfikator GUID klasy interfejsu standardowego dla urządzeń PCMCIA. Ntddstor.h definiuje identyfikator GUID klasy interfejsu dla urządzeń magazynujących.

Aby zarejestrować się na potrzeby powiadomień interfejsu urządzenia, użyj identyfikatorów GUID znajdujących się w plikach nagłówkowych specyficznych dla klasy interfejsu urządzenia. Te identyfikatory GUID pozwalają otrzymywać powiadomienia o nadejściu wystąpienia interfejsu urządzenia. Jeśli sterownik rejestruje się w celu otrzymywania powiadomień przy użyciu identyfikatora GUID klasy konfiguracji zamiast identyfikatora GUID klasy interfejsu, nie jest powiadamiany o nadejściu interfejsu.

Podczas definiowania nowej klasy interfejsu nie należy używać jednego identyfikatora GUID do identyfikowania zarówno klasy konfiguracji, jak i klasy interfejsu.