Bagikan melalui


Aturan NullCheck (wdm)

Aturan NullCheck memverifikasi bahwa nilai NULL di dalam kode driver tidak didereferensikan nanti di driver. Aturan ini melaporkan cacat jika salah satu kondisi ini benar:

  • Ada penugasan NULL yang didereferensikan nanti.
  • Ada global/parameter untuk prosedur dalam driver yang mungkin NULL yang didereferensikan nanti, dan ada pemeriksaan eksplisit di driver yang menunjukkan bahwa nilai awal pointer mungkin NULL.

Dengan pelanggaran aturan NullCheck, pernyataan kode yang paling relevan disorot di panel pohon jejak. Untuk informasi selengkapnya tentang bekerja dengan output laporan, lihat Laporan Pemverifikasi Driver Statis dan Memahami Penampil Jejak.

Contoh Struktur

Cuplikan kode ini menunjukkan penggunaan struktur yang tepat.

//Rule does not fail
typedef struct _B { 
    int *f; 
} B;
void GoodStruc(B *x) {
    B *y = x;
    y->f = NULL; //assign NULL
    if (x->f) {
        *(x->f) = 1;
    } //OK
    
}

Cuplikan kode ini menunjukkan penggunaan struktur yang tidak tepat. Kode akan dikompilasi, tetapi akan menghasilkan kesalahan runtime.

//Rule fails
typedef struct _A {
    int *f; 
} A;

void BadStruc(A *x) {
    A *y = x;
    y->f = NULL; //assign NULL
    *(x->f) = 1; //dereferencing NULL
}

Contoh Fungsi

Dalam contoh ini, ada parameter untuk fungsi yang mungkin NULL, yang didereferensikan nanti. Selain itu, ada pemeriksaan eksplisit yang menunjukkan bahwa nilai awal pointer mungkin NULL.

//Rule fails
void Bad(int *x)
{
    *x = 2; //Possibly dereferencing NULL
    if (x != NULL) //checks for null on a parameter
        *x = *x + 1;
}

Dalam contoh ini, tidak ada pelanggaran aturan karena kemungkinan ada prasyarat implisit bahwa parameter tidak diharapkan null.

//Rule does not fail
void Good1(int *x)
{
     *x = 2;
     *x = *x + 1;
}

Dalam contoh kedua ini, ada pemeriksaan eksplisit untuk NULL, setiap kali parameter digunakan.

//Rule does not fail
void Good2(int *x)
{
    if (x != NULL)
        *x = 2; // ok
    if (x != NULL) //checks for null on a parameter
        *x = *x + 1;
}

Model driver: WDM

Cara menguji

Pada waktu kompilasi

Jalankan Pemverifikasi Driver Statis dan tentukan aturan NullCheck .

Gunakan langkah-langkah berikut untuk menjalankan analisis kode Anda:
  1. Siapkan kode Anda (gunakan deklarasi jenis peran).
  2. Jalankan Pemverifikasi Driver Statis.
  3. Lihat dan analisis hasilnya.

Untuk informasi selengkapnya, lihat Menggunakan Pemverifikasi Driver Statis untuk Menemukan Cacat pada Driver.