Aracılığıyla paylaş


Sürücü Uyarıları için Kod Analizi

Bu bölümde Sürücüler için Kod Analizi'nin sürücü kodunda olası bir hata algıladığında bildirdiği uyarılar listelenir ve açıklanır. Bazı uyarıların çekirdek modu koduna yönelik olduğunu ve kullanıcı modu sürücüleri analiz edilirken yoksayılabilir.

Önemli

Sürücüler için Kod Analizi, Windows 24H2 WDK ve EWDK'de kullanılabilir, ancak gelecekteki bir tarihte kullanımdan kaldırılacak şekilde ayarlandığını unutmayın.
Bundan sonra CodeQL, sürücüler için birincil statik analiz aracı olacaktır. CodeQL, kodu sorgulanacak bir veritabanı olarak değerlendiren ve belirli davranışlar, desenler ve daha fazlası için sorgu yazmayı basit hale getiren güçlü bir sorgu dili sağlar. CodeQL kullanma hakkında daha fazla bilgi için bkz. CodeQL ve Statik Araçlar Logo Testi.

Sürücüler için Kod Analizi aşağıdaki uyarı türlerini bildirir:

  • Genel Uyarılar (6000-6999): C ve C++ söz diziminde olası hatalar ve genel kodlama uygulaması. Bu uyarıların açıklaması için bkz. C/C++ Uyarıları için Kod Analizi.

  • Windows'a Özgü Uyarılar (28600-28799): Bu uyarılar Windows'ta belirli kullanım düzenlerine özgü olmakla birlikte sürücülere özgü değildir.

  • Driver-Specific Uyarıları (28100-28199): Sürücünün uygulamayla, diğer sürücülerle ve işletim sistemiyle etkileşimindeki hatalar.

  • Ek Açıklama Hataları (28200-28299 ve 36000-36999): Bu uyarılar, bir ek açıklamanın yanlış kodlandığını veya yanlış bir bağlamda kullanıldığını gösterir. Çoğu durumda, böyle bir uyarının varlığı ek açıklamanın istenen (veya herhangi bir) etkiye sahip olmadığını gösterir.

  • Bellek Ayırma Uyarıları (30029-30035): Bunlar bellek ayırma uyarılarıdır.

Bu bölümde

Konu Açıklama

C28101

uyarı C28101: Sürücüler modülü, geçerli işlevin doğru işlev türü olmadığını ortaya çıkarmıştır

C28110

uyarı C28110: Sürücülerin kayan nokta donanım durumunu koruması gerekir. Bkz. float kullanımı

C28111

uyarı C28111: Kayan nokta durumunun kaydedildiği IRQL, geçerli IRQL ile eşleşmiyor (bu geri yükleme işlemi için).

C28114

uyarı C28114: Bir IRP yığını girişinin tamamının kopyalanması, temizlenmesi veya güncellenmesi gereken belirli alanların istemeden başlatılmış olarak kalmasına neden olur.

C28120

uyarı C28120: İşlevin geçerli IRQ düzeyinde çağrılmaya izin verilmiyor. Geçerli düzey çok düşük.

C28121

uyarı C28121: İşlevin geçerli IRQ düzeyinde çağrılmaya izin verilmiyor. Geçerli düzey çok yüksek.

C28122

uyarı C28122: İşlevin düşük IRQ düzeyinde çağrılmaya izin verilmiyor. Önceki işlev çağrıları bu kısıtlamayla tutarsız.

C28123

uyarı C28123: İşlevin yüksek IRQ düzeyinde çağrılmaya izin verilmiyor. Önceki işlev çağrıları bu kısıtlamayla tutarsız.

C28124

uyarı C28124: çağrısı, IRQ Düzeyinin analiz edilen işlev için kabul edilebilir en düşük değerin altına ayarlanmasına neden olur.

C28126

uyarı C28126: ObReferenceObject* için AccessMode parametresi IRP->RequestorMode olmalıdır

