Freigeben über


ScsiPortGetPhysicalAddress-Funktion (srb.h)

Die ScsiPortGetPhysicalAddress-Routine konvertiert einen angegebenen virtuellen Adressbereich in einen physischen Adressbereich für einen DMA-Vorgang.

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 SCSI_PHYSICAL_ADDRESS ScsiPortGetPhysicalAddress(
  [in]  PVOID               HwDeviceExtension,
  [in]  PSCSI_REQUEST_BLOCK Srb,
  [in]  PVOID               VirtualAddress,
  [out] ULONG               *Length
);

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] Srb

Zeiger auf den SCSI-Anforderungsblock, wenn die zu konvertierende VirtualAddress vom DataBuffer-Member dieses SRB oder möglicherweise aus dem SenseInfoBuffer stammt. Andernfalls muss dieser Parameter NULL sein.

[in] VirtualAddress

Zeiger auf die zu konvertierende virtuelle Basisadresse. Wenn diese virtuelle Adresse innerhalb des Bereichs für einen von SRB bereitgestellten DataBuffer liegt, muss der Aufrufer auch den Srb-Zeiger bereitstellen.

[out] Length

Gibt die Anzahl der zugeordneten Bytes ab der zurückgegebenen physischen Adresse zurück.

Rückgabewert

ScsiPortGetPhysicalAddress gibt die entsprechende physische Adresse für eine bestimmte VirtualAddress zurück. Wenn die angegebene Adresse nicht konvertiert werden kann, wird NULL zurückgegeben.

Hinweise

Miniporttreiber von Bus-master HBAs rufen ScsiPortGetPhysicalAddress auf, um zugeordnete physische Adressbereiche abzurufen, die während DMA-Vorgängen verwendet werden. Beispielsweise kann ScsiPortGetPhysicalAddress verwendet werden, um eine Scatter/Gather-Liste für Datenübertragungen zu erstellen, die seitenübergreifend sind. Beachten Sie, dass die zurückgegebene Länge größer als die Größe des DataBuffers in einem bestimmten SRB sein kann.

Wenn ein Nicht-NULL-Srb übergeben wird, muss sich die VirtualAddress entweder innerhalb des Bereichs des DataBuffer des SRB befinden oder ein Zeiger aus dem SenseInfoBuffer sein. Andernfalls muss sich die angegebene VirtualAddress in der nicht zwischengespeicherten Erweiterung des Miniporttreibers, der SrbExtension oder dem SenseInfoBuffer befinden.

Ein Miniporttreiber kann ScsiPortGetPhysicalAddress aufrufen, um eine Erweiterungsadresse nur zu übersetzen, wenn die DriverEntry-Routine des Miniporttreibers NeedPhysicalAddresses im HW_INITIALIZATION_DATA auf TRUE festgelegt hat, wenn sie ScsiPortInitialize aufgerufen hat.

Aufgrund von Einschränkungen für einige Busse, z. B. ISA, ist nicht garantiert, dass die von dieser Routine zurückgegebene Adresse mit der Adresse übereinstimmt, die von einer analogen externen Routine (z. B. MmGetPhysicalAddress) zurückgegeben wird. Ein Miniporttreiber sollte nur ScsiPortXxx-Routinen aufrufen, um portierbar zu sein.

ScsiPortGetPhysicalAddress verwendet SCSI_PHYSICAL_ADDRESS , um physische Adressen darzustellen.

typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;

Der SCSI_PHYSICAL_ADDRESS Typs ist ein betriebssystemunabhängiger Datentyp, den SCSI-Miniporttreiber verwenden, um entweder eine physische Adresse oder eine busrelative Adresse darzustellen.

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.
 

Anforderungen

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

Weitere Informationen

DriverEntry of SCSI Miniport Driver

HW_INITIALIZATION_DATA (SCSI)

SCSI_REQUEST_BLOCK

ScsiPortGetUncachedExtension

ScsiPortGetVirtualAddress