reactos/sdk/lib/drivers/wdf/shared/inc/private/common/fxfileobjectcallbacks.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

200 lines
3.6 KiB
C++

/*++
Copyright (c) Microsoft Corporation
Module Name:
FxFileObjectCallbacks.h
Abstract:
This module implements the I/O package queue object callbacks
Author:
Environment:
Both kernel and user mode
Revision History:
--*/
#ifndef _FXFILEOBJECTCALLBACKS_H
#define _FXFILEOBJECTCALLBACKS_H
//
// EvtDeviceFileCreate callback delegate
//
class FxFileObjectFileCreate : public FxLockedCallback {
public:
PFN_WDF_DEVICE_FILE_CREATE Method;
FxFileObjectFileCreate(
VOID
) :
FxLockedCallback()
{
Method = NULL;
}
VOID
Invoke(
__in WDFDEVICE Device,
__in WDFREQUEST Request,
__in_opt WDFFILEOBJECT FileObject
)
{
if (Method != NULL) {
KIRQL irql = 0;
CallbackStart(&irql);
Method(Device, Request, FileObject);
CallbackEnd(irql);
}
}
};
//
// EvtFileCleanup callback delegate
//
class FxFileObjectFileCleanup : public FxLockedCallback {
public:
PFN_WDF_FILE_CLEANUP Method;
FxFileObjectFileCleanup(
VOID
) :
FxLockedCallback()
{
Method = NULL;
}
void
Invoke(
__in_opt WDFFILEOBJECT FileObject
)
{
if (Method != NULL) {
KIRQL irql = 0;
CallbackStart(&irql);
Method(FileObject);
CallbackEnd(irql);
}
}
};
//
// EvtFileClose callback delegate
//
class FxFileObjectFileClose : public FxLockedCallback {
public:
PFN_WDF_FILE_CLOSE Method;
FxFileObjectFileClose(
VOID
) :
FxLockedCallback()
{
Method = NULL;
}
void
Invoke(
__in_opt WDFFILEOBJECT FileObject
)
{
if (Method != NULL) {
KIRQL irql = 0;
CallbackStart(&irql);
Method(FileObject);
CallbackEnd(irql);
}
}
};
//
// EvtDeviceFileCreate callback delegate
//
class FxCxFileObjectFileCreate : public FxLockedCallback {
public:
PFN_WDFCX_DEVICE_FILE_CREATE Method;
FxCxFileObjectFileCreate(
VOID
) :
FxLockedCallback()
{
Method = NULL;
}
BOOLEAN
Invoke(
__in WDFDEVICE Device,
__in WDFREQUEST Request,
__in_opt WDFFILEOBJECT FileObject
)
{
BOOLEAN claimed = FALSE;
if (Method != NULL) {
KIRQL irql = 0;
CallbackStart(&irql);
claimed = Method(Device, Request, FileObject);
CallbackEnd(irql);
}
return claimed;
}
};
//
// Collection of file-object callbacks.
//
struct FxFileObjectInfo : public FxStump {
FxFileObjectInfo() :
FileObjectClass(WdfFileObjectInvalid),
AutoForwardCleanupClose(WdfUseDefault),
ClassExtension(FALSE),
CxDeviceInfo(NULL)
{
InitializeListHead(&ListEntry);
RtlZeroMemory(&Attributes, sizeof(Attributes));
}
~FxFileObjectInfo()
{
ASSERT(IsListEmpty(&ListEntry));
}
LIST_ENTRY ListEntry;
FxFileObjectFileCreate EvtFileCreate;
FxCxFileObjectFileCreate EvtCxFileCreate;
FxFileObjectFileCleanup EvtFileCleanup;
FxFileObjectFileClose EvtFileClose;
WDF_FILEOBJECT_CLASS FileObjectClass;
WDF_OBJECT_ATTRIBUTES Attributes;
WDF_TRI_STATE AutoForwardCleanupClose;
BOOLEAN ClassExtension;
FxCxDeviceInfo* CxDeviceInfo;
};
#endif // _FXFILEOBJECTCALLBACKS_H