Teilen über


CodeQL-Abfragen und -Suites für Windows-Treibertests

Das GitHub-Repository von Microsoft CodeQL bietet drei Abfragesuiten, um den End-to-End-Treiber-Entwicklerworkflow zu vereinfachen. Diese Suites sind im CodeQL-Paket von Microsoft/windows-drivers enthalten und verwenden Abfragen, die für dieses Paket und allgemeine C++-Abfragen aus dem Microsoft/cpp-queries-Paket eindeutig sind.

  • recommended.qls enthält eine breite Palette von Überprüfungen auf allgemeine Treiber- und C/C++-Fehler. Wir empfehlen, diese Suite standardmäßig auszuführen und Ergebnisse zu überprüfen.
  • mustrun.qls enthält Prüfungen, die ausgeführt werden müssen , um die WHCP-Zertifizierung (Windows Hardware Compatibility Program) zu bestehen. Da diese Abfragen in einigen Fällen zu falsch positiven Ergebnissen führen können, bedeutet das Scheitern dieser Prüfungen nicht, dass der Logotest für statische Tools fehlschlägt. Aber Entwickler sollten die Ergebnisse überprüfen und echte Fehler beheben. Eine DVL, die ohne Ergebnisse für diese Prüfungen generiert wurde, schlägt den Logotest für statische Tools fehl. Für 26H1 sind mustrun.qls und recommended.qls identisch.
  • mustfix.qls dient als Teilmenge der must-run-Abfragen und enthält Prüfungen, die Probleme melden, die behoben werden müssen , um die WHCP-Zertifizierung zu bestehen. Eine DVL, die mit Fehlern in diesen Regeln generiert wurde, besteht den Logo-Test für statische Tools nicht.

Details zum Inhalt der Abfragesammlungen finden Sie unter CodeQL-Abfragen und -Suites.

Unbedingt zu beheben Abfragen für die WHCP-Zertifizierung

Die folgenden Teilmengen von Abfragen sind Must-Fix für die WHCP-Zertifizierung und sind auch in der Empfohlenen Fix-Suite enthalten. Dieser Satz von Regeln ist in mustfix.qls enthalten.

Viele der folgenden Regeln entsprechen allgemeinen Schwächeaufzählungen (Common Weakness Enumeration, CWEs) oder vorherigen Codeanalysewarnungen.

Dringend zu beheben Abfragen aus dem Microsoft/Windows-Drivers-Paket

Identifikationsnummer Standort Allgemeine Schwächeaufzählung / Codeanalysewarnung
cpp/drivers/wdk-deprecated-api /microsoft/windows-drivers/<Version>/drivers/general/queries/WdkDeprecatedApis/wdk-deprecated-api.ql Nicht verfügbar
cpp/treiber/erweiterte-veraltete-apis /microsoft/windows-drivers/<Version>/drivers/general/queries/ExtendedDeprecatedApis/ExtendedDeprecatedApis.ql C28719 Warnung, C28726 Warnung, C28735 Warnung, C28750 Warnung
cpp/incorrect-string-type-conversion-ignore-puchar-casts /microsoft/windows-drivers/<Version>/microsoft/Security/CWE/CWE-704/WcharCharConversionLimited.ql CWE-704

Must-Fix Abfragen aus dem Microsoft/cpp-queries-Pack

