Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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 |
|---|---|
uyarı C28101: Sürücüler modülü, geçerli işlevin doğru işlev türü olmadığını ortaya çıkarmıştır |
|
uyarı C28110: Sürücülerin kayan nokta donanım durumunu koruması gerekir. Bkz. float kullanımı |
|
uyarı C28111: Kayan nokta durumunun kaydedildiği IRQL, geçerli IRQL ile eşleşmiyor (bu geri yükleme işlemi için). |
|
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. |
|
uyarı C28120: İşlevin geçerli IRQ düzeyinde çağrılmaya izin verilmiyor. Geçerli düzey çok düşük. |
|
uyarı C28121: İşlevin geçerli IRQ düzeyinde çağrılmaya izin verilmiyor. Geçerli düzey çok yüksek. |
|
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. |
|
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. |
|
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. |
|
uyarı C28126: ObReferenceObject* için AccessMode parametresi IRP->RequestorMode olmalıdır |
|
uyarı C28127: Yordam olarak kullanılan işlev beklenen türle tam olarak eşleşmiyor. |
|
uyarı C28128: Bir alana doğrudan erişim yapıldı. Bir rutin tarafından yapılmalı. |
|
uyarı C28129: Bir işlenene atama yapılmıştır; bu atama yalnızca bit kümeleri ve temizlemeler kullanılarak değiştirilmelidir |
|
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. |
|
uyarı C28132: İşaretçinin boyutunu alma |
|
uyarı C28133: IoInitializeTimer en iyi addDevice'den çağrılır |
|
uyarı C28134: Havuz etiketi türü dize veya dize işaretçisi değil tam sayı olmalıdır |
|
uyarı C28135: KeWaitForSingleObject'in ilk bağımsız değişkeni yerel bir değişkense, Mode parametresi KernelMode olmalıdır |
|
uyarı C28139: Bağımsız değişken türüyle tam olarak eşleşmelidir |
|
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 |
|
uyarı C28143: IoMarkIrpPending'i çağıran bir dağıtım yordamı da STATUS_PENDING döndürmelidir |
|
uyarı C28144: Bir iptal yordamında, çıkış noktasında, Irp->CancelIrql'deki IRQL geçerli IRQL olmalıdır. |
|
uyarı C28145: Opak MDL yapısı bir sürücü tarafından değiştirilmemelidir |
|
uyarı C28146: Çekirdek Modu sürücüleri strsafe.h değil ntstrsafe.h kullanmalıdır. Kaynak dosyada bulundu |
|
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 |
|
uyarı C28150: İşlev, IRQ Düzeyinin analiz edilen işlev için kabul edilebilir üst sınırın üzerinde ayarlanmasına neden olur |
|
uyarı C28151: Değer, IRQL için yasal bir değer değil |
|
uyarı C28152: AddDevice benzeri bir işlevden beklenmedik şekilde DO_DEVICE_INITIALIZING |
|
uyarı C28153: Ek açıklamadaki bir IRQL değeri bu bağlamda değerlendirilemedi. |
|
uyarı C28156: Gerçek IRQL gerekli IRQL ile tutarsız |
|
uyarı C28157: IRQL hiçbir zaman geri yüklenmedi |
|
uyarı C28158: IRQL kaydedilmedi |
|
uyarı C28161: Kayan donanım kullanma hakkı alınmadan çıkılma |
|
uyarı C28162: Kayan nokta donanımını kullanma hakkını tutarken çıkış |
|
uyarı C28165: Sınıfın işlev işaretçisi işlev sınıfıyla eşleşmiyor |
|
uyarı C28166: İşlev, IRQL'i işlev girişinde geçerli olan değere geri yüklemez ve bunu yapmak için gereklidir. |
|
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. |
|
uyarı C28168: Yönlendirme işlevinin bu yönlendirme tablosu özelliğiyle eşleşen Dispatch_type açıklaması yok |
|
uyarı C28169: Dağıtım işlevinin Dispatch_type ek açıklaması yok |
|
uyarı C28170: İşlev sayfalanmış bir kesimde olduğu bildirildi, ancak ne PAGED_CODE ne de PAGED_CODE_LOCKED bulunamadı |
|
uyarı C28171: İşlevin birden fazla PAGED_CODE veya PAGED_CODE_LOCKED örneği var |
|
uyarı C28172: İşlev PAGED_CODE veya PAGED_CODE_LOCKED sahip ancak sayfalanmış bir kesimde olduğu bildirilmemiş |
|
uyarı C28173: Geçerli işlev, 4 GB'ın üzerindeki fiziksel belleğe yanlış uyarlanmış gibi görünüyor |
|
uyarı C28175: Yapının üyesine bir sürücü tarafından erişilmemelidir |
|
uyarı C28176: Yapı üyesi bir sürücü tarafından değiştirilmemelidir |
|
uyarı C28177: İşleve birden fazla işlev sınıfıyla açıklama eklenir. Biri hariç hepsi yoksayılır. |
|
uyarı C28260: İşlev içindeki bir özellik için ayrıştırma sırasında ek açıklamalarda söz dizimi hatası bulundu |
|
İşlevdeki özelliği için ek açıklamalarda söz dizimi hatası bulundu. |
|
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 |
|
uyarı C28601: HWND_BROADCAST'da engellemekten kaçının |
|
uyarı C28602: HWND_BROADCAST ile SendMessageTimeout çağrısı yapmaktan kaçının |
|
uyarı C28604: Zaman aşımı 0 olan SMTO_ABORTIFHUNG sendMessageTimeout çağrısı yapmaktan kaçının |
|
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 |
|
uyarı C28616: Çok iş parçacıklı AV koşulu |
|
uyarı C28617: _beginthread() dönüş değerini kullanmaktan kaçının. Bunun yerine _beginthreadex() kullanın |
|
uyarı C28623: GetMessagePos() koordinatlarının imzasız ataması. LOWORD/HIWORD yerine GET_X_LPARAM/GET_Y_LPARAM kullanın |
|
uyarı C28624: LResultFromObject'ten artımlı refcount ile eşleşecek Release() çağrısı yok |
|
uyarı C28625: Hassas verileri temizlemek için kullanılan işlev çağrısı iyileştirilir |
|
uyarı C28636: GetSecurityDescriptorOwner/Group/Dacl/Sacl çağrılarından alınan ayrılmamış işaretçide LocalFree çağrısı |
|
uyarı C28637: Genel başlatıcıda işlevin çağrılması güvenli değil |
|
uyarı C28638: işlev gecikme yükü saplaması eşleşen bir bildirim eksik |
|
uyarı C28639: Dizeyle kapanış tutamacını çağırma |
|
uyarı C28640: işlev gecikme yükü saplaması statik bir işlev olmalıdır |
|
uyarı C28644: DPA_InsertPtr iade edilmeyen değer |
|
uyarı C28645: MessageBox artık önerilmez soru işareti ileti simgesi kullanılarak çağrıldı |
|
uyarı C28648: PulseEvent güvenilir olmayan bir işlevdir |
|
uyarı C28649: Otomatik veya Genel Yığın Dizileri hiçbir zaman NULL değildir |
|
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. |
|
uyarı C28651: Statik başlatıcı, üye işlev işaretçileri nedeniyle yazma sayfalarında kopyalamaya neden oluyor |
|
uyarı C28652: Statik başlatıcı, aşırı yüklenmiş bit düzeyinde işleçler nedeniyle yazma sayfalarında kopyalamaya neden oluyor |
|
uyarı C28714: Sembolik olarak farklı tamsayı türleri arasında atama |
|
uyarı C28715: Sembolik olarak farklı tamsayı türleri arasında atama |
|
uyarı C28716: Sembolik olarak farklı integral türleri arasında derleyici tarafından eklenen atama |
|
uyarı C28717: Geçersiz DEĞIŞKEN türü |
|
uyarı C28718: Eklenmemiş arabellek |
|
uyarı C28719: Yasaklanmış API Kullanımı |
|
uyarı C28720: Yasaklanmış API Kullanımı |
|
uyarı C28721: Kullanım dışı performans sayacı mimarisi |
|
uyarı C28722: İşlev bildiriminde eklenmeyen arabellek |
|
uyarı C28723: İşlev tanımında karşılık gelen bildirimi olmayan eklenmemiş arabellek |
|
uyarı C28725: Bu SetUnhandledExceptionFilter yerine Watson kullanın |
|
uyarı C28726: Yasaklanmış API Kullanımı |
|
uyarı C28727: Yasaklanmış API Kullanımı |
|
uyarı C28728: Yasaklanmış API Kullanımı |
|
uyarı C28730: '\0' öğesinin doğrudan işaretçiye atanma olasılığı. |
|
uyarı C28735: Yasaklanmış Crimson API Kullanımı |
|
uyarı C28736: Yasaklanmış API Bağımsız Değişken Kullanımı |
|
uyarı C28740: Unannotated unannoted unsigned buffer |
|
uyarı C28741: İşlevde eklenmeyen arabellek |
|
uyarı C28742: İşlevde eklenmeyen arabellek |
|
uyarı C28750: Lstrlen ve varyantlarının kullanımı yasaklandı |
|
uyarı C28751: ExAllocatePool ve varyantlarının kullanımı yasaklandı |
|
uyarı C28752: Çekirdek32 veya advapi32 API'sinin yasaklanmış kullanımı |
|
uyarı C28753: Parametrelerin tanımlanmamış değerlendirme sırasına bağlı olarak |
|
uyarı C30029: Yürütülebilir bellek isteyen bir bellek ayırma işlevi çağırma |
|
uyarı C30030: Bellek ayırma işlevini çağırma ve yürütülebilir belleği gösteren bir parametre geçirme |
|
uyarı C30031: Bellek ayırma işlevini çağırma ve yürütülebilir belleği gösteren bir parametre geçirme |
|
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 |
|
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. |
|
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. |
|
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. |