Bagikan melalui


Deklarasi Fungsi KMDF Pemverifikasi Driver Statis

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

EvtChildListAddressDescriptionCleanup

EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_COPY

EvtChildListAddressDescriptionCopy

EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_DUPLICATE

EvtChildListIdentificationDescriptionDuplicate

EVT_WDF_CHILD_LIST_CREATE_DEVICE

EvtChildListCreateDevice

EVT_WDF_CHILD_LIST_DEVICE_REENUMERATED

EvtChildListDeviceReenumerated

EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_CLEANUP

EvtChildListIdentificationDescriptionCleanup

EVT_WDF_CHILD_LIST_PERBANDINGAN_DESKRIPSI_IDENTIFIKASI_COMPARISON

EvtChildListIdentificationDescriptionCompare

EVT_WDF_SALINAN_DESKRIPSI_IDENTIFIKASI_DAFTAR_ANAK

EvtChildListIdentificationDescriptionCopy

EVT_WDF_Daftar_Anak_Deskripsi_Identifikasi_Duplikat

EvtChildListIdentificationDescriptionDuplicate

EVT_WDF_DAFTAR_ANAK_PEMINDAIAN_UNTUK_ANAK

EvtChildListScanForChildren

EVT_WDF_DEVICE_ARM_WAKE_FROM_S0

EvtDeviceArmWakeFromS0

EVT_WDF_DEVICE_ARM_WAKE_FROM_SX

EvtDeviceArmWakeFromSx

EVT_WDF_DEVICE_CONTEXT_CLEANUP

EvtCleanupCallback

EVT_WDF_DEVICE_CONTEXT_DESTROY

EvtDestroyCallback

EVT_WDF_DEVICE_D0_ENTRY

EvtDeviceD0Entry

EVT_WDF_DEVICE_D0_ENTRY_POST_INTERRUPTS_ENABLED

EvtDeviceD0EntryPostInterruptsEnabled

EVT_WDF_DEVICE_D0_EXIT

EvtDeviceD0Exit

EVT_WDF_DEVICE_D0_EXIT_PRE_INTERRUPTS_DISABLED

EvtDeviceD0ExitPreInterruptsDisabled

EVT_WDF_DEVICE_DISABLE_WAKE_AT_BUS

EvtDeviceDisableWakeAtBus

EVT_WDF_DEVICE_DISARM_WAKE_FROM_S0

EvtDeviceDisarmWakeFromS0

EVT_WDF_DEVICE_DISARM_WAKE_FROM_SX (Fungsi yang terhubung dengan driver Windows untuk mengatur perangkat agar tidak menghidupkan dari mode tidur SX)

EvtDeviceDisarmWakeFromSx

EVT_WDF_DEVICE_EJECT

EvtDeviceEject

EVT_WDF_DEVICE_ENABLE_WAKE_AT_BUS

EvtDeviceEnableWakeAtBus

EVT_WDF_DEVICE_FILE_CREATE

EvtDeviceFileCreate

EVT_WDF_DEVICE_FILTER_RESOURCE_REQUIREMENTS

EvtDeviceFilterAddResourceRequirements

EVT_WDF_DEVICE_PNP_STATE_CHANGE_NOTIFICATION

EvtDevicePnpStateChange

EVT_WDF_PERUBAHAN_STATUS_KEBIJAKAN_DAYA_PERANGKAT_NOTIFICATION

EvtDevicePnpStateChange

EVT_WDF_DEVICE_POWER_STATE_CHANGE_NOTIFICATION (Pemberitahuan Perubahan Status Daya Perangkat)

EvtDevicePowerStateChange

EVT_WDF_DEVICE_PREPARE_HARDWARE (fungsi untuk mempersiapkan perangkat keras)

EvtDevicePrepareHardware

EVT_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST

EvtDeviceProcessQueryInterfaceRequest

EVT_WDF_DEVICE_QUERY_REMOVE

EvtDeviceQueryRemove

EVT_WDF_DEVICE_QUERY_STOP

EvtDeviceQueryStop

EVT_WDF_DEVICE_RELATIONS_QUERY

EvtDeviceRelationsQuery

EVT_WDF_DEVICE_RELEASE_HARDWARE (Event handler untuk melepaskan perangkat keras dalam WDF)

EvtDeviceReleaseHardware

EVT_WDF_DEVICE_REMOVE_ADDED_RESOURCES

EvtDeviceRemoveAddedResources EvtDeviceRemoveAddedResources

EVT_WDF_DEVICE_RESOURCE_REQUIREMENTS_QUERY

EvtDeviceResourceRequirementsQuery

EVT_WDF_DEVICE_RESOURCES_QUERY

EvtDeviceResourcesQuery

EVT_WDF_DEVICE_SELF_MANAGED_IO_CLEANUP

EvtDeviceSelfManagedIoCleanup

EVT_WDF_DEVICE_SELF_MANAGED_IO_FLUSH

EvtDeviceSelfManagedIoFlush

EVT_WDF_DEVICE_SELF_MANAGED_IO_INIT

EvtDeviceSelfManagedIoInit

EVT_WDF_DEVICE_SELF_MANAGED_IO_RESTART