Identifikationsnummer Standort Allgemeine Schwächeaufzählung
cpp/bad-addition-overflow-check /microsoft/cpp-queries/<Version>/Likely Bugs/Arithmetic/BadAdditionOverflowCheck.ql CWE-190, CWE-192
cpp/ungültige-nummernformat-argumente /microsoft/cpp-queries/<Version>/Likely Bugs/Format/WrongNumberOfFormatArguments.ql CWE-234, CWE-685
cpp/pointer-overflow-check /microsoft/cpp-queries/<Version>/Likely Bugs/Memory Management/PointerOverflow.ql CWE-758
cpp/unsafe-strncat /microsoft/cpp-queries/<Version>/Likely Bugs/Memory Management/SuspiciousCallToStrncat.ql CWE-119, CWE-251, CWE-676, CWE-788
cpp/unsafe-use-of-this /microsoft/cpp-queries/<Version>/Likely Bugs/OO/UnsafeUseOfThis.ql CWE-670
cpp/boost/fehlerhafte-tls-einstellungen /microsoft/cpp-queries/<Version>/Likely Bugs/Protocols/TlsSettingsMisconfiguration.ql CWE-326
cpp/boost/verwenden-veralteter-fest-kodierter-sicherheitsprotokoll /microsoft/cpp-queries/<Version>/Likely Bugs/Protocols/UseOfDeprecatedHardcodedProtocol.ql CWE-327
cpp/zu-wenige-argumente /microsoft/cpp-queries/<Version>/Likely Bugs/Underspecified Functions/TooFewArguments.ql CWE-234, CWE-685
cpp/microsoft/public/badoverflowguard /microsoft/cpp-queries/<Version>/Microsoft/Likely Bugs/Conversion/BadOverflowGuard.ql CWE-190, CWE-191
cpp/microsoft/public/drivers/incorrect-usage-of-rtlcomparemory /microsoft/cpp-queries/<Version>/Microsoft/Likely Bugs/Drivers/IncorrectUsageOfRtlCompareMemory.ql Nicht verfügbar
cpp/microsoft/public/weak-crypto/verbotene-verschlüsselungsalgorithmen /microsoft/cpp-queries/<Version>/Microsoft/Security/Cryptography/BannedEncryption.ql CWE-327
cpp/microsoft/public/weak-crypto/capi/banned-modes /microsoft/cpp-queries/<Version>/Microsoft/Security/Cryptography/BannedModesCAPI.ql CWE-327
cpp/microsoft/public/weak-crypto/cng/banned-modes /microsoft/cpp-queries/<Version>/Microsoft/Security/Cryptography/BannedModesCNG.ql CWE-327
cpp/microsoft/public/weak-crypto/cng/hardcoded-iv /microsoft/cpp-queries/<Version>/Microsoft/Security/Cryptography/HardcodedIVCNG.ql CWE-327
cpp/microsoft/public/enum-index /microsoft/cpp-queries/<Version>/Microsoft/Security/MemoryAccess/EnumIndex/UncheckedBoundsEnumAsIndex.ql CWE-125
cpp/command-line-injection /microsoft/cpp-queries/<Version>/Security/CWE/CWE-078/ExecTainted.ql CWE-078, CWE-088
cpp/unkontrollierter-Prozessbetrieb /microsoft/cpp-queries/<Version>/Security/CWE/CWE-114/UncontrolledProcessOperation.ql CWE-114
cpp/badly-bounded-write /microsoft/cpp-queries/<Version>/Security/CWE/CWE-120/BadlyBoundedWrite.ql CWE-120, CWE-787, CWE-805
cpp/overrunning-write /microsoft/cpp-queries/<Version>/Security/CWE/CWE-120/OverrunWrite.ql CWE-120, CWE-787, CWE-805
cpp/no-space-for-terminator /microsoft/cpp-queries/<Version>/Security/CWE/CWE-131/NoSpaceForZeroTerminator.ql CWE-120, CWE-122, CWE-131
cpp/user-controlled-null-termination-tainted /microsoft/cpp-queries/<Version>/Security/CWE/CWE-170/ImproperNullTerminationTainted.ql CWE-170
cpp/comparison-with-wider-type /microsoft/cpp-queries/<Version>/Security/CWE/CWE-190/ComparisonWithWiderType.ql CWE-190, CWE-197, CWE-835
cpp/hresult-boolean-conversion /microsoft/cpp-queries/<Version>/Security/CWE/CWE-253/HResultBooleanConversion.ql CWE-253
cpp/openssl-heartbleed /microsoft/cpp-queries/<Version>/Security/CWE/CWE-327/OpenSslHeartbleed.ql CWE-327, CWE-788
cpp/gefährlicher-Funktionsüberlauf /microsoft/cpp-queries/<Version>/Security/CWE/CWE-676/DangerousFunctionOverflow.ql CWE-242, CWE-676
cpp/dangerous-cin /microsoft/cpp-queries/<Version>/Security/CWE/CWE-676/DangerousUseOfCin.ql CWE-676
cpp/incorrect-string-type-conversion /microsoft/cpp-queries/<Version>/Security/CWE/CWE-704/WcharCharConversion.ql CWE-704
cpp/unsafe-dacl-security-descriptor /microsoft/cpp-queries/<Version>/Security/CWE/CWE-732/UnsafeDaclSecurityDescriptor.ql CWE-732

