次の方法で共有


Windows ドライバー テスト用の CodeQL クエリとスイート

Microsoft CodeQL GitHub リポジトリには、エンドツーエンドのドライバー開発者ワークフローを簡略化するための 3 つのクエリ スイートが用意されています。 これらのスイートは microsoft/windows-drivers CodeQL パックに含まれており、そのパックに固有のクエリと microsoft/cpp-queries パックからの一般的な C++ クエリを利用します。

  • recommended.qls には、一般的なドライバーと C/C++ のバグに関する広範なチェックセットが含まれています。 このスイートは既定で実行し、結果を確認することをお勧めします。
  • mustrun.qls には、Windows ハードウェア互換性プログラム (WHCP) 認定に合格するために 実行する必要がある チェックが含まれています。 これらのクエリでは誤検知が発生する場合があるため、これらのチェックを失敗しても静的ツール ロゴ テストは失敗しませんが、開発者は結果を確認して修正し、実際のバグを修正する必要があります。 これらのチェックの結果なしで生成された DVL は、静的ツール ロゴ テストに失敗します。 26H1 の場合、 mustrun.qlsrecommended.qls は同じです。
  • mustfix.qls は、実行する必要があるクエリのサブセットとして機能し、WHCP 認定に合格するために 修正する必要がある 問題を報告するチェックを含みます。 これらのルールでエラーが発生して生成された DVL は、静的ツール ロゴ テストに合格しません。

クエリ スイートの内容の詳細については、「 CodeQL クエリとスイート」を参照してください。

WHCP 認定の必要修正クエリ

次のクエリのサブセットは、WHCP 認定の修正が必要であり、推奨される修正スイートにも含まれています。この一連の規則mustfix.qls に含まれています

次の規則の多くは、 Common Weakness Enumeration (CWEs) または以前の コード分析の警告に対応しています。

microsoft/windows-drivers パックの対応必須クエリ

ID ロケーション 一般的な弱点の列挙 / コード分析の警告
cpp/drivers/wdk-deprecated-api /microsoft/windows-drivers/<Version>/drivers/general/queries/WdkDeprecatedApis/wdk-deprecated-api.ql なし
cpp/drivers/extended-deprecated-apis /microsoft/windows-drivers/<Version>/drivers/general/queries/ExtendedDeprecatedApis/ExtendedDeprecatedApis.ql C28719 警告C28726 警告C28735 警告C28750 警告
cpp/不正な文字列型変換-pucharキャストを無視 /microsoft/windows-drivers/<Version>/microsoft/Security/CWE/CWE-704/WcharCharConversionLimited.ql CWE-704

microsoft/cpp-queries パックから修正が必要なクエリ

ID ロケーション 一般的な弱点の列挙
cpp/不良な加算オーバーフロー検査 /microsoft/cpp-queries/<Version>/Likely Bugs/Arithmetic/BadAdditionOverflowCheck.ql CWE-190CWE-192
cpp/間違った数値フォーマット引数 /microsoft/cpp-queries/<Version>/Likely Bugs/Format/WrongNumberOfFormatArguments.ql CWE-234CWE-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-119CWE-251CWE-676CWE-788
cpp/thisの不正使用 /microsoft/cpp-queries/<Version>/Likely Bugs/OO/UnsafeUseOfThis.ql CWE-670
cpp/boost/tls-settings-misconfiguration /microsoft/cpp-queries/<Version>/Likely Bugs/Protocols/TlsSettingsMisconfiguration.ql CWE-326
cpp/boost/use-of-deprecated-hardcoded-security-protocol /microsoft/cpp-queries/<Version>/Likely Bugs/Protocols/UseOfDeprecatedHardcodedProtocol.ql CWE-327
cpp/too-few-arguments /microsoft/cpp-queries/<Version>/Likely Bugs/Underspecified Functions/TooFewArguments.ql CWE-234CWE-685
cpp/microsoft/public/badoverflowguard /microsoft/cpp-queries/<Version>/Microsoft/Likely Bugs/Conversion/BadOverflowGuard.ql CWE-190CWE-191
cpp/microsoft/public/drivers/incorrect-usage-of-rtlcomparememory /microsoft/cpp-queries/<Version>/Microsoft/Likely Bugs/Drivers/IncorrectUsageOfRtlCompareMemory.ql なし
cpp/microsoft/public/weak-crypto/banned-encryption-algorithms /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/コマンドラインインジェクション /microsoft/cpp-queries/<Version>/Security/CWE/CWE-078/ExecTainted.ql CWE-078CWE-088
cpp/制御されていないプロセスの操作 /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-120CWE-787CWE-805
cpp/オーバーラン書き込み /microsoft/cpp-queries/<Version>/Security/CWE/CWE-120/OverrunWrite.ql CWE-120CWE-787CWE-805
cpp/no-space-for-terminator /microsoft/cpp-queries/<Version>/Security/CWE/CWE-131/NoSpaceForZeroTerminator.ql CWE-120CWE-122CWE-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-190CWE-197CWE-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-327CWE-788
cpp/危険な関数オーバーフロー /microsoft/cpp-queries/<Version>/Security/CWE/CWE-676/DangerousFunctionOverflow.ql CWE-242CWE-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

