Freigeben über


WdfDmaTransactionSetDeviceAddressOffset-Funktion (wdfdmatransaction.h)

[Gilt nur für KMDF]

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

Syntax

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

Die Parameter

[in] DmaTransaction

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

[in] Offset

Der Offset des Registers aus dem in WDF_DMA_SYSTEM_PROFILE_CONFIGangegebenen DeviceAddress- bis zu dem DMA ausgeführt werden soll.

Rückgabewert

Nichts

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 diese Methode verwenden, um auf mehrere Register innerhalb der Registerdatei eines Geräts zuzugreifen.

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

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

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

Beispiele

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

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ützter Client (Mindestversion) Windows 8
Zielplattform universell
Minimale KMDF-Version 1.11
Kopfzeile wdfdmatransaction.h (include Wdf.h)
Bibliothek Wdf01000.sys (siehe Framework-Bibliotheksversionsverwaltung.)
IRQL <=DISPATCH_LEVEL
DDI-Complianceregeln DriverCreate(kmdf)

Siehe auch

WDF_DMA_SYSTEM_PROFILE_CONFIG