reactos/sdk/lib/drivers/wdf/shared/inc/private/common/fxrequestcontext.hpp

157 lines
2.8 KiB
C++
Raw Normal View History

/*++
Copyright (c) Microsoft Corporation. All rights reserved.
Module Name:
FxRequestContext.hpp
Abstract:
Defines the base structure for contexts associated with FxRequest
Author:
Environment:
Both kernel and user mode
Revision History:
--*/
#ifndef _FXREQUESTCONTEXT_H_
#define _FXREQUESTCONTEXT_H_
typedef UCHAR FX_REQUEST_CONTEXT_TYPE;
//
// IO_STACK_LOCATION::Parameters.Others.Argument3 is taken up by the IOCTL
// value, so there are only 3
//
#define FX_REQUEST_NUM_OTHER_PARAMS (3)
//
// Here are all the derivations off of FxRequestContext
//
// FxIoContext
// FxInternalIoctlOthersContext
// FxUsbRequestContext
// +FxUsbDeviceVendorContext
// +FxUsbDeviceStatusContext
// +FxUsbDeviceFeatureContext
// +FxUsbPipeTransferContext
// +FxUsbUrbContext
// +FxUsbPipeRequestContext
// +FxUsbPipeControlTransferContext
//
typedef struct _FxInternalIoctlParams{
WDFMEMORY Argument1;
WDFMEMORY Argument2;
WDFMEMORY Argument4;
}FxInternalIoctlParams,*pFxInternalIoctlParams;
struct FxRequestContext : public FxStump {
FxRequestContext(
__in FX_REQUEST_CONTEXT_TYPE Type
);
virtual
~FxRequestContext(
VOID
);
virtual
VOID
Dispose(
VOID
)
{}
virtual
VOID
StoreAndReferenceMemory(
__in FxRequestBuffer* Buffer
);
virtual
VOID
ReleaseAndRestore(
__in FxRequestBase* Request
);
__inline
BOOLEAN
IsType(
__in FX_REQUEST_CONTEXT_TYPE Type
)
{
return m_RequestType == Type;
}
virtual
VOID
CopyParameters(
__in FxRequestBase* Request
)
{
UNREFERENCED_PARAMETER(Request);
}
VOID
FormatWriteParams(
__in_opt IFxMemory* WriteMemory,
__in_opt PWDFMEMORY_OFFSET WriteOffsets
);
VOID
FormatReadParams(
__in_opt IFxMemory* ReadMemory,
__in_opt PWDFMEMORY_OFFSET ReadOffsets
);
VOID
FormatOtherParams(
__in FxInternalIoctlParams *InternalIoctlParams
);
protected:
static
VOID
_StoreAndReferenceMemoryWorker(
__in PVOID Tag,
__deref_out_opt IFxMemory** PPMemory,
__in FxRequestBuffer* Buffer
);
VOID
__inline
InitCompletionParams(
VOID
)
{
WDF_REQUEST_COMPLETION_PARAMS_INIT(&m_CompletionParams);
m_CompletionParams.Type = WdfRequestTypeNoFormat;
}
public:
WDF_REQUEST_COMPLETION_PARAMS m_CompletionParams;
//
// Memory associated with the context that will be released when the
// FxRequestBase has been completed by the target.
//
IFxMemory* m_RequestMemory;
//
// RTTI replacement
//
FX_REQUEST_CONTEXT_TYPE m_RequestType;
};
#endif // _FXREQUESTCONTEXT_H_