recommended.qls スイートには、mustfix.qls スイートのすべてのクエリに加えて、microsoft/windows-drivers および microsoft/cpp-queries パックからの次のクエリが含まれています。

microsoft/windows-drivers パックからの一般的なドライバー クエリ

ID ロケーション コード分析の警告
cpp/drivers/annotation-syntax /microsoft/windows-drivers/<Version>/drivers/general/queries/AnnotationSyntax/AnnotationSyntax.ql C28266 警告
cpp/ドライバー/現在の関数型が正しくありません /microsoft/windows-drivers/<Version>/drivers/general/queries/CurrentFunctionTypeNotCorrect/CurrentFunctionTypeNotCorrect.ql C28101 警告
cpp/drivers/デフォルトプールタグ /microsoft/windows-drivers/<Version>/drivers/general/queries/DefaultPoolTag/DefaultPoolTag.ql C28147 警告
cpp/drivers/driver-entry-save-buffer /microsoft/windows-drivers/<Version>/drivers/general/queries/DriverEntrySaveBuffer/DriverEntrySaveBuffer.ql C28131 警告
cpp/ドライバー/検討された値 /microsoft/windows-drivers/<Version>/drivers/general/queries/ExaminedValue/ExaminedValue.ql C28193 警告
cpp/drivers/irp-stack-entry-copy /microsoft/windows-drivers/<Version>/drivers/general/queries/IRPStackEntryCopy/IRPStackEntryCopy.ql C28114 警告
cpp/drivers/重要な関数呼び出し-最適化された-アウト /microsoft/windows-drivers/<Version>/drivers/general/queries/ImportantFunctionCallOptimizedOut/ImportantFunctionCallOptimizedOut.ql C28625 警告
cpp/drivers/improper-not-operator-on-ゼロ /microsoft/windows-drivers/<Version>/drivers/general/queries/ImproperNotOperatorOnZero/ImproperNotOperatorOnZero.ql C28650 警告
cpp/drivers/invalid-function-class-typedef /microsoft/windows-drivers/<Version>/drivers/general/queries/InvalidFunctionClassTypedef/InvalidFunctionClassTypedef.ql C28268 警告
cpp/drivers/invalid-function-pointer-annotation /microsoft/windows-drivers/<Version>/drivers/general/queries/InvalidFunctionPointerAnnotation/InvalidFunctionPointerAnnotation.ql C28165 警告
cpp/drivers/io-initialize-timer-call /microsoft/windows-drivers/<Version>/drivers/general/queries/IoInitializeTimerCall/IoInitializeTimerCall.ql C28133 警告
cpp/drivers/irql-annotation-issue /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlAnnotationIssue/IrqlAnnotationIssue.ql C28153 警告
cpp/drivers/irql-cancel-routine /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlCancelRoutine/IrqlCancelRoutine.ql C28144 警告
cpp/drivers/irql-float-state-mismatch /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlFloatStateMismatch/IrqlFloatStateMismatch.ql C28111 警告
cpp/drivers/irql-not-saved /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlNotSaved/IrqlNotSaved.ql C28158 警告
cpp/drivers/irql-not-used /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlNotUsed/IrqlNotUsed.ql C28157 警告
cpp/drivers/irql-set-too-high /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlSetTooHigh/IrqlSetTooHigh.ql C28150 警告
cpp/drivers/irql-set-too-low /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlSetTooLow/IrqlSetTooLow.ql C28124 警告
cpp/drivers/irql-too-high /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlTooHigh/IrqlTooHigh.ql C28121 警告
cpp/drivers/irql-too-low /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlTooLow/IrqlTooLow.ql C28120 警告
cpp/drivers/ke-set-event-pageable /microsoft/windows-drivers/<Version>/drivers/general/queries/KeSetEventPageable/KeSetEventPageable.ql 関連する CA チェックなし
cpp/drivers/multithreaded-av-condition /microsoft/windows-drivers/<Version>/drivers/general/queries/MultithreadedAVCondition/MultithreadedAVCondition.ql C28616 警告
cpp/drivers/ntstatus-explicit-cast /microsoft/windows-drivers/<Version>/drivers/general/queries/NtstatusExplicitCast/NtstatusExplicitCast.ql C28714 警告
cpp/drivers/ntstatus-explicit-cast2 /microsoft/windows-drivers/<Version>/drivers/general/queries/NtstatusExplicitCast2/NtstatusExplicitCast2.ql C28715 警告
cpp/drivers/ntstatus-explicit-cast3 /microsoft/windows-drivers/<Version>/drivers/general/queries/NtstatusExplicitCast3/NtstatusExplicitCast3.ql C28716 警告
cpp/drivers/ヌル文字ポインタ割り当て /microsoft/windows-drivers/<Version>/drivers/general/queries/NullCharacterPointerAssignment/NullCharacterPointerAssignment.ql C28730 警告
cpp/drivers/オペランド-アサインメント /microsoft/windows-drivers/<Version>/drivers/general/queries/OperandAssignment/OperandAssignment.ql C28129 警告
cpp/drivers/ポインター変数サイズ /microsoft/windows-drivers/<Version>/drivers/general/queries/PointerVariableSize/PointerVariableSize.ql C28132 警告
cpp/drivers/pool-tag-integral /microsoft/windows-drivers/<Version>/drivers/general/queries/PoolTagIntegral/PoolTagIntegral.ql C28134 警告
cpp/drivers/role-type-correctly-used /microsoft/windows-drivers/<Version>/drivers/general/queries/RoleTypeCorrectlyUsed/RoleTypeCorrectlyUsed.ql C28158 警告
cpp/drivers/routine-function-type-not-expected /microsoft/windows-drivers/<Version>/drivers/general/queries/RoutineFunctionTypeNotExpected/RoutineFunctionTypeNotExpected.ql C28127 警告
cpp/drivers/str-safe /microsoft/windows-drivers/<Version>/drivers/general/queries/StrSafe/StrSafe.ql C28146 警告
cpp/drivers/strict-type-match /microsoft/windows-drivers/<Version>/drivers/general/queries/StrictTypeMatch/StrictTypeMatch.ql C28139 警告