Die Suite recommended.qls enthält alle Abfragen aus der mustfix.qls-Suite sowie die folgenden Abfragen aus den Microsoft/windows-drivers- und Microsoft/cpp-queries-Paketen.

Allgemeine Treiberabfragen aus dem Microsoft/windows-drivers Pack

Identifikationsnummer Standort Codeanalysewarnung
cpp/drivers/annotation-syntax /microsoft/windows-drivers/<Version>/drivers/general/queries/AnnotationSyntax/AnnotationSyntax.ql C28266-Warnung
cpp/treiber/aktueller-funktionstyp-nicht-korrekt /microsoft/windows-drivers/<Version>/drivers/general/queries/CurrentFunctionTypeNotCorrect/CurrentFunctionTypeNotCorrect.ql C28101-Warnung
cpp/drivers/default-pool-tag /microsoft/windows-drivers/<Version>/drivers/general/queries/DefaultPoolTag/DefaultPoolTag.ql C28147-Warnung
cpp/drivers/driver-entry-save-buffer /microsoft/windows-drivers/<Version>/drivers/general/queries/DriverEntrySaveBuffer/DriverEntrySaveBuffer.ql C28131-Warnung
cpp/drivers/geprüfter Wert /microsoft/windows-drivers/<Version>/drivers/general/queries/ExaminedValue/ExaminedValue.ql C28193-Warnung
cpp/drivers/irp-stack-entry-copy /microsoft/windows-drivers/<Version>/drivers/general/queries/IRPStackEntryCopy/IRPStackEntryCopy.ql C28114-Warnung
cpp/treiber/wichtiger-funktionsaufruf-optimiert-aus /microsoft/windows-drivers/<Version>/drivers/general/queries/ImportantFunctionCallOptimizedOut/ImportantFunctionCallOptimizedOut.ql C28625-Warnung
cpp/drivers/unsachgemäßer-Nichtoperator-auf-Null /microsoft/windows-drivers/<Version>/drivers/general/queries/ImproperNotOperatorOnZero/ImproperNotOperatorOnZero.ql C28650-Warnung
cpp/drivers/invalid-function-class-typedef /microsoft/windows-drivers/<Version>/drivers/general/queries/InvalidFunctionClassTypedef/InvalidFunctionClassTypedef.ql C28268-Warnung
cpp/drivers/invalid-function-pointer-annotation /microsoft/windows-drivers/<Version>/drivers/general/queries/InvalidFunctionPointerAnnotation/InvalidFunctionPointerAnnotation.ql C28165-Warnung
cpp/drivers/io-initialize-timer-call /microsoft/windows-drivers/<Version>/drivers/general/queries/IoInitializeTimerCall/IoInitializeTimerCall.ql C28133-Warnung
cpp/drivers/irql-annotation-issue /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlAnnotationIssue/IrqlAnnotationIssue.ql C28153-Warnung
cpp/drivers/irql-cancel-routine /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlCancelRoutine/IrqlCancelRoutine.ql C28144-Warnung
cpp/drivers/irql-float-state-mismatch /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlFloatStateMismatch/IrqlFloatStateMismatch.ql C28111-Warnung
cpp/drivers/irql-not-saved /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlNotSaved/IrqlNotSaved.ql C28158-Warnung
cpp/Treiber/irql-nicht-verwenden /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlNotUsed/IrqlNotUsed.ql C28157-Warnung
cpp/drivers/irql-set-too-high /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlSetTooHigh/IrqlSetTooHigh.ql C28150-Warnung
cpp/drivers/irql-set-too-low (IRQL zu niedrig eingestellt) /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlSetTooLow/IrqlSetTooLow.ql C28124-Warnung
cpp/drivers/irql-too-high /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlTooHigh/IrqlTooHigh.ql C28121-Warnung
cpp/drivers/irql-too-low /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlTooLow/IrqlTooLow.ql C28120-Warnung
cpp/drivers/ke-set-event-pageable /microsoft/windows-drivers/<Version>/drivers/general/queries/KeSetEventPageable/KeSetEventPageable.ql Keine zugeordnete Zertifizierungsstelle-Prüfung
cpp/drivers/multithreaded-av-condition /microsoft/windows-drivers/<Version>/drivers/general/queries/MultithreadedAVCondition/MultithreadedAVCondition.ql C28616-Warnung
cpp/drivers/ntstatus-explicit-cast /microsoft/windows-drivers/<Version>/drivers/general/queries/NtstatusExplicitCast/NtstatusExplicitCast.ql C28714-Warnung
cpp/drivers/ntstatus-explicit-cast2 /microsoft/windows-drivers/<Version>/drivers/general/queries/NtstatusExplicitCast2/NtstatusExplicitCast2.ql C28715-Warnung
cpp/drivers/ntstatus-explicit-cast3 /microsoft/windows-drivers/<Version>/drivers/general/queries/NtstatusExplicitCast3/NtstatusExplicitCast3.ql C28716-Warnung
cpp/drivers/null-Zeichen-Zeiger-Zuweisung /microsoft/windows-drivers/<Version>/drivers/general/queries/NullCharacterPointerAssignment/NullCharacterPointerAssignment.ql C28730-Warnung
cpp/drivers/operand-assignment /microsoft/windows-drivers/<Version>/drivers/general/queries/OperandAssignment/OperandAssignment.ql C28129-Warnung
cpp/drivers/pointer-variable-size /microsoft/windows-drivers/<Version>/drivers/general/queries/PointerVariableSize/PointerVariableSize.ql C28132-Warnung
cpp/drivers/pool-tag-integral /microsoft/windows-drivers/<Version>/drivers/general/queries/PoolTagIntegral/PoolTagIntegral.ql C28134-Warnung
cpp/treiber/rollen-typ-korrekt-verwendet /microsoft/windows-drivers/<Version>/drivers/general/queries/RoleTypeKorrektVerwendet/RoleTypeKorrektVerwendet.ql C28158-Warnung
cpp/drivers/routine-function-type-not-expected /microsoft/windows-drivers/<Version>/drivers/general/queries/RoutineFunctionTypeNotExpected/RoutineFunctionTypeNotExpected.ql C28127-Warnung
cpp/drivers/str-safe /microsoft/windows-drivers/<Version>/drivers/general/queries/StrSafe/StrSafe.ql C28146-Warnung
cpp/drivers/strict-type-match /microsoft/windows-drivers/<Version>/drivers/general/queries/StrictTypeMatch/StrictTypeMatch.ql C28139-Warnung

