mirror of
https://github.com/reactos/reactos.git
synced 2025-03-10 10:14:44 +00:00
200 lines
3.6 KiB
C++
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
|
|
|