microsoft/windows-drivers パックからの WDM ドライバー クエリ

ID ロケーション コード分析の警告
cpp/drivers/illegal-field-access /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldAccess/IllegalFieldAccess.ql C28128 警告
cpp/drivers/illegal-field-access-2 /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldAccess2/IllegalFieldAccess2.ql C28175 警告
cpp/drivers/illegal-field-write /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldWrite/IllegalFieldWrite.ql C28176 警告
cpp/drivers/init-not-cleared /microsoft/windows-drivers/<Version>/drivers/wdm/queries/InitNotCleared/InitNotCleared.ql C28152 警告
cpp/drivers/kewaitlocal-requires-kernel-mode /microsoft/windows-drivers/<Version>/drivers/wdm/queries/KeWaitLocal/KeWaitLocal.ql C28135 警告
cpp/drivers/multiple-paged-code /microsoft/windows-drivers/<Version>/drivers/wdm/queries/MultiplePagedCode/MultiplePagedCode.ql C28171 警告
cpp/drivers/ob-reference-mode /microsoft/windows-drivers/<Version>/drivers/wdm/queries/ObReferenceMode/ObReferenceMode.ql C28126 警告
cpp/drivers/opaque-mdl-use /microsoft/windows-drivers/<Version>/drivers/wdm/queries/OpaqueMdlUse/OpaqueMdlUse.ql 関連する CA チェックなし
cpp/drivers/opaque-mdl-write /microsoft/windows-drivers/<Version>/drivers/wdm/queries/OpaqueMdlWrite/OpaqueMdlWrite.ql C28145 警告
cpp/drivers/pending-status-error /microsoft/windows-drivers/<Version>/drivers/wdm/queries/PendingStatusError/PendingStatusError.ql C28143 警告
cpp/drivers/wrong-dispatch-table-assignment /microsoft/windows-drivers/<Version>/drivers/wdm/queries/WrongDispatchTableAssignment/WrongDispatchTableAssignment.ql C28168 警告C28169 警告

