Bagikan melalui


CodeQL dan Uji Logo Alat Statis

CodeQL dan Keamanan Driver

Microsoft berkomitmen untuk mengurangi permukaan serangan untuk sistem operasi Windows, dan memastikan bahwa driver pihak ketiga memenuhi bilah keamanan yang kuat sangat penting untuk mencapai tujuan tersebut. Salah satu langkah dalam mengatur bilah keamanan ini adalah persyaratan untuk Program Kompatibilitas Perangkat Keras Windows (WHCP) yang menyatakan bahwa semua pengiriman driver harus menggunakan mesin CodeQL pada kode sumber driver dan memperbaiki pelanggaran apa pun yang dianggap "Harus Diperbaiki".

CodeQL, oleh GitHub, adalah mesin analisis kode semantik yang kuat, dan kombinasi serangkaian kueri keamanan bernilai tinggi yang luas bersama dengan platform yang kuat menjadikannya alat yang sangat berharga untuk mengamankan kode driver.

Penggunaan CodeQL untuk tujuan pengujian WHCP dapat diterima berdasarkan Perjanjian Lisensi Pengguna Akhir Kit Lab Perangkat Keras (HLK). Untuk peserta WHCP, EULA HLK menimpa Syarat dan Ketentuan CodeQL GitHub dengan menyatakan bahwa CodeQL dapat digunakan selama analisis otomatis, CI atau CD, sebagai bagian dari proses rekayasa normal untuk tujuan menganalisis driver yang akan dikirimkan dan disertifikasi sebagai bagian dari WHCP.

Persyaratan untuk menganalisis kode sumber driver dan memperbaiki pelanggaran "Harus Diperbaiki " akan diberlakukan oleh Uji Logo Alat Statis.

Topik ini menjelaskan cara:

  • Gunakan CodeQL untuk menganalisis kode sumber driver Anda untuk masalah keamanan berdampak tinggi yang diketahui.
  • Pastikan Uji Logo Alat Statis dapat menggunakan hasil menjalankan CodeQL.
  • Tentukan kueri "Harus Diperbaiki" mana yang harus dijalankan untuk sertifikasi WHCP.

Penting

Program Kompatibilitas Perangkat Keras Windows memerlukan CodeQL untuk Pengujian Logo Alat Statis (STL) pada Sistem Operasi Klien dan Server kami. Kami akan terus mempertahankan dukungan untuk SDV dan CA pada produk yang lebih lama. Mitra sangat didorong untuk meninjau persyaratan CodeQL untuk Uji Logo Alat Statis.

HLK EULA dan CodeQL

Penggunaan CodeQL untuk tujuan sertifikasi untuk pengujian Program Kompatibilitas Perangkat Keras Windows dapat diterima berdasarkan Perjanjian Lisensi Pengguna Akhir Hardware Lab Kit (HLK ). Untuk peserta WHCP, EULA HLK menimpa Syarat dan Ketentuan CodeQL GitHub. HLK EULA menyatakan bahwa CodeQL dapat digunakan selama analisis otomatis, CI atau CD, sebagai bagian dari proses rekayasa normal untuk tujuan menganalisis driver yang akan dikirimkan dan disertifikasi sebagai bagian dari Program Kompatibilitas Perangkat Keras Windows. Bagi mereka yang mengikuti untuk penggunaan umum, baca Syarat dan Ketentuan CodeQL GitHub dan/atau hubungi CodeQL.

Konsep CodeQL

CodeQL adalah mesin analisis statis yang digunakan oleh pengembang untuk melakukan analisis keamanan pada kode di luar lingkungan langsung. CodeQL menyerap kode saat sedang dikompilasi, dan membangun database darinya. Database menjadi direktori yang berisi data yang dapat dikueri, referensi sumber, dan file log. Setelah database dibuat, seseorang dapat menjalankan analisis di atasnya dengan menggunakan kueri CodeQL (juga disebut pemeriksaan atau aturan) yang akan menentukan apakah kode sumber berisi pelanggaran atau kerentanan keamanan. CodeQL menyediakan pustaka kueri standar yang memeriksa kebenaran bahasa, semantik, dan memberikan nilai besar bagi pengembang yang ingin memastikan kode mereka bebas dari bug dan kerentanan.

CodeQL juga menyediakan opsi untuk membangun kueri kustom. Untuk informasi selengkapnya tentang menulis kueri kustom, lihat Menulis kueri di dokumen CodeQL.

CodeQL juga menyediakan alat baris perintah CodeQL (CLI) untuk dengan mudah melakukan tindakan CodeQL dan/atau melakukan analisis skala besar.

Dokumentasi CodeQL CLI tambahan dapat ditemukan di CodeQL Memulai.

1. Penyiapan CodeQL

Untuk Penggunaan Program Kompatibilitas Perangkat Keras Windows

Matriks Versi Rilis Program Kompatibilitas Perangkat Keras Windows

Gunakan matriks ini untuk menentukan versi yang akan diunduh.

Rilis Windows Versi CodeQL CLI versi paket QL microsoft/windows-drivers codeql/cpp-queries versi paket QL Cabang yang akan digunakan
Windows Server 2022 2.4.6 atau 2.15.4 1.0.13 (Jika menggunakan codeql 2.15.4) 0.9.0 (Jika menggunakan codeql 2.15.4) WHCP_21H2
Windows 11 2.4.6 atau 2.15.4 1.0.13 (Jika menggunakan codeql 2.15.4) 0.9.0 (Jika menggunakan codeql 2.15.4) WHCP_21H2
Windows 11, versi 22H2 2.6.3 atau 2.15.4 1.0.13 (Jika menggunakan codeql 2.15.4) 0.9.0 (Jika menggunakan codeql 2.15.4) WHCP_22H2
Windows 11, versi 23H2 2.6.3 atau 2.15.4 1.0.13 (Jika menggunakan codeql 2.15.4) 0.9.0 (Jika menggunakan codeql 2.15.4) WHCP_22H2
Windows 11, versi 24H2 2.15.4 1.1.0 0.9.0 WHCP_24H2

Versi paket QL tidak ditentukan untuk CodeQL CLI 2.4.6 dan 2.6.3 karena hanya versi CodeQL yang lebih baru yang mendukung paket QL.

Untuk Penggunaan Umum

Untuk penggunaan umum CodeQL dengan versi Windows lain di luar program WHCP, atau untuk mengembangkan dan menguji kueri, kami saat ini merekomendasikan versi dan cabang berikut:

Versi CodeQL CLI versi qlpack microsoft/windows-drivers versi codeql/cpp-queries Cabang yang akan digunakan
2.15.4 terbaru terbaru utama

Mengunduh dan Menginstal CodeQL

Catatan

