Fungsi MmAdvanceMdl (wdm.h)
Rutinitas MmAdvanceMdl memajukan awal rentang memori virtual MDL dengan jumlah byte yang ditentukan.
Sintaks
NTSTATUS MmAdvanceMdl(
[in, out] PMDL Mdl,
[in] ULONG NumberOfBytes
);
Parameter
[in, out] Mdl
Menentukan MDL yang akan dimajukan.
[in] NumberOfBytes
Menentukan jumlah byte untuk memajukan awal MDL.
Nilai kembali
MmAdvanceMdl mengembalikan kode NTSTATUS. Nilai yang mungkin dikembalikan meliputi:
Menampilkan kode | Deskripsi |
---|---|
|
Rutinitas berhasil memajukan awal MDL. |
|
Pemanggil mencoba untuk memajukan awal MDL melewati akhir. |
Keterangan
MmAdvanceMdl hanya memajukan awal rentang alamat memori virtual. Alamat akhir tetap sama, dan panjang rentang menyusut sesuai.
Driver tingkat yang lebih tinggi dapat menggunakan MmAdvanceMdl dalam kondisi memori rendah ketika driver tingkat bawah hanya dapat menyelesaikan sebagian permintaan baca/tulis. Driver tingkat yang lebih tinggi dapat menggunakan MmAdvanceMdl untuk maju melewati bagian buffer yang telah dibaca atau ditulis, lalu mengeluarkan kembali IRP untuk menyelesaikan permintaan. (Pengemudi tentu saja dapat mengulangi proses ini sebanyak yang diperlukan.)
Jika MmAdvanceMdl maju melewati halaman awal, halaman apa pun yang dilewatkan MmAdvanceMdl segera dibuka kuncinya, dan alamat virtual sistem yang memetakan MDL dan alamat pengguna juga disesuaikan.
Penggunaan MmAdvanceMdl dapat memperlambat performa sistem. Ini harus digunakan hanya ketika semua kondisi berikut menahan:
- Driver tingkat yang lebih tinggi, dalam penanganan I/O-nya sendiri, hanya dapat menyelesaikan permintaan I/O tertentu setelah mentransfer sejumlah data tetap, tetapi driver tingkat bawah hanya mentransfer data dalam jumlah yang lebih kecil. (Contohnya adalah driver transportasi jaringan untuk protokol SPX atau NBT. Setiap protokol mendukung pengiriman pesan yang andal untuk pesan yang lebih besar dari satu bingkai Ethernet. Pengemudi transportasi hanya dapat menyelesaikan permintaan baca untuk pesan seperti itu setelah menyusun ulang pesan dari beberapa bingkai Ethernet.)
- Driver tingkat yang lebih tinggi sudah mencoba dan gagal mengalokasikan MDL baru untuk mentransfer fragmen data dari permintaan I/O yang tidak lengkap. (Jika driver berhasil mengalokasikan MDL baru, driver harus menggunakan MDL dan IoBuildPartialMdl tersebut untuk melakukan permintaan I/O alih-alih MmAdvanceMdl.)
- Driver tingkat yang lebih tinggi harus terus membuat kemajuan, bahkan dalam kondisi memori rendah.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Tersedia di Windows XP dan versi Windows yang lebih baru. |
Target Platform | Universal |
Header | wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h) |
Pustaka | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <=DISPATCH_LEVEL |
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