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

C28101

peringatan C28101: Modul Driver telah menyimpulkan bahwa fungsi saat ini bukan jenis fungsi yang benar

C28110

peringatan C28110: Driver harus melindungi status perangkat keras floating-point. Lihat penggunaan float

C28111

peringatan C28111: IRQL tempat status floating-point disimpan tidak cocok dengan IRQL saat ini (untuk operasi pemulihan ini).

C28114

peringatan: C28114: Menyalin seluruh entri tumpukan IRP meninggalkan bidang tertentu yang diinisialisasi yang harus dihapus atau diperbarui.

C28120

peringatan C28120: Fungsi tidak diizinkan untuk dipanggil pada tingkat IRQ saat ini. Tingkat saat ini terlalu rendah.

C28121

peringatan C28121: Fungsi tidak diizinkan untuk dipanggil pada tingkat IRQ saat ini. Tingkat saat ini terlalu tinggi.

C28122

peringatan C28122: Fungsi tidak diizinkan untuk dipanggil pada tingkat IRQ rendah. Panggilan fungsi sebelumnya tidak konsisten dengan batasan ini.

C28123

peringatan C28123: Fungsi tidak diizinkan untuk dipanggil pada tingkat IRQ tinggi. Panggilan fungsi sebelumnya tidak konsisten dengan batasan ini.

C28124

peringatan C28124: Panggilan untuk menyebabkan Tingkat IRQ diatur di bawah minimum yang dapat diterima untuk fungsi yang dianalisis.

C28126

peringatan C28126: Parameter AccessMode ke ObReferenceObject* harus IRP-RequestorMode>

C28127

peringatan C28127: Fungsi yang digunakan sebagai rutinitas tidak sama persis dengan jenis yang diharapkan.

C28128

peringatan C28128: Akses ke bidang telah dibuat secara langsung. Ini harus dibuat oleh rutinitas.

C28129

peringatan C28129: Penugasan telah dibuat ke operan, yang seharusnya hanya dimodifikasi menggunakan set bit dan hapus

C28131

peringatan C28131: Rutinitas DriverEntry harus menyimpan salinan argumen, bukan pointer, karena Manajer I/O membebaskan buffer

C28132

peringatan C28132: Mengambil ukuran pointer

C28133

peringatan C28133: IoInitializeTimer paling baik dipanggil dari AddDevice

C28134

peringatan C28134: Jenis tag kumpulan harus integral, bukan string atau penunjuk string

C28135

peringatan C28135: Jika argumen pertama ke KeWaitForSingleObject adalah variabel lokal, parameter Mode harus KernelMode

C28139

peringatan C28139: Argumen harus sama persis dengan jenis

C28141

peringatan C28141: Argumen menyebabkan Tingkat IRQ diatur di bawah IRQL saat ini, dan fungsi ini tidak dapat digunakan untuk tujuan tersebut

C28143

peringatan C28143: Rutinitas pengiriman yang memanggil IoMarkIrpPending juga harus mengembalikan STATUS_PENDING

C28144

peringatan C28144: Dalam rutinitas pembatalan, pada titik keluar, IRQL di Irp-CancelIrql> harus menjadi IRQL saat ini.

C28145

peringatan C28145: Struktur MDL buram tidak boleh dimodifikasi oleh driver

C28146

peringatan C28146: Driver Mode Kernel harus menggunakan ntstrsafe.h, bukan strsafe.h. Ditemukan dalam file sumber

C28147

peringatan C28147: Penggunaan tag kumpulan default (' kdD' atau ' mdW') untuk panggilan ke fungsi ini mengalahkan tujuan pemberian tag kumpulan

C28150

peringatan C28150: Fungsi menyebabkan Tingkat IRQ diatur di atas maksimum yang dapat diterima untuk fungsi yang dianalisis

C28151

peringatan C28151: Nilai bukan nilai hukum untuk IRQL

C28152

peringatan C28152: Pengembalian dari fungsi seperti AddDevice secara tak terduga DO_DEVICE_INITIALIZING