Visual Studio 17.8 memutuskan kompatibilitas dengan versi CodeQL yang lebih lama yang digunakan di cabang WHCP_21H2 dan WHCP_22H2. CodeQL CLI versi 2.15.4 telah divalidasi untuk digunakan dengan WHCP 21H2 dan WHCP 22H2 saat menggunakan Visual Studio 17.8 atau yang lebih tinggi. Untuk Program WHCP, gunakan versi CodeQL CLI sesuai dengan tabel di atas dan rilis Windows yang Anda sertifikasi untuk - versi 2.4.6, versi 2.6.3, atau versi 2.15.4. Untuk penggunaan umum dengan cabang utama, gunakan CodeQL CLI versi 2.15.4.

  1. Buat direktori untuk berisi CodeQL. Contoh ini menggunakan C:\codeql-home\

    C:\> mkdir C:\codeql-home
    
  2. Lihat tabel di atas untuk memilih versi CodeQL CLI mana yang akan digunakan sesuai dengan cabang kueri driver Microsoft yang diinginkan. Jika Anda melakukan analisis sebagai bagian dari program WHCP, lihat tabel Untuk Program Kompatibilitas Perangkat Keras Windows Gunakan jika tidak, gunakan cabang Utama dan 2.15.4. Menggunakan versi yang berbeda dapat mengakibatkan database tidak kompatibel dengan pustaka.

  3. Navigasikan ke rilis biner CodeQL CLI yang terkait dengan tabel di atas, dan unduh file zip sesuai dengan arsitektur proyek Anda. Misalnya, untuk "codeql-win64.zip" Windows 64 bit.

  4. Ekstrak direktori Codeql CLI ke direktori yang baru saja Anda buat, misalnya: C:\codeql-home\codeql.

  5. Pastikan CodeQL diinstal dengan benar dengan memeriksa versi:

     C:\codeql-home\codeql>codeql --version
     CodeQL command-line toolchain release 2.15.4.
     Copyright (C) 2019-2023 GitHub, Inc.
     Unpacked in: C:\codeql-home\codeql
         Analysis results depend critically on separately distributed query and
         extractor modules. To list modules that are visible to the toolchain,
         use 'codeql resolve qlpacks' and 'codeql resolve languages'.
    
  6. Perintah bantuan menampilkan informasi penggunaan baris perintah.

    C:\codeql-home\codeql\>codeql --help
    Usage: codeql <command> <argument>...
    Create and query CodeQL databases, or work with the QL language.
    
    GitHub makes this program freely available for the analysis of open-source software and certain other uses, but it is
    not itself free software. Type codeql --license to see the license terms.
    
          --license              Show the license terms for the CodeQL toolchain.
    Common options:
      -h, --help                 Show this help text.
      -v, --verbose              Incrementally increase the number of progress messages printed.
      -q, --quiet                Incrementally decrease the number of progress messages printed.
    Some advanced options have been hidden; try --help -v for a fuller view.
    Commands:
      query     Compile and execute QL code.
      bqrs      Get information from .bqrs files.
      database  Create, analyze and process CodeQL databases.
      dataset   [Plumbing] Work with raw QL datasets.
      test      Execute QL unit tests.
      resolve   [Deep plumbing] Helper commands to resolve disk locations etc.
      execute   [Deep plumbing] Low-level commands that need special JVM options.
      version   Show the version of the CodeQL toolchain.
      generate  Generate formatted QL documentation.
    

Menginstal Paket CodeQL

Untuk cabang WHCP_21H2 dan WHCP_22H2

Jika menggunakan Visual Studio 2022 17.8 atau lebih tinggi dengan WHCP_21H2 atau WHCP_22H2 dan CodeQL CLI versi 2.15.4:

  • Ikuti langkah-langkah untuk "SEMUA CABANG LAINNYA."
  • Pastikan untuk menghapus submodul CodeQL jika Anda masih memiliki versi lama repo yang dikloning. CodeQL mungkin mencoba menggunakan kueri di submodul secara default, yang akan menyebabkan kesalahan karena versi yang tidak cocok.

Jika menggunakan Visual Studio versi 17.7 atau yang lebih baru DAN baik WHCP_21H2 atau WHCP_22H2 AND CodeQL CLI versi 2.4.6 atau 2.6.3:

  • Ikuti Instruksi khusus untuk WHCP_21H2 dan WHCP_22H2 menggunakan VS17.7 atau yang lebih lama di bawah ini.

SEMUA CABANG LAINNYA

Mengunduh paket kueri CodeQL

Tidak perlu lagi mengkloning repositori Windows-Driver-Developer-Supplemental-Tools untuk menggunakan kueri untuk sertifikasi. Paket CodeQL ("paket QL" atau "paket kueri") sekarang digunakan.

  1. Unduh versi paket microsoft/windows-drivers yang benar dari Matriks Versi Rilis Program Kompatibilitas Perangkat Keras Windows. Tentukan @<version> dalam perintah di bawah ini.
C:\codeql-home\> codeql pack download microsoft/windows-drivers@<version>

Misalnya, jika menggunakan WHCP_24H2, jalankan perintah berikut untuk mengunduh paket kueri windows-drivers 1.1.0:

C:\codeql-home\> codeql pack download microsoft/windows-drivers@1.1.0

Gunakan perintah ini untuk mengunduh paket kueri CodeQL cpp-queries versi 0.9.0.

C:\codeql-home\> codeql pack download codeql/cpp-queries@0.9.0

(Dimungkinkan untuk melewati langkah di atas, karena --download opsi akan mengunduh kueri yang diperlukan nanti dalam proses analisis.)

CodeQL menginstal paket kueri yang diunduh ke direktori default:

C:\Users\<current user>\.codeql\packages\microsoft\windows-drivers\<downloaded version>\

Jangan ubah direktori ini atau pindahkan paket yang terinstal.

Mengunduh suite kueri driver Windows

Temukan dan salin ke PC lokal dua file rangkaian kueri utama.

  • windows-driver-recommended.qls
  • windows-driver-mustfix.qls

Kontennya ditunjukkan di bawah ini di Kueri dan Suite; dua file terletak di https://github.com/microsoft/Windows-Driver-Developer-Supplemental-Tools/tree/main/suites

2. Buat Database CodeQL

