Fungsi IsBadWritePtr (winbase.h)

Memverifikasi bahwa proses panggilan memiliki akses tulis ke rentang memori yang ditentukan.

Penting Fungsi ini usang dan tidak boleh digunakan. Terlepas dari namanya, itu tidak menjamin bahwa pointer valid atau bahwa memori yang ditujukan aman untuk digunakan. Untuk informasi selengkapnya, lihat Keterangan di halaman ini.
 

Sintaks

BOOL IsBadWritePtr(
  [in] LPVOID   lp,
  [in] UINT_PTR ucb
);

Parameter

[in] lp

Penunjuk ke byte pertama blok memori.

[in] ucb

Ukuran blok memori, dalam byte. Jika parameter ini nol, nilai yang dikembalikan adalah nol.

Menampilkan nilai

Jika proses panggilan memiliki akses tulis ke semua byte dalam rentang memori yang ditentukan, nilai yang dikembalikan adalah nol.

Jika proses panggilan tidak memiliki akses tulis ke semua byte dalam rentang memori yang ditentukan, nilai yang dikembalikan bukan nol.

Jika aplikasi dijalankan di bawah debugger dan prosesnya tidak memiliki akses tulis ke semua byte dalam rentang memori yang ditentukan, fungsi menyebabkan kemungkinan pertama STATUS_ACCESS_VIOLATION pengecualian. Debugger dapat dikonfigurasi untuk memutuskan kondisi ini. Setelah melanjutkan eksekusi proses dalam debugger, fungsi berlanjut seperti biasa dan mengembalikan nilai bukan nol Perilaku ini dirancang dan berfungsi sebagai bantuan penelusuran kesalahan.

Keterangan

Fungsi ini biasanya digunakan saat bekerja dengan pointer yang dikembalikan dari pustaka pihak ketiga, di mana Anda tidak dapat menentukan perilaku manajemen memori di DLL pihak ketiga.

Utas dalam suatu proses diharapkan untuk bekerja sama sia-sia sehingga seseorang tidak akan membebaskan memori yang dibutuhkan yang lain. Penggunaan fungsi ini tidak meniadakan kebutuhan untuk melakukan ini. Jika ini tidak dilakukan, aplikasi mungkin gagal dengan cara yang tidak dapat diprediksi.

Dereferensi pointer yang berpotensi tidak valid dapat menonaktifkan ekspansi tumpukan di utas lain. Utas yang menghabiskan tumpukannya, ketika ekspansi tumpukan telah dinonaktifkan, menghasilkan penghentian segera proses induk, tanpa jendela kesalahan pop-up atau informasi diagnostik.

Jika proses panggilan memiliki akses tulis ke beberapa, tetapi tidak semua, dari byte dalam rentang memori yang ditentukan, nilai yang dikembalikan bukan nol.

Dalam lingkungan multitugas preemptive, dimungkinkan bagi beberapa utas lain untuk mengubah akses proses ke memori yang sedang diuji. Bahkan ketika fungsi menunjukkan bahwa proses memiliki akses tulis ke memori yang ditentukan, Anda harus menggunakan penanganan pengecualian terstruktur saat mencoba mengakses memori. Penggunaan penanganan pengecualian terstruktur memungkinkan sistem untuk memberi tahu proses jika terjadi pengecualian pelanggaran akses, memberikan proses kesempatan untuk menangani pengecualian.

IsBadWritePtr tidak aman multithread. Untuk menggunakannya dengan benar pada pointer yang dibagikan oleh beberapa utas, sebut saja di dalam wilayah kode penting yang hanya memungkinkan satu utas untuk mengakses memori yang sedang diperiksa. Gunakan objek tingkat sistem operasi seperti bagian penting atau mutex atau fungsi yang saling dikunci untuk membuat wilayah kode penting.

Persyaratan

   
Klien minimum yang didukung Windows XP [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2003 [hanya aplikasi desktop]
Target Platform Windows
Header winbase.h (termasuk Windows.h)
Pustaka Kernel32.lib
DLL Kernel32.dll

Lihat juga

IsBadCodePtr

IsBadReadPtr

IsBadStringPtr