ReactOS  0.4.15-dev-3331-g8ebe441
FxDeviceBase Class Reference

#include <fxdevice.hpp>

Inheritance diagram for FxDeviceBase:
Collaboration diagram for FxDeviceBase:

Public Member Functions

NTSTATUS ConfigureConstraints (__in_opt PWDF_OBJECT_ATTRIBUTES ObjectAttributes)
 
VOID GetConstraints (__out_opt WDF_EXECUTION_LEVEL *ExecutionLevel, __out_opt WDF_SYNCHRONIZATION_SCOPE *SynchronizationScope)
 
FxCallbackLockGetCallbackLockPtr (__out_opt FxObject **LockObject)
 
__inline FxDriverGetDriver (VOID)
 
MdDeviceObject __inline GetDeviceObject (VOID)
 
__inline MxDeviceObjectGetMxDeviceObject (VOID)
 
ULONG __inline GetDeviceObjectFlags (VOID)
 
VOID __inline SetDeviceObjectFlags (_In_ ULONG Flags)
 
MdDeviceObject __inline GetAttachedDevice (VOID)
 
ULONG __inline GetAttachedDeviceObjectFlags (VOID)
 
MdDeviceObject __inline GetPhysicalDevice (VOID)
 
WDFDEVICE __inline GetHandle (VOID)
 
virtual _Must_inspect_result_ NTSTATUS AddIoTarget (__inout FxIoTarget *IoTarget)
 
virtual VOID RemoveIoTarget (__inout FxIoTarget *IoTarget)
 
virtual _Must_inspect_result_ NTSTATUS AllocateEnumInfo (VOID)
 
virtual VOID AddChildList (__inout FxChildList *List)
 
virtual VOID RemoveChildList (__inout FxChildList *List)
 
virtual _Must_inspect_result_ NTSTATUS AllocateDmaEnablerList (VOID)
 
virtual VOID AddDmaEnabler (__inout FxDmaEnabler *Enabler)
 
virtual VOID RemoveDmaEnabler (__inout FxDmaEnabler *Enabler)
 
virtual VOID SetDeviceTelemetryInfoFlags (_In_ FxDeviceInfoFlags Flag)
 
__inline _Must_inspect_result_ NTSTATUS AcquireDmaPacketTransaction (VOID)
 
__inline VOID ReleaseDmaPacketTransaction (VOID)
 
VOID AddToDisposeList (__inout FxObject *Object)
 
_Must_inspect_result_ NTSTATUS QueryInterface (__inout FxQueryInterfaceParams *Params)
 
_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)
 
__inline MdDeviceObject GetAttachedDeviceReference (VOID)
 
virtual FxIoTargetGetDefaultIoTarget (VOID)
 
_Must_inspect_result_ NTSTATUS AllocateTarget (_Out_ FxIoTarget **Target, _In_ BOOLEAN SelfTarget)
 
- Public Member Functions inherited from FxNonPagedObject
 FxNonPagedObject (__in WDFTYPE Type, __in USHORT Size, __in PFX_DRIVER_GLOBALS FxDriverGlobals)
 
 FxNonPagedObject (__in WDFTYPE Type, __in USHORT Size, __in PFX_DRIVER_GLOBALS FxDriverGlobals, __in FxObjectType ObjectType)
 
virtual ~FxNonPagedObject (VOID)
 
 _Acquires_lock_ (this->m_NPLock.m_Lock) __drv_maxIRQL(DISPATCH_LEVEL) __drv_setsIRQL(DISPATCH_LEVEL) VOID Lock(__out __drv_deref(__drv_savesIRQL) PKIRQL PreviousIrql)
 
 _Releases_lock_ (this->m_NPLock.m_Lock) __drv_requiresIRQL(DISPATCH_LEVEL) __inline VOID Unlock(__in __drv_restoresIRQL KIRQL PreviousIrql)
 
 _Acquires_lock_ (this->m_NPLock.m_Lock) __drv_requiresIRQL(DISPATCH_LEVEL) VOID LockAtDispatch(VOID)
 
 _Requires_lock_held_ (this->m_NPLock.m_Lock) _Releases_lock_(this -> m_NPLock.m_Lock) __drv_requiresIRQL(DISPATCH_LEVEL) __inline VOID UnlockFromDispatch(VOID)
 
- Public Member Functions inherited from FxObject
PVOID GetCOMWrapper ()
 
void SetCOMWrapper (__drv_aliasesMem PVOID Wrapper)
 
 FxObject (__in WDFTYPE Type, __in USHORT Size, __in PFX_DRIVER_GLOBALS FxDriverGlobals)
 
virtual ~FxObject (VOID)
 
PVOID __inline operator new (__in size_t Size, __in PFX_DRIVER_GLOBALS FxDriverGlobals, __in FxObjectType Type)
 
PVOID __inline operator new (__in size_t Size, __in PFX_DRIVER_GLOBALS FxDriverGlobals, __in_opt PWDF_OBJECT_ATTRIBUTES Attributes, __in USHORT ExtraSize=0)
 
VOID operator delete (__in PVOID Memory)
 
VOID SetNoContextHeader (VOID)
 
PVOID __inline GetObjectHandle (VOID)
 
__inline FxContextHeaderGetContextHeader (VOID)
 
__inline PFX_DRIVER_GLOBALS GetDriverGlobals (VOID)
 
WDFTYPE GetType (VOID)
 
USHORT GetObjectSize (VOID)
 
LONG GetRefCnt (VOID)
 
FxTagTrackerGetTagTracker (VOID)
 
CfxDeviceGetDevice (VOID)
 
CfxDeviceBaseGetDeviceBase (VOID)
 
VOID SetDeviceBase (__in CfxDeviceBase *DeviceBase)
 
__inline VOID CallCleanup (VOID)
 
ULONG __inline AddRef (__in_opt PVOID Tag=NULL, __in LONG Line=0, __in_opt PSTR File=NULL)
 
virtual ULONG Release (__in_opt PVOID Tag=NULL, __in LONG Line=0, __in_opt PSTR File=NULL)
 
virtual ULONG AddRefOverride (__in WDFOBJECT_OFFSET Offset, __in_opt PVOID Tag=NULL, __in LONG Line=0, __in_opt PSTR File=NULL)
 
virtual ULONG ReleaseOverride (__in WDFOBJECT_OFFSET Offset, __in_opt PVOID Tag=NULL, __in LONG Line=0, __in_opt PSTR File=NULL)
 
virtual _Must_inspect_result_ NTSTATUS QueryInterface (__in FxQueryInterfaceParams *Params)
 
VOID MarkTraceState (VOID)
 
BOOLEAN __inline IsTraceState (VOID)
 
VOID __inline TraceDroppedEvent (__in FxObjectDroppedEvent Event)
 
VOID MarkPassiveDispose (__in FxObjectLockState State=ObjectLock)
 
VOID MarkPassiveCallbacks (__in FxObjectLockState State=ObjectLock)
 
