Menggunakan Pemverifikasi Driver Statis untuk Menemukan Cacat pada Driver Windows

Pemverifikasi Driver Statis (SDV) menggunakan serangkaian aturan antarmuka dan model sistem operasi untuk menentukan apakah driver berinteraksi dengan benar dengan sistem operasi Windows. SDV menemukan cacat dalam kode driver yang dapat menunjuk ke potensi bug pada driver.

SDV dapat menganalisis driver mode kernel yang sesuai dengan salah satu model driver berikut: WDM, KMDF, NDIS, atau Storport. Untuk informasi selengkapnya, lihat Driver yang Didukung dan Menentukan apakah Verifier Driver Statis mendukung driver atau pustaka Anda. Selain itu, SDV memberikan dukungan terbatas (seperangkat aturan yang sangat dibatasi yang berfokus pada kesalahan umum seperti dereferensi null) untuk driver yang tidak mengikuti model driver di atas.

Menyiapkan kode sumber Anda

Gunakan langkah-langkah berikut untuk menyiapkan kode Anda untuk analisis.

  1. Mendeklarasikan fungsi yang disediakan driver dengan menggunakan jenis peran fungsi

    SDV mengharuskan fungsi dideklarasikan dengan menggunakan deklarasi jenis peran fungsi. Misalnya, rutinitas DriverEntry harus dideklarasikan dengan menggunakan jenis peran fungsi DRIVER_INITIALIZE:

    DRIVER_INITIALIZE DriverEntry;
    

    Setelah deklarasi, Anda menerapkan (atau menentukan) rutinitas panggilan balik Anda sebagai berikut:

    /
    // Driver initialization routine
    //
    NTSTATUS
      DriverEntry(
        _In_ struct _DRIVER_OBJECT  *DriverObject,
        _In_ PUNICODE_STRING  RegistryPath
        )
      {
          // Function body
      }
    

    Setiap model driver yang didukung memiliki serangkaian jenis peran fungsi untuk fungsi panggilan balik driver dan rutinitas pengiriman. Jenis peran fungsi ini dideklarasikan dalam file header WDK. Misalnya, berikut adalah prototipe fungsi untuk jenis peran DRIVER_INITIALIZE seperti yang muncul di Wdm.h.

    /
    // Define driver initialization routine type.
    //
    _Function_class_(DRIVER_INITIALIZE)
    _IRQL_requires_same_
    typedef
    NTSTATUS
    DRIVER_INITIALIZE (
        _In_ struct _DRIVER_OBJECT *DriverObject,
        _In_ PUNICODE_STRING RegistryPath
        );
    
    typedef DRIVER_INITIALIZE *PDRIVER_INITIALIZE;
    

    Karena jenis peran fungsi sudah ditentukan dalam file header WDK, Anda hanya perlu mendeklarasikan fungsi panggilan balik Anda menjadi jenis tersebut. Dalam hal ini, Anda menyatakan DriverEntry berjenis DRIVER_INITIALIZE. Untuk daftar lengkap jenis peran fungsi untuk model driver, lihat Menggunakan Deklarasi Jenis Peran Fungsi.

  2. Menjalankan Analisis Kode untuk C/C++

    Untuk membantu Anda menentukan apakah kode sumber disiapkan, jalankan alat Analisis Kode di Visual Studio. Alat Analisis Kode memeriksa deklarasi jenis peran fungsi, yang diperlukan SDV. Alat Analisis Kode dapat membantu mengidentifikasi deklarasi fungsi apa pun yang mungkin terlewatkan atau memperingatkan Anda ketika parameter definisi fungsi tidak cocok dengan yang ada di jenis peran fungsi.

    • Buka proyek driver Anda di Visual Studio.
    • Dari menu Build , klik Jalankan Analisis Kode pada Solusi.

    Hasilnya ditampilkan di jendela Analisis Kode . Perbaiki deklarasi fungsi apa pun yang mungkin terlewatkan. Anda juga dapat mengonfigurasi alat Analisis Kode sehingga berjalan setiap kali Anda membangun solusi Anda.

    Tabel berikut menunjukkan beberapa peringatan yang mungkin ditemukan alat Analisis Kode di kode driver Anda. Untuk menjalankan Pemverifikasi Driver Statis, driver Anda harus bebas dari cacat ini.

    Analisis kode untuk Peringatan C/C++ Deskripsi
    C28101 Modul Driver telah menyimpulkan bahwa fungsi saat ini adalah <fungsi jenis> fungsi
    C28022 Kelas fungsi pada fungsi ini tidak cocok dengan kelas fungsi pada typedef yang digunakan untuk menentukan kelas fungsi.
    C28023 Fungsi yang ditetapkan atau diteruskan harus memiliki anotasi _Function_class_ untuk setidaknya satu kelas
    C28024 Pointer fungsi yang ditetapkan dianotasi dengan kelas fungsi, yang tidak terdapat dalam daftar kelas fungsi.
    C28169 Fungsi fungsi <> pengiriman tidak memiliki anotasi _Dispatch_type_
    C28208 Tanda tangan fungsi tidak cocok dengan deklarasi fungsi