C28153

peringatan C28153: Nilai untuk IRQL dari anotasi tidak dapat dievaluasi dalam konteks ini.

C28156

peringatan C28156: IRQL aktual tidak konsisten dengan IRQL yang diperlukan

C28157

peringatan C28157: IRQL tidak pernah dipulihkan

C28158

peringatan C28158: Tidak ada IRQL yang disimpan

C28161

peringatan C28161: Keluar tanpa memperoleh hak untuk menggunakan perangkat keras mengambang

C28162

peringatan C28162: Keluar sambil memegang hak untuk menggunakan perangkat keras floating-point

C28165

peringatan C28165: Penunjuk fungsi kelas tidak cocok dengan kelas fungsi

C28166

peringatan C28166: Fungsi tidak memulihkan IRQL ke nilai yang saat ini ada di entri fungsi dan diperlukan untuk melakukannya.

C28167

peringatan C28167: Fungsi mengubah IRQL dan tidak memulihkan IRQL sebelum keluar. Ini harus diannotasi untuk mencerminkan perubahan atau IRQL harus dipulihkan.

C28168

peringatan C28168: Fungsi pengiriman tidak memiliki anotasi Dispatch_type yang cocok dengan entri tabel pengiriman ini

C28169

peringatan C28169: Fungsi pengiriman tidak memiliki anotasi Dispatch_type

C28170

peringatan C28170: Fungsi telah dinyatakan berada dalam segmen halaman, tetapi tidak PAGED_CODE atau PAGED_CODE_LOCKED tidak ditemukan

C28171

peringatan C28171: Fungsi ini memiliki lebih dari satu instans PAGED_CODE atau PAGED_CODE_LOCKED

C28172

peringatan C28172: Fungsi memiliki PAGED_CODE atau PAGED_CODE_LOCKED tetapi tidak dinyatakan berada dalam segmen halaman

C28173

peringatan C28173: Fungsi saat ini tampaknya salah beradaptasi dengan memori fisik di atas 4 GB

C28175

peringatan C28175: Anggota struct tidak boleh diakses oleh driver

C28176

peringatan C28176: Anggota struct tidak boleh dimodifikasi oleh driver

C28177

peringatan C28177: Fungsi diannotasikan dengan lebih dari satu kelas fungsi. Semua kecuali satu akan diabaikan.

C28260

peringatan C28260: Kesalahan sintaks dalam anotasi ditemukan saat mengurai properti di dalam fungsi

C28266

Kesalahan sintaks dalam anotasi ditemukan untuk properti dalam fungsi .

C28268

peringatan C28268: Kelas fungsi pada fungsi tidak cocok dengan kelas fungsi pada typedef yang digunakan di sini

C28601

peringatan C28601: Hindari pemblokiran pada HWND_BROADCAST

C28602

peringatan C28602: Hindari memanggil SendMessageTimeout dengan HWND_BROADCAST

C28604

peringatan C28604: Hindari memanggil SendMessageTimeout dengan SMTO_ABORTIFHUNG dengan batas waktu 0

C28615

peringatan C28615: Harus memanggil _resetstkoflw di blok __except() saat memanggil _alloca di blok __try. Jangan panggil _resetstkoflw dari dalam blok catch()

C28616

peringatan C28616: Kondisi AV multithreaded

C28617

peringatan C28617: Hindari menggunakan nilai pengembalian _beginthread(). Gunakan _beginthreadex() sebagai gantinya

C28623

peringatan C28623: Pemeran koordinat GetMessagePos() yang tidak ditandatangani. Gunakan GET_X_LPARAM/GET_Y_LPARAM alih-alih LOWORD/HIWORD

C28624

peringatan C28624: Tidak ada panggilan ke Release() untuk mencocokkan refcount bertahap dari LResultFromObject

C28625

peringatan C28625: Panggilan fungsi yang digunakan untuk menghapus data sensitif akan dioptimalkan

C28636