VOID MarkForceDisposeThread (__in FxObjectLockState State=ObjectLock)
 
BOOLEAN IsPassiveCallbacks (__in BOOLEAN AcquireLock=TRUE)
 
BOOLEAN IsPassiveDispose (__in BOOLEAN AcquireLock=TRUE)
 
BOOLEAN IsForceDisposeThread (__in BOOLEAN AcquireLock=TRUE)
 
VOID MarkCommitted (VOID)
 
BOOLEAN IsCommitted (VOID)
 
VOID MarkDisposeOverride (__in FxObjectLockState State=ObjectLock)
 
VOID MarkNoDeleteDDI (__in FxObjectLockState State=ObjectLock)
 
BOOLEAN IsNoDeleteDDI (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)
 
VOID DeleteFromFailedCreate (VOID)
 
VOID ClearEvtCallbacks (VOID)
 
BOOLEAN EarlyDispose (VOID)
 
virtual VOID DeleteObject (VOID)
 
virtual BOOLEAN Dispose (VOID)
 
_Must_inspect_result_ NTSTATUS AssignParentObject (__in FxObject *ParentObject)
 
_Must_inspect_result_ NTSTATUS AddContext (__in FxContextHeader *Header, __in PVOID *Context, __in PWDF_OBJECT_ATTRIBUTES Attributes)
 
_Must_inspect_result_ NTSTATUS RemoveParentAssignment (VOID)
 
_Must_inspect_result_ FxObjectGetParentObjectReferenced (__in PVOID Tag)
 
BOOLEAN IsDisposed (VOID)
 
- Public Member Functions inherited from IFxHasCallbacks
virtual VOID GetConstraints (__out WDF_EXECUTION_LEVEL *ExecutionLevel, __out WDF_SYNCHRONIZATION_SCOPE *SynchronizationScope)=0
 

Static Public Member Functions

static FxDeviceBase_SearchForDevice (__in FxObject *Object, __out_opt IFxHasCallbacks **Callbacks)
 
static FxDeviceBase_SearchForDevice (__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in_opt PWDF_OBJECT_ATTRIBUTES Attributes)
 
- Static Public Member Functions inherited from FxObject
static FxObject_FromDisposeEntry (__in PSINGLE_LIST_ENTRY Entry)
 
static FxObject_GetObjectFromHandle (__in WDFOBJECT Handle, __inout PWDFOBJECT_OFFSET ObjectOffset)
 
static PVOID __inline _ToHandle (__in FxObject *Object)
 
static VOID __inline _ReferenceActual (__in WDFOBJECT Object, __in_opt PVOID Tag, __in LONG Line, __in PSTR File)
 
static VOID __inline _DereferenceActual (__in WDFOBJECT Object, __in_opt PVOID Tag, __in LONG Line, __in PSTR File)
 
static PVOID _GetDebugBase (__in FxObject *Object)
 
static PFX_POOL_HEADER _CleanupPointer (__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in FxObject *Object)
 
static _Must_inspect_result_ NTSTATUS _GetEffectiveLock (__in FxObject *Object, __in_opt IFxHasCallbacks *Callbacks, __in BOOLEAN AutomaticLocking, __in BOOLEAN PassiveCallbacks, __out FxCallbackLock **CallbackLock, __out_opt FxObject **CallbackLockObject)
 
static _Must_inspect_result_ NTSTATUS _ObjectQuery (_In_ FxObject *Object, _In_ CONST GUID *Guid, _In_ ULONG QueryBufferLength, _Out_writes_bytes_(QueryBufferLength) PVOID QueryBuffer)
 

Public Attributes

FxDisposeListm_DisposeList
 

Protected Member Functions

 FxDeviceBase (__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in FxDriver *Driver, __in WDFTYPE Type, __in USHORT Size)
 
 ~FxDeviceBase (VOID)
 
VOID Init (__in MdDeviceObject DeviceObject, __in MdDeviceObject AttachedDevice, __in MdDeviceObject PhysicalDevice)
 
- Protected Member Functions inherited from FxObject
 FxObject (__in WDFTYPE Type, __in USHORT Size, __in PFX_DRIVER_GLOBALS FxDriverGlobals, __in FxObjectType ObjectType)
 
FxObjectDebugExtensionGetDebugExtension (VOID)
 
BOOLEAN IsDebug (VOID)
 
VOID AllocateTagTracker (__in WDFTYPE Type)
 
virtual VOID SelfDestruct (VOID)
 
PVOID __inline GetObjectHandleUnchecked (VOID)
 
VOID __inline DestroyChildren (VOID)
 
VOID DeleteEarlyDisposedObject (VOID)
 

Protected Attributes

FxDriverm_Driver
 
MxDeviceObject m_DeviceObject
 
MxDeviceObject m_AttachedDevice
 
MxDeviceObject m_PhysicalDevice
 
FxCallbackLockm_CallbackLockPtr
 
FxObjectm_CallbackLockObjectPtr
 
WDF_EXECUTION_LEVEL m_ExecutionLevel
 
WDF_SYNCHRONIZATION_SCOPE m_SynchronizationScope
 
LONG m_DmaPacketTransactionStatus
 
- Protected Attributes inherited from FxObject
union {
   CfxDeviceBase *   m_DeviceBase
 
   CfxDevice *   m_Device
 
}; 
 

Additional Inherited Members

- Static Protected Member Functions inherited from FxObject
static PVOID _GetBase (__in FxObject *Object)
 

Detailed Description

Definition at line 122 of file fxdevice.hpp.

Constructor & Destructor Documentation

◆ FxDeviceBase()

FxDeviceBase::FxDeviceBase ( __in PFX_DRIVER_GLOBALS  FxDriverGlobals,
__in FxDriver Driver,
__in WDFTYPE  Type,
__in USHORT  Size 
)
protected

Definition at line 31 of file fxdevicebase.cpp.

36  :
37  FxNonPagedObject(Type, Size, FxDriverGlobals)
38 {
39  m_Driver = Driver;
40 
43 
45 
47 
50 
52  SetDeviceBase(this);
53 }
FxNonPagedObject(__in WDFTYPE Type, __in USHORT Size, __in PFX_DRIVER_GLOBALS FxDriverGlobals)
VOID MarkPassiveDispose(__in FxObjectLockState State=ObjectLock)
Definition: fxobject.hpp:944
IN PVOID IN PVOID IN USHORT IN USHORT Size
Definition: pci.h:361
VOID SetDeviceBase(__in CfxDeviceBase *DeviceBase)
Definition: fxobject.hpp:797
FxCallbackLock * m_CallbackLockPtr
Definition: fxdevice.hpp:475
FxDisposeList * m_DisposeList
Definition: fxdevice.hpp:466
Type
Definition: Type.h:6
WDF_EXECUTION_LEVEL m_ExecutionLevel
Definition: fxdevice.hpp:478
WDF_SYNCHRONIZATION_SCOPE m_SynchronizationScope
Definition: fxdevice.hpp:479
FxObject * m_CallbackLockObjectPtr
Definition: fxdevice.hpp:476
#define NULL
Definition: types.h:112
FxDriver * m_Driver
Definition: fxdevice.hpp:469
LONG m_DmaPacketTransactionStatus
Definition: fxdevice.hpp:484
_Must_inspect_result_ _In_ WDFDRIVER Driver
Definition: wdfcontrol.h:83

