reactos/sdk/lib/drivers/wdf/shared/enhancedverif/vfpriv.hpp

139 lines
2.9 KiB
C++
Raw Normal View History

/*++
Copyright (c) Microsoft Corporation. All rights reserved.
Module Name:
vfpriv.hpp
Abstract:
common header file for verifier
Author:
Environment:
user/kernel mode
Revision History:
--*/
#if FX_CORE_MODE==FX_CORE_KERNEL_MODE
#include "vfprivkm.hpp"
#else if ((FX_CORE_MODE)==(FX_CORE_USER_MODE))
#include "vfprivum.hpp"
#endif
extern "C" {
#include "fxdynamics.h"
}
#include "vfeventhooks.hpp"
#define FX_ENHANCED_VERIFIER_SECTION_NAME WDF_FX_VF_SECTION_NAME
#define GET_CONTEXT(_objectHandle, _type) \
(_type *)VfWdfObjectGetTypedContext(_objectHandle, WDF_GET_CONTEXT_TYPE_INFO(_type));
#define SET_HOOK_IF_CALLBACK_PRESENT(Source, Target, Name) \
if ((Source)-> ## Name != NULL) { \
(Target)-> ## Name = Vf ## Name; \
}
typedef struct _VF_HOOK_PROCESS_INFO {
//
// Return status of the DDI of called by hook routine.
// this will be returned by stub if it does not call the DDI (since
// hook already called.
//
ULONG DdiCallStatus;
//
// Whether kmdf lib needs to be called after hook functin returns
//
BOOLEAN DonotCallKmdfLib;
} VF_HOOK_PROCESS_INFO, *PVF_HOOK_PROCESS_INFO;
typedef struct _VF_COMMON_CONTEXT_HEADER {
PWDF_DRIVER_GLOBALS DriverGlobals;
} VF_COMMON_CONTEXT_HEADER, *PVF_COMMON_CONTEXT_HEADER;
typedef struct _VF_WDFDEVICECREATE_CONTEXT {
VF_COMMON_CONTEXT_HEADER CommonHeader;
WDF_PNPPOWER_EVENT_CALLBACKS PnpPowerEventCallbacksOriginal;
} VF_WDFDEVICECREATE_CONTEXT, *PVF_WDFDEVICECREATE_CONTEXT;
WDF_DECLARE_CONTEXT_TYPE(VF_WDFDEVICECREATE_CONTEXT);
typedef struct _VF_WDFIOQUEUECREATE_CONTEXT {
VF_COMMON_CONTEXT_HEADER CommonHeader;
WDF_IO_QUEUE_CONFIG IoQueueConfigOriginal;
} VF_WDFIOQUEUECREATE_CONTEXT, *PVF_WDFIOQUEUECREATE_CONTEXT;
WDF_DECLARE_CONTEXT_TYPE(VF_WDFIOQUEUECREATE_CONTEXT);
extern "C" {
_Must_inspect_result_
PVOID
FASTCALL
VfWdfObjectGetTypedContext(
__in
WDFOBJECT Handle,
__in
PCWDF_OBJECT_CONTEXT_TYPE_INFO TypeInfo
);
_Must_inspect_result_
NTSTATUS
VfAllocateContext(
__in PWDF_DRIVER_GLOBALS DriverGlobals,
__in PWDF_OBJECT_ATTRIBUTES Attributes,
__out PVOID* ContextHeader
);
_Must_inspect_result_
NTSTATUS
VfAddContextToHandle(
__in PVOID ContextHeader,
__in PWDF_OBJECT_ATTRIBUTES Attributes,
__in WDFOBJECT Handle,
__out_opt PVOID* Context
);
_Must_inspect_result_
NTSTATUS
AddEventHooksWdfDeviceCreate(
__inout PVF_HOOK_PROCESS_INFO HookProcessInfo,
__in PWDF_DRIVER_GLOBALS DriverGlobals,
__in PWDFDEVICE_INIT* DeviceInit,
__in PWDF_OBJECT_ATTRIBUTES DeviceAttributes,
__out WDFDEVICE* Device
);
_Must_inspect_result_
NTSTATUS
AddEventHooksWdfIoQueueCreate(
__inout PVF_HOOK_PROCESS_INFO HookProcessInfo,
__in PWDF_DRIVER_GLOBALS DriverGlobals,
__in WDFDEVICE Device,
__in PWDF_IO_QUEUE_CONFIG Config,
__in PWDF_OBJECT_ATTRIBUTES QueueAttributes,
__out WDFQUEUE* Queue
);
} // extern "C"