Contoh-contoh ini mengasumsikan penggunaan lingkungan pengembangan Windows dan bahwa lokasi penginstalan adalah C:\codeql-home, tetapi Anda dapat menggunakan pengaturan yang sesuai dengan Anda. Lihat Bahasa dan kerangka kerja yang didukung CodeQL untuk daftar pengkompilasi mana yang didukung.

  1. Buat direktori untuk CodeQL untuk menempatkan database yang dibuatnya. Misalnya: C:\codeql-home\databases

    mkdir C:\codeql-home\databases
    
  2. Gunakan perintah CodeQL untuk membuat database menggunakan parameter berikut:

    • parameter pertama adalah tautan ke direktori database Anda. Misalnya: C:\codeql-home\databases\MyDriverDatabase (perintah ini akan gagal jika direktori sudah ada).
    • --language atau -l adalah bahasa atau bahasa tempat kode sumber Anda berada (ini bisa menjadi daftar yang dipisahkan koma; misalnya: [cpp, javascript]).
    • -- source atau -s adalah jalur ke kode sumber Anda.
    • --command atau -c adalah perintah build Anda atau jalur ke file build Anda.
    codeql database create <database directory> --language=<language> --source=<path to source code> --command=<build command or path to build file>
    

Contoh

Contoh driver tunggal.

C:\codeql-home\codeql> codeql database create D:\DriverDatabase --language=cpp --source-root=D:\Drivers\SingleDriver --command="msbuild /t:rebuild D:\Drivers\SingleDriver\SingleDriver.sln"

Contoh beberapa driver.

C:\codeql-home\codeql> codeql database create D:\SampleDriversDatabase --language=cpp --source-root=D:\AllMyDrivers\SampleDrivers --command=D:\AllMyDrivers\SampleDrivers\BuildAllSampleDrivers.cmd

Untuk informasi selengkapnya atau bantuan menggunakan database create perintah, buka Membuat Database CodeQL atau gunakan perintah berikut:

C:\codeql-home\codeql> codeql database create --help

3. Lakukan Analisis

Catatan

Jika menggunakan Visual Studio versi 17.7 atau yang lebih baru DAN baik WHCP_21H2 atau WHCP_22H2 AND CodeQL VLI versi 2.4.6 atau 2.6.3, ikuti Instruksi khusus untuk WHCP_21H2 dan WHCP_22H2 menggunakan VS17.7 atau yang lebih lama di bawah ini.

Pada titik ini, pengaturan selesai dan langkah selanjutnya adalah melakukan analisis aktual pada kode sumber driver.

  1. Gunakan perintah CodeQL untuk menganalisis database Anda menggunakan parameter berikut:

    • parameter pertama adalah tautan ke direktori database Anda. Misalnya: C:\codeql-home\databases\MyDriverDatabase. (Perintah ini akan gagal jika direktori tidak ada.)
    • --download flag memberi tahu CodeQL untuk mengunduh dependensi sebelum menjalankan kueri.
    • --format adalah jenis file dari file output. Opsinya meliputi: SARIF dan CSV. (Untuk Pengguna WHCP, gunakan format SARIF.)
    • --output adalah jalur ke tempat Anda menginginkan file output, pastikan untuk menyertakan format dalam nama file. (Perintah ini akan gagal jika direktori belum ada.)
    • parameter penentu kueri adalah daftar argumen yang dipisahkan spasi yang dapat mencakup:
      • jalur ke file kueri
      • jalur ke direktori yang berisi file kueri
      • jalur ke file rangkaian kueri
      • nama paket kueri CodeQL
    codeql database analyze --download <path to database> <path to query suite .qls file> --format=sarifv2.1.0 --output=<outputname>.sarif
    

    Contoh:

    codeql database analyze --download D:\DriverDatabase suites/windows-driver-recommended.qls --format=sarifv2.1.0 --output=D:\DriverAnalysis1.sarif 
    

    Untuk informasi selengkapnya atau bantuan menggunakan database analyze perintah, buka Menganalisis Database dengan CodeQL CLI dan Menggunakan paket CodeQL untuk menganalisis database CodeQL.

    Untuk baris perintah, gunakan perintah berikut:

    C:\codeql-home\codeql> codeql database analyze --help
    

Instruksi khusus untuk WHCP_21H2 dan WHCP_22H2 menggunakan VS17.7 atau yang lebih lama

Instruksi ini hanya berlaku saat menggunakan Visual Studio 17.7 atau yang lebih lama, bersama dengan CodeQL 2.6.3 atau 2.4.6

  1. Instal versi CodeQL seperti yang ditunjukkan pada langkah-langkah di atas.

  2. Kloning dan instal repositori Windows Driver Developer Supplemental Tools yang berisi kueri CodeQL khusus untuk driver:

    git clone https://github.com/microsoft/Windows-Driver-Developer-Supplemental-Tools.git --recurse-submodules

  3. Lihat Matriks Versi Rilis Program Kompatibilitas Perangkat Keras Windows untuk mengidentifikasi cabang yang benar untuk versi Windows yang ingin Anda sertifikasi.

  4. git checkout Gunakan perintah untuk memeriksa cabang yang diidentifikasi.

  5. Konfirmasikan bahwa submodul ada di direktori codeql-home.

     D:/codeql-home
         |--- codeql
         |--- Windows-Driver-Developer-Supplemental-Tools
    
  6. Analisis database CodeQL Anda.

    Perbarui contoh perintah ini agar sesuai dengan lingkungan Anda. Atur parameter, jalur ke database baru, format, file sarif output, jalur ke kueri CodeQL atau rangkaian kueri untuk digunakan dalam analisis.

    codeql database analyze <path to database> --format=sarifv2.1.0 --output=<"path to output file".sarif> <path to query/suite to run>

    Contoh:

    codeql database analyze D:\DriverDatabase --format=sarifv2.1.0 --output=D:\DriverAnalysis1.sarif D:\codeql-home\Windows-driver-developer-supplemental-tools\src\suites\windows_driver_mustfix.qls

    Pastikan untuk memeriksa jalur ke rangkaian atau kueri yang ingin Anda jalankan, tidak setiap cabang memiliki struktur file yang sama.

  7. Lihat panduan lain dalam dokumen ini untuk langkah berikutnya, seperti meninjau dan mengirimkan hasil pengujian.

4. Melihat dan Menginterpretasikan Hasil

Kami akan berfokus pada format SARIF untuk bagian ini karena inilah yang diperlukan untuk langkah-langkah berikut, meskipun Anda dipersilakan untuk menggunakan format CSV jika sesuai dengan kebutuhan Anda dengan lebih baik.

Format Pertukaran Hasil Analisis Statis (SARIF) adalah format jenis JSON yang digunakan untuk berbagi hasil analisis statis. Baca selengkapnya tentang standar di OASIS Static Analysis Results Interchange Format (SARIF), cara CodeQL menggunakan Output SARIF, dan json skema.

