ReactOS  0.4.15-dev-2534-geba00d1
fxchildlist.hpp
Go to the documentation of this file.
1 /*++
2 
3 Copyright (c) Microsoft Corporation. All rights reserved.
4 
5 Module Name:
6 
7  FxChildList.hpp
8 
9 Abstract:
10 
11  Defines the interface for asynchronously creating and destroying child
12  devices
13 
14 Author:
15 
16 
17 
18 Environment:
19 
20  Both kernel and user mode
21 
22 Revision History:
23 
24 --*/
25 
26 #ifndef _FXDEVICELIST_H_
27 #define _FXDEVICELIST_H_
28 
32 };
33 
35 
37  __in PFX_DRIVER_GLOBALS FxDriverGlobals
38  ) :
39  FxCallback(FxDriverGlobals),
40  m_Method(NULL)
41  {
42  }
43 
45  NTSTATUS
47  __in WDFCHILDLIST DeviceList,
50  )
51  {
53 
54  CallbackStart();
56  CallbackEnd();
57 
58  return status;
59  }
60 
62 };
63 
65 
67  __in PFX_DRIVER_GLOBALS FxDriverGlobals
68  ) :
69  FxCallback(FxDriverGlobals),
70  m_Method(NULL)
71  {
72  }
73 
74  VOID
76  __in WDFCHILDLIST DeviceList
77  )
78  {
79  if (m_Method != NULL) {
80  CallbackStart();
82  CallbackEnd();
83  }
84  }
85 
87 };
88 
93 };
94 
100 };
101 
104 
105 public:
106 
107  static
109  NTSTATUS
112  __in PFX_DRIVER_GLOBALS FxDriverGlobals,
113  __in PWDF_OBJECT_ATTRIBUTES ListAttributes,
114  __in size_t TotalDescriptionSize,
116  __in PWDF_CHILD_LIST_CONFIG ListConfig,
118  );
119 
120  WDFCHILDLIST
122  VOID
123  )
124  {
125  return (WDFCHILDLIST) GetObjectHandle();
126  }
127 
128  MxEvent*
130  VOID
131  )
132  {
133  return m_ScanEvent.GetSelfPointer();
134  }
135 
136  WDFDEVICE
137  GetDevice(
138  VOID
139  );
140 
141  CfxDevice*
144  );
145 
147  NTSTATUS
151  );
152 
153  VOID
157  );
158 
159  VOID
160  BeginScan(
161  __out_opt PULONG ScanTag = NULL
162  );
163 
164  VOID
165  EndScan(
166  __inout_opt PULONG ScanTag = NULL
167  );
168 
169  VOID
170  CancelScan(
171  __in BOOLEAN EndTheScan,
172  __inout_opt PULONG ScanTag
173  );
174 
175  VOID
178  );
179 
180  VOID
181  EndIteration(
183  );
184 
185  VOID
186  InitIterator(
188  );
189 
191  NTSTATUS
193  __out WDFDEVICE* Device,
196  );
197 
198  WDFDEVICE
200  __in WDFDEVICE PreviousDevice,
202  );
203 
204  BOOLEAN
206  __in PULONG ScanTag
207  )
208  {
209  return *ScanTag == ScanTagCancelled ? TRUE : FALSE;
210  }
211 
213  NTSTATUS
216  );
217 
219  NTSTATUS
222  );
223 
224  VOID
227  );
228 
229  VOID
231  __in_opt PULONG ScanTag = NULL
232  );
233 
235  NTSTATUS
236  Add(
239  __in_opt PULONG ScanTag = NULL
240  );
241 
242  VOID
246  );
247 
248  BOOLEAN
250  VOID
251  )
252  {
253  return m_AddressDescriptionSize > 0 ? TRUE : FALSE;
254  }
255 
256  ULONG
258  VOID
259  )
260  {
262  }
263 
264  ULONG
266  VOID
267  )
268  {
270  }
271 
272  VOID
276  )
277  {
280  }
281  else {
283  }
284  }
285 
287  NTSTATUS
289  __inout PDEVICE_RELATIONS *DeviceRelations
290  );
291 
292  VOID
294  VOID
295  );
296 
297  VOID
299  VOID
300  );
301 
302  VOID
304  __in NTSTATUS WakeWakeStatus
305  );
306 
307  VOID
309  VOID
310  )
311  {
313  }
314 
315  //
316  // This notification is for the parent device.
317  // Child pnp remove notifications occur on the FxDeviceDescriptionEntry
318  //
319  VOID
321  VOID
322  );
323 
324  //
325  // This notification is for the parent device.
326  // Child pnp remove notifications occur on the FxDeviceDescriptionEntry
327  //
328  VOID
330  __inout PLONG ChildCount
331  );
332 
333  BOOLEAN
335  VOID
336  )
337  {
338  return m_StaticList;
339  }
340 
341  static
343  NTSTATUS
345  __in PFX_DRIVER_GLOBALS FxDriverGlobals,
347  __in size_t* TotalDescriptionSize
348  );
349 
350  static
352  NTSTATUS
354  __in PFX_DRIVER_GLOBALS FxDriverGlobals,
356  __in size_t* TotalDescriptionSize
357  );
358 
359  static
360  size_t
363  )
364  {
365  if (Count == 0) {
366  return sizeof(((PDEVICE_RELATIONS) NULL)->Count);
367  }
368  else {
369  return sizeof(DEVICE_RELATIONS) + (Count-1)*sizeof(PDEVICE_OBJECT);
370  }
371  }
372 
373  static
374  FxChildList*
377  )
378  {
380  }
381 
382  ULONG
384  VOID
385  )
386  {
387  return m_ScanCount;
388  }
389 
390 protected:
391 
392  FxChildList(
393  __in PFX_DRIVER_GLOBALS FxDriverGlobals,
394  __in size_t TotalDescriptionSize,
397  );
398 
399  virtual
400  BOOLEAN
401  Dispose(
402  VOID
403  );
404 
405  VOID
406  Initialize(
408  );
409 
410  BOOLEAN
413  __in BOOLEAN FromQDR
414  );
415 
416  BOOLEAN
418  __inout PLIST_ENTRY FreeListHead,
420  __in BOOLEAN FromQDR
421  );
422 
423  VOID
425  __inout PLIST_ENTRY FreeListHead
426  );
427 
428  VOID
430  __inout FxDeviceDescriptionEntry* DescriptionEntry,
431  __in BOOLEAN ModificationCanBeQueued
432  );
433 
434  VOID
436  __inout PLIST_ENTRY FreeListHead,
437  __inout FxDeviceDescriptionEntry* ModificationEntry
438  );
439 
440  VOID
442  __inout PLIST_ENTRY FreeListHead
443  );
444 
448  );
449 
453  );
454 
456  NTSTATUS
459  );
460 
462  NTSTATUS
465  );
466 
467  BOOLEAN
468  CreateDevice(
470  __inout PBOOLEAN InvalidateRelations
471  );
472 
474  NTSTATUS
478  )
479  {
482  Source,
483  Dest);
484  }
485  else {
487  return STATUS_SUCCESS;
488  }
489  }
490 
491  BOOLEAN
495  )
496  {
499  Lhs,
500  Rhs);
501  }
502  else {
504  RtlCompareMemory(Lhs,
505  Rhs,
507  : FALSE;
508  }
509  }
510 
512  NTSTATUS
516  )
517  {
520  }
521  else {
523  return STATUS_SUCCESS;
524  }
525  }
526 
527  VOID
531  )
532  {
533  if (Source != NULL) {
536  }
537  else {
539  }
540  }
541  }
542 
543  VOID
547  )
548  {
549  if (m_EvtAddressDescriptionCleanup != NULL && AddrDescription != NULL) {
550  m_EvtAddressDescriptionCleanup(GetHandle(), AddrDescription);
551  }
552 
553  if (m_EvtIdentificationDescriptionCleanup != NULL && IdDescription != NULL) {
555  }
556  }
557 
558 public:
559  //
560  // Link into list of FxChildList pointers maintained by the package. This
561  // differs from IFxStateChangeNotification's link because that one links
562  // into the list of pnp state change notifications for the device we are
563  // associated with.
564  //
566 
567 protected:
569 
571 
573 
575 
577 
578  //
579  // These callbacks are not wrapped in FxCallback derived structures becase
580  // they are called under the framework locking and not in a locking model
581  // in which the driver writer can configure.
582  //
583  // copy one ID description to another
585 
586  // duplicate one ID description to another
588 
589  // cleanup an ID description
591 
592  // compare to ID descriptions
594 
595  // copy one address description to another
597 
598  // duplicate one address description to another
600 
601  // cleanup an address description
603 
604  // clone notification
606 
608 
610 
612 
614 
616 
618 
619  //
620  // Whether the child list is added to the enumerated children list.
621  //
623 
625 
627 
629 
631 };
632 
633 // begin_wpp enum
641 };
642 // end_wpp
643 
644 // begin_wpp enum
651 };
652 // end_wpp
653 
654 // begin_wpp enum
659 };
660 // end_wpp
661 
664 };
665 
667  friend class FxDevice;
668  friend class FxChildList;
669 
670 public:
673  __in ULONG AddressDescriptionSize,
675  );
676 
678 
680  PVOID
681  operator new(
682  __in size_t AllocatorBlock,
684  __in size_t TotalDescriptionSize
685  );
686 
687  FxChildList*
689  VOID
690  )
691  {
692  return m_DeviceList;
693  }
694 
695 
698  VOID
699  )
700  {
702  }
703 
704  BOOLEAN
706  VOID
707  );
708 
709  BOOLEAN
711  VOID
712  );
713 
714  VOID
716  VOID
717  );
718 
719  VOID
721  VOID
722  );
723 
726  Clone(
727  __inout PLIST_ENTRY FreeListHead
728  );
729 
730  BOOLEAN
733  )
734  {
737  ||
741  ||
744  ) {
745 
746  return TRUE;
747  }
748 
749  return FALSE;
750  }
751 
752 protected:
753  BOOLEAN
754  __inline
756  VOID
757  )
758  {
761  return TRUE;
762  }
763  else {
764  return FALSE;
765  }
766  }
767 
768  static
772  )
773  {
774  return CONTAINING_RECORD(Link,
777  }
778 
779  static
783  )
784  {
785  return CONTAINING_RECORD(Link,
788  }
789 
790 protected:
792 
794 
796 
798 
800 
802 
804 
806 
808 
810 
812 
814 };
815 
816 #endif // _FXDEVICELIST_H_
FxChildList * m_DeviceList
FxDeviceDescriptionEntry * SearchBackwardsForMatchingDescriptionLocked(__in PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER Id)
Definition: window.h:584
VOID MarkModificationNotPresentWorker(__inout PLIST_ENTRY FreeListHead, __inout FxDeviceDescriptionEntry *ModificationEntry)
BOOLEAN HasAddressDescriptions(VOID)
LIST_ENTRY m_ModificationListHead
_Must_inspect_result_ NTSTATUS VerifyModificationEntry(__in PLIST_ENTRY Entry)
EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_CLEANUP * PFN_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_CLEANUP
Definition: wdfchildlist.h:257
EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_CLEANUP * PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_CLEANUP
Definition: wdfchildlist.h:208
LIST_ENTRY m_DescriptionListHead
#define _Must_inspect_result_
Definition: no_sal2.h:62
PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COPY m_EvtIdentificationDescriptionCopy
EVT_WDF_CHILD_LIST_SCAN_FOR_CHILDREN * PFN_WDF_CHILD_LIST_SCAN_FOR_CHILDREN
Definition: wdfchildlist.h:142
BOOLEAN CloneEntryLocked(__inout PLIST_ENTRY FreeListHead, __inout FxDeviceDescriptionEntry *Entry, __in BOOLEAN FromQDR)
static FxChildList * _FromEntry(__in FxTransactionedEntry *Entry)
_Must_inspect_result_ NTSTATUS GetNextDevice(__out WDFDEVICE *Device, __inout PWDF_CHILD_LIST_ITERATOR Iterator, __inout_opt PWDF_CHILD_RETRIEVE_INFO Info)
VOID CopyAddress(__out PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER Dest, __in_opt PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER Source)
FxChildListScanTagStates
Definition: fxchildlist.hpp:95
_Must_inspect_result_ NTSTATUS Invoke(__in WDFCHILDLIST DeviceList, __in PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription, __in PWDFDEVICE_INIT ChildInit)
Definition: fxchildlist.hpp:46
FxDeviceDescriptionEntry * SearchBackwardsForMatchingModificationLocked(__in PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER Id)
PFN_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_DUPLICATE m_EvtAddressDescriptionDuplicate
BOOLEAN m_InvalidationNeeded
#define __in_opt
Definition: dbghelp.h:38
VOID CleanupDescriptions(__in_opt PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdDescription, __in_opt PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER AddrDescription)
VOID NotifyDeviceSurpriseRemove(VOID)
#define TRUE
Definition: types.h:120
struct _DEVICE_OBJECT * PDEVICE_OBJECT
FxChildListScanForChildrenCallback m_EvtScanForChildren
VOID UpdateAllAsPresent(__in_opt PULONG ScanTag=NULL)
PFN_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_COPY m_EvtAddressDescriptionCopy
PFN_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_CLEANUP m_EvtAddressDescriptionCleanup
_Must_inspect_result_ NTSTATUS DuplicateAddress(__out PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER Dest, __in PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER Source)
LONG NTSTATUS
Definition: precomp.h:26
FxChildListIteratorIndexValues
Definition: fxchildlist.hpp:29
virtual BOOLEAN Dispose(VOID)
WDFDEVICE GetDevice(VOID)
static size_t _ComputeRelationsSize(__in ULONG Count)
VOID InvokeReportedMissingCallback(VOID)
PDEVICE_LIST DeviceList
Definition: utils.c:27
FxChildListState
Definition: fxchildlist.hpp:89
DriverGlobals
_Must_inspect_result_ NTSTATUS ProcessBusRelations(__inout PDEVICE_RELATIONS *DeviceRelations)
static const WCHAR Description[]
Definition: oid.c:1266
#define __inout_opt
Definition: dbghelp.h:53
FxChildListDescriptionState
VOID EndIteration(__inout PWDF_CHILD_LIST_ITERATOR Iterator)
BOOLEAN __inline IsPresent(VOID)
static int Link(const char **args)
Definition: vfdcmd.c:2414
PULONG m_ScanTag
MxEvent * GetSelfPointer(VOID)
Definition: mxevent.h:110
DWORD Id
PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_CLEANUP m_EvtIdentificationDescriptionCleanup
FxChildListModificationState
PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER GetId(VOID)
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
Definition: wdfchildlist.h:683
MxEvent * GetScanEvent(VOID)
CfxDevice * GetDeviceFromId(__inout PWDF_CHILD_RETRIEVE_INFO Info)
_Must_inspect_result_ NTSTATUS UpdateDeviceAsMissing(__in CfxDevice *Device)
FxChildList(__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in size_t TotalDescriptionSize, __in CfxDevice *Device, __in BOOLEAN Static)
#define __out_opt
Definition: dbghelp.h:65
_Must_inspect_result_ NTSTATUS DuplicateId(__out PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER Dest, __in PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER Source)
#define FALSE
Definition: types.h:117
VOID BeginScan(__out_opt PULONG ScanTag=NULL)
PFN_WDF_CHILD_LIST_DEVICE_REENUMERATED m_EvtChildListDeviceReenumerated
VOID EndScan(__inout_opt PULONG ScanTag=NULL)
VOID ProcessModificationsLocked(__inout PLIST_ENTRY FreeListHead)
EVT_WDF_CHILD_LIST_CREATE_DEVICE * PFN_WDF_CHILD_LIST_CREATE_DEVICE
Definition: wdfchildlist.h:129
KSPIN_LOCK m_ListLock
FxChildList * GetParentList(VOID)
EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_COPY * PFN_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_COPY
Definition: wdfchildlist.h:225
BOOLEAN MatchStateToFlags(__in ULONG Flags)
PVOID __inline GetObjectHandle(VOID)
Definition: fxobject.hpp:603
#define __out
Definition: dbghelp.h:62
struct _DEVICE_RELATIONS * PDEVICE_RELATIONS
_Inout_ PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER AddressDescription
Definition: wdfchildlist.h:255
unsigned char BOOLEAN
FxChildListModificationState m_ModificationState
PFN_WDF_CHILD_LIST_CREATE_DEVICE m_Method
Definition: fxchildlist.hpp:61
VOID PostParentToD0(VOID)
VOID GetAddressDescriptionFromEntry(__in FxDeviceDescriptionEntry *Entry, __out PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER AddressDescription)
BOOLEAN IsStaticList(VOID)
FxChildListDescriptionState m_DescriptionState
FxTransactionedEntry m_TransactionLink
UCHAR m_EnumRetries
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
MxEvent m_ScanEvent
FxChildListCreateDeviceCallback(__in PFX_DRIVER_GLOBALS FxDriverGlobals)
Definition: fxchildlist.hpp:36
VOID ScanForChildren(VOID)
int Count
Definition: noreturn.cpp:7
BOOLEAN m_IsAdded
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
VOID CancelScan(__in BOOLEAN EndTheScan, __inout_opt PULONG ScanTag)
ULONG GetIdentificationDescriptionSize(VOID)
VOID Invoke(__in WDFCHILDLIST DeviceList)
Definition: fxchildlist.hpp:75
_Must_inspect_result_ NTSTATUS GetAddressDescription(__in PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription, __out PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER AddressDescription)
PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER m_AddressDescription
FxChildListCreateDeviceCallback m_EvtCreateDevice
_In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR Iterator
Definition: wdfchildlist.h:653
VOID IndicateWakeStatus(__in NTSTATUS WakeWakeStatus)
FxChildListReportedMissingCallbackState m_ReportedMissingCallbackState
WDFCHILDLIST GetHandle(VOID)
EVT_WDF_CHILD_LIST_DEVICE_REENUMERATED * PFN_WDF_CHILD_LIST_DEVICE_REENUMERATED
Definition: wdfchildlist.h:276
PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COMPARE m_EvtIdentificationDescriptionCompare
_In_ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription
Definition: wdfchildlist.h:124
BOOLEAN IsDeviceRemoved(VOID)
ULONG m_AddressDescriptionSize
VOID Initialize(__in PWDF_CHILD_LIST_CONFIG Config)
_In_ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER _In_ PWDFDEVICE_INIT ChildInit
Definition: wdfchildlist.h:124
BOOLEAN IsScanCancelled(__in PULONG ScanTag)
unsigned char UCHAR
Definition: xmlstorage.h:181
char * PBOOLEAN
Definition: retypes.h:11
_Must_inspect_result_ NTSTATUS Add(__in PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription, __in_opt PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER AddressDescription, __in_opt PULONG ScanTag=NULL)
ULONG m_ScanCount
EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_DUPLICATE * PFN_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_DUPLICATE
Definition: wdfchildlist.h:242
#define __inout
Definition: dbghelp.h:50
VOID DrainFreeListHead(__inout PLIST_ENTRY FreeListHead)
FxDeviceDescriptionEntry(__inout FxChildList *DeviceList, __in ULONG AddressDescriptionSize, __in ULONG IdentificationDescriptionSize)
Definition: fxchildlist.cpp:31
Definition: typedefs.h:119
VOID ReenumerateEntry(__inout FxDeviceDescriptionEntry *Entry)
_Must_inspect_result_ _In_ WDFDEVICE Device
Definition: wdfchildlist.h:474
PFN_WDF_CHILD_LIST_SCAN_FOR_CHILDREN m_Method
Definition: fxchildlist.hpp:86
_Must_inspect_result_ FxDeviceDescriptionEntry * Clone(__inout PLIST_ENTRY FreeListHead)
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_CHILD_LIST_CONFIG Config
Definition: wdfchildlist.h:474
FxChildListValues
EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_DUPLICATE * PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_DUPLICATE
Definition: wdfchildlist.h:176
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_CHILD_LIST_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFCHILDLIST * ChildList
Definition: wdfchildlist.h:474
static FxDeviceDescriptionEntry * _FromModificationLink(__in PLIST_ENTRY Link)
VOID NotifyDeviceRemove(__inout PLONG ChildCount)
ULONG GetAddressDescriptionSize(VOID)
struct _DEVICE_RELATIONS DEVICE_RELATIONS
VOID MarkDescriptionNotPresentWorker(__inout FxDeviceDescriptionEntry *DescriptionEntry, __in BOOLEAN ModificationCanBeQueued)
FxChildListState m_State
ULONG GetScanCount(VOID)
static FxDeviceDescriptionEntry * _FromDescriptionLink(__in PLIST_ENTRY Link)
_Must_inspect_result_ NTSTATUS VerifyDescriptionEntry(__in PLIST_ENTRY Entry)
BOOLEAN IsDeviceReportedMissing(VOID)
ULONG KSPIN_LOCK
Definition: env_spec_w32.h:72
size_t m_TotalDescriptionSize
unsigned int * PULONG
Definition: retypes.h:1
#define NULL
Definition: types.h:112
_Must_inspect_result_ NTSTATUS UpdateAsMissing(__in PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER Description)
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)
PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_DUPLICATE m_EvtIdentificationDescriptionDuplicate
FxChildListReportedMissingCallbackState
VOID CopyId(__out PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER Dest, __in PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER Source)
static _Must_inspect_result_ NTSTATUS _ComputeTotalDescriptionSize(__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in PWDF_CHILD_LIST_CONFIG Config, __in size_t *TotalDescriptionSize)
BOOLEAN CreateDevice(__inout FxDeviceDescriptionEntry *Entry, __inout PBOOLEAN InvalidateRelations)
unsigned int ULONG
Definition: retypes.h:1
ULONG m_IdentificationDescriptionSize
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
Definition: ndis.h:3167
FxChildListScanForChildrenCallback(__in PFX_DRIVER_GLOBALS FxDriverGlobals)
Definition: fxchildlist.hpp:66
void __inline CallbackStart(VOID)
Definition: fxcallback.hpp:64
VOID DeviceSurpriseRemoved(VOID)
#define STATUS_SUCCESS
Definition: shellext.h:65
EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COMPARE * PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COMPARE
Definition: wdfchildlist.h:193
static _Must_inspect_result_ NTSTATUS _ValidateConfig(__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in PWDF_CHILD_LIST_CONFIG Config, __in size_t *TotalDescriptionSize)
VOID UpdateAddressDescriptionFromEntry(__inout FxDeviceDescriptionEntry *Entry, __in PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER AddressDescription)
PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER m_IdentificationDescription
BOOLEAN CompareId(__in PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER Lhs, __in PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER Rhs)
EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COPY * PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COPY
Definition: wdfchildlist.h:159
#define __in
Definition: dbghelp.h:35
signed int * PLONG
Definition: retypes.h:5
WDFDEVICE GetNextStaticDevice(__in WDFDEVICE PreviousDevice, __in ULONG Flags)
static SERVICE_STATUS status
Definition: service.c:31
VOID BeginIteration(__inout PWDF_CHILD_LIST_ITERATOR Iterator)
BOOLEAN ReenumerateEntryLocked(__inout FxDeviceDescriptionEntry *Entry, __in BOOLEAN FromQDR)
void __inline CallbackEnd(VOID)
Definition: fxcallback.hpp:74
base of all file and directory entries
Definition: entries.h:82
description Header IdentificationDescriptionSize
BOOLEAN m_StaticList
#define RtlCompareMemory(s1, s2, l)
Definition: env_spec_w32.h:465
VOID InitIterator(__inout PWDF_CHILD_LIST_ITERATOR Iterator)
Definition: ps.c:97