Illesztőprogram-figyelmeztetések kódelemzése

Ez a szakasz felsorolja és ismerteti azokat a figyelmeztetéseket, amelyeket az illesztőprogramok kódelemzése jelent, amikor az illesztőprogram kódjában lehetséges hibát észlel. Vegye figyelembe, hogy egyes figyelmeztetések kernel módú kódhoz készültek, és a felhasználói módú illesztőprogramok elemzésekor figyelmen kívül hagyhatók.

Fontos

Az illesztőprogramok kódelemzése a Windows 24H2 WDK-ban és az EWDK-ban érhető el, de felhívjuk a figyelmét, hogy ezt a jövőben megszüntetik.
A továbbiakban a CodeQL lesz az illesztőprogramok elsődleges statikus elemző eszköze. A CodeQL hatékony lekérdezési nyelvet biztosít, amely a kódot adatbázisként kezeli lekérdezni, így egyszerűen írhat lekérdezéseket adott viselkedések, minták és egyebek céljából. További információ a CodeQL használatáról a következőben található: CodeQL és a Static Tools Logo Test.

Az illesztőprogramok kódelemzése a következő típusú figyelmeztetéseket tartalmazza:

  • Általános figyelmeztetések (6000-6999): Lehetséges hibák a C és C++ szintaxisban és az általános kódolási gyakorlatban. A figyelmeztetések leírásáért lásd a C/C++ figyelmeztetések kódelemzését.

  • Windows-specifikus figyelmeztetések (28600-28799): Ezek a figyelmeztetések a Windows bizonyos használati mintáira vonatkoznak, de nem jellemzőek az illesztőprogramokra.

  • Driver-Specific figyelmeztetések (28100-28199): Hibák az illesztőprogramok alkalmazással, más illesztőprogramokkal és az operációs rendszerrel való interakciójában.

  • Széljegyzethibák (28200-28299 és 36000-36999): Ezek a figyelmeztetések azt jelzik, hogy helytelenül kódolt vagy nem megfelelő környezetben használták a széljegyzeteket. A legtöbb esetben az ilyen figyelmeztetés jelenléte azt jelzi, hogy a széljegyzet nem rendelkezik a kívánt (vagy bármilyen) hatással.

  • Memóriafoglalási figyelmeztetések (30029-30035): Ezek memóriafoglalási figyelmeztetések.

Ebben a részben

Téma Leírás

C28101

C28101 figyelmeztetés: Az Illesztőprogramok modul arra következtetett, hogy az aktuális függvény nem a megfelelő típusú függvény

C28110

C28110 figyelmeztetés: Az illesztőprogramoknak védeni kell a lebegőpontos hardver állapotát. Lásd az úszó használatát

C28111

C28111 figyelmeztetés: A lebegőpontos állapot mentéséhez használt IRQL nem egyezik az aktuális IRQL-sel (ehhez a visszaállítási művelethez).

C28114

C28114 figyelmeztetés: Egy teljes IRP-verembejegyzés másolásával bizonyos mezők inicializálva maradnak, amelyeket törölni vagy frissíteni kell.

C28120

C28120 figyelmeztetés: A függvény nem hívható meg az aktuális IRQ-szinten. A jelenlegi szint túl alacsony.

C28121

C28121 figyelmeztetés: A függvény nem hívható meg az aktuális IRQ-szinten. A jelenlegi szint túl magas.

C28122

C28122 figyelmeztetés: A függvény meghívása nem engedélyezett alacsony IRQ-szinten. A korábbi függvényhívások nem összhangban vannak ezzel a korlátozással.

C28123

C28123 figyelmeztetés: A függvény meghívása nem engedélyezett magas IRQ-szinten. A korábbi függvényhívások nem összhangban vannak ezzel a korlátozással.

C28124

C28124 figyelmeztetés: A hívás hatására az IRQ-szint az elemzett függvény számára elfogadható minimális érték alá kerül.

C28126

C28126 figyelmeztetés: A ObReferenceObject* AccessMode paraméterének IRP->RequestorMode-nak kell lennie

