Freigeben über


ScsiPortGetUncachedExtension-Funktion (srb.h)

Die ScsiPortGetUncachedExtension-Routine weist Arbeitsspeicher zu, der sowohl von der CPU als auch von einem Bus-master 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 wird empfohlen, die Modelle Storport-Treiber und Storport-Miniporttreiber zu verwenden.
 

Syntax

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

Parameter

[in] HwDeviceExtension

Zeiger auf die Hardwaregeräteerweiterung. Hierbei handelt es sich um einen HBA-Speicherbereich, den der Porttreiber im Namen des Miniporttreibers ordnet und initialisiert. Miniporttreiber speichern normalerweise HBA-spezifische Informationen in dieser Erweiterung, z. B. den Zustand des HBA und die zugeordneten Zugriffsbereiche des HBA. Dieser Bereich steht dem Miniporttreiber im DeviceExtension-HwDeviceExtension-Member> des HBA-Geräteobjekts unmittelbar nach dem Aufruf von ScsiPortInitialize durch den Miniporttreiber zur Verfügung. Der Porttreiber gibt diesen Arbeitsspeicher frei, wenn er das Gerät entfernt.

[in] ConfigInfo

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

Elemente, die nicht für den HBA relevant sind, z. B. DmaChannel für einen EISA-bus-master-Adapter, müssen unverändert bleiben.

[in] NumberOfBytes

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

Rückgabewert

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

Hinweise

ScsiPortGetUncachedExtension kann nur über die HwScsiFindAdapter-Routine des Miniporttreibers und nur für einen Bus-master-HBA aufgerufen werden. Anrufe von anderen Miniporttreiberroutinen führen zu Systemfehlern oder zu einem falschen Betrieb für den Aufrufer.

Da High-End-Computer über Caches und große Speicher verfügen, muss jeder Arbeitsspeicher, der zwischen einem HBA und der CPU gemeinsam genutzt werden soll, speziell zugewiesen werden. Postfächer oder E/A-Anforderungswarteschlangen im Systemspeicher sind Beispiele für diese Art von freigegebenem Arbeitsspeicher.

Ein Miniporttreiber muss SrbExtensionSize festlegen, bevor ScsiPortGetUncachedExtension aufgerufen wird, um die Größe des Speichers pro Anforderung basierend auf NumberOfPhysicalBreaks zu ändern.

Die HwScsiFindAdapter-Routine kann ScsiPortGetUncachedExtension nur einmal für jeden bus-master HBA aufrufen, den der Miniporttreiber unterstützt.

Um die physische Adresse für die nicht zwischengespeicherte Erweiterung abzurufen, die der HBA verwenden kann, rufen Sie ScsiPortGetPhysicalAddress auf.

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

Anforderungen

Anforderung Wert
Zielplattform Desktop
Kopfzeile srb.h (einschließlich Miniport.h, Scsi.h)
Bibliothek Scsiport.lib

Weitere Informationen

HwScsiFindAdapter

PORT_CONFIGURATION_INFORMATION (SCSI)

ScsiPortGetPhysicalAddress