Ada beberapa metode untuk menginterpretasikan hasil analisis, termasuk mengurutkan secara manual melalui objek. Berikut adalah beberapa yang kami gunakan:

  • Penampil Microsoft Sarif (Web) memiliki fungsionalitas yang memungkinkan Anda menyeret dan meletakkan file SARIF Anda ke penampil, lalu menampilkan hasil yang dikategorikan menurut aturan. Ini adalah cara yang sangat cepat dan mudah untuk melihat jumlah pelanggaran atau kueri mana yang memiliki pelanggaran, tetapi kurang mudah untuk menemukan informasi kode sumber selain dari nomor baris. Perhatikan bahwa halaman tidak akan diperbarui jika tidak ada pelanggaran.

  • Penampil Microsoft SARIF untuk Visual Studio sangat bagus untuk menampilkan hasil dalam Visual Studio untuk transisi yang mulus dari hasil ke kode sumber.

  • Ekstensi SARIF untuk Visual Studio Code

Bagian terpenting dari file SARIF adalah properti "Hasil" dalam objek "Jalankan". Setiap kueri akan memiliki properti Hasil dengan detail tentang setiap pelanggaran yang terdeteksi dan tempatnya terjadi. Jika tidak ada pelanggaran yang ditemukan, nilai properti akan kosong.

Kueri diklasifikasikan menggunakan status seperti "kesalahan" "peringatan" dan "masalah" tetapi klasifikasi ini terpisah dari bagaimana Program Kompatibilitas Perangkat Keras Windows dan khususnya Uji Logo Alat Statis akan menilai hasilnya. Setiap driver yang cacat dari kueri apa pun dalam rangkaian "Must-Fix" tidak akan lulus Uji Logo Alat Statis dan akan gagal disertifikasi, terlepas dari klasifikasi kueri dalam file kueri mentah (misalnya, "peringatan").

5. Menekan Hasil CodeQL (Opsional)

CodeQL untuk driver mendukung penekanan hasil. Supresi saat ini disediakan sebagai kenyamanan untuk membantu pengembang melakukan triase masalah dan mengurangi kebisingan, bukan sebagai cara untuk melewati pemeriksaan yang harus diperbaiki. Mereka tidak berdampak pada pembuatan Log Verifikasi Driver atau lulus tes Logo Alat Statis saat ini. Untuk menggunakan supresi, Anda harus menjalankan kueri DriverAlertSuppression.ql secara bersamaan dengan kueri atau suite lain yang ingin Anda jalankan. Secara default, kueri ini diaktifkan saat menjalankan suite kami dari cabang utama/pengembangan githubs kami.

Untuk pemeriksaan yang telah di-port dari Analisis Kode, penekanan Analisis Kode yang ada akan dihormati. Untuk informasi selengkapnya, lihat pragma peringatan C++.

  • Known limitation: Anda tidak dapat menggabungkan #pragma(disable) dan #pragma(suppress) di baris yang sama saat ini.

Untuk pemeriksaan yang baru menggunakan CodeQL, Anda dapat menekannya dengan melakukan salah satu dari dua hal:

  • Tulis anotasi "#pragma(suppress:the-rule-id-here)" (minus kutipan) pada baris di atas pelanggaran, seperti yang Anda lakukan untuk Analisis Kode. "the-rule-id-here" dapat digantikan oleh @id nilai dalam metadata kueri tertentu, dapat dilihat di bagian atas file.

  • Tulis komentar pada baris di atas yang terdiri dari teks "lgtm[the-rule-id-here]" (tanda kutip minus). Anda harus menjalankan kueri supresi pemberitahuan C/C++ standar alih-alih kueri supresi pemberitahuan driver.

Setelah penindasan ada dan dikenali, file SARIF yang dihasilkan akan menyertakan data bahwa hasilnya ditekan, dan sebagian besar penampil hasil tidak akan menampilkan hasilnya secara default.

6. Mengonversi SARIF ke Format Log Verifikasi Driver (DVL)

Uji Logo Alat Statis mengurai Log Verifikasi Driver (DVL) yang merupakan hasil yang dikompilasi dari beberapa mesin analisis statis yang telah berjalan pada kode sumber driver. Ada tiga cara untuk mengonversi file SARIF Anda ke format DVL, pilih salah satu yang paling sesuai dengan penyiapan Anda.

Menggunakan Visual Studio (WDK Preview Build 20190 ke atas)

  1. Tempatkan file hasil SARIF Anda di direktori yang sama dengan file .vcxproj Anda.
  2. Dari menu Ekstensi driver, pilih Buat Log Verifikasi Driver.
  3. Verifikasi UI DVL mendeteksi file SARIF Anda.
    • Catatan: jika Anda memindahkan file SARIF ke direktori .vcxproj menggunakan UI Visual Studio, ada kemungkinan Visual Studio membuat referensi ke file SARIF alih-alih benar-benar memindahkannya. Coba buka direktori di luar Visual Studio untuk memastikan direktori tersebut benar-benar ada di sana.
  4. Pilih Buat.

Menggunakan MSBuild

  1. Tempatkan file hasil SARIF Anda di direktori yang sama dengan file .vcxproj Anda.

  2. Buka Prompt Perintah Visual Studio, Prompt Perintah Alat Asli Visual Studio, atau Enterprise Windows Driver Kit (EWDK).

  3. Gunakan perintah msbuild dengan parameter berikut:

    • jalur ke file proyek vcx
    • /target:dvl
    • /p:Configuration="Release"
    • /P:Platform=<platform> (Gunakan salah satu string berikut saja: x86, x64, arm, arm64)

    msbuild.exe <vcxprojectfile> /target:dvl /p:Configuration="Release" /P:Platform=<platform>

Menggunakan CMD

  1. Temukan dvl.exe dari WDK atau eWDK yang dipasang.

  2. Gunakan exe dengan parameter berikut:

    • /manualCreate
    • driver name (Jangan sertakan format file .sys)
    • driver architecture (Gunakan salah satu string berikut saja: x86, x64, arm, arm64)

    "C:\Program Files (x86)\Windows Kits\10\Tools\dvl\dvl.exe" /manualCreate <driver name> <driver architecture>

Instruksi lebih lanjut untuk Pengujian logo HLK Static Tools dan panduan tentang tempat menempatkan file DVL dapat ditemukan dalam Menjalankan pengujian.

7. Peristiwa Pasca-Build Visual Studio (Opsional)

Jika Anda membuat driver menggunakan Visual Studio, Anda dapat mengonfigurasi kueri CodeQL untuk dijalankan sebagai peristiwa build postingan.

