共用方式為


靜態驅動程式驗證器 KMDF 函式宣告

若要讓 SDV 驗證您的 KMDF 驅動程式,您必須使用回呼函式角色類型來宣告每個回呼函式。 回呼函式角色類型會定義于各種 WDF 標頭檔中,並在您使用 Wdf.h 標頭檔建置驅動程式時包含。 下表顯示其相關聯的函式角色類型和事件回呼函式。

您必須在回呼函式定義之前宣告驅動程式的回呼函式。 下列範例顯示 EvtDriverDeviceAdd 回呼函式的函式角色類型宣告。 在此範例中,回呼函式稱為 EvtDriverDeviceAdd

#include <NTDDK.h>  
#include <wdf.h>
EVT_WDF_DRIVER_DEVICE_ADD EvtDriverDeviceAdd

如果回呼函式具有函式原型宣告,您必須將函式原型取代為函式角色類型宣告。 如需函式角色類型宣告的詳細資訊,請參閱 使用函式角色類型宣告

下表顯示回呼函式類型和它們相關聯的事件回呼函式。

函式角色類型 事件回呼函式

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_IDENTIFICATION_DESCRIPTION_COMPARE

EvtChildListIdentificationDescriptionCompare

EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COPY

EvtChildListIdentificationDescriptionCopy

EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_DUPLICATE

EvtChildListIdentificationDescriptionDuplicate

EVT_WDF_CHILD_LIST_SCAN_FOR_CHILDREN

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

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_DEVICE_POWER_POLICY_STATE_CHANGE_NOTIFICATION

EvtDevicePnpStateChange

EVT_WDF_DEVICE_POWER_STATE_CHANGE_NOTIFICATION

EvtDevicePowerStateChange

EVT_WDF_DEVICE_PREPARE_HARDWARE

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

EvtDeviceReleaseHardware

EVT_WDF_DEVICE_REMOVE_ADDED_RESOURCES

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

EVT_WDF_DEVICE_SELF_MANAGED_IO_SUSPEND

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

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

EvtIoDeviceControl

EVT_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL

EvtIoInternalDeviceControl

EVT_WDF_IO_QUEUE_IO_READ

EvtIoRead

EVT_WDF_IO_QUEUE_IO_RESUME

EvtIoResume

EVT_WDF_IO_QUEUE_IO_STOP

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

EvtRequestCancel

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

允許多個回呼函式的函式角色類型

有一些函式角色類型可以有多個相關聯的事件回呼函式。 例如,驅動程式可能會有多個 EvtTimerFuncEvtDpcFunc 回呼 函式。 下表顯示 SDV 針對每個函式角色類型所支援的回呼數目上限。 雖然驅動程式的回呼函式數目超過資料表中所列的回呼函式數目不正確,但使用 SDV 時,會使驗證程式變得更複雜。 如需您可能需要對 Sdv-map.h 檔案進行變更以容納其他回呼函式的資訊,請參閱 重複函式角色類型的進入點

函式角色類型 回呼函式的數目上限

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

函式角色類型和 I/O 佇列

當您宣告依賴 KMDF 架構 的要求處理常式 和回呼函式,以將 I/O 要求傳遞給驅動程式 (以進行循序或平行分派) 時,請使用下列函式角色類型。 請勿將這些函式角色類型用於手動將要求從預設佇列手動轉送至其他佇列的函式, (手動分派) 。 SDV 不支援記憶體模型,可讓它追蹤從一個佇列到另一個佇列的要求。

如需 I/O 佇列的詳細資訊,請參閱 建立 I/O 佇列

用於手動分派之 I/O 佇列的函式角色類型

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

EvtCleanupCallback 和 EvtDestroyCallback 函式的函式角色類型

您必須使用特定物件、函式角色類型來宣告 EvtCleanupCallbackEvtDestroyCallback 函式。 SDV 需要這些物件特定角色類型,才能判斷驅動程式是否使用回呼函式正確。 使用下表來判斷要使用的函式類型。

物件型別 EvtCleanupCallback 的函式角色類型

裝置物件

EVT_WDF_DEVICE_CONTEXT_CLEANUP

I/O 佇列物件

EVT_WDF_IO_QUEUE_CONTEXT_CLEANUP_CALLBACK

File 物件

EVT_WDF_FILE_CONTEXT_CLEANUP_CALLBACK

所有其他物件

EVT_WDF_OBJECT_CONTEXT_CLEANUP

物件型別 EvDestroyCallback 的函式角色類型

裝置物件

EVT_WDF_DEVICE_CONTEXT_DESTROY

I/O 佇列物件

EVT_WDF_IO_QUEUE_CONTEXT_DESTROY_CALLBACK

File 物件

EVT_WDF_FILE_CONTEXT_DESTROY_CALLBACK

所有其他物件

EVT_WDF_OBJECT_CONTEXT_DESTROY