peringatan C28636: Memanggil LocalFree pada pointer yang tidak dialokasikan yang diperoleh dari panggilan ke GetSecurityDescriptorOwner/Group/Dacl/Sacl

C28637

peringatan C28637: Memanggil fungsi dalam inisialisasi global tidak aman

C28638

peringatan C28638: stub penundaan fungsi kehilangan deklarasi yang cocok

C28639

peringatan C28639: Memanggil handel tutup dengan string

C28640

peringatan C28640: stub penundaan fungsi harus menjadi fungsi statis

C28644

peringatan C28644: Mengembalikan nilai dari DPA_InsertPtr tidak diperiksa

C28645

peringatan C28645: MessageBox dipanggil menggunakan simbol pesan tanda tanya yang tidak lagi direkomendasikan

C28648

peringatan C28648: PulseEvent adalah fungsi yang tidak dapat diandalkan

C28649

peringatan C28649: Array Tumpukan Otomatis atau Global tidak pernah NULL

C28650

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.

C28651

peringatan C28651: Inisialisasi statis menyebabkan penyalinan pada halaman tulis karena penunjuk fungsi anggota

C28652

peringatan C28652: Inisialisasi statis menyebabkan penyalinan pada halaman tulis karena operator bitwise yang kelebihan beban

C28714

peringatan C28714: Transmisikan antara jenis bilangan bulat yang berbeda secara semantik

C28715

peringatan C28715: Transmisikan antara jenis bilangan bulat yang berbeda secara semantik

C28716

peringatan C28716: Compiler-inserted cast antara jenis integral yang berbeda secara semantik

C28717

peringatan C28717: Jenis VARIAN tidak valid

C28718

peringatan C28718: Buffer tanpa anotasi

C28719

peringatan C28719: Penggunaan API Terlarang

C28720

peringatan C28720: Penggunaan API Terlarang

C28721

peringatan C28721: Arsitektur penghitung kinerja yang tidak digunakan lagi

C28722

peringatan C28722: Buffer yang tidak diannotasi dalam deklarasi fungsi

C28723

peringatan C28723: Buffer yang tidak diannotasi dalam definisi fungsi yang tidak memiliki deklarasi yang sesuai

C28725

peringatan C28725: Gunakan Watson alih-alih SetUnhandledExceptionFilter ini

C28726

peringatan C28726: Penggunaan API Yang Dilarang

C28727

peringatan C28727: Penggunaan API Terlarang

C28728

peringatan C28728: Penggunaan API Terlarang

C28730

peringatan C28730: Kemungkinan penugasan '\0' langsung ke pointer.

C28735

peringatan C28735: Penggunaan API Crimson Yang Dilarang

C28736

peringatan C28736: Penggunaan Argumen API Terlarang

C28740

peringatan C28740: Buffer yang tidak ditandatangani

C28741

peringatan C28741: Buffer yang tidak dianotasi dalam fungsi

C28742

peringatan C28742: Buffer yang tidak dianotasi dalam fungsi

C28750

peringatan C28750: Penggunaan lstrlen yang dilarang dan variannya

C28751

peringatan C28751: Penggunaan ExAllocatePool yang dilarang dan variannya

C28752

peringatan C28752: Penggunaan kernel32 atau advapi32 API yang dilarang

C28753

peringatan C28753: Mengandalkan urutan evaluasi parameter yang tidak terdefinisi

C30029

peringatan C30029: Memanggil fungsi alokasi memori yang meminta memori yang dapat dieksekusi

C30030

peringatan C30030: Memanggil fungsi alokasi memori dan meneruskan parameter yang menunjukkan memori yang dapat dieksekusi

C30031

peringatan C30031: Memanggil fungsi alokasi memori dan meneruskan parameter yang menunjukkan memori yang dapat dieksekusi

C30032

peringatan C30032: Memanggil fungsi alokasi memori dan memaksa permintaan memori yang dapat dieksekusi melalui penggunaan direktif POOL_NX_OPTOUT

C30033

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.

C30034

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.

C30035

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.