Analisis Kode untuk Peringatan Driver
Bagian ini mencantumkan dan menjelaskan peringatan yang dilaporkan Analisis Kode untuk Driver saat mendeteksi kemungkinan kesalahan dalam kode driver. Perhatikan bahwa beberapa peringatan ditujukan untuk kode mode kernel dan dapat diabaikan saat menganalisis driver mode pengguna.
Analisis Kode untuk Driver melaporkan jenis peringatan berikut:
Peringatan Umum (6000-6999): Potensi kesalahan dalam sintaks C dan C++ dan praktik pengkodian umum. Untuk deskripsi peringatan ini, lihat Analisis Kode untuk Peringatan C/C++.
Peringatan Khusus Windows (28600-28799): Peringatan ini khusus untuk pola penggunaan tertentu di Windows, tetapi tidak spesifik untuk driver.
Peringatan Khusus Driver (28100-28199): Kesalahan dalam interaksi driver dengan aplikasi, dengan driver lain, dan dengan sistem operasi.
Kesalahan Anotasi (28200-28299 dan 36000-36999): Peringatan ini menunjukkan bahwa anotasi telah salah dikodekan atau digunakan dalam konteks yang tidak tepat. Dalam kebanyakan kasus, adanya peringatan seperti itu menunjukkan bahwa anotasi tidak memiliki efek yang diinginkan (atau apa pun).
Peringatan Alokasi Memori (30029-30035): Ini adalah peringatan alokasi memori.
Di bagian ini
Topik | Deskripsi |
---|---|
peringatan C28101: Modul Driver telah menyimpulkan bahwa fungsi saat ini bukan jenis fungsi yang benar |
|
peringatan C28110: Driver harus melindungi status perangkat keras floating-point. Lihat penggunaan float |
|
peringatan C28111: IRQL tempat status floating-point disimpan tidak cocok dengan IRQL saat ini (untuk operasi pemulihan ini). |
|
peringatan: C28114: Menyalin seluruh entri tumpukan IRP meninggalkan bidang tertentu yang diinisialisasi yang harus dihapus atau diperbarui. |
|
peringatan C28120: Fungsi tidak diizinkan untuk dipanggil pada tingkat IRQ saat ini. Tingkat saat ini terlalu rendah. |
|
peringatan C28121: Fungsi tidak diizinkan untuk dipanggil pada tingkat IRQ saat ini. Tingkat saat ini terlalu tinggi. |
|
peringatan C28122: Fungsi tidak diizinkan untuk dipanggil pada tingkat IRQ rendah. Panggilan fungsi sebelumnya tidak konsisten dengan batasan ini. |
|
peringatan C28123: Fungsi tidak diizinkan untuk dipanggil pada tingkat IRQ tinggi. Panggilan fungsi sebelumnya tidak konsisten dengan batasan ini. |
|
peringatan C28124: Panggilan untuk menyebabkan Tingkat IRQ diatur di bawah minimum yang dapat diterima untuk fungsi yang dianalisis. |
|
peringatan C28126: Parameter AccessMode ke ObReferenceObject* harus IRP-RequestorMode> |
|
peringatan C28127: Fungsi yang digunakan sebagai rutinitas tidak sama persis dengan jenis yang diharapkan. |
|
peringatan C28128: Akses ke bidang telah dibuat secara langsung. Ini harus dibuat oleh rutinitas. |
|
peringatan C28129: Penugasan telah dibuat ke operan, yang seharusnya hanya dimodifikasi menggunakan set bit dan hapus |
|
peringatan C28131: Rutinitas DriverEntry harus menyimpan salinan argumen, bukan pointer, karena Manajer I/O membebaskan buffer |
|
peringatan C28132: Mengambil ukuran pointer |
|
peringatan C28133: IoInitializeTimer paling baik dipanggil dari AddDevice |
|
peringatan C28134: Jenis tag kumpulan harus integral, bukan string atau penunjuk string |
|
peringatan C28135: Jika argumen pertama ke KeWaitForSingleObject adalah variabel lokal, parameter Mode harus KernelMode |
|
peringatan C28139: Argumen harus sama persis dengan jenis |
|
peringatan C28141: Argumen menyebabkan Tingkat IRQ diatur di bawah IRQL saat ini, dan fungsi ini tidak dapat digunakan untuk tujuan tersebut |
|
peringatan C28143: Rutinitas pengiriman yang memanggil IoMarkIrpPending juga harus mengembalikan STATUS_PENDING |
|
peringatan C28144: Dalam rutinitas pembatalan, pada titik keluar, IRQL di Irp-CancelIrql> harus menjadi IRQL saat ini. |
|
peringatan C28145: Struktur MDL buram tidak boleh dimodifikasi oleh driver |
|
peringatan C28146: Driver Mode Kernel harus menggunakan ntstrsafe.h, bukan strsafe.h. Ditemukan dalam file sumber |
|
peringatan C28147: Penggunaan tag kumpulan default (' kdD' atau ' mdW') untuk panggilan ke fungsi ini mengalahkan tujuan pemberian tag kumpulan |
|
peringatan C28150: Fungsi menyebabkan Tingkat IRQ diatur di atas maksimum yang dapat diterima untuk fungsi yang dianalisis |
|
peringatan C28151: Nilai bukan nilai hukum untuk IRQL |
|
peringatan C28152: Pengembalian dari fungsi seperti AddDevice secara tak terduga DO_DEVICE_INITIALIZING |
|
peringatan C28153: Nilai untuk IRQL dari anotasi tidak dapat dievaluasi dalam konteks ini. |
|
peringatan C28156: IRQL aktual tidak konsisten dengan IRQL yang diperlukan |
|
peringatan C28157: IRQL tidak pernah dipulihkan |
|
peringatan C28158: Tidak ada IRQL yang disimpan |
|
peringatan C28161: Keluar tanpa memperoleh hak untuk menggunakan perangkat keras mengambang |
|
peringatan C28162: Keluar sambil memegang hak untuk menggunakan perangkat keras floating-point |
|
peringatan C28165: Penunjuk fungsi kelas tidak cocok dengan kelas fungsi |
|
peringatan C28166: Fungsi tidak memulihkan IRQL ke nilai yang saat ini ada di entri fungsi dan diperlukan untuk melakukannya. |
|
peringatan C28167: Fungsi mengubah IRQL dan tidak memulihkan IRQL sebelum keluar. Ini harus diannotasi untuk mencerminkan perubahan atau IRQL harus dipulihkan. |
|
peringatan C28168: Fungsi pengiriman tidak memiliki anotasi Dispatch_type yang cocok dengan entri tabel pengiriman ini |
|
peringatan C28169: Fungsi pengiriman tidak memiliki anotasi Dispatch_type |
|
peringatan C28170: Fungsi telah dinyatakan berada dalam segmen halaman, tetapi tidak PAGED_CODE atau PAGED_CODE_LOCKED tidak ditemukan |
|
peringatan C28171: Fungsi ini memiliki lebih dari satu instans PAGED_CODE atau PAGED_CODE_LOCKED |
|
peringatan C28172: Fungsi memiliki PAGED_CODE atau PAGED_CODE_LOCKED tetapi tidak dinyatakan berada dalam segmen halaman |
|
peringatan C28173: Fungsi saat ini tampaknya salah beradaptasi dengan memori fisik di atas 4 GB |
|
peringatan C28175: Anggota struct tidak boleh diakses oleh driver |
|
peringatan C28176: Anggota struct tidak boleh dimodifikasi oleh driver |
|
peringatan C28177: Fungsi diannotasikan dengan lebih dari satu kelas fungsi. Semua kecuali satu akan diabaikan. |
|
peringatan C28260: Kesalahan sintaks dalam anotasi ditemukan saat mengurai properti di dalam fungsi |
|
Kesalahan sintaks dalam anotasi ditemukan untuk properti dalam fungsi . |
|
peringatan C28268: Kelas fungsi pada fungsi tidak cocok dengan kelas fungsi pada typedef yang digunakan di sini |
|
peringatan C28601: Hindari pemblokiran pada HWND_BROADCAST |
|
peringatan C28602: Hindari memanggil SendMessageTimeout dengan HWND_BROADCAST |
|
peringatan C28604: Hindari memanggil SendMessageTimeout dengan SMTO_ABORTIFHUNG dengan batas waktu 0 |
|
peringatan C28615: Harus memanggil _resetstkoflw di blok __except() saat memanggil _alloca di blok __try. Jangan panggil _resetstkoflw dari dalam blok catch() |
|
peringatan C28616: Kondisi AV multithreaded |
|
peringatan C28617: Hindari menggunakan nilai pengembalian _beginthread(). Gunakan _beginthreadex() sebagai gantinya |
|
peringatan C28623: Pemeran koordinat GetMessagePos() yang tidak ditandatangani. Gunakan GET_X_LPARAM/GET_Y_LPARAM alih-alih LOWORD/HIWORD |
|
peringatan C28624: Tidak ada panggilan ke Release() untuk mencocokkan refcount bertahap dari LResultFromObject |
|
peringatan C28625: Panggilan fungsi yang digunakan untuk menghapus data sensitif akan dioptimalkan |
|
peringatan C28636: Memanggil LocalFree pada pointer yang tidak dialokasikan yang diperoleh dari panggilan ke GetSecurityDescriptorOwner/Group/Dacl/Sacl |
|
peringatan C28637: Memanggil fungsi dalam inisialisasi global tidak aman |
|
peringatan C28638: stub penundaan fungsi kehilangan deklarasi yang cocok |
|
peringatan C28639: Memanggil handel tutup dengan string |
|
peringatan C28640: stub penundaan fungsi harus menjadi fungsi statis |
|
peringatan C28644: Mengembalikan nilai dari DPA_InsertPtr tidak diperiksa |
|
peringatan C28645: MessageBox dipanggil menggunakan simbol pesan tanda tanya yang tidak lagi direkomendasikan |
|
peringatan C28648: PulseEvent adalah fungsi yang tidak dapat diandalkan |
|
peringatan C28649: Array Tumpukan Otomatis atau Global tidak pernah NULL |
|
peringatan C28650: Jenis yang digunakan !0 tidak memperlakukannya sebagai kasus kegagalan. Mengembalikan nilai status seperti ! TRUE tidak sama dengan mengembalikan nilai status yang menunjukkan kegagalan. |
|
peringatan C28651: Inisialisasi statis menyebabkan penyalinan pada halaman tulis karena penunjuk fungsi anggota |
|
peringatan C28652: Inisialisasi statis menyebabkan penyalinan pada halaman tulis karena operator bitwise yang kelebihan beban |
|
peringatan C28714: Transmisikan antara jenis bilangan bulat yang berbeda secara semantik |
|
peringatan C28715: Transmisikan antara jenis bilangan bulat yang berbeda secara semantik |
|
peringatan C28716: Compiler-inserted cast antara jenis integral yang berbeda secara semantik |
|
peringatan C28717: Jenis VARIAN tidak valid |
|
peringatan C28718: Buffer tanpa anotasi |
|
peringatan C28719: Penggunaan API Terlarang |
|
peringatan C28720: Penggunaan API Terlarang |
|
peringatan C28721: Arsitektur penghitung kinerja yang tidak digunakan lagi |
|
peringatan C28722: Buffer yang tidak diannotasi dalam deklarasi fungsi |
|
peringatan C28723: Buffer yang tidak diannotasi dalam definisi fungsi yang tidak memiliki deklarasi yang sesuai |
|
peringatan C28725: Gunakan Watson alih-alih SetUnhandledExceptionFilter ini |
|
peringatan C28726: Penggunaan API Yang Dilarang |
|
peringatan C28727: Penggunaan API Terlarang |
|
peringatan C28728: Penggunaan API Terlarang |
|
peringatan C28730: Kemungkinan penugasan '\0' langsung ke pointer. |
|
peringatan C28735: Penggunaan API Crimson Yang Dilarang |
|
peringatan C28736: Penggunaan Argumen API Terlarang |
|
peringatan C28740: Buffer yang tidak ditandatangani |
|
peringatan C28741: Buffer yang tidak dianotasi dalam fungsi |
|
peringatan C28742: Buffer yang tidak dianotasi dalam fungsi |
|
peringatan C28750: Penggunaan lstrlen yang dilarang dan variannya |
|
peringatan C28751: Penggunaan ExAllocatePool yang dilarang dan variannya |
|
peringatan C28752: Penggunaan kernel32 atau advapi32 API yang dilarang |
|
peringatan C28753: Mengandalkan urutan evaluasi parameter yang tidak terdefinisi |
|
peringatan C30029: Memanggil fungsi alokasi memori yang meminta memori yang dapat dieksekusi |
|
peringatan C30030: Memanggil fungsi alokasi memori dan meneruskan parameter yang menunjukkan memori yang dapat dieksekusi |
|
peringatan C30031: Memanggil fungsi alokasi memori dan meneruskan parameter yang menunjukkan memori yang dapat dieksekusi |
|
peringatan C30032: Memanggil fungsi alokasi memori dan memaksa permintaan memori yang dapat dieksekusi melalui penggunaan direktif POOL_NX_OPTOUT |
|
peringatan C30033: Alokasi yang dapat dieksekusi terdeteksi dalam driver yang dikompilasi dengan POOL_NX_OPTIN. Driver ini telah ditentukan untuk dimuat pada waktu proses oleh driver lain. Harap verifikasi bahwa driver pemuatan memanggil ExInitializeDriverRuntime(DrvRtPoolNxOptIn) di DriverEntry-nya. |
|
peringatan C30034: Meneruskan nilai bendera ke fungsi alokasi yang dapat mengakibatkan memori yang dapat dieksekusi dialokasikan. Pastikan bahwa fungsi alokasi tidak meminta bentuk kumpulan yang tidak dapat dieksekusi. |
|
peringatan C30035: Panggilan dilakukan ke fungsi yang harus dilakukan dari dalam fungsi inisialisasi (misalnya, DriverEntry() atau DllInitialize()). PREfast tidak dapat menentukan apakah panggilan dilakukan dari fungsi inisialisasi. |
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk