42 AddressDescriptionSize;
82FxDeviceDescriptionEntry::operator
new(
83 __in size_t AllocatorBlock,
85 __in size_t TotalDescriptionSize
92 p = FxPoolAllocate(FxDriverGlobals,
NonPagedPool, TotalDescriptionSize);
272 if (pNewEntry ==
NULL) {
300 __in size_t TotalDescriptionSize,
305 m_TotalDescriptionSize(TotalDescriptionSize),
306 m_EvtCreateDevice(FxDriverGlobals),
307 m_EvtScanForChildren(FxDriverGlobals)
371 __in size_t TotalDescriptionSize,
388 childList =
new(FxDriverGlobals, ListAttributes)
390 if (childList ==
NULL) {
393 "No memory for WDFCHILDLIST handle, %!STATUS!",
408 if (
NULL != childList) {
472 Info->IdentificationDescription);
479 Info->IdentificationDescription);
497 pEntry->m_AddressDescription);
571 "Begin scan on WDFCHILDLIST %p, scan count %d",
574 if (ScanTag !=
NULL) {
620 if (ScanTag !=
NULL) {
635 "End scan on WDFCHILDLIST %p, scan count %d",
657 "entry %p modified in last scan, "
658 "mod state %!FxChildListModificationState!,"
659 "desc state %!FxChildListDescriptionState!",
661 pEntry->m_DescriptionState);
664 switch (
pEntry->m_ModificationState) {
675 "clone of PDO WDFDEVICE %p, !devobj %p dropped because "
676 "it is missing",
pEntry->m_Pdo->GetHandle(),
677 pEntry->m_Pdo->GetDeviceObject());
716 if (
pEntry->m_PendingDeleteOnScanEnd) {
734 "marking PDO WDFDEVICE %p, !devobj %p as not present",
735 pEntry->m_Pdo->GetHandle(),
736 pEntry->m_Pdo->GetDeviceObject());
742 "marking PDO (entry %p) which needs instantiation as "
846 "Begin iteration on WDFCHILDLIST %p, scan count %d",
858 "end iteration on WDFCHILDLIST");
897 "WDFCHILDLIST %p cannot retrieve next device if the list is not "
932 Info->EvtChildListIdentificationDescriptionCompare !=
NULL) {
934 found =
Info->EvtChildListIdentificationDescriptionCompare(
936 Info->IdentificationDescription,
937 pEntry->m_IdentificationDescription);
964 if (
Info->IdentificationDescription !=
NULL) {
966 pEntry->m_IdentificationDescription);
968 if (
Info->AddressDescription !=
NULL) {
970 pEntry->m_AddressDescription);
973 Info->Status = dstatus;
1014 Info->EvtChildListIdentificationDescriptionCompare !=
NULL) {
1016 found =
Info->EvtChildListIdentificationDescriptionCompare(
1018 Info->IdentificationDescription,
1019 pEntry->m_IdentificationDescription);
1029 if (
Info->IdentificationDescription !=
NULL) {
1031 pEntry->m_IdentificationDescription);
1033 if (
Info->AddressDescription !=
NULL) {
1035 pEntry->m_AddressDescription);
1048 if (found ==
FALSE) {
1060 __in WDFDEVICE PreviousDevice,
1075 if (PreviousDevice ==
NULL) {
1112 if (
pEntry->m_PendingDeleteOnScanEnd) {
1128 else if (pStatic->
Pdo->
GetHandle() == PreviousDevice) {
1150 if (
pEntry->m_PendingDeleteOnScanEnd) {
1166 else if (pStatic->
Pdo->
GetHandle() == PreviousDevice) {
1214 if (
pEntry->IsPresent()) {
1292 if (found ==
FALSE) {
1315 if (
pEntry->IsPresent()) {
1360 if (FromQDR ==
FALSE) {
1371 "Inserting clone modification for PDO WDFDEVICE %p, !devobj %p",
1372 Entry->m_Pdo->GetHandle(),
Entry->m_Pdo->GetDeviceObject());
1390 "Requested reenumeration for PDO WDFDEVICE %p, !devobj %p"
1391 " no possible (pending mod %d, currently present %d)",
1392 Entry->m_Pdo->GetHandle(),
Entry->m_Pdo->GetDeviceObject(),
1432 if (ScanTag !=
NULL) {
1448 pNext =
pCur->Flink;
1466 if (
pEntry->IsPresent()) {
1500 if (ScanTag !=
NULL) {
1516 allocNewEntry =
FALSE;
1526 switch (
pEntry->m_ModificationState) {
1548 allocNewEntry =
TRUE;
1586 allocNewEntry =
TRUE;
1590 if (allocNewEntry) {
1610 &
pEntry->m_ModificationLink);
1686 "attempting to clone PDO WDFDEVICE %p, !devobj %p, From QDR %d",
1687 Entry->m_Pdo->GetHandle(),
Entry->m_Pdo->GetDeviceObject(), FromQDR);
1689 invalidateRelations =
FALSE;
1691 pClone =
Entry->Clone(FreeListHead);
1693 if (pClone !=
NULL) {
1701 Entry->m_Pdo->GetHandle(),
1702 Entry->m_AddressDescription,
1713 "clone successful (new entry is %p), marking PDO "
1714 "WDFDEVICE %p, !devobj %p as missing", pClone,
1715 Entry->m_Pdo->GetHandle(),
Entry->m_Pdo->GetDeviceObject());
1732 if (FromQDR ==
FALSE) {
1734 invalidateRelations =
TRUE;
1751 return invalidateRelations;
1770 "Not processing modifications on WDFCHILDLIST %p (list state %d, "
1777 "Begin processing modifications on WDFCHILDLIST %p",
GetObjectHandle());
1787 pNext =
pCur->Flink;
1791 switch (
pEntry->m_ModificationState) {
1816 invalidateRelations =
FALSE;
1829 "entry %p, mod state is %!FxChildListModificationState!",
1832 switch (
pEntry->m_ModificationState) {
1843 "processing remove on entry %p, description state is "
1844 "%!FxChildListDescriptionState!",
1847 switch (
pEntry->m_DescriptionState) {
1860 "entry %p never reported to pnp, mark for deletion",
pEntry);
1869 "committing PDO WDFDEVICE %p, !devobj %p as not present",
1870 pEntry->m_Pdo->GetHandle(),
pEntry->m_Pdo->GetDeviceObject());
1873 invalidateRelations =
TRUE;
1893 "marking entry %p as needing instantiation",
pEntry);
1897 invalidateRelations =
TRUE;
1910 if (invalidateRelations) {
1931 "end processing modifications on WDFCHILDLIST %p",
GetObjectHandle());
1964 ASSERT(DescriptionEntry->IsPresent());
1968 if (ModificationCanBeQueued) {
1969 if (
IsListEmpty(&DescriptionEntry->m_ModificationLink)) {
1976 ASSERT(DescriptionEntry->m_ModificationState ==
1978 ASSERT(DescriptionEntry->m_FoundInLastScan ==
FALSE);
1995 DescriptionEntry->m_FoundInLastScan =
FALSE;
1998 &DescriptionEntry->m_ModificationLink);
2026 switch (ModificationEntry->m_ModificationState) {
2048 InsertTailList(FreeListHead, &ModificationEntry->m_DescriptionLink);
2151 pEntry->m_AddressDescription);
2265 init.CreatedDevice =
2282 init.CreatedDevice->Destroy();
2285 *InvalidateRelations =
TRUE;
2303 "EvtChildListCreateDevice returned a successful status "
2304 "%!STATUS! but did not create a device object",
status);
2354 "WDFDEVICE %p !devobj %p created, but EvtChildListCreateDevice "
2355 "returned status %!STATUS!",
init.CreatedDevice->GetHandle(),
2356 init.CreatedDevice->GetDeviceObject(),
status);
2369 (
void)
init.CreatedDevice->DeleteDeviceFromFailedCreate(
2423 BOOLEAN needToReportMissingChildren, invalidateRelations, cleanupRelations;
2424 ULONG additionalCount, totalCount,
i;
2432 pNewRelations =
NULL;
2433 invalidateRelations =
FALSE;
2434 cleanupRelations =
TRUE;
2447 additionalCount = 0;
2448 needToReportMissingChildren =
FALSE;
2456 switch (
pEntry->m_DescriptionState) {
2472 "PDO WDFDEVICE %p !devobj %p in a not present state, need to "
2473 "report as missing",
2474 pEntry->m_Pdo->GetHandle(),
pEntry->m_Pdo->GetDeviceObject());
2476 needToReportMissingChildren =
TRUE;
2493 pPriorRelations = *DeviceRelations;
2506 if (additionalCount == 0 &&
2507 (needToReportMissingChildren ==
FALSE || pPriorRelations !=
NULL)) {
2519 if (needToReportMissingChildren) {
2533 "PDO WDFDEVICE %p !devobj %p reported as missing to pnp",
2534 pEntry->m_Pdo->GetHandle(),
pEntry->m_Pdo->GetDeviceObject());
2544 "Nothing to report on WDFCHILDLIST %p, returning early",
GetHandle());
2547 cleanupRelations =
FALSE;
2555 totalCount = additionalCount;
2556 if (pPriorRelations !=
NULL) {
2557 totalCount += pPriorRelations->
Count;
2565 if (pNewRelations ==
NULL) {
2570 "Could not allocate relations for %d devices",
2578 cleanupRelations =
FALSE;
2583 invalidateRelations =
TRUE;
2586 if (needToReportMissingChildren) {
2589 "WDFCHILDLIST %p could not allocate relations required for "
2590 "reporting children as missing after max retries",
2596 "WDFCHILDLIST %p retried %d times to report relations, but "
2600 if (pPriorRelations ==
NULL) {
2629 switch (
pEntry->m_DescriptionState) {
2640 "PDO WDFDEVICE %p !devobj %p being marked as missing "
2641 "because of failure to allocate device relations and "
2642 "an already existing relations %p",
2643 pEntry->m_Pdo->GetHandle(),
2644 pEntry->m_Pdo->GetDeviceObject(), pPriorRelations);
2652 "PDO WDFDEVICE %p !devobj %p being cloned "
2653 "because of the failure to allocate device "
2655 pEntry->m_Pdo->GetHandle(),
2656 pEntry->m_Pdo->GetDeviceObject());
2665 "PDO WDFDEVICE %p !devobj %p is a statically "
2666 "enumerated PDO therefore can not be cloned and is "
2667 "being marked missing because of failure to "
2668 "allocate device relations. It will be surprise "
2669 "removed by pnp manager. Bus driver may continue "
2670 "to function normally but will lose this child PDO",
2671 pEntry->m_Pdo->GetHandle(),
2672 pEntry->m_Pdo->GetDeviceObject());
2685 "PDO WDFDEVICE %p !devobj %p reported as missing to pnp "
2686 "(by using existing relations)",
2687 pEntry->m_Pdo->GetHandle(),
2688 pEntry->m_Pdo->GetDeviceObject());
2702 if (pPriorRelations !=
NULL && pPriorRelations->
Count > 0) {
2705 "WDFCHILDLIST %p prior relations %p contained %d objects",
2727 switch (
pEntry->m_DescriptionState) {
2733 "Creating PDO device object from reported device");
2740 "PDO created successfully, WDFDEVICE %p !devobj %p",
2741 pEntry->m_Pdo->GetHandle(),
pEntry->m_Pdo->GetDeviceObject());
2748 "Reporting PDO WDFDEVICE %p !devobj %p",
2749 pEntry->m_Pdo->GetHandle(),
2750 pEntry->m_Pdo->GetDeviceObject());
2755 pNewRelations->
Count++;
2764 "PDO WDFDEVICE %p !devobj %p reported as missing to pnp",
2765 pEntry->m_Pdo->GetHandle(),
pEntry->m_Pdo->GetDeviceObject());
2797 if (invalidateRelations) {
2810 if (cleanupRelations) {
2811 if (pPriorRelations !=
NULL) {
2814 "Freeing prior relations %p", pPriorRelations);
2817 pPriorRelations =
NULL;
2821 for(
i = 0;
i < pNewRelations->
Count;
i++) {
2826 pNewRelations =
NULL;
2829 *DeviceRelations = pNewRelations;
2867 (
pEntry->m_Pdo->GetPdoPkg())->m_DeviceReportedMissing.Invoke(
2868 pEntry->m_Pdo->GetHandle());
2898 if (
pEntry->m_PendingDeleteOnScanEnd) {
2940 if (
pEntry->m_PendingDeleteOnScanEnd) {
2991 pNext =
pCur->Flink;
3011 if (
pEntry->IsPresent()) {
3064 "WDFCHILDLIST %p: removing children",
GetHandle());
3099 if (
pEntry->m_ProcessingSurpriseRemove ==
FALSE) {
3112 "Removing entry %p, WDFDEVICE %p, PDO %p",
3114 pEntry->m_Pdo->GetPhysicalDevice());
3129 pEntry->m_Pdo->SetParentWaitingOnRemoval();
3153 __in size_t* TotalDescriptionSize
3161 "Invalid Config, NULL is not allowed, %!STATUS!",
status);
3168 "Config->Size incorrect, expected %d, got %d, %!STATUS!",
3172 if (
Config->IdentificationDescriptionSize == 0) {
3175 "Config->IdentificationDescriptionSize must be non zero, "
3179 if (
Config->EvtChildListCreateDevice ==
NULL) {
3182 "Config->EvtChildListCreateDevice, NULL is not allowed, "
3189 TotalDescriptionSize);
3197 __in size_t* TotalDescriptionSize
3200 size_t addressAligned, idAligned;
3203 *TotalDescriptionSize = 0;
3223 "Config->IdentificationDescriptionSize %d too large"
3224 "%!STATUS!",
Config->IdentificationDescriptionSize,
3231 if (addressAligned < Config->AddressDescriptionSize) {
3234 "Config->AddressDescriptionSize %d too large, %!STATUS!",
3242 TotalDescriptionSize
3247 "Could not add ID description size to block size, %!STATUS!",
3252 status = RtlSizeTAdd(*TotalDescriptionSize,
3254 TotalDescriptionSize);
3258 "Could not add address description size to block size, %!STATUS!",
#define InterlockedIncrement
_Must_inspect_result_ NTSTATUS UpdateDeviceAsMissing(__in CfxDevice *Device)
VOID GetAddressDescriptionFromEntry(__in FxDeviceDescriptionEntry *Entry, __out PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER AddressDescription)
VOID EndScan(__inout_opt PULONG ScanTag=NULL)
VOID PostParentToD0(VOID)
PFN_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_DUPLICATE m_EvtAddressDescriptionDuplicate
VOID NotifyDeviceRemove(__inout PLONG ChildCount)
VOID ReenumerateEntry(__inout FxDeviceDescriptionEntry *Entry)
PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_DUPLICATE m_EvtIdentificationDescriptionDuplicate
_Must_inspect_result_ NTSTATUS GetNextDevice(__out WDFDEVICE *Device, __inout PWDF_CHILD_LIST_ITERATOR Iterator, __inout_opt PWDF_CHILD_RETRIEVE_INFO Info)
_Must_inspect_result_ NTSTATUS VerifyDescriptionEntry(__in PLIST_ENTRY Entry)
virtual BOOLEAN Dispose(VOID)
BOOLEAN HasAddressDescriptions(VOID)
friend struct FxDeviceDescriptionEntry
static _Must_inspect_result_ NTSTATUS _ValidateConfig(__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in PWDF_CHILD_LIST_CONFIG Config, __in size_t *TotalDescriptionSize)
VOID DrainFreeListHead(__inout PLIST_ENTRY FreeListHead)
ULONG m_IdentificationDescriptionSize
WDFDEVICE GetDevice(VOID)
VOID CopyAddress(__out PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER Dest, __in_opt PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER Source)
PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_CLEANUP m_EvtIdentificationDescriptionCleanup
VOID BeginScan(__out_opt PULONG ScanTag=NULL)
CfxDevice * GetDeviceFromId(__inout PWDF_CHILD_RETRIEVE_INFO Info)
PFN_WDF_CHILD_LIST_DEVICE_REENUMERATED m_EvtChildListDeviceReenumerated
BOOLEAN IsStaticList(VOID)
_Must_inspect_result_ NTSTATUS GetAddressDescription(__in PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription, __out PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER AddressDescription)
LIST_ENTRY m_ModificationListHead
FxTransactionedEntry m_TransactionLink
VOID MarkDescriptionNotPresentWorker(__inout FxDeviceDescriptionEntry *DescriptionEntry, __in BOOLEAN ModificationCanBeQueued)
VOID InvokeReportedMissingCallback(VOID)
VOID CleanupDescriptions(__in_opt PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdDescription, __in_opt PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER AddrDescription)
VOID ProcessModificationsLocked(__inout PLIST_ENTRY FreeListHead)
VOID BeginIteration(__inout PWDF_CHILD_LIST_ITERATOR Iterator)
FxDeviceDescriptionEntry * SearchBackwardsForMatchingDescriptionLocked(__in PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER Id)
FxDeviceDescriptionEntry * SearchBackwardsForMatchingModificationLocked(__in PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER Id)
_Must_inspect_result_ NTSTATUS VerifyModificationEntry(__in PLIST_ENTRY Entry)
VOID IndicateWakeStatus(__in NTSTATUS WakeWakeStatus)
VOID NotifyDeviceSurpriseRemove(VOID)
_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)
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)
BOOLEAN CompareId(__in PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER Lhs, __in PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER Rhs)
VOID InitIterator(__inout PWDF_CHILD_LIST_ITERATOR Iterator)
VOID UpdateAddressDescriptionFromEntry(__inout FxDeviceDescriptionEntry *Entry, __in PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER AddressDescription)
VOID EndIteration(__inout PWDF_CHILD_LIST_ITERATOR Iterator)
PFN_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_COPY m_EvtAddressDescriptionCopy
PFN_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_CLEANUP m_EvtAddressDescriptionCleanup
BOOLEAN CreateDevice(__inout FxDeviceDescriptionEntry *Entry, __inout PBOOLEAN InvalidateRelations)
FxChildListCreateDeviceCallback m_EvtCreateDevice
ULONG m_AddressDescriptionSize
static _Must_inspect_result_ NTSTATUS _ComputeTotalDescriptionSize(__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in PWDF_CHILD_LIST_CONFIG Config, __in size_t *TotalDescriptionSize)
VOID CopyId(__out PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER Dest, __in PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER Source)
WDFDEVICE GetNextStaticDevice(__in WDFDEVICE PreviousDevice, __in ULONG Flags)
BOOLEAN ReenumerateEntryLocked(__inout FxDeviceDescriptionEntry *Entry, __in BOOLEAN FromQDR)
FxChildListScanForChildrenCallback m_EvtScanForChildren
static size_t _ComputeRelationsSize(__in ULONG Count)
BOOLEAN CloneEntryLocked(__inout PLIST_ENTRY FreeListHead, __inout FxDeviceDescriptionEntry *Entry, __in BOOLEAN FromQDR)
VOID CancelScan(__in BOOLEAN EndTheScan, __inout_opt PULONG ScanTag)
_Must_inspect_result_ NTSTATUS DuplicateId(__out PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER Dest, __in PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER Source)
_Must_inspect_result_ NTSTATUS DuplicateAddress(__out PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER Dest, __in PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER Source)
VOID UpdateAllAsPresent(__in_opt PULONG ScanTag=NULL)
_Must_inspect_result_ NTSTATUS ProcessBusRelations(__inout PDEVICE_RELATIONS *DeviceRelations)
PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COMPARE m_EvtIdentificationDescriptionCompare
PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COPY m_EvtIdentificationDescriptionCopy
VOID Initialize(__in PWDF_CHILD_LIST_CONFIG Config)
LIST_ENTRY m_DescriptionListHead
FxChildList(__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in size_t TotalDescriptionSize, __in CfxDevice *Device, __in BOOLEAN Static)
VOID MarkModificationNotPresentWorker(__inout PLIST_ENTRY FreeListHead, __inout FxDeviceDescriptionEntry *ModificationEntry)
BOOLEAN m_InvalidationNeeded
size_t m_TotalDescriptionSize
_Must_inspect_result_ NTSTATUS UpdateAsMissing(__in PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER Description)
__inline FxDriver * GetDriver(VOID)
MdDeviceObject __inline GetPhysicalDevice(VOID)
WDFDEVICE __inline GetHandle(VOID)
virtual VOID AddChildList(__inout FxChildList *List)
MdDeviceObject __inline GetSafePhysicalDevice(VOID)
virtual VOID RemoveChildList(__inout FxChildList *List)
__inline FxPkgPdo * GetPdoPkg(VOID)
__inline WDF_DEVICE_PNP_STATE GetDevicePnpState()
__inline PFX_DRIVER_GLOBALS GetDriverGlobals(VOID)
VOID MarkNoDeleteDDI(__in FxObjectLockState State=ObjectLock)
VOID DeleteFromFailedCreate(VOID)
VOID MarkDisposeOverride(__in FxObjectLockState State=ObjectLock)
BOOLEAN m_AddedToStaticList
FxDeviceDescriptionEntry * m_Description
VOID PnpProcessEvent(__in FxPnpEvent Event, __in BOOLEAN ProcessEventOnDifferentThread=FALSE)
CHECK_RETURN_IF_USER_MODE __inline NTSTATUS Initialize(__in EVENT_TYPE Type, __in BOOLEAN InitialState)
#define STATUS_NOT_SUPPORTED
#define NT_SUCCESS(StatCode)
static const WCHAR Description[]
#define RemoveEntryList(Entry)
#define InsertTailList(ListHead, Entry)
#define ExAllocatePoolWithTag(hernya, size, tag)
#define IsListEmpty(ListHead)
#define KeReleaseSpinLock(sl, irql)
#define KeAcquireSpinLock(sl, irql)
#define RemoveHeadList(ListHead)
#define InitializeListHead(ListHead)
#define KeInitializeSpinLock(sl)
@ ModificationRemoveNotify
@ ModificationUnspecified
@ ModificationNeedsPnpRemoval
@ ListLockedForParentRemove
@ DescriptionPresentNeedsInstantiation
@ DescriptionReportedMissing
@ DescriptionInstantiatedHasObject
@ FX_CHILD_LIST_MAX_RETRIES
@ CallbackNeedsToBeInvoked
DoTraceLevelMessage(pFxDriverGlobals, TRACE_LEVEL_VERBOSE, TRACINGPNP, "Enter, WDFDEVICE %p", Device)
PFX_DRIVER_GLOBALS pFxDriverGlobals
return pObject GetObjectHandle()
description Header IdentificationDescriptionSize
FxVerifierDbgBreakPoint(pFxDriverGlobals)
__inline NTSTATUS FxVerifierCheckIrqlLevel(__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in KIRQL Irql)
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
#define _Must_inspect_result_
#define ASSERTMSG(msg, exp)
#define UNREFERENCED_PARAMETER(P)
#define STATUS_INVALID_DEVICE_OBJECT_PARAMETER
#define STATUS_OBJECT_NAME_EXISTS
#define STATUS_NO_MORE_ENTRIES
VOID NTAPI IoInvalidateDeviceRelations(IN PDEVICE_OBJECT DeviceObject, IN DEVICE_RELATION_TYPE Type)
#define TRACE_LEVEL_WARNING
#define TRACE_LEVEL_VERBOSE
#define TRACE_LEVEL_ERROR
#define TRACE_LEVEL_INFORMATION
base of all file and directory entries
_Must_inspect_result_ NTSTATUS Invoke(__in WDFCHILDLIST DeviceList, __in PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription, __in PWDFDEVICE_INIT ChildInit)
PFN_WDF_CHILD_LIST_CREATE_DEVICE m_Method
PFN_WDF_CHILD_LIST_SCAN_FOR_CHILDREN m_Method
FxDeviceDescriptionEntry(__inout FxChildList *DeviceList, __in ULONG AddressDescriptionSize, __in ULONG IdentificationDescriptionSize)
static FxDeviceDescriptionEntry * _FromDescriptionLink(__in PLIST_ENTRY Link)
LIST_ENTRY m_ModificationLink
VOID ProcessDeviceRemoved(VOID)
_Must_inspect_result_ FxDeviceDescriptionEntry * Clone(__inout PLIST_ENTRY FreeListHead)
FxChildListDescriptionState m_DescriptionState
VOID DeviceSurpriseRemoved(VOID)
LIST_ENTRY m_DescriptionLink
PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER m_IdentificationDescription
BOOLEAN m_PendingDeleteOnScanEnd
BOOLEAN m_FoundInLastScan
PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER m_AddressDescription
BOOLEAN IsDeviceReportedMissing(VOID)
BOOLEAN m_ProcessingSurpriseRemove
FxChildList * m_DeviceList
~FxDeviceDescriptionEntry()
FxChildListModificationState m_ModificationState
BOOLEAN IsDeviceRemoved(VOID)
static FxDeviceDescriptionEntry * _FromModificationLink(__in PLIST_ENTRY Link)
FxChildList * GetParentList(VOID)
VOID SetTransactionedObject(__in FxObject *Object)
PDEVICE_OBJECT Objects[1]
struct _LIST_ENTRY * Blink
struct _LIST_ENTRY * Flink
struct _LIST_ENTRY * PLIST_ENTRY
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define CONTAINING_RECORD(address, type, field)
#define STATUS_INVALID_PARAMETER
#define STATUS_NO_SUCH_DEVICE
#define STATUS_UNSUCCESSFUL
#define STATUS_INVALID_DEVICE_STATE
#define STATUS_INFO_LENGTH_MISMATCH
#define STATUS_INSUFFICIENT_RESOURCES
_In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR Iterator
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
_Must_inspect_result_ _In_ WDFDEVICE Device
struct _WDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER * PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER
@ WdfRetrievePendingChildren
@ WdfRetrievePresentChildren
_In_ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_CHILD_LIST_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFCHILDLIST * ChildList
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_CHILD_LIST_CONFIG Config
struct _WDF_CHILD_ADDRESS_DESCRIPTION_HEADER * PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER
@ WdfChildListRetrieveDeviceNotYetCreated
@ WdfChildListRetrieveDeviceNoSuchDevice
@ WdfChildListRetrieveDeviceSuccess
WDF_EXTERN_C_START enum _WDF_CHILD_LIST_RETRIEVE_DEVICE_STATUS WDF_CHILD_LIST_RETRIEVE_DEVICE_STATUS
_Inout_ PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER AddressDescription
FORCEINLINE size_t WDF_ALIGN_SIZE_UP(_In_ size_t Length, _In_ size_t AlignTo)
#define WDF_PTR_ADD_OFFSET(_ptr, _offset)
_Must_inspect_result_ _In_ WDFDEVICE _In_ NTSTATUS WaitWakeStatus
_Must_inspect_result_ _In_ ULONG Flags
ActualNumberDriverObjects * sizeof(PDRIVER_OBJECT)) PDRIVER_OBJECT *DriverObjectList
struct _DEVICE_RELATIONS * PDEVICE_RELATIONS
#define ObDereferenceObject
#define ObReferenceObject