◆ ~FxDeviceBase()

FxDeviceBase::~FxDeviceBase ( VOID  )
protected

Definition at line 55 of file fxdevicebase.cpp.

58 {
59  if (m_DisposeList != NULL) {
62  }
63 
64  if (m_CallbackLockPtr != NULL) {
65  delete m_CallbackLockPtr;
67  }
68 }
virtual VOID DeleteObject(VOID)
FxCallbackLock * m_CallbackLockPtr
Definition: fxdevice.hpp:475
FxDisposeList * m_DisposeList
Definition: fxdevice.hpp:466
#define NULL
Definition: types.h:112

Member Function Documentation

◆ _SearchForDevice() [1/2]

FxDeviceBase * FxDeviceBase::_SearchForDevice ( __in FxObject Object,
__out_opt IFxHasCallbacks **  Callbacks 
)
static

Definition at line 214 of file fxdevicebase.cpp.

218 {
219  FxObject* pParent, *pOrigParent;
222  PVOID pTag;
223 
225  if (pDeviceBase == NULL) {
227  Object->GetDriverGlobals(), TRACE_LEVEL_ERROR, TRACINGOBJECT,
228  "WDFHANDLE %p does not have a WDFDEVICE as an ancestor",
229  Object->GetObjectHandle());
230  return NULL;
231  }
232 
233  if (Callbacks == NULL) {
234  //
235  // Caller is not interested in the callbacks interface, just return
236  // now without searching for it.
237  //
238  return pDeviceBase;
239  }
240 
241  //
242  // Init out parameter.
243  //
244  *Callbacks = NULL;
245 
246  pOrigParent = Object;
247  pTag = pOrigParent;
248 
249  //
250  // By adding a reference now, we simulate what GetParentObjectReferenced
251  // does later, thus allowing simple logic on when/how to release the
252  // reference on exit.
253  //
254  Object->ADDREF(pTag);
255 
256  do {
257  //
258  // If successful, Callbacks will be != NULL
259  //
260  if (NT_SUCCESS(Object->QueryInterface(&cbParams))) {
261  ASSERT(*Callbacks != NULL);
262  //
263  // Release the reference previously taken by the top of the function
264  // or GetParentObjectReferenced in a previous pass in the loop.
265  //
266  Object->RELEASE(pTag);
267  return pDeviceBase;
268  }
269 
271 
272  //
273  // Release the reference previously taken by the top of the function
274  // or GetParentObjectReferenced in a previous pass in the loop.
275  //
276  Object->RELEASE(pTag);
277 
278  Object = pParent;
279  } while (Object != NULL);
280 
281  ASSERT(Object == NULL);
282 
283  //
284  // Queue presented requests do not have parents (to increase performance).
285  // Try to find the callback interface on this object's device base.
286  //
287  if (NT_SUCCESS(pDeviceBase->QueryInterface(&cbParams))) {
288  ASSERT(*Callbacks != NULL);
289  //
290  // Success, we got a callback interface.
291  //
292  return pDeviceBase;
293  }
294 
297  "WDFHANDLE %p does not have a callbacks interface in its object tree"
298  "(WDFDEVICE %p)", pOrigParent->GetObjectHandle(),
300 
301  return pDeviceBase;
302 }
FxDeviceBase * pDeviceBase
_Must_inspect_result_ NTSTATUS QueryInterface(__inout FxQueryInterfaceParams *Params)
WDFDEVICE __inline GetHandle(VOID)
Definition: fxdevice.hpp:237
PVOID __inline GetObjectHandle(VOID)
Definition: fxobject.hpp:603
#define TRACINGOBJECT
Definition: dbgtrace.h:59
#define ASSERT(a)
Definition: mode.c:44
const struct winhelp_callbacks Callbacks
Definition: callback.c:161
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
_Must_inspect_result_ _In_ WDFCOLLECTION _In_ WDFOBJECT Object
#define TRACE_LEVEL_ERROR
Definition: storswtr.h:27
__inline PFX_DRIVER_GLOBALS GetDriverGlobals(VOID)
Definition: fxobject.hpp:734
DoTraceLevelMessage(pFxDriverGlobals, TRACE_LEVEL_VERBOSE, TRACINGPNP, "Enter, WDFDEVICE %p", Device)
#define NULL
Definition: types.h:112
FxObject * pParent
Definition: fxdpcapi.cpp:86
_Must_inspect_result_ FxObject * GetParentObjectReferenced(__in PVOID Tag)
Definition: fxobject.cpp:856
CfxDeviceBase * GetDeviceBase(VOID)
Definition: fxobject.hpp:789

Referenced by FxMemoryBufferFromPool::_Create(), FxIoTargetRemote::_Create(), _SearchForDevice(), FxPkgIo::CreateQueue(), if(), FxTimer::Initialize(), FxDpc::Initialize(), FxWorkItem::Initialize(), and FxInterrupt::InitializeWorker().

◆ _SearchForDevice() [2/2]

FxDeviceBase * FxDeviceBase::_SearchForDevice ( __in PFX_DRIVER_GLOBALS  FxDriverGlobals,
__in_opt PWDF_OBJECT_ATTRIBUTES  Attributes 
)
static

Definition at line 305 of file fxdevicebase.cpp.

309 {
310  FxObject* pParentObject;
312 
313  if (Attributes == NULL || Attributes->ParentObject == NULL) {
314  return NULL;
315  }
316 
317  FxObjectHandleGetPtr(FxDriverGlobals,
318  Attributes->ParentObject,
320  (PVOID*) &pParentObject);
321 
322  pDeviceBase = _SearchForDevice(pParentObject, NULL);
323 
324  return pDeviceBase;
325 }
FxDeviceBase * pDeviceBase
FxObjectHandleGetPtr(GetFxDriverGlobals(DriverGlobals), Fdo, FX_TYPE_DEVICE,(PVOID *)&pFdo)
static FxDeviceBase * _SearchForDevice(__in FxObject *Object, __out_opt IFxHasCallbacks **Callbacks)
#define NULL
Definition: types.h:112
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes

◆ AcquireDmaPacketTransaction()

__inline _Must_inspect_result_ NTSTATUS FxDeviceBase::AcquireDmaPacketTransaction ( VOID  )
inline

Definition at line 354 of file fxdevice.hpp.

357  {
358  //
359  // Set the status to Pending only if the previous transaction is Completed.
360  //
365  return STATUS_SUCCESS;
366  } else {
367  return STATUS_WDF_BUSY;
368  }
369  }
#define STATUS_WDF_BUSY
Definition: wdfstatus.h:126
#define InterlockedCompareExchange
Definition: interlocked.h:104
#define STATUS_SUCCESS
Definition: shellext.h:65
LONG m_DmaPacketTransactionStatus
Definition: fxdevice.hpp:484