C28127

C28127 figyelmeztetés: A rutinként használt függvény nem felel meg pontosan a várt típusnak.

C28128

C28128 figyelmeztetés: A mezőhöz való hozzáférés közvetlenül megtörtént. Ezt rutinból kell csinálni.

C28129

C28129 figyelmeztetés: Hozzárendelés történt egy operandushoz, amelyet csak bitkészletekkel és törlésekkel lehet módosítani

C28131

C28131 figyelmeztetés: A DriverEntry rutinnak az argumentum másolatát kell mentenie, nem a mutatót, mert az I/O-kezelő felszabadítja a puffert

C28132

C28132 figyelmeztetés: A mutató méretének figyelembevétele

C28133

figyelmeztetés C28133: Az IoInitializeTimer a legjobban az AddDevice-ből hívható

C28134

C28134 figyelmeztetés: A készletcímkének integrálnak kell lennie, nem sztringnek vagy sztringmutatónak

C28135

C28135 figyelmeztetés: Ha a KeWaitForSingleObject első argumentuma helyi változó, a Mód paraméternek KernelMode-nak kell lennie

C28139

C28139 figyelmeztetés: Az argumentumnak pontosan meg kell egyeznie a típussal

C28141

C28141 figyelmeztetés: Az argumentum hatására az IRQ-szint az aktuális IRQL alatt van beállítva, és ez a függvény nem használható erre a célra

C28143

C28143 figyelmeztetés: Az IoMarkIrpPending hívását kezdeményező kézbesítési rutinnak is vissza kell adnia STATUS_PENDING

C28144

C28144 figyelmeztetés: A megszakítási rutinon belül, a kilépési ponton az Irp->CancelIrql irQL-jének kell lennie az aktuális IRQL-nek.

C28145

C28145 figyelmeztetés: Az átlátszatlan MDL-struktúrát az illesztőprogram nem módosíthatja

C28146

C28146 figyelmeztetés: A kernel módú illesztőprogramoknak ntstrsafe.h-t kell használniuk, nem strsafe.h-t. A forrásfájlban található

C28147

C28147 figyelmeztetés: Az alapértelmezett készletcímke ('kdD' vagy 'mdW' ) használata a függvény hívásaihoz nem célja a készletcímkézésnek

C28150

C28150 figyelmeztetés: A függvény hatására az IRQ-szint az elemzett függvény számára elfogadható maximális érték fölé kerül

C28151

C28151 figyelmeztetés: Az érték nem jogi érték az IRQL-hez

C28152

C28152 figyelmeztetés: Egy AddDevice-szerű függvény visszatérése váratlanul DO_DEVICE_INITIALIZING

C28153

C28153 figyelmeztetés: A jegyzetből származó IRQL értéke ebben a környezetben nem értékelhető ki.

C28156

C28156 figyelmeztetés: A tényleges IRQL nem felel meg a szükséges IRQL-nek

C28157

C28157 figyelmeztetés: Az IRQL soha nem lett visszaállítva

C28158

C28158 figyelmeztetés: A program nem mentett IRQL-t

C28161

C28161 figyelmeztetés: Kilépés a lebegő hardver használatára vonatkozó jog megszerzése nélkül

C28162

C28162 figyelmeztetés: Kilépés a lebegőpontos hardver használatára való jogosultság megtartása közben

C28165

C28165 figyelmeztetés: Az osztály függvénymutatója nem egyezik a függvényosztály

C28166

C28166 figyelmeztetés: A függvény nem állítja vissza az IRQL-t arra az értékre, amely a függvénybejegyzéskor aktuális volt, és erre szükség van.

C28167

C28167 figyelmeztetés: A függvény módosítja az IRQL-t, és nem állítja vissza az IRQL-t, mielőtt kilép. Megjegyzést kell fűzni a módosításhoz, vagy vissza kell állítani az IRQL-t.

C28168

C28168 figyelmeztetés: A diszpécser függvény nem rendelkezik Dispatch_type megjegyzéssel, amely megfelel a küldési tábla bejegyzésének

C28169