C28127

uyarı C28127: Yordam olarak kullanılan işlev beklenen türle tam olarak eşleşmiyor.

C28128

uyarı C28128: Bir alana doğrudan erişim yapıldı. Bir rutin tarafından yapılmalı.

C28129

uyarı C28129: Bir işlenene atama yapılmıştır; bu atama yalnızca bit kümeleri ve temizlemeler kullanılarak değiştirilmelidir

C28131

uyarı C28131: DriverEntry rutin, G/Ç Yöneticisinin arabelleği serbest bırakması nedeniyle işaretçinin değil, bağımsız değişkenin bir kopyasını kaydetmelidir.

C28132

uyarı C28132: İşaretçinin boyutunu alma

C28133

uyarı C28133: IoInitializeTimer en iyi addDevice'den çağrılır

C28134

uyarı C28134: Havuz etiketi türü dize veya dize işaretçisi değil tam sayı olmalıdır

C28135

uyarı C28135: KeWaitForSingleObject'in ilk bağımsız değişkeni yerel bir değişkense, Mode parametresi KernelMode olmalıdır

C28139

uyarı C28139: Bağımsız değişken türüyle tam olarak eşleşmelidir

C28141

uyarı C28141: Bağımsız değişken, IRQ Düzeyinin geçerli IRQL'in altında ayarlanmasına neden olur ve bu işlev bu amaç için kullanılamaz

C28143

uyarı C28143: IoMarkIrpPending'i çağıran bir dağıtım yordamı da STATUS_PENDING döndürmelidir

C28144

uyarı C28144: Bir iptal yordamında, çıkış noktasında, Irp->CancelIrql'deki IRQL geçerli IRQL olmalıdır.

C28145

uyarı C28145: Opak MDL yapısı bir sürücü tarafından değiştirilmemelidir

C28146

uyarı C28146: Çekirdek Modu sürücüleri strsafe.h değil ntstrsafe.h kullanmalıdır. Kaynak dosyada bulundu

C28147

uyarı C28147: Bu işleve yönelik çağrılar için varsayılan havuz etiketi (' kdD' veya 'mdW') kullanılması havuz etiketlemenin amacını aşıyor

C28150

uyarı C28150: İşlev, IRQ Düzeyinin analiz edilen işlev için kabul edilebilir üst sınırın üzerinde ayarlanmasına neden olur

C28151

uyarı C28151: Değer, IRQL için yasal bir değer değil

C28152

uyarı C28152: AddDevice benzeri bir işlevden beklenmedik şekilde DO_DEVICE_INITIALIZING

C28153

uyarı C28153: Ek açıklamadaki bir IRQL değeri bu bağlamda değerlendirilemedi.

C28156

uyarı C28156: Gerçek IRQL gerekli IRQL ile tutarsız

C28157

uyarı C28157: IRQL hiçbir zaman geri yüklenmedi

C28158

uyarı C28158: IRQL kaydedilmedi

C28161

uyarı C28161: Kayan donanım kullanma hakkı alınmadan çıkılma

C28162

uyarı C28162: Kayan nokta donanımını kullanma hakkını tutarken çıkış

C28165

uyarı C28165: Sınıfın işlev işaretçisi işlev sınıfıyla eşleşmiyor

C28166

uyarı C28166: İşlev, IRQL'i işlev girişinde geçerli olan değere geri yüklemez ve bunu yapmak için gereklidir.

C28167

uyarı C28167: İşlev IRQL'i değiştirir ve çıkmadan önce IRQL'i geri yüklemez. Değişikliği yansıtacak şekilde açıklama eklenmelidir veya IRQL geri yüklenmelidir.

C28168

uyarı C28168: Yönlendirme işlevinin bu yönlendirme tablosu özelliğiyle eşleşen Dispatch_type açıklaması yok

C28169

uyarı C28169: Dağıtım işlevinin Dispatch_type ek açıklaması yok