Referenced by FxDmaPacketTransaction::AcquireDevice().

◆ AddChildList()

virtual VOID FxDeviceBase::AddChildList ( __inout FxChildList List)
inlinevirtual

Reimplemented in FxDevice.

Definition at line 283 of file fxdevice.hpp.

286  {
287  //
288  // Intentionally does nothing
289  //
291  }
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:317
_Must_inspect_result_ _In_ WDFCMRESLIST List
Definition: wdfresource.h:550

◆ AddDmaEnabler()

virtual VOID FxDeviceBase::AddDmaEnabler ( __inout FxDmaEnabler Enabler)
inlinevirtual

Reimplemented in FxDevice.

Definition at line 317 of file fxdevice.hpp.

320  {
321  //
322  // Intentionally does nothing
323  //
324  UNREFERENCED_PARAMETER(Enabler);
325  }
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:317

Referenced by FxDmaEnabler::Initialize().

◆ AddIoTarget()

virtual _Must_inspect_result_ NTSTATUS FxDeviceBase::AddIoTarget ( __inout FxIoTarget IoTarget)
inlinevirtual

Reimplemented in FxDevice.

Definition at line 247 of file fxdevice.hpp.

250  {
252 
253  //
254  // Intentionally does nothing
255  //
256  return STATUS_SUCCESS;
257  }
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:317
_Must_inspect_result_ _In_ WDFDEVICE _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFIOTARGET * IoTarget
Definition: wdfiotarget.h:363
#define STATUS_SUCCESS
Definition: shellext.h:65

Referenced by AllocateTarget().

◆ AddToDisposeList()

VOID FxDeviceBase::AddToDisposeList ( __inout FxObject Object)
inline

Definition at line 387 of file fxdevice.hpp.

390  {
392  }
FxDisposeList * m_DisposeList
Definition: fxdevice.hpp:466
VOID Add(FxObject *object)
_Must_inspect_result_ _In_ WDFCOLLECTION _In_ WDFOBJECT Object

Referenced by FxObject::QueueDeferredDisposeLocked().

◆ AllocateDmaEnablerList()

virtual _Must_inspect_result_ NTSTATUS FxDeviceBase::AllocateDmaEnablerList ( VOID  )
inlinevirtual

Reimplemented in FxDevice.

Definition at line 308 of file fxdevice.hpp.

311  {
312  return STATUS_SUCCESS;
313  }
#define STATUS_SUCCESS
Definition: shellext.h:65

◆ AllocateEnumInfo()

virtual _Must_inspect_result_ NTSTATUS FxDeviceBase::AllocateEnumInfo ( VOID  )
inlinevirtual

Reimplemented in FxDevice.

Definition at line 274 of file fxdevice.hpp.

277  {
278  return STATUS_SUCCESS;
279  }
#define STATUS_SUCCESS
Definition: shellext.h:65

◆ AllocateTarget()

_Must_inspect_result_ NTSTATUS FxDeviceBase::AllocateTarget ( _Out_ FxIoTarget **  Target,
_In_ BOOLEAN  SelfTarget 
)

Definition at line 329 of file fxdevicebase.cpp.

351 {
354 
355  if (SelfTarget) {
358  } else {
361  }
362 
363  if (pTarget == NULL) {
365 
368  "WDFDEVICE %p could not allocate a WDFIOTARGET, %!STATUS!",
369  GetHandle(), status);
370 
371  goto Done;
372  }
373 
375  if (!NT_SUCCESS(status)) {
378  "WDFDEVICE %p failed to initialize (add) a WDFIOTARGET, %!STATUS!",
379  GetHandle(), status);
380 
381  goto Done;
382  }
383 
384  status = pTarget->Init(this);
385  if (!NT_SUCCESS(status)) {
388  "WDFDEVICE %p failed to initialize a WDFIOTARGET, %!STATUS!",
389  GetHandle(), status);
390 
391  goto Done;
392  }
393 
395  if (!NT_SUCCESS(status)) {
398  "WDFDEVICE %p failed to initialize (commit) a WDFIOTARGET, %!STATUS!",
399  GetHandle(), status);
400 
401  goto Done;
402  }
403 
405 
406 Done:
407  if (!NT_SUCCESS(status)) {
408  if (pTarget != NULL) {
410  pTarget = NULL;
411  }
412  }
413 
414  *Target = pTarget;
415 
416  return status;
417 }
FxIoTarget * pTarget
Definition: fxdeviceapi.cpp:97
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
_Must_inspect_result_ NTSTATUS Commit(__in_opt PWDF_OBJECT_ATTRIBUTES Attributes, __out_opt WDFOBJECT *ObjectHandle, __in_opt FxObject *Parent=NULL, __in BOOLEAN AssignDriverAsDefaultParent=TRUE)
Definition: fxobject.cpp:904
WDFDEVICE __inline GetHandle(VOID)
Definition: fxdevice.hpp:237
LONG NTSTATUS
Definition: precomp.h:26
virtual _Must_inspect_result_ NTSTATUS AddIoTarget(__inout FxIoTarget *IoTarget)
Definition: fxdevice.hpp:247
#define TRACINGDEVICE
Definition: dbgtrace.h:58
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
_Must_inspect_result_ NTSTATUS Init(__in CfxDeviceBase *Device)
#define TRACE_LEVEL_ERROR
Definition: storswtr.h:27
__inline PFX_DRIVER_GLOBALS GetDriverGlobals(VOID)
Definition: fxobject.hpp:734
DoTraceLevelMessage(pFxDriverGlobals, TRACE_LEVEL_VERBOSE, TRACINGPNP, "Enter, WDFDEVICE %p", Device)
#define NULL
Definition: types.h:112
#define WDF_NO_OBJECT_ATTRIBUTES
Definition: wdftypes.h:105
_In_ WDFIOTARGET Target
Definition: wdfrequest.h:306
VOID DeleteFromFailedCreate(VOID)
Definition: fxobject.cpp:391
#define STATUS_SUCCESS
Definition: shellext.h:65
static SERVICE_STATUS status
Definition: service.c:31
Definition: ps.c:97

Referenced by FxPkgFdo::PostCreateDeviceInitialize().

◆ ConfigureConstraints()

NTSTATUS FxDeviceBase::ConfigureConstraints ( __in_opt PWDF_OBJECT_ATTRIBUTES  ObjectAttributes)

Definition at line 93 of file fxdevicebase.cpp.

