Initial commit
This commit is contained in:
@@ -0,0 +1,198 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) Nefarius Software Solutions e.U. All rights reserved.
|
||||
Licensed under the MIT license.
|
||||
|
||||
Module Name:
|
||||
|
||||
Dmf_BusFilter.h
|
||||
|
||||
Abstract:
|
||||
|
||||
Companion file to Dmf_BusFilter.c.
|
||||
|
||||
Environment:
|
||||
|
||||
Kernel-mode Driver Framework
|
||||
|
||||
--*/
|
||||
|
||||
#pragma once
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Bus Filter support
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
#if defined(DMF_KERNEL_MODE)
|
||||
|
||||
// Declare an opaque handle representing a filtered PDO.
|
||||
//
|
||||
DECLARE_HANDLE(DMFBUSCHILDDEVICE);
|
||||
|
||||
typedef
|
||||
_Function_class_(EVT_DMF_BusFilter_PreBusDeviceAdd)
|
||||
_IRQL_requires_same_
|
||||
_IRQL_requires_max_(PASSIVE_LEVEL)
|
||||
NTSTATUS
|
||||
EVT_DMF_BusFilter_PreBusDeviceAdd(
|
||||
_In_ WDFDRIVER Driver,
|
||||
_Inout_ PWDFDEVICE_INIT DeviceInit,
|
||||
_Out_ WDF_OBJECT_ATTRIBUTES* Attributes,
|
||||
_Outptr_result_maybenull_ PDMFDEVICE_INIT* DmfDeviceInit
|
||||
);
|
||||
|
||||
typedef
|
||||
_Function_class_(EVT_DMF_BusFilter_PostBusDeviceAdd)
|
||||
_IRQL_requires_same_
|
||||
_IRQL_requires_max_(PASSIVE_LEVEL)
|
||||
NTSTATUS
|
||||
EVT_DMF_BusFilter_PostBusDeviceAdd(
|
||||
_In_ WDFDEVICE Device,
|
||||
_In_opt_ PDMFDEVICE_INIT DmfDeviceInit
|
||||
);
|
||||
|
||||
typedef
|
||||
_Function_class_(EVT_DMF_BusFilter_DeviceAdd)
|
||||
_IRQL_requires_max_(APC_LEVEL)
|
||||
_IRQL_requires_same_
|
||||
NTSTATUS
|
||||
EVT_DMF_BusFilter_DeviceAdd(
|
||||
_In_ WDFDEVICE Device,
|
||||
_In_ DMFBUSCHILDDEVICE ChildDevice
|
||||
);
|
||||
|
||||
typedef
|
||||
_Function_class_(EVT_DMF_BusFilter_DeviceRemove)
|
||||
_IRQL_requires_max_(PASSIVE_LEVEL)
|
||||
_IRQL_requires_same_
|
||||
VOID
|
||||
EVT_DMF_BusFilter_DeviceRemove(
|
||||
_In_ WDFDEVICE Device,
|
||||
_In_ DMFBUSCHILDDEVICE ChildDevice
|
||||
);
|
||||
|
||||
typedef
|
||||
_Function_class_(EVT_DMF_BusFilter_DeviceStarted)
|
||||
_IRQL_requires_max_(PASSIVE_LEVEL)
|
||||
_IRQL_requires_same_
|
||||
VOID
|
||||
EVT_DMF_BusFilter_DeviceStarted(
|
||||
_In_ DMFBUSCHILDDEVICE ChildDevice,
|
||||
_In_ IRP* Irp
|
||||
);
|
||||
|
||||
typedef
|
||||
_Function_class_(EVT_DMF_BusFilter_DeviceEnumerated)
|
||||
_IRQL_requires_max_(PASSIVE_LEVEL)
|
||||
_IRQL_requires_same_
|
||||
VOID
|
||||
EVT_DMF_BusFilter_DeviceEnumerated(
|
||||
_In_ DMFBUSCHILDDEVICE ChildDevice,
|
||||
_In_ IRP* Irp
|
||||
);
|
||||
|
||||
typedef
|
||||
_Function_class_(EVT_DMF_BusFilter_DeviceQueryId)
|
||||
_IRQL_requires_max_(PASSIVE_LEVEL)
|
||||
_IRQL_requires_same_
|
||||
BOOLEAN
|
||||
EVT_DMF_BusFilter_DeviceQueryId(
|
||||
_In_ DMFBUSCHILDDEVICE ChildDevice,
|
||||
_In_ IRP* Irp
|
||||
);
|
||||
|
||||
typedef
|
||||
_Function_class_(EVT_DMF_BusFilter_DeviceQueryInterface)
|
||||
_IRQL_requires_max_(PASSIVE_LEVEL)
|
||||
_IRQL_requires_same_
|
||||
BOOLEAN
|
||||
EVT_DMF_BusFilter_DeviceQueryInterface(
|
||||
_In_ DMFBUSCHILDDEVICE ChildDevice,
|
||||
_In_ IRP* Irp
|
||||
);
|
||||
|
||||
typedef struct
|
||||
{
|
||||
// The driver object.
|
||||
//
|
||||
_In_ DRIVER_OBJECT* DriverObject;
|
||||
|
||||
// The device type.
|
||||
//
|
||||
_In_ DEVICE_TYPE DeviceType;
|
||||
|
||||
// The device characteristics.
|
||||
//
|
||||
_In_ ULONG DeviceCharacteristics;
|
||||
|
||||
// Called before bus device object is created.
|
||||
//
|
||||
_In_opt_ EVT_DMF_BusFilter_PreBusDeviceAdd* EvtPreBusDeviceAdd;
|
||||
|
||||
// Called after bus device object was created.
|
||||
//
|
||||
_In_opt_ EVT_DMF_BusFilter_PostBusDeviceAdd* EvtPostBusDeviceAdd;
|
||||
|
||||
// Called when child proxy device was created.
|
||||
//
|
||||
_In_opt_ EVT_DMF_BusFilter_DeviceAdd* EvtDeviceAdd;
|
||||
|
||||
// Called when child proxy device gets removed.
|
||||
//
|
||||
_In_opt_ EVT_DMF_BusFilter_DeviceRemove* EvtDeviceRemove;
|
||||
|
||||
// Called when IRP_MN_START_DEVICE is set to child device.
|
||||
//
|
||||
_In_opt_ EVT_DMF_BusFilter_DeviceStarted* EvtDeviceStarted;
|
||||
|
||||
// Called when IRP_MN_DEVICE_ENUMERATED is sent to child device.
|
||||
//
|
||||
_In_opt_ EVT_DMF_BusFilter_DeviceEnumerated* EvtDeviceEnumerated;
|
||||
|
||||
// Called when IRP_MN_QUERY_ID is sent to child device.
|
||||
//
|
||||
_In_opt_ EVT_DMF_BusFilter_DeviceQueryId* EvtDeviceQueryId;
|
||||
|
||||
// Called when IRP_MN_QUERY_INTERFACE is sent to child device.
|
||||
//
|
||||
_In_opt_ EVT_DMF_BusFilter_DeviceQueryInterface* EvtDeviceQueryInterface;
|
||||
} DMF_BusFilter_CONFIG;
|
||||
|
||||
__forceinline
|
||||
VOID
|
||||
DMF_BusFilter_CONFIG_INIT(
|
||||
_Out_ DMF_BusFilter_CONFIG* BusFilterConfig,
|
||||
_In_ PDRIVER_OBJECT DriverObject
|
||||
)
|
||||
{
|
||||
RtlZeroMemory(BusFilterConfig,
|
||||
sizeof(DMF_BusFilter_CONFIG));
|
||||
BusFilterConfig->DriverObject = DriverObject;
|
||||
}
|
||||
|
||||
_IRQL_requires_max_(PASSIVE_LEVEL)
|
||||
_Must_inspect_result_
|
||||
NTSTATUS
|
||||
DMF_BusFilter_Initialize(
|
||||
_In_ DMF_BusFilter_CONFIG* BusFilterConfig
|
||||
);
|
||||
|
||||
EVT_WDF_DRIVER_DEVICE_ADD DMF_BusFilter_DeviceAdd;
|
||||
|
||||
PDEVICE_OBJECT
|
||||
DMF_BusFilter_WdmDeviceObjectGet(
|
||||
_In_ DMFBUSCHILDDEVICE ChildDevice
|
||||
);
|
||||
|
||||
PDEVICE_OBJECT
|
||||
DMF_BusFilter_WdmAttachedDeviceGet(
|
||||
_In_ DMFBUSCHILDDEVICE ChildDevice
|
||||
);
|
||||
|
||||
PDEVICE_OBJECT
|
||||
DMF_BusFilter_WdmPhysicalDeviceGet(
|
||||
_In_ DMFBUSCHILDDEVICE ChildDevice
|
||||
);
|
||||
|
||||
#endif // defined(DMF_KERNEL_MODE)
|
||||
Reference in New Issue
Block a user