Dalam contoh ini, file batch kecil dibuat di lokasi target dan disebut sebagai peristiwa build postingan. Untuk informasi selengkapnya tentang peristiwa build Visual Studio C++, lihat Menentukan peristiwa build.

  1. Buat file batch kecil yang membuat ulang database CodeQL lalu jalankan kueri yang diinginkan di dalamnya. Dalam contoh ini, file batch akan diberi nama RunCodeQLRebuildQuery.bat. Ubah jalur yang ditampilkan dalam contoh file batch agar sesuai dengan lokasi direktori Anda.

    ECHO ">>> Running CodeQL Security Rule V 1.0 <<<"
    ECHO ">>> Removing previously created rules database <<<"
    rmdir /s/q C:\codeql-home\databases\kmdf
    CALL C:\codeql-home\codeql\codeql\codeql.cmd database create -l=cpp -s="C:\codeql-home\drivers\kmdf" -c "msbuild /p:Configuration=Release /p:Platform=x64 C:\codeql-home\drivers\kmdf\kmdfecho.sln /t:rebuild /p:PostBuildEventUseInBuild=false " "C:\codeql-home\databases\kmdf" -j 0
    CALL C:\codeql-home\codeql\codeql\codeql database analyze "C:\codeql-home\databases\kmdf" "C:\codeql-home\Windows-Driver-Developer-Supplemental-Tools\codeql\codeql-queries\cpp\ql\src\Likely Bugs\Underspecified Functions" --format=sarifv2.1.0 --output=C:\codeql-home\databases\kmdf.sarif -j 0 --rerun
    ECHO ">>> Loading SARIF Results in Visual Studio <<<"
    CALL devenv /Edit C:\codeql-home\databases\kmdf.sarif
    SET ERRORLEVEL = 0
    
  2. Opsi devenv.exe / Edit digunakan dalam file batch untuk membuka file hasil SARIF di instans Visual Studio yang ada. Untuk melihat hasil SARIF, instal Penampil Microsoft SARIF untuk Visual Studio dan lihat instruksi di sana untuk informasi selengkapnya.

  3. Dalam proyek driver, navigasikan ke properti proyek. Di tarik ke bawah Konfigurasi, pilih konfigurasi build yang ingin Anda periksa dengan CodeQL, kami sarankan "Rilis. Membuat database CodeQL dan menjalankan kueri membutuhkan waktu beberapa menit, jadi kami tidak menyarankan Anda menjalankan CodeQL pada konfigurasi Debug proyek Anda.

  4. Pilih Bangun Peristiwa dan Peristiwa Pasca-Build di properti proyek driver.

  5. Berikan jalur ke file batch dan deskripsi peristiwa build postingan.

Konfigurasi peristiwa build postingan Visual Studio memperlihatkan file batch yang dikonfigurasi sebagai opsi baris perintah.

  1. Hasil dari menjalankan file batch akan ditampilkan di akhir output build.

    1>Starting evaluation of codeql-cpp\Likely Bugs\Underspecified Functions\MistypedFunctionArguments.ql.
    1>Starting evaluation of codeql-cpp\Likely Bugs\Underspecified Functions\TooManyArguments.ql.
    1>Starting evaluation of codeql-cpp\Likely Bugs\Underspecified Functions\TooFewArguments.ql.
    1>Starting evaluation of codeql-cpp\Likely Bugs\Underspecified Functions\ImplicitFunctionDeclaration.ql.
    1>[1/4 eval 4.4s] Evaluation done; writing results to codeql-cpp\Likely Bugs\Underspecified Functions\TooManyArguments.bqrs.
    1>[2/4 eval 4.4s] Evaluation done; writing results to codeql-cpp\Likely Bugs\Underspecified Functions\TooFewArguments.bqrs.
    1>[3/4 eval 4.5s] Evaluation done; writing results to codeql-cpp\Likely Bugs\Underspecified Functions\ImplicitFunctionDeclaration.bqrs.
    1>[4/4 eval 5.2s] Evaluation done; writing results to codeql-cpp\Likely Bugs\Underspecified Functions\MistypedFunctionArguments.bqrs.
    1>Shutting down query evaluator.
    1>Interpreting results.
    1>">>> Loading SARIF Results in Visual Studio <<<"
    

Pemecahan Masalah

Jika Anda mensertifikasi dengan WHCP, pertama-tama pastikan Anda menggunakan versi HLK yang terkait dengan rilis Windows yang Anda targetkan, cabang terkait di repositori Alat Tambahan Pengembang Driver Windows, dan versi CodeQL CLI berikutnya. Untuk matriks kompatibilitas Rilis HLK/Windows, lihat Windows Hardware Lab Kit dan untuk windows Release/Windows Driver Developer Supplemental Tools cabang repositori/CodeQL CLI versi, lihat tabel WHCP di bagian Penyiapan CodeQL.

Kesalahan dan Solusi

Untuk masalah ketidakcocokan versi database, alat berikut mungkin berguna.

Gunakan perintah versi codeql untuk menampilkan versi codeql exe.

C:\codeql-home\codeql\>codeql version
CodeQL command-line toolchain release 2.4.0.
Copyright (C) 2019-2020 GitHub, Inc.
Unpacked in: C:\codeql-home\codeql\
   Analysis results depend critically on separately distributed query and
   extractor modules. To list modules that are visible to the toolchain,
   use 'codeql resolve qlpacks' and 'codeql resolve languages'.

Perintah peningkatan database akan memperbarui database. Ketahuilah bahwa ini adalah peningkatan satu arah dan tidak dapat dibatalkan. Untuk informasi selengkapnya, lihat peningkatan database.

Kueri dan Suite

Sebagai bagian dari repositori GitHub Microsoft CodeQL, kami menyediakan dua suite kueri untuk menyederhanakan alur kerja pengembang driver end-to-end. Rangkaian kueri windows_driver_recommended.qls adalah superset dari semua kueri yang dianggap berharga oleh Microsoft untuk pengembang driver. Rangkaian kueri windows_driver_mustfix.qls berisi kueri yang dianggap "Harus Diperbaiki" untuk sertifikasi WHCP, yang harus dijalankan dan diteruskan untuk lulus Uji Logo Alat Statis. Suite kueri yang Harus Diperbaiki dan Direkomendasikan diperbarui secara berkala.

Kueri yang Harus Diperbaiki

Subset kueri di bawah ini harus Diperbaiki untuk sertifikasi WHCP dan juga disertakan dalam rangkaian Perbaikan yang Direkomendasikan.

Seperangkat aturan ini disertakan dalam windows_driver_mustfix.qls.

ID Lokasi Enumerasi Kelemahan Umum
cpp/bad-addition-overflow-check codeql/cpp-queries/<Version>/Likely Bugs/Arithmetic/BadAdditionOverflowCheck.ql CWE-190, CWE-192
cpp/pointer-overflow-check codeql/cpp-queries/<Version>/Likely Bugs/Memory Management/PointerOverflow.ql T/A
cpp/too-few-arguments codeql/cpp-queries/<Version>/Likely Bugs/Underspecified Functions/TooFewArguments.ql T/A
cpp/comparison-with-wider-type codeql/cpp-queries/<Version>/Security/CWE/CWE-190/ComparisonWithWiderType.ql CWE-190, CWE-197, CWE-835
cpp/hresult-boolean-conversion codeql/cpp-queries/<Version>/Security/CWE/CWE-253/HResultBooleanConversion.ql CWE-253

