Bagikan melalui


NDK_FN_BUILD_LAM fungsi panggilan balik (ndkpi.h)

Fungsi NdkBuildLam (NDK_FN_BUILD_LAM) mendapatkan pemetaan alamat logis adaptor (LAM) dari penyedia NDK untuk wilayah memori yang hampir berdampingan.

Sintaks

NDK_FN_BUILD_LAM NdkFnBuildLam;

NTSTATUS NdkFnBuildLam(
  [in]           NDK_ADAPTER *pNdkAdapter,
  [in]           MDL *Mdl,
  [in]           SIZE_T Length,
  [in]           NDK_FN_REQUEST_COMPLETION RequestCompletion,
  [in, optional] PVOID RequestContext,
                 NDK_LOGICAL_ADDRESS_MAPPING *pNdkLAM,
                 ULONG *pLAMSize,
  [out]          ULONG *pFBO
)
{...}

Parameter

[in] pNdkAdapter

Penunjuk ke objek adaptor NDK (NDK_ADAPTER).

[in] Mdl

Daftar deskriptor memori (MDL) atau rantai MDL. Bagian rantai MDL dari alamat virtual awal hingga jumlah byte dalam parameter Panjang harus mewakili wilayah memori yang hampir berdampingan.

[in] Length

Jumlah byte yang akan dipetakan mulai dari alamat virtual MDL pertama. Alamat virtual MDL dapat diperoleh dengan makro MmGetMdlVirtualAddress . Panjang tidak boleh melebihi jumlah total byte yang diwakili oleh rantai MDL.

[in] RequestCompletion

Penunjuk ke fungsi panggilan balik NdkRequestCompletion (NDK_FN_REQUEST_COMPLETION).

[in, optional] RequestContext

Nilai konteks bagi penyedia untuk diteruskan kembali ke fungsi panggilan balik NdkRequestCompletion yang ditentukan dalam parameter RequestCompletion .

pNdkLAM

Penunjuk ke buffer yang akan menyimpan struktur NDK_LOGICAL_ADDRESS_MAPPING yang berisi array halaman adaptor. Array halaman adapter disimpan di anggota AdapterPageArray dan anggota AdapterPageCount berisi jumlah elemen halaman adaptor.

pLAMSize

Ukuran, dalam byte, buffer pada parameter pNdkLAM untuk input, atau jumlah byte aktual yang ditulis untuk output.

[out] pFBO

Nilai byte offset (FBO) pertama dikembalikan di lokasi ini. FBO adalah offset awal dalam halaman adaptor pertama.

Nilai kembali

Fungsi NdkBuildLam mengembalikan salah satu kode NTSTATUS berikut.

Menampilkan kode Deskripsi
STATUS_SUCCESS
Operasi berhasil diselesaikan.
STATUS_PENDING
Permintaan tertunda, fungsi yang ditentukan pada parameter RequestCompletion (NDK_FN_REQUEST_COMPLETION) akan dipanggil ketika operasi build LAM selesai.
STATUS_INVALID_PARAMETER
Bagian rantai MDL dari alamat virtual awal hingga jumlah byte yang ditentukan dalam parameter Panjang tidak mewakili wilayah memori yang hampir berdampingan.
STATUS_INSUFFICIENT_RESOURCES
Permintaan gagal karena sumber daya yang tidak mencukup.
Penting Permintaan dapat gagal sebaris serta secara asinkron dengan kode status ini.
 
STATUS_BUFFER_TOO_SMALL
Ukuran buffer yang ditunjukkan oleh parameter *pLAMSize terlalu kecil untuk menahan LAM. Dalam hal ini, nilai *pLAMSize diperbarui dengan ukuran buffer yang diperlukan.
Kode status lainnya
Terjadi kesalahan.

Keterangan

Bagian dari rantai MDL dari alamat virtual awal hingga jumlah byte yang ditentukan dalam parameter Panjang harus mewakili wilayah memori yang hampir berdampingan. Jika tidak, penyedia NDK harus gagal dalam permintaan. Merupakan tanggung jawab konsumen NDK untuk memastikan bahwa rantai MDL terkunci. Artinya, halaman perubahan MDL disematkan dalam memori fisik.

Penting Konsumen NDK tidak boleh menggunakan rantai MDL saat NdkBuildLam tertunda penyelesaiannya.
 
Adaptor mengakses memori fisik dengan alamat logis. Ini mirip dengan CPU yang mengakses memori fisik dengan alamat virtual. Jika konsumen NDK akan menggunakan halaman memori fisik secara langsung sebagai buffer data lokal dalam permintaan kirim, terima, baca, atau tulis, konsumen harus mendapatkan pemetaan alamat logis adaptor NDK dari penyedia NDK dan menggunakan alamat logis daripada alamat fisik. Demikian pula, konsumen NDK juga harus menggunakan alamat logis dalam permintaan daftar cepat.

Konsumen NDK dapat memanggil fungsi NdkGetPrivilegedMemoryRegionToken (NDK_FN_GET_PRIVILEGED_MEMORY_REGION_TOKEN) untuk mendapatkan token wilayah memori istimewa dari penyedia NDK.

Semua halaman adaptor yang dikembalikan oleh penyedia NDK harus memiliki panjang PAGE_SIZE byte, di mana PAGE_SIZE adalah ukuran halaman memori yang didukung oleh platform host seperti yang didefinisikan dalam wdm.h.

Penyedia harus memperlakukan nilai alamat virtual yang dikembalikan makro MmGetMdlVirtualAddress untuk MDL sebagai indeks ke awal wilayah memori yang dipetakan. Penyedia tidak boleh menggunakan nilai alamat virtual sebagai alamat virtual yang valid untuk membaca atau menulis konten buffer.

Jika penyedia memiliki kesalahan saat memproses permintaan NdkBuildLam , penyedia harus merilis pemetaan parsial yang dibangunnya secara internal sejauh ini sebelum menyelesaikan permintaan dengan kegagalan.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Tidak ada yang didukung, Didukung di NDIS 6.30 dan yang lebih baru.
Server minimum yang didukung Windows Server 2012
Target Platform Windows
Header ndkpi.h (termasuk Ndkpi.h)
IRQL <=DISPATCH_LEVEL

Lihat juga

MmGetMdlVirtualAddress

Persyaratan Seumur Hidup Objek NDKPI

NDK_ADAPTER

NDK_ADAPTER_DISPATCH

NDK_FN_GET_PRIVILEGED_MEMORY_REGION_TOKEN

NDK_FN_RELEASE_LAM

NDK_FN_REQUEST_COMPLETION

NDK_LOGICAL_ADDRESS_MAPPING