Freigeben über


ScsiPortGetPhysicalAddress-Funktion (srb.h)

Die ScsiPortGetPhysicalAddress Routine konvertiert einen bestimmten 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 empfehlen wir die Verwendung des Storport-Treibers und Storport Miniport Treibermodelle.
 

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

Zeiger auf den SCSI-Anforderungsblock, wenn die VirtualAddress-, die konvertiert werden sollen, aus dem DataBuffer Member des SRB oder ggf. aus dem SenseInfoBuffer-stammt. Andernfalls muss dieser Parameter NULL-sein.

[in] VirtualAddress

Zeiger auf die virtuelle Basisadresse, die konvertiert werden soll. Wenn diese virtuelle Adresse innerhalb des Bereichs eines von SRB bereitgestellten DataBuffer-liegt, muss der Aufrufer auch den Srb Zeiger bereitstellen.

[out] Length

Gibt die Anzahl der zugeordneten Bytes zurück, beginnend bei der zurückgegebenen physischen Adresse.

Rückgabewert

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

Bemerkungen

Miniporttreiber von BUSmaster-HBAs rufen ScsiPortGetPhysicalAddress auf, um zugeordnete physische Adressbereiche abzurufen, die während DMA-Vorgängen verwendet werden sollen. Beispielsweise können ScsiPortGetPhysicalAddress verwendet werden, um eine Punkt/Gather-Liste für Datenübertragungen zu erstellen, die Seiten umfassen. Beachten Sie, dass die zurückgegebene Length- größer als die Größe des DataBuffer- in einem bestimmten SRB sein kann.

Wenn ein nichtNULLSrb übergeben wird, muss die VirtualAddress- entweder innerhalb des Bereichs der DataBuffer- des SRB liegen oder ein Zeiger aus dem SenseInfoBuffersein. Andernfalls muss sich der angegebene VirtualAddress- in der nicht zwischengespeicherten Erweiterung des Miniporttreibers, der SrbExtensionoder im SenseInfoBuffer-befinden.

Ein Miniporttreiber kann ScsiPortGetPhysicalAddress- aufrufen, um eine Erweiterungsadresse nur zu übersetzen, wenn der DriverEntry Routine des Miniporttreibers NeedPhysicalAddresses auf TRUE im HW_INITIALIZATION_DATA festgelegt wird, wenn ScsiPortInitializeaufgerufen wird.

Aufgrund von Einschränkungen bei einigen Bussen, z. B. ISA, ist die von dieser Routine zurückgegebene Adresse nicht garantiert mit der Adresse, die von einer analogen externen Routine zurückgegeben wird (z. B. MmGetPhysicalAddress). Ein Miniporttreiber sollte nur ScsiPort-Xxx--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 Typ ist ein betriebssystemunabhängiger Datentyp, den SCSI-Miniporttreiber verwenden, um 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 empfehlen wir die Verwendung des Storport-Treibers und Storport Miniport Treibermodelle.
 

Anforderungen

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

Siehe auch

DriverEntry des SCSI-Miniporttreibers

HW_INITIALIZATION_DATA (SCSI)-

SCSI_REQUEST_BLOCK

ScsiPortGetUncachedExtension-

ScsiPortGetVirtualAddress