reactos/sdk/lib/drivers/wdf/shared/inc/private/common/fxpkggeneral.hpp
Victor Perevertkin 1f377076d7
[WDF] Fix KMDF so it can compile with ReactOS SDK
Not all files are included, but these are necessary to compile cdrom driver.
So far it can only be statically linked with drivers, a proper
implementation requires wdfldr helper driver
2020-11-03 00:06:27 +03:00

230 lines
4.3 KiB
C++

/*++
Copyright (c) Microsoft Corporation
Module Name:
FxPkgGeneral.hpp
Abstract:
This module implements a package to handle general dispath entry points
such as IRP_MJ_CREATE and IRP_MJ_CLOSE.
Author:
Environment:
Both kernel and user mode
Revision History:
--*/
#ifndef _FXPKGGENERAL_H_
#define _FXPKGGENERAL_H_
#include "fxfileobjectcallbacks.hpp"
class FxShutDown : public FxCallback {
public:
PFN_WDF_DEVICE_SHUTDOWN_NOTIFICATION m_Method;
FxShutDown(
VOID
) :
FxCallback(),
m_Method(NULL)
{
}
VOID
Invoke(
__in WDFDEVICE Device
)
{
if (m_Method != NULL) {
CallbackStart();
m_Method(Device);
CallbackEnd();
}
}
};
#define FX_PKG_GENERAL_FLAG_CX_INFO 0x00000001
#define FX_PKG_GENERAL_FLAG_CLIENT_INFO 0x00000002
#define FX_PKG_GENERAL_FLAG_CX_CREATE 0x00000004
#define FX_PKG_GENERAL_FLAG_CLIENT_CREATE 0x00000008
#define FX_PKG_GENERAL_FLAG_CREATE \
(FX_PKG_GENERAL_FLAG_CX_CREATE | FX_PKG_GENERAL_FLAG_CLIENT_CREATE)
class FxPkgGeneral : public FxPackage {
private:
//
// FileObject attributes
//
LONG m_OpenHandleCount;
//
// List of file objects info (driver and cx).
//
LIST_ENTRY m_FileObjectInfoHeadList;
FxIoQueue* m_DefaultQueueForCreates;
FxIoQueue* m_DriverCreatedQueue;
//
// Generic file object flags.
//
ULONG m_Flags;
//
// Execution and synchronization for cx and client driver.
//
WDF_EXECUTION_LEVEL m_ExecutionLevel;
WDF_SYNCHRONIZATION_SCOPE m_SynchronizationScope;
//
// This pointer allows the proper lock to be acquired
// based on the configuration with a minimal of runtime
// checks. This is configured by ConfigureConstraints().
// We basically inherit device's lock.
//
FxCallbackLock* m_CallbackLockPtr;
FxObject* m_CallbackLockObjectPtr;
FxShutDown m_EvtDeviceShutdown;
private:
_Must_inspect_result_
NTSTATUS
OnCreate(
__inout FxIrp* FxIrp
);
_Must_inspect_result_
NTSTATUS
OnClose(
__inout FxIrp* FxIrp
);
BOOLEAN
AcquireRemoveLockForClose(
__inout FxIrp* FxIrp
);
_Must_inspect_result_
NTSTATUS
OnCleanup(
__inout FxIrp* FxIrp
);
_Must_inspect_result_
NTSTATUS
OnShutdown(
__inout FxIrp* FxIrp
);
_Must_inspect_result_
NTSTATUS
ConfigureConstraints(
__in PLIST_ENTRY FileObjInfoList
);
_Must_inspect_result_
NTSTATUS
ConfigureFileObjectClass(
__in PLIST_ENTRY FileObjInfoList
);
VOID
DecrementOpenHandleCount(
VOID
);
_Must_inspect_result_
NTSTATUS
ForwardCreateRequest(
__in FxIrp* FxIrp,
__in MdCompletionRoutine CompletionRoutine,
__in PVOID Context
);
static
MdCompletionRoutineType _CreateCompletionRoutine;
static
MdCompletionRoutineType _CreateCompletionRoutine2;
public:
FxPkgGeneral(
__in PFX_DRIVER_GLOBALS FxDriverGlobals,
__in CfxDevice *Device
);
~FxPkgGeneral();
_Must_inspect_result_
virtual
NTSTATUS
Dispatch(
__inout MdIrp Irp
);
_Must_inspect_result_
NTSTATUS
Initialize(
__in PWDFDEVICE_INIT DeviceInit
);
_Must_inspect_result_
NTSTATUS
PostCreateDeviceInitialize(
__in PWDFDEVICE_INIT Init
);
VOID
CreateCompleted(
__in FxIrp *Irp
);
_Must_inspect_result_
NTSTATUS
ConfigureForwarding(
__in FxIoQueue *FxQueue
);
BOOLEAN
CanDestroyControlDevice(
VOID
);
VOID
GetConstraintsHelper(
__out_opt WDF_EXECUTION_LEVEL* ExecutionLevel,
__out_opt WDF_SYNCHRONIZATION_SCOPE* SynchronizationScope
) ;
FxCallbackLock*
GetCallbackLockPtrHelper(
__deref_out_opt FxObject** LockObject
);
__inline
FxIoQueue*
GetDeafultInternalCreateQueue(
)
{
return m_DefaultQueueForCreates;
}
};
#endif // _FXPKGGENERAL_H_