Freigeben über


WdfDmaTransactionSetDeviceAddressOffset-Funktion (wdfdmatransaction.h)

[Gilt nur für KMDF]

Die WdfDmaTransactionSetDeviceAddressOffset-Methode gibt den Offset des Registers an, auf den der DMA-Systemcontroller beim Ausführen des DMA-Vorgangs zugreift.

Syntax

void WdfDmaTransactionSetDeviceAddressOffset(
  [in] WDFDMATRANSACTION DmaTransaction,
  [in] ULONG             Offset
);

Parameter

[in] DmaTransaction

Ein Handle für ein DMA-Transaktionsobjekt, das die zu ändernde Transaktion angibt.

[in] Offset

Der Offset des Registers von der in WDF_DMA_SYSTEM_PROFILE_CONFIG angegebenen DeviceAddress bis zu oder aus dem DMA ausgeführt werden soll.

Rückgabewert

Keine

Bemerkungen

WdfDmaTransactionSetDeviceAddressOffset muss mit einem DMA-Enabler verwendet werden, der ein DMA-Profil im Systemmodus angibt.

Frameworkbasierte Treiber rufen WdfDmaTransactionSetDeviceAddressOffset nach dem Initialisieren einer DMA-Transaktion und vor der Ausführung auf.

Ein Treiber kann mit dieser Methode auf mehrere Register in der Registrierungsdatei eines Geräts zugreifen.

Beispielsweise kann ein Treiber DMA verwenden, um auf separate Lese- und Schreibregister in der Registrierungsdatei eines Geräts zuzugreifen.

Dazu gibt der Treiber beim Konfigurieren des Enablers die Basisadresse der Registerdatei des Geräts an und legt dann nach Bedarf den Offset des Lese- oder Schreibregisters fest, bevor die Transaktion ausgeführt wird.

Wenn Ihr Treiber diese Methode auf einem früheren Betriebssystem als Windows 8 aufruft, meldet die Überprüfung des Frameworks einen Fehler.

Beispiele

Im folgenden Codebeispiel wird eine DMA-Transaktion initialisiert. Anschließend wird der Offset des Registers festgelegt, auf den der System-DMA-Controller zugreift, stellt eine Rückrufroutine für den Übertragungsabschluss bereit und führt die DMA-Transaktion aus.

status = WdfDmaTransactionInitialize(
                                     RequestContext->DmaTransaction,
                                     EvtProgramDma,
                                     direction,
                                     mdl,
                                     startingVa,
                                     length
                                     );

if(!NT_SUCCESS(status)) {
    goto Complete;
}

WdfDmaTransactionSetDeviceAddressOffset(
                                        RequestContext->DmaTransaction,
                                        READ_DATA_REGISTER_OFFSET
                                        );

WdfDmaTransactionSetTransferCompleteCallback(
                                             RequestContext->DmaTransaction,
                                             EvtDmaTransactionDmaTransferComplete,
                                             RequestContext
                                             );

status = WdfDmaTransactionExecute(
                                  RequestContext->DmaTransaction, 
                                  RequestContext );

if(!NT_SUCCESS(status)) {
    goto Complete;
}

return status;

Complete:

WdfDmaTransactionRelease(
                         RequestContext->DmaTransaction
                         );

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 8
Zielplattform Universell
KMDF-Mindestversion 1.11
Kopfzeile wdfdmatransaction.h (include Wdf.h)
Bibliothek Wdf01000.sys (siehe Versionsverwaltung der Frameworkbibliothek).)
IRQL <=DISPATCH_LEVEL
DDI-Complianceregeln DriverCreate(kmdf)

Weitere Informationen

WDF_DMA_SYSTEM_PROFILE_CONFIG