Share via


Verbindungs-IDs für SPB-Connected Peripheriegeräte

Bevor ein Treiber E/A-Anforderungen an ein Peripheriegerät auf einem einfachen Peripheriebus (SPB) senden kann, muss der Treiber eine logische Verbindung mit dem Gerät herstellen. Über diese Verbindung kann der Treiber Lese- und Schreibanforderungen senden, um Daten an und vom Gerät zu übertragen. Darüber hinaus kann der Treiber IOCTL-Anforderungen (E/A-Steuerung) an das Gerät senden, um SPB-spezifische Vorgänge auszuführen.

Beim Systemstart listet der PnP-Manager (Plug & Play) sowohl PnP-Geräte als auch Nicht-PnP-Geräte auf. Für ein Nicht-PnP-Peripheriegerät, das über eine feste Verbindung mit einem SPB verfügt, fragt der PnP-Manager die ACPI-Firmware der Hardwareplattform ab, um eine Reihe von Verbindungsparametern abzurufen, die den Zugriff auf das Gerät beschreiben. Diese Verbindungsparameter identifizieren den SPB-Controller für den Bus, mit dem das Gerät verbunden ist, und enthalten andere Informationen, z. B. die Busadresse und die Busuhrfrequenz, die der Controller für die Kommunikation mit dem Gerät benötigt.

Der PnP-Manager weist den Verbindungsparametern für das mit SPB verbundene Peripheriegerät einen Bezeichner zu, der als Verbindungs-ID bezeichnet wird. Der PnP-Manager speichert diese ID und die Verbindungsparameter zusammen in einem Systemdatenspeicher namens Resource Hub. (Der Ressourcenhub ist ein interner Datenspeicher, in dem der PnP-Manager Konfigurationsinformationen zu einem mit SPB verbundenen Peripheriegerät speichert.) Die Verbindungs-ID kapselt diese Parameter, sodass der Treiber sie nicht explizit angeben muss.

Der Treiber für ein mit SPB verbundenes Peripheriegerät empfängt die Verbindungs-ID für das Gerät als Teil der dem Treiber zugewiesenen Hardwareressourcen. Wenn der Treiber für das Peripheriegerät eine Systemfunktion aufruft, um eine Verbindung mit dem Gerät zu öffnen, gibt der Treiber die Verbindungs-ID an, die die Funktion verwendet, um die Verbindungsparameter des Geräts aus dem Ressourcenhub abzurufen.

Der Treiberentwickler kann entweder das User-Mode Driver Framework (UMDF) oder das Kernel-Mode Driver Framework (KMDF) verwenden, um den Treiber für das mit SPB verbundene Peripheriegerät zu erstellen. Ein UMDF-Treiber empfängt seine Ressourcen (einschließlich der Verbindungs-ID), wenn das Framework die IPnpCallbackHardware2::OnPrepareHardware-Methode des Treibers aufruft. Ein KMDF-Treiber empfängt seine Hardwareressourcen während eines EvtDevicePrepareHardware-Rückrufs .

Damit ein UMDF-Peripherietreiber Verbindungs-IDs in seiner Ressourcenliste empfangen kann, muss die INF-Datei, die den Treiber installiert, die folgende Anweisung im WDF-spezifischen DDInstall-Abschnitt enthalten:

UmdfDirectHardwareAccess = AllowDirectHardwareAccess Weitere Informationen zu dieser Direktive finden Sie unter Angeben von WDF-Direktiven in INF-Dateien. Ein Beispiel für eine INX-Datei (die zum Erstellen der entsprechenden INF-Datei verwendet wird), die diese Direktive verwendet, finden Sie im Beispiel des SpbAccelerometer-Treibers .

Die Verbindungs-ID, die der Treiber als Ressource empfängt, ist eine 64-Bit-Ganzzahl, aber der Treiber muss diese ID in einen Gerätepfadnamen integrieren, der zum Abrufen der Verbindungsparameter aus dem Ressourcenhub verwendet werden kann. Um den Gerätepfadnamen zu erstellen, ruft der Treiber die RESOURCE_HUB_CREATE_PATH_FROM_ID-Funktion auf, die in der Headerdatei Reshub.h deklariert wird.

Um eine logische Verbindung mit dem mit SPB verbundenen Peripheriegerät zu öffnen, ruft ein UMDF-Treiber die IWDFRemoteTarget::OpenFileByName-Methode auf, und ein KMDF-Treiber ruft die WdfIoTargetOpen-Methode auf. Jede Methode erfordert den Gerätepfadnamen als Eingabeparameter.

UmDF- und KMDF-Codebeispiele, die Verbindungs-IDs zum Öffnen logischer Verbindungen mit SPB-verbundenen Peripheriegeräten verwenden, finden Sie in den folgenden Themen:

Hardwareressourcen für User-Mode SPB-PeripherietreiberHardwareressourcen für Kernel-Mode SPB-Peripherietreiber Benutzermodusanwendungen können keine logischen Verbindungen mit SPB-verbundenen Peripheriegeräten öffnen und keine E/A-Anforderungen direkt an diese Geräte senden.

Nur ein Treiber kann gleichzeitig eine offene logische Verbindung mit einem mit SPB verbundenen Peripheriegerät halten. Ein Versuch eines anderen Treibers, eine zweite Verbindung mit demselben Gerät zu öffnen, schlägt fehl.