Bagikan melalui


Analisis Kode untuk gambaran umum driver

Windows Driver Kit menyediakan ekstensi khusus driver ke alat Analisis Kode di Microsoft Visual Studio. Analisis Kode untuk Driver mencakup aturan yang hanya berlaku untuk driver, terutama driver mode kernel. Analisis Kode untuk Driver dapat mendeteksi potensi kesalahan dalam kode Anda segera setelah kode dapat dikompilasi.

Penting

Analisis Kode untuk driver tersedia di Windows 24H2 WDK dan EWDK, tetapi disarankan agar diatur untuk dihentikan pada tanggal mendatang.
Ke depannya, CodeQL akan menjadi alat analisis statis utama untuk driver. CodeQL menyediakan bahasa kueri canggih yang memperlakukan kode sebagai database yang akan dikueri, sehingga mudah untuk menulis kueri untuk perilaku, pola, dan lainnya tertentu. Untuk informasi selengkapnya tentang menggunakan CodeQL, lihat CodeQL dan Uji Logo Alat Statis.

Cara kerja alat Analisis Kode

Alat Analisis Kode mencegat panggilan utilitas build ke kompilator standar, Cl.exe dan, sebagai gantinya, menjalankan pengkompilasi intersepsi CL yang menganalisis kode sumber driver dan membuat file log pesan kesalahan dan peringatan. Anda dapat menjalankan alat Analisis Kode dengan sendirinya, atau Anda dapat mengonfigurasi alat Analisis Kode untuk dijalankan saat Anda membangun driver Anda. Saat Anda menjalankan alat Analisis Kode dengan sendirinya (Analisis > Analisis Kode Eksekusi pada Solusi) hasilnya muncul di jendela Laporan Analisis Kode. Saat Anda menjalankan alat Analisis Kode sebagai bagian dari build, pengkompilasi intersepsi CL membuat file log pesan kesalahan dan peringatan lalu memanggil versi standar Cl.exe untuk menghasilkan output build. File objek yang dihasilkan sama dengan yang dihasilkan oleh perintah build standar.

Ketika pengkompilasi penyadapan berjalan, Analisis Kode untuk Driver memeriksa setiap fungsi dalam kode secara independen dan kemudian mensimulasikan eksekusi semua jalur yang mungkin melalui kode, mencari kesalahan driver umum dan praktik pengodean yang tidak bijaksana. Alat Analisis Kode berjalan relatif cepat, bahkan pada driver yang lebih besar, dan laporan yang dihasilkannya secara tepat mengidentifikasi baris kode driver dengan kesalahan yang dicurigai.

Jenis kesalahan Analisis Kode dapat dideteksi

Analisis Kode dapat mendeteksi beberapa jenis kesalahan, termasuk kesalahan dalam kategori berikut:

  • Memori: Potensi kebocoran memori, pointer NULL dereferensi, akses ke memori yang tidak diinisialisasi, penggunaan tumpukan mode kernel yang berlebihan, dan penggunaan tag kumpulan yang tidak tepat.

  • Sumber Daya: Kegagalan untuk merilis sumber daya seperti kunci, sumber daya yang harus dipegang saat memanggil beberapa fungsi, dan sumber daya yang tidak boleh ditahan saat memanggil fungsi lain.

  • Penggunaan fungsi: Kemungkinan penggunaan fungsi tertentu yang salah, argumen fungsi yang tampak salah, kemungkinan ketidakcocokan jenis argumen untuk fungsi yang tidak secara ketat memeriksa jenis, kemungkinan penggunaan fungsi usang tertentu, dan panggilan fungsi pada IRQL yang berpotensi salah.

  • Status floating-point: Kegagalan untuk melindungi status perangkat keras floating-point dalam driver dan mencoba memulihkan status floating-point setelah menyimpannya di IRQL yang berbeda.

  • Aturan prioritas: Kode yang mungkin tidak bereaksi sebagai programmer yang dimaksudkan karena aturan prioritas pemrograman C.

  • Praktik pengodean mode kernel: Praktik pengodean yang dapat menyebabkan kesalahan, seperti memodifikasi struktur daftar deskriptor memori buram (MDL), gagal memeriksa nilai variabel yang ditetapkan oleh fungsi yang disebut, dan menggunakan fungsi manipulasi string C/C++ daripada fungsi string aman yang ditentukan dalam Ntstrsafe.h.

  • Praktik pengkodan khusus driver: Operasi tertentu yang sering menjadi sumber kesalahan dalam driver mode kernel. Misalnya, menyalin seluruh paket permintaan I/O (IRP) tanpa memodifikasi anggota dan menyimpan pointer ke argumen string atau struktur alih-alih menyalin argumen dalam rutinitas DriverEntry.

