37 #if defined(EVENT_TRACING) 40 #include "fxpkgfdo.tmh" 73 _PnpQueryRemoveDevice,
75 _PnpCancelRemoveDevice,
80 _PnpQueryDeviceRelations,
82 _PnpQueryCapabilities,
86 _PnpFilterResourceRequirements,
95 _PnpQueryPnpDeviceState,
97 _PnpDeviceUsageNotification,
207 if (
NULL == fxPkgFdo) {
210 "Memory allocation failed: %!STATUS!",
status);
218 eventQueue = static_cast<FxEventQueue*> (&(fxPkgFdo->
m_PnpMachine));
224 eventQueue = static_cast<FxEventQueue*> (&(fxPkgFdo->
m_PowerMachine));
270 Irp->CopyCurrentIrpStackLocationToNext();
332 Irp->CopyCurrentIrpStackLocationToNext();
425 type =
Irp->GetParameterQDRType();
428 "Entering QueryDeviceRelations handler, " 429 "type %!DEVICE_RELATION_TYPE!",
482 "Exiting QueryDeviceRelations handler, status %!STATUS!",
519 "Entering QueryInterface handler");
524 "Exiting QueryInterface handler, %!STATUS!",
530 if (completeIrp ==
FALSE) {
580 "Entering QueryCapabilities handler");
582 pCaps =
Irp->GetParameterDeviceCapabilities();
603 pCaps->WakeFromInterrupt =
TRUE;
608 "Exiting QueryCapabilities handler");
622 "Entering QueryCapabilities completion handler");
624 pCaps =
Irp->GetParameterDeviceCapabilities();
632 ASSERT(pCaps->Version >= 1);
635 (pCaps->Version == 1)) {
677 pCaps->DeviceState[
i] =
state;
741 "Exiting QueryCapabilities completion handler");
771 "Entering QueryPnpDeviceState completion handler");
781 "WDFDEVICE 0x%p !devobj 0x%p returning PNP_DEVICE_STATE 0x%d IRP 0x%p",
789 "Exiting QueryPnpDeviceState completion handler");
876 "Could not convert object to handle");
959 pWdmRaw !=
NULL && pWdmTranslated !=
NULL) {
990 if (pContext !=
NULL) {
1030 setFilteredCompletion =
TRUE;
1055 if (setFilteredCompletion) {
1073 "PNP start preprocessing failed with %!STATUS!",
1123 ASSERT(!
"This should only be reachable for PDOs.");
1157 ASSERT(!
"This should only be implemented for PDOs.");
1191 ASSERT(!
"This should only be implemented for PDOs.");
1268 Irp->CopyCurrentIrpStackLocationToNext();
1494 Mx::MxLowerIrql(
irql);
1535 #if (FX_CORE_MODE == FX_CORE_KERNEL_MODE)
virtual WDF_DEVICE_PNP_STATE PnpEventFdoRemovedOverload(VOID)
enum _WDF_DEVICE_PNP_STATE WDF_DEVICE_PNP_STATE
static const PFN_PNP_POWER_CALLBACK m_FdoPnpFunctionTable[IRP_MN_SURPRISE_REMOVAL+1]
VOID HandleQueryCapabilitiesCompletion(__inout FxIrp *Irp)
_Must_inspect_result_ NTSTATUS QueryForDsfInterface(VOID)
static const GUID GUID_POWER_THREAD_INTERFACE
return STATUS_NOT_SUPPORTED
POWER_THREAD_INTERFACE m_PowerThreadInterface
#define STATUS_INSUFFICIENT_RESOURCES
MdRemoveLock GetRemoveLock(VOID)
PCM_RESOURCE_LIST ResourcesTranslated
#define SET_PNP_CAP(caps, pCaps, FieldName)
MdDeviceObject __inline GetDeviceObject(VOID)
_Must_inspect_result_ NTSTATUS Commit(__in_opt PWDF_OBJECT_ATTRIBUTES Attributes, __out_opt WDFOBJECT *ObjectHandle, __in_opt FxObject *Parent=NULL, __in BOOLEAN AssignDriverAsDefaultParent=TRUE)
_Must_inspect_result_ NTSTATUS HandleQueryBusRelations(__inout FxIrp *Irp)
#define IRP_MN_QUERY_POWER
VOID PnpProcessEvent(__in FxPnpEvent Event, __in BOOLEAN ProcessEventOnDifferentThread=FALSE)
_Must_inspect_result_ NTSTATUS CreatePowerThread(VOID)
#define STATUS_MORE_PROCESSING_REQUIRED
virtual _Must_inspect_result_ NTSTATUS ProcessRemoveDeviceOverload(__inout FxIrp *Irp)
_Must_inspect_result_ NTSTATUS QueryForInterface(__in const GUID *InterfaceType, __out PINTERFACE Interface, __in USHORT Size, __in USHORT Version, __in PVOID InterfaceSpecificData, __in_opt MdDeviceObject TargetDevice=NULL)
#define UNREFERENCED_PARAMETER(P)
WDFDEVICE __inline GetHandle(VOID)
static _Must_inspect_result_ NTSTATUS _PnpSurpriseRemoval(__inout FxPkgPnp *This, __inout FxIrp *Irp)
PNP_BUS_INFORMATION m_BusInformation
virtual WDF_DEVICE_PNP_STATE PnpEventPdoRemovedOverload(VOID)
static _Must_inspect_result_ NTSTATUS _PnpFilterResourceRequirements(__inout FxPkgPnp *This, __inout FxIrp *Irp)
static _Must_inspect_result_ NTSTATUS _PnpQueryDeviceRelations(__inout FxPkgPnp *This, __inout FxIrp *Irp)
REENUMERATE_SELF_INTERFACE_STANDARD m_SurpriseRemoveAndReenumerateSelfInterface
_Must_inspect_result_ NTSTATUS AllocateTarget(_Out_ FxIoTarget **Target, _In_ BOOLEAN SelfTarget)
LONG GetPnpCapsInternal(VOID)
FxChildList * m_DefaultDeviceList
static _Must_inspect_result_ NTSTATUS STDCALL _PnpFilteredStartDeviceCompletionRoutine(__in MdDeviceObject DeviceObject, __inout MdIrp Irp, __inout PVOID Context)
_Must_inspect_result_ NTSTATUS HandleQueryInterface(__inout FxIrp *Irp, __out PBOOLEAN CompleteRequest)
_Must_inspect_result_ NTSTATUS PostCreateDeviceInitialize(VOID)
FxPowerPolicyMachine m_PowerPolicyMachine
static _Must_inspect_result_ NTSTATUS _PnpQueryCapabilities(__inout FxPkgPnp *This, __inout FxIrp *Irp)
static _Must_inspect_result_ NTSTATUS _PowerPassDown(__inout FxPkgPnp *This, __in FxIrp *Irp)
#define SET_PNP_CAP_IF_FALSE(caps, pCaps, FieldName)
#define TRACE_LEVEL_INFORMATION
VOID SetPendingPnpIrp(__inout FxIrp *Irp, __in BOOLEAN MarkIrpPending=TRUE)
BOOLEAN SupportsWakeInterrupt(VOID)
PNP_DEVICE_STATE HandleQueryPnpDeviceState(__in PNP_DEVICE_STATE PnpDeviceState)
VOID HandleQueryPnpDeviceStateCompletion(__inout FxIrp *Irp)
PCM_RESOURCE_LIST GetParameterAllocatedResources()
enum _SYSTEM_POWER_STATE SYSTEM_POWER_STATE
static __inline VOID MxFreePool(__in PVOID Ptr)
PFN_WDF_DEVICE_FILTER_RESOURCE_REQUIREMENTS m_Method
_In_ PDEVICE_OBJECT DeviceObject
FxEnumerationInfo * m_EnumInfo
_Must_inspect_result_ NTSTATUS Initialize(__in PFX_DRIVER_GLOBALS DriverGlobals)
FxCmResList * m_Resources
#define TRACE_LEVEL_VERBOSE
_In_ WDFCMRESLIST ResourcesRaw
PCM_RESOURCE_LIST GetParameterAllocatedResourcesTranslated()
FxPnpDeviceRemoveAddedResources m_DeviceRemoveAddedResources
static _Must_inspect_result_ NTSTATUS _Create(__in PFX_DRIVER_GLOBALS pGlobals, __in CfxDevice *Device, __deref_out FxPkgFdo **PkgFdo)
NTSTATUS CallDriver(__in MdDeviceObject DeviceObject)
MdDeviceObject __inline GetAttachedDevice(VOID)
_Must_inspect_result_ NTSTATUS PostCreateDeviceInitialize(VOID)
static _Must_inspect_result_ NTSTATUS STDCALL _PnpStartDeviceCompletionRoutine(__in MdDeviceObject DeviceObject, __inout MdIrp Irp, __inout PVOID Context)
FxPnpDeviceFilterResourceRequirements m_DeviceFilterRemoveResourceRequirements
virtual WDF_DEVICE_PNP_STATE PnpGetPostRemoveState(VOID)
enum _DEVICE_RELATION_TYPE DEVICE_RELATION_TYPE
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
enum _DEVICE_POWER_STATE DEVICE_POWER_STATE
VOID SetParameterAllocatedResourcesTranslated(__in PCM_RESOURCE_LIST AllocatedResourcesTranslated)
static _Must_inspect_result_ NTSTATUS _PnpQueryInterface(__inout FxPkgPnp *This, __inout FxIrp *Irp)
VOID SetCompletionRoutineEx(__in MdDeviceObject DeviceObject, __in MdCompletionRoutine CompletionRoutine, __in PVOID Context, __in BOOLEAN InvokeOnSuccess=TRUE, __in BOOLEAN InvokeOnError=TRUE, __in BOOLEAN InvokeOnCancel=TRUE)
PCM_RESOURCE_LIST ResourcesRaw
virtual WDF_DEVICE_PNP_STATE PnpEventCheckForDevicePresenceOverload(VOID)
#define IRP_MN_SURPRISE_REMOVAL
PFX_DRIVER_GLOBALS pFxDriverGlobals
FxPnpDeviceFilterResourceRequirements m_DeviceFilterAddResourceRequirements
_Must_inspect_result_ NTSTATUS PnpQueryDeviceRelations(__inout FxIrp *Irp)
#define NT_SUCCESS(StatCode)
VOID PnpEventRemovedCommonCode(VOID)
FxIoTargetSelf * m_SelfTarget
VOID SetParameterAllocatedResources(__in PCM_RESOURCE_LIST AllocatedResources)
virtual VOID DeleteSymbolicLinkOverload(__in BOOLEAN GracefulRemove)
virtual VOID QueryForReenumerationInterface(VOID)
static __inline VOID MxReleaseRemoveLockAndWait(__in MdRemoveLock RemoveLock, __in PVOID Tag)
VOID HandleQueryCapabilities(__inout FxIrp *Irp)
_Must_inspect_result_ NTSTATUS BuildFromWdmList(__in PCM_RESOURCE_LIST ResourceList, __in UCHAR AccessFlags)
_Must_inspect_result_ NTSTATUS SetFilter(__in BOOLEAN Value)
BOOLEAN IsPowerPolicyOwner(VOID)
FxPkgFdo(__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in CfxDevice *Device)
~FxFilteredStartContext()
BOOLEAN m_SelfIoTargetNeeded
MdIrp ClearPendingPnpIrp(VOID)
#define _Must_inspect_result_
_Must_inspect_result_ _In_ WDFDEVICE Device
_In_ WDFCMRESLIST _In_ WDFCMRESLIST ResourcesTranslated
#define TRACE_LEVEL_ERROR
static __inline VOID MxReleaseRemoveLock(__in MdRemoveLock RemoveLock, __in PVOID Tag)
_Must_inspect_result_ NTSTATUS(* PFN_PNP_POWER_CALLBACK)(__inout FxPkgPnp *This, __inout FxIrp *Irp)
virtual _Must_inspect_result_ NTSTATUS QueryForPowerThread(VOID)
_Must_inspect_result_ NTSTATUS CreateDefaultDeviceList(__in PWDF_CHILD_LIST_CONFIG ListConfig, __in PWDF_OBJECT_ATTRIBUTES ListAttributes)
static const PFN_PNP_POWER_CALLBACK m_FdoPowerFunctionTable[IRP_MN_QUERY_POWER+1]
VOID DeleteSymbolicLink(VOID)
static _Must_inspect_result_ NTSTATUS _PnpPassDown(__in FxPkgPnp *This, __inout FxIrp *Irp)
virtual WDF_DEVICE_PNP_STATE PnpEventEjectHardwareOverload(VOID)
FxChildList * m_StaticDeviceList
__inline PFX_DRIVER_GLOBALS GetDriverGlobals(VOID)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
PINTERFACE_DEREFERENCE InterfaceDereference
FxFilteredStartContext(VOID)
WDFCMRESLIST GetHandle(VOID)
DoTraceLevelMessage(pFxDriverGlobals, TRACE_LEVEL_VERBOSE, TRACINGPNP, "Enter, WDFDEVICE %p", Device)
virtual BOOLEAN PnpSendStartDeviceDownTheStackOverload(VOID)
FxRelatedDeviceList * m_RemovalDeviceList
FxPowerMachine m_PowerMachine
static _Must_inspect_result_ NTSTATUS _CreateAndInit(__out FxChildList **ChildList, __in PFX_DRIVER_GLOBALS FxDriverGlobals, __in PWDF_OBJECT_ATTRIBUTES ListAttributes, __in size_t TotalDescriptionSize, __in CfxDevice *Device, __in PWDF_CHILD_LIST_CONFIG ListConfig, __in BOOLEAN Static=FALSE)
virtual _Must_inspect_result_ NTSTATUS FireAndForgetIrp(__inout FxIrp *Irp)
VOID DeleteFromFailedCreate(VOID)
static _Must_inspect_result_ NTSTATUS _ComputeTotalDescriptionSize(__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in PWDF_CHILD_LIST_CONFIG Config, __in size_t *TotalDescriptionSize)
PFN_WDF_DEVICE_REMOVE_ADDED_RESOURCES m_Method
_Must_inspect_result_ PCM_RESOURCE_LIST CreateWdmList(__in __drv_strictTypeMatch(__drv_typeExpr) POOL_TYPE PoolType=PagedPool)
VOID CleanupStateMachines(__in BOOLEAN ClenaupPnp)
FxCmResList * m_ResourcesRaw
#define RtlZeroMemory(Destination, Length)
BOOLEAN m_DeviceInterfacesCanBeEnabled
GLuint GLuint GLsizei GLenum type
virtual _Must_inspect_result_ NTSTATUS SendIrpSynchronously(__inout FxIrp *Irp)
_Must_inspect_result_ NTSTATUS Invoke(__in WDFDEVICE Device, __in WDFCMRESLIST ResourcesRaw, __in WDFCMRESLIST ResourcesTranslated)
VOID CopyCurrentIrpStackLocationToNext(VOID)
_In_ PWDFDEVICE_INIT _In_ PWDF_PDO_EVENT_CALLBACKS DispatchTable
static DEVICE_POWER_STATE _GetPowerCapState(__in ULONG Index, __in ULONG State)
static SERVICE_STATUS status
_Must_inspect_result_ NTSTATUS HandleQueryDeviceRelations(__inout FxIrp *Irp, __inout FxRelatedDeviceList *List)
FxIoTarget * m_DefaultTarget
_Must_inspect_result_ NTSTATUS RegisterCallbacks(__in PWDF_FDO_EVENT_CALLBACKS DispatchTable)
#define SET_PNP_CAP_IF_TRUE(caps, pCaps, FieldName)
NTSTATUS CompletePnpRequest(__inout FxIrp *Irp, __in NTSTATUS Status)
FxPnpMachine m_PnpMachine
size_t totalDescriptionSize
virtual VOID ReleaseReenumerationInterface(VOID)