File windows_driver_mustfix.qls berisi ini harus memperbaiki kueri kode.

# Copyright (c) Microsoft Corporation.
# Licensed under the MIT license.

- description: Security queries required to fix when certifying Windows Drivers
- queries: . 
  from: codeql/cpp-queries
  version: 0.9.0
- include:
    query path: 
      - Likely Bugs/Arithmetic/BadAdditionOverflowCheck.ql
      - Likely Bugs/Memory Management/PointerOverflow.ql
      - Likely Bugs/Underspecified Functions/TooFewArguments.ql
      - Security/CWE/CWE-190/ComparisonWithWiderType.ql
      - Security/CWE/CWE-253/HResultBooleanConversion.ql
- import: windows-driver-suites/windows_mustfix_partial.qls
  from: microsoft/windows-drivers

Seperangkat aturan ini termasuk dalam windows-driver-suites/windows_mustfix_partial.qls.

ID Lokasi Enumerasi Kelemahan Umum
cpp/windows/wdk/deprecated-api /microsoft/windows-drivers/<Version>/drivers/general/queries/WdkDeprecatedApis/wdk-deprecated-api.ql T/A
microsoft/Security/CWE/CWE-704/WcharCharConversionLimited /microsoft/windows-drivers/<Version>/microsoft/Security/CWE/CWE-704/WcharCharConversionLimited.ql CWE-704

File windows_mustfix_partial.qls berisi ini harus memperbaiki kueri kode.

# Copyright (c) Microsoft Corporation.
# Licensed under the MIT license.

- description: Security queries required to fix when certifying Windows Drivers
- queries: .
  from: microsoft/windows-drivers
- include:
    query path: 
      - drivers/general/queries/WdkDeprecatedApis/wdk-deprecated-api.ql
      - microsoft/Security/CWE/CWE-704/WcharCharConversionLimited.ql

Kueri ini adalah bagian dari rangkaian kueri windows_driver_recommended.qls di repositori Microsoft GitHub CodeQL. Kolom "Enumerasi Kelemahan Umum" (CWE) menentukan jenis masalah keamanan apa yang dicari kueri yang diberikan. Lihat halaman Mitre di CWE untuk detail selengkapnya tentang CWEs.

Praktik Terbaik

ID Lokasi Enumerasi Kelemahan Umum
cpp/offset-use-before-range-check codeql/cpp-queries/<Version>/Best Practices/Likely Errors/OffsetUseBeforeRangeCheck.ql T/A

Kemungkinan Bug

ID Lokasi Enumerasi Kelemahan Umum
cpp/bad-addition-overflow-check codeql/cpp-queries/<Version>/Likely Bugs/Arithmetic/BadAdditionOverflowCheck.ql CWE-190, CWE-192
cpp/integer-multiplication-cast-to-long codeql/cpp-queries/<Version>/Likely Bugs/Arithmetic/IntMultToLong.ql CWE-190, CWE-192, CWE-197, CWE-681
cpp/signed-overflow-check codeql/cpp-queries/<Version>/Likely Bugs/Arithmetic/SignedOverflowCheck.ql T/A
cpp/upcast-array-pointer-arithmetic codeql/cpp-queries/<Version>/Likely Bugs/Conversion/CastArrayPointerArithmetic.ql CWE-119, CWE-843
cpp/pointer-overflow-check codeql/cpp-queries/<Version>/Likely Bugs/Memory Management/PointerOverflow.ql T/A
cpp/too-few-arguments codeql/cpp-queries/<Version>/Likely Bugs/Underspecified Functions/TooFewArguments.ql T/A
cpp/incorrect-not-operator-usage codeql/cpp-queries/<Version>/Likely Bugs/Likely Typos/IncorrectNotOperatorUsage.ql CWE-480
cpp/suspicious-add-sizeof codeql/cpp-queries/<Version>/Likely Bugs/Memory Management/SuspiciousSizeof.ql CWE-468
cpp/uninitialized-local codeql/cpp-queries/<Version>/Likely Bugs/Memory Management/UninitializedLocal.ql CWE-457, CWE-665

Keamanan

ID Lokasi Enumerasi Kelemahan Umum
cpp/conditionally-uninitialized-variable codeql/cpp-queries/<Version>/Security/CWE/CWE-457/ConditionallyUninitializedVariable.ql. CWE-457
cpp/unterminated-variadic-call codeql/cpp-queries/<Version>/Security/CWE/CWE-121/UnterminatedVarargsCall.ql CWE-121
cpp/suspicious-pointer-scaling codeql/cpp-queries/<Version>/Security/CWE/CWE-468/IncorrectPointerScaling.ql CWE-468
cpp/suspicious-pointer-scaling-void codeql/cpp-queries/<Version>/Security/CWE/CWE-468/IncorrectPointerScalingVoid.ql CWE-468
cpp/potentially-dangerous-function codeql/cpp-queries/<Version>/Security/CWE/CWE-676/PotentiallyDangerousFunction.ql CWE-676
cpp/incorrect-string-type-conversion codeql/cpp-queries/<Version>/Security/CWE/CWE-704/WcharCharConversion.ql CWE-704
cpp/comparison-with-wider-type codeql/cpp-queries/<Version>/Security/CWE/CWE-190/ComparisonWithWiderType.ql CWE-190, CWE-197, CWE-835
cpp/hresult-boolean-conversion codeql/cpp-queries/<Version>/Security/CWE/CWE-253/HResultBooleanConversion.ql CWE-253
cpp/suspicious-add-sizeof codeql/cpp-queries/<Version>/Security/CWE/CWE-468/CWE-468/SuspiciousAddWithSizeof.ql CWE-468

File windows_driver_recommended.qls berisi kueri kode yang direkomendasikan ini.

# Copyright (c) Microsoft Corporation.
# Licensed under the MIT license.

- description: Recommended and required queries for Windows Drivers.
- import: windows-driver-suites/windows_mustfix_partial.qls
  from: microsoft/windows-drivers
- import: windows-driver-suites/windows_recommended_partial.qls
  from: microsoft/windows-drivers
- queries: . 
  from: codeql/cpp-queries
  version: 0.9.0
