Bagikan melalui


Anotasi SAL 2.0 untuk driver Windows

Bahasa Anotasi Kode Sumber (SAL) Microsoft menyertakan anotasi yang khusus untuk analisis driver Windows dan kode kernel terkait. Bahasa anotasi menyediakan cara menjelaskan properti fungsi, parameter, nilai pengembalian, struktur, dan bidang struktur. Anotasi seperti komentar yang Anda tambahkan ke kode Anda dan diabaikan oleh pengompilasi tetapi digunakan oleh alat analisis statis. Penggunaan anotasi membantu meningkatkan efektivitas pengembang, membantu meningkatkan akurasi hasil dari analisis statis, dan memungkinkan alat untuk lebih menentukan apakah bug tertentu ada. Anotasi driver tidak ditujukan untuk digunakan dalam kode yang tidak terkait dengan driver atau kernel. Anotasi driver didefinisikan dalam Driverspecs.h.

Nota Windows 8 memperkenalkan SAL 2.0, yang menggantikan SAL 1.0. Untuk informasi 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 Windows Driver Kit (WDK) 8 untuk Windows 8. Jika Anda memerlukan informasi tentang SAL 1.0 untuk driver, lihat dokumentasi yang dikirimkan dengan WDK untuk Windows 7.

Anotasi IRQL

Gunakan anotasi IRQL untuk menentukan rentang tingkat IRQL tempat fungsi harus berjalan. Anotasi IRQL membantu alat analisis kode untuk menemukan kesalahan dengan lebih akurat.

_IRQL_requires_max_(value)

_IRQL_requires_min_(value)

_IRQL_raises_(value)

_IRQL_requires_(value)

_IRQL_raises_(value)

_IRQL_saves_

_IRQL_restores_

_IRQL_saves_global_(kind, param)

_IRQL_restores_global_(kind, param)

_IRQL_always_function_min_(value)

_IRQL_always_function_max_(value)

_IRQL_requires_same_

_IRQL_is_cancel_ - Gunakan anotasi _IRQL_is_cancel untuk membantu memastikan perilaku fungsi panggilan balik DRIVER_CANCEL yang benar.

Anotasi titik mengambang untuk pengemudi

_Kernel_float_saved_

_Kernel_float_restored_

_Kernel_float_used_

Gunakan floating point annotations untuk driver untuk membantu alat analisis kode mendeteksi penggunaan floating point dalam kode mode kernel dan untuk melaporkan kesalahan jika status floating point tidak dilindungi dengan benar.

anotasi DO_DEVICE_INITIALIZING

_Kernel_clear_do_init_

Gunakan anotasi DO_DEVICE_INITIALIZING untuk menentukan apakah fungsi anotasi diharapkan menghapus bit DO_DEVICE_INITIALIZING di bidang Bendera objek perangkat.

anotasi Kernel_IoGetDmaAdapter

_Kernel_IoGetDmaAdapter_

Gunakan anotasi Kernel_IoGetDmaAdapter untuk mengarahkan alat analisis kode untuk mencari penyalahgunaan pointer DMA.

Anotasi untuk operand yang terkunci

_Interlocked_operand_

Gunakan Anotasi untuk operand yang saling mengunci untuk parameter fungsi untuk mengidentifikasinya sebagai operand yang saling mengunci. Sejumlah fungsi menggunakan alamat variabel sebagai salah satu parameter mereka yang harus diakses dengan menggunakan instruksi prosesor interlok. Ini adalah instruksi atom baca-melalui cache, dan jika operan digunakan dengan tidak benar, ini dapat menghasilkan bug yang sangat halus.

Anotasi untuk rutin penugasan driver

_Dispatch_type_

Gunakan Anotasi untuk Rutinitas Pengiriman Driver saat Anda mendeklarasikan rutinitas pengiriman driver WDM. Untuk informasi selengkapnya, lihat Mendeklarasikan Fungsi Menggunakan Jenis Peran Fungsi untuk Driver WDM dan Anotasi Rutinitas Pengiriman Driver.

Panggilan balik pra-operasi Minifilter Sistem File dengan anotasi _Flt_CompletionContext_Outptr_

_Flt_CompletionContext_Outptr_

Gunakan anotasi _Flt_CompletionContext_Outptr_ panggilan balik pra-operasi Minifilter Sistem File saat Anda mendeklarasikan fungsi panggilan balik pra-operasi Minifilter Sistem File PFLT_PRE_OPERATION_CALLBACK.

Tempatkan anotasi ini pada parameter CompletionContext. Anotasi ini mengarahkan alat analisis kode untuk memeriksa apakah CompletionContext sudah benar untuk nilai pengembalian FLT_PREOP_CALLBACK_STATUS.

Lihat juga

Menggunakan Anotasi SAL untuk Mengurangi Cacat Kode C/C++