Deklarasi Fungsi KMDF Pemverifikasi Driver Statis
Untuk mengaktifkan SDV untuk memverifikasi driver KMDF, Anda harus mendeklarasikan setiap fungsi panggilan balik, menggunakan jenis peran fungsi panggilan balik. Jenis peran fungsi panggilan balik didefinisikan dalam berbagai file header WDF dan disertakan saat Anda membangun driver Anda dengan file header Wdf.h. Tabel berikut ini memperlihatkan jenis peran fungsi dan fungsi panggilan balik peristiwa yang terkait dengannya.
Anda harus mendeklarasikan fungsi panggilan balik driver sebelum definisi fungsi panggilan balik. Contoh berikut menunjukkan deklarasi jenis peran fungsi untuk fungsi panggilan balik EvtDriverDeviceAdd . Dalam contoh ini, fungsi panggilan balik disebut EvtDriverDeviceAdd.
#include <NTDDK.h>
#include <wdf.h>
EVT_WDF_DRIVER_DEVICE_ADD EvtDriverDeviceAdd
Jika fungsi panggilan balik memiliki deklarasi prototipe fungsi, Anda harus mengganti prototipe fungsi dengan deklarasi jenis peran fungsi. Untuk informasi selengkapnya tentang deklarasi jenis peran fungsi, lihat Menggunakan Deklarasi Jenis Peran Fungsi.
Tabel berikut ini memperlihatkan jenis fungsi panggilan balik dan fungsi panggilan balik peristiwa yang terkait dengannya.
Jenis peran fungsi | Fungsi panggilan balik peristiwa |
---|---|
EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_CLEANUP |
|
EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_COPY |
|
EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_DUPLICATE |
|
EVT_WDF_CHILD_LIST_CREATE_DEVICE |
|
EVT_WDF_CHILD_LIST_DEVICE_REENUMERATED |
|
EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_CLEANUP |
|
EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COMPARE |
|
EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COPY |
|
EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_DUPLICATE |
|
EVT_WDF_CHILD_LIST_SCAN_FOR_CHILDREN |
|
EVT_WDF_DEVICE_ARM_WAKE_FROM_S0 |
|
EVT_WDF_DEVICE_ARM_WAKE_FROM_SX |
|
EVT_WDF_DEVICE_CONTEXT_CLEANUP |
|
EVT_WDF_DEVICE_CONTEXT_DESTROY |
|
EVT_WDF_DEVICE_D0_ENTRY |
|
EVT_WDF_DEVICE_D0_ENTRY_POST_INTERRUPTS_ENABLED |
|
EVT_WDF_DEVICE_D0_EXIT |
|
EVT_WDF_DEVICE_D0_EXIT_PRE_INTERRUPTS_DISABLED |
|
EVT_WDF_DEVICE_DISABLE_WAKE_AT_BUS |
|
EVT_WDF_DEVICE_DISARM_WAKE_FROM_S0 |
|
EVT_WDF_DEVICE_DISARM_WAKE_FROM_SX |
|
EVT_WDF_DEVICE_EJECT |
|
EVT_WDF_DEVICE_ENABLE_WAKE_AT_BUS |
|
EVT_WDF_DEVICE_FILE_CREATE |
|
EVT_WDF_DEVICE_FILTER_RESOURCE_REQUIREMENTS |
|
EVT_WDF_DEVICE_PNP_STATE_CHANGE_NOTIFICATION |
|
EVT_WDF_DEVICE_POWER_POLICY_STATE_CHANGE_NOTIFICATION |
|
EVT_WDF_DEVICE_POWER_STATE_CHANGE_NOTIFICATION |
|
EVT_WDF_DEVICE_PREPARE_HARDWARE |
|
EVT_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST |
|
EVT_WDF_DEVICE_QUERY_REMOVE |
|
EVT_WDF_DEVICE_QUERY_STOP |
|
EVT_WDF_DEVICE_RELATIONS_QUERY |
|
EVT_WDF_DEVICE_RELEASE_HARDWARE |
|
EVT_WDF_DEVICE_REMOVE_ADDED_RESOURCES |
|
EVT_WDF_DEVICE_RESOURCE_REQUIREMENTS_QUERY |
|
EVT_WDF_DEVICE_RESOURCES_QUERY |
|
EVT_WDF_DEVICE_SELF_MANAGED_IO_CLEANUP |
|
EVT_WDF_DEVICE_SELF_MANAGED_IO_FLUSH |
|
EVT_WDF_DEVICE_SELF_MANAGED_IO_INIT |
|
EVT_WDF_DEVICE_SELF_MANAGED_IO_RESTART |
|
EVT_WDF_DEVICE_SELF_MANAGED_IO_SUSPEND |
|
EVT_WDF_DEVICE_SET_LOCK |
|
EVT_WDF_DEVICE_SHUTDOWN_NOTIFICATION |
|
EVT_WDF_DEVICE_SURPRISE_REMOVAL |
|
EVT_WDF_DEVICE_USAGE_NOTIFICATION |
|
EVT_WDF_DEVICE_WAKE_FROM_S0_TRIGGERED |
|
EVT_WDF_DEVICE_WAKE_FROM_SX_TRIGGERED |
|
EVT_WDF_DMA_ENABLER_DISABLE |
|
EVT_WDF_DMA_ENABLER_ENABLE |
|
EVT_WDF_DMA_ENABLER_FILL |
|
EVT_WDF_DMA_ENABLER_FLUSH |
|
EVT_WDF_DMA_ENABLER_SELFMANAGED_IO_START |
|
EVT_WDF_DMA_ENABLER_SELFMANAGED_IO_STOP |
|
EVT_WDF_DPC |
|
EVT_WDF_DRIVER_DEVICE_ADD |
|
EVT_WDF_DRIVER_UNLOAD |
|
EVT_WDF_FILE_CLEANUP |
|
EVT_WDF_FILE_CLOSE |
|
EVT_WDF_FILE_CONTEXT_CLEANUP_CALLBACK |
|
EVT_WDF_FILE_CONTEXT_DESTROY_CALLBACK |
|
EVT_WDF_INTERRUPT_DISABLE |
|
EVT_WDF_INTERRUPT_DPC |
|
EVT_WDF_INTERRUPT_ENABLE |
|
EVT_WDF_INTERRUPT_ISR |
|
EVT_WDF_INTERRUPT_SYNCHRONIZE |
|
EVT_WDF_IO_IN_CALLER_CONTEXT |
|
EVT_WDF_IO_QUEUE_CONTEXT_CLEANUP_CALLBACK |
|
EVT_WDF_IO_QUEUE_CONTEXT_DESTROY_CALLBACK |
|
EVT_WDF_IO_QUEUE_IO_CANCELED_ON_QUEUE |
|
EVT_WDF_IO_QUEUE_IO_DEFAULT |
|
EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL |
|
EVT_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL |
|
EVT_WDF_IO_QUEUE_IO_READ |
|
EVT_WDF_IO_QUEUE_IO_RESUME |
|
EVT_WDF_IO_QUEUE_IO_STOP |
|
EVT_WDF_IO_QUEUE_IO_WRITE |
|
EVT_WDF_IO_QUEUE_STATE |
|
EVT_WDF_IO_TARGET_QUERY_REMOVE |
|
EVT_WDF_IO_TARGET_REMOVE_CANCELED |
|
EVT_WDF_IO_TARGET_REMOVE_COMPLETE |
|
EVT_WDF_OBJECT_CONTEXT_CLEANUP |
|
EVT_WDF_OBJECT_CONTEXT_DESTROY |
|
EVT_WDF_PROGRAM_DMA |
|
EVT_WDF_REQUEST_CANCEL |
|
EVT_WDF_REQUEST_COMPLETION_ROUTINE |
|
EVT_WDF_TIMER |
|
EVT_WDF_TRACE_CALLBACK |
|
EVT_WDF_WMI_INSTANCE_EXECUTE_METHOD |
|
EVT_WDF_WMI_INSTANCE_QUERY_INSTANCE |
|
EVT_WDF_WMI_INSTANCE_SET_INSTANCE |
|
EVT_WDF_WMI_INSTANCE_SET_ITEM |
|
EVT_WDF_WMI_PROVIDER_FUNCTION_CONTROL |
|
EVT_WDF_WORKITEM |
|
EVT_WDFDEVICE_WDM_IRP_PREPROCESS |
Jenis peran fungsi yang memungkinkan beberapa fungsi panggilan balik
Ada beberapa jenis peran fungsi yang dapat memiliki beberapa fungsi panggilan balik peristiwa yang terkait dengannya. Misalnya, driver mungkin memiliki beberapa fungsi panggilan balik EvtTimerFunc atau EvtDpcFunc . Tabel berikut menunjukkan jumlah maksimum panggilan balik yang didukung SDV untuk setiap jenis peran fungsi. Meskipun tidak salah bagi driver untuk memiliki lebih dari jumlah maksimum fungsi panggilan balik yang tercantum dalam tabel, itu memang mempersulit proses verifikasi saat menggunakan SDV. Untuk informasi tentang perubahan yang mungkin perlu Anda lakukan pada file Sdv-map.h untuk mengakomodasi fungsi panggilan balik tambahan, lihat Titik masuk duplikat untuk jenis peran fungsi.
Jenis peran fungsi | Jumlah maksimum fungsi panggilan balik |
---|---|
EVT_WDF_DPC |
7 |
EVT_WDF_INTERRUPT_SYNCHRONIZE |
11 |
EVT_WDF_TIMER |
6 |
EVT_WDF_WMI_INSTANCE_EXECUTE_METHOD |
5 |
EVT_WDF_WMI_INSTANCE_QUERY_INSTANCE |
5 |
EVT_WDF_WMI_INSTANCE_SET_INSTANCE |
5 |
EVT_WDF_WMI_INSTANCE_SET_ITEM |
5 |
Jenis peran fungsi dan antrean I/O
Gunakan jenis peran fungsi berikut saat Anda mendeklarasikan Penangan Permintaan dan fungsi panggilan balik yang mengandalkan kerangka kerja KMDF untuk mengirimkan permintaan I/O ke driver (untuk pengiriman berurutan atau paralel). Jangan gunakan jenis peran fungsi ini untuk fungsi yang meneruskan permintaan secara manual dari antrean default ke antrean lain (pengiriman manual). SDV tidak mendukung model memori yang memungkinkannya melacak permintaan dari satu antrean ke antrean lainnya.
Untuk informasi selengkapnya tentang antrean I/O, lihat Membuat Antrean I/O.
Jenis peran fungsi yang digunakan untuk antrean I/O yang dikonfigurasi untuk pengiriman manual |
---|
EVT_WDF_IO_QUEUE_CONTEXT_CLEANUP_CALLBACK |
EVT_WDF_IO_QUEUE_CONTEXT_DESTROY_CALLBACK |
EVT_WDF_IO_QUEUE_IO_CANCELED_ON_QUEUE |
EVT_WDF_IO_QUEUE_IO_DEFAULT |
EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL |
EVT_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL |
EVT_WDF_IO_QUEUE_IO_READ |
EVT_WDF_IO_QUEUE_IO_RESUME |
EVT_WDF_IO_QUEUE_IO_STOP |
EVT_WDF_IO_QUEUE_IO_WRITE |
EVT_WDF_IO_QUEUE_STATE |
Jenis peran fungsi untuk fungsi EvtCleanupCallback dan EvtDestroyCallback
Anda harus mendeklarasikan fungsi EvtCleanupCallback dan EvtDestroyCallback dengan jenis peran fungsi khusus objek. SDV memerlukan jenis peran khusus objek ini untuk menentukan apakah driver menggunakan fungsi panggilan balik dengan benar. Gunakan tabel berikut untuk menentukan jenis fungsi mana yang akan digunakan.
Tipe objek | Jenis peran fungsi untuk EvtCleanupCallback |
---|---|
Objek perangkat |
EVT_WDF_DEVICE_CONTEXT_CLEANUP |
Objek antrean I/O |
EVT_WDF_IO_QUEUE_CONTEXT_CLEANUP_CALLBACK |
Objek file |
EVT_WDF_FILE_CONTEXT_CLEANUP_CALLBACK |
Semua objek lainnya |
EVT_WDF_OBJECT_CONTEXT_CLEANUP |
Tipe objek | Jenis peran fungsi untuk EvDestroyCallback |
---|---|
Objek perangkat |
EVT_WDF_DEVICE_CONTEXT_DESTROY |
Objek antrean I/O |
EVT_WDF_IO_QUEUE_CONTEXT_DESTROY_CALLBACK |
Objek file |
EVT_WDF_FILE_CONTEXT_DESTROY_CALLBACK |
Semua objek lainnya |
EVT_WDF_OBJECT_CONTEXT_DESTROY |
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk