--- /dev/null
+/*++
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+
+Module Name:
+
+ VfEventHooks.cpp
+
+Abstract:
+ Generated implementation of verifier event callback hooks
+
+Environment:
+ User and Kernel
+
+ ** Warning ** : manual changes to this file will be lost.
+
+--*/
+
+#include "vfpriv.hpp"
+
+
+extern "C" {
+extern WDFVERSION WdfVersion;
+}
+
+#ifdef ALLOC_PRAGMA
+#pragma alloc_text(FX_ENHANCED_VERIFIER_SECTION_NAME, \
+ VfEvtDeviceD0Entry, \
+ VfEvtDeviceD0EntryPostInterruptsEnabled, \
+ VfEvtDeviceD0Exit, \
+ VfEvtDeviceD0ExitPreInterruptsDisabled, \
+ VfEvtDevicePrepareHardware, \
+ VfEvtDeviceReleaseHardware, \
+ VfEvtDeviceSelfManagedIoCleanup, \
+ VfEvtDeviceSelfManagedIoFlush, \
+ VfEvtDeviceSelfManagedIoInit, \
+ VfEvtDeviceSelfManagedIoSuspend, \
+ VfEvtDeviceSelfManagedIoRestart, \
+ VfEvtDeviceQueryStop, \
+ VfEvtDeviceQueryRemove, \
+ VfEvtDeviceSurpriseRemoval, \
+ VfEvtDeviceUsageNotification, \
+ VfEvtDeviceUsageNotificationEx, \
+ VfEvtDeviceRelationsQuery, \
+ VfEvtIoDefault, \
+ VfEvtIoStop, \
+ VfEvtIoResume, \
+ VfEvtIoRead, \
+ VfEvtIoWrite, \
+ VfEvtIoDeviceControl, \
+ VfEvtIoInternalDeviceControl, \
+ VfEvtIoCanceledOnQueue \
+)
+#endif
+
+NTSTATUS
+VfEvtDeviceD0Entry(
+ WDFDEVICE Device,
+ WDF_POWER_DEVICE_STATE PreviousState
+)
+{
+ NTSTATUS returnVal = STATUS_SUCCESS;
+ PFN_WDF_DEVICE_D0_ENTRY pfn = NULL;
+ PVF_WDFDEVICECREATE_CONTEXT context = NULL;
+
+ PAGED_CODE_LOCKED();
+
+ context = GET_CONTEXT(Device, VF_WDFDEVICECREATE_CONTEXT);
+ ASSERT(context != NULL);
+
+ pfn = context->PnpPowerEventCallbacksOriginal.EvtDeviceD0Entry;
+ if (pfn != NULL) {
+ GUID activityId = { 0 };
+ if (PerfEvtDeviceD0EntryStart(Device, &activityId)) {
+ returnVal = (pfn)(
+ Device,
+ PreviousState
+ );
+
+ PerfEvtDeviceD0EntryStop(Device, &activityId);
+ } else {
+ KIRQL irql = PASSIVE_LEVEL;
+ BOOLEAN critRegion = FALSE;
+
+ VerifyIrqlEntry(&irql);
+ VerifyCriticalRegionEntry(&critRegion);
+
+ returnVal = (pfn)(
+ Device,
+ PreviousState
+ );
+
+ VerifyIrqlExit(context->CommonHeader.DriverGlobals, irql);
+ VerifyCriticalRegionExit(context->CommonHeader.DriverGlobals, critRegion, (PVOID)pfn);
+ }
+ }
+
+ return returnVal;
+}
+
+NTSTATUS
+VfEvtDeviceD0EntryPostInterruptsEnabled(
+ WDFDEVICE Device,
+ WDF_POWER_DEVICE_STATE PreviousState
+)
+{
+ NTSTATUS returnVal = STATUS_SUCCESS;
+ PFN_WDF_DEVICE_D0_ENTRY_POST_INTERRUPTS_ENABLED pfn = NULL;
+ PVF_WDFDEVICECREATE_CONTEXT context = NULL;
+
+ PAGED_CODE_LOCKED();
+
+ context = GET_CONTEXT(Device, VF_WDFDEVICECREATE_CONTEXT);
+ ASSERT(context != NULL);
+
+ pfn = context->PnpPowerEventCallbacksOriginal.EvtDeviceD0EntryPostInterruptsEnabled;
+ if (pfn != NULL) {
+ KIRQL irql = PASSIVE_LEVEL;
+ BOOLEAN critRegion = FALSE;
+
+ VerifyIrqlEntry(&irql);
+ VerifyCriticalRegionEntry(&critRegion);
+
+ returnVal = (pfn)(
+ Device,
+ PreviousState
+ );
+
+ VerifyIrqlExit(context->CommonHeader.DriverGlobals, irql);
+ VerifyCriticalRegionExit(context->CommonHeader.DriverGlobals, critRegion, (PVOID)pfn);
+ }
+
+ return returnVal;
+}
+
+NTSTATUS
+VfEvtDeviceD0Exit(
+ WDFDEVICE Device,
+ WDF_POWER_DEVICE_STATE TargetState
+)
+{
+ NTSTATUS returnVal = STATUS_SUCCESS;
+ PFN_WDF_DEVICE_D0_EXIT pfn = NULL;
+ PVF_WDFDEVICECREATE_CONTEXT context = NULL;
+
+ PAGED_CODE_LOCKED();
+
+ context = GET_CONTEXT(Device, VF_WDFDEVICECREATE_CONTEXT);
+ ASSERT(context != NULL);
+
+ pfn = context->PnpPowerEventCallbacksOriginal.EvtDeviceD0Exit;
+ if (pfn != NULL) {
+ GUID activityId = { 0 };
+ if (PerfEvtDeviceD0ExitStart(Device, &activityId)) {
+ returnVal = (pfn)(
+ Device,
+ TargetState
+ );
+
+ PerfEvtDeviceD0ExitStop(Device, &activityId);
+ } else {
+ KIRQL irql = PASSIVE_LEVEL;
+ BOOLEAN critRegion = FALSE;
+
+ VerifyIrqlEntry(&irql);
+ VerifyCriticalRegionEntry(&critRegion);
+
+ returnVal = (pfn)(
+ Device,
+ TargetState
+ );
+
+ VerifyIrqlExit(context->CommonHeader.DriverGlobals, irql);
+ VerifyCriticalRegionExit(context->CommonHeader.DriverGlobals, critRegion, (PVOID)pfn);
+ }
+ }
+
+ return returnVal;
+}
+
+NTSTATUS
+VfEvtDeviceD0ExitPreInterruptsDisabled(
+ WDFDEVICE Device,
+ WDF_POWER_DEVICE_STATE TargetState
+)
+{
+ NTSTATUS returnVal = STATUS_SUCCESS;
+ PFN_WDF_DEVICE_D0_EXIT_PRE_INTERRUPTS_DISABLED pfn = NULL;
+ PVF_WDFDEVICECREATE_CONTEXT context = NULL;
+
+ PAGED_CODE_LOCKED();
+
+ context = GET_CONTEXT(Device, VF_WDFDEVICECREATE_CONTEXT);
+ ASSERT(context != NULL);
+
+ pfn = context->PnpPowerEventCallbacksOriginal.EvtDeviceD0ExitPreInterruptsDisabled;
+ if (pfn != NULL) {
+ KIRQL irql = PASSIVE_LEVEL;
+ BOOLEAN critRegion = FALSE;
+
+ VerifyIrqlEntry(&irql);
+ VerifyCriticalRegionEntry(&critRegion);
+
+ returnVal = (pfn)(
+ Device,
+ TargetState
+ );
+
+ VerifyIrqlExit(context->CommonHeader.DriverGlobals, irql);
+ VerifyCriticalRegionExit(context->CommonHeader.DriverGlobals, critRegion, (PVOID)pfn);
+ }
+
+ return returnVal;
+}
+
+NTSTATUS
+VfEvtDevicePrepareHardware(
+ WDFDEVICE Device,
+ WDFCMRESLIST ResourcesRaw,
+ WDFCMRESLIST ResourcesTranslated
+)
+{
+ NTSTATUS returnVal = STATUS_SUCCESS;
+ PFN_WDF_DEVICE_PREPARE_HARDWARE pfn = NULL;
+ PVF_WDFDEVICECREATE_CONTEXT context = NULL;
+
+ PAGED_CODE_LOCKED();
+
+ context = GET_CONTEXT(Device, VF_WDFDEVICECREATE_CONTEXT);
+ ASSERT(context != NULL);
+
+ pfn = context->PnpPowerEventCallbacksOriginal.EvtDevicePrepareHardware;
+ if (pfn != NULL) {
+ GUID activityId = { 0 };
+ if (PerfEvtDevicePrepareHardwareStart(Device, &activityId)) {
+ returnVal = (pfn)(
+ Device,
+ ResourcesRaw,
+ ResourcesTranslated
+ );
+
+ PerfEvtDevicePrepareHardwareStop(Device, &activityId);
+ } else {
+ KIRQL irql = PASSIVE_LEVEL;
+ BOOLEAN critRegion = FALSE;
+
+ VerifyIrqlEntry(&irql);
+ VerifyCriticalRegionEntry(&critRegion);
+
+ returnVal = (pfn)(
+ Device,
+ ResourcesRaw,
+ ResourcesTranslated
+ );
+
+ VerifyIrqlExit(context->CommonHeader.DriverGlobals, irql);
+ VerifyCriticalRegionExit(context->CommonHeader.DriverGlobals, critRegion, (PVOID)pfn);
+ }
+ }
+
+ return returnVal;
+}
+
+NTSTATUS
+VfEvtDeviceReleaseHardware(
+ WDFDEVICE Device,
+ WDFCMRESLIST ResourcesTranslated
+)
+{
+ NTSTATUS returnVal = STATUS_SUCCESS;
+ PFN_WDF_DEVICE_RELEASE_HARDWARE pfn = NULL;
+ PVF_WDFDEVICECREATE_CONTEXT context = NULL;
+
+ PAGED_CODE_LOCKED();
+
+ context = GET_CONTEXT(Device, VF_WDFDEVICECREATE_CONTEXT);
+ ASSERT(context != NULL);
+
+ pfn = context->PnpPowerEventCallbacksOriginal.EvtDeviceReleaseHardware;
+ if (pfn != NULL) {
+ GUID activityId = { 0 };
+ if (PerfEvtDeviceReleaseHardwareStart(Device, &activityId)) {
+ returnVal = (pfn)(
+ Device,
+ ResourcesTranslated
+ );
+
+ PerfEvtDeviceReleaseHardwareStop(Device, &activityId);
+ } else {
+ KIRQL irql = PASSIVE_LEVEL;
+ BOOLEAN critRegion = FALSE;
+
+ VerifyIrqlEntry(&irql);
+ VerifyCriticalRegionEntry(&critRegion);
+
+ returnVal = (pfn)(
+ Device,
+ ResourcesTranslated
+ );
+
+ VerifyIrqlExit(context->CommonHeader.DriverGlobals, irql);
+ VerifyCriticalRegionExit(context->CommonHeader.DriverGlobals, critRegion, (PVOID)pfn);
+ }
+ }
+
+ return returnVal;
+}
+
+VOID
+VfEvtDeviceSelfManagedIoCleanup(
+ WDFDEVICE Device
+)
+{
+ PFN_WDF_DEVICE_SELF_MANAGED_IO_CLEANUP pfn = NULL;
+ PVF_WDFDEVICECREATE_CONTEXT context = NULL;
+
+ PAGED_CODE_LOCKED();
+
+ context = GET_CONTEXT(Device, VF_WDFDEVICECREATE_CONTEXT);
+ ASSERT(context != NULL);
+
+ pfn = context->PnpPowerEventCallbacksOriginal.EvtDeviceSelfManagedIoCleanup;
+ if (pfn != NULL) {
+ KIRQL irql = PASSIVE_LEVEL;
+ BOOLEAN critRegion = FALSE;
+
+ VerifyIrqlEntry(&irql);
+ VerifyCriticalRegionEntry(&critRegion);
+
+ (pfn)(
+ Device
+ );
+
+ VerifyIrqlExit(context->CommonHeader.DriverGlobals, irql);
+ VerifyCriticalRegionExit(context->CommonHeader.DriverGlobals, critRegion, (PVOID)pfn);
+ }
+
+ return;
+}
+
+VOID
+VfEvtDeviceSelfManagedIoFlush(
+ WDFDEVICE Device
+)
+{
+ PFN_WDF_DEVICE_SELF_MANAGED_IO_FLUSH pfn = NULL;
+ PVF_WDFDEVICECREATE_CONTEXT context = NULL;
+
+ PAGED_CODE_LOCKED();
+
+ context = GET_CONTEXT(Device, VF_WDFDEVICECREATE_CONTEXT);
+ ASSERT(context != NULL);
+
+ pfn = context->PnpPowerEventCallbacksOriginal.EvtDeviceSelfManagedIoFlush;
+ if (pfn != NULL) {
+ KIRQL irql = PASSIVE_LEVEL;
+ BOOLEAN critRegion = FALSE;
+
+ VerifyIrqlEntry(&irql);
+ VerifyCriticalRegionEntry(&critRegion);
+
+ (pfn)(
+ Device
+ );
+
+ VerifyIrqlExit(context->CommonHeader.DriverGlobals, irql);
+ VerifyCriticalRegionExit(context->CommonHeader.DriverGlobals, critRegion, (PVOID)pfn);
+ }
+
+ return;
+}
+
+NTSTATUS
+VfEvtDeviceSelfManagedIoInit(
+ WDFDEVICE Device
+)
+{
+ NTSTATUS returnVal = STATUS_SUCCESS;
+ PFN_WDF_DEVICE_SELF_MANAGED_IO_INIT pfn = NULL;
+ PVF_WDFDEVICECREATE_CONTEXT context = NULL;
+
+ PAGED_CODE_LOCKED();
+
+ context = GET_CONTEXT(Device, VF_WDFDEVICECREATE_CONTEXT);
+ ASSERT(context != NULL);
+
+ pfn = context->PnpPowerEventCallbacksOriginal.EvtDeviceSelfManagedIoInit;
+ if (pfn != NULL) {
+ KIRQL irql = PASSIVE_LEVEL;
+ BOOLEAN critRegion = FALSE;
+
+ VerifyIrqlEntry(&irql);
+ VerifyCriticalRegionEntry(&critRegion);
+
+ returnVal = (pfn)(
+ Device
+ );
+
+ VerifyIrqlExit(context->CommonHeader.DriverGlobals, irql);
+ VerifyCriticalRegionExit(context->CommonHeader.DriverGlobals, critRegion, (PVOID)pfn);
+ }
+
+ return returnVal;
+}
+
+NTSTATUS
+VfEvtDeviceSelfManagedIoSuspend(
+ WDFDEVICE Device
+)
+{
+ NTSTATUS returnVal = STATUS_SUCCESS;
+ PFN_WDF_DEVICE_SELF_MANAGED_IO_SUSPEND pfn = NULL;
+ PVF_WDFDEVICECREATE_CONTEXT context = NULL;
+
+ PAGED_CODE_LOCKED();
+
+ context = GET_CONTEXT(Device, VF_WDFDEVICECREATE_CONTEXT);
+ ASSERT(context != NULL);
+
+ pfn = context->PnpPowerEventCallbacksOriginal.EvtDeviceSelfManagedIoSuspend;
+ if (pfn != NULL) {
+ KIRQL irql = PASSIVE_LEVEL;
+ BOOLEAN critRegion = FALSE;
+
+ VerifyIrqlEntry(&irql);
+ VerifyCriticalRegionEntry(&critRegion);
+
+ returnVal = (pfn)(
+ Device
+ );
+
+ VerifyIrqlExit(context->CommonHeader.DriverGlobals, irql);
+ VerifyCriticalRegionExit(context->CommonHeader.DriverGlobals, critRegion, (PVOID)pfn);
+ }
+
+ return returnVal;
+}
+
+NTSTATUS
+VfEvtDeviceSelfManagedIoRestart(
+ WDFDEVICE Device
+)
+{
+ NTSTATUS returnVal = STATUS_SUCCESS;
+ PFN_WDF_DEVICE_SELF_MANAGED_IO_RESTART pfn = NULL;
+ PVF_WDFDEVICECREATE_CONTEXT context = NULL;
+
+ PAGED_CODE_LOCKED();
+
+ context = GET_CONTEXT(Device, VF_WDFDEVICECREATE_CONTEXT);
+ ASSERT(context != NULL);
+
+ pfn = context->PnpPowerEventCallbacksOriginal.EvtDeviceSelfManagedIoRestart;
+ if (pfn != NULL) {
+ KIRQL irql = PASSIVE_LEVEL;
+ BOOLEAN critRegion = FALSE;
+
+ VerifyIrqlEntry(&irql);
+ VerifyCriticalRegionEntry(&critRegion);
+
+ returnVal = (pfn)(
+ Device
+ );
+
+ VerifyIrqlExit(context->CommonHeader.DriverGlobals, irql);
+ VerifyCriticalRegionExit(context->CommonHeader.DriverGlobals, critRegion, (PVOID)pfn);
+ }
+
+ return returnVal;
+}
+
+NTSTATUS
+VfEvtDeviceQueryStop(
+ WDFDEVICE Device
+)
+{
+ NTSTATUS returnVal = STATUS_SUCCESS;
+ PFN_WDF_DEVICE_QUERY_STOP pfn = NULL;
+ PVF_WDFDEVICECREATE_CONTEXT context = NULL;
+
+ PAGED_CODE_LOCKED();
+
+ context = GET_CONTEXT(Device, VF_WDFDEVICECREATE_CONTEXT);
+ ASSERT(context != NULL);
+
+ pfn = context->PnpPowerEventCallbacksOriginal.EvtDeviceQueryStop;
+ if (pfn != NULL) {
+ KIRQL irql = PASSIVE_LEVEL;
+ BOOLEAN critRegion = FALSE;
+
+ VerifyIrqlEntry(&irql);
+ VerifyCriticalRegionEntry(&critRegion);
+
+ returnVal = (pfn)(
+ Device
+ );
+
+ VerifyIrqlExit(context->CommonHeader.DriverGlobals, irql);
+ VerifyCriticalRegionExit(context->CommonHeader.DriverGlobals, critRegion, (PVOID)pfn);
+ }
+
+ return returnVal;
+}
+
+NTSTATUS
+VfEvtDeviceQueryRemove(
+ WDFDEVICE Device
+)
+{
+ NTSTATUS returnVal = STATUS_SUCCESS;
+ PFN_WDF_DEVICE_QUERY_REMOVE pfn = NULL;
+ PVF_WDFDEVICECREATE_CONTEXT context = NULL;
+
+ PAGED_CODE_LOCKED();
+
+ context = GET_CONTEXT(Device, VF_WDFDEVICECREATE_CONTEXT);
+ ASSERT(context != NULL);
+
+ pfn = context->PnpPowerEventCallbacksOriginal.EvtDeviceQueryRemove;
+ if (pfn != NULL) {
+ KIRQL irql = PASSIVE_LEVEL;
+ BOOLEAN critRegion = FALSE;
+
+ VerifyIrqlEntry(&irql);
+ VerifyCriticalRegionEntry(&critRegion);
+
+ returnVal = (pfn)(
+ Device
+ );
+
+ VerifyIrqlExit(context->CommonHeader.DriverGlobals, irql);
+ VerifyCriticalRegionExit(context->CommonHeader.DriverGlobals, critRegion, (PVOID)pfn);
+ }
+
+ return returnVal;
+}
+
+VOID
+VfEvtDeviceSurpriseRemoval(
+ WDFDEVICE Device
+)
+{
+ PFN_WDF_DEVICE_SURPRISE_REMOVAL pfn = NULL;
+ PVF_WDFDEVICECREATE_CONTEXT context = NULL;
+
+ PAGED_CODE_LOCKED();
+
+ context = GET_CONTEXT(Device, VF_WDFDEVICECREATE_CONTEXT);
+ ASSERT(context != NULL);
+
+ pfn = context->PnpPowerEventCallbacksOriginal.EvtDeviceSurpriseRemoval;
+ if (pfn != NULL) {
+ KIRQL irql = PASSIVE_LEVEL;
+ BOOLEAN critRegion = FALSE;
+
+ VerifyIrqlEntry(&irql);
+ VerifyCriticalRegionEntry(&critRegion);
+
+ (pfn)(
+ Device
+ );
+
+ VerifyIrqlExit(context->CommonHeader.DriverGlobals, irql);
+ VerifyCriticalRegionExit(context->CommonHeader.DriverGlobals, critRegion, (PVOID)pfn);
+ }
+
+ return;
+}
+
+VOID
+VfEvtDeviceUsageNotification(
+ WDFDEVICE Device,
+ WDF_SPECIAL_FILE_TYPE NotificationType,
+ BOOLEAN IsInNotificationPath
+)
+{
+ PFN_WDF_DEVICE_USAGE_NOTIFICATION pfn = NULL;
+ PVF_WDFDEVICECREATE_CONTEXT context = NULL;
+
+ PAGED_CODE_LOCKED();
+
+ context = GET_CONTEXT(Device, VF_WDFDEVICECREATE_CONTEXT);
+ ASSERT(context != NULL);
+
+ pfn = context->PnpPowerEventCallbacksOriginal.EvtDeviceUsageNotification;
+ if (pfn != NULL) {
+ KIRQL irql = PASSIVE_LEVEL;
+ BOOLEAN critRegion = FALSE;
+
+ VerifyIrqlEntry(&irql);
+ VerifyCriticalRegionEntry(&critRegion);
+
+ (pfn)(
+ Device,
+ NotificationType,
+ IsInNotificationPath
+ );
+
+ VerifyIrqlExit(context->CommonHeader.DriverGlobals, irql);
+ VerifyCriticalRegionExit(context->CommonHeader.DriverGlobals, critRegion, (PVOID)pfn);
+ }
+
+ return;
+}
+
+NTSTATUS
+VfEvtDeviceUsageNotificationEx(
+ WDFDEVICE Device,
+ WDF_SPECIAL_FILE_TYPE NotificationType,
+ BOOLEAN IsInNotificationPath
+)
+{
+ NTSTATUS returnVal = STATUS_SUCCESS;
+ PFN_WDF_DEVICE_USAGE_NOTIFICATION_EX pfn = NULL;
+ PVF_WDFDEVICECREATE_CONTEXT context = NULL;
+
+ PAGED_CODE_LOCKED();
+
+ context = GET_CONTEXT(Device, VF_WDFDEVICECREATE_CONTEXT);
+ ASSERT(context != NULL);
+
+ pfn = context->PnpPowerEventCallbacksOriginal.EvtDeviceUsageNotificationEx;
+ if (pfn != NULL) {
+ KIRQL irql = PASSIVE_LEVEL;
+ BOOLEAN critRegion = FALSE;
+
+ VerifyIrqlEntry(&irql);
+ VerifyCriticalRegionEntry(&critRegion);
+
+ returnVal = (pfn)(
+ Device,
+ NotificationType,
+ IsInNotificationPath
+ );
+
+ VerifyIrqlExit(context->CommonHeader.DriverGlobals, irql);
+ VerifyCriticalRegionExit(context->CommonHeader.DriverGlobals, critRegion, (PVOID)pfn);
+ }
+
+ return returnVal;
+}
+
+VOID
+VfEvtDeviceRelationsQuery(
+ WDFDEVICE Device,
+ DEVICE_RELATION_TYPE RelationType
+)
+{
+ PFN_WDF_DEVICE_RELATIONS_QUERY pfn = NULL;
+ PVF_WDFDEVICECREATE_CONTEXT context = NULL;
+
+ PAGED_CODE_LOCKED();
+
+ context = GET_CONTEXT(Device, VF_WDFDEVICECREATE_CONTEXT);
+ ASSERT(context != NULL);
+
+ pfn = context->PnpPowerEventCallbacksOriginal.EvtDeviceRelationsQuery;
+ if (pfn != NULL) {
+ KIRQL irql = PASSIVE_LEVEL;
+ BOOLEAN critRegion = FALSE;
+
+ VerifyIrqlEntry(&irql);
+ VerifyCriticalRegionEntry(&critRegion);
+
+ (pfn)(
+ Device,
+ RelationType
+ );
+
+ VerifyIrqlExit(context->CommonHeader.DriverGlobals, irql);
+ VerifyCriticalRegionExit(context->CommonHeader.DriverGlobals, critRegion, (PVOID)pfn);
+ }
+
+ return;
+}
+
+VOID
+VfEvtIoDefault(
+ WDFQUEUE Queue,
+ WDFREQUEST Request
+)
+{
+ PFN_WDF_IO_QUEUE_IO_DEFAULT pfn = NULL;
+ PVF_WDFIOQUEUECREATE_CONTEXT context = NULL;
+
+ PAGED_CODE_LOCKED();
+
+ context = GET_CONTEXT(Queue, VF_WDFIOQUEUECREATE_CONTEXT);
+ ASSERT(context != NULL);
+
+ pfn = context->IoQueueConfigOriginal.EvtIoDefault;
+ if (pfn != NULL) {
+ if (PerfIoStart(Request)) {
+ (pfn)(
+ Queue,
+ Request
+ );
+ } else {
+ KIRQL irql = PASSIVE_LEVEL;
+ BOOLEAN critRegion = FALSE;
+
+ VerifyIrqlEntry(&irql);
+ VerifyCriticalRegionEntry(&critRegion);
+
+ (pfn)(
+ Queue,
+ Request
+ );
+
+ VerifyIrqlExit(context->CommonHeader.DriverGlobals, irql);
+ VerifyCriticalRegionExit(context->CommonHeader.DriverGlobals, critRegion, (PVOID)pfn);
+ }
+ }
+
+ return;
+}
+
+VOID
+VfEvtIoStop(
+ WDFQUEUE Queue,
+ WDFREQUEST Request,
+ ULONG ActionFlags
+)
+{
+ PFN_WDF_IO_QUEUE_IO_STOP pfn = NULL;
+ PVF_WDFIOQUEUECREATE_CONTEXT context = NULL;
+
+ PAGED_CODE_LOCKED();
+
+ context = GET_CONTEXT(Queue, VF_WDFIOQUEUECREATE_CONTEXT);
+ ASSERT(context != NULL);
+
+ pfn = context->IoQueueConfigOriginal.EvtIoStop;
+ if (pfn != NULL) {
+ GUID activityId = { 0 };
+ if (PerfEvtIoStopStart(Queue, &activityId)) {
+ (pfn)(
+ Queue,
+ Request,
+ ActionFlags
+ );
+
+ PerfEvtIoStopStop(Queue, &activityId);
+ } else {
+ KIRQL irql = PASSIVE_LEVEL;
+ BOOLEAN critRegion = FALSE;
+
+ VerifyIrqlEntry(&irql);
+ VerifyCriticalRegionEntry(&critRegion);
+
+ (pfn)(
+ Queue,
+ Request,
+ ActionFlags
+ );
+
+ VerifyIrqlExit(context->CommonHeader.DriverGlobals, irql);
+ VerifyCriticalRegionExit(context->CommonHeader.DriverGlobals, critRegion, (PVOID)pfn);
+ }
+ }
+
+ return;
+}
+
+VOID
+VfEvtIoResume(
+ WDFQUEUE Queue,
+ WDFREQUEST Request
+)
+{
+ PFN_WDF_IO_QUEUE_IO_RESUME pfn = NULL;
+ PVF_WDFIOQUEUECREATE_CONTEXT context = NULL;
+
+ PAGED_CODE_LOCKED();
+
+ context = GET_CONTEXT(Queue, VF_WDFIOQUEUECREATE_CONTEXT);
+ ASSERT(context != NULL);
+
+ pfn = context->IoQueueConfigOriginal.EvtIoResume;
+ if (pfn != NULL) {
+ KIRQL irql = PASSIVE_LEVEL;
+ BOOLEAN critRegion = FALSE;
+
+ VerifyIrqlEntry(&irql);
+ VerifyCriticalRegionEntry(&critRegion);
+
+ (pfn)(
+ Queue,
+ Request
+ );
+
+ VerifyIrqlExit(context->CommonHeader.DriverGlobals, irql);
+ VerifyCriticalRegionExit(context->CommonHeader.DriverGlobals, critRegion, (PVOID)pfn);
+ }
+
+ return;
+}
+
+VOID
+VfEvtIoRead(
+ WDFQUEUE Queue,
+ WDFREQUEST Request,
+ size_t Length
+)
+{
+ PFN_WDF_IO_QUEUE_IO_READ pfn = NULL;
+ PVF_WDFIOQUEUECREATE_CONTEXT context = NULL;
+
+ PAGED_CODE_LOCKED();
+
+ context = GET_CONTEXT(Queue, VF_WDFIOQUEUECREATE_CONTEXT);
+ ASSERT(context != NULL);
+
+ pfn = context->IoQueueConfigOriginal.EvtIoRead;
+ if (pfn != NULL) {
+ if (PerfIoStart(Request)) {
+ (pfn)(
+ Queue,
+ Request,
+ Length
+ );
+ } else {
+ KIRQL irql = PASSIVE_LEVEL;
+ BOOLEAN critRegion = FALSE;
+
+ VerifyIrqlEntry(&irql);
+ VerifyCriticalRegionEntry(&critRegion);
+
+ (pfn)(
+ Queue,
+ Request,
+ Length
+ );
+
+ VerifyIrqlExit(context->CommonHeader.DriverGlobals, irql);
+ VerifyCriticalRegionExit(context->CommonHeader.DriverGlobals, critRegion, (PVOID)pfn);
+ }
+ }
+
+ return;
+}
+
+VOID
+VfEvtIoWrite(
+ WDFQUEUE Queue,
+ WDFREQUEST Request,
+ size_t Length
+)
+{
+ PFN_WDF_IO_QUEUE_IO_WRITE pfn = NULL;
+ PVF_WDFIOQUEUECREATE_CONTEXT context = NULL;
+
+ PAGED_CODE_LOCKED();
+
+ context = GET_CONTEXT(Queue, VF_WDFIOQUEUECREATE_CONTEXT);
+ ASSERT(context != NULL);
+
+ pfn = context->IoQueueConfigOriginal.EvtIoWrite;
+ if (pfn != NULL) {
+ if (PerfIoStart(Request)) {
+ (pfn)(
+ Queue,
+ Request,
+ Length
+ );
+ } else {
+ KIRQL irql = PASSIVE_LEVEL;
+ BOOLEAN critRegion = FALSE;
+
+ VerifyIrqlEntry(&irql);
+ VerifyCriticalRegionEntry(&critRegion);
+
+ (pfn)(
+ Queue,
+ Request,
+ Length
+ );
+
+ VerifyIrqlExit(context->CommonHeader.DriverGlobals, irql);
+ VerifyCriticalRegionExit(context->CommonHeader.DriverGlobals, critRegion, (PVOID)pfn);
+ }
+ }
+
+ return;
+}
+
+VOID
+VfEvtIoDeviceControl(
+ WDFQUEUE Queue,
+ WDFREQUEST Request,
+ size_t OutputBufferLength,
+ size_t InputBufferLength,
+ ULONG IoControlCode
+)
+{
+ PFN_WDF_IO_QUEUE_IO_DEVICE_CONTROL pfn = NULL;
+ PVF_WDFIOQUEUECREATE_CONTEXT context = NULL;
+
+ PAGED_CODE_LOCKED();
+
+ context = GET_CONTEXT(Queue, VF_WDFIOQUEUECREATE_CONTEXT);
+ ASSERT(context != NULL);
+
+ pfn = context->IoQueueConfigOriginal.EvtIoDeviceControl;
+ if (pfn != NULL) {
+ if (PerfIoStart(Request)) {
+ (pfn)(
+ Queue,
+ Request,
+ OutputBufferLength,
+ InputBufferLength,
+ IoControlCode
+ );
+ } else {
+ KIRQL irql = PASSIVE_LEVEL;
+ BOOLEAN critRegion = FALSE;
+
+ VerifyIrqlEntry(&irql);
+ VerifyCriticalRegionEntry(&critRegion);
+
+ (pfn)(
+ Queue,
+ Request,
+ OutputBufferLength,
+ InputBufferLength,
+ IoControlCode
+ );
+
+ VerifyIrqlExit(context->CommonHeader.DriverGlobals, irql);
+ VerifyCriticalRegionExit(context->CommonHeader.DriverGlobals, critRegion, (PVOID)pfn);
+ }
+ }
+
+ return;
+}
+
+VOID
+VfEvtIoInternalDeviceControl(
+ WDFQUEUE Queue,
+ WDFREQUEST Request,
+ size_t OutputBufferLength,
+ size_t InputBufferLength,
+ ULONG IoControlCode
+)
+{
+ PFN_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL pfn = NULL;
+ PVF_WDFIOQUEUECREATE_CONTEXT context = NULL;
+
+ PAGED_CODE_LOCKED();
+
+ context = GET_CONTEXT(Queue, VF_WDFIOQUEUECREATE_CONTEXT);
+ ASSERT(context != NULL);
+
+ pfn = context->IoQueueConfigOriginal.EvtIoInternalDeviceControl;
+ if (pfn != NULL) {
+ if (PerfIoStart(Request)) {
+ (pfn)(
+ Queue,
+ Request,
+ OutputBufferLength,
+ InputBufferLength,
+ IoControlCode
+ );
+ } else {
+ KIRQL irql = PASSIVE_LEVEL;
+ BOOLEAN critRegion = FALSE;
+
+ VerifyIrqlEntry(&irql);
+ VerifyCriticalRegionEntry(&critRegion);
+
+ (pfn)(
+ Queue,
+ Request,
+ OutputBufferLength,
+ InputBufferLength,
+ IoControlCode
+ );
+
+ VerifyIrqlExit(context->CommonHeader.DriverGlobals, irql);
+ VerifyCriticalRegionExit(context->CommonHeader.DriverGlobals, critRegion, (PVOID)pfn);
+ }
+ }
+
+ return;
+}
+
+VOID
+VfEvtIoCanceledOnQueue(
+ WDFQUEUE Queue,
+ WDFREQUEST Request
+)
+{
+ PFN_WDF_IO_QUEUE_IO_CANCELED_ON_QUEUE pfn = NULL;
+ PVF_WDFIOQUEUECREATE_CONTEXT context = NULL;
+
+ PAGED_CODE_LOCKED();
+
+ context = GET_CONTEXT(Queue, VF_WDFIOQUEUECREATE_CONTEXT);
+ ASSERT(context != NULL);
+
+ pfn = context->IoQueueConfigOriginal.EvtIoCanceledOnQueue;
+ if (pfn != NULL) {
+ KIRQL irql = PASSIVE_LEVEL;
+ BOOLEAN critRegion = FALSE;
+
+ VerifyIrqlEntry(&irql);
+ VerifyCriticalRegionEntry(&critRegion);
+
+ (pfn)(
+ Queue,
+ Request
+ );
+
+ VerifyIrqlExit(context->CommonHeader.DriverGlobals, irql);
+ VerifyCriticalRegionExit(context->CommonHeader.DriverGlobals, critRegion, (PVOID)pfn);
+ }
+
+ return;
+}
+