C28170

uyarı C28170: İşlev sayfalanmış bir kesimde olduğu bildirildi, ancak ne PAGED_CODE ne de PAGED_CODE_LOCKED bulunamadı

C28171

uyarı C28171: İşlevin birden fazla PAGED_CODE veya PAGED_CODE_LOCKED örneği var

C28172

uyarı C28172: İşlev PAGED_CODE veya PAGED_CODE_LOCKED sahip ancak sayfalanmış bir kesimde olduğu bildirilmemiş

C28173

uyarı C28173: Geçerli işlev, 4 GB'ın üzerindeki fiziksel belleğe yanlış uyarlanmış gibi görünüyor

C28175

uyarı C28175: Yapının üyesine bir sürücü tarafından erişilmemelidir

C28176

uyarı C28176: Yapı üyesi bir sürücü tarafından değiştirilmemelidir

C28177

uyarı C28177: İşleve birden fazla işlev sınıfıyla açıklama eklenir. Biri hariç hepsi yoksayılır.

C28260

uyarı C28260: İşlev içindeki bir özellik için ayrıştırma sırasında ek açıklamalarda söz dizimi hatası bulundu

C28266

İşlevdeki özelliği için ek açıklamalarda söz dizimi hatası bulundu.

C28268

uyarı C28268: İşlevdeki işlev sınıfı, burada kullanılan tür tanımındaki işlev sınıfıyla eşleşmiyor

C28601

uyarı C28601: HWND_BROADCAST'da engellemekten kaçının

C28602

uyarı C28602: HWND_BROADCAST ile SendMessageTimeout çağrısı yapmaktan kaçının

C28604

uyarı C28604: Zaman aşımı 0 olan SMTO_ABORTIFHUNG sendMessageTimeout çağrısı yapmaktan kaçının

C28615

uyarı C28615: __try bloğundaki _alloca çağırırken __except() bloğundaki _resetstkoflw çağırmalıdır. catch() bloğunun içinden _resetstkoflw çağırma

C28616

uyarı C28616: Çok iş parçacıklı AV koşulu

C28617

uyarı C28617: _beginthread() dönüş değerini kullanmaktan kaçının. Bunun yerine _beginthreadex() kullanın

C28623

uyarı C28623: GetMessagePos() koordinatlarının imzasız ataması. LOWORD/HIWORD yerine GET_X_LPARAM/GET_Y_LPARAM kullanın

C28624

uyarı C28624: LResultFromObject'ten artımlı refcount ile eşleşecek Release() çağrısı yok

C28625

uyarı C28625: Hassas verileri temizlemek için kullanılan işlev çağrısı iyileştirilir

C28636

uyarı C28636: GetSecurityDescriptorOwner/Group/Dacl/Sacl çağrılarından alınan ayrılmamış işaretçide LocalFree çağrısı

C28637

uyarı C28637: Genel başlatıcıda işlevin çağrılması güvenli değil

C28638

uyarı C28638: işlev gecikme yükü saplaması eşleşen bir bildirim eksik

C28639

uyarı C28639: Dizeyle kapanış tutamacını çağırma

C28640

uyarı C28640: işlev gecikme yükü saplaması statik bir işlev olmalıdır

C28644

uyarı C28644: DPA_InsertPtr iade edilmeyen değer

C28645

uyarı C28645: MessageBox artık önerilmez soru işareti ileti simgesi kullanılarak çağrıldı

C28648

uyarı C28648: PulseEvent güvenilir olmayan bir işlevdir

C28649

uyarı C28649: Otomatik veya Genel Yığın Dizileri hiçbir zaman NULL değildir

C28650

uyarı C28650: !0'ın kullanıldığı tür, hata durumu olarak işlemiyor.

! gibi bir durum değeri döndürme TRUE, hataya işaret eden bir durum değeri döndürmeyle aynı değildir.

C28651