- include:
    query path: 
      - Best Practices/Likely Errors/OffsetUseBeforeRangeCheck.ql
      - Likely Bugs/Arithmetic/IntMultToLong.ql
      - Likely Bugs/Arithmetic/SignedOverflowCheck.ql
      - Likely Bugs/Conversion/CastArrayPointerArithmetic.ql
      - Likely Bugs/Likely Typos/IncorrectNotOperatorUsage.ql
      - Likely Bugs/Memory Management/SuspiciousSizeof.ql
      - Likely Bugs/Memory Management/UninitializedLocal.ql
      - Security/CWE/CWE-121/UnterminatedVarargsCall.ql
      - Security/CWE/CWE-457/ConditionallyUninitializedVariable.ql
      - Security/CWE/CWE-468/IncorrectPointerScaling.ql
      - Security/CWE/CWE-468/IncorrectPointerScalingVoid.ql
      - Security/CWE/CWE-468/SuspiciousAddWithSizeof.ql
      - Security/CWE/CWE-676/PotentiallyDangerousFunction.ql
      - Security/CWE/CWE-704/WcharCharConversion.ql
      - Likely Bugs/Arithmetic/BadAdditionOverflowCheck.ql
      - Likely Bugs/Memory Management/PointerOverflow.ql
      - Likely Bugs/Underspecified Functions/TooFewArguments.ql
      - Security/CWE/CWE-190/ComparisonWithWiderType.ql
      - Security/CWE/CWE-253/HResultBooleanConversion.ql

Kueri ini adalah bagian dari windows_recommended_partial.qls.

ID Lokasi Enumerasi Kelemahan Umum
cpp/paddingbyteinformationdisclosure microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Boundary Violations/PaddingByteInformationDisclosure.ql T/A
cpp/badoverflowguard microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Conversion/BadOverflowGuard.ql T/A
cpp/infiniteloop microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Conversion/InfiniteLoop.ql T/A
cpp/uninitializedptrfield microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/UninitializedPtrField.ql T/A
cpp/use-after-free microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Memory Management/UseAfterFree/UseAfterFree.ql T/A
ID Lokasi Peringatan Analisis Kode
cpp/weak-crypto/cng/hardcoded-iv /microsoft/windows-drivers/<Version>/microsoft/Security/Crytpography/HardcodedIVCNG.ql T/A

Driver - Umum

ID Lokasi Peringatan Analisis Kode
cpp/drivers/ke-set-event-pageable /microsoft/windows-drivers/<Version>/drivers/general/queries/KeSetEventPageable/KeSetEventPageable.ql Tidak ada pemeriksaan CA terkait
cpp/drivers/role-type-correctly-used /microsoft/windows-drivers/<Version>/drivers/general/queries/RoleTypeCorrectlyUsed/RoleTypeCorrectlyUsed.ql Tidak ada pemeriksaan CA terkait
cpp/drivers/extended-deprecated-apis /microsoft/windows-drivers/<Version>/drivers/general/queries/ExtendedDeprecatedApis.ql Peringatan C28719, Peringatan C28726, Peringatan C28735, Peringatan C28750
cpp/drivers/irql-not-saved /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlNotSaved/IrqlNotSaved.ql Peringatan C28158
cpp/drivers/irql-not-used /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlNotUsed/IrqlNotUsed.ql Peringatan C28157
cpp/drivers/irql-set-too-high /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlTooHigh/IrqlTooHigh.ql Peringatan C28150
cpp/drivers/irql-too-low /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlTooLow/IrqlTooLow.ql Peringatan C28120
cpp/drivers/irql-set-too-high /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlSetTooHigh/IrqlTooHigh.ql Peringatan C28121
cpp/drivers/irql-set-too-low /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlSetTooLow/IrqlSetTooLow.ql Peringatan C28124
cpp/drivers/pool-tag-integral /microsoft/windows-drivers/<Version>/drivers/general/queries/PoolTagIntegral/PoolTagIntegral.ql Peringatan C28134
cpp/drivers/str-safe /microsoft/windows-drivers/<Version>/drivers/general/queries/StrSafe/StrSafe.ql Peringatan C28146

Driver - WDM

ID Lokasi Peringatan Analisis Kode
cpp/drivers/illegal-field-access /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldAccess/IllegalFieldAccess.ql Peringatan C28128
cpp/drivers/illegal-field-access2 /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldAccess2/IllegalFieldAccess2.ql Peringatan C28175
cpp/drivers/illegal-field-write /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldWrite/IllegalFieldWrite.ql Peringatan C28176
cpp/drivers/opaque-mdl-use /microsoft/windows-drivers/<Version>/drivers/wdm/queries/OpaqueMdlUse/OpaqueMdlUse.ql (Tidak ada pemeriksaan CA terkait)
cpp/drivers/opaque-mdl-write /microsoft/windows-drivers/<Version>/drivers/wdm/queries/OpaqueMdlUse/OpaqueMdlWrite.ql Peringatan C28145
cpp/drivers/pending-status-error /microsoft/windows-drivers/<Version>/drivers/wdm/queries/PendingStatusError/PendingStatusError.ql Peringatan C28143
cpp/drivers/wrong-dispatch-table-assignment /microsoft/windows-drivers/<Version>/drivers/wdm/queries/WrongDispatchTableAssignment/WrongDispatchTableAssignment.ql Peringatan C28169

File windows-driver-suites/windows_recommended_partial.qls berisi kueri kode yang direkomendasikan ini.

# Copyright (c) Microsoft Corporation.
# Licensed under the MIT license.

- description: Recommended and required queries for Windows Drivers.
- import: windows-driver-suites/windows_mustfix_partial.qls
- queries: .
  from: microsoft/windows-drivers
- include:
    query path: 
      - microsoft/Likely Bugs/Boundary Violations/PaddingByteInformationDisclosure.ql
      - microsoft/Likely Bugs/Conversion/BadOverflowGuard.ql
      - microsoft/Likely Bugs/Conversion/InfiniteLoop.ql
      - microsoft/Likely Bugs/Memory Management/UseAfterFree/UseAfterFree.ql
      - microsoft/Likely Bugs/UninitializedPtrField.ql
      - microsoft/Security/Crytpography/HardcodedIVCNG.ql
      - drivers/general/queries/KeSetEventPageable/KeSetEventPageable.ql
      - drivers/general/queries/RoleTypeCorrectlyUsed/RoleTypeCorrectlyUsed.ql
      - drivers/general/queries/DefaultPoolTag/DefaultPoolTag.ql
      - drivers/general/queries/ExaminedValue/ExaminedValue.ql
      - drivers/general/queries/ExtendedDeprecatedApis/ExtendedDeprecatedApis.ql
      - drivers/general/queries/IrqlNotSaved/IrqlNotSaved.ql
      - drivers/general/queries/IrqlNotUsed/IrqlNotUsed.ql
      - drivers/general/queries/IrqlTooHigh/IrqlTooHigh.ql
      - drivers/general/queries/IrqlTooLow/IrqlTooLow.ql
      - drivers/general/queries/IrqlSetTooHigh/IrqlTooHigh.ql
      - drivers/general/queries/IrqlSetTooLow/IrqlSetTooLow.ql
      - drivers/general/queries/PoolTagIntegral/PoolTagIntegral.ql
      - drivers/general/queries/StrSafe/StrSafe.ql
      - drivers/wdm/queries/IllegalFieldAccess/IllegalFieldAccess.ql
      - drivers/wdm/queries/IllegalFieldAccess2/IllegalFieldAccess2.ql
      - drivers/wdm/queries/IllegalFieldWrite/IllegalFieldWrite.ql
      - drivers/wdm/queries/OpaqueMdlUse/OpaqueMdlUse.ql
      - drivers/wdm/queries/OpaqueMdlUse/OpaqueMdlWrite.ql
      - drivers/wdm/queries/PendingStatusError/PendingStatusError.ql
      - drivers/wdm/queries/WrongDispatchTableAssignment/WrongDispatchTableAssignment.ql

