reactos/sdk/lib/drivers/wdf/shared/enhancedverif/vfeventhooks.cpp
Victor Perevertkin 8a978a179f
[WDF] Add Windows Driver Framework files
Takern from Microsoft GitHub repo:
d9c6040fe9

Licensed under MIT
2020-11-03 00:06:26 +03:00

1021 lines
25 KiB
C++

/*++
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;
}