Bagikan melalui


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)

Lihat juga

ProbeForWrite