WDM-Treiberabfragen aus dem Microsoft/windows-drivers Pack

Identifikationsnummer Standort Codeanalysewarnung
cpp/treiber/illegaler-feldzugriff /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldAccess/IllegalFieldAccess.ql C28128-Warnung
cpp/treiber/unerlaubter-feldzugriff-2 /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldAccess2/IllegalFieldAccess2.ql C28175-Warnung
cpp/drivers/illegal-field-write /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldWrite/IllegalFieldWrite.ql C28176-Warnung
cpp/drivers/init-not-cleared /microsoft/windows-drivers/<Version>/drivers/wdm/queries/InitNotCleared/InitNotCleared.ql C28152-Warnung
cpp/drivers/kewaitlocal-requires-kernel-mode /microsoft/windows-drivers/<Version>/drivers/wdm/queries/KeWaitLocal/KeWaitLocal.ql C28135-Warnung
cpp/drivers/multiple-paged-code /microsoft/windows-drivers/<Version>/drivers/wdm/queries/MultiplePagedCode/MultiplePagedCode.ql C28171-Warnung
cpp/drivers/ob-reference-mode /microsoft/windows-drivers/<Version>/drivers/wdm/queries/ObReferenceMode/ObReferenceMode.ql C28126-Warnung
cpp/drivers/opaque-mdl-use /microsoft/windows-drivers/<Version>/drivers/wdm/queries/OpaqueMdlUse/OpaqueMdlUse.ql Keine zugeordnete Zertifizierungsstelle-Prüfung
cpp/drivers/opaque-mdl-write /microsoft/windows-drivers/<Version>/drivers/wdm/queries/OpaqueMdlWrite/OpaqueMdlWrite.ql C28145-Warnung
cpp/drivers/pending-status-error /microsoft/windows-drivers/<Version>/drivers/wdm/queries/PendingStatusError/PendingStatusError.ql C28143-Warnung
cpp/Treiber/falsche-Zuweisung-der-Versandtabellentabelle /microsoft/windows-drivers/<Version>/drivers/wdm/queries/WrongDispatchTableAssignment/WrongDispatchTableAssignment.ql C28168-Warnung, C28169-Warnung

Allgemeine C++-Abfragen aus dem Microsoft/windows-drivers Pack

