[WDF] Add Windows Driver Framework files
[reactos.git] / sdk / lib / drivers / wdf / shared / enhancedverif / um / vfwdfdynamics.cpp
diff --git a/sdk/lib/drivers/wdf/shared/enhancedverif/um/vfwdfdynamics.cpp b/sdk/lib/drivers/wdf/shared/enhancedverif/um/vfwdfdynamics.cpp
new file mode 100644 (file)
index 0000000..1eae86b
--- /dev/null
@@ -0,0 +1,5002 @@
+/*++
+
+Module Name: VfWdfDynamics.cpp
+
+Abstract:
+    Generated implementation for WDF API Verifier hooks
+
+Environment:
+    user mode only
+
+--*/
+
+#include "fxmin.hpp"
+#include "vfpriv.hpp"
+
+extern "C" {
+#include "FxDynamics.h"
+}
+
+
+extern "C" {
+extern WDFVERSION WdfVersion;
+}
+
+#ifdef  ALLOC_PRAGMA
+#pragma alloc_text(FX_ENHANCED_VERIFIER_SECTION_NAME,  \
+    VFWDFEXPORT(WdfCollectionCreate), \
+    VFWDFEXPORT(WdfCollectionGetCount), \
+    VFWDFEXPORT(WdfCollectionAdd), \
+    VFWDFEXPORT(WdfCollectionRemove), \
+    VFWDFEXPORT(WdfCollectionRemoveItem), \
+    VFWDFEXPORT(WdfCollectionGetItem), \
+    VFWDFEXPORT(WdfCollectionGetFirstItem), \
+    VFWDFEXPORT(WdfCollectionGetLastItem), \
+    VFWDFEXPORT(WdfCxDeviceInitAllocate), \
+    VFWDFEXPORT(WdfCxDeviceInitSetRequestAttributes), \
+    VFWDFEXPORT(WdfCxDeviceInitSetFileObjectConfig), \
+    VFWDFEXPORT(WdfCxVerifierKeBugCheck), \
+    VFWDFEXPORT(WdfDeviceGetDeviceState), \
+    VFWDFEXPORT(WdfDeviceSetDeviceState), \
+    VFWDFEXPORT(WdfDeviceWdmDispatchIrp), \
+    VFWDFEXPORT(WdfDeviceWdmDispatchIrpToIoQueue), \
+    VFWDFEXPORT(WdfDeviceGetDriver), \
+    VFWDFEXPORT(WdfDeviceGetIoTarget), \
+    VFWDFEXPORT(WdfDeviceAssignS0IdleSettings), \
+    VFWDFEXPORT(WdfDeviceAssignSxWakeSettings), \
+    VFWDFEXPORT(WdfDeviceOpenRegistryKey), \
+    VFWDFEXPORT(WdfDeviceOpenDevicemapKey), \
+    VFWDFEXPORT(WdfDeviceInitSetPnpPowerEventCallbacks), \
+    VFWDFEXPORT(WdfDeviceInitSetPowerPolicyEventCallbacks), \
+    VFWDFEXPORT(WdfDeviceInitSetPowerPolicyOwnership), \
+    VFWDFEXPORT(WdfDeviceInitSetIoType), \
+    VFWDFEXPORT(WdfDeviceInitSetFileObjectConfig), \
+    VFWDFEXPORT(WdfDeviceInitSetRequestAttributes), \
+    VFWDFEXPORT(WdfDeviceCreate), \
+    VFWDFEXPORT(WdfDeviceSetStaticStopRemove), \
+    VFWDFEXPORT(WdfDeviceCreateDeviceInterface), \
+    VFWDFEXPORT(WdfDeviceSetDeviceInterfaceState), \
+    VFWDFEXPORT(WdfDeviceRetrieveDeviceInterfaceString), \
+    VFWDFEXPORT(WdfDeviceCreateSymbolicLink), \
+    VFWDFEXPORT(WdfDeviceQueryProperty), \
+    VFWDFEXPORT(WdfDeviceAllocAndQueryProperty), \
+    VFWDFEXPORT(WdfDeviceSetPnpCapabilities), \
+    VFWDFEXPORT(WdfDeviceSetPowerCapabilities), \
+    VFWDFEXPORT(WdfDeviceSetFailed), \
+    VFWDFEXPORT(WdfDeviceStopIdleNoTrack), \
+    VFWDFEXPORT(WdfDeviceResumeIdleNoTrack), \
+    VFWDFEXPORT(WdfDeviceStopIdleActual), \
+    VFWDFEXPORT(WdfDeviceResumeIdleActual), \
+    VFWDFEXPORT(WdfDeviceGetFileObject), \
+    VFWDFEXPORT(WdfDeviceGetDefaultQueue), \
+    VFWDFEXPORT(WdfDeviceConfigureRequestDispatching), \
+    VFWDFEXPORT(WdfDeviceConfigureWdmIrpDispatchCallback), \
+    VFWDFEXPORT(WdfDeviceGetSystemPowerAction), \
+    VFWDFEXPORT(WdfDeviceInitSetReleaseHardwareOrderOnFailure), \
+    VFWDFEXPORT(WdfDeviceInitSetIoTypeEx), \
+    VFWDFEXPORT(WdfDevicePostEvent), \
+    VFWDFEXPORT(WdfDeviceMapIoSpace), \
+    VFWDFEXPORT(WdfDeviceUnmapIoSpace), \
+    VFWDFEXPORT(WdfDeviceGetHardwareRegisterMappedAddress), \
+    VFWDFEXPORT(WdfDeviceReadFromHardware), \
+    VFWDFEXPORT(WdfDeviceWriteToHardware), \
+    VFWDFEXPORT(WdfDeviceAssignInterfaceProperty), \
+    VFWDFEXPORT(WdfDeviceAllocAndQueryInterfaceProperty), \
+    VFWDFEXPORT(WdfDeviceQueryInterfaceProperty), \
+    VFWDFEXPORT(WdfDeviceGetDeviceStackIoType), \
+    VFWDFEXPORT(WdfDeviceQueryPropertyEx), \
+    VFWDFEXPORT(WdfDeviceAllocAndQueryPropertyEx), \
+    VFWDFEXPORT(WdfDeviceAssignProperty), \
+    VFWDFEXPORT(WdfDeviceGetSelfIoTarget), \
+    VFWDFEXPORT(WdfDeviceInitAllowSelfIoTarget), \
+    VFWDFEXPORT(WdfDriverCreate), \
+    VFWDFEXPORT(WdfDriverGetRegistryPath), \
+    VFWDFEXPORT(WdfDriverOpenParametersRegistryKey), \
+    VFWDFEXPORT(WdfDriverRetrieveVersionString), \
+    VFWDFEXPORT(WdfDriverIsVersionAvailable), \
+    VFWDFEXPORT(WdfFdoInitOpenRegistryKey), \
+    VFWDFEXPORT(WdfFdoInitQueryProperty), \
+    VFWDFEXPORT(WdfFdoInitAllocAndQueryProperty), \
+    VFWDFEXPORT(WdfFdoInitQueryPropertyEx), \
+    VFWDFEXPORT(WdfFdoInitAllocAndQueryPropertyEx), \
+    VFWDFEXPORT(WdfFdoInitSetFilter), \
+    VFWDFEXPORT(WdfFileObjectGetFileName), \
+    VFWDFEXPORT(WdfFileObjectGetDevice), \
+    VFWDFEXPORT(WdfFileObjectGetInitiatorProcessId), \
+    VFWDFEXPORT(WdfFileObjectGetRelatedFileObject), \
+    VFWDFEXPORT(WdfDeviceInitEnableHidInterface), \
+    VFWDFEXPORT(WdfDeviceHidNotifyPresence), \
+    VFWDFEXPORT(WdfInterruptCreate), \
+    VFWDFEXPORT(WdfInterruptQueueDpcForIsr), \
+    VFWDFEXPORT(WdfInterruptQueueWorkItemForIsr), \
+    VFWDFEXPORT(WdfInterruptSynchronize), \
+    VFWDFEXPORT(WdfInterruptAcquireLock), \
+    VFWDFEXPORT(WdfInterruptReleaseLock), \
+    VFWDFEXPORT(WdfInterruptEnable), \
+    VFWDFEXPORT(WdfInterruptDisable), \
+    VFWDFEXPORT(WdfInterruptGetInfo), \
+    VFWDFEXPORT(WdfInterruptSetPolicy), \
+    VFWDFEXPORT(WdfInterruptSetExtendedPolicy), \
+    VFWDFEXPORT(WdfInterruptGetDevice), \
+    VFWDFEXPORT(WdfInterruptTryToAcquireLock), \
+    VFWDFEXPORT(WdfIoQueueCreate), \
+    VFWDFEXPORT(WdfIoQueueGetState), \
+    VFWDFEXPORT(WdfIoQueueStart), \
+    VFWDFEXPORT(WdfIoQueueStop), \
+    VFWDFEXPORT(WdfIoQueueStopSynchronously), \
+    VFWDFEXPORT(WdfIoQueueGetDevice), \
+    VFWDFEXPORT(WdfIoQueueRetrieveNextRequest), \
+    VFWDFEXPORT(WdfIoQueueRetrieveRequestByFileObject), \
+    VFWDFEXPORT(WdfIoQueueFindRequest), \
+    VFWDFEXPORT(WdfIoQueueRetrieveFoundRequest), \
+    VFWDFEXPORT(WdfIoQueueDrainSynchronously), \
+    VFWDFEXPORT(WdfIoQueueDrain), \
+    VFWDFEXPORT(WdfIoQueuePurgeSynchronously), \
+    VFWDFEXPORT(WdfIoQueuePurge), \
+    VFWDFEXPORT(WdfIoQueueReadyNotify), \
+    VFWDFEXPORT(WdfIoQueueStopAndPurge), \
+    VFWDFEXPORT(WdfIoQueueStopAndPurgeSynchronously), \
+    VFWDFEXPORT(WdfIoTargetCreate), \
+    VFWDFEXPORT(WdfIoTargetOpen), \
+    VFWDFEXPORT(WdfIoTargetCloseForQueryRemove), \
+    VFWDFEXPORT(WdfIoTargetClose), \
+    VFWDFEXPORT(WdfIoTargetStart), \
+    VFWDFEXPORT(WdfIoTargetStop), \
+    VFWDFEXPORT(WdfIoTargetPurge), \
+    VFWDFEXPORT(WdfIoTargetGetState), \
+    VFWDFEXPORT(WdfIoTargetGetDevice), \
+    VFWDFEXPORT(WdfIoTargetWdmGetTargetFileHandle), \
+    VFWDFEXPORT(WdfIoTargetSendReadSynchronously), \
+    VFWDFEXPORT(WdfIoTargetFormatRequestForRead), \
+    VFWDFEXPORT(WdfIoTargetSendWriteSynchronously), \
+    VFWDFEXPORT(WdfIoTargetFormatRequestForWrite), \
+    VFWDFEXPORT(WdfIoTargetSendIoctlSynchronously), \
+    VFWDFEXPORT(WdfIoTargetFormatRequestForIoctl), \
+    VFWDFEXPORT(WdfIoTargetSelfAssignDefaultIoQueue), \
+    VFWDFEXPORT(WdfMemoryCreate), \
+    VFWDFEXPORT(WdfMemoryCreatePreallocated), \
+    VFWDFEXPORT(WdfMemoryGetBuffer), \
+    VFWDFEXPORT(WdfMemoryAssignBuffer), \
+    VFWDFEXPORT(WdfMemoryCopyToBuffer), \
+    VFWDFEXPORT(WdfMemoryCopyFromBuffer), \
+    VFWDFEXPORT(WdfObjectGetTypedContextWorker), \
+    VFWDFEXPORT(WdfObjectAllocateContext), \
+    VFWDFEXPORT(WdfObjectContextGetObject), \
+    VFWDFEXPORT(WdfObjectReferenceActual), \
+    VFWDFEXPORT(WdfObjectDereferenceActual), \
+    VFWDFEXPORT(WdfObjectCreate), \
+    VFWDFEXPORT(WdfObjectDelete), \
+    VFWDFEXPORT(WdfObjectQuery), \
+    VFWDFEXPORT(WdfRegistryOpenKey), \
+    VFWDFEXPORT(WdfRegistryCreateKey), \
+    VFWDFEXPORT(WdfRegistryClose), \
+    VFWDFEXPORT(WdfRegistryWdmGetHandle), \
+    VFWDFEXPORT(WdfRegistryRemoveKey), \
+    VFWDFEXPORT(WdfRegistryRemoveValue), \
+    VFWDFEXPORT(WdfRegistryQueryValue), \
+    VFWDFEXPORT(WdfRegistryQueryMemory), \
+    VFWDFEXPORT(WdfRegistryQueryMultiString), \
+    VFWDFEXPORT(WdfRegistryQueryUnicodeString), \
+    VFWDFEXPORT(WdfRegistryQueryString), \
+    VFWDFEXPORT(WdfRegistryQueryULong), \
+    VFWDFEXPORT(WdfRegistryAssignValue), \
+    VFWDFEXPORT(WdfRegistryAssignMemory), \
+    VFWDFEXPORT(WdfRegistryAssignMultiString), \
+    VFWDFEXPORT(WdfRegistryAssignUnicodeString), \
+    VFWDFEXPORT(WdfRegistryAssignString), \
+    VFWDFEXPORT(WdfRegistryAssignULong), \
+    VFWDFEXPORT(WdfRequestCreate), \
+    VFWDFEXPORT(WdfRequestReuse), \
+    VFWDFEXPORT(WdfRequestChangeTarget), \
+    VFWDFEXPORT(WdfRequestFormatRequestUsingCurrentType), \
+    VFWDFEXPORT(WdfRequestSend), \
+    VFWDFEXPORT(WdfRequestGetStatus), \
+    VFWDFEXPORT(WdfRequestMarkCancelable), \
+    VFWDFEXPORT(WdfRequestMarkCancelableEx), \
+    VFWDFEXPORT(WdfRequestUnmarkCancelable), \
+    VFWDFEXPORT(WdfRequestIsCanceled), \
+    VFWDFEXPORT(WdfRequestCancelSentRequest), \
+    VFWDFEXPORT(WdfRequestIsFrom32BitProcess), \
+    VFWDFEXPORT(WdfRequestSetCompletionRoutine), \
+    VFWDFEXPORT(WdfRequestGetCompletionParams), \
+    VFWDFEXPORT(WdfRequestAllocateTimer), \
+    VFWDFEXPORT(WdfRequestComplete), \
+    VFWDFEXPORT(WdfRequestCompleteWithInformation), \
+    VFWDFEXPORT(WdfRequestGetParameters), \
+    VFWDFEXPORT(WdfRequestRetrieveInputMemory), \
+    VFWDFEXPORT(WdfRequestRetrieveOutputMemory), \
+    VFWDFEXPORT(WdfRequestRetrieveInputBuffer), \
+    VFWDFEXPORT(WdfRequestRetrieveOutputBuffer), \
+    VFWDFEXPORT(WdfRequestSetInformation), \
+    VFWDFEXPORT(WdfRequestGetInformation), \
+    VFWDFEXPORT(WdfRequestGetFileObject), \
+    VFWDFEXPORT(WdfRequestGetRequestorMode), \
+    VFWDFEXPORT(WdfRequestForwardToIoQueue), \
+    VFWDFEXPORT(WdfRequestGetIoQueue), \
+    VFWDFEXPORT(WdfRequestRequeue), \
+    VFWDFEXPORT(WdfRequestStopAcknowledge), \
+    VFWDFEXPORT(WdfRequestImpersonate), \
+    VFWDFEXPORT(WdfRequestGetRequestorProcessId), \
+    VFWDFEXPORT(WdfRequestIsFromUserModeDriver), \
+    VFWDFEXPORT(WdfRequestSetUserModeDriverInitiatedIo), \
+    VFWDFEXPORT(WdfRequestGetUserModeDriverInitiatedIo), \
+    VFWDFEXPORT(WdfRequestSetActivityId), \
+    VFWDFEXPORT(WdfRequestRetrieveActivityId), \
+    VFWDFEXPORT(WdfRequestGetEffectiveIoType), \
+    VFWDFEXPORT(WdfCmResourceListGetCount), \
+    VFWDFEXPORT(WdfCmResourceListGetDescriptor), \
+    VFWDFEXPORT(WdfStringCreate), \
+    VFWDFEXPORT(WdfStringGetUnicodeString), \
+    VFWDFEXPORT(WdfObjectAcquireLock), \
+    VFWDFEXPORT(WdfObjectReleaseLock), \
+    VFWDFEXPORT(WdfWaitLockCreate), \
+    VFWDFEXPORT(WdfWaitLockAcquire), \
+    VFWDFEXPORT(WdfWaitLockRelease), \
+    VFWDFEXPORT(WdfSpinLockCreate), \
+    VFWDFEXPORT(WdfSpinLockAcquire), \
+    VFWDFEXPORT(WdfSpinLockRelease), \
+    VFWDFEXPORT(WdfTimerCreate), \
+    VFWDFEXPORT(WdfTimerStart), \
+    VFWDFEXPORT(WdfTimerStop), \
+    VFWDFEXPORT(WdfTimerGetParentObject), \
+    VFWDFEXPORT(WdfUsbTargetDeviceCreate), \
+    VFWDFEXPORT(WdfUsbTargetDeviceCreateWithParameters), \
+    VFWDFEXPORT(WdfUsbTargetDeviceRetrieveInformation), \
+    VFWDFEXPORT(WdfUsbTargetDeviceGetDeviceDescriptor), \
+    VFWDFEXPORT(WdfUsbTargetDeviceRetrieveConfigDescriptor), \
+    VFWDFEXPORT(WdfUsbTargetDeviceQueryString), \
+    VFWDFEXPORT(WdfUsbTargetDeviceAllocAndQueryString), \
+    VFWDFEXPORT(WdfUsbTargetDeviceFormatRequestForString), \
+    VFWDFEXPORT(WdfUsbTargetDeviceGetNumInterfaces), \
+    VFWDFEXPORT(WdfUsbTargetDeviceSelectConfig), \
+    VFWDFEXPORT(WdfUsbTargetDeviceSendControlTransferSynchronously), \
+    VFWDFEXPORT(WdfUsbTargetDeviceFormatRequestForControlTransfer), \
+    VFWDFEXPORT(WdfUsbTargetDeviceResetPortSynchronously), \
+    VFWDFEXPORT(WdfUsbTargetDeviceQueryUsbCapability), \
+    VFWDFEXPORT(WdfUsbTargetPipeGetInformation), \
+    VFWDFEXPORT(WdfUsbTargetPipeIsInEndpoint), \
+    VFWDFEXPORT(WdfUsbTargetPipeIsOutEndpoint), \
+    VFWDFEXPORT(WdfUsbTargetPipeGetType), \
+    VFWDFEXPORT(WdfUsbTargetPipeSetNoMaximumPacketSizeCheck), \
+    VFWDFEXPORT(WdfUsbTargetPipeWriteSynchronously), \
+    VFWDFEXPORT(WdfUsbTargetPipeFormatRequestForWrite), \
+    VFWDFEXPORT(WdfUsbTargetPipeReadSynchronously), \
+    VFWDFEXPORT(WdfUsbTargetPipeFormatRequestForRead), \
+    VFWDFEXPORT(WdfUsbTargetPipeConfigContinuousReader), \
+    VFWDFEXPORT(WdfUsbTargetPipeAbortSynchronously), \
+    VFWDFEXPORT(WdfUsbTargetPipeFormatRequestForAbort), \
+    VFWDFEXPORT(WdfUsbTargetPipeResetSynchronously), \
+    VFWDFEXPORT(WdfUsbTargetPipeFormatRequestForReset), \
+    VFWDFEXPORT(WdfUsbInterfaceGetInterfaceNumber), \
+    VFWDFEXPORT(WdfUsbInterfaceGetNumEndpoints), \
+    VFWDFEXPORT(WdfUsbInterfaceGetDescriptor), \
+    VFWDFEXPORT(WdfUsbInterfaceGetNumSettings), \
+    VFWDFEXPORT(WdfUsbInterfaceSelectSetting), \
+    VFWDFEXPORT(WdfUsbInterfaceGetEndpointInformation), \
+    VFWDFEXPORT(WdfUsbTargetDeviceGetInterface), \
+    VFWDFEXPORT(WdfUsbInterfaceGetConfiguredSettingIndex), \
+    VFWDFEXPORT(WdfUsbInterfaceGetNumConfiguredPipes), \
+    VFWDFEXPORT(WdfUsbInterfaceGetConfiguredPipe), \
+    VFWDFEXPORT(WdfVerifierDbgBreakPoint), \
+    VFWDFEXPORT(WdfVerifierKeBugCheck), \
+    VFWDFEXPORT(WdfGetTriageInfo), \
+    VFWDFEXPORT(WdfWorkItemCreate), \
+    VFWDFEXPORT(WdfWorkItemEnqueue), \
+    VFWDFEXPORT(WdfWorkItemGetParentObject), \
+    VFWDFEXPORT(WdfWorkItemFlush), \
+    )
+#endif   // #pragma alloc_text
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfCollectionCreate)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES CollectionAttributes,
+    _Out_
+    WDFCOLLECTION* Collection
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFCOLLECTIONCREATE) WdfVersion.Functions.pfnWdfCollectionCreate)(DriverGlobals, CollectionAttributes, Collection);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+ULONG
+VFWDFEXPORT(WdfCollectionGetCount)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFCOLLECTION Collection
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFCOLLECTIONGETCOUNT) WdfVersion.Functions.pfnWdfCollectionGetCount)(DriverGlobals, Collection);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfCollectionAdd)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFCOLLECTION Collection,
+    _In_
+    WDFOBJECT Object
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFCOLLECTIONADD) WdfVersion.Functions.pfnWdfCollectionAdd)(DriverGlobals, Collection, Object);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfCollectionRemove)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFCOLLECTION Collection,
+    _In_
+    WDFOBJECT Item
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFCOLLECTIONREMOVE) WdfVersion.Functions.pfnWdfCollectionRemove)(DriverGlobals, Collection, Item);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfCollectionRemoveItem)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFCOLLECTION Collection,
+    _In_
+    ULONG Index
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFCOLLECTIONREMOVEITEM) WdfVersion.Functions.pfnWdfCollectionRemoveItem)(DriverGlobals, Collection, Index);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+WDFOBJECT
+VFWDFEXPORT(WdfCollectionGetItem)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFCOLLECTION Collection,
+    _In_
+    ULONG Index
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFCOLLECTIONGETITEM) WdfVersion.Functions.pfnWdfCollectionGetItem)(DriverGlobals, Collection, Index);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+WDFOBJECT
+VFWDFEXPORT(WdfCollectionGetFirstItem)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFCOLLECTION Collection
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFCOLLECTIONGETFIRSTITEM) WdfVersion.Functions.pfnWdfCollectionGetFirstItem)(DriverGlobals, Collection);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+WDFOBJECT
+VFWDFEXPORT(WdfCollectionGetLastItem)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFCOLLECTION Collection
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFCOLLECTIONGETLASTITEM) WdfVersion.Functions.pfnWdfCollectionGetLastItem)(DriverGlobals, Collection);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+PWDFCXDEVICE_INIT
+VFWDFEXPORT(WdfCxDeviceInitAllocate)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    PWDFDEVICE_INIT DeviceInit
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFCXDEVICEINITALLOCATE) WdfVersion.Functions.pfnWdfCxDeviceInitAllocate)(DriverGlobals, DeviceInit);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfCxDeviceInitSetRequestAttributes)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    PWDFCXDEVICE_INIT CxDeviceInit,
+    _In_
+    PWDF_OBJECT_ATTRIBUTES RequestAttributes
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFCXDEVICEINITSETREQUESTATTRIBUTES) WdfVersion.Functions.pfnWdfCxDeviceInitSetRequestAttributes)(DriverGlobals, CxDeviceInit, RequestAttributes);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfCxDeviceInitSetFileObjectConfig)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    PWDFCXDEVICE_INIT CxDeviceInit,
+    _In_
+    PWDFCX_FILEOBJECT_CONFIG CxFileObjectConfig,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES FileObjectAttributes
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFCXDEVICEINITSETFILEOBJECTCONFIG) WdfVersion.Functions.pfnWdfCxDeviceInitSetFileObjectConfig)(DriverGlobals, CxDeviceInit, CxFileObjectConfig, FileObjectAttributes);
+}
+
+WDFAPI
+VOID
+VFWDFEXPORT(WdfCxVerifierKeBugCheck)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_opt_
+    WDFOBJECT Object,
+    _In_
+    ULONG BugCheckCode,
+    _In_
+    ULONG_PTR BugCheckParameter1,
+    _In_
+    ULONG_PTR BugCheckParameter2,
+    _In_
+    ULONG_PTR BugCheckParameter3,
+    _In_
+    ULONG_PTR BugCheckParameter4
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFCXVERIFIERKEBUGCHECK) WdfVersion.Functions.pfnWdfCxVerifierKeBugCheck)(DriverGlobals, Object, BugCheckCode, BugCheckParameter1, BugCheckParameter2, BugCheckParameter3, BugCheckParameter4);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfDeviceGetDeviceState)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _Out_
+    PWDF_DEVICE_STATE DeviceState
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFDEVICEGETDEVICESTATE) WdfVersion.Functions.pfnWdfDeviceGetDeviceState)(DriverGlobals, Device, DeviceState);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfDeviceSetDeviceState)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    PWDF_DEVICE_STATE DeviceState
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFDEVICESETDEVICESTATE) WdfVersion.Functions.pfnWdfDeviceSetDeviceState)(DriverGlobals, Device, DeviceState);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfDeviceWdmDispatchIrp)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    PIRP Irp,
+    _In_
+    WDFCONTEXT DispatchContext
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDEVICEWDMDISPATCHIRP) WdfVersion.Functions.pfnWdfDeviceWdmDispatchIrp)(DriverGlobals, Device, Irp, DispatchContext);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfDeviceWdmDispatchIrpToIoQueue)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    PIRP Irp,
+    _In_
+    WDFQUEUE Queue,
+    _In_
+    ULONG Flags
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDEVICEWDMDISPATCHIRPTOIOQUEUE) WdfVersion.Functions.pfnWdfDeviceWdmDispatchIrpToIoQueue)(DriverGlobals, Device, Irp, Queue, Flags);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+WDFDRIVER
+VFWDFEXPORT(WdfDeviceGetDriver)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDEVICEGETDRIVER) WdfVersion.Functions.pfnWdfDeviceGetDriver)(DriverGlobals, Device);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+WDFIOTARGET
+VFWDFEXPORT(WdfDeviceGetIoTarget)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDEVICEGETIOTARGET) WdfVersion.Functions.pfnWdfDeviceGetIoTarget)(DriverGlobals, Device);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfDeviceAssignS0IdleSettings)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    PWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS Settings
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDEVICEASSIGNS0IDLESETTINGS) WdfVersion.Functions.pfnWdfDeviceAssignS0IdleSettings)(DriverGlobals, Device, Settings);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfDeviceAssignSxWakeSettings)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    PWDF_DEVICE_POWER_POLICY_WAKE_SETTINGS Settings
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDEVICEASSIGNSXWAKESETTINGS) WdfVersion.Functions.pfnWdfDeviceAssignSxWakeSettings)(DriverGlobals, Device, Settings);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfDeviceOpenRegistryKey)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    ULONG DeviceInstanceKeyType,
+    _In_
+    ACCESS_MASK DesiredAccess,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES KeyAttributes,
+    _Out_
+    WDFKEY* Key
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDEVICEOPENREGISTRYKEY) WdfVersion.Functions.pfnWdfDeviceOpenRegistryKey)(DriverGlobals, Device, DeviceInstanceKeyType, DesiredAccess, KeyAttributes, Key);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfDeviceOpenDevicemapKey)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    PCUNICODE_STRING KeyName,
+    _In_
+    ACCESS_MASK DesiredAccess,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES KeyAttributes,
+    _Out_
+    WDFKEY* Key
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDEVICEOPENDEVICEMAPKEY) WdfVersion.Functions.pfnWdfDeviceOpenDevicemapKey)(DriverGlobals, Device, KeyName, DesiredAccess, KeyAttributes, Key);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfDeviceInitSetPnpPowerEventCallbacks)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    PWDFDEVICE_INIT DeviceInit,
+    _In_
+    PWDF_PNPPOWER_EVENT_CALLBACKS PnpPowerEventCallbacks
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFDEVICEINITSETPNPPOWEREVENTCALLBACKS) WdfVersion.Functions.pfnWdfDeviceInitSetPnpPowerEventCallbacks)(DriverGlobals, DeviceInit, PnpPowerEventCallbacks);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfDeviceInitSetPowerPolicyEventCallbacks)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    PWDFDEVICE_INIT DeviceInit,
+    _In_
+    PWDF_POWER_POLICY_EVENT_CALLBACKS PowerPolicyEventCallbacks
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFDEVICEINITSETPOWERPOLICYEVENTCALLBACKS) WdfVersion.Functions.pfnWdfDeviceInitSetPowerPolicyEventCallbacks)(DriverGlobals, DeviceInit, PowerPolicyEventCallbacks);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfDeviceInitSetPowerPolicyOwnership)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    PWDFDEVICE_INIT DeviceInit,
+    _In_
+    BOOLEAN IsPowerPolicyOwner
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFDEVICEINITSETPOWERPOLICYOWNERSHIP) WdfVersion.Functions.pfnWdfDeviceInitSetPowerPolicyOwnership)(DriverGlobals, DeviceInit, IsPowerPolicyOwner);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfDeviceInitSetIoType)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    PWDFDEVICE_INIT DeviceInit,
+    _In_
+    WDF_DEVICE_IO_TYPE IoType
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFDEVICEINITSETIOTYPE) WdfVersion.Functions.pfnWdfDeviceInitSetIoType)(DriverGlobals, DeviceInit, IoType);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfDeviceInitSetFileObjectConfig)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    PWDFDEVICE_INIT DeviceInit,
+    _In_
+    PWDF_FILEOBJECT_CONFIG FileObjectConfig,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES FileObjectAttributes
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFDEVICEINITSETFILEOBJECTCONFIG) WdfVersion.Functions.pfnWdfDeviceInitSetFileObjectConfig)(DriverGlobals, DeviceInit, FileObjectConfig, FileObjectAttributes);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfDeviceInitSetRequestAttributes)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    PWDFDEVICE_INIT DeviceInit,
+    _In_
+    PWDF_OBJECT_ATTRIBUTES RequestAttributes
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFDEVICEINITSETREQUESTATTRIBUTES) WdfVersion.Functions.pfnWdfDeviceInitSetRequestAttributes)(DriverGlobals, DeviceInit, RequestAttributes);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfDeviceCreate)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _Inout_
+    PWDFDEVICE_INIT* DeviceInit,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES DeviceAttributes,
+    _Out_
+    WDFDEVICE* Device
+    )
+{
+    VF_HOOK_PROCESS_INFO hookInfo;
+    NTSTATUS status;
+
+    PAGED_CODE_LOCKED();
+    RtlZeroMemory(&hookInfo, sizeof(VF_HOOK_PROCESS_INFO));
+
+    status = AddEventHooksWdfDeviceCreate(
+        &hookInfo,
+        DriverGlobals,
+        DeviceInit,
+        DeviceAttributes,
+        Device);
+
+    UNREFERENCED_PARAMETER(status);
+
+    if (hookInfo.DonotCallKmdfLib) {
+        return hookInfo.DdiCallStatus;
+    }
+
+    return ((PFN_WDFDEVICECREATE) WdfVersion.Functions.pfnWdfDeviceCreate)(DriverGlobals, DeviceInit, DeviceAttributes, Device);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfDeviceSetStaticStopRemove)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    BOOLEAN Stoppable
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFDEVICESETSTATICSTOPREMOVE) WdfVersion.Functions.pfnWdfDeviceSetStaticStopRemove)(DriverGlobals, Device, Stoppable);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfDeviceCreateDeviceInterface)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    CONST GUID* InterfaceClassGUID,
+    _In_opt_
+    PCUNICODE_STRING ReferenceString
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDEVICECREATEDEVICEINTERFACE) WdfVersion.Functions.pfnWdfDeviceCreateDeviceInterface)(DriverGlobals, Device, InterfaceClassGUID, ReferenceString);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfDeviceSetDeviceInterfaceState)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    CONST GUID* InterfaceClassGUID,
+    _In_opt_
+    PCUNICODE_STRING ReferenceString,
+    _In_
+    BOOLEAN IsInterfaceEnabled
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFDEVICESETDEVICEINTERFACESTATE) WdfVersion.Functions.pfnWdfDeviceSetDeviceInterfaceState)(DriverGlobals, Device, InterfaceClassGUID, ReferenceString, IsInterfaceEnabled);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfDeviceRetrieveDeviceInterfaceString)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    CONST GUID* InterfaceClassGUID,
+    _In_opt_
+    PCUNICODE_STRING ReferenceString,
+    _In_
+    WDFSTRING String
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDEVICERETRIEVEDEVICEINTERFACESTRING) WdfVersion.Functions.pfnWdfDeviceRetrieveDeviceInterfaceString)(DriverGlobals, Device, InterfaceClassGUID, ReferenceString, String);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfDeviceCreateSymbolicLink)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    PCUNICODE_STRING SymbolicLinkName
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDEVICECREATESYMBOLICLINK) WdfVersion.Functions.pfnWdfDeviceCreateSymbolicLink)(DriverGlobals, Device, SymbolicLinkName);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfDeviceQueryProperty)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    DEVICE_REGISTRY_PROPERTY DeviceProperty,
+    _In_
+    ULONG BufferLength,
+    _Out_writes_bytes_all_(BufferLength)
+    PVOID PropertyBuffer,
+    _Out_
+    PULONG ResultLength
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDEVICEQUERYPROPERTY) WdfVersion.Functions.pfnWdfDeviceQueryProperty)(DriverGlobals, Device, DeviceProperty, BufferLength, PropertyBuffer, ResultLength);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfDeviceAllocAndQueryProperty)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    DEVICE_REGISTRY_PROPERTY DeviceProperty,
+    _In_
+    _Strict_type_match_
+    POOL_TYPE PoolType,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES PropertyMemoryAttributes,
+    _Out_
+    WDFMEMORY* PropertyMemory
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDEVICEALLOCANDQUERYPROPERTY) WdfVersion.Functions.pfnWdfDeviceAllocAndQueryProperty)(DriverGlobals, Device, DeviceProperty, PoolType, PropertyMemoryAttributes, PropertyMemory);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfDeviceSetPnpCapabilities)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    PWDF_DEVICE_PNP_CAPABILITIES PnpCapabilities
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFDEVICESETPNPCAPABILITIES) WdfVersion.Functions.pfnWdfDeviceSetPnpCapabilities)(DriverGlobals, Device, PnpCapabilities);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfDeviceSetPowerCapabilities)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    PWDF_DEVICE_POWER_CAPABILITIES PowerCapabilities
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFDEVICESETPOWERCAPABILITIES) WdfVersion.Functions.pfnWdfDeviceSetPowerCapabilities)(DriverGlobals, Device, PowerCapabilities);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfDeviceSetFailed)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    WDF_DEVICE_FAILED_ACTION FailedAction
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFDEVICESETFAILED) WdfVersion.Functions.pfnWdfDeviceSetFailed)(DriverGlobals, Device, FailedAction);
+}
+
+_Must_inspect_result_
+_When_(WaitForD0 == 0, _IRQL_requires_max_(DISPATCH_LEVEL))
+_When_(WaitForD0 != 0, _IRQL_requires_max_(PASSIVE_LEVEL))
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfDeviceStopIdleNoTrack)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    BOOLEAN WaitForD0
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDEVICESTOPIDLENOTRACK) WdfVersion.Functions.pfnWdfDeviceStopIdleNoTrack)(DriverGlobals, Device, WaitForD0);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfDeviceResumeIdleNoTrack)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFDEVICERESUMEIDLENOTRACK) WdfVersion.Functions.pfnWdfDeviceResumeIdleNoTrack)(DriverGlobals, Device);
+}
+
+_Must_inspect_result_
+_When_(WaitForD0 == 0, _IRQL_requires_max_(DISPATCH_LEVEL))
+_When_(WaitForD0 != 0, _IRQL_requires_max_(PASSIVE_LEVEL))
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfDeviceStopIdleActual)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    BOOLEAN WaitForD0,
+    _In_opt_
+    PVOID Tag,
+    _In_
+    LONG Line,
+    _In_z_
+    PCHAR File
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDEVICESTOPIDLEACTUAL) WdfVersion.Functions.pfnWdfDeviceStopIdleActual)(DriverGlobals, Device, WaitForD0, Tag, Line, File);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfDeviceResumeIdleActual)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_opt_
+    PVOID Tag,
+    _In_
+    LONG Line,
+    _In_z_
+    PCHAR File
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFDEVICERESUMEIDLEACTUAL) WdfVersion.Functions.pfnWdfDeviceResumeIdleActual)(DriverGlobals, Device, Tag, Line, File);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+WDFFILEOBJECT
+VFWDFEXPORT(WdfDeviceGetFileObject)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    PFILE_OBJECT FileObject
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDEVICEGETFILEOBJECT) WdfVersion.Functions.pfnWdfDeviceGetFileObject)(DriverGlobals, Device, FileObject);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+WDFQUEUE
+VFWDFEXPORT(WdfDeviceGetDefaultQueue)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDEVICEGETDEFAULTQUEUE) WdfVersion.Functions.pfnWdfDeviceGetDefaultQueue)(DriverGlobals, Device);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfDeviceConfigureRequestDispatching)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    WDFQUEUE Queue,
+    _In_
+    _Strict_type_match_
+    WDF_REQUEST_TYPE RequestType
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDEVICECONFIGUREREQUESTDISPATCHING) WdfVersion.Functions.pfnWdfDeviceConfigureRequestDispatching)(DriverGlobals, Device, Queue, RequestType);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfDeviceConfigureWdmIrpDispatchCallback)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_opt_
+    WDFDRIVER Driver,
+    _In_
+    UCHAR MajorFunction,
+    _In_
+    PFN_WDFDEVICE_WDM_IRP_DISPATCH EvtDeviceWdmIrpDisptach,
+    _In_opt_
+    WDFCONTEXT DriverContext
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDEVICECONFIGUREWDMIRPDISPATCHCALLBACK) WdfVersion.Functions.pfnWdfDeviceConfigureWdmIrpDispatchCallback)(DriverGlobals, Device, Driver, MajorFunction, EvtDeviceWdmIrpDisptach, DriverContext);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+POWER_ACTION
+VFWDFEXPORT(WdfDeviceGetSystemPowerAction)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDEVICEGETSYSTEMPOWERACTION) WdfVersion.Functions.pfnWdfDeviceGetSystemPowerAction)(DriverGlobals, Device);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfDeviceInitSetReleaseHardwareOrderOnFailure)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    PWDFDEVICE_INIT DeviceInit,
+    _In_
+    WDF_RELEASE_HARDWARE_ORDER_ON_FAILURE ReleaseHardwareOrderOnFailure
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFDEVICEINITSETRELEASEHARDWAREORDERONFAILURE) WdfVersion.Functions.pfnWdfDeviceInitSetReleaseHardwareOrderOnFailure)(DriverGlobals, DeviceInit, ReleaseHardwareOrderOnFailure);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfDeviceInitSetIoTypeEx)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    PWDFDEVICE_INIT DeviceInit,
+    _In_
+    PWDF_IO_TYPE_CONFIG IoTypeConfig
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFDEVICEINITSETIOTYPEEX) WdfVersion.Functions.pfnWdfDeviceInitSetIoTypeEx)(DriverGlobals, DeviceInit, IoTypeConfig);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfDevicePostEvent)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    REFGUID EventGuid,
+    _In_
+    WDF_EVENT_TYPE WdfEventType,
+    _In_reads_bytes_(DataSizeCb)
+    BYTE* Data,
+    _In_
+    ULONG DataSizeCb
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDEVICEPOSTEVENT) WdfVersion.Functions.pfnWdfDevicePostEvent)(DriverGlobals, Device, EventGuid, WdfEventType, Data, DataSizeCb);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfDeviceMapIoSpace)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    PHYSICAL_ADDRESS PhysicalAddress,
+    _In_
+    SIZE_T NumberOfBytes,
+    _In_
+    MEMORY_CACHING_TYPE CacheType,
+    _Out_
+    PVOID* PseudoBaseAddress
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDEVICEMAPIOSPACE) WdfVersion.Functions.pfnWdfDeviceMapIoSpace)(DriverGlobals, Device, PhysicalAddress, NumberOfBytes, CacheType, PseudoBaseAddress);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfDeviceUnmapIoSpace)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    PVOID PseudoBaseAddress,
+    _In_
+    SIZE_T NumberOfBytes
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFDEVICEUNMAPIOSPACE) WdfVersion.Functions.pfnWdfDeviceUnmapIoSpace)(DriverGlobals, Device, PseudoBaseAddress, NumberOfBytes);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+PVOID
+VFWDFEXPORT(WdfDeviceGetHardwareRegisterMappedAddress)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    PVOID PseudoBaseAddress
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDEVICEGETHARDWAREREGISTERMAPPEDADDRESS) WdfVersion.Functions.pfnWdfDeviceGetHardwareRegisterMappedAddress)(DriverGlobals, Device, PseudoBaseAddress);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+SIZE_T
+VFWDFEXPORT(WdfDeviceReadFromHardware)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    WDF_DEVICE_HWACCESS_TARGET_TYPE Type,
+    _In_
+    WDF_DEVICE_HWACCESS_TARGET_SIZE Size,
+    _In_
+    PVOID TargetAddress,
+    _Out_writes_all_opt_(Count)
+    PVOID Buffer,
+    _In_opt_
+    ULONG Count
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDEVICEREADFROMHARDWARE) WdfVersion.Functions.pfnWdfDeviceReadFromHardware)(DriverGlobals, Device, Type, Size, TargetAddress, Buffer, Count);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfDeviceWriteToHardware)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    WDF_DEVICE_HWACCESS_TARGET_TYPE Type,
+    _In_
+    WDF_DEVICE_HWACCESS_TARGET_SIZE Size,
+    _In_
+    PVOID TargetAddress,
+    _In_
+    SIZE_T Value,
+    _In_reads_opt_(Count)
+    PVOID Buffer,
+    _In_opt_
+    ULONG Count
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFDEVICEWRITETOHARDWARE) WdfVersion.Functions.pfnWdfDeviceWriteToHardware)(DriverGlobals, Device, Type, Size, TargetAddress, Value, Buffer, Count);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfDeviceAssignInterfaceProperty)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    PWDF_DEVICE_INTERFACE_PROPERTY_DATA PropertyData,
+    _In_
+    DEVPROPTYPE Type,
+    _In_
+    ULONG BufferLength,
+    _In_reads_bytes_opt_(BufferLength)
+    PVOID PropertyBuffer
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDEVICEASSIGNINTERFACEPROPERTY) WdfVersion.Functions.pfnWdfDeviceAssignInterfaceProperty)(DriverGlobals, Device, PropertyData, Type, BufferLength, PropertyBuffer);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfDeviceAllocAndQueryInterfaceProperty)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    PWDF_DEVICE_INTERFACE_PROPERTY_DATA PropertyData,
+    _In_
+    POOL_TYPE PoolType,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES PropertyMemoryAttributes,
+    _Out_
+    WDFMEMORY* PropertyMemory,
+    _Out_
+    PDEVPROPTYPE Type
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDEVICEALLOCANDQUERYINTERFACEPROPERTY) WdfVersion.Functions.pfnWdfDeviceAllocAndQueryInterfaceProperty)(DriverGlobals, Device, PropertyData, PoolType, PropertyMemoryAttributes, PropertyMemory, Type);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfDeviceQueryInterfaceProperty)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    PWDF_DEVICE_INTERFACE_PROPERTY_DATA PropertyData,
+    _In_
+    ULONG BufferLength,
+    _Out_writes_bytes_opt_(BufferLength)
+    PVOID PropertyBuffer,
+    _Out_
+    PULONG ResultLength,
+    _Out_
+    PDEVPROPTYPE Type
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDEVICEQUERYINTERFACEPROPERTY) WdfVersion.Functions.pfnWdfDeviceQueryInterfaceProperty)(DriverGlobals, Device, PropertyData, BufferLength, PropertyBuffer, ResultLength, Type);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfDeviceGetDeviceStackIoType)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _Out_
+    WDF_DEVICE_IO_TYPE* ReadWriteIoType,
+    _Out_
+    WDF_DEVICE_IO_TYPE* IoControlIoType
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFDEVICEGETDEVICESTACKIOTYPE) WdfVersion.Functions.pfnWdfDeviceGetDeviceStackIoType)(DriverGlobals, Device, ReadWriteIoType, IoControlIoType);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(APC_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfDeviceQueryPropertyEx)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    PWDF_DEVICE_PROPERTY_DATA DeviceProperty,
+    _In_
+    ULONG BufferLength,
+    _Out_
+    PVOID PropertyBuffer,
+    _Out_
+    PULONG RequiredSize,
+    _Out_
+    PDEVPROPTYPE Type
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDEVICEQUERYPROPERTYEX) WdfVersion.Functions.pfnWdfDeviceQueryPropertyEx)(DriverGlobals, Device, DeviceProperty, BufferLength, PropertyBuffer, RequiredSize, Type);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(APC_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfDeviceAllocAndQueryPropertyEx)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    PWDF_DEVICE_PROPERTY_DATA DeviceProperty,
+    _In_
+    _Strict_type_match_
+    POOL_TYPE PoolType,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES PropertyMemoryAttributes,
+    _Out_
+    WDFMEMORY* PropertyMemory,
+    _Out_
+    PDEVPROPTYPE Type
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDEVICEALLOCANDQUERYPROPERTYEX) WdfVersion.Functions.pfnWdfDeviceAllocAndQueryPropertyEx)(DriverGlobals, Device, DeviceProperty, PoolType, PropertyMemoryAttributes, PropertyMemory, Type);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(APC_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfDeviceAssignProperty)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    PWDF_DEVICE_PROPERTY_DATA DeviceProperty,
+    _In_
+    DEVPROPTYPE Type,
+    _In_
+    ULONG Size,
+    _In_opt_
+    PVOID Data
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDEVICEASSIGNPROPERTY) WdfVersion.Functions.pfnWdfDeviceAssignProperty)(DriverGlobals, Device, DeviceProperty, Type, Size, Data);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+WDFIOTARGET
+VFWDFEXPORT(WdfDeviceGetSelfIoTarget)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDEVICEGETSELFIOTARGET) WdfVersion.Functions.pfnWdfDeviceGetSelfIoTarget)(DriverGlobals, Device);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfDeviceInitAllowSelfIoTarget)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    PWDFDEVICE_INIT DeviceInit
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFDEVICEINITALLOWSELFIOTARGET) WdfVersion.Functions.pfnWdfDeviceInitAllowSelfIoTarget)(DriverGlobals, DeviceInit);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfDriverCreate)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    PDRIVER_OBJECT DriverObject,
+    _In_
+    PCUNICODE_STRING RegistryPath,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES DriverAttributes,
+    _In_
+    PWDF_DRIVER_CONFIG DriverConfig,
+    _Out_opt_
+    WDFDRIVER* Driver
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDRIVERCREATE) WdfVersion.Functions.pfnWdfDriverCreate)(DriverGlobals, DriverObject, RegistryPath, DriverAttributes, DriverConfig, Driver);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+PWSTR
+VFWDFEXPORT(WdfDriverGetRegistryPath)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDRIVER Driver
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDRIVERGETREGISTRYPATH) WdfVersion.Functions.pfnWdfDriverGetRegistryPath)(DriverGlobals, Driver);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfDriverOpenParametersRegistryKey)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDRIVER Driver,
+    _In_
+    ACCESS_MASK DesiredAccess,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES KeyAttributes,
+    _Out_
+    WDFKEY* Key
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDRIVEROPENPARAMETERSREGISTRYKEY) WdfVersion.Functions.pfnWdfDriverOpenParametersRegistryKey)(DriverGlobals, Driver, DesiredAccess, KeyAttributes, Key);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfDriverRetrieveVersionString)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDRIVER Driver,
+    _In_
+    WDFSTRING String
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDRIVERRETRIEVEVERSIONSTRING) WdfVersion.Functions.pfnWdfDriverRetrieveVersionString)(DriverGlobals, Driver, String);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+BOOLEAN
+VFWDFEXPORT(WdfDriverIsVersionAvailable)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDRIVER Driver,
+    _In_
+    PWDF_DRIVER_VERSION_AVAILABLE_PARAMS VersionAvailableParams
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDRIVERISVERSIONAVAILABLE) WdfVersion.Functions.pfnWdfDriverIsVersionAvailable)(DriverGlobals, Driver, VersionAvailableParams);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfFdoInitOpenRegistryKey)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    PWDFDEVICE_INIT DeviceInit,
+    _In_
+    ULONG DeviceInstanceKeyType,
+    _In_
+    ACCESS_MASK DesiredAccess,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES KeyAttributes,
+    _Out_
+    WDFKEY* Key
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFFDOINITOPENREGISTRYKEY) WdfVersion.Functions.pfnWdfFdoInitOpenRegistryKey)(DriverGlobals, DeviceInit, DeviceInstanceKeyType, DesiredAccess, KeyAttributes, Key);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfFdoInitQueryProperty)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    PWDFDEVICE_INIT DeviceInit,
+    _In_
+    DEVICE_REGISTRY_PROPERTY DeviceProperty,
+    _In_
+    ULONG BufferLength,
+    _Out_writes_bytes_all_opt_(BufferLength)
+    PVOID PropertyBuffer,
+    _Out_
+    PULONG ResultLength
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFFDOINITQUERYPROPERTY) WdfVersion.Functions.pfnWdfFdoInitQueryProperty)(DriverGlobals, DeviceInit, DeviceProperty, BufferLength, PropertyBuffer, ResultLength);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfFdoInitAllocAndQueryProperty)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    PWDFDEVICE_INIT DeviceInit,
+    _In_
+    DEVICE_REGISTRY_PROPERTY DeviceProperty,
+    _In_
+    _Strict_type_match_
+    POOL_TYPE PoolType,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES PropertyMemoryAttributes,
+    _Out_
+    WDFMEMORY* PropertyMemory
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFFDOINITALLOCANDQUERYPROPERTY) WdfVersion.Functions.pfnWdfFdoInitAllocAndQueryProperty)(DriverGlobals, DeviceInit, DeviceProperty, PoolType, PropertyMemoryAttributes, PropertyMemory);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfFdoInitQueryPropertyEx)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    PWDFDEVICE_INIT DeviceInit,
+    _In_
+    PWDF_DEVICE_PROPERTY_DATA DeviceProperty,
+    _In_
+    ULONG BufferLength,
+    _Out_
+    PVOID PropertyBuffer,
+    _Out_
+    PULONG ResultLength,
+    _Out_
+    PDEVPROPTYPE Type
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFFDOINITQUERYPROPERTYEX) WdfVersion.Functions.pfnWdfFdoInitQueryPropertyEx)(DriverGlobals, DeviceInit, DeviceProperty, BufferLength, PropertyBuffer, ResultLength, Type);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfFdoInitAllocAndQueryPropertyEx)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    PWDFDEVICE_INIT DeviceInit,
+    _In_
+    PWDF_DEVICE_PROPERTY_DATA DeviceProperty,
+    _In_
+    _Strict_type_match_
+    POOL_TYPE PoolType,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES PropertyMemoryAttributes,
+    _Out_
+    WDFMEMORY* PropertyMemory,
+    _Out_
+    PDEVPROPTYPE Type
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFFDOINITALLOCANDQUERYPROPERTYEX) WdfVersion.Functions.pfnWdfFdoInitAllocAndQueryPropertyEx)(DriverGlobals, DeviceInit, DeviceProperty, PoolType, PropertyMemoryAttributes, PropertyMemory, Type);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfFdoInitSetFilter)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    PWDFDEVICE_INIT DeviceInit
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFFDOINITSETFILTER) WdfVersion.Functions.pfnWdfFdoInitSetFilter)(DriverGlobals, DeviceInit);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+PUNICODE_STRING
+VFWDFEXPORT(WdfFileObjectGetFileName)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFFILEOBJECT FileObject
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFFILEOBJECTGETFILENAME) WdfVersion.Functions.pfnWdfFileObjectGetFileName)(DriverGlobals, FileObject);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+WDFDEVICE
+VFWDFEXPORT(WdfFileObjectGetDevice)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFFILEOBJECT FileObject
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFFILEOBJECTGETDEVICE) WdfVersion.Functions.pfnWdfFileObjectGetDevice)(DriverGlobals, FileObject);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+ULONG
+VFWDFEXPORT(WdfFileObjectGetInitiatorProcessId)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFFILEOBJECT FileObject
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFFILEOBJECTGETINITIATORPROCESSID) WdfVersion.Functions.pfnWdfFileObjectGetInitiatorProcessId)(DriverGlobals, FileObject);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+WDFFILEOBJECT
+VFWDFEXPORT(WdfFileObjectGetRelatedFileObject)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFFILEOBJECT FileObject
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFFILEOBJECTGETRELATEDFILEOBJECT) WdfVersion.Functions.pfnWdfFileObjectGetRelatedFileObject)(DriverGlobals, FileObject);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfDeviceInitEnableHidInterface)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    PWDFDEVICE_INIT DeviceInit
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFDEVICEINITENABLEHIDINTERFACE) WdfVersion.Functions.pfnWdfDeviceInitEnableHidInterface)(DriverGlobals, DeviceInit);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfDeviceHidNotifyPresence)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    BOOLEAN IsPresent
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFDEVICEHIDNOTIFYPRESENCE) WdfVersion.Functions.pfnWdfDeviceHidNotifyPresence)(DriverGlobals, Device, IsPresent);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfInterruptCreate)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    PWDF_INTERRUPT_CONFIG Configuration,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES Attributes,
+    _Out_
+    WDFINTERRUPT* Interrupt
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFINTERRUPTCREATE) WdfVersion.Functions.pfnWdfInterruptCreate)(DriverGlobals, Device, Configuration, Attributes, Interrupt);
+}
+
+WDFAPI
+BOOLEAN
+VFWDFEXPORT(WdfInterruptQueueDpcForIsr)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFINTERRUPT Interrupt
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFINTERRUPTQUEUEDPCFORISR) WdfVersion.Functions.pfnWdfInterruptQueueDpcForIsr)(DriverGlobals, Interrupt);
+}
+
+WDFAPI
+BOOLEAN
+VFWDFEXPORT(WdfInterruptQueueWorkItemForIsr)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFINTERRUPT Interrupt
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFINTERRUPTQUEUEWORKITEMFORISR) WdfVersion.Functions.pfnWdfInterruptQueueWorkItemForIsr)(DriverGlobals, Interrupt);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+BOOLEAN
+VFWDFEXPORT(WdfInterruptSynchronize)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFINTERRUPT Interrupt,
+    _In_
+    PFN_WDF_INTERRUPT_SYNCHRONIZE Callback,
+    _In_
+    WDFCONTEXT Context
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFINTERRUPTSYNCHRONIZE) WdfVersion.Functions.pfnWdfInterruptSynchronize)(DriverGlobals, Interrupt, Callback, Context);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL + 1)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfInterruptAcquireLock)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    _Requires_lock_not_held_(_Curr_)
+    _Acquires_lock_(_Curr_)
+    WDFINTERRUPT Interrupt
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFINTERRUPTACQUIRELOCK) WdfVersion.Functions.pfnWdfInterruptAcquireLock)(DriverGlobals, Interrupt);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL + 1)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfInterruptReleaseLock)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    _Requires_lock_held_(_Curr_)
+    _Releases_lock_(_Curr_)
+    WDFINTERRUPT Interrupt
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFINTERRUPTRELEASELOCK) WdfVersion.Functions.pfnWdfInterruptReleaseLock)(DriverGlobals, Interrupt);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfInterruptEnable)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFINTERRUPT Interrupt
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFINTERRUPTENABLE) WdfVersion.Functions.pfnWdfInterruptEnable)(DriverGlobals, Interrupt);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfInterruptDisable)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFINTERRUPT Interrupt
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFINTERRUPTDISABLE) WdfVersion.Functions.pfnWdfInterruptDisable)(DriverGlobals, Interrupt);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfInterruptGetInfo)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFINTERRUPT Interrupt,
+    _Out_
+    PWDF_INTERRUPT_INFO Info
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFINTERRUPTGETINFO) WdfVersion.Functions.pfnWdfInterruptGetInfo)(DriverGlobals, Interrupt, Info);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfInterruptSetPolicy)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFINTERRUPT Interrupt,
+    _In_
+    WDF_INTERRUPT_POLICY Policy,
+    _In_
+    WDF_INTERRUPT_PRIORITY Priority,
+    _In_
+    KAFFINITY TargetProcessorSet
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFINTERRUPTSETPOLICY) WdfVersion.Functions.pfnWdfInterruptSetPolicy)(DriverGlobals, Interrupt, Policy, Priority, TargetProcessorSet);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfInterruptSetExtendedPolicy)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFINTERRUPT Interrupt,
+    _In_
+    PWDF_INTERRUPT_EXTENDED_POLICY PolicyAndGroup
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFINTERRUPTSETEXTENDEDPOLICY) WdfVersion.Functions.pfnWdfInterruptSetExtendedPolicy)(DriverGlobals, Interrupt, PolicyAndGroup);
+}
+
+WDFAPI
+WDFDEVICE
+VFWDFEXPORT(WdfInterruptGetDevice)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFINTERRUPT Interrupt
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFINTERRUPTGETDEVICE) WdfVersion.Functions.pfnWdfInterruptGetDevice)(DriverGlobals, Interrupt);
+}
+
+_Must_inspect_result_
+_Post_satisfies_(return == 1 || return == 0)
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+BOOLEAN
+VFWDFEXPORT(WdfInterruptTryToAcquireLock)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    _Requires_lock_not_held_(_Curr_)
+    _When_(return!=0, _Acquires_lock_(_Curr_))
+    WDFINTERRUPT Interrupt
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFINTERRUPTTRYTOACQUIRELOCK) WdfVersion.Functions.pfnWdfInterruptTryToAcquireLock)(DriverGlobals, Interrupt);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfIoQueueCreate)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    PWDF_IO_QUEUE_CONFIG Config,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES QueueAttributes,
+    _Out_opt_
+    WDFQUEUE* Queue
+    )
+{
+    VF_HOOK_PROCESS_INFO hookInfo;
+    NTSTATUS status;
+
+    PAGED_CODE_LOCKED();
+    RtlZeroMemory(&hookInfo, sizeof(VF_HOOK_PROCESS_INFO));
+
+    status = AddEventHooksWdfIoQueueCreate(
+        &hookInfo,
+        DriverGlobals,
+        Device,
+        Config,
+        QueueAttributes,
+        Queue);
+
+    UNREFERENCED_PARAMETER(status);
+
+    if (hookInfo.DonotCallKmdfLib) {
+        return hookInfo.DdiCallStatus;
+    }
+
+    return ((PFN_WDFIOQUEUECREATE) WdfVersion.Functions.pfnWdfIoQueueCreate)(DriverGlobals, Device, Config, QueueAttributes, Queue);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+WDF_IO_QUEUE_STATE
+VFWDFEXPORT(WdfIoQueueGetState)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFQUEUE Queue,
+    _Out_opt_
+    PULONG QueueRequests,
+    _Out_opt_
+    PULONG DriverRequests
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFIOQUEUEGETSTATE) WdfVersion.Functions.pfnWdfIoQueueGetState)(DriverGlobals, Queue, QueueRequests, DriverRequests);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfIoQueueStart)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFQUEUE Queue
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFIOQUEUESTART) WdfVersion.Functions.pfnWdfIoQueueStart)(DriverGlobals, Queue);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfIoQueueStop)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFQUEUE Queue,
+    _When_(Context != 0, _In_)
+    _When_(Context == 0, _In_opt_)
+    PFN_WDF_IO_QUEUE_STATE StopComplete,
+    _When_(StopComplete != 0, _In_)
+    _When_(StopComplete == 0, _In_opt_)
+    WDFCONTEXT Context
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFIOQUEUESTOP) WdfVersion.Functions.pfnWdfIoQueueStop)(DriverGlobals, Queue, StopComplete, Context);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfIoQueueStopSynchronously)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFQUEUE Queue
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFIOQUEUESTOPSYNCHRONOUSLY) WdfVersion.Functions.pfnWdfIoQueueStopSynchronously)(DriverGlobals, Queue);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+WDFDEVICE
+VFWDFEXPORT(WdfIoQueueGetDevice)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFQUEUE Queue
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFIOQUEUEGETDEVICE) WdfVersion.Functions.pfnWdfIoQueueGetDevice)(DriverGlobals, Queue);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfIoQueueRetrieveNextRequest)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFQUEUE Queue,
+    _Out_
+    WDFREQUEST* OutRequest
+    )
+{
+    PAGED_CODE_LOCKED();
+    NTSTATUS rtn = ((PFN_WDFIOQUEUERETRIEVENEXTREQUEST) WdfVersion.Functions.pfnWdfIoQueueRetrieveNextRequest)(DriverGlobals, Queue, OutRequest);
+    if (rtn == STATUS_SUCCESS) {
+        PerfIoStart(*OutRequest);
+    }
+    return rtn;
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfIoQueueRetrieveRequestByFileObject)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFQUEUE Queue,
+    _In_
+    WDFFILEOBJECT FileObject,
+    _Out_
+    WDFREQUEST* OutRequest
+    )
+{
+    PAGED_CODE_LOCKED();
+    NTSTATUS rtn = ((PFN_WDFIOQUEUERETRIEVEREQUESTBYFILEOBJECT) WdfVersion.Functions.pfnWdfIoQueueRetrieveRequestByFileObject)(DriverGlobals, Queue, FileObject, OutRequest);
+    if (rtn == STATUS_SUCCESS) {
+        PerfIoStart(*OutRequest);
+    }
+    return rtn;
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfIoQueueFindRequest)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFQUEUE Queue,
+    _In_opt_
+    WDFREQUEST FoundRequest,
+    _In_opt_
+    WDFFILEOBJECT FileObject,
+    _Inout_opt_
+    PWDF_REQUEST_PARAMETERS Parameters,
+    _Out_
+    WDFREQUEST* OutRequest
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFIOQUEUEFINDREQUEST) WdfVersion.Functions.pfnWdfIoQueueFindRequest)(DriverGlobals, Queue, FoundRequest, FileObject, Parameters, OutRequest);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfIoQueueRetrieveFoundRequest)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFQUEUE Queue,
+    _In_
+    WDFREQUEST FoundRequest,
+    _Out_
+    WDFREQUEST* OutRequest
+    )
+{
+    PAGED_CODE_LOCKED();
+    NTSTATUS rtn = ((PFN_WDFIOQUEUERETRIEVEFOUNDREQUEST) WdfVersion.Functions.pfnWdfIoQueueRetrieveFoundRequest)(DriverGlobals, Queue, FoundRequest, OutRequest);
+    if (rtn == STATUS_SUCCESS) {
+        PerfIoStart(*OutRequest);
+    }
+    return rtn;
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfIoQueueDrainSynchronously)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFQUEUE Queue
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFIOQUEUEDRAINSYNCHRONOUSLY) WdfVersion.Functions.pfnWdfIoQueueDrainSynchronously)(DriverGlobals, Queue);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfIoQueueDrain)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFQUEUE Queue,
+    _When_(Context != 0, _In_)
+    _When_(Context == 0, _In_opt_)
+    PFN_WDF_IO_QUEUE_STATE DrainComplete,
+    _When_(DrainComplete != 0, _In_)
+    _When_(DrainComplete == 0, _In_opt_)
+    WDFCONTEXT Context
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFIOQUEUEDRAIN) WdfVersion.Functions.pfnWdfIoQueueDrain)(DriverGlobals, Queue, DrainComplete, Context);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfIoQueuePurgeSynchronously)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFQUEUE Queue
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFIOQUEUEPURGESYNCHRONOUSLY) WdfVersion.Functions.pfnWdfIoQueuePurgeSynchronously)(DriverGlobals, Queue);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfIoQueuePurge)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFQUEUE Queue,
+    _When_(Context != 0, _In_)
+    _When_(Context == 0, _In_opt_)
+    PFN_WDF_IO_QUEUE_STATE PurgeComplete,
+    _When_(PurgeComplete != 0, _In_)
+    _When_(PurgeComplete == 0, _In_opt_)
+    WDFCONTEXT Context
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFIOQUEUEPURGE) WdfVersion.Functions.pfnWdfIoQueuePurge)(DriverGlobals, Queue, PurgeComplete, Context);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfIoQueueReadyNotify)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFQUEUE Queue,
+    _In_opt_
+    PFN_WDF_IO_QUEUE_STATE QueueReady,
+    _In_opt_
+    WDFCONTEXT Context
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFIOQUEUEREADYNOTIFY) WdfVersion.Functions.pfnWdfIoQueueReadyNotify)(DriverGlobals, Queue, QueueReady, Context);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfIoQueueStopAndPurge)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFQUEUE Queue,
+    _When_(Context != 0, _In_)
+    _When_(Context == 0, _In_opt_)
+    PFN_WDF_IO_QUEUE_STATE StopAndPurgeComplete,
+    _When_(StopAndPurgeComplete != 0, _In_)
+    _When_(StopAndPurgeComplete == 0, _In_opt_)
+    WDFCONTEXT Context
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFIOQUEUESTOPANDPURGE) WdfVersion.Functions.pfnWdfIoQueueStopAndPurge)(DriverGlobals, Queue, StopAndPurgeComplete, Context);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfIoQueueStopAndPurgeSynchronously)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFQUEUE Queue
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFIOQUEUESTOPANDPURGESYNCHRONOUSLY) WdfVersion.Functions.pfnWdfIoQueueStopAndPurgeSynchronously)(DriverGlobals, Queue);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfIoTargetCreate)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES IoTargetAttributes,
+    _Out_
+    WDFIOTARGET* IoTarget
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFIOTARGETCREATE) WdfVersion.Functions.pfnWdfIoTargetCreate)(DriverGlobals, Device, IoTargetAttributes, IoTarget);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfIoTargetOpen)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFIOTARGET IoTarget,
+    _In_
+    PWDF_IO_TARGET_OPEN_PARAMS OpenParams
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFIOTARGETOPEN) WdfVersion.Functions.pfnWdfIoTargetOpen)(DriverGlobals, IoTarget, OpenParams);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfIoTargetCloseForQueryRemove)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFIOTARGET IoTarget
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFIOTARGETCLOSEFORQUERYREMOVE) WdfVersion.Functions.pfnWdfIoTargetCloseForQueryRemove)(DriverGlobals, IoTarget);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfIoTargetClose)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFIOTARGET IoTarget
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFIOTARGETCLOSE) WdfVersion.Functions.pfnWdfIoTargetClose)(DriverGlobals, IoTarget);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfIoTargetStart)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFIOTARGET IoTarget
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFIOTARGETSTART) WdfVersion.Functions.pfnWdfIoTargetStart)(DriverGlobals, IoTarget);
+}
+
+_When_(Action == 3, _IRQL_requires_max_(DISPATCH_LEVEL))
+_When_(Action == 0 || Action == 1 || Action == 2, _IRQL_requires_max_(PASSIVE_LEVEL))
+WDFAPI
+VOID
+VFWDFEXPORT(WdfIoTargetStop)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFIOTARGET IoTarget,
+    _In_
+    _Strict_type_match_
+    WDF_IO_TARGET_SENT_IO_ACTION Action
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFIOTARGETSTOP) WdfVersion.Functions.pfnWdfIoTargetStop)(DriverGlobals, IoTarget, Action);
+}
+
+_When_(Action == 2, _IRQL_requires_max_(DISPATCH_LEVEL))
+_When_(Action == 0 || Action == 1, _IRQL_requires_max_(PASSIVE_LEVEL))
+WDFAPI
+VOID
+VFWDFEXPORT(WdfIoTargetPurge)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFIOTARGET IoTarget,
+    _In_
+    _Strict_type_match_
+    WDF_IO_TARGET_PURGE_IO_ACTION Action
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFIOTARGETPURGE) WdfVersion.Functions.pfnWdfIoTargetPurge)(DriverGlobals, IoTarget, Action);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+WDF_IO_TARGET_STATE
+VFWDFEXPORT(WdfIoTargetGetState)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFIOTARGET IoTarget
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFIOTARGETGETSTATE) WdfVersion.Functions.pfnWdfIoTargetGetState)(DriverGlobals, IoTarget);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+WDFDEVICE
+VFWDFEXPORT(WdfIoTargetGetDevice)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFIOTARGET IoTarget
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFIOTARGETGETDEVICE) WdfVersion.Functions.pfnWdfIoTargetGetDevice)(DriverGlobals, IoTarget);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+HANDLE
+VFWDFEXPORT(WdfIoTargetWdmGetTargetFileHandle)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFIOTARGET IoTarget
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFIOTARGETWDMGETTARGETFILEHANDLE) WdfVersion.Functions.pfnWdfIoTargetWdmGetTargetFileHandle)(DriverGlobals, IoTarget);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfIoTargetSendReadSynchronously)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFIOTARGET IoTarget,
+    _In_opt_
+    WDFREQUEST Request,
+    _In_opt_
+    PWDF_MEMORY_DESCRIPTOR OutputBuffer,
+    _In_opt_
+    PLONGLONG DeviceOffset,
+    _In_opt_
+    PWDF_REQUEST_SEND_OPTIONS RequestOptions,
+    _Out_opt_
+    PULONG_PTR BytesRead
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFIOTARGETSENDREADSYNCHRONOUSLY) WdfVersion.Functions.pfnWdfIoTargetSendReadSynchronously)(DriverGlobals, IoTarget, Request, OutputBuffer, DeviceOffset, RequestOptions, BytesRead);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfIoTargetFormatRequestForRead)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFIOTARGET IoTarget,
+    _In_
+    WDFREQUEST Request,
+    _In_opt_
+    WDFMEMORY OutputBuffer,
+    _In_opt_
+    PWDFMEMORY_OFFSET OutputBufferOffset,
+    _In_opt_
+    PLONGLONG DeviceOffset
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFIOTARGETFORMATREQUESTFORREAD) WdfVersion.Functions.pfnWdfIoTargetFormatRequestForRead)(DriverGlobals, IoTarget, Request, OutputBuffer, OutputBufferOffset, DeviceOffset);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfIoTargetSendWriteSynchronously)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFIOTARGET IoTarget,
+    _In_opt_
+    WDFREQUEST Request,
+    _In_opt_
+    PWDF_MEMORY_DESCRIPTOR InputBuffer,
+    _In_opt_
+    PLONGLONG DeviceOffset,
+    _In_opt_
+    PWDF_REQUEST_SEND_OPTIONS RequestOptions,
+    _Out_opt_
+    PULONG_PTR BytesWritten
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFIOTARGETSENDWRITESYNCHRONOUSLY) WdfVersion.Functions.pfnWdfIoTargetSendWriteSynchronously)(DriverGlobals, IoTarget, Request, InputBuffer, DeviceOffset, RequestOptions, BytesWritten);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfIoTargetFormatRequestForWrite)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFIOTARGET IoTarget,
+    _In_
+    WDFREQUEST Request,
+    _In_opt_
+    WDFMEMORY InputBuffer,
+    _In_opt_
+    PWDFMEMORY_OFFSET InputBufferOffset,
+    _In_opt_
+    PLONGLONG DeviceOffset
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFIOTARGETFORMATREQUESTFORWRITE) WdfVersion.Functions.pfnWdfIoTargetFormatRequestForWrite)(DriverGlobals, IoTarget, Request, InputBuffer, InputBufferOffset, DeviceOffset);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfIoTargetSendIoctlSynchronously)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFIOTARGET IoTarget,
+    _In_opt_
+    WDFREQUEST Request,
+    _In_
+    ULONG IoctlCode,
+    _In_opt_
+    PWDF_MEMORY_DESCRIPTOR InputBuffer,
+    _In_opt_
+    PWDF_MEMORY_DESCRIPTOR OutputBuffer,
+    _In_opt_
+    PWDF_REQUEST_SEND_OPTIONS RequestOptions,
+    _Out_opt_
+    PULONG_PTR BytesReturned
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFIOTARGETSENDIOCTLSYNCHRONOUSLY) WdfVersion.Functions.pfnWdfIoTargetSendIoctlSynchronously)(DriverGlobals, IoTarget, Request, IoctlCode, InputBuffer, OutputBuffer, RequestOptions, BytesReturned);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfIoTargetFormatRequestForIoctl)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFIOTARGET IoTarget,
+    _In_
+    WDFREQUEST Request,
+    _In_
+    ULONG IoctlCode,
+    _In_opt_
+    WDFMEMORY InputBuffer,
+    _In_opt_
+    PWDFMEMORY_OFFSET InputBufferOffset,
+    _In_opt_
+    WDFMEMORY OutputBuffer,
+    _In_opt_
+    PWDFMEMORY_OFFSET OutputBufferOffset
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFIOTARGETFORMATREQUESTFORIOCTL) WdfVersion.Functions.pfnWdfIoTargetFormatRequestForIoctl)(DriverGlobals, IoTarget, Request, IoctlCode, InputBuffer, InputBufferOffset, OutputBuffer, OutputBufferOffset);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfIoTargetSelfAssignDefaultIoQueue)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFIOTARGET IoTarget,
+    _In_
+    WDFQUEUE Queue
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFIOTARGETSELFASSIGNDEFAULTIOQUEUE) WdfVersion.Functions.pfnWdfIoTargetSelfAssignDefaultIoQueue)(DriverGlobals, IoTarget, Queue);
+}
+
+_Must_inspect_result_
+_When_(PoolType == 1 || PoolType == 257, _IRQL_requires_max_(APC_LEVEL))
+_When_(PoolType == 0 || PoolType == 256, _IRQL_requires_max_(DISPATCH_LEVEL))
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfMemoryCreate)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES Attributes,
+    _In_
+    _Strict_type_match_
+    POOL_TYPE PoolType,
+    _In_opt_
+    ULONG PoolTag,
+    _In_
+    _When_(BufferSize == 0, __drv_reportError(BufferSize cannot be zero))
+    size_t BufferSize,
+    _Out_
+    WDFMEMORY* Memory,
+    _Outptr_opt_result_bytebuffer_(BufferSize)
+    PVOID* Buffer
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFMEMORYCREATE) WdfVersion.Functions.pfnWdfMemoryCreate)(DriverGlobals, Attributes, PoolType, PoolTag, BufferSize, Memory, Buffer);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfMemoryCreatePreallocated)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES Attributes,
+    _In_ __drv_aliasesMem
+    PVOID Buffer,
+    _In_
+    _When_(BufferSize == 0, __drv_reportError(BufferSize cannot be zero))
+    size_t BufferSize,
+    _Out_
+    WDFMEMORY* Memory
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFMEMORYCREATEPREALLOCATED) WdfVersion.Functions.pfnWdfMemoryCreatePreallocated)(DriverGlobals, Attributes, Buffer, BufferSize, Memory);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+PVOID
+VFWDFEXPORT(WdfMemoryGetBuffer)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFMEMORY Memory,
+    _Out_opt_
+    size_t* BufferSize
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFMEMORYGETBUFFER) WdfVersion.Functions.pfnWdfMemoryGetBuffer)(DriverGlobals, Memory, BufferSize);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfMemoryAssignBuffer)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFMEMORY Memory,
+    _Pre_notnull_ _Pre_writable_byte_size_(BufferSize)
+    PVOID Buffer,
+    _In_
+    _When_(BufferSize == 0, __drv_reportError(BufferSize cannot be zero))
+    size_t BufferSize
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFMEMORYASSIGNBUFFER) WdfVersion.Functions.pfnWdfMemoryAssignBuffer)(DriverGlobals, Memory, Buffer, BufferSize);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfMemoryCopyToBuffer)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFMEMORY SourceMemory,
+    _In_
+    size_t SourceOffset,
+    _Out_writes_bytes_( NumBytesToCopyTo )
+    PVOID Buffer,
+    _In_
+    _When_(NumBytesToCopyTo == 0, __drv_reportError(NumBytesToCopyTo cannot be zero))
+    size_t NumBytesToCopyTo
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFMEMORYCOPYTOBUFFER) WdfVersion.Functions.pfnWdfMemoryCopyToBuffer)(DriverGlobals, SourceMemory, SourceOffset, Buffer, NumBytesToCopyTo);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfMemoryCopyFromBuffer)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFMEMORY DestinationMemory,
+    _In_
+    size_t DestinationOffset,
+    _In_
+    PVOID Buffer,
+    _In_
+    _When_(NumBytesToCopyFrom == 0, __drv_reportError(NumBytesToCopyFrom cannot be zero))
+    size_t NumBytesToCopyFrom
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFMEMORYCOPYFROMBUFFER) WdfVersion.Functions.pfnWdfMemoryCopyFromBuffer)(DriverGlobals, DestinationMemory, DestinationOffset, Buffer, NumBytesToCopyFrom);
+}
+
+WDFAPI
+PVOID
+FASTCALL
+VFWDFEXPORT(WdfObjectGetTypedContextWorker)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFOBJECT Handle,
+    _In_
+    PCWDF_OBJECT_CONTEXT_TYPE_INFO TypeInfo
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFOBJECTGETTYPEDCONTEXTWORKER) WdfVersion.Functions.pfnWdfObjectGetTypedContextWorker)(DriverGlobals, Handle, TypeInfo);
+}
+
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfObjectAllocateContext)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFOBJECT Handle,
+    _In_
+    PWDF_OBJECT_ATTRIBUTES ContextAttributes,
+    _Outptr_opt_
+    PVOID* Context
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFOBJECTALLOCATECONTEXT) WdfVersion.Functions.pfnWdfObjectAllocateContext)(DriverGlobals, Handle, ContextAttributes, Context);
+}
+
+WDFAPI
+WDFOBJECT
+FASTCALL
+VFWDFEXPORT(WdfObjectContextGetObject)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    PVOID ContextPointer
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFOBJECTCONTEXTGETOBJECT) WdfVersion.Functions.pfnWdfObjectContextGetObject)(DriverGlobals, ContextPointer);
+}
+
+WDFAPI
+VOID
+VFWDFEXPORT(WdfObjectReferenceActual)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFOBJECT Handle,
+    _In_opt_
+    PVOID Tag,
+    _In_
+    LONG Line,
+    _In_z_
+    PCHAR File
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFOBJECTREFERENCEACTUAL) WdfVersion.Functions.pfnWdfObjectReferenceActual)(DriverGlobals, Handle, Tag, Line, File);
+}
+
+WDFAPI
+VOID
+VFWDFEXPORT(WdfObjectDereferenceActual)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFOBJECT Handle,
+    _In_opt_
+    PVOID Tag,
+    _In_
+    LONG Line,
+    _In_z_
+    PCHAR File
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFOBJECTDEREFERENCEACTUAL) WdfVersion.Functions.pfnWdfObjectDereferenceActual)(DriverGlobals, Handle, Tag, Line, File);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfObjectCreate)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES Attributes,
+    _Out_
+    WDFOBJECT* Object
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFOBJECTCREATE) WdfVersion.Functions.pfnWdfObjectCreate)(DriverGlobals, Attributes, Object);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfObjectDelete)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFOBJECT Object
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFOBJECTDELETE) WdfVersion.Functions.pfnWdfObjectDelete)(DriverGlobals, Object);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfObjectQuery)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFOBJECT Object,
+    _In_
+    CONST GUID* Guid,
+    _In_
+    ULONG QueryBufferLength,
+    _Out_writes_bytes_(QueryBufferLength)
+    PVOID QueryBuffer
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFOBJECTQUERY) WdfVersion.Functions.pfnWdfObjectQuery)(DriverGlobals, Object, Guid, QueryBufferLength, QueryBuffer);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfRegistryOpenKey)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_opt_
+    WDFKEY ParentKey,
+    _In_
+    PCUNICODE_STRING KeyName,
+    _In_
+    ACCESS_MASK DesiredAccess,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES KeyAttributes,
+    _Out_
+    WDFKEY* Key
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREGISTRYOPENKEY) WdfVersion.Functions.pfnWdfRegistryOpenKey)(DriverGlobals, ParentKey, KeyName, DesiredAccess, KeyAttributes, Key);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfRegistryCreateKey)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_opt_
+    WDFKEY ParentKey,
+    _In_
+    PCUNICODE_STRING KeyName,
+    _In_
+    ACCESS_MASK DesiredAccess,
+    _In_
+    ULONG CreateOptions,
+    _Out_opt_
+    PULONG CreateDisposition,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES KeyAttributes,
+    _Out_
+    WDFKEY* Key
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREGISTRYCREATEKEY) WdfVersion.Functions.pfnWdfRegistryCreateKey)(DriverGlobals, ParentKey, KeyName, DesiredAccess, CreateOptions, CreateDisposition, KeyAttributes, Key);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfRegistryClose)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFKEY Key
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFREGISTRYCLOSE) WdfVersion.Functions.pfnWdfRegistryClose)(DriverGlobals, Key);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+HANDLE
+VFWDFEXPORT(WdfRegistryWdmGetHandle)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFKEY Key
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREGISTRYWDMGETHANDLE) WdfVersion.Functions.pfnWdfRegistryWdmGetHandle)(DriverGlobals, Key);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfRegistryRemoveKey)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFKEY Key
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREGISTRYREMOVEKEY) WdfVersion.Functions.pfnWdfRegistryRemoveKey)(DriverGlobals, Key);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfRegistryRemoveValue)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFKEY Key,
+    _In_
+    PCUNICODE_STRING ValueName
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREGISTRYREMOVEVALUE) WdfVersion.Functions.pfnWdfRegistryRemoveValue)(DriverGlobals, Key, ValueName);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfRegistryQueryValue)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFKEY Key,
+    _In_
+    PCUNICODE_STRING ValueName,
+    _In_
+    ULONG ValueLength,
+    _Out_writes_bytes_opt_( ValueLength)
+    PVOID Value,
+    _Out_opt_
+    PULONG ValueLengthQueried,
+    _Out_opt_
+    PULONG ValueType
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREGISTRYQUERYVALUE) WdfVersion.Functions.pfnWdfRegistryQueryValue)(DriverGlobals, Key, ValueName, ValueLength, Value, ValueLengthQueried, ValueType);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfRegistryQueryMemory)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFKEY Key,
+    _In_
+    PCUNICODE_STRING ValueName,
+    _In_
+    _Strict_type_match_
+    POOL_TYPE PoolType,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES MemoryAttributes,
+    _Out_
+    WDFMEMORY* Memory,
+    _Out_opt_
+    PULONG ValueType
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREGISTRYQUERYMEMORY) WdfVersion.Functions.pfnWdfRegistryQueryMemory)(DriverGlobals, Key, ValueName, PoolType, MemoryAttributes, Memory, ValueType);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfRegistryQueryMultiString)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFKEY Key,
+    _In_
+    PCUNICODE_STRING ValueName,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES StringsAttributes,
+    _In_
+    WDFCOLLECTION Collection
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREGISTRYQUERYMULTISTRING) WdfVersion.Functions.pfnWdfRegistryQueryMultiString)(DriverGlobals, Key, ValueName, StringsAttributes, Collection);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfRegistryQueryUnicodeString)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFKEY Key,
+    _In_
+    PCUNICODE_STRING ValueName,
+    _Out_opt_
+    PUSHORT ValueByteLength,
+    _Inout_opt_
+    PUNICODE_STRING Value
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREGISTRYQUERYUNICODESTRING) WdfVersion.Functions.pfnWdfRegistryQueryUnicodeString)(DriverGlobals, Key, ValueName, ValueByteLength, Value);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfRegistryQueryString)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFKEY Key,
+    _In_
+    PCUNICODE_STRING ValueName,
+    _In_
+    WDFSTRING String
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREGISTRYQUERYSTRING) WdfVersion.Functions.pfnWdfRegistryQueryString)(DriverGlobals, Key, ValueName, String);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfRegistryQueryULong)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFKEY Key,
+    _In_
+    PCUNICODE_STRING ValueName,
+    _Out_
+    PULONG Value
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREGISTRYQUERYULONG) WdfVersion.Functions.pfnWdfRegistryQueryULong)(DriverGlobals, Key, ValueName, Value);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfRegistryAssignValue)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFKEY Key,
+    _In_
+    PCUNICODE_STRING ValueName,
+    _In_
+    ULONG ValueType,
+    _In_
+    ULONG ValueLength,
+    _In_reads_( ValueLength)
+    PVOID Value
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREGISTRYASSIGNVALUE) WdfVersion.Functions.pfnWdfRegistryAssignValue)(DriverGlobals, Key, ValueName, ValueType, ValueLength, Value);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfRegistryAssignMemory)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFKEY Key,
+    _In_
+    PCUNICODE_STRING ValueName,
+    _In_
+    ULONG ValueType,
+    _In_
+    WDFMEMORY Memory,
+    _In_opt_
+    PWDFMEMORY_OFFSET MemoryOffsets
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREGISTRYASSIGNMEMORY) WdfVersion.Functions.pfnWdfRegistryAssignMemory)(DriverGlobals, Key, ValueName, ValueType, Memory, MemoryOffsets);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfRegistryAssignMultiString)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFKEY Key,
+    _In_
+    PCUNICODE_STRING ValueName,
+    _In_
+    WDFCOLLECTION StringsCollection
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREGISTRYASSIGNMULTISTRING) WdfVersion.Functions.pfnWdfRegistryAssignMultiString)(DriverGlobals, Key, ValueName, StringsCollection);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfRegistryAssignUnicodeString)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFKEY Key,
+    _In_
+    PCUNICODE_STRING ValueName,
+    _In_
+    PCUNICODE_STRING Value
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREGISTRYASSIGNUNICODESTRING) WdfVersion.Functions.pfnWdfRegistryAssignUnicodeString)(DriverGlobals, Key, ValueName, Value);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfRegistryAssignString)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFKEY Key,
+    _In_
+    PCUNICODE_STRING ValueName,
+    _In_
+    WDFSTRING String
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREGISTRYASSIGNSTRING) WdfVersion.Functions.pfnWdfRegistryAssignString)(DriverGlobals, Key, ValueName, String);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfRegistryAssignULong)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFKEY Key,
+    _In_
+    PCUNICODE_STRING ValueName,
+    _In_
+    ULONG Value
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREGISTRYASSIGNULONG) WdfVersion.Functions.pfnWdfRegistryAssignULong)(DriverGlobals, Key, ValueName, Value);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfRequestCreate)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES RequestAttributes,
+    _In_opt_
+    WDFIOTARGET IoTarget,
+    _Out_
+    WDFREQUEST* Request
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREQUESTCREATE) WdfVersion.Functions.pfnWdfRequestCreate)(DriverGlobals, RequestAttributes, IoTarget, Request);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfRequestReuse)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request,
+    _In_
+    PWDF_REQUEST_REUSE_PARAMS ReuseParams
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREQUESTREUSE) WdfVersion.Functions.pfnWdfRequestReuse)(DriverGlobals, Request, ReuseParams);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfRequestChangeTarget)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request,
+    _In_
+    WDFIOTARGET IoTarget
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREQUESTCHANGETARGET) WdfVersion.Functions.pfnWdfRequestChangeTarget)(DriverGlobals, Request, IoTarget);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfRequestFormatRequestUsingCurrentType)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFREQUESTFORMATREQUESTUSINGCURRENTTYPE) WdfVersion.Functions.pfnWdfRequestFormatRequestUsingCurrentType)(DriverGlobals, Request);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+_When_(Options->Flags & WDF_REQUEST_SEND_OPTION_SYNCHRONOUS == 0, _Must_inspect_result_)
+WDFAPI
+BOOLEAN
+VFWDFEXPORT(WdfRequestSend)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request,
+    _In_
+    WDFIOTARGET Target,
+    _In_opt_
+    PWDF_REQUEST_SEND_OPTIONS Options
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREQUESTSEND) WdfVersion.Functions.pfnWdfRequestSend)(DriverGlobals, Request, Target, Options);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfRequestGetStatus)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREQUESTGETSTATUS) WdfVersion.Functions.pfnWdfRequestGetStatus)(DriverGlobals, Request);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfRequestMarkCancelable)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request,
+    _In_
+    PFN_WDF_REQUEST_CANCEL EvtRequestCancel
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFREQUESTMARKCANCELABLE) WdfVersion.Functions.pfnWdfRequestMarkCancelable)(DriverGlobals, Request, EvtRequestCancel);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfRequestMarkCancelableEx)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request,
+    _In_
+    PFN_WDF_REQUEST_CANCEL EvtRequestCancel
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREQUESTMARKCANCELABLEEX) WdfVersion.Functions.pfnWdfRequestMarkCancelableEx)(DriverGlobals, Request, EvtRequestCancel);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfRequestUnmarkCancelable)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREQUESTUNMARKCANCELABLE) WdfVersion.Functions.pfnWdfRequestUnmarkCancelable)(DriverGlobals, Request);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+BOOLEAN
+VFWDFEXPORT(WdfRequestIsCanceled)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREQUESTISCANCELED) WdfVersion.Functions.pfnWdfRequestIsCanceled)(DriverGlobals, Request);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+BOOLEAN
+VFWDFEXPORT(WdfRequestCancelSentRequest)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREQUESTCANCELSENTREQUEST) WdfVersion.Functions.pfnWdfRequestCancelSentRequest)(DriverGlobals, Request);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(APC_LEVEL)
+WDFAPI
+BOOLEAN
+VFWDFEXPORT(WdfRequestIsFrom32BitProcess)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREQUESTISFROM32BITPROCESS) WdfVersion.Functions.pfnWdfRequestIsFrom32BitProcess)(DriverGlobals, Request);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfRequestSetCompletionRoutine)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request,
+    _In_opt_
+    PFN_WDF_REQUEST_COMPLETION_ROUTINE CompletionRoutine,
+    _In_opt_ __drv_aliasesMem
+    WDFCONTEXT CompletionContext
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFREQUESTSETCOMPLETIONROUTINE) WdfVersion.Functions.pfnWdfRequestSetCompletionRoutine)(DriverGlobals, Request, CompletionRoutine, CompletionContext);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfRequestGetCompletionParams)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request,
+    _Out_
+    PWDF_REQUEST_COMPLETION_PARAMS Params
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFREQUESTGETCOMPLETIONPARAMS) WdfVersion.Functions.pfnWdfRequestGetCompletionParams)(DriverGlobals, Request, Params);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfRequestAllocateTimer)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREQUESTALLOCATETIMER) WdfVersion.Functions.pfnWdfRequestAllocateTimer)(DriverGlobals, Request);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfRequestComplete)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request,
+    _In_
+    NTSTATUS Status
+    )
+{
+    PAGED_CODE_LOCKED();
+    PerfIoComplete(Request);
+    ((PFN_WDFREQUESTCOMPLETE) WdfVersion.Functions.pfnWdfRequestComplete)(DriverGlobals, Request, Status);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfRequestCompleteWithInformation)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request,
+    _In_
+    NTSTATUS Status,
+    _In_
+    ULONG_PTR Information
+    )
+{
+    PAGED_CODE_LOCKED();
+    PerfIoComplete(Request);
+    ((PFN_WDFREQUESTCOMPLETEWITHINFORMATION) WdfVersion.Functions.pfnWdfRequestCompleteWithInformation)(DriverGlobals, Request, Status, Information);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfRequestGetParameters)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request,
+    _Out_
+    PWDF_REQUEST_PARAMETERS Parameters
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFREQUESTGETPARAMETERS) WdfVersion.Functions.pfnWdfRequestGetParameters)(DriverGlobals, Request, Parameters);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfRequestRetrieveInputMemory)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request,
+    _Out_
+    WDFMEMORY* Memory
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREQUESTRETRIEVEINPUTMEMORY) WdfVersion.Functions.pfnWdfRequestRetrieveInputMemory)(DriverGlobals, Request, Memory);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfRequestRetrieveOutputMemory)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request,
+    _Out_
+    WDFMEMORY* Memory
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREQUESTRETRIEVEOUTPUTMEMORY) WdfVersion.Functions.pfnWdfRequestRetrieveOutputMemory)(DriverGlobals, Request, Memory);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfRequestRetrieveInputBuffer)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request,
+    _In_
+    size_t MinimumRequiredLength,
+    _Outptr_result_bytebuffer_(*Length)
+    PVOID* Buffer,
+    _Out_opt_
+    size_t* Length
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREQUESTRETRIEVEINPUTBUFFER) WdfVersion.Functions.pfnWdfRequestRetrieveInputBuffer)(DriverGlobals, Request, MinimumRequiredLength, Buffer, Length);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfRequestRetrieveOutputBuffer)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request,
+    _In_
+    size_t MinimumRequiredSize,
+    _Outptr_result_bytebuffer_(*Length)
+    PVOID* Buffer,
+    _Out_opt_
+    size_t* Length
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREQUESTRETRIEVEOUTPUTBUFFER) WdfVersion.Functions.pfnWdfRequestRetrieveOutputBuffer)(DriverGlobals, Request, MinimumRequiredSize, Buffer, Length);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfRequestSetInformation)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request,
+    _In_
+    ULONG_PTR Information
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFREQUESTSETINFORMATION) WdfVersion.Functions.pfnWdfRequestSetInformation)(DriverGlobals, Request, Information);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+ULONG_PTR
+VFWDFEXPORT(WdfRequestGetInformation)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREQUESTGETINFORMATION) WdfVersion.Functions.pfnWdfRequestGetInformation)(DriverGlobals, Request);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+WDFFILEOBJECT
+VFWDFEXPORT(WdfRequestGetFileObject)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREQUESTGETFILEOBJECT) WdfVersion.Functions.pfnWdfRequestGetFileObject)(DriverGlobals, Request);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+KPROCESSOR_MODE
+VFWDFEXPORT(WdfRequestGetRequestorMode)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREQUESTGETREQUESTORMODE) WdfVersion.Functions.pfnWdfRequestGetRequestorMode)(DriverGlobals, Request);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfRequestForwardToIoQueue)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request,
+    _In_
+    WDFQUEUE DestinationQueue
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREQUESTFORWARDTOIOQUEUE) WdfVersion.Functions.pfnWdfRequestForwardToIoQueue)(DriverGlobals, Request, DestinationQueue);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+WDFQUEUE
+VFWDFEXPORT(WdfRequestGetIoQueue)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREQUESTGETIOQUEUE) WdfVersion.Functions.pfnWdfRequestGetIoQueue)(DriverGlobals, Request);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfRequestRequeue)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREQUESTREQUEUE) WdfVersion.Functions.pfnWdfRequestRequeue)(DriverGlobals, Request);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfRequestStopAcknowledge)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request,
+    _In_
+    BOOLEAN Requeue
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFREQUESTSTOPACKNOWLEDGE) WdfVersion.Functions.pfnWdfRequestStopAcknowledge)(DriverGlobals, Request, Requeue);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfRequestImpersonate)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request,
+    _In_
+    SECURITY_IMPERSONATION_LEVEL ImpersonationLevel,
+    _In_
+    PFN_WDF_REQUEST_IMPERSONATE EvtRequestImpersonate,
+    _In_opt_
+    PVOID Context
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREQUESTIMPERSONATE) WdfVersion.Functions.pfnWdfRequestImpersonate)(DriverGlobals, Request, ImpersonationLevel, EvtRequestImpersonate, Context);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+ULONG
+VFWDFEXPORT(WdfRequestGetRequestorProcessId)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREQUESTGETREQUESTORPROCESSID) WdfVersion.Functions.pfnWdfRequestGetRequestorProcessId)(DriverGlobals, Request);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+BOOLEAN
+VFWDFEXPORT(WdfRequestIsFromUserModeDriver)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREQUESTISFROMUSERMODEDRIVER) WdfVersion.Functions.pfnWdfRequestIsFromUserModeDriver)(DriverGlobals, Request);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfRequestSetUserModeDriverInitiatedIo)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request,
+    _In_
+    BOOLEAN IsUserModeDriverInitiated
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFREQUESTSETUSERMODEDRIVERINITIATEDIO) WdfVersion.Functions.pfnWdfRequestSetUserModeDriverInitiatedIo)(DriverGlobals, Request, IsUserModeDriverInitiated);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+BOOLEAN
+VFWDFEXPORT(WdfRequestGetUserModeDriverInitiatedIo)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREQUESTGETUSERMODEDRIVERINITIATEDIO) WdfVersion.Functions.pfnWdfRequestGetUserModeDriverInitiatedIo)(DriverGlobals, Request);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfRequestSetActivityId)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request,
+    _In_
+    LPGUID ActivityId
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFREQUESTSETACTIVITYID) WdfVersion.Functions.pfnWdfRequestSetActivityId)(DriverGlobals, Request, ActivityId);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfRequestRetrieveActivityId)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request,
+    _Out_
+    LPGUID ActivityId
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREQUESTRETRIEVEACTIVITYID) WdfVersion.Functions.pfnWdfRequestRetrieveActivityId)(DriverGlobals, Request, ActivityId);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+WDF_DEVICE_IO_TYPE
+VFWDFEXPORT(WdfRequestGetEffectiveIoType)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFREQUEST Request
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFREQUESTGETEFFECTIVEIOTYPE) WdfVersion.Functions.pfnWdfRequestGetEffectiveIoType)(DriverGlobals, Request);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+ULONG
+VFWDFEXPORT(WdfCmResourceListGetCount)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFCMRESLIST List
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFCMRESOURCELISTGETCOUNT) WdfVersion.Functions.pfnWdfCmResourceListGetCount)(DriverGlobals, List);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+PCM_PARTIAL_RESOURCE_DESCRIPTOR
+VFWDFEXPORT(WdfCmResourceListGetDescriptor)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFCMRESLIST List,
+    _In_
+    ULONG Index
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFCMRESOURCELISTGETDESCRIPTOR) WdfVersion.Functions.pfnWdfCmResourceListGetDescriptor)(DriverGlobals, List, Index);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfStringCreate)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_opt_
+    PCUNICODE_STRING UnicodeString,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES StringAttributes,
+    _Out_
+    WDFSTRING* String
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFSTRINGCREATE) WdfVersion.Functions.pfnWdfStringCreate)(DriverGlobals, UnicodeString, StringAttributes, String);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfStringGetUnicodeString)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFSTRING String,
+    _Out_
+    PUNICODE_STRING UnicodeString
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFSTRINGGETUNICODESTRING) WdfVersion.Functions.pfnWdfStringGetUnicodeString)(DriverGlobals, String, UnicodeString);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfObjectAcquireLock)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    _Requires_lock_not_held_(_Curr_)
+    _Acquires_lock_(_Curr_)
+    WDFOBJECT Object
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFOBJECTACQUIRELOCK) WdfVersion.Functions.pfnWdfObjectAcquireLock)(DriverGlobals, Object);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfObjectReleaseLock)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    _Requires_lock_held_(_Curr_)
+    _Releases_lock_(_Curr_)
+    WDFOBJECT Object
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFOBJECTRELEASELOCK) WdfVersion.Functions.pfnWdfObjectReleaseLock)(DriverGlobals, Object);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfWaitLockCreate)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES LockAttributes,
+    _Out_
+    WDFWAITLOCK* Lock
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFWAITLOCKCREATE) WdfVersion.Functions.pfnWdfWaitLockCreate)(DriverGlobals, LockAttributes, Lock);
+}
+
+_When_(Timeout == NULL, _IRQL_requires_max_(PASSIVE_LEVEL))
+_When_(Timeout != NULL && *Timeout == 0, _IRQL_requires_max_(DISPATCH_LEVEL))
+_When_(Timeout != NULL && *Timeout != 0, _IRQL_requires_max_(PASSIVE_LEVEL))
+_Always_(_When_(Timeout == NULL, _Acquires_lock_(Lock)))
+_When_(Timeout != NULL && return == STATUS_SUCCESS, _Acquires_lock_(Lock))
+_When_(Timeout != NULL, _Must_inspect_result_)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfWaitLockAcquire)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    _Requires_lock_not_held_(_Curr_)
+    WDFWAITLOCK Lock,
+    _In_opt_
+    PLONGLONG Timeout
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFWAITLOCKACQUIRE) WdfVersion.Functions.pfnWdfWaitLockAcquire)(DriverGlobals, Lock, Timeout);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfWaitLockRelease)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    _Requires_lock_held_(_Curr_)
+    _Releases_lock_(_Curr_)
+    WDFWAITLOCK Lock
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFWAITLOCKRELEASE) WdfVersion.Functions.pfnWdfWaitLockRelease)(DriverGlobals, Lock);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfSpinLockCreate)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES SpinLockAttributes,
+    _Out_
+    WDFSPINLOCK* SpinLock
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFSPINLOCKCREATE) WdfVersion.Functions.pfnWdfSpinLockCreate)(DriverGlobals, SpinLockAttributes, SpinLock);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+_IRQL_raises_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfSpinLockAcquire)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    _Requires_lock_not_held_(_Curr_)
+    _Acquires_lock_(_Curr_)
+    _IRQL_saves_
+    WDFSPINLOCK SpinLock
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFSPINLOCKACQUIRE) WdfVersion.Functions.pfnWdfSpinLockAcquire)(DriverGlobals, SpinLock);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+_IRQL_requires_min_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfSpinLockRelease)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    _Requires_lock_held_(_Curr_)
+    _Releases_lock_(_Curr_)
+    _IRQL_restores_
+    WDFSPINLOCK SpinLock
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFSPINLOCKRELEASE) WdfVersion.Functions.pfnWdfSpinLockRelease)(DriverGlobals, SpinLock);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfTimerCreate)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    PWDF_TIMER_CONFIG Config,
+    _In_
+    PWDF_OBJECT_ATTRIBUTES Attributes,
+    _Out_
+    WDFTIMER* Timer
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFTIMERCREATE) WdfVersion.Functions.pfnWdfTimerCreate)(DriverGlobals, Config, Attributes, Timer);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+BOOLEAN
+VFWDFEXPORT(WdfTimerStart)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFTIMER Timer,
+    _In_
+    LONGLONG DueTime
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFTIMERSTART) WdfVersion.Functions.pfnWdfTimerStart)(DriverGlobals, Timer, DueTime);
+}
+
+_When_(Wait == __true, _IRQL_requires_max_(PASSIVE_LEVEL))
+_When_(Wait == __false, _IRQL_requires_max_(DISPATCH_LEVEL))
+WDFAPI
+BOOLEAN
+VFWDFEXPORT(WdfTimerStop)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFTIMER Timer,
+    _In_
+    BOOLEAN Wait
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFTIMERSTOP) WdfVersion.Functions.pfnWdfTimerStop)(DriverGlobals, Timer, Wait);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+WDFOBJECT
+VFWDFEXPORT(WdfTimerGetParentObject)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFTIMER Timer
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFTIMERGETPARENTOBJECT) WdfVersion.Functions.pfnWdfTimerGetParentObject)(DriverGlobals, Timer);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfUsbTargetDeviceCreate)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES Attributes,
+    _Out_
+    WDFUSBDEVICE* UsbDevice
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFUSBTARGETDEVICECREATE) WdfVersion.Functions.pfnWdfUsbTargetDeviceCreate)(DriverGlobals, Device, Attributes, UsbDevice);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfUsbTargetDeviceCreateWithParameters)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFDEVICE Device,
+    _In_
+    PWDF_USB_DEVICE_CREATE_CONFIG Config,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES Attributes,
+    _Out_
+    WDFUSBDEVICE* UsbDevice
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFUSBTARGETDEVICECREATEWITHPARAMETERS) WdfVersion.Functions.pfnWdfUsbTargetDeviceCreateWithParameters)(DriverGlobals, Device, Config, Attributes, UsbDevice);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfUsbTargetDeviceRetrieveInformation)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBDEVICE UsbDevice,
+    _Out_
+    PWDF_USB_DEVICE_INFORMATION Information
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFUSBTARGETDEVICERETRIEVEINFORMATION) WdfVersion.Functions.pfnWdfUsbTargetDeviceRetrieveInformation)(DriverGlobals, UsbDevice, Information);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfUsbTargetDeviceGetDeviceDescriptor)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBDEVICE UsbDevice,
+    _Out_
+    PUSB_DEVICE_DESCRIPTOR UsbDeviceDescriptor
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFUSBTARGETDEVICEGETDEVICEDESCRIPTOR) WdfVersion.Functions.pfnWdfUsbTargetDeviceGetDeviceDescriptor)(DriverGlobals, UsbDevice, UsbDeviceDescriptor);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfUsbTargetDeviceRetrieveConfigDescriptor)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBDEVICE UsbDevice,
+    _Out_writes_bytes_to_opt_(*ConfigDescriptorLength,*ConfigDescriptorLength)
+    PVOID ConfigDescriptor,
+    _Inout_
+    PUSHORT ConfigDescriptorLength
+    )
+{
+    PAGED_CODE_LOCKED();
+#pragma prefast(suppress: __WARNING_HIGH_PRIORITY_OVERFLOW_POSTCONDITION, "This is a verifier DDI hook routine and all it does is call original routine.")
+    return ((PFN_WDFUSBTARGETDEVICERETRIEVECONFIGDESCRIPTOR) WdfVersion.Functions.pfnWdfUsbTargetDeviceRetrieveConfigDescriptor)(DriverGlobals, UsbDevice, ConfigDescriptor, ConfigDescriptorLength);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfUsbTargetDeviceQueryString)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBDEVICE UsbDevice,
+    _In_opt_
+    WDFREQUEST Request,
+    _In_opt_
+    PWDF_REQUEST_SEND_OPTIONS RequestOptions,
+    _Out_writes_opt_(*NumCharacters)
+    PUSHORT String,
+    _Inout_
+    PUSHORT NumCharacters,
+    _In_
+    UCHAR StringIndex,
+    _In_opt_
+    USHORT LangID
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFUSBTARGETDEVICEQUERYSTRING) WdfVersion.Functions.pfnWdfUsbTargetDeviceQueryString)(DriverGlobals, UsbDevice, Request, RequestOptions, String, NumCharacters, StringIndex, LangID);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfUsbTargetDeviceAllocAndQueryString)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBDEVICE UsbDevice,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES StringMemoryAttributes,
+    _Out_
+    WDFMEMORY* StringMemory,
+    _Out_opt_
+    PUSHORT NumCharacters,
+    _In_
+    UCHAR StringIndex,
+    _In_opt_
+    USHORT LangID
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFUSBTARGETDEVICEALLOCANDQUERYSTRING) WdfVersion.Functions.pfnWdfUsbTargetDeviceAllocAndQueryString)(DriverGlobals, UsbDevice, StringMemoryAttributes, StringMemory, NumCharacters, StringIndex, LangID);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfUsbTargetDeviceFormatRequestForString)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBDEVICE UsbDevice,
+    _In_
+    WDFREQUEST Request,
+    _In_
+    WDFMEMORY Memory,
+    _In_opt_
+    PWDFMEMORY_OFFSET Offset,
+    _In_
+    UCHAR StringIndex,
+    _In_opt_
+    USHORT LangID
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFUSBTARGETDEVICEFORMATREQUESTFORSTRING) WdfVersion.Functions.pfnWdfUsbTargetDeviceFormatRequestForString)(DriverGlobals, UsbDevice, Request, Memory, Offset, StringIndex, LangID);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+UCHAR
+VFWDFEXPORT(WdfUsbTargetDeviceGetNumInterfaces)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBDEVICE UsbDevice
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFUSBTARGETDEVICEGETNUMINTERFACES) WdfVersion.Functions.pfnWdfUsbTargetDeviceGetNumInterfaces)(DriverGlobals, UsbDevice);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfUsbTargetDeviceSelectConfig)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBDEVICE UsbDevice,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES PipeAttributes,
+    _Inout_
+    PWDF_USB_DEVICE_SELECT_CONFIG_PARAMS Params
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFUSBTARGETDEVICESELECTCONFIG) WdfVersion.Functions.pfnWdfUsbTargetDeviceSelectConfig)(DriverGlobals, UsbDevice, PipeAttributes, Params);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfUsbTargetDeviceSendControlTransferSynchronously)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBDEVICE UsbDevice,
+    _In_opt_
+    WDFREQUEST Request,
+    _In_opt_
+    PWDF_REQUEST_SEND_OPTIONS RequestOptions,
+    _In_
+    PWDF_USB_CONTROL_SETUP_PACKET SetupPacket,
+    _In_opt_
+    PWDF_MEMORY_DESCRIPTOR MemoryDescriptor,
+    _Out_opt_
+    PULONG BytesTransferred
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFUSBTARGETDEVICESENDCONTROLTRANSFERSYNCHRONOUSLY) WdfVersion.Functions.pfnWdfUsbTargetDeviceSendControlTransferSynchronously)(DriverGlobals, UsbDevice, Request, RequestOptions, SetupPacket, MemoryDescriptor, BytesTransferred);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfUsbTargetDeviceFormatRequestForControlTransfer)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBDEVICE UsbDevice,
+    _In_
+    WDFREQUEST Request,
+    _In_
+    PWDF_USB_CONTROL_SETUP_PACKET SetupPacket,
+    _In_opt_
+    WDFMEMORY TransferMemory,
+    _In_opt_
+    PWDFMEMORY_OFFSET TransferOffset
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFUSBTARGETDEVICEFORMATREQUESTFORCONTROLTRANSFER) WdfVersion.Functions.pfnWdfUsbTargetDeviceFormatRequestForControlTransfer)(DriverGlobals, UsbDevice, Request, SetupPacket, TransferMemory, TransferOffset);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfUsbTargetDeviceResetPortSynchronously)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBDEVICE UsbDevice
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFUSBTARGETDEVICERESETPORTSYNCHRONOUSLY) WdfVersion.Functions.pfnWdfUsbTargetDeviceResetPortSynchronously)(DriverGlobals, UsbDevice);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfUsbTargetDeviceQueryUsbCapability)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBDEVICE UsbDevice,
+    _In_
+    CONST GUID* CapabilityType,
+    _In_
+    ULONG CapabilityBufferLength,
+    _When_(CapabilityBufferLength == 0, _Out_opt_)
+    _When_(CapabilityBufferLength != 0 && ResultLength == NULL, _Out_writes_bytes_(CapabilityBufferLength))
+    _When_(CapabilityBufferLength != 0 && ResultLength != NULL, _Out_writes_bytes_to_opt_(CapabilityBufferLength, *ResultLength))
+    PVOID CapabilityBuffer,
+    _Out_opt_
+    _When_(ResultLength != NULL,_Deref_out_range_(<=,CapabilityBufferLength))
+    PULONG ResultLength
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFUSBTARGETDEVICEQUERYUSBCAPABILITY) WdfVersion.Functions.pfnWdfUsbTargetDeviceQueryUsbCapability)(DriverGlobals, UsbDevice, CapabilityType, CapabilityBufferLength, CapabilityBuffer, ResultLength);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfUsbTargetPipeGetInformation)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBPIPE Pipe,
+    _Out_
+    PWDF_USB_PIPE_INFORMATION PipeInformation
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFUSBTARGETPIPEGETINFORMATION) WdfVersion.Functions.pfnWdfUsbTargetPipeGetInformation)(DriverGlobals, Pipe, PipeInformation);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+BOOLEAN
+VFWDFEXPORT(WdfUsbTargetPipeIsInEndpoint)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBPIPE Pipe
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFUSBTARGETPIPEISINENDPOINT) WdfVersion.Functions.pfnWdfUsbTargetPipeIsInEndpoint)(DriverGlobals, Pipe);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+BOOLEAN
+VFWDFEXPORT(WdfUsbTargetPipeIsOutEndpoint)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBPIPE Pipe
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFUSBTARGETPIPEISOUTENDPOINT) WdfVersion.Functions.pfnWdfUsbTargetPipeIsOutEndpoint)(DriverGlobals, Pipe);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+WDF_USB_PIPE_TYPE
+VFWDFEXPORT(WdfUsbTargetPipeGetType)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBPIPE Pipe
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFUSBTARGETPIPEGETTYPE) WdfVersion.Functions.pfnWdfUsbTargetPipeGetType)(DriverGlobals, Pipe);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfUsbTargetPipeSetNoMaximumPacketSizeCheck)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBPIPE Pipe
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFUSBTARGETPIPESETNOMAXIMUMPACKETSIZECHECK) WdfVersion.Functions.pfnWdfUsbTargetPipeSetNoMaximumPacketSizeCheck)(DriverGlobals, Pipe);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfUsbTargetPipeWriteSynchronously)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBPIPE Pipe,
+    _In_opt_
+    WDFREQUEST Request,
+    _In_opt_
+    PWDF_REQUEST_SEND_OPTIONS RequestOptions,
+    _In_opt_
+    PWDF_MEMORY_DESCRIPTOR MemoryDescriptor,
+    _Out_opt_
+    PULONG BytesWritten
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFUSBTARGETPIPEWRITESYNCHRONOUSLY) WdfVersion.Functions.pfnWdfUsbTargetPipeWriteSynchronously)(DriverGlobals, Pipe, Request, RequestOptions, MemoryDescriptor, BytesWritten);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfUsbTargetPipeFormatRequestForWrite)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBPIPE Pipe,
+    _In_
+    WDFREQUEST Request,
+    _In_opt_
+    WDFMEMORY WriteMemory,
+    _In_opt_
+    PWDFMEMORY_OFFSET WriteOffset
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFUSBTARGETPIPEFORMATREQUESTFORWRITE) WdfVersion.Functions.pfnWdfUsbTargetPipeFormatRequestForWrite)(DriverGlobals, Pipe, Request, WriteMemory, WriteOffset);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfUsbTargetPipeReadSynchronously)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBPIPE Pipe,
+    _In_opt_
+    WDFREQUEST Request,
+    _In_opt_
+    PWDF_REQUEST_SEND_OPTIONS RequestOptions,
+    _In_opt_
+    PWDF_MEMORY_DESCRIPTOR MemoryDescriptor,
+    _Out_opt_
+    PULONG BytesRead
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFUSBTARGETPIPEREADSYNCHRONOUSLY) WdfVersion.Functions.pfnWdfUsbTargetPipeReadSynchronously)(DriverGlobals, Pipe, Request, RequestOptions, MemoryDescriptor, BytesRead);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfUsbTargetPipeFormatRequestForRead)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBPIPE Pipe,
+    _In_
+    WDFREQUEST Request,
+    _In_opt_
+    WDFMEMORY ReadMemory,
+    _In_opt_
+    PWDFMEMORY_OFFSET ReadOffset
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFUSBTARGETPIPEFORMATREQUESTFORREAD) WdfVersion.Functions.pfnWdfUsbTargetPipeFormatRequestForRead)(DriverGlobals, Pipe, Request, ReadMemory, ReadOffset);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfUsbTargetPipeConfigContinuousReader)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBPIPE Pipe,
+    _In_
+    PWDF_USB_CONTINUOUS_READER_CONFIG Config
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFUSBTARGETPIPECONFIGCONTINUOUSREADER) WdfVersion.Functions.pfnWdfUsbTargetPipeConfigContinuousReader)(DriverGlobals, Pipe, Config);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfUsbTargetPipeAbortSynchronously)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBPIPE Pipe,
+    _In_opt_
+    WDFREQUEST Request,
+    _In_opt_
+    PWDF_REQUEST_SEND_OPTIONS RequestOptions
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFUSBTARGETPIPEABORTSYNCHRONOUSLY) WdfVersion.Functions.pfnWdfUsbTargetPipeAbortSynchronously)(DriverGlobals, Pipe, Request, RequestOptions);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfUsbTargetPipeFormatRequestForAbort)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBPIPE Pipe,
+    _In_
+    WDFREQUEST Request
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFUSBTARGETPIPEFORMATREQUESTFORABORT) WdfVersion.Functions.pfnWdfUsbTargetPipeFormatRequestForAbort)(DriverGlobals, Pipe, Request);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfUsbTargetPipeResetSynchronously)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBPIPE Pipe,
+    _In_opt_
+    WDFREQUEST Request,
+    _In_opt_
+    PWDF_REQUEST_SEND_OPTIONS RequestOptions
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFUSBTARGETPIPERESETSYNCHRONOUSLY) WdfVersion.Functions.pfnWdfUsbTargetPipeResetSynchronously)(DriverGlobals, Pipe, Request, RequestOptions);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfUsbTargetPipeFormatRequestForReset)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBPIPE Pipe,
+    _In_
+    WDFREQUEST Request
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFUSBTARGETPIPEFORMATREQUESTFORRESET) WdfVersion.Functions.pfnWdfUsbTargetPipeFormatRequestForReset)(DriverGlobals, Pipe, Request);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+BYTE
+VFWDFEXPORT(WdfUsbInterfaceGetInterfaceNumber)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBINTERFACE UsbInterface
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFUSBINTERFACEGETINTERFACENUMBER) WdfVersion.Functions.pfnWdfUsbInterfaceGetInterfaceNumber)(DriverGlobals, UsbInterface);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+BYTE
+VFWDFEXPORT(WdfUsbInterfaceGetNumEndpoints)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBINTERFACE UsbInterface,
+    _In_
+    UCHAR SettingIndex
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFUSBINTERFACEGETNUMENDPOINTS) WdfVersion.Functions.pfnWdfUsbInterfaceGetNumEndpoints)(DriverGlobals, UsbInterface, SettingIndex);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfUsbInterfaceGetDescriptor)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBINTERFACE UsbInterface,
+    _In_
+    UCHAR SettingIndex,
+    _Out_
+    PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFUSBINTERFACEGETDESCRIPTOR) WdfVersion.Functions.pfnWdfUsbInterfaceGetDescriptor)(DriverGlobals, UsbInterface, SettingIndex, InterfaceDescriptor);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+BYTE
+VFWDFEXPORT(WdfUsbInterfaceGetNumSettings)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBINTERFACE UsbInterface
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFUSBINTERFACEGETNUMSETTINGS) WdfVersion.Functions.pfnWdfUsbInterfaceGetNumSettings)(DriverGlobals, UsbInterface);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfUsbInterfaceSelectSetting)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBINTERFACE UsbInterface,
+    _In_opt_
+    PWDF_OBJECT_ATTRIBUTES PipesAttributes,
+    _In_
+    PWDF_USB_INTERFACE_SELECT_SETTING_PARAMS Params
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFUSBINTERFACESELECTSETTING) WdfVersion.Functions.pfnWdfUsbInterfaceSelectSetting)(DriverGlobals, UsbInterface, PipesAttributes, Params);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfUsbInterfaceGetEndpointInformation)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBINTERFACE UsbInterface,
+    _In_
+    UCHAR SettingIndex,
+    _In_
+    UCHAR EndpointIndex,
+    _Out_
+    PWDF_USB_PIPE_INFORMATION EndpointInfo
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFUSBINTERFACEGETENDPOINTINFORMATION) WdfVersion.Functions.pfnWdfUsbInterfaceGetEndpointInformation)(DriverGlobals, UsbInterface, SettingIndex, EndpointIndex, EndpointInfo);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+WDFUSBINTERFACE
+VFWDFEXPORT(WdfUsbTargetDeviceGetInterface)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBDEVICE UsbDevice,
+    _In_
+    UCHAR InterfaceIndex
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFUSBTARGETDEVICEGETINTERFACE) WdfVersion.Functions.pfnWdfUsbTargetDeviceGetInterface)(DriverGlobals, UsbDevice, InterfaceIndex);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+BYTE
+VFWDFEXPORT(WdfUsbInterfaceGetConfiguredSettingIndex)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBINTERFACE Interface
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFUSBINTERFACEGETCONFIGUREDSETTINGINDEX) WdfVersion.Functions.pfnWdfUsbInterfaceGetConfiguredSettingIndex)(DriverGlobals, Interface);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+BYTE
+VFWDFEXPORT(WdfUsbInterfaceGetNumConfiguredPipes)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBINTERFACE UsbInterface
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFUSBINTERFACEGETNUMCONFIGUREDPIPES) WdfVersion.Functions.pfnWdfUsbInterfaceGetNumConfiguredPipes)(DriverGlobals, UsbInterface);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+WDFUSBPIPE
+VFWDFEXPORT(WdfUsbInterfaceGetConfiguredPipe)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFUSBINTERFACE UsbInterface,
+    _In_
+    UCHAR PipeIndex,
+    _Out_opt_
+    PWDF_USB_PIPE_INFORMATION PipeInfo
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFUSBINTERFACEGETCONFIGUREDPIPE) WdfVersion.Functions.pfnWdfUsbInterfaceGetConfiguredPipe)(DriverGlobals, UsbInterface, PipeIndex, PipeInfo);
+}
+
+WDFAPI
+VOID
+VFWDFEXPORT(WdfVerifierDbgBreakPoint)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFVERIFIERDBGBREAKPOINT) WdfVersion.Functions.pfnWdfVerifierDbgBreakPoint)(DriverGlobals);
+}
+
+WDFAPI
+VOID
+VFWDFEXPORT(WdfVerifierKeBugCheck)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    ULONG BugCheckCode,
+    _In_
+    ULONG_PTR BugCheckParameter1,
+    _In_
+    ULONG_PTR BugCheckParameter2,
+    _In_
+    ULONG_PTR BugCheckParameter3,
+    _In_
+    ULONG_PTR BugCheckParameter4
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFVERIFIERKEBUGCHECK) WdfVersion.Functions.pfnWdfVerifierKeBugCheck)(DriverGlobals, BugCheckCode, BugCheckParameter1, BugCheckParameter2, BugCheckParameter3, BugCheckParameter4);
+}
+
+WDFAPI
+PVOID
+VFWDFEXPORT(WdfGetTriageInfo)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFGETTRIAGEINFO) WdfVersion.Functions.pfnWdfGetTriageInfo)(DriverGlobals);
+}
+
+_Must_inspect_result_
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+NTSTATUS
+VFWDFEXPORT(WdfWorkItemCreate)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    PWDF_WORKITEM_CONFIG Config,
+    _In_
+    PWDF_OBJECT_ATTRIBUTES Attributes,
+    _Out_
+    WDFWORKITEM* WorkItem
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFWORKITEMCREATE) WdfVersion.Functions.pfnWdfWorkItemCreate)(DriverGlobals, Config, Attributes, WorkItem);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfWorkItemEnqueue)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFWORKITEM WorkItem
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFWORKITEMENQUEUE) WdfVersion.Functions.pfnWdfWorkItemEnqueue)(DriverGlobals, WorkItem);
+}
+
+_IRQL_requires_max_(DISPATCH_LEVEL)
+WDFAPI
+WDFOBJECT
+VFWDFEXPORT(WdfWorkItemGetParentObject)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFWORKITEM WorkItem
+    )
+{
+    PAGED_CODE_LOCKED();
+    return ((PFN_WDFWORKITEMGETPARENTOBJECT) WdfVersion.Functions.pfnWdfWorkItemGetParentObject)(DriverGlobals, WorkItem);
+}
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+WDFAPI
+VOID
+VFWDFEXPORT(WdfWorkItemFlush)(
+    _In_
+    PWDF_DRIVER_GLOBALS DriverGlobals,
+    _In_
+    WDFWORKITEM WorkItem
+    )
+{
+    PAGED_CODE_LOCKED();
+    ((PFN_WDFWORKITEMFLUSH) WdfVersion.Functions.pfnWdfWorkItemFlush)(DriverGlobals, WorkItem);
+}
+
+