96 {
98  WDF_EXECUTION_LEVEL driverLevel;
99  WDF_SYNCHRONIZATION_SCOPE driverScope;
100 
101  ASSERT(m_Driver != NULL);
102 
103  //
104  // If WDF_OBJECT_ATTRIBUTES is specified, these override any
105  // default settings.
106  //
107  if (ObjectAttributes != NULL) {
108  m_ExecutionLevel = ObjectAttributes->ExecutionLevel;
109  m_SynchronizationScope = ObjectAttributes->SynchronizationScope;
110  }
111 
112  //
113  // If no WDFDEVICE specific attributes are specified, we
114  // get them from WDFDRIVER, which allows WDFDRIVER to
115  // provide a default for all WDFDEVICE's created.
116  //
117  m_Driver->GetConstraints(&driverLevel, &driverScope);
118 
120  m_ExecutionLevel = driverLevel;
121  }
122 
124  m_SynchronizationScope = driverScope;
125  }
126 
127  //
128  // Configure The Execution Level Constraint
129  //
133  //
134  // Currently, all event callbacks from FxDevice into the driver
135  // are from PASSIVE_LEVEL threads, and there is no need to defer
136  // to a system workitem like IoQueue. So we don't allocate and
137  // setup an FxSystemWorkItem here.
138  //
139  // If the FxDevice starts raising events to the device driver
140  // whose thread starts out above PASSIVE_LEVEL, then an FxSystemWorkItem
141  // would need to be allocated when WdfExecutionLevelPassive is specified.
142  //
143  // (FDO and PDO variants of FxDevice may own their own event dispatch
144  // and deferral logic separate from FxDevice.)
145  //
146  }
147  else {
150  }
151 
152  //
153  // Finish initializing the spin/mutex lock.
154  //
155  if (NULL == m_CallbackLockPtr) {
159  "WDFDEVICE %p, could not allocate callback lock, %!STATUS!",
160  GetHandle(), status);
161  goto Done;
162  }
163 
166 
168 
169 Done:
170  return status;
171 }
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:35
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
WDFDEVICE __inline GetHandle(VOID)
Definition: fxdevice.hpp:237
LONG NTSTATUS
Definition: precomp.h:26
#define TRACINGOBJECT
Definition: dbgtrace.h:59
virtual void Initialize(FxObject *ParentObject)=0
FxCallbackLock * m_CallbackLockPtr
Definition: fxdevice.hpp:475
enum _WDF_SYNCHRONIZATION_SCOPE WDF_SYNCHRONIZATION_SCOPE
#define ASSERT(a)
Definition: mode.c:44
WDF_EXECUTION_LEVEL m_ExecutionLevel
Definition: fxdevice.hpp:478
#define TRACE_LEVEL_ERROR
Definition: storswtr.h:27
WDF_SYNCHRONIZATION_SCOPE m_SynchronizationScope
Definition: fxdevice.hpp:479
__inline PFX_DRIVER_GLOBALS GetDriverGlobals(VOID)
Definition: fxobject.hpp:734
FxObject * m_CallbackLockObjectPtr
Definition: fxdevice.hpp:476
virtual VOID GetConstraints(__out WDF_EXECUTION_LEVEL *ExecutionLevel, __out WDF_SYNCHRONIZATION_SCOPE *SynchronizationScope)
Definition: fxdriver.hpp:282
DoTraceLevelMessage(pFxDriverGlobals, TRACE_LEVEL_VERBOSE, TRACINGPNP, "Enter, WDFDEVICE %p", Device)
#define NULL
Definition: types.h:112
WDF_EXTERN_C_START enum _WDF_EXECUTION_LEVEL WDF_EXECUTION_LEVEL
FxDriver * m_Driver
Definition: fxdevice.hpp:469
#define STATUS_SUCCESS
Definition: shellext.h:65
static SERVICE_STATUS status
Definition: service.c:31
Definition: ps.c:97

Referenced by FxDevice::Initialize().

◆ GetAttachedDevice()

◆ GetAttachedDeviceObjectFlags()

ULONG __inline FxDeviceBase::GetAttachedDeviceObjectFlags ( VOID  )
inline

Definition at line 219 of file fxdevice.hpp.

222  {
223  return m_AttachedDevice.GetFlags();
224  }
MxDeviceObject m_AttachedDevice
Definition: fxdevice.hpp:472
ULONG GetFlags(VOID)

Referenced by FxPkgPnp::SetUsageNotificationFlags().

◆ GetAttachedDeviceReference()

__inline MdDeviceObject FxDeviceBase::GetAttachedDeviceReference ( VOID  )
inline

Definition at line 429 of file fxdevice.hpp.

432  {
434  }
static __inline MdDeviceObject MxGetAttachedDeviceReference(__in MdDeviceObject DriverObject)
Definition: mxgeneralkm.h:415
__inline MdDeviceObject GetObject(VOID)
MxDeviceObject m_DeviceObject
Definition: fxdevice.hpp:471

Referenced by FxPkgPnp::CreatePowerThreadIfNeeded(), FxPkgPnp::PnpDeviceUsageNotification(), and QueryForInterface().

◆ GetCallbackLockPtr()

FxCallbackLock * FxDeviceBase::GetCallbackLockPtr ( __out_opt FxObject **  LockObject)
virtual

Implements IFxHasCallbacks.

Definition at line 189 of file fxdevicebase.cpp.

192 {
193  if (LockObject != NULL) {
195  }
196 
197  return m_CallbackLockPtr;
198 }
FxCallbackLock * m_CallbackLockPtr
Definition: fxdevice.hpp:475
FxObject * m_CallbackLockObjectPtr
Definition: fxdevice.hpp:476
#define NULL
Definition: types.h:112
#define LockObject(Object)
Definition: titypes.h:34

Referenced by FxPkgGeneral::ConfigureConstraints(), and FxIoQueue::ConfigureConstraints().

◆ GetConstraints()

VOID FxDeviceBase::GetConstraints ( __out_opt WDF_EXECUTION_LEVEL ExecutionLevel,
__out_opt WDF_SYNCHRONIZATION_SCOPE SynchronizationScope 
)

Definition at line 174 of file fxdevicebase.cpp.

178 {
179  if (ExecutionLevel != NULL) {
180  *ExecutionLevel = m_ExecutionLevel;
181  }
182 
183  if (SynchronizationScope != NULL) {
184  *SynchronizationScope = m_SynchronizationScope;
185  }
186 }
WDF_EXECUTION_LEVEL m_ExecutionLevel
Definition: fxdevice.hpp:478
WDF_SYNCHRONIZATION_SCOPE m_SynchronizationScope
Definition: fxdevice.hpp:479
#define NULL
Definition: types.h:112

Referenced by FxPkgGeneral::ConfigureConstraints(), and FxIoQueue::ConfigureConstraints().

◆ GetDefaultIoTarget()

virtual FxIoTarget* FxDeviceBase::GetDefaultIoTarget ( VOID  )
inlinevirtual

Reimplemented in FxMpDevice, and FxDevice.

Definition at line 438 of file fxdevice.hpp.

441  {
442  return NULL;
443  }
#define NULL
Definition: types.h:112

◆ GetDeviceObject()

MdDeviceObject __inline FxDeviceBase::GetDeviceObject ( VOID  )
inline

Definition at line 174 of file fxdevice.hpp.