C28169 figyelmeztetés: A küldési függvény nem rendelkezik Dispatch_type széljegyzetekkel

C28170

C28170 figyelmeztetés: A függvény lapozott szegmensben van deklarálva, de sem PAGED_CODE, sem PAGED_CODE_LOCKED nem található

C28171

C28171 figyelmeztetés: A függvény több PAGED_CODE vagy PAGED_CODE_LOCKED

C28172

C28172 figyelmeztetés: A függvény PAGED_CODE vagy PAGED_CODE_LOCKED van deklarálva, hogy lapozott szegmensben van

C28173

C28173 figyelmeztetés: Az aktuális függvény úgy tűnik, hogy helytelenül alkalmazkodik a 4 GB-nál nagyobb fizikai memóriához

C28175

C28175 figyelmeztetés: A vezető nem érheti el a strustruktúra tagját

C28176

C28176 figyelmeztetés: A szerkezet tagját nem módosíthatja az illesztőprogram

C28177

C28177 figyelmeztetés: A függvény egynél több függvényosztálysal van eljegyzve. A rendszer egy ki nem veszi az összeset.

C28260

C28260 figyelmeztetés: A függvényen belüli tulajdonság elemzése közben szintaxishiba történt a széljegyzetekben

C28266

A függvény tulajdonsága szintaxishibát talált a széljegyzetekben.

C28268

C28268 figyelmeztetés: A függvény függvényosztálya nem egyezik az itt használt típusdef függvényosztályával

C28601

C28601 figyelmeztetés: Ne blokkolja a HWND_BROADCAST

C28602

C28602 figyelmeztetés: A SendMessageTimeout meghívásának elkerülése HWND_BROADCAST

C28604

C28604 figyelmeztetés: A SendMessageTimeout meghívásának elkerülése SMTO_ABORTIFHUNG 0-s időtúllépéssel

C28615

C28615 figyelmeztetés: A __except() blokkban _resetstkoflw kell meghívnia _alloca hívásakor a __try blokkban. Ne hívja meg a _resetstkoflw a catch() blokkon belülről

C28616

C28616 figyelmeztetés: Többszálú AV-feltétel

C28617

C28617 figyelmeztetés: Kerülje a _beginthread() visszatérési értékét. Használja inkább a _beginthreadex()

C28623

C28623 figyelmeztetés: GetMessagePos() koordináták alá nem írt leadása. A LOWORD/HIWORD helyett GET_X_LPARAM/GET_Y_LPARAM használata

C28624

C28624 figyelmeztetés: Nincs hívás a Kiadás() felé az LResultFromObject-ből származó növekményes újraszámlálás egyeztetéséhez

C28625

C28625 figyelmeztetés: A bizalmas adatok törlésére használt függvényhívást a rendszer optimalizálja

C28636

C28636 figyelmeztetés: A LocalFree hívása a GetSecurityDescriptorOwner/Group/Dacl/Sacl hívásaiból beszerzett, nem lefoglalt mutatón

C28637

C28637 figyelmeztetés: A függvény globális inicializálóban való meghívása nem biztonságos

C28638

C28638 figyelmeztetés: a függvény delayload csonkja hiányzik egyező deklarációból

C28639

C28639 figyelmeztetés: Szoros fogópont meghívása sztringgel

C28640

C28640 figyelmeztetés: a függvény delayload csonkjának statikus függvénynek kell lennie

C28644

C28644 figyelmeztetés: Nem ellenőrzött DPA_InsertPtr visszaadott értéke

C28645

C28645 figyelmeztetés: A MessageBox a kérdőjeles üzenetszimbólummal lett meghívva, amely már nem ajánlott

C28648

C28648 figyelmeztetés: A PulseEvent egy megbízhatatlan függvény

C28649

C28649 figyelmeztetés: Az automatikus vagy globális veremtömbök soha nem null értékűek

C28650

C28650 figyelmeztetés: A(z) !0 által használt típus nem kezeli hibaesetként.

Állapotérték visszaadása, például: ! Az IGAZ érték nem ugyanaz, mint a hibát jelző állapotérték visszaadása.

