Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Gunakan aturan ini untuk memverifikasi bahwa driver Anda menggunakan KMDF DDI dengan benar.
Di bagian ini
| Topik | Deskripsi |
|---|---|
Aturan BufAfterReqCompletedIoctl menentukan bahwa dalam fungsi panggilan balik EvtIoDeviceControl , buffer permintaan I/O yang diambil tidak dapat diakses setelah permintaan I/O selesai. |
|
Aturan BufAfterReqCompletedIntIoctl menentukan bahwa setelah permintaan selesai, buffernya tidak dapat diakses (hanya di dalam fungsi panggilan balik EvtIoInternalDeviceControl ). Buffer diambil dengan memanggil WdfRequestRetrieveOutputBuffer atau WdfRequestRetrieveUnsafeUserOutputBuffer atau WdfRequestRetrieveInputBuffer atau WdfRequestRetrieveUnsafeUserInputBuffer. |
|
Aturan BufAfterReqCompletedIntIoctlA memverifikasi bahwa setelah permintaan selesai, buffernya tidak dapat diakses (hanya di dalam panggilan balik EvtIoInternalDeviceControl ). Buffer diambil dengan memanggil WdfRequestRetrieveInputBuffer atau WdfRequestRetrieveOutputBuffer atau WdfRequestRetrieveUnsafeUserInputBuffer atau WdfRequestRetrieveUnsafeUserOutputBuffer. |
|
Aturan BufAfterReqCompletedIoctlA menentukan bahwa dalam fungsi panggilan balik EvtIoDeviceControl , buffer permintaan I/O yang diambil tidak dapat diakses setelah permintaan I/O selesai. |
|
Aturan BufAfterReqCompletedRead menentukan bahwa dalam fungsi panggilan balik EvtIoRead , buffer permintaan I/O yang diambil tidak dapat diakses setelah permintaan I/O selesai. Ada 14 DDI yang berfungsi sebagai metode potensial akses buffer. |
|
Aturan BufAfterReqCompletedReadA menentukan bahwa dalam fungsi panggilan balik EvtIoRead , buffer permintaan I/O yang diambil tidak dapat diakses setelah permintaan I/O selesai. Ada 14 DDI yang berfungsi sebagai kemungkinan metode akses buffer. |
|
Aturan BufAfterReqCompletedWrite menentukan bahwa dalam fungsi panggilan balik EvtIoWrite , buffer permintaan I/O yang diambil tidak dapat diakses setelah permintaan I/O selesai. |
|
Aturan BufAfterReqCompletedWriteA menentukan bahwa dalam fungsi panggilan balik EvtIoWrite , buffer permintaan I/O yang diambil tidak dapat diakses setelah permintaan I/O selesai. |
|
Aturan ChildDeviceInitApi menentukan bahwa untuk perangkat anak, metode inisialisasi objek perangkat kerangka kerja harus dipanggil sebelum driver memanggil metode WdfDeviceCreate untuk objek perangkat anak. |
|
Aturan ControDeviceDeleted menentukan bahwa jika driver PnP membuat objek perangkat kontrol, driver harus menghapus objek perangkat kontrol dalam salah satu fungsi callback pembersihan sebelum driver dibongkar muat. |
|
Aturan ControlDeviceInitAPI menentukan bahwa WdfControlDeviceInitAllocate dan semua DDI inisialisasi objek perangkat lainnya yang menyiapkan struktur WDFDEVICE_INIT untuk perangkat kontrol harus dipanggil sebelum WdfDeviceCreate untuk perangkat kontrol. |
|
Aturan CtlDeviceFinishInitDeviceAdd menentukan bahwa jika driver membuat objek perangkat kontrol dalam fungsi panggilan balik EvtDriverDeviceAdd , ia harus memanggil WdfControlFinishInitializing setelah perangkat dibuat dan sebelum keluar dari fungsi panggilan balik EvtDriverDeviceAdd . Aturan ini tidak berlaku untuk driver non-PnP. |
|
Aturan CtlDeviceFinishInitDrEntry menentukan bahwa jika driver membuat objek perangkat kontrol dalam fungsi panggilan balik DriverEntry , ia harus memanggil WdfControlFinishInitializing setelah perangkat dibuat dan sebelum keluar dari fungsi panggilan balik EvtDriverDeviceAdd . Aturan ini tidak berlaku untuk driver non-PnP. |
|
Aturan DeviceCreateFail menentukan bahwa EVT_WDF_DRIVER_DEVICE_ADD mengembalikan status kesalahan saat panggilan ke WdfDeviceCreate gagal. |
|
Aturan DeviceInitAllocate menentukan bahwa, untuk perangkat PDO atau objek perangkat kontrol, metode inisialisasi objek perangkat kerangka kerja WdfPdoInitAllocate atau WdfControlDeviceInitAllocate harus dipanggil sebelum driver memanggil WdfDeviceCreate. |
|
Untuk perangkat FDO, metode inisialisasi perangkat dalam kerangka kerja dan metode inisialisasi FDO dalam kerangka kerja harus dipanggil sebelum driver memanggil metode WdfDeviceCreate untuk objek perangkat. |
|
Aturan DoubleDeviceInitFree menentukan bahwa driver tidak boleh membebaskan struktur inisialisasi perangkat dua kali. |
|
Aturan DriverCreate menentukan bahwa driver yang menggunakan Kerangka Kerja Driver Mode Kernel (KMDF) harus memanggil metode WdfDriverCreate untuk membuat objek driver kerangka kerja dari dalam rutinitas DriverEntry-nya . |
|
Aturan InitFreeDeviceCallback menentukan bahwa driver harus memanggil WdfDeviceInitFree jika driver mengalami kesalahan saat menginisialisasi objek perangkat kerangka kerja baru, dan jika driver menerima struktur WDFDEVICE_INIT dari panggilan ke WdfControlDeviceInitAllocate. |
|
Aturan InitFreeDeviceCreate menentukan bahwa driver harus memanggil WdfDeviceInitFree alih-alih WdfDeviceCreate jika kesalahan terjadi di salah satu metode inisialisasi objek perangkat dan jika driver menerima struktur WDFDEVICE_INIT dari panggilan ke WdfControlDeviceInitAllocate. |
|
Aturan InitFreeDeviceCreateType2 menentukan bahwa driver tidak boleh memanggil WdfDeviceCreate setelah memanggil WdfDeviceInitFree. |
|
Aturan InitFreeDeviceCreateType4 menentukan bahwa driver harus memanggil WdfDeviceInitFree jika driver mengalami kesalahan saat memanggil WdfDeviceCreate dan jika driver menerima struktur WDFDEVICE_INIT dari panggilan ke WdfControlDeviceInitAllocate. |
|
Aturan InitFreeNull menentukan bahwa DDI yang menerima PWDFDEVICE_INIT sebagai parameter tidak dapat dipanggil dengan menggunakan penunjuk NULL ke struktur WDFDEVICE_INIT . |
|
Aturan MdlAfterReqCompletedIntIoctl menentukan bahwa dalam fungsi panggilan balik EvtIoInternalDeviceControl , daftar deskriptor memori (MDL) tidak dapat diakses setelah permintaan I/O selesai. |
|
Aturan MdlAfterReqCompletedIntIoctlA menentukan bahwa dalam fungsi panggilan balik EvtIoInternalDeviceControl , daftar deskriptor memori (MDL) tidak dapat diakses setelah permintaan I/O selesai. |
|
Aturan MdlAfterReqCompletedIoctl menentukan bahwa dalam fungsi panggilan balik EvtIoDeviceControl , daftar deskriptor memori (MDL) tidak dapat diakses setelah permintaan I/O selesai. |
|
Aturan MdlAfterReqCompletedIoctlA menentukan bahwa dalam fungsi panggilan balik EvtIoDeviceControl , daftar deskriptor memori (MDL) tidak dapat diakses setelah permintaan I/O selesai. |
|
Aturan MdlAfterReqCompletedRead menentukan bahwa dalam fungsi panggilan balik EvtIoRead , objek daftar deskriptor memori (MDL) yang diambil tidak dapat diakses setelah permintaan I/O selesai. |
|
Aturan MdlAfterReqCompletedReadA menentukan bahwa dalam fungsi panggilan balik EvtIoRead , objek daftar deskriptor memori (MDL) yang diambil tidak dapat diakses setelah permintaan I/O selesai. |
|
Aturan MdlAfterReqCompletedWrite menentukan bahwa dalam fungsi panggilan balik EvtIoWrite , objek daftar deskriptor memori (MDL) yang diambil tidak dapat diakses setelah permintaan I/O selesai. |
|
Aturan MdlAfterReqCompletedWriteA menentukan bahwa dalam fungsi panggilan balik EvtIoWrite , objek daftar deskriptor memori (MDL) yang diambil tidak dapat diakses setelah permintaan I/O selesai. |
|
Aturan MemAfterReqCompletedIntIoctl menentukan bahwa dalam fungsi panggilan balik EvtIoInternalDeviceControl , objek memori kerangka kerja tidak dapat diakses setelah permintaan I/O selesai. |
|
Aturan MemAfterReqCompletedIntIoctlA menentukan bahwa dalam fungsi panggilan balik EvtIoInternalDeviceControl , objek memori kerangka kerja tidak dapat diakses setelah permintaan I/O selesai. |
|
Aturan MemAfterReqCompletedIoctl menentukan bahwa dalam fungsi panggilan balik EvtIoDeviceControl , objek memori kerangka kerja tidak dapat diakses setelah permintaan I/O selesai. |
|
Aturan MemAfterReqCompletedIoctlA menentukan bahwa dalam fungsi panggilan balik EvtIoDeviceControl , objek memori kerangka kerja tidak dapat diakses setelah permintaan I/O selesai. |
|
Aturan MemAfterReqCompletedRead menentukan bahwa dalam fungsi panggilan balik EvtIoRead , objek memori kerangka kerja tidak dapat diakses setelah permintaan I/O selesai. |
|
Aturan MemAfterReqCompletedReadA menentukan bahwa dalam fungsi panggilan balik EvtIoRead , objek memori kerangka kerja tidak dapat diakses setelah permintaan I/O selesai. |
|
Aturan MemAfterReqCompletedWrite menentukan bahwa dalam fungsi panggilan balik EvtIoWrite , objek memori kerangka kerja tidak dapat diakses setelah permintaan I/O selesai. |
|
Aturan MemAfterReqCompletedWriteA menentukan bahwa dalam fungsi panggilan balik EvtIoWrite , objek memori kerangka kerja tidak dapat diakses setelah permintaan I/O selesai. |
|
Aturan NullCheck memverifikasi bahwa nilai NULL di dalam kode driver tidak didereferensikan nanti di driver. Aturan ini melaporkan cacat jika salah satu kondisi ini benar:
Dengan pelanggaran aturan NullCheck, pernyataan kode yang paling relevan disorot di panel pohon pelacakan. Untuk informasi selengkapnya tentang bekerja dengan output laporan, lihat Laporan Pemverifikasi Driver Statis dan Memahami Penampil Jejak. |
|
Aturan PdoDeviceInitAPI menentukan bahwa WdfPdoInitAllocate dan semua DDI inisialisasi objek perangkat lainnya yang menyiapkan struktur WDFDEVICE_INIT untuk objek perangkat fisik (PDO) harus dipanggil sebelum driver memanggil WdfDeviceCreate untuk PDO. |
|
Aturan PdoInitFreeDeviceCallback menentukan bahwa driver harus memanggil WdfDeviceInitFree jika terjadi kesalahan saat driver memanggil fungsi inisialisasi objek perangkat kerangka kerja apa pun. |
|
Aturan PdoInitFreeDeviceCreate menentukan bahwa driver harus memanggil WdfDeviceInitFree alih-alih WdfDeviceCreate jika kesalahan terjadi di salah satu fungsi inisialisasi objek perangkat dan jika driver menerima struktur WDFDEVICE_INIT dari panggilan ke WdfPdoInitAllocate. |
|
Aturan PdoInitFreeDeviceCreateType2 menentukan bahwa driver tidak boleh memanggil WdfDeviceCreate setelah memanggil WdfDeviceInitFree. |
|
Aturan PdoInitFreeDeviceCreateType4 menentukan bahwa driver harus memanggil WdfDeviceInitFree jika kesalahan terjadi ketika driver memanggil WdfDeviceCreate. |
|
Aturan ControlDeviceInitAllocate menentukan bahwa untuk objek perangkat kontrol, driver harus memanggil metode inisialisasi objek perangkat kerangka kerja WdfControlDeviceInitAllocate sebelum driver memanggil WdfDeviceCreate. |
|
Aturan InputBufferAPI menentukan bahwa DDI yang benar untuk pengambilan buffer digunakan dalam fungsi panggilan balik EvtIoRead. Dalam fungsi panggilan balik EvtIoRead , DDI berikut tidak dapat dipanggil untuk pengambilan buffer: |
Untuk memilih seperangkat aturan penggunaan DDI
Pilih proyek driver Anda (.vcxProj) di Microsoft Visual Studio. Dari menu Driver, klik Luncurkan Pemverifikasi Driver Statis….
Klik tab Aturan . Di bawah Seperangkat Aturan, pilih DDIUsage.
Untuk memilih seperangkat aturan default dari jendela prompt perintah pengembang Visual Studio, tentukan DDIUsage.sdv dengan opsi /check . Contohnya:
msbuild /t:sdv /p:Inputs="/check:DDIUsage.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32Untuk informasi selengkapnya, lihat Menggunakan Pemverifikasi Driver Statis untuk Menemukan Cacat pada Driver dan Perintah Pemverifikasi Driver Statis (MSBuild).