Freigeben über


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

Bevor ein Treiber E/A-Anforderungen an ein Peripheriegerät an einen einfachen Peripheriebus (SPB) senden kann, muss der Treiber eine logische Verbindung mit dem Gerät öffnen. Ü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 I/O-Steuerungsanforderungen (IOCTL) an das Gerät senden, um SPB-spezifische Vorgänge auszuführen.

Beim Systemstart listet der Plug and Play(PnP)-Manager sowohl PnP-Geräte als auch Nicht-PnP-Geräte auf. Bei einem 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 beschreiben, wie auf das Gerät zugegriffen wird. Diese Verbindungsparameter identifizieren den SPB-Controller für den Bus, mit dem das Gerät verbunden ist, und enthalten weitere 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 ( als Verbindungs-ID bezeichnet ) zu. Der PnP-Manager speichert diese ID und die Verbindungsparameter in einem Systemdatenspeicher, der als Ressourcenhub bezeichnet wird. (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 zugewiesenen Hardwareressourcen des Treibers. Wenn der Treiber für das Peripheriegerät eine Systemfunktion aufruft, um eine Verbindung mit dem Gerät zu öffnen, stellt der Treiber die Verbindungs-ID bereit, die von der Funktion zum Abrufen der Verbindungsparameter des Geräts vom Ressourcenhub verwendet wird.

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 der Ressourcenliste empfängt, muss die INF-Datei, die den Treiber installiert, die folgende Direktive 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 (zum Erstellen der entsprechenden INF-Datei), die diese Direktive verwendet, finden Sie im Beispiel für den SpbAccelerometer-Treiber .

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. Zum Erstellen des Gerätepfadnamens ruft der Treiber die RESOURCE_HUB_CREATE_PATH_FROM_ID-Funktion auf, die in der Reshub.h-Headerdatei deklariert wird.

Zum Öffnen einer logischen Verbindung mit dem SPB-verbundenen Peripheriegerät ruft ein UMDF-Treiber die IWDFRemoteTarget::OpenFileByName-Methode auf, und ein KMDF-Treiber ruft die WdfIoTargetOpen-Methode auf. Für beide Methoden ist der Gerätepfadname als Eingabeparameter erforderlich.

Beispiele für UMDF- und KMDF-Code, die Verbindungs-IDs verwenden, um logische Verbindungen mit SPB-verbundenen Peripheriegeräten zu öffnen, finden Sie in den folgenden Themen:

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

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