Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
[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) |