177  {
178  return m_DeviceObject.GetObject();
179  }
__inline MdDeviceObject GetObject(VOID)
MxDeviceObject m_DeviceObject
Definition: fxdevice.hpp:471

Referenced by __drv_maxIRQL(), __drv_strictTypeMatch(), FxDevice::_Create(), _Function_class_(), FxPkgPdo::_QueryCapsWorkItem(), FxPkgGeneral::AcquireRemoveLockForClose(), FxPkgPnp::CleanupStateMachines(), FxPkgPnp::CommitUsageNotification(), FxUsbPipeContinuousReader::Config(), FxPkgPnp::CreatePowerThread(), FxDevice::DeleteDeviceFromFailedCreateNoDelete(), FxPkgPnp::DisconnectInterruptNP(), FxWmiIrpHandler::Dispatch(), FxPkgIo::Dispatch(), FxPkgGeneral::Dispatch(), FxPkgPnp::Dispatch(), FxPkgFdo::DispatchDeviceSetPower(), FxPkgPdo::DispatchDeviceSetPower(), FxPkgFdo::DispatchSystemSetPower(), FxPkgPdo::DispatchSystemSetPower(), FxPkgPnp::DispatchWaitWake(), FxUsbDevice::Dispose(), FxPkgGeneral::ForwardCreateRequest(), FxIoQueue::ForwardRequestToParent(), FxMessageDispatch::GetDeviceObject(), FxDevice::GetRemoveLock(), FxPkgFdo::HandleQueryPnpDeviceStateCompletion(), if(), FxDmaEnabler::Initialize(), FxTimer::Initialize(), FxWorkItem::Initialize(), FxIoQueue::Initialize(), FxInterrupt::InitializeWorker(), FxDevice::InvalidateDeviceState(), FxPowerIdleMachine::IoDecrement(), FxPkgPnp::NotPowerPolicyOwnerEnterNewState(), FxPkgPnp::PnpDeviceUsageNotification(), FxPkgPnp::PnpEnterNewState(), FxPkgPdo::PnpEventEjectHardwareOverload(), FxPkgPnp::PnpMatchResources(), FxPkgPnp::PnpProcessEvent(), FxPkgPnp::PnpProcessEventInner(), FxPkgPdo::PnpQueryCapabilities(), FxPkgPdo::PnpQueryDeviceRelations(), FxPkgPdo::PnpQueryResourceRequirements(), FxPkgFdo::PnpSendStartDeviceDownTheStackOverload(), FxPkgGeneral::PostCreateDeviceInitialize(), FxPkgPnp::PowerConnectInterruptFailed(), FxPkgPnp::PowerEnterNewState(), FxPkgPnp::PowerGotoDxIoStopped(), FxPkgPnp::PowerGotoDxIoStoppedNP(), FxPkgPnp::PowerMakeWakeRequestNonCancelable(), FxPkgPnp::PowerPolicyCanIdlePowerDown(), FxPkgPnp::PowerPolicyEnterNewState(), FxPkgPnp::PowerPolicyProcessEvent(), FxPkgPnp::PowerPolicyProcessEventInner(), FxPkgPnp::PowerPolicySendDevicePowerRequest(), FxPkgPnp::PowerPolicySendWaitWakeRequest(), FxPkgPnp::PowerPolicySetS0IdleSettings(), FxPkgPnp::PowerPolicyUpdateSystemWakeSource(), FxPkgPnp::PowerProcessEvent(), FxPkgPnp::PowerProcessEventInner(), FxPkgPnp::PowerSetDevicePowerState(), FxPoxInterface::PoxRegisterDevice(), FxPkgPnp::ProcessDelayedDeletion(), FxDevicePwrRequirementMachine::ProcessEvent(), FxWakeInterruptMachine::ProcessEvent(), FxSelfManagedIoMachine::ProcessEvent(), FxDevicePwrRequirementMachine::ProcessEventInner(), FxWakeInterruptMachine::ProcessEventInner(), FxPowerIdleMachine::ProcessEventLocked(), FxPkgPnp::QueryForCapabilities(), FxIoQueue::QueueDriverCreatedRequest(), FxEventQueue::QueueToThreadWorker(), FxPkgFdo::RaiseDevicePower(), FxIoTargetSelf::Send(), FxEventQueue::SetDelayedDeletion(), FxPkgPnp::SetDeviceFailed(), FxPkgPnp::SetInternalFailure(), and FxPkgPnp::SetUsageNotificationFlags().

◆ GetDeviceObjectFlags()

ULONG __inline FxDeviceBase::GetDeviceObjectFlags ( VOID  )
inline

◆ GetDriver()

__inline FxDriver* FxDeviceBase::GetDriver ( VOID  )
inline

◆ GetHandle()

WDFDEVICE __inline FxDeviceBase::GetHandle ( VOID  )
inline

Definition at line 237 of file fxdevice.hpp.

240  {
241  return (WDFDEVICE) GetObjectHandle();
242  }
PVOID __inline GetObjectHandle(VOID)
Definition: fxobject.hpp:603