Peringatan Analisis Kode

Alat Analisis Kode menggunakan model berbasis aturan untuk mengidentifikasi kesalahan dalam program atau kode driver. Setiap aturan dikaitkan dengan peringatan yang dilaporkan jika alat Analisis Kode mendeteksi pelanggaran aturan. Untuk informasi terperinci tentang peringatan khusus driver, lihat Analisis Kode untuk Peringatan Driver. Untuk informasi tentang kumpulan peringatan inti yang dilaporkan alat Analisis Kode di Visual Studio, lihat Peringatan Analisis Kode.

Anotasi

Salah satu kemampuan penting yang disediakan alat Analisis Kode adalah kemampuan untuk membuat anotasi deskripsi fungsi dan beberapa entitas lain dalam kode sumber driver. Alat Analisis Kode memiliki cakupan intra-fungsi; artinya, ia menganalisis interaksi antar fungsi. Tujuan anotasi adalah untuk memberikan ekspresi kontrak yang lebih lengkap antara fungsi panggilan dan yang dipanggil, sehingga alat Analisis Kode dapat memeriksa apakah kontrak terpenuhi. Tujuan lain dari anotasi adalah bahwa mereka memberi tahu siapa pun yang membaca kode bagaimana fungsi harus digunakan dan hasil apa yang dapat diharapkan. Anotasi menyatakan kontrak antarmuka dan tidak mencoba menjelaskan bagaimana kontrak tersebut dicapai. Dalam banyak kasus, hasil dari menjalankan alat Analisis Kode mencerminkan tidak adanya anotasi yang sesuai, dan dengan menambahkan anotasi, peringatan tentang anotasi yang hilang ditekan, dan pemeriksaan tambahan diaktifkan. Untuk informasi selengkapnya, lihat Anotasi SAL 2.0 untuk Driver Windows. Informasi selengkapnya tentang SAL 2.0, lihat Menggunakan Anotasi SAL untuk Mengurangi Cacat Kode C/C++. SAL 2.0 menggantikan SAL 1.0. SAL 2.0 harus digunakan dengan WDK untuk Windows 8. Jika Anda memerlukan informasi tentang SAL 1.0 untuk driver, lihat dokumentasi PREfast untuk Anotasi Driver yang dikirim dengan WDK untuk Windows 7.

Menginterpretasikan hasil

Analisis Kode untuk Driver mudah dijalankan dan berjalan dengan cepat, bahkan pada driver dan program yang sangat besar. Pekerjaan untuk pengembang adalah dalam memeriksa output, menganalisis kesalahan yang terdeteksi alat Analisis Kode, dan membedakan kesalahan pengodean nyata dari kode valid yang disalahartikan alat Analisis Kode.

Untuk referensi komprehensif yang menjelaskan setiap peringatan yang mungkin dideteksi alat Analisis Kode, lihat Analisis Kode untuk Peringatan Driver. Untuk informasi tentang kumpulan peringatan inti yang dilaporkan alat Analisis Kode di Visual Studio, lihat Peringatan Analisis Kode.

Mengatasi peringatan analisis kode biasanya melibatkan pembaruan kode sumber jika sesuai, atau menambahkan anotasi untuk mengklarifikasi kontrak fungsi. Menambahkan anotasi memungkinkan penganalisis untuk menegakkan kontrak untuk semua penelepon di masa mendatang, dan juga meningkatkan keterbacaan.

Jika Hasil Analisis Kode menunjukkan kesalahan yang Anda tentukan, setelah pemeriksaan yang cermat, tidak valid dan tidak dapat dihindari bahkan dengan penggunaan anotasi, Anda dapat memilih untuk mengecualikan atau menekan peringatan ini. Untuk informasi selengkapnya, lihat Cara menjalankan Analisis Kode untuk driver.

Cara menjalankan Analisis Kode untuk driver

Alat Analisis Kode di Visual Studio

Analisis Kode untuk Peringatan Driver

Peringatan Analisis Kode

Anotasi SAL 2.0 untuk Driver Windows