Freigeben über


Implementieren eines virtuellen Storport-Miniporttreibers

Diese Seite enthält allgemeine Implementierungsinformationen für einen virtuellen Storport-Miniporttreiber (VMiniport). Die VMiniport-Schnittstelle ist in storport.h definiert.

Entwurfsüberlegungen sind für verschiedene VMiniports einzigartig, sodass implementierungsspezifische Aspekte hier nicht enthalten sind.

Die VMiniport-Schnittstelle

In diesem Abschnitt werden die wichtigsten Funktionen, Rückrufe und Strukturen aufgelistet, die von VMiniport implementiert/verwendet werden. Einige Funktionen und Rückrufe sind erforderlich. die optionalen Rückrufe sind für den Entwurf eines VMiniports eindeutig.

  • DriverEntry, die erste Routine, die das Betriebssystem nach dem Laden des VMiniport aufruft. Diese Routine ist erforderlich.

  • HW_INITIALIZATION_DATA, bei der es sich um eine vom Vminiport zugeordnete und initialisierte Struktur handelt, die der VMiniport während der Initialisierung an Storport übergibt. Der VMiniport stellt Zeiger auf seine Rückruffunktionen in dieser Struktur bereit.

    Die folgenden Rückrufroutinen sind erforderlich:

    Die folgenden Rückrufroutinen sind optional, obwohl ein VMiniport einige davon je nach seiner eindeutigen Architektur implementieren muss:

    • HwInitializeTracing

    • HwCleanupTracing. Diese Routine ist erforderlich, wenn HwInitializeTracing auf eine Rückrufroutine verweist. Andernfalls ist diese Routine optional und für einen VMiniport eindeutig.

    • HwProcessServiceRequest. Diese Routine empfängt einen "Reverse-Callback"-IRP, der abgeschlossen wird, wenn der VMiniport den Aufrufer aktualisiert (z. B. eine Benutzermodusanwendung oder einen Kernelmodustreiber), oder der Aufrufer erfordert, etwas im Namen des VMiniport zu tun.

    • HwCompleteServiceIrp. Diese Routine ist erforderlich, wenn HwProcessServiceRequest auf eine Rückrufroutine verweist. Andernfalls ist diese Routine optional und für einen VMiniport eindeutig. HwCompleteServiceIrp wird aufgerufen, wenn der virtuelle Adapter entfernt wird, sodass der VMiniport alle reverse-Rückruf-IRPs abschließen kann, die möglicherweise ausstehend sind.

    Der VMiniport muss auch die folgenden Member der HW_INITIALIZATION_DATA-Struktur festlegen:

    • Legen Sie HwInitializationDataSize auf sizeof(HW_INITIALIZATION_DATA) fest.

    • Legen Sie AdapterInterfaceType auf Intern fest, was Storport angibt, dass es sich um einen virtuellen Adapter handelt.

    • Legen Sie HwBuildIo auf NULL fest.

    Der Vminiport-Treiber legt nach Bedarf weitere Felder fest. Nicht verwendete Felder müssen auf 0 (null) festgelegt werden.

  • PORT_CONFIGURATION_INFORMATION, bei der es sich um eine von Storport zugeordnete Struktur handelt. Storport initialisiert einige PORT_CONFIGURATION_INFORMATION Member und übergibt sie dann an den HwFindAdapter-Rückruf von VMiniport, bei dem der VMiniport die Initialisierung abschließt. Da diese Struktur von Storport vorab initialisiert wird, darf HWFindAdapter die Struktur nicht auf null stellen. Ein VMiniport muss VirtualDevice auf TRUE festlegen.

VMiniport-Initialisierung

Ein VMiniport verfügt über drei Initialisierungsphasen.

VMiniport-E/A

Storport ruft den HwStartIo-Rückruf eines VMiniport auf, um eine E/A-Anforderung zu initiieren. In Storport wird eine E/A-Anforderung mithilfe eines SCSI_REQUEST_BLOCK oder STORAGE_REQUEST_BLOCK (Standard- bzw. erweiterter SRB) beschrieben.

Im Gegensatz zu einem physischen Miniporttreiber ruft Storport HwBuildIo nicht in einem Vminiport auf, bevor HwStartIo aufgerufen wird.

Vor dem Aufrufen von HwStartIo werden keine Sperren gehalten. Die Standardmäßige Warteschlangentiefe für jede logische Einheit, die über die virtuelle Miniportschnittstelle verfügbar gemacht wird, beträgt 250.