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

488 lines
8.5 KiB
C++

/*++
Copyright (c) Microsoft Corporation
Module Name:
FxPkgFdo.hpp
Abstract:
This module implements the pnp package for Fdo objects.
Author:
Environment:
Both kernel and user mode
Revision History:
--*/
#ifndef _FXPKGFDO_H_
#define _FXPKGFDO_H_
struct FxStaticChildDescription {
WDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER Header;
CfxDevice* Pdo;
};
class FxPkgFdo : public FxPkgPnp
{
public:
//
// Pnp Properties
//
FxChildList* m_DefaultDeviceList;
FxChildList* m_StaticDeviceList;
//
// Default target to the attached device in the stack
//
FxIoTarget* m_DefaultTarget;
//
// A virtual target to yourself. This allows a cx to send
// the client. It may also be used by the client to send IO to itself.
//
FxIoTargetSelf* m_SelfTarget;
private:
REENUMERATE_SELF_INTERFACE_STANDARD m_SurpriseRemoveAndReenumerateSelfInterface;
//
// The following structure contains the function pointer table
// for the "events" this package can raise.
//
FxPnpDeviceFilterResourceRequirements m_DeviceFilterAddResourceRequirements;
FxPnpDeviceFilterResourceRequirements m_DeviceFilterRemoveResourceRequirements;
FxPnpDeviceRemoveAddedResources m_DeviceRemoveAddedResources;
BOOLEAN m_Filter;
//
// Table of internal methods to handle PnP minor function codes.
//
static const PFN_PNP_POWER_CALLBACK m_FdoPnpFunctionTable[IRP_MN_SURPRISE_REMOVAL + 1];
//
// Table of internal methods to handle power minor function codes.
//
static const PFN_PNP_POWER_CALLBACK m_FdoPowerFunctionTable[IRP_MN_QUERY_POWER + 1];
FxPkgFdo(
__in PFX_DRIVER_GLOBALS FxDriverGlobals,
__in CfxDevice *Device
);
public:
_Must_inspect_result_
static
NTSTATUS
_Create(
__in PFX_DRIVER_GLOBALS pGlobals,
__in CfxDevice * Device,
__deref_out FxPkgFdo ** PkgFdo
);
_Must_inspect_result_
NTSTATUS
RegisterCallbacks(
__in PWDF_FDO_EVENT_CALLBACKS DispatchTable
);
_Must_inspect_result_
NTSTATUS
CreateDefaultDeviceList(
__in PWDF_CHILD_LIST_CONFIG ListConfig,
__in PWDF_OBJECT_ATTRIBUTES ListAttributes
);
_Must_inspect_result_
virtual
NTSTATUS
Initialize(
__in PWDFDEVICE_INIT DeviceInit
);
_Must_inspect_result_
NTSTATUS
PostCreateDeviceInitialize(
VOID
);
_Must_inspect_result_
NTSTATUS
SetFilter(
__in BOOLEAN Value
);
BOOLEAN
IsFilter(
VOID
)
{
return m_Filter;
}
private:
_Must_inspect_result_
virtual
NTSTATUS
SendIrpSynchronously(
__inout FxIrp* Irp
);
_Must_inspect_result_
virtual
NTSTATUS
FireAndForgetIrp(
__inout FxIrp *Irp
);
_Must_inspect_result_
static
NTSTATUS
_PnpPassDown(
__in FxPkgPnp* This,
__inout FxIrp* Irp
);
_Must_inspect_result_
static
NTSTATUS
_PnpSurpriseRemoval(
__inout FxPkgPnp* This,
__inout FxIrp *Irp
);
_Must_inspect_result_
static
NTSTATUS
_PnpQueryDeviceRelations(
__inout FxPkgPnp* This,
__inout FxIrp *Irp
);
_Must_inspect_result_
NTSTATUS
PnpQueryDeviceRelations(
__inout FxIrp *Irp
);
_Must_inspect_result_
static
NTSTATUS
_PnpQueryInterface(
__inout FxPkgPnp* This,
__inout FxIrp *Irp
);
_Must_inspect_result_
static
NTSTATUS
_PnpQueryCapabilities(
__inout FxPkgPnp* This,
__inout FxIrp *Irp
);
_Must_inspect_result_
NTSTATUS
PnpQueryCapabilities(
__inout FxIrp *Irp
);
VOID
HandleQueryCapabilities(
__inout FxIrp *Irp
);
VOID
HandleQueryCapabilitiesCompletion(
__inout FxIrp *Irp
);
_Must_inspect_result_
static
NTSTATUS
_PnpQueryCapabilitiesCompletionRoutine(
__in MdDeviceObject DeviceObject,
__inout MdIrp Irp,
__inout PVOID Context
);
_Must_inspect_result_
static
NTSTATUS
_PnpFilterResourceRequirements(
__inout FxPkgPnp* This,
__inout FxIrp *Irp
);
_Must_inspect_result_
NTSTATUS
PnpFilterResourceRequirements(
__inout FxIrp *Irp
);
_Must_inspect_result_
static
NTSTATUS
_PnpQueryPnpDeviceState(
__inout FxPkgPnp* This,
__inout FxIrp *Irp
);
_Must_inspect_result_
static
NTSTATUS
_PnpQueryPnpDeviceStateCompletionRoutine(
__in MdDeviceObject DeviceObject,
__inout MdIrp Irp,
__inout PVOID Context
);
VOID
HandleQueryPnpDeviceStateCompletion(
__inout FxIrp *Irp
);
virtual
BOOLEAN
PnpSendStartDeviceDownTheStackOverload(
VOID
);
virtual
WDF_DEVICE_PNP_STATE
PnpEventEjectHardwareOverload(
VOID
);
virtual
WDF_DEVICE_PNP_STATE
PnpEventCheckForDevicePresenceOverload(
VOID
);
virtual
WDF_DEVICE_PNP_STATE
PnpEventPdoRemovedOverload(
VOID
);
virtual
WDF_DEVICE_PNP_STATE
PnpGetPostRemoveState(
VOID
);
virtual
WDF_DEVICE_PNP_STATE
PnpEventFdoRemovedOverload(
VOID
);
static
_Must_inspect_result_
NTSTATUS
_PowerPassDown(
__inout FxPkgPnp* This,
__in FxIrp *Irp
);
static
_Must_inspect_result_
NTSTATUS
_DispatchSetPower(
__inout FxPkgPnp* This,
__in FxIrp *Irp
);
static
_Must_inspect_result_
NTSTATUS
_DispatchQueryPower(
__inout FxPkgPnp* This,
__in FxIrp *Irp
);
virtual
_Must_inspect_result_
NTSTATUS
PowerCheckParentOverload(
__out BOOLEAN* ParentOn
);
virtual
WDF_DEVICE_POWER_STATE
PowerCheckDeviceTypeOverload(
VOID
);
virtual
WDF_DEVICE_POWER_STATE
PowerCheckDeviceTypeNPOverload(
VOID
);
virtual
VOID
PowerParentPowerDereference(
VOID
);
_Must_inspect_result_
NTSTATUS
DispatchSystemSetPower(
__in FxIrp *Irp
);
_Must_inspect_result_
NTSTATUS
DispatchDeviceSetPower(
__in FxIrp *Irp
);
_Must_inspect_result_
NTSTATUS
DispatchSystemQueryPower(
__in FxIrp *Irp
);
_Must_inspect_result_
NTSTATUS
DispatchDeviceQueryPower(
__in FxIrp *Irp
);
_Must_inspect_result_
NTSTATUS
RaiseDevicePower(
__in FxIrp *Irp
);
_Must_inspect_result_
NTSTATUS
LowerDevicePower(
__in FxIrp *Irp
);
virtual
VOID
PowerReleasePendingDeviceIrp(
__in BOOLEAN IrpMustBePresent = TRUE
);
_Must_inspect_result_
virtual
NTSTATUS
ProcessRemoveDeviceOverload(
__inout FxIrp* Irp
);
virtual
VOID
DeleteSymbolicLinkOverload(
__in BOOLEAN GracefulRemove
);
virtual
VOID
QueryForReenumerationInterface(
VOID
);
virtual
VOID
ReleaseReenumerationInterface(
VOID
);
_Must_inspect_result_
virtual
NTSTATUS
AskParentToRemoveAndReenumerate(
VOID
);
_Must_inspect_result_
virtual
NTSTATUS
QueryForPowerThread(
VOID
);
virtual
const PFN_PNP_POWER_CALLBACK*
GetDispatchPnp(
VOID
)
{
return m_FdoPnpFunctionTable;
}
virtual
const PFN_PNP_POWER_CALLBACK*
GetDispatchPower(
VOID
)
{
return m_FdoPowerFunctionTable;
}
_Must_inspect_result_
NTSTATUS
QueryForDsfInterface(
VOID
);
public:
static
MdCompletionRoutineType
RaiseDevicePowerCompletion;
protected:
~FxPkgFdo();
static
MdCompletionRoutineType
_SystemPowerS0Completion;
static
MdCompletionRoutineType
_SystemPowerSxCompletion;
_Must_inspect_result_
static
NTSTATUS
STDCALL
_PnpFilteredStartDeviceCompletionRoutine(
__in MdDeviceObject DeviceObject,
__inout MdIrp Irp,
__inout PVOID Context
);
_Must_inspect_result_
static
NTSTATUS
STDCALL
_PnpStartDeviceCompletionRoutine(
__in MdDeviceObject DeviceObject,
__inout MdIrp Irp,
__inout PVOID Context
);
};
#endif // _FXPKGFDO_H