Menjalankan Pemverifikasi Driver Statis

  1. Buka file proyek driver Anda (.vcxProj) di Visual Studio. Dari menu Driver , klik Luncurkan Pemverifikasi Driver Statis....

    Ini membuka aplikasi Pemverifikasi Driver Statis, tempat Anda dapat mengontrol, mengonfigurasi, dan menjadwalkan saat Verifier Driver Statis melakukan analisis.

  2. Jika driver Anda menyertakan pustaka, klik tab Pustaka dan klik Tambahkan Pustaka untuk menambahkan pustaka.

    Telusuri ke direktori kode sumber pustaka Anda dan pilih file proyek (.vcxProj). Tambahkan semua pustaka yang disertakan driver Anda. Pustaka harus ditambahkan sebelum SDV menganalisis driver Anda. Saat Anda memulai analisis driver Anda, SDV juga menganalisis pustaka yang belum diproses. Setelah pustaka diproses, pustaka disimpan di cache SDV global. Untuk informasi selengkapnya, lihat Pemrosesan Pustaka di Pemverifikasi Driver Statis

  3. Periksa pengaturan konfigurasi untuk Pemverifikasi Driver Statis. Klik tab Konfigurasikan .

    Konfigurasi Proyek Konfigurasi Proyek menampilkan konfigurasi dan pengaturan platform yang Anda pilih di Visual Studio.

    Sumber daya Dalam kebanyakan kasus, Anda dapat menggunakan pengaturan default. Jika SDV melaporkan Batas Waktu, GiveUp, atau Spaceout, Anda mungkin mencoba menyesuaikan pengaturan ini. Untuk informasi selengkapnya, lihat Rekomendasi untuk Pemecahan Masalah Pemverifikasi Driver Statis.

    Jadwal Pilih waktu mulai untuk verifikasi dimulai. Pengaturan default adalah memulai analisis segera setelah Anda mengklik Mulai pada tab Utama . Tergantung pada ukuran driver dan kompleksitasnya, analisis statis dapat memakan waktu lama untuk dijalankan. Anda mungkin ingin menjadwalkan analisis untuk memulai kapan paling nyaman bagi Anda; misalnya, pada akhir hari.

    Catatan

    ]Pastikan untuk memeriksa rencana manajemen daya komputer Anda untuk memastikan komputer tidak akan masuk ke status tidur selama analisis.

  4. Klik tab Aturan untuk memilih aturan penggunaan API driver mana yang akan diverifikasi saat Anda memulai analisis.

    Verifier Driver Statis mendeteksi jenis driver yang Anda analisis (WDF, WDM, NDIS, atau Storport) dan memilih seperangkat aturan default untuk jenis driver Anda. Jika ini pertama kalinya Anda menjalankan SDV pada driver, Anda harus menjalankan seperangkat aturan default.

    Untuk informasi tentang aturan, lihat Aturan Kepatuhan DDI.

  5. Mulai analisis statis. Klik tab Utama , dan klik Mulai. Saat Anda mengklik Mulai, pesan ditampilkan untuk memberi tahu Anda bahwa analisis statis dijadwalkan dan analisis dapat memakan waktu lama untuk dijalankan. Klik OK untuk melanjutkan. Analisis dimulai pada saat Anda menjadwalkan.

Melihat dan Menganalisis Hasil

Ketika analisis statis berlanjut, SDV melaporkan status analisis. Ketika analisis selesai, SDV melaporkan hasil dan statistik. Jika driver gagal memenuhi aturan penggunaan API, hasilnya dilaporkan sebagai cacat.

Jika terjadi masalah, SDV akan menampilkannya di halaman Peringatan dan Kesalahan . Halaman Properti Driver menampilkan hasil pengujian untuk properti driver tertentu. Pengujian properti driver digunakan untuk mengidentifikasi fitur driver untuk lebih memenuhi syarat analisis. Anda dapat menggunakan hasil Properti Driver untuk mengonfirmasi properti yang diharapkan dan kemampuan driver yang didukung.

Untuk menampilkan cacat tertentu dalam Laporan Pemverifikasi Driver Statis, klik Cacat di panel Hasil . Ini membuka Penampil Jejak, yang menampilkan jejak jalur kode ke pelanggaran aturan. Untuk informasi selengkapnya, lihat Menginterpretasikan Hasil Pemverifikasi Driver Statis.

Catatan

Verifier Driver Statis mempertahankan hasil dan pengaturan dari analisis. Untuk menghapus hasilnya, klik Bersihkan.

Pemecahan Masalah Hasil Pemverifikasi Driver Statis

Jika SDV melaporkan bahwa tidak ada cacat yang ditemukan, periksa tab Utama untuk memastikan bahwa titik masuk terdeteksi. Jika driver tidak mendeklarasikan fungsi dengan menggunakan jenis peran fungsi, SDV tidak akan dapat menganalisis dan menemukan cacat dalam kode driver. Untuk informasi selengkapnya, lihat Menggunakan Deklarasi Jenis Peran Fungsi.

Jika SDV melaporkan waktu habis atau gagal mengembalikan hasil yang berguna, Anda mungkin perlu mengubah beberapa opsi konfigurasi SDV. Untuk informasi selengkapnya tentang cara memecahkan masalah SDV, lihat Rekomendasi untuk Pemecahan Masalah Pemverifikasi Driver Statis.

Menentukan apakah Verifier Driver Statis mendukung driver atau pustaka Anda

Menggunakan Deklarasi Jenis Peran Fungsi

Aturan Pemverifikasi Driver Statis

Alat Analisis Kode