Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Sistem operasi menggunakan penanganan pengecualian terstruktur untuk menandakan jenis kesalahan tertentu. Rutinitas yang dipanggil oleh driver dapat menimbulkan pengecualian yang harus ditangani driver.
Sistem menjebak jenis pengecualian umum berikut:
Kesalahan atau perangkap yang ditentukan perangkat keras, seperti,
- Pelanggaran akses (lihat di bawah)
- Ketidakselarasan jenis data (seperti entitas 16-bit yang selaras pada batas byte ganjil)
- Instruksi ilegal dan istimewa
- Urutan kunci tidak valid (mencoba menjalankan urutan instruksi yang tidak valid dalam bagian kode yang saling terkunci)
- Pembagian bilangan bulat dengan nol dan kelebihan kapasitas.
- Pembagian floating-point dengan nol, luapan, keluapan negatif, dan operand yang ditentukan
- Titik henti dan eksekusi langkah per langkah (untuk mendukung alat debug)
Pengecualian yang ditentukan perangkat lunak sistem, seperti,
- Pelanggaran halaman penjagaan (mencoba memuat atau menyimpan data dari atau ke suatu lokasi di dalam halaman penjagaan)
- Kesalahan baca halaman (mencoba membaca halaman ke dalam memori dan mengalami kesalahan I/O bersamaan)
Pelanggaran akses adalah upaya untuk melakukan operasi pada halaman yang tidak diizinkan di bawah pengaturan perlindungan halaman saat ini. Pelanggaran akses terjadi dalam situasi berikut:
Operasi baca atau tulis yang tidak valid, seperti menulis ke halaman yang hanya bisa dibaca.
Untuk mengakses memori di luar batas ruang alamat program saat ini (dikenal sebagai pelanggaran batas).
Untuk mengakses halaman yang saat ini tersedia namun didedikasikan untuk penggunaan komponen sistem. Misalnya, kode mode pengguna tidak diizinkan mengakses halaman yang digunakan kernel.
Jika sebuah operasi dapat menyebabkan kesalahan, driver harus membungkus operasi tersebut dalam blok try/except. Akses lokasi dalam mode pengguna adalah penyebab umum pengecualian. Misalnya, rutinitas ProbeForWrite memeriksa apakah driver benar-benar dapat menulis ke buffer mode pengguna. Jika tidak dapat, rutinitas menimbulkan pengecualian STATUS_ACCESS_VIOLATION. Dalam contoh kode berikut, driver memanggil ProbeForWrite dalam try/except sehingga dapat menangani pengecualian yang dihasilkan, jika harus terjadi.
try {
...
ProbeForWrite(Buffer, BufferSize, BufferAlignment);
/* Note that any access (not just the probe, which must come first,
* by the way) to Buffer must also be within a try-except.
*/
...
} except (EXCEPTION_EXECUTE_HANDLER) {
/* Error handling code */
...
}
Pengemudi harus menangani pengecualian yang terjadi. Pengecualian yang tidak ditangani menyebabkan sistem memeriksa bug. Driver yang menyebabkan pengecualian dinaikkan harus menanganinya: driver tingkat bawah tidak dapat mengandalkan driver tingkat yang lebih tinggi untuk menangani pengecualian.
Driver dapat langsung meningkatkan pengecualian, dengan menggunakan rutinitas ExRaiseAccessViolation, ExRaiseDatatypeMisalignment, atau ExRaiseStatus . Pengemudi harus menangani pengecualian apa pun yang dihasilkan rutinitas ini.
Berikut ini adalah daftar sebagian rutinitas yang, setidaknya dalam situasi tertentu, dapat menimbulkan pengecualian:
Akses memori ke buffer mode pengguna juga dapat menyebabkan pelanggaran akses. Untuk informasi selengkapnya, lihat Kesalahan dalam Mereferensikan Alamat Ruang Pengguna.
Perhatikan bahwa penanganan pengecualian terstruktur berbeda dari pengecualian C++. Kernel tidak mendukung pengecualian C++.
Untuk informasi selengkapnya tentang penanganan pengecualian terstruktur, lihat Microsoft Windows SDK, dan dokumentasi Visual Studio.