Verwenden einer Geräteschnittstelle
Geräteschnittstellen sind sowohl für Kernelmoduskomponenten als auch für Benutzermodusanwendungen verfügbar. Benutzermoduscode kann CfgMgr32-Funktionen (z. B. CM_Get_Device_Interface_List) oder SetupDiXxx-Funktionen (siehe SetupDi-Geräteschnittstellenfunktionen) verwenden, um sich über registrierte, aktivierte Geräteschnittstellen zu informieren. Die Anwendung im Benutzermodus kann dann E/A-APIs wie CreateFile verwenden, um ein Handle an das Gerät abzurufen, um E/A an das Gerät zu senden. Informationen dazu, wie Sie über die Aktivierung und Deaktivierung von Geräteschnittstellen und die Reaktion auf diese Aktionen benachrichtigt werden, finden Sie unter Registrieren für Benachrichtigungen über das Eintreffen und Entfernen der Geräteschnittstelle.
Bevor eine Kernelmoduskomponente ein bestimmtes Gerät oder Dateiobjekt verwenden kann, muss sie die folgenden Schritte ausführen:
Bestimmen Sie, ob die erforderliche Geräteschnittstellenklasse registriert und aktiviert ist.
Ein Treiber kann sich beim PnP-Manager registrieren, um benachrichtigt zu werden, wenn eine instance einer Geräteschnittstelle aktiviert oder deaktiviert ist. Zur Registrierung ruft die Komponente IoRegisterPlugPlayNotification auf. Diese Routine speichert die Adresse eines vom Treiber bereitgestellten Rückrufs, der immer dann aufgerufen wird, wenn ein instance einer Geräteschnittstelle instance aktiviert oder deaktiviert ist, für eine angegebene Geräteklasse. Die Rückrufroutinen empfangen die DEVICE_INTERFACE_CHANGE_NOTIFICATION-Struktur, die eine Unicode-Zeichenfolge enthält, die die schnittstelle instance symbolische Verknüpfung darstellt. Weitere Informationen finden Sie unter Verwenden der Änderungsbenachrichtigung über die PnP-Geräteschnittstelle .
Ein Treiber oder eine andere Kernelmoduskomponente kann auch IoGetDeviceInterfaces aufrufen, um eine Liste aller registrierten, aktivierten Geräteschnittstelleninstanzen für eine bestimmte Geräteschnittstellenklasse abzurufen. Die zurückgegebene Liste enthält Zeiger auf die symbolischen Unicode-Linkzeichenfolgen, die die Geräteschnittstelleninstanzen identifizieren.
Rufen Sie einen Zeiger auf ein Gerät oder ein Dateiobjekt ab, das einer instance der Schnittstelle entspricht.
Um auf ein bestimmtes Geräteobjekt zuzugreifen, muss der Treiber IoGetDeviceObjectPointer aufrufen und die Unicode-Zeichenfolge für die erforderliche Schnittstelle im ObjectName-Parameter übergeben. Um auf ein Dateiobjekt zuzugreifen, muss der Treiber InitializeObjectAttributes aufrufen, die Unicode-Zeichenfolge im ObjectName-Parameter übergeben und dann die erfolgreich initialisierte Attributstruktur in einem Aufruf von ZwCreateFile übergeben.