Freigeben über


ScsiPortGetUncachedExtension-Funktion (srb.h)

Die ScsiPortGetUncachedExtension Routine weist Arbeitsspeicher zu, der sowohl von der CPU als auch von einem Busmaster-HBA für DMA oder für freigegebene Daten verwendet werden kann.

Hinweis Der SCSI-Porttreiber und die SCSI-Miniporttreibermodelle können in Zukunft geändert oder nicht mehr verfügbar sein. Stattdessen empfehlen wir die Verwendung des Storport-Treibers und Storport Miniport Treibermodelle.
 

Syntax

SCSIPORT_API PVOID ScsiPortGetUncachedExtension(
  [in] PVOID                           HwDeviceExtension,
  [in] PPORT_CONFIGURATION_INFORMATION ConfigInfo,
  [in] ULONG                           NumberOfBytes
);

Parameter

[in] HwDeviceExtension

Zeiger auf die Hardwaregeräteerweiterung. Dies ist ein Speicherbereich pro HBA, den der Porttreiber im Namen des Miniporttreibers zuordnet und initialisiert. Miniporttreiber speichern in der Regel HBA-spezifische Informationen in dieser Erweiterung, z. B. den Zustand der HBA und die zugeordneten Zugriffsbereiche der HBA. Dieser Bereich steht dem Miniporttreiber im DeviceExtension->HwDeviceExtension Mitglied des Geräteobjekts der HBA unmittelbar nach dem Aufruf ScsiPortInitializezur Verfügung. Der Porttreiber gibt diesen Speicher frei, wenn es das Gerät entfernt.

[in] ConfigInfo

Gibt Informationen zu den DMA-Funktionen der HBA an. Die folgenden Member müssen ausgefüllt werden: DmaChannel oder DmaPort, DmaWidth, DmaSpeed, MaximumTransferLength, ScatterGather, Master to TRUE, NumberOfPhysicalBreaks, AdapterInterfaceType, Dma32BitAddresses, SystemIoBusNumber, AutoRequestSense, und SrbExtensionSize.

Elemente, die nicht für die HBA relevant sind, wie z. B. DmaChannel- für einen EISA-Busmasteradapter, müssen wie folgt verbleiben.

[in] NumberOfBytes

Gibt die Größe in Bytes der nicht zwischengespeicherten Erweiterung an, die zugewiesen werden soll. Treiber in Windows XP und früheren Betriebssystemen dürfen nicht mehr als 100 KB nicht zwischengespeicherte Erweiterungen zuweisen, und wenn sie an E/A-Vorgängen an der Ruhezustandsdatei oder der Absturzabbilddatei teilnehmen, müssen sie die Menge der nicht zwischengespeicherten Erweiterung begrenzen, die sie unter 32 KB zuordnen.

Rückgabewert

ScsiPortGetUncachedExtension gibt einen virtuellen Adresszeiger auf die nicht zwischengespeicherte Erweiterung zurück. Wenn der angeforderte Speicher nicht zugeordnet werden kann, wird NULL-zurückgegeben.

Bemerkungen

ScsiPortGetUncachedExtension- kann nur von der HwScsiFindAdapter Routine des Miniporttreibers und nur für einen Busmaster-HBA aufgerufen werden. Anrufe von anderen Miniporttreiberroutinen führen zu Systemfehlern oder falschen Vorgängen für den Anrufer.

Da High-End-Computer Caches und große Speicher aufweisen, muss jeder Speicher, der zwischen einer HBA und der CPU gemeinsam genutzt werden muss, speziell zugeordnet werden. Postfächer oder E/A-Anforderungswarteschlangen im Systemspeicher sind Beispiele für diesen Typ freigegebenen Arbeitsspeicher.

Ein Miniporttreiber muss SrbExtensionSize festlegen. vor dem Aufrufen ScsiPortGetUncachedExtension, um die Größe des Speichers pro Anforderung basierend auf NumberOfPhysicalBreakszu ändern.

Die HwScsiFindAdapter- Routine kann ScsiPortGetUncachedExtension- nur einmal für jeden vom Miniporttreiber unterstützten Busmaster-HBA aufrufen.

Rufen Sie ScsiPortGetPhysicalAddressauf, um die physische Adresse für die nicht zwischengespeicherte Erweiterung abzurufen, die von der HBA verwendet werden kann.

Der ScsiPort-Treiber gibt den von ScsiPortGetUncachedExtension zugewiesenen Speicher frei, wenn das Adaptergerät beendet wird.

Anforderungen

Anforderung Wert
Zielplattform- Desktop
Header- srb.h (include Miniport.h, Scsi.h)
Library Scsiport.lib

Siehe auch

HwScsiFindAdapter-

PORT_CONFIGURATION_INFORMATION (SCSI)-

ScsiPortGetPhysicalAddress