Bagikan melalui


Fungsi IoGetDmaAdapter (wdm.h)

Rutinitas IoGetDmaAdapter mengembalikan penunjuk ke struktur adaptor DMA untuk objek perangkat fisik.

Sintaks

_DMA_ADAPTER * IoGetDmaAdapter(
  [in, optional] PDEVICE_OBJECT      PhysicalDeviceObject,
  [in]           _DEVICE_DESCRIPTION *DeviceDescription,
  [out]          PULONG              NumberOfMapRegisters
);

Parameter

[in, optional] PhysicalDeviceObject

Arahkan ke objek perangkat fisik untuk perangkat yang meminta struktur adaptor DMA.

[in] DeviceDescription

Arahkan ke struktur DEVICE_DESCRIPTION , yang menjelaskan atribut perangkat fisik. Terlepas dari versi yang ditetapkan dalam struktur DEVICE_DESCRIPTION, fungsi ini selalu mengembalikan DMA_ADAPTER->Version == 1.

[out] NumberOfMapRegisters

Pointer ke, pada output, jumlah maksimum register peta yang dapat dialokasikan driver untuk setiap operasi transfer DMA.

Nilai kembali

IoGetDmaAdapter mengembalikan penunjuk ke struktur DMA_ADAPTER , yang berisi pointer ke fungsi yang mendukung operasi DMA yang ditentukan sistem. Jika struktur tidak dapat dialokasikan, rutinitas mengembalikan NULL. Lihat komentar versi di atas dalam deskripsi parameter DeviceDescription .

Keterangan

Sebelum memanggil rutinitas ini, driver harus menginisialisasi nol struktur DEVICE_DESCRIPTION yang diarahkan oleh DeviceDescription lalu menambahkan informasi yang relevan untuk perangkatnya ke struktur ini.

Jika berhasil, nilai yang dikembalikan rutin menunjuk ke struktur DMA_ADAPTER . Struktur ini berisi penunjuk ke struktur DMA_OPERATIONS , yang merupakan tabel penunjuk ke fungsi yang kemudian dapat digunakan driver untuk melakukan operasi DMA. Versi struktur ini yang dikembalikan rutin ditentukan sebagai berikut:

  • Jika driver mengatur anggota Versi struktur DEVICE_DESCRIPTION ke DEVICE_DESCRIPTION_VERSION atau DEVICE_DESCRIPTION_VERSION1, struktur DMA_ADAPTER yang dikembalikan menunjuk ke versi 1 dari struktur DMA_OPERATIONS .

  • Jika driver mengatur Versi = DEVICE_DESCRIPTION_VERSION2, struktur DMA_ADAPTER yang dikembalikan menunjuk ke versi 2 dari struktur DMA_OPERATIONS jika versi 2 didukung; jika tidak, rutinitas mengembalikan NULL. Driver harus memeriksa untuk melihat apakah versi 2 didukung sebelum mencoba menggunakan fungsi versi 2 apa pun.

  • Jika driver mengatur Versi = DEVICE_DESCRIPTION_VERSION3, struktur DMA_ADAPTER yang dikembalikan menunjuk ke versi 3 dari struktur DMA_OPERATIONS jika versi 3 didukung; jika tidak, rutinitas mengembalikan NULL. Driver harus memeriksa untuk melihat apakah versi 3 didukung sebelum mencoba menggunakan fungsi versi 3 apa pun. Versi 3 didukung dimulai dengan Windows 8.

Driver PnP memanggil IoGetDmaAdapter ketika rutinitas AddDevice-nya dipanggil atau ketika menangani permintaan PnP IRP_MN_START_DEVICE untuk perangkat. IRP ini mencakup informasi tentang sumber daya perangkat keras perangkat yang harus disediakan driver dalam struktur DeviceDescription .

Pemanggil menggunakan anggota MaximumLength dalam struktur DeviceDescription untuk menunjukkan jumlah register peta yang optimal yang dapat digunakannya. Manajer I/O akan mencoba mengalokasikan register peta yang cukup untuk mengakomodasi operasi transfer DMA dengan ukuran maksimum ini. Pada output, manajer I/O mengembalikan, dalam parameter NumberOfMapRegisters , jumlah register peta yang dialokasikannya. Driver harus memeriksa nilai yang dikembalikan; tidak ada jaminan driver akan menerima jumlah register peta yang sama dengan yang dimintanya.

Untuk membebaskan objek adaptor, driver harus memanggil PutDmaAdapter melalui pointer yang dikembalikan dalam struktur DMA_ADAPTER .

Seperti yang dijelaskan sebelumnya, IoGetDmaAdapter mengembalikan NULL jika tidak mendukung versi struktur DMA_ADAPTER yang ditentukan oleh DeviceDescription-Version>. Penelepon harus mengandalkan perilaku ini untuk menentukan apakah rutinitas mengembalikan penunjuk ke versi struktur DMA_ADAPTER yang diminta. Saat IoGetDmaAdapter mengembalikan penunjuk ke versi 1 atau versi 2 atau versi 3 dari struktur DMA_ADAPTER , anggota Versi struktur ini selalu diatur ke 1. Dengan demikian, pemanggil tidak dapat menggunakan anggota Versi dari struktur DMA_ADAPTER yang dikembalikan untuk membedakan antara versi 1, 2 dan 3 dari struktur ini.

Persyaratan

Persyaratan Nilai
Target Platform Universal
Header wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h)
Pustaka NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Aturan kepatuhan DDI HwStorPortProhibitedDDIs(storport), IrqlIoPassive5(wdm), PowerIrpDDis(wdm)

Lihat juga

TambahkanDevice

DEVICE_DESCRIPTION

DMA_ADAPTER

DMA_OPERATIONS

IRP_MN_START_DEVICE

PutDmaAdapter