Fungsi WdfDmaTransactionSetDeviceAddressOffset (wdfdmatransaction.h)
[Hanya berlaku untuk KMDF]
Metode WdfDmaTransactionSetDeviceAddressOffset menentukan offset register yang akan diakses pengontrol DMA sistem saat melakukan operasi DMA.
Sintaks
void WdfDmaTransactionSetDeviceAddressOffset(
[in] WDFDMATRANSACTION DmaTransaction,
[in] ULONG Offset
);
Parameter
[in] DmaTransaction
Handel ke objek transaksi DMA yang menentukan transaksi yang akan dimodifikasi.
[in] Offset
Offset register, dari DeviceAddress yang ditentukan dalam WDF_DMA_SYSTEM_PROFILE_CONFIG, ke atau dari mana DMA harus dilakukan.
Nilai kembali
Tidak ada
Keterangan
WdfDmaTransactionSetDeviceAddressOffset harus digunakan dengan pengaktif DMA yang menentukan profil DMA mode sistem.
Driver berbasis kerangka kerja memanggil WdfDmaTransactionSetDeviceAddressOffset setelah menginisialisasi transaksi DMA dan sebelum mengeksekusinya.
Driver dapat menggunakan metode ini untuk mengakses beberapa register dalam file register perangkat.
Misalnya, driver mungkin menggunakan DMA untuk mengakses register baca dan tulis terpisah dalam file register perangkat.
Untuk melakukannya, driver menentukan alamat dasar file register perangkat saat mengonfigurasi pengaktif, lalu mengatur offset register baca atau tulis seperlunya sebelum menjalankan transaksi.
Jika driver Anda memanggil metode ini pada sistem operasi yang lebih awal dari Windows 8, pemverifikasi kerangka kerja melaporkan kesalahan.
Contoh
Contoh kode berikut menginisialisasi transaksi DMA. Kemudian mengatur offset register yang akan diakses oleh pengontrol DMA sistem, menyediakan rutinitas panggilan balik penyelesaian transfer, dan menjalankan transaksi DMA.
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
);
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows 8 |
Target Platform | Universal |
Versi KMDF minimum | 1.11 |
Header | wdfdmatransaction.h (termasuk Wdf.h) |
Pustaka | Wdf01000.sys (lihat Penerapan Versi Pustaka Kerangka Kerja.) |
IRQL | <=DISPATCH_LEVEL |
Aturan kepatuhan DDI | DriverCreate(kmdf) |
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk