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.
Untuk mengaktifkan SDV agar dapat memverifikasi driver KMDF Anda, Anda harus mendeklarasikan setiap fungsi panggilan balik dengan menggunakan tipe 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 tipe 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_PERBANDINGAN_DESKRIPSI_IDENTIFIKASI_COMPARISON |
|
EVT_WDF_SALINAN_DESKRIPSI_IDENTIFIKASI_DAFTAR_ANAK |
|
EVT_WDF_Daftar_Anak_Deskripsi_Identifikasi_Duplikat |
|
EVT_WDF_DAFTAR_ANAK_PEMINDAIAN_UNTUK_ANAK |
|
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 (Fungsi yang terhubung dengan driver Windows untuk mengatur perangkat agar tidak menghidupkan dari mode tidur 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_PERUBAHAN_STATUS_KEBIJAKAN_DAYA_PERANGKAT_NOTIFICATION |
|
EVT_WDF_DEVICE_POWER_STATE_CHANGE_NOTIFICATION (Pemberitahuan Perubahan Status Daya Perangkat) |
|
EVT_WDF_DEVICE_PREPARE_HARDWARE (fungsi untuk mempersiapkan perangkat keras) |
|
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 (Event handler untuk melepaskan perangkat keras dalam WDF) |
|
EVT_WDF_DEVICE_REMOVE_ADDED_RESOURCES |
EvtDeviceRemoveAddedResources EvtDeviceRemoveAddedResources |
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 |
|
Penangguhan IO Terkelola Mandiri EVT_WDF_DEVICE |
|
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 (Pemicu bangun perangkat dari SX di WDF) |
|
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 |
#B0 #A1 EvtIoDeviceControl #A2 #C3 |
EVT_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL |
#B0 #A1 EvtIoInternalDeviceControl #A2 #C3 |
EVT_WDF_IO_QUEUE_IO_READ |
#A2 #C3 #B0 #A1 EvtIoRead |
EVT_WDF_IO_QUEUE_IO_RESUME |
|
EVT_WDF_IO_QUEUE_IO_STOP |
#B0 #A1 #A2 #C3 EvtIoStop |
EVT_WDF_IO_QUEUE_IO_WRITE |
EvtIoWrite |
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 |
#B0 #A1 EvtRequestCancel #A2 #C3 |
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 entri 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 fungsi Penanganan Permintaan dan 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 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.
| Jenis objek | Jenis peran fungsi dari 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 |
| Jenis objek | Jenis fungsi peran 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 |