VIRTUAL_HW_FIND_ADAPTER Rückruffunktion (storport.h)

Der virtuelle Storport-Miniport verwendet Konfigurationsinformationen, die für die VIRTUAL_HW_FIND_ADAPTER-Routine bereitgestellt werden, um sich selbst weiter zu initialisieren.

Syntax

VIRTUAL_HW_FIND_ADAPTER VirtualHwFindAdapter;

ULONG VirtualHwFindAdapter(
  PVOID DeviceExtension,
  PVOID HwContext,
  PVOID BusInformation,
  PVOID LowerDevice,
  PCHAR ArgumentString,
  PPORT_CONFIGURATION_INFORMATION ConfigInfo,
  PBOOLEAN Again
)
{...}

Parameter

DeviceExtension

Ein Zeiger auf den nicht ausgelagerten Speicherbereich des Miniporttreibers pro Adapter. Der betriebssystemspezifische Porttreiber weist Arbeitsspeicher zu und initialisiert diese Erweiterung mit Nullen, bevor er die VIRTUAL_HW_FIND_ADAPTER Routine des Miniports aufruft.

HwContext

Ein Zeiger auf die PDO im Gerätestapel. Der HBA selbst ist das FDO. Die PDO gehört möglicherweise zum Pci.sys Treibers, wenn der Miniporttreiber physische Hardware steuert. Im Fall eines virtuellen Miniporttreibers gehört der PDO jedoch zum PnP-Manager.

BusInformation

Ein Zeiger auf das funktionale Geräteobjekt (Functional Device Object, FDO) des Miniports.

LowerDevice

Ein Zeiger auf das Geräteobjekt, das vom FDO des Miniports gesteuert wird.

ArgumentString

Ein Zeiger auf eine MIT NULL beendete ASCII-Zeichenfolge. Diese Zeichenfolge enthält, sofern angegeben, Geräteinformationen aus der Registrierung, z. B. einen Basisparameter.

ConfigInfo

Ein Zeiger auf eine PORT_CONFIGURATION_INFORMATION-Struktur . Der Porttreiber initialisiert diese Struktur mit allen bekannten Konfigurationsinformationen, z. B. Werten, die der DriverEntry des Miniporttreibers im VIRTUAL_HW_INITIALIZATION_DATA festgelegt hat. VIRTUAL_HW_FIND_ADAPTER müssen alle angegebenen Informationen verwenden, um zu bestimmen, ob der vom Miniporttreiber unterstützte virtuelle HBA ist. Wenn dies der Fall ist, initialisiert und konfiguriert VIRTUAL_HW_FIND_ADAPTER diesen HBA und füllt alle fehlenden Konfigurationsinformationen aus. Wenn möglich, sollte ein Miniporttreiber Standardwerte für jeden unterstützten HBA-Typ aufweisen, falls der betriebssystemabhängige Porttreiber keine zusätzlichen Konfigurationsinformationen bereitstellen kann, die nicht von der DriverEntry-Routine des Miniporttreibers bereitgestellt wurden.

Again

Wird nicht verwendet.

Rückgabewert

VIRTUAL_HW_FIND_ADAPTER muss einen der folgenden status Werte zurückgeben:

Rückgabecode Beschreibung
SP_RETURN_FOUND Es wurde ein unterstützter HBA gefunden, und die HBA-relevanten Konfigurationsinformationen wurden erfolgreich ermittelt und in der PORT_CONFIGURATION_INFORMATION-Struktur festgelegt.
SP_RETURN_ERROR Es wurde ein HBA gefunden, aber beim Abrufen der Konfigurationsinformationen ist ein Fehler aufgetreten. Wenn möglich, sollte ein solcher Fehler mit ScsiPortLogError protokolliert werden.
SP_RETURN_BAD_CONFIG Die angegebenen Konfigurationsinformationen waren für den Adapter ungültig.
SP_RETURN_NOT_FOUND Für die bereitgestellten Konfigurationsinformationen wurde kein unterstützter HBA gefunden.

Hinweise

Das Feld VirtualDevice in der Konfigurationsinformationsstruktur muss auf TRUE festgelegt werden. Andere Felder können nach Bedarf festgelegt werden.

Der Porttreiber ruft den VIRTUAL_HW_FIND_ADAPTER des virtuellen Storport-Miniports unter PASSIVE_LEVEL auf.

Der Name VirtualHwStorFindAdapter ist Platzhaltertext für den tatsächlichen Routinenamen. Der eigentliche Prototyp dieser Routine wird in Srb.h wie folgt definiert:

typedef
ULONG
VIRTUAL_HW_FIND_ADAPTER (
  _In_ PVOID  DeviceExtension,
  _In_ PVOID  HwContext,
  _In_ PVOID  BusInformation,
  _In_ PVOID  LowerDevice,
  _In_ PCHAR  ArgumentString,
  _Inout_ PPORT_CONFIGURATION_INFORMATION  ConfigInfo,
  _Out_ PBOOLEAN Again
  );

Beispiele

Um eine VIRTUAL_HW_FIND_ADAPTER Rückruffunktion zu definieren, müssen Sie zunächst eine Funktionsdeklaration bereitstellen, die den Typ der von Ihnen definierten Rückruffunktion angibt. Windows bietet eine Reihe von Rückruffunktionstypen für Treiber. Das Deklarieren einer Funktion mithilfe der Rückruffunktionstypen hilft der Codeanalyse für Treiber, der statischen Treiberüberprüfung (Static Driver Verifier , SDV) und anderen Überprüfungstools, Fehler zu finden, und es ist eine Anforderung zum Schreiben von Treibern für das Windows-Betriebssystem.

Um beispielsweise eine VIRTUAL_HW_FIND_ADAPTER Rückrufroutine namens MyVirtualHwFindAdapter zu definieren, verwenden Sie den typ VIRTUAL_HW_FIND_ADAPTER , wie in diesem Codebeispiel gezeigt:

VIRTUAL_HW_FIND_ADAPTER MyVirtualHwFindAdapter;

Implementieren Sie dann Ihre Rückrufroutine wie folgt:

_Use_decl_annotations_
ULONG
MyVirtualHwFindAdapter (
  _In_ PVOID  DeviceExtension,
  _In_ PVOID  HwContext,
  _In_ PVOID  BusInformation,
  _In_ PVOID  LowerDevice,
  _In_ PCHAR  ArgumentString,
  _Inout_ PPORT_CONFIGURATION_INFORMATION  ConfigInfo,
  _Out_ PBOOLEAN Again
  );
  {
      ...
  }

Der VIRTUAL_HW_FIND_ADAPTER Funktionstyp ist in der Headerdatei Storport.h definiert. Um Fehler beim Ausführen der Codeanalysetools genauer zu identifizieren, fügen Sie der Funktionsdefinition die Use_decl_annotations Anmerkung hinzu. Die Use_decl_annotations Anmerkung stellt sicher, dass die Anmerkungen verwendet werden, die auf den VIRTUAL_HW_FIND_ADAPTER Funktionstyp in der Headerdatei angewendet werden. Weitere Informationen zu den Anforderungen für Funktionsdeklarationen finden Sie unter Deklarieren von Funktionen mithilfe von Funktionsrollentypen für Storport-Treiber. Informationen zu Use_decl_annotations finden Sie unter Verhalten von Funktionen mit Anmerkungen.

Anforderungen

Anforderung Wert
Zielplattform Universell
Header storport.h (einschließlich Storport.h)

Weitere Informationen

HwStorFindAdapter

PORT_CONFIGURATION_INFORMATION

ScsiPortLogError

VIRTUAL_HW_INITIALIZATION_DATA