Referenced by __drv_maxIRQL(), __drv_when(), FxDmaScatterGatherTransaction::_AdapterListControl(), FxIoTargetRemote::_Create(), _Function_class_(), FxPkgPdo::_PnpEject(), FxPkgPdo::_PnpQueryDeviceText(), FxPkgPdo::_PnpQueryId(), FxPkgPdo::_PnpSetLock(), _SearchForDevice(), FxPkgPdo::AddEjectionDevice(), FxPkgPnp::AddRemovalDevice(), FxPkgPnp::AddUsageDevice(), FxPkgPnp::AllocateEnumInfo(), AllocateTarget(), FxDevice::AssignProperty(), FxDmaSystemTransaction::CallEvtDmaCompleted(), FxPkgPnp::CleanupStateMachines(), FxPkgPnp::CommitUsageNotification(), FxPkgGeneral::ConfigureConstraints(), ConfigureConstraints(), FxPkgGeneral::ConfigureFileObjectClass(), FxInterrupt::Connect(), FxPkgPnp::CreatePowerThread(), FxPkgIo::CreateQueue(), FxDevice::CreateSymbolicLink(), FxInterrupt::Disconnect(), FxPkgPnp::DisconnectInterruptNP(), FxWmiIrpHandler::Dispatch(), FxPkgIo::Dispatch(), FxPkgGeneral::Dispatch(), FxPkgPnp::Dispatch(), FxPkgFdo::DispatchDeviceSetPower(), FxPkgPdo::DispatchDeviceSetPower(), FxPkgIo::DispatchStep1(), FxPkgIo::DispathToInCallerContextCallback(), FxInterrupt::DpcHandler(), FxPkgPnp::FilterResourceRequirements(), FxInterrupt::ForceDisconnect(), FxInterrupt::ForceReconnect(), FxWmiProvider::FunctionControl(), FxDevice::FxValidateInterfacePropertyData(), FxChildList::GetDevice(), FxRequest::GetDeviceControlOutputMdl(), FxRequest::GetDeviceControlOutputMemoryObject(), FxDmaEnabler::GetDeviceHandle(), FxSelfManagedIoMachine::GetDeviceHandle(), FxIoTarget::GetDeviceHandle(), FxRequest::GetMdl(), FxRequest::GetMemoryObject(), FxChildList::GetNextStaticDevice(), FxPkgPnp::HandleQueryBusInformation(), FxPkgPnp::HandleQueryBusRelations(), FxPkgPnp::HandleQueryDeviceRelations(), FxPkgPnp::HandleQueryInterface(), FxPkgFdo::HandleQueryPnpDeviceStateCompletion(), if(), FxPowerIdleMachine::InDxIoIncrement(), FxPkgPnp::Initialize(), FxInterrupt::InterruptDisableInvokeCallback(), FxInterrupt::InterruptEnableInvokeCallback(), FxPowerIdleMachine::IoDecrement(), FxPkgPnp::NotPowerPolicyOwnerEnterNewState(), FxPkgGeneral::OnCreate(), FxPkgGeneral::OnShutdown(), PerfEvtIoStopStart(), PerfEvtIoStopStop(), PerfIoComplete(), PerfIoStart(), FxPkgPnp::PnpDeviceUsageNotification(), FxPkgPnp::PnpEnterNewState(), FxPkgPdo::PnpEventEjectHardwareOverload(), FxPkgFdo::PnpFilterResourceRequirements(), FxPkgPnp::PnpMatchResources(), FxPkgPnp::PnpProcessEvent(), FxPkgPnp::PnpProcessEventInner(), FxPkgPdo::PnpQueryDeviceRelations(), FxPkgPdo::PnpQueryResourceRequirements(), FxPkgPdo::PnpQueryResources(), FxPkgPnp::PnpReleaseHardware(), FxPkgFdo::PnpSendStartDeviceDownTheStackOverload(), FxPkgGeneral::PostCreateDeviceInitialize(), FxPkgPnp::PowerConnectInterruptFailed(), FxPkgPdo::PowerDisableWakeAtBusOverload(), FxPkgPdo::PowerEnableWakeAtBusOverload(), FxPkgPnp::PowerEnterNewState(), FxPkgPnp::PowerGotoDxIoStopped(), FxPkgPnp::PowerGotoDxIoStoppedNP(), FxPkgPnp::PowerMakeWakeRequestNonCancelable(), FxPkgPnp::PowerPolicyCanIdlePowerDown(), FxPkgPnp::PowerPolicyDisarmWakeFromSx(), FxPkgPnp::PowerPolicyEnterNewState(), FxPkgPnp::PowerPolicyProcessEvent(), FxPkgPnp::PowerPolicyProcessEventInner(), FxPkgPnp::PowerPolicySendDevicePowerRequest(), FxPkgPnp::PowerPolicyUpdateSystemWakeSource(), FxPkgPnp::PowerProcessEvent(), FxPkgPnp::PowerProcessEventInner(), FxPowerIdleMachine::PowerReferenceWorker(), FxPoxInterface::PoxRegisterDevice(), FxDmaSystemTransaction::PreMapTransfer(), FxPkgPnp::ProcessDelayedDeletion(), FxDevicePwrRequirementMachine::ProcessEvent(), FxWakeInterruptMachine::ProcessEvent(), FxSelfManagedIoMachine::ProcessEvent(), FxDevicePwrRequirementMachine::ProcessEventInner(), FxWakeInterruptMachine::ProcessEventInner(), FxPowerIdleMachine::ProcessEventLocked(), FxEventQueue::QueueToThreadWorker(), FxPkgIo::ResetStateForRestart(), FxPkgIo::ResumeProcessingForPower(), FxPkgPnp::SaveState(), FxEventQueue::SetDelayedDeletion(), FxPkgPnp::SetPendingPnpIrp(), FxPkgPnp::SetUsageNotificationFlags(), FxDmaPacketTransaction::StageTransfer(), FxPkgIo::StopProcessingForPower(), FxPowerIdleMachine::TimedOutIoIncrement(), FxPkgPnp::ValidateCmResource(), FxPkgPnp::ValidateInterruptResourceCm(), WdfInterruptGetDevice(), and FxInterrupt::WorkItemHandler().

◆ GetMxDeviceObject()

__inline MxDeviceObject* FxDeviceBase::GetMxDeviceObject ( VOID  )
inline

Definition at line 183 of file fxdevice.hpp.

186  {
187  return &m_DeviceObject;
188  }
MxDeviceObject m_DeviceObject
Definition: fxdevice.hpp:471

Referenced by FxFileObject::_GetFileObjectFromWdm(), FxDevice::InvalidateDeviceState(), and FxPkgPnp::SetDeviceFailed().

◆ GetPhysicalDevice()

◆ Init()

VOID FxDeviceBase::Init ( __in MdDeviceObject  DeviceObject,
__in MdDeviceObject  AttachedDevice,
__in MdDeviceObject  PhysicalDevice 
)
protected

Definition at line 202 of file fxdevicebase.cpp.

207 {
209  m_AttachedDevice.SetObject(AttachedDevice);
211 }
MxDeviceObject m_AttachedDevice
Definition: fxdevice.hpp:472
_In_ PDEVICE_OBJECT DeviceObject
Definition: wdfdevice.h:2055
MxDeviceObject m_PhysicalDevice
Definition: fxdevice.hpp:473
__inline VOID SetObject(__in_opt MdDeviceObject DeviceObject)
MxDeviceObject m_DeviceObject
Definition: fxdevice.hpp:471
_Must_inspect_result_ _In_ WDFDEVICE _In_ PDEVICE_OBJECT PhysicalDevice
Definition: wdfdevice.h:2320

Referenced by FxMpDevice::FxMpDevice().

◆ QueryForInterface()

_Must_inspect_result_ NTSTATUS FxDeviceBase::QueryForInterface ( __in const GUID InterfaceType,
__out PINTERFACE  Interface,
__in USHORT  Size,
__in USHORT  Version,
__in PVOID  InterfaceSpecificData,
__in_opt MdDeviceObject  TargetDevice = NULL 
)

Definition at line 33 of file fxdevicebasekm.cpp.

