Fungsi ProbeForRead (wdm.h)
ProbeForRead rutin memeriksa bahwa buffer mode pengguna benar-benar berada di bagian pengguna dari ruang alamat, dan diselaraskan dengan benar.
Sintaks
void ProbeForRead(
[in] const volatile VOID *Address,
[in] SIZE_T Length,
[in] ULONG Alignment
);
Parameter
[in] Address
Menentukan awal buffer mode pengguna.
[in] Length
Menentukan panjang, dalam byte, dari buffer mode pengguna.
[in] Alignment
Menentukan perataan yang diperlukan, dalam byte, dari awal buffer mode pengguna.
Nilai kembali
Tidak ada
Keterangan
Jika rentang memori yang ditentukan tidak berada dalam rentang alamat mode pengguna, ProbeForRead akan menaikkan pengecualian STATUS_ACCESS_VIOLATION. Jika awal rentang alamat tidak diselaraskan pada batas byte yang ditentukan oleh Perataan, ProbeForRead akan menaikkan pengecualian STATUS_DATATYPE_MISALIGNMENT.
Driver mode kernel harus menggunakan ProbeForRead untuk memvalidasi akses baca ke buffer yang dialokasikan di ruang pengguna. Ini paling umum digunakan selama I/O METHOD_NEITHER untuk memvalidasi buffer pengguna yang ditujukkan oleh Irp -> UserBuffer.
Driver harus memanggil ProbeForRead di dalam blok coba/kecuali . Jika rutinitas menimbulkan pengecualian, driver harus menyelesaikan IRP dengan kesalahan yang sesuai. Perhatikan bahwa akses berikutnya oleh driver ke buffer mode pengguna juga harus dienkapsulasi dalam blok coba/kecuali : aplikasi berbahaya dapat memiliki utas lain yang menghapus, mengganti, atau mengubah perlindungan rentang alamat pengguna kapan saja (bahkan setelah atau selama panggilan ke ProbeForRead atau ProbeForWrite). Untuk informasi selengkapnya, lihat Menangani Pengecualian.
Jangan gunakan rutinitas ini pada alamat mode kernel; itu akan memunculkan pengecualian.
Jika bidang Irp-RequestorMode> = KernelMode, bidang Irp-AssociatedIrp.SystemBuffer> dan Irp-UserBuffer> tidak berisi alamat mode pengguna, dan panggilan ke ProbeForRead untuk memeriksa buffer yang diarahkan oleh salah satu bidang akan menimbulkan pengecualian.
Jika Panjang = 0, ProbeForRead tidak melakukan pemeriksaan alamat. Dalam hal ini, rutinitas tidak menimbulkan pengecualian untuk alamat yang tidak sejajar atau berada di luar rentang alamat pengguna yang valid.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Tersedia dimulai dengan Windows 2000. |
Target Platform | Universal |
Header | wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h) |
Pustaka | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
Aturan kepatuhan DDI | HwStorPortProhibitedDDIs(storport), IrqlExApcLte2(wdm) |