Tanya Jawab Umum (FAQ)

Kapan ini akan diperlukan untuk sertifikasi perangkat?

Lihat Proses Sertifikasi Program Kompatibilitas Perangkat Keras Windows untuk detail persyaratan.

Apa motivasi di balik mengharuskan CodeQL dijalankan pada kode sumber driver?

Motivasi untuk mengharuskan CodeQL dijalankan pada kode sumber driver dapat diringkas oleh dua alasan utama:

  1. Keamanan Windows sangat penting dan mengharuskan CodeQL dijalankan pada kode sumber driver adalah salah satu langkah dalam membantu meningkatkan keamanan komponen yang disertifikasi oleh Microsoft.
  2. Kueri CodeQL dikembangkan secara aktif oleh teknisi keamanan di Microsoft, karena Microsoft berkomitmen untuk memastikan bahwa ekosistem perangkat kerasnya mendapat manfaat dari alat berkualitas tinggi yang sama yang digunakan di Microsoft.

Jenis driver apa yang berlaku untuk pengujian CodeQL dan Static Tools Logo?

Saat ini, pengujian Logo Alat Statis mengharuskan CodeQL dijalankan dan kumpulan kueri "Harus Diperbaiki" yang diteruskan untuk semua driver mode kernel tidak termasuk driver grafis. Perhatikan bahwa menjalankan CodeQL pada driver grafis sangat disarankan meskipun saat ini tidak diperlukan. Beberapa kueri mungkin juga menemukan cacat yang berguna dalam komponen mode pengguna.

Kami mengantisipasi perluasan pengujian dan kuerinya untuk memerlukan hasil bagi driver grafis, driver mode pengguna dan komponen driver, dan komponen paket driver lainnya di masa mendatang. Jika Anda mengalami perilaku tak terduga atau positif palsu yang menjalankan CodeQL pada driver grafis atau driver mode pengguna, silakan ajukan masalah pada repositori Windows-Driver-Developer-Supplemental-Tools.

Lisensi mana yang mengatur penggunaan CodeQL untuk pengembang driver?

Penggunaan CodeQL untuk tujuan pengujian WHCP dapat diterima berdasarkan Perjanjian Lisensi Pengguna Akhir Kit Lab Perangkat Keras (HLK). Untuk peserta WHCP, EULA HLK menimpa Syarat dan Ketentuan CodeQL GitHub. HLK EULA menyatakan bahwa CodeQL dapat digunakan selama analisis otomatis, CI atau CD, sebagai bagian dari proses rekayasa normal untuk tujuan menganalisis driver yang akan dikirimkan dan disertifikasi sebagai bagian dari WHCP.

Apakah saya perlu menggunakan Visual Studio atau msbuild untuk menjalankan CodeQL?

CodeQL tidak memerlukan MSBuild atau Visual Studio untuk digunakan. Lihat bahasa dan kerangka kerja yang didukung untuk daftar kompilator mana yang didukung.

Bagaimana HLK memverifikasi bahwa driver saya dipindai oleh CodeQL?

Uji Logo Alat Statis di HLK adalah pengujian yang memberlakukan persyaratan ini. Detail tentang Uji Logo Alat Statis dapat ditemukan di halaman Dokumen MS-nya.

Apakah semua cacat dilaporkan oleh cacat benar CodeQL?

Setiap kueri CodeQL memiliki berbagai tingkat presisi. Tujuan kami adalah untuk meminimalkan positif palsu, tetapi kadang-kadang mereka akan terjadi. Rangkaian kueri "Must-Fix" kami telah dikembangkan dan dipilih secara tangan untuk digunakan dengan program WHCP karena pengujian ekstensif kami menghasilkan hampir nol positif palsu. Jika Anda melihat positif palsu dari kueri dalam kumpulan kueri "Harus Diperbaiki", kirim email stlogohelp@microsoft.com segera atau ajukan masalah pada repositori Windows-Driver-Developer-Supplemental-Tools, dan kami akan berupaya menyelesaikannya sesegera mungkin.

Apakah klasifikasi kueri "peringatan" atau "kesalahan" penting untuk tujuan Pengujian Logo Alat Statis?

Kueri diklasifikasikan menggunakan status seperti "kesalahan" "peringatan" dan "masalah" di CodeQL tetapi klasifikasi ini terpisah dari bagaimana Program Kompatibilitas Perangkat Keras Windows dan khususnya Uji Logo Alat Statis akan menilai hasilnya. Setiap driver yang cacat dari kueri apa pun dalam rangkaian "Must-Fix" tidak akan lulus Uji Logo Alat Statis dan akan gagal disertifikasi, terlepas dari klasifikasi kueri dalam file kueri mentah (misalnya, "peringatan").

Dapatkah saya membuat DVL pada solusi Visual Studio?

Tidak, pembuatan DVL harus dijalankan di tingkat proyek dan tidak dapat dijalankan pada solusi Visual Studio. Petunjuk tentang cara menghasilkan DVL dapat ditemukan di: Membuat Log Verifikasi Driver.

Dapatkah saya membuat Log Verifikasi Driver (DVL) di luar konteks msbuild atau Visual Studio?

Sebagai bagian dari Windows Driver Kit (WDK) dan Enterprise WDK (eWDK), Microsoft mengirimkan komponen yang disebut dvl.exe yang dapat digunakan untuk menghasilkan Log Verifikasi Driver (DLL). Mulai pratinjau WDK/eWDK versi 21342 ke atas, dimungkinkan untuk menghasilkan DVL dari baris perintah di luar konteks msbuild atau Visual Studio dengan meneruskan nama driver dan arsitektur. Lihat Membuat Log Verifikasi Driver untuk detail selengkapnya.

Saya memiliki komentar atau pertanyaan tentang cara menggunakan CodeQL pada driver saya, di mana saya dapat mengirim umpan balik?

Kirim umpan balik dan pertanyaan ke stlogohelp@microsoft.com.