66 {
69 
70  //
71  // PnP rules dictate you send the QI through the entire stack and not just
72  // the stack below you...but we let the caller override this. There are
73  // some stacks which are not PnP reentrant, so sending a QI from a lower
74  // filter might cause the stack to stop responding if the FDO is synchronously
75  // sending a PnP irp down the stack already.
76  //
77  if (TargetDevice == NULL) {
79  }
80  else {
81  //
82  // To make the exit logic simpler below, just add our own reference.
83  //
86  }
87 
91  Interface,
92  Size,
93  Version,
95  );
96 
98 
99  return status;
100 }
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID _Out_ PINTERFACE _In_ USHORT _In_ USHORT _In_opt_ PVOID InterfaceSpecificData
Definition: wdffdo.h:461
_Must_inspect_result_ __drv_aliasesMem PDEVICE_OBJECT _In_ PDEVICE_OBJECT TargetDevice
Definition: iofuncs.h:690
LONG NTSTATUS
Definition: precomp.h:26
IN PVOID IN PVOID IN USHORT IN USHORT Size
Definition: pci.h:361
__inline MdDeviceObject GetAttachedDeviceReference(VOID)
Definition: fxdevice.hpp:429
PDEVICE_OBJECT pTopOfStack
static __inline VOID MxReferenceObject(__in PVOID Object)
Definition: mxgeneralkm.h:238
IN PVOID IN PVOID IN USHORT Version
Definition: pci.h:361
IN PVOID IN PVOID IN USHORT IN USHORT IN PINTERFACE Interface
Definition: pci.h:361
static _Must_inspect_result_ NTSTATUS _QueryForInterface(__in PDEVICE_OBJECT TopOfStack, __in const GUID *InterfaceType, __out PINTERFACE Interface, __in USHORT Size, __in USHORT Version, __in_opt PVOID InterfaceSpecificData)
#define NULL
Definition: types.h:112
static __inline VOID MxDereferenceObject(__in PVOID Object)
Definition: mxgeneralkm.h:247
static SERVICE_STATUS status
Definition: service.c:31
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID InterfaceType
Definition: wdffdo.h:461
Definition: ps.c:97

Referenced by FxPkgFdo::QueryForPowerThread(), and FxPkgFdo::QueryForReenumerationInterface().

◆ QueryInterface()

_Must_inspect_result_ NTSTATUS FxDeviceBase::QueryInterface ( __inout FxQueryInterfaceParams Params)

Definition at line 72 of file fxdevicebase.cpp.

75 {
76  switch (Params->Type) {
78  *Params->Object = this;
79  break;
80 
82  *Params->Object = (IFxHasCallbacks*) this;
83  break;
84 
85  default:
86  return FxNonPagedObject::QueryInterface(Params); // __super call
87  }
88 
89  return STATUS_SUCCESS;
90 }
_In_ WDFIOTARGET _In_ PWDF_REQUEST_COMPLETION_PARAMS Params
Definition: wdfrequest.h:306
virtual _Must_inspect_result_ NTSTATUS QueryInterface(__in FxQueryInterfaceParams *Params)
Definition: fxobject.cpp:255
#define STATUS_SUCCESS
Definition: shellext.h:65

Referenced by _SearchForDevice(), and FxDevice::QueryInterface().

◆ ReleaseDmaPacketTransaction()

__inline VOID FxDeviceBase::ReleaseDmaPacketTransaction ( VOID  )
inline

Definition at line 373 of file fxdevice.hpp.

376  {
377  LONG val;
378 
381 
382  ASSERT(val == FxDmaPacketTransactionPending); // To catch double release
384  }
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:317
long LONG
Definition: pedump.c:60
GLuint GLfloat * val
Definition: glext.h:7180
#define ASSERT(a)
Definition: mode.c:44
#define InterlockedExchange
Definition: armddk.h:54
LONG m_DmaPacketTransactionStatus
Definition: fxdevice.hpp:484

Referenced by FxDmaPacketTransaction::ReleaseDevice().

◆ RemoveChildList()

virtual VOID FxDeviceBase::RemoveChildList ( __inout FxChildList List)
inlinevirtual

Reimplemented in FxDevice.

Definition at line 295 of file fxdevice.hpp.

298  {
299  //
300  // Intentionally does nothing
301  //
303  }
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:317
_Must_inspect_result_ _In_ WDFCMRESLIST List
Definition: wdfresource.h:550

◆ RemoveDmaEnabler()

virtual VOID FxDeviceBase::RemoveDmaEnabler ( __inout FxDmaEnabler Enabler)
inlinevirtual

Reimplemented in FxDevice.

Definition at line 329 of file fxdevice.hpp.

332  {
333  //
334  // Intentionally does nothing
335  //
336  UNREFERENCED_PARAMETER(Enabler);
337  }
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:317

Referenced by FxDmaEnabler::Dispose().

◆ RemoveIoTarget()

virtual VOID FxDeviceBase::RemoveIoTarget ( __inout FxIoTarget IoTarget)
inlinevirtual

Reimplemented in FxDevice.

Definition at line 261 of file fxdevice.hpp.

264  {
265  //
266  // Intentionally does nothing
267  //
269  }
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:317
_Must_inspect_result_ _In_ WDFDEVICE _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFIOTARGET * IoTarget
Definition: wdfiotarget.h:363

Referenced by FxIoTarget::Dispose().

◆ SetDeviceObjectFlags()

VOID __inline FxDeviceBase::SetDeviceObjectFlags ( _In_ ULONG  Flags)
inline

Definition at line 201 of file fxdevice.hpp.

204  {
206  }
VOID SetFlags(ULONG Flags)
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
MxDeviceObject m_DeviceObject
Definition: fxdevice.hpp:471

Referenced by FxPkgPnp::RevertUsageNotificationFlags(), and FxPkgPnp::SetUsageNotificationFlags().

◆ SetDeviceTelemetryInfoFlags()

virtual VOID FxDeviceBase::SetDeviceTelemetryInfoFlags ( _In_ FxDeviceInfoFlags  Flag)
inlinevirtual

Reimplemented in FxDevice.

Definition at line 341 of file fxdevice.hpp.

344  {
345  //
346  // Intentionally does nothing
347  //
349  }
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:317
Definition: xml2sdb.h:79

Referenced by FxDmaEnabler::Initialize().

Member Data Documentation

◆ m_AttachedDevice

◆ m_CallbackLockObjectPtr

FxObject* FxDeviceBase::m_CallbackLockObjectPtr
protected

Definition at line 476 of file fxdevice.hpp.

Referenced by ConfigureConstraints(), FxDeviceBase(), and GetCallbackLockPtr().

◆ m_CallbackLockPtr

FxCallbackLock* FxDeviceBase::m_CallbackLockPtr
protected

◆ m_DeviceObject

◆ m_DisposeList

◆ m_DmaPacketTransactionStatus

LONG FxDeviceBase::m_DmaPacketTransactionStatus
protected

◆ m_Driver

FxDriver* FxDeviceBase::m_Driver
protected

◆ m_ExecutionLevel

WDF_EXECUTION_LEVEL FxDeviceBase::m_ExecutionLevel
protected

Definition at line 478 of file fxdevice.hpp.

Referenced by ConfigureConstraints(), FxDeviceBase(), and GetConstraints().

◆ m_PhysicalDevice

MxDeviceObject FxDeviceBase::m_PhysicalDevice
protected

◆ m_SynchronizationScope

WDF_SYNCHRONIZATION_SCOPE FxDeviceBase::m_SynchronizationScope
protected

Definition at line 479 of file fxdevice.hpp.

Referenced by ConfigureConstraints(), FxDeviceBase(), and GetConstraints().


The documentation for this class was generated from the following files: