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

WDF_DMA_SYSTEM_PROFILE_CONFIG