EvtDeviceSelfManagedIoRestart

Penangguhan IO Terkelola Mandiri EVT_WDF_DEVICE

EvtDeviceSelfManagedIoSuspend

EVT_WDF_DEVICE_SET_LOCK

EvtDeviceSetLock

EVT_WDF_DEVICE_SHUTDOWN_NOTIFICATION

EvtDeviceShutdownNotification

EVT_WDF_DEVICE_SURPRISE_REMOVAL

EvtDeviceSurpriseRemoval

EVT_WDF_DEVICE_USAGE_NOTIFICATION

EvtDeviceUsageNotification

EVT_WDF_DEVICE_WAKE_FROM_S0_TRIGGERED

EvtDeviceWakeFromS0Triggered

EVT_WDF_DEVICE_WAKE_FROM_SX_TRIGGERED (Pemicu bangun perangkat dari SX di WDF)

EvtDeviceWakeFromSxTriggered

EVT_WDF_DMA_ENABLER_DISABLE

EvtDmaEnablerDisable

EVT_WDF_DMA_ENABLER_ENABLE

EvtDmaEnablerEnable

EVT_WDF_DMA_ENABLER_FILL

EvtDmaEnablerFill

EVT_WDF_DMA_ENABLER_FLUSH

EvtDmaEnablerFlush

EVT_WDF_DMA_ENABLER_SELFMANAGED_IO_START

EvtDmaEnablerSelfManagedIoStart

EVT_WDF_DMA_ENABLER_SELFMANAGED_IO_STOP

EvtDmaEnablerSelfManagedIoStop

EVT_WDF_DPC

EvtDpcFunc

EVT_WDF_DRIVER_DEVICE_ADD

EvtDriverDeviceAdd

EVT_WDF_DRIVER_UNLOAD

EvtDriverUnload

EVT_WDF_FILE_CLEANUP

EvtFileCleanup

EVT_WDF_FILE_CLOSE

EvtFileClose

EVT_WDF_FILE_CONTEXT_CLEANUP_CALLBACK

EvtCleanupCallback

EVT_WDF_FILE_CONTEXT_DESTROY_CALLBACK

EvtDestroyCallback

EVT_WDF_INTERRUPT_DISABLE

EvtInterruptDisable

EVT_WDF_INTERRUPT_DPC

EvtInterruptDpc

EVT_WDF_INTERRUPT_ENABLE

EvtInterruptEnable

EVT_WDF_INTERRUPT_ISR

EvtInterruptIsr

EVT_WDF_INTERRUPT_SYNCHRONIZE

EvtInterruptSynchronize

EVT_WDF_IO_IN_CALLER_CONTEXT

EvtIoInCallerContext

EVT_WDF_IO_QUEUE_CONTEXT_CLEANUP_CALLBACK

EvtCleanupCallback

EVT_WDF_IO_QUEUE_CONTEXT_DESTROY_CALLBACK

EvtDestroyCallback

EVT_WDF_IO_QUEUE_IO_CANCELED_ON_QUEUE

EvtIoCanceledOnQueue

EVT_WDF_IO_QUEUE_IO_DEFAULT

EvtIoDefault

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

EvtIoResume

EVT_WDF_IO_QUEUE_IO_STOP

#B0 #A1 #A2 #C3 EvtIoStop

EVT_WDF_IO_QUEUE_IO_WRITE

EvtIoWrite

EVT_WDF_IO_QUEUE_STATE

EvtIoQueueState

EVT_WDF_IO_TARGET_QUERY_REMOVE

EvtIoTargetQueryRemove

EVT_WDF_IO_TARGET_REMOVE_CANCELED

EvtIoTargetRemoveCanceled

EVT_WDF_IO_TARGET_REMOVE_COMPLETE

EvtIoTargetRemoveComplete

EVT_WDF_OBJECT_CONTEXT_CLEANUP

EvtCleanupCallback

EVT_WDF_OBJECT_CONTEXT_DESTROY

EVT_WDF_PROGRAM_DMA

EvtProgramDma

EVT_WDF_REQUEST_CANCEL

#B0 #A1 EvtRequestCancel #A2 #C3

EVT_WDF_REQUEST_COMPLETION_ROUTINE

CompletionRoutine

EVT_WDF_TIMER

EvtTimerFunc

EVT_WDF_TRACE_CALLBACK

EVT_WDF_WMI_INSTANCE_EXECUTE_METHOD

EvtWmiInstanceExecuteMethod

EVT_WDF_WMI_INSTANCE_QUERY_INSTANCE

EvtWmiInstanceQueryInstance

EVT_WDF_WMI_INSTANCE_SET_INSTANCE

EvtWmiInstanceSetInstance

EVT_WDF_WMI_INSTANCE_SET_ITEM

EvtWmiInstanceSetItem

EVT_WDF_WMI_PROVIDER_FUNCTION_CONTROL

EvtWmiProviderFunctionControl

EVT_WDF_WORKITEM

EvtWorkItem

EVT_WDFDEVICE_WDM_IRP_PREPROCESS

EvtDeviceWdmIrpPreprocess

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