C28651

C28651 figyelmeztetés: A statikus inicializáló a tagfüggvénymutatók miatt másolást okoz az írási oldalakon

C28652

C28652 figyelmeztetés: A statikus inicializáló a bitenkénti túlterhelés miatt másolást okoz az írási oldalakon

C28714

C28714 figyelmeztetés: A szemantikailag különböző egész számtípusok között

C28715

C28715 figyelmeztetés: A szemantikailag különböző egész számtípusok közötti öntés

C28716

C28716 figyelmeztetés: Fordító által beszúrt öntött a szemantikailag különböző integráltípusok között

C28717

C28717 figyelmeztetés: Érvénytelen VARIANT-típus

C28718

C28718 figyelmeztetés: Nem névtelen puffer

C28719

C28719 figyelmeztetés: Tiltott API-használat

C28720

C28720 figyelmeztetés: Tiltott API-használat

C28721

C28721 figyelmeztetés: Elavult teljesítményszámláló architektúrája

C28722

C28722 figyelmeztetés: Nem névtelen puffer a függvénydeklarációban

C28723

C28723 figyelmeztetés: Nem megadott puffer a függvénydefinícióban, amely nem rendelkezik megfelelő deklarációval

C28725

C28725 figyelmeztetés: A Watson használata a SetUnhandledExceptionFilter helyett

C28726

C28726 figyelmeztetés: Tiltott API-használat

C28727

C28727 figyelmeztetés: Tiltott API-használat

C28728

C28728 figyelmeztetés: Tiltott API-használat

C28730

C28730 figyelmeztetés: "\0" lehetséges hozzárendelése közvetlenül egy mutatóhoz.

C28735

C28735 figyelmeztetés: Tiltott Crimson API-használat

C28736

C28736 figyelmeztetés: Tiltott API-argumentumok használata

C28740

C28740 figyelmeztetés: Unannotated unsigned buffer

C28741

C28741 figyelmeztetés: Nem névtelen puffer a függvényben

C28742

C28742 figyelmeztetés: Nem névtelen puffer a függvényben

C28750

C28750 figyelmeztetés: Az lstrlen és változatai tiltott használata

C28751

C28751 figyelmeztetés: Az ExAllocatePool és változatai tiltott használata

C28752

C28752 figyelmeztetés: A kernel32 vagy az advapi32 API tiltott használata

C28753

C28753 figyelmeztetés: A paraméterek kiértékelésének nem definiált sorrendjére támaszkodva

C30029

C30029 figyelmeztetés: Végrehajtható memóriát kérő memóriakiosztási függvény meghívása

C30030

C30030 figyelmeztetés: Memóriakiosztási függvény meghívása és a végrehajtható memóriát jelző paraméter átadása

C30031

C30031 figyelmeztetés: Memóriakiosztási függvény meghívása és a végrehajtható memóriát jelző paraméter átadása

C30032

C30032 figyelmeztetés: Memóriakiosztási függvény meghívása és végrehajtható memória kérésének kényszerítése a POOL_NX_OPTOUT irányelv használatával

C30033

C30033 figyelmeztetés: Végrehajtható lefoglalás észlelhető a POOL_NX_OPTIN. Ezt az illesztőprogramot úgy határozták meg, hogy egy másik illesztőprogram futtatáskor tölti be. Ellenőrizze, hogy a betöltési illesztőprogram meghívja-e ExInitializeDriverRuntime(DrvRtPoolNxOptIn) a DriverEntryben.

C30034

C30034 figyelmeztetés: Jelölőérték átadása kiosztó függvénynek, amely végrehajtható memória lefoglalását eredményezheti. Ellenőrizze, hogy a kiosztási függvény nem kér-e végrehajtható, nem lapított készletet.

C30035

C30035 figyelmeztetés: Olyan függvény hívása történt, amelyet az inicializálási függvényen belülről kell végrehajtani (például DriverEntry() vagy DllInitialize()). A PREfast nem tudta megállapítani, hogy a hívás az inicializálási függvényből történt-e.