Freigeben über


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 Benutzermodusanwendung kann dann E/A-APIs wie CreateFile verwenden, um ein Handle für das Gerät abzurufen, um E/A an das Gerät zu senden. Informationen zur Aktivierung und Deaktivierung von Geräteschnittstellen und zur Reaktion auf diese Aktionen finden Sie unter Registrieren für die Benachrichtigung über das Eintreffen der Geräteschnittstelle und das Entfernen von Geräten.

Bevor eine Kernelmoduskomponente ein bestimmtes Gerät oder Dateiobjekt verwenden kann, muss folgendes ausgeführt werden:

  1. Ermitteln Sie, ob die erforderliche Geräteschnittstellenklasse registriert und aktiviert ist.

    Ein Treiber kann sich beim PnP-Manager registrieren, um benachrichtigt zu werden, wenn eine Instanz einer Geräteschnittstelle aktiviert oder deaktiviert ist. Zum Registrieren ruft die Komponente IoRegisterPlugPlayNotification auf. Diese Routine speichert die Adresse eines vom Treiber bereitgestellten Rückrufs, der aufgerufen wird, wenn eine Instanz einer Geräteschnittstelleninstanz für eine bestimmte Geräteklasse aktiviert oder deaktiviert ist. Die Rückrufroutinen erhalten die DEVICE_INTERFACE_CHANGE_NOTIFICATION Struktur, die eine Unicode-Zeichenfolge enthält, die die symbolische Verknüpfung der Schnittstelleninstanz 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-Verknüpfungszeichenfolgen, die die Geräteschnittstelleninstanzen identifizieren.

  2. Rufen Sie einen Zeiger auf ein Gerät oder ein Dateiobjekt ab, das einer Instanz 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 Parameter ObjectName übergeben und dann die erfolgreich initialisierte Attributstruktur in einem Aufruf von ZwCreateFile übergeben.