Identifikationsnummer Standort Allgemeine Warnung zur Aufzählung von Schwachstellen /Codeanalyse
cpp/paddingbyteinformationdisclosure /microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Boundary Violations/PaddingByteInformationDisclosure.ql Nicht verfügbar
cpp/badoverflowguard /microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Conversion/BadOverflowGuard.ql Nicht verfügbar
cpp/infiniteloop /microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Conversion/InfiniteLoop.ql Nicht verfügbar
cpp/use-after-free (Verwendung nach Freigabe) /microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Memory Management/UseAfterFree/UseAfterFree.ql Nicht verfügbar
cpp/uninitializedptrfield /microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/UninitializedPtrField.ql Nicht verfügbar
cpp/weak-crypto/cng/hardcoded-iv /microsoft/windows-drivers/<Version>/microsoft/Security/Cryptography/HardcodedIVCNG.ql Nicht verfügbar

Allgemeine C++-Abfragen aus dem Microsoft/cpp-queries-Paket

Identifikationsnummer Standort Allgemeine Schwächeaufzählung
cpp/offset-verwendung-vor-bereichsprüfung /microsoft/cpp-queries/<Version>/Best Practices/Likely Errors/OffsetUseBeforeRangeCheck.ql CWE-120, CWE-125
cpp/Integer-Multiplikation-Cast-to-Long /microsoft/cpp-queries/<Version>/Likely Bugs/Arithmetic/IntMultToLong.ql CWE-190, CWE-192, CWE-197, CWE-681
cpp/signed-overflow-check /microsoft/cpp-queries/<Version>/Likely Bugs/Arithmetic/SignedOverflowCheck.ql CWE-128, CWE-190
cpp/upcast-array-pointer-arithmetik /microsoft/cpp-queries/<Version>/Likely Bugs/Conversion/CastArrayPointerArithmetic.ql CWE-119, CWE-843
cpp/falsche Verwendung des Nicht-Operators /microsoft/cpp-queries/<Version>/Likely Bugs/Likely Typos/IncorrectNotOperatorUsage.ql CWE-480
cpp/verdächtige Größeof /microsoft/cpp-queries/<Version>/Likely Bugs/Memory Management/SuspiciousSizeof.ql CWE-467
cpp/uninitialized-local /microsoft/cpp-queries/<Version>/Likely Bugs/Memory Management/UninitializedLocal.ql CWE-457, CWE-665
cpp/unterminated-variadic-call /microsoft/cpp-queries/<Version>/Security/CWE/CWE-121/UnterminatedVarargsCall.ql CWE-121
cpp/bedingt nicht initialisierte Variable /microsoft/cpp-queries/<Version>/Security/CWE/CWE-457/ConditionallyUninitializedVariable.ql CWE-457
cpp/suspicious-add-sizeof /microsoft/cpp-queries/<Version>/Security/CWE/CWE-468/SuspiciousAddWithSizeof.ql CWE-468
cpp/verdächtige Zeigerskalierung /microsoft/cpp-queries/<Version>/Security/CWE/CWE-468/IncorrectPointerScaling.ql CWE-468
cpp/suspicious-pointer-scaling-void /microsoft/cpp-queries/<Version>/Security/CWE/CWE-468/IncorrectPointerScalingVoid.ql CWE-468
cpp/potenziell gefährliche Funktion /microsoft/cpp-queries/<Version>/Security/CWE/CWE-676/PotentiallyDangerousFunction.ql CWE-676
cpp/overflow-buffer /microsoft/cpp-queries/<Version>/Security/CWE/CWE-119/OverflowBuffer.ql CWE-119, CWE-121, CWE-122, CWE-126

Obligatorische Anfragen

Die mustrun.qls-Suite enthält Abfragen, die ausgeführt werden müssen, um die WHCP-Zertifizierung zu bestehen. Diese Abfragen müssen möglicherweise aufgrund potenzieller falsch positiver Ergebnisse nicht unbedingt behoben werden, ihre Ergebnisse sollten jedoch überprüft und alle echten Fehler behoben werden. Eine DVL, die ohne Ergebnisse für diese Prüfungen generiert wurde, schlägt den Logotest für statische Tools fehl.

Für Windows 11, Version 26H1, sind die von mustrun.qls und recommended.qls verfügbar gemachten Abfragen identisch.