mirror of
https://github.com/reactos/reactos.git
synced 2025-03-10 10:14:44 +00:00
416 lines
7.2 KiB
C++
416 lines
7.2 KiB
C++
/*++
|
|
|
|
Copyright (c) Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
FxIoQueueCallbacks.h
|
|
|
|
Abstract:
|
|
|
|
This module implements the I/O package queue object callbacks
|
|
|
|
Author:
|
|
|
|
|
|
|
|
|
|
Environment:
|
|
|
|
Both kernel and user mode
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#ifndef _FXIOQUEUECALLBACKS_H_
|
|
#define _FXIOQUEUECALLBACKS_H_
|
|
|
|
//
|
|
// These delegates are in a seperate file since there are many
|
|
//
|
|
|
|
//
|
|
// EvtIoDefault callback delegate
|
|
//
|
|
class FxIoQueueIoDefault : public FxLockedCallback {
|
|
|
|
public:
|
|
PFN_WDF_IO_QUEUE_IO_DEFAULT Method;
|
|
|
|
FxIoQueueIoDefault(
|
|
VOID
|
|
) :
|
|
FxLockedCallback()
|
|
{
|
|
Method = NULL;
|
|
}
|
|
|
|
void
|
|
Invoke(
|
|
__in WDFQUEUE Queue,
|
|
__in WDFREQUEST Request
|
|
)
|
|
{
|
|
if (Method != NULL) {
|
|
KIRQL irql = 0;
|
|
|
|
CallbackStart(&irql);
|
|
Method(Queue, Request);
|
|
CallbackEnd(irql);
|
|
}
|
|
}
|
|
};
|
|
|
|
|
|
//
|
|
// EvtIoStop callback delegate
|
|
//
|
|
class FxIoQueueIoStop : public FxLockedCallback {
|
|
|
|
public:
|
|
PFN_WDF_IO_QUEUE_IO_STOP Method;
|
|
|
|
FxIoQueueIoStop(
|
|
VOID
|
|
) :
|
|
FxLockedCallback()
|
|
{
|
|
Method = NULL;
|
|
}
|
|
|
|
void
|
|
Invoke(
|
|
__in WDFQUEUE Queue,
|
|
__in WDFREQUEST Request,
|
|
__in ULONG ActionFlags
|
|
)
|
|
{
|
|
if (Method != NULL) {
|
|
KIRQL irql = 0;
|
|
|
|
CallbackStart(&irql);
|
|
Method(Queue, Request, ActionFlags);
|
|
CallbackEnd(irql);
|
|
}
|
|
}
|
|
};
|
|
|
|
//
|
|
// EvtIoResume callback delegate
|
|
//
|
|
class FxIoQueueIoResume : public FxLockedCallback {
|
|
|
|
public:
|
|
PFN_WDF_IO_QUEUE_IO_RESUME Method;
|
|
|
|
FxIoQueueIoResume(
|
|
VOID
|
|
) :
|
|
FxLockedCallback()
|
|
{
|
|
Method = NULL;
|
|
}
|
|
|
|
void
|
|
Invoke(
|
|
__in WDFQUEUE Queue,
|
|
__in WDFREQUEST Request
|
|
)
|
|
{
|
|
if (Method != NULL) {
|
|
KIRQL irql = 0;
|
|
|
|
CallbackStart(&irql);
|
|
Method(Queue, Request);
|
|
CallbackEnd(irql);
|
|
}
|
|
}
|
|
};
|
|
|
|
//
|
|
// EvtIoRead callback delegate
|
|
//
|
|
class FxIoQueueIoRead : public FxLockedCallback {
|
|
|
|
public:
|
|
PFN_WDF_IO_QUEUE_IO_READ Method;
|
|
|
|
FxIoQueueIoRead(
|
|
VOID
|
|
) :
|
|
FxLockedCallback()
|
|
{
|
|
Method = NULL;
|
|
}
|
|
|
|
void
|
|
Invoke(
|
|
__in WDFQUEUE Queue,
|
|
__in WDFREQUEST Request,
|
|
__in ULONG Length
|
|
)
|
|
{
|
|
if (Method != NULL) {
|
|
KIRQL irql = 0;
|
|
|
|
CallbackStart(&irql);
|
|
Method(Queue, Request, Length);
|
|
CallbackEnd(irql);
|
|
}
|
|
}
|
|
};
|
|
|
|
//
|
|
// EvtIoWrite callback delegate
|
|
//
|
|
class FxIoQueueIoWrite : public FxLockedCallback {
|
|
|
|
public:
|
|
PFN_WDF_IO_QUEUE_IO_WRITE Method;
|
|
|
|
FxIoQueueIoWrite(
|
|
VOID
|
|
) :
|
|
FxLockedCallback()
|
|
{
|
|
Method = NULL;
|
|
}
|
|
|
|
void
|
|
Invoke(
|
|
__in WDFQUEUE Queue,
|
|
__in WDFREQUEST Request,
|
|
__in ULONG Length
|
|
)
|
|
{
|
|
if (Method != NULL) {
|
|
KIRQL irql = 0;
|
|
|
|
CallbackStart(&irql);
|
|
Method(Queue, Request, Length);
|
|
CallbackEnd(irql);
|
|
}
|
|
}
|
|
};
|
|
|
|
//
|
|
// EvtIoIoctl callback delegate
|
|
//
|
|
class FxIoQueueIoDeviceControl : public FxLockedCallback {
|
|
|
|
public:
|
|
PFN_WDF_IO_QUEUE_IO_DEVICE_CONTROL Method;
|
|
|
|
FxIoQueueIoDeviceControl(
|
|
VOID
|
|
) :
|
|
FxLockedCallback()
|
|
{
|
|
Method = NULL;
|
|
}
|
|
|
|
void
|
|
Invoke(
|
|
__in WDFQUEUE Queue,
|
|
__in WDFREQUEST Request,
|
|
__in ULONG OutputBufferLength,
|
|
__in ULONG InputBufferLength,
|
|
__in ULONG IoControlCode
|
|
)
|
|
{
|
|
if (Method != NULL) {
|
|
KIRQL irql = 0;
|
|
|
|
CallbackStart(&irql);
|
|
Method(
|
|
Queue,
|
|
Request,
|
|
OutputBufferLength,
|
|
InputBufferLength,
|
|
IoControlCode
|
|
);
|
|
CallbackEnd(irql);
|
|
}
|
|
}
|
|
};
|
|
|
|
//
|
|
// EvtIoInternalIoctl callback delegate
|
|
//
|
|
class FxIoQueueIoInternalDeviceControl : public FxLockedCallback {
|
|
|
|
public:
|
|
PFN_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL Method;
|
|
|
|
FxIoQueueIoInternalDeviceControl(
|
|
VOID
|
|
) :
|
|
FxLockedCallback()
|
|
{
|
|
Method = NULL;
|
|
}
|
|
|
|
void
|
|
Invoke(
|
|
__in WDFQUEUE Queue,
|
|
__in WDFREQUEST Request,
|
|
__in ULONG OutputBufferLength,
|
|
__in ULONG InputBufferLength,
|
|
__in ULONG IoInternalControlCode
|
|
)
|
|
{
|
|
if (Method != NULL) {
|
|
KIRQL irql = 0;
|
|
|
|
CallbackStart(&irql);
|
|
Method(
|
|
Queue,
|
|
Request,
|
|
OutputBufferLength,
|
|
InputBufferLength,
|
|
IoInternalControlCode
|
|
);
|
|
CallbackEnd(irql);
|
|
}
|
|
}
|
|
};
|
|
|
|
//
|
|
// EvtIoQueueStatus callback delegate
|
|
//
|
|
class FxIoQueueIoState : public FxLockedCallback {
|
|
|
|
public:
|
|
PFN_WDF_IO_QUEUE_STATE Method;
|
|
|
|
FxIoQueueIoState(
|
|
VOID
|
|
) :
|
|
FxLockedCallback()
|
|
{
|
|
Method = NULL;
|
|
}
|
|
|
|
void
|
|
Invoke(
|
|
__in WDFQUEUE Queue,
|
|
__in WDFCONTEXT Context
|
|
)
|
|
{
|
|
if (Method != NULL) {
|
|
KIRQL irql = 0;
|
|
|
|
CallbackStart(&irql);
|
|
Method(Queue, Context);
|
|
CallbackEnd(irql);
|
|
}
|
|
}
|
|
};
|
|
|
|
class FxIoQueueIoCanceledOnQueue : public FxLockedCallback {
|
|
|
|
public:
|
|
PFN_WDF_IO_QUEUE_IO_CANCELED_ON_QUEUE Method;
|
|
|
|
FxIoQueueIoCanceledOnQueue(
|
|
VOID
|
|
) :
|
|
FxLockedCallback()
|
|
{
|
|
Method = NULL;
|
|
}
|
|
|
|
void
|
|
Invoke(
|
|
__in WDFQUEUE Queue,
|
|
__in WDFREQUEST Request
|
|
)
|
|
{
|
|
if (Method != NULL) {
|
|
KIRQL irql = 0;
|
|
|
|
CallbackStart(&irql);
|
|
Method(Queue, Request);
|
|
CallbackEnd(irql);
|
|
}
|
|
}
|
|
};
|
|
|
|
|
|
class FxIoQueueForwardProgressAllocateResourcesReserved : public FxCallback {
|
|
|
|
public:
|
|
PFN_WDF_IO_ALLOCATE_RESOURCES_FOR_RESERVED_REQUEST Method;
|
|
|
|
FxIoQueueForwardProgressAllocateResourcesReserved(
|
|
VOID
|
|
) :
|
|
FxCallback()
|
|
{
|
|
Method = NULL;
|
|
}
|
|
|
|
_Must_inspect_result_
|
|
NTSTATUS
|
|
Invoke(
|
|
__in WDFQUEUE Queue,
|
|
__in WDFREQUEST Request
|
|
)
|
|
{
|
|
ASSERT(Method != NULL);
|
|
return Method(Queue, Request);
|
|
}
|
|
};
|
|
|
|
class FxIoQueueForwardProgressAllocateResources : public FxCallback {
|
|
|
|
public:
|
|
PFN_WDF_IO_ALLOCATE_REQUEST_RESOURCES Method;
|
|
|
|
FxIoQueueForwardProgressAllocateResources(
|
|
VOID
|
|
) :
|
|
FxCallback()
|
|
{
|
|
Method = NULL;
|
|
}
|
|
|
|
_Must_inspect_result_
|
|
NTSTATUS
|
|
Invoke(
|
|
__in WDFQUEUE Queue,
|
|
__in WDFREQUEST Request
|
|
)
|
|
{
|
|
ASSERT(Method != NULL);
|
|
return Method(Queue, Request);
|
|
}
|
|
};
|
|
|
|
class FxIoQueueForwardProgressExamineIrp : public FxCallback {
|
|
public:
|
|
PFN_WDF_IO_WDM_IRP_FOR_FORWARD_PROGRESS Method;
|
|
|
|
FxIoQueueForwardProgressExamineIrp(
|
|
VOID
|
|
) :
|
|
FxCallback()
|
|
{
|
|
Method = NULL;
|
|
}
|
|
|
|
WDF_IO_FORWARD_PROGRESS_ACTION
|
|
Invoke(
|
|
__in WDFQUEUE Queue,
|
|
__in PIRP Irp
|
|
)
|
|
{
|
|
ASSERT(Method != NULL);
|
|
return Method(Queue, Irp);
|
|
}
|
|
};
|
|
|
|
|
|
|
|
#endif // _FXIOQUEUECALLBACKS_H_
|