reactos/sdk/lib/drivers/wdf/shared/inc/private/common/fxirpdynamicdispatchinfo.hpp
Victor Perevertkin 8a978a179f
[WDF] Add Windows Driver Framework files
Takern from Microsoft GitHub repo:
d9c6040fe9

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

94 lines
2 KiB
C++

//
// Copyright (C) Microsoft. All rights reserved.
//
#ifndef _FXIRPDYNAMICDISPATCHINFO_H_
#define _FXIRPDYNAMICDISPATCHINFO_H_
//
// Placeholder macro for a no-op
//
#ifndef DO_NOTHING
#define DO_NOTHING() (0)
#endif
struct FxIrpDynamicDispatchInfo : public FxStump {
FxIrpDynamicDispatchInfo() :
CxDeviceInfo(NULL)
{
InitializeListHead(&ListEntry);
RtlZeroMemory(Dispatch, sizeof(Dispatch));
}
~FxIrpDynamicDispatchInfo()
{
ASSERT(IsListEmpty(&ListEntry));
}
enum DynamicDispatchType {
DynamicDispatchRead = 0,
DynamicDispatchWrite = 1,
DynamicDispatchIoctl = 2,
DynamicDispatchInternalIoctl = 3,
DynamicDispatchMax
};
struct Info {
Info() :
EvtDeviceDynamicDispatch(NULL),
DriverContext(NULL)
{
}
~Info()
{
DO_NOTHING();
}
PFN_WDFDEVICE_WDM_IRP_DISPATCH EvtDeviceDynamicDispatch;
WDFCONTEXT DriverContext;
};
__inline
static
int
Mj2Index(
UCHAR MajorFunction
)
{
DynamicDispatchType type;
switch (MajorFunction) {
case IRP_MJ_READ:
type = DynamicDispatchRead;
break;
case IRP_MJ_WRITE:
type = DynamicDispatchWrite;
break;
case IRP_MJ_DEVICE_CONTROL:
type = DynamicDispatchIoctl;
break;
case IRP_MJ_INTERNAL_DEVICE_CONTROL:
type = DynamicDispatchInternalIoctl;
break;
default:
type = DynamicDispatchMax;
break;
}
return (int)type;
}
LIST_ENTRY ListEntry;
Info Dispatch[DynamicDispatchMax];
//
// If not null, weak ref to class extension info struct.
//
FxCxDeviceInfo* CxDeviceInfo;
};
#endif // _FXIRPDYNAMICDISPATCHINFO_H_