microsoft/windows-drivers パックからの一般的な C++ クエリ

ID ロケーション 一般的な弱点の列挙 /コード分析の警告
cpp/パディングバイト情報漏洩 /microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Boundary Violations/PaddingByteInformationDisclosure.ql なし
cpp/badoverflowguard /microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Conversion/BadOverflowGuard.ql なし
cpp/infiniteloop /microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Conversion/InfiniteLoop.ql なし
cpp/use-after-free /microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Memory Management/UseAfterFree/UseAfterFree.ql なし
cpp/uninitializedptrfield /microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/UninitializedPtrField.ql なし
cpp/weak-crypto/cng/hardcoded-iv /microsoft/windows-drivers/<Version>/microsoft/Security/Cryptography/HardcodedIVCNG.ql なし

microsoft/cpp-queries パックからの一般的な C++ クエリ

ID ロケーション 一般的な弱点の列挙
cpp/offset-use-before-range-check /microsoft/cpp-queries/<Version>/ベスト プラクティス/可能性の高いエラー/OffsetUseBeforeRangeCheck.ql CWE-120CWE-125
cpp/integer-multiplication-cast-to-long /microsoft/cpp-queries/<Version>/Likely Bugs/Arithmetic/IntMultToLong.ql CWE-190CWE-192CWE-197CWE-681
cpp/符号付きオーバーフローチェック /microsoft/cpp-queries/<Version>/Likely Bugs/Arithmetic/SignedOverflowCheck.ql CWE-128CWE-190
cpp/upcast-array-pointer-arithmetic /microsoft/cpp-queries/<Version>/Likely Bugs/Conversion/CastArrayPointerArithmetic.ql CWE-119CWE-843
cpp/incorrect-not-operator-usage(誤った not 演算子の使用) /microsoft/cpp-queries/<Version>/可能性の高いバグ/可能性の高いタイプミス/IncorrectNotOperatorUsage.ql CWE-480
cpp/suspicious-sizeof /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-457CWE-665
cpp/終端されていない可変長引数呼び出し /microsoft/cpp-queries/<Version>/Security/CWE/CWE-121/UnterminatedVarargsCall.ql CWE-121
cpp/条件付き初期化されていない変数 /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/suspicious-pointer-scaling /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/potentially-dangerous-function /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-119CWE-121CWE-122CWE-126

必須実行クエリ

mustrun.qls スイートには、WHCP 認定に合格するために実行する必要があるクエリが含まれています。 これらのクエリは、誤検知の可能性があるため、必ずしも修正する必要はありませんが、結果を確認し、実際のバグが見つかった場合は修正する必要があります。 これらのチェックの結果なしで生成された DVL は、静的ツール ロゴ テストに失敗します。

Windows 11 バージョン 26H1 の場合、 mustrun.qlsrecommended.qls によって公開されるクエリは同じです。