uyarı C28651: Statik başlatıcı, üye işlev işaretçileri nedeniyle yazma sayfalarında kopyalamaya neden oluyor

C28652

uyarı C28652: Statik başlatıcı, aşırı yüklenmiş bit düzeyinde işleçler nedeniyle yazma sayfalarında kopyalamaya neden oluyor

C28714

uyarı C28714: Sembolik olarak farklı tamsayı türleri arasında atama

C28715

uyarı C28715: Sembolik olarak farklı tamsayı türleri arasında atama

C28716

uyarı C28716: Sembolik olarak farklı integral türleri arasında derleyici tarafından eklenen atama

C28717

uyarı C28717: Geçersiz DEĞIŞKEN türü

C28718

uyarı C28718: Eklenmemiş arabellek

C28719

uyarı C28719: Yasaklanmış API Kullanımı

C28720

uyarı C28720: Yasaklanmış API Kullanımı

C28721

uyarı C28721: Kullanım dışı performans sayacı mimarisi

C28722

uyarı C28722: İşlev bildiriminde eklenmeyen arabellek

C28723

uyarı C28723: İşlev tanımında karşılık gelen bildirimi olmayan eklenmemiş arabellek

C28725

uyarı C28725: Bu SetUnhandledExceptionFilter yerine Watson kullanın

C28726

uyarı C28726: Yasaklanmış API Kullanımı

C28727

uyarı C28727: Yasaklanmış API Kullanımı

C28728

uyarı C28728: Yasaklanmış API Kullanımı

C28730

uyarı C28730: '\0' öğesinin doğrudan işaretçiye atanma olasılığı.

C28735

uyarı C28735: Yasaklanmış Crimson API Kullanımı

C28736

uyarı C28736: Yasaklanmış API Bağımsız Değişken Kullanımı

C28740

uyarı C28740: Unannotated unannoted unsigned buffer

C28741

uyarı C28741: İşlevde eklenmeyen arabellek

C28742

uyarı C28742: İşlevde eklenmeyen arabellek

C28750

uyarı C28750: Lstrlen ve varyantlarının kullanımı yasaklandı

C28751

uyarı C28751: ExAllocatePool ve varyantlarının kullanımı yasaklandı

C28752

uyarı C28752: Çekirdek32 veya advapi32 API'sinin yasaklanmış kullanımı

C28753

uyarı C28753: Parametrelerin tanımlanmamış değerlendirme sırasına bağlı olarak

C30029

uyarı C30029: Yürütülebilir bellek isteyen bir bellek ayırma işlevi çağırma

C30030

uyarı C30030: Bellek ayırma işlevini çağırma ve yürütülebilir belleği gösteren bir parametre geçirme

C30031

uyarı C30031: Bellek ayırma işlevini çağırma ve yürütülebilir belleği gösteren bir parametre geçirme

C30032

uyarı C30032: Bir bellek ayırma işlevini çağırma ve POOL_NX_OPTOUT yönergesini kullanarak yürütülebilir bellek isteğini zorlama

C30033

uyarı C30033: POOL_NX_OPTINile derlenmiş bir sürücüde yürütülebilir ayırma algılandı. Bu sürücünün başka bir sürücü tarafından çalışma zamanında yüklendiği belirlendi. Yükleme sürücüsünün DriverEntry ExInitializeDriverRuntime(DrvRtPoolNxOptIn) çağırdığını doğrulayın.

C30034

uyarı C30034: Yürütülebilir belleğin ayrılmasına neden olabilecek bir ayırıcı işleve bayrak değeri geçirme. Lütfen ayrılan işlevin sayfalanmamış yürütülebilir bir havuz biçimi istemediğini doğrulayın.

C30035

uyarı C30035: Başlatma işlevinin içinden yapılması gereken bir işleve çağrı yapıldı (örneğin, DriverEntry() veya DllInitialize()). PREfast, çağrının başlatma işlevinden yapılıp yapılmadığını belirleyemedi.