reactos/sdk/include/wdf/kmdf/1.17/wdfchildlist.h

869 lines
22 KiB
C
Raw Normal View History

/*++
Copyright (c) Microsoft Corporation. All rights reserved.
_WdfVersionBuild_
Module Name:
WdfChildList.hpp
Abstract:
This module defines the set of APIs to manipulate a WDFCHILDLIST handle. A
WDFCHILDLIST handle maintains a list of descriptions representing
dynamically enumerated child devices.
Environment:
kernel mode only
Revision History:
--*/
//
// NOTE: This header is generated by stubwork. Please make any
// modifications to the corresponding template files
// (.x or .y) and use stubwork to regenerate the header
//
#ifndef _WDFCHILDLIST_H_
#define _WDFCHILDLIST_H_
#ifndef WDF_EXTERN_C
#ifdef __cplusplus
#define WDF_EXTERN_C extern "C"
#define WDF_EXTERN_C_START extern "C" {
#define WDF_EXTERN_C_END }
#else
#define WDF_EXTERN_C
#define WDF_EXTERN_C_START
#define WDF_EXTERN_C_END
#endif
#endif
WDF_EXTERN_C_START
#if (NTDDI_VERSION >= NTDDI_WIN2K)
typedef enum _WDF_CHILD_LIST_RETRIEVE_DEVICE_STATUS {
WdfChildListRetrieveDeviceUndefined = 0,
WdfChildListRetrieveDeviceSuccess,
WdfChildListRetrieveDeviceNotYetCreated,
WdfChildListRetrieveDeviceNoSuchDevice,
} WDF_CHILD_LIST_RETRIEVE_DEVICE_STATUS, *PWDF_CHILD_LIST_RETRIEVE_DEVICE_STATUS;
typedef enum _WDF_RETRIEVE_CHILD_FLAGS {
WdfRetrieveUnspecified = 0x0000,
WdfRetrievePresentChildren = 0x0001,
WdfRetrieveMissingChildren = 0x0002,
WdfRetrievePendingChildren = 0x0004,
WdfRetrieveAddedChildren = (WdfRetrievePresentChildren | WdfRetrievePendingChildren),
WdfRetrieveAllChildren = (WdfRetrievePresentChildren | WdfRetrievePendingChildren | WdfRetrieveMissingChildren),
} WDF_RETRIEVE_CHILD_FLAGS;
typedef struct _WDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER {
//
// Size in bytes of the entire description, including this header.
//
// Same value as WDF_CHILD_LIST_CONFIG::IdentificationDescriptionSize
// Used as a sanity check.
//
ULONG IdentificationDescriptionSize;
} WDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER,
*PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER;
FORCEINLINE
VOID
WDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER_INIT(
_Out_ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER Header,
_In_ ULONG IdentificationDescriptionSize
)
{
RtlZeroMemory(Header, IdentificationDescriptionSize);
Header->IdentificationDescriptionSize = IdentificationDescriptionSize;
}
typedef struct _WDF_CHILD_ADDRESS_DESCRIPTION_HEADER {
//
// Size in bytes of the entire description, including this header.
//
// Same value as WDF_CHILD_LIST_CONFIG::AddressDescriptionSize
// Used as a sanity check.
//
ULONG AddressDescriptionSize;
} WDF_CHILD_ADDRESS_DESCRIPTION_HEADER,
*PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER;
FORCEINLINE
VOID
WDF_CHILD_ADDRESS_DESCRIPTION_HEADER_INIT(
_Out_ PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER Header,
_In_ ULONG AddressDescriptionSize
)
{
RtlZeroMemory(Header, AddressDescriptionSize);
Header->AddressDescriptionSize = AddressDescriptionSize;
}
typedef
_Function_class_(EVT_WDF_CHILD_LIST_CREATE_DEVICE)
_IRQL_requires_same_
_IRQL_requires_max_(PASSIVE_LEVEL)
NTSTATUS
STDCALL
EVT_WDF_CHILD_LIST_CREATE_DEVICE(
_In_
WDFCHILDLIST ChildList,
_In_
PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription,
_In_
PWDFDEVICE_INIT ChildInit
);
typedef EVT_WDF_CHILD_LIST_CREATE_DEVICE *PFN_WDF_CHILD_LIST_CREATE_DEVICE;
typedef
_Function_class_(EVT_WDF_CHILD_LIST_SCAN_FOR_CHILDREN)
_IRQL_requires_same_
_IRQL_requires_max_(PASSIVE_LEVEL)
VOID
STDCALL
EVT_WDF_CHILD_LIST_SCAN_FOR_CHILDREN(
_In_
WDFCHILDLIST ChildList
);
typedef EVT_WDF_CHILD_LIST_SCAN_FOR_CHILDREN *PFN_WDF_CHILD_LIST_SCAN_FOR_CHILDREN;
typedef
_Function_class_(EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COPY)
_IRQL_requires_same_
_IRQL_requires_max_(DISPATCH_LEVEL)
VOID
STDCALL
EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COPY(
_In_
WDFCHILDLIST ChildList,
_In_
PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER SourceIdentificationDescription,
_Out_
PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER DestinationIdentificationDescription
);
typedef EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COPY *PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COPY;
typedef
_Function_class_(EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_DUPLICATE)
_IRQL_requires_same_
_IRQL_requires_max_(DISPATCH_LEVEL)
NTSTATUS
STDCALL
EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_DUPLICATE(
_In_
WDFCHILDLIST ChildList,
_In_
PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER SourceIdentificationDescription,
_Out_
PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER DestinationIdentificationDescription
);
typedef EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_DUPLICATE *PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_DUPLICATE;
typedef
_Function_class_(EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COMPARE)
_IRQL_requires_same_
_IRQL_requires_max_(DISPATCH_LEVEL)
BOOLEAN
STDCALL
EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COMPARE(
_In_
WDFCHILDLIST ChildList,
_In_
PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER FirstIdentificationDescription,
_In_
PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER SecondIdentificationDescription
);
typedef EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COMPARE *PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COMPARE;
typedef
_Function_class_(EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_CLEANUP)
_IRQL_requires_same_
_IRQL_requires_max_(DISPATCH_LEVEL)
VOID
STDCALL
EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_CLEANUP(
_In_
WDFCHILDLIST ChildList,
_Inout_
PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription
);
typedef EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_CLEANUP *PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_CLEANUP;
typedef
_Function_class_(EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_COPY)
_IRQL_requires_same_
_IRQL_requires_max_(DISPATCH_LEVEL)
VOID
STDCALL
EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_COPY(
_In_
WDFCHILDLIST ChildList,
_In_
PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER SourceAddressDescription,
_Out_
PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER DestinationAddressDescription
);
typedef EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_COPY *PFN_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_COPY;
typedef
_Function_class_(EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_DUPLICATE)
_IRQL_requires_same_
_IRQL_requires_max_(DISPATCH_LEVEL)
NTSTATUS
STDCALL
EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_DUPLICATE(
_In_
WDFCHILDLIST ChildList,
_In_
PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER SourceAddressDescription,
_Out_
PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER DestinationAddressDescription
);
typedef EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_DUPLICATE *PFN_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_DUPLICATE;
typedef
_Function_class_(EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_CLEANUP)
_IRQL_requires_same_
_IRQL_requires_max_(DISPATCH_LEVEL)
VOID
STDCALL
EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_CLEANUP(
_In_
WDFCHILDLIST ChildList,
_Inout_
PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER AddressDescription
);
typedef EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_CLEANUP *PFN_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_CLEANUP;
typedef
_Function_class_(EVT_WDF_CHILD_LIST_DEVICE_REENUMERATED)
_IRQL_requires_same_
_IRQL_requires_max_(DISPATCH_LEVEL)
BOOLEAN
STDCALL
EVT_WDF_CHILD_LIST_DEVICE_REENUMERATED(
_In_
WDFCHILDLIST ChildList,
_In_
WDFDEVICE OldDevice,
_In_
PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER OldAddressDescription,
_Out_
PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER NewAddressDescription
);
typedef EVT_WDF_CHILD_LIST_DEVICE_REENUMERATED *PFN_WDF_CHILD_LIST_DEVICE_REENUMERATED;
typedef struct _WDF_CHILD_RETRIEVE_INFO {
//
// Size of the structure in bytes
//
ULONG Size;
//
// Must be a valid pointer when passed in, copied into upon success
//
PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription;
//
// Optional pointer when passed in, copied into upon success
//
PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER AddressDescription;
//
// Status of the returned device
//
WDF_CHILD_LIST_RETRIEVE_DEVICE_STATUS Status;
//
// If provided, will be used for searching through the list of devices
// instead of the default list ID compare function
//
PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COMPARE EvtChildListIdentificationDescriptionCompare;
} WDF_CHILD_RETRIEVE_INFO, *PWDF_CHILD_RETRIEVE_INFO;
FORCEINLINE
VOID
WDF_CHILD_RETRIEVE_INFO_INIT(
_Out_ PWDF_CHILD_RETRIEVE_INFO Info,
_In_ PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription
)
{
RtlZeroMemory(Info, sizeof(WDF_CHILD_RETRIEVE_INFO));
Info->Size = sizeof(WDF_CHILD_RETRIEVE_INFO);
Info->IdentificationDescription = IdentificationDescription;
}
typedef struct _WDF_CHILD_LIST_CONFIG {
//
// Size of this structure in bytes
//
ULONG Size;
//
// The size in bytes of an identificaiton description to be used with the
// created WDFCHILDLIST handle
//
ULONG IdentificationDescriptionSize;
//
// Optional size in bytes of an address description to be used with the
// created WDFCHILDLIST handle.
//
ULONG AddressDescriptionSize;
//
// Required callback to be invoked when a description on the device list
// needs to be converted into a real WDFDEVICE handle.
//
PFN_WDF_CHILD_LIST_CREATE_DEVICE EvtChildListCreateDevice;
//
// Optional callback to be invoked when the device list needs to be
// rescanned. This function will be called after the device has entered D0
// and been fully initialized but before I/O has started.
//
PFN_WDF_CHILD_LIST_SCAN_FOR_CHILDREN EvtChildListScanForChildren;
//
// Optional callback to be invoked when an identification description needs
// to be copied from one location to another.
//
// If left NULL, RtlCopyMemory will be used to copy the description.
//
PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COPY EvtChildListIdentificationDescriptionCopy;
//
// Optional callback to be invoked when an identification description needs
// to be duplicated. As opposed to EvtChildListIdentificationDescriptionCopy,
// EvtChildListIdentificationDescriptionDuplicate can fail.
//
PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_DUPLICATE EvtChildListIdentificationDescriptionDuplicate;
//
// Optional callback to be invoked when an identification description needs
// to be cleaned up. This function should *NOT* free the description passed
// to it, just free any associated resources.
//
PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_CLEANUP EvtChildListIdentificationDescriptionCleanup;
//
// Optional callback to be invoked when an identification description needs
// to be compared with another identificaiton description.
//
// If left NULL, RtlCompareMemory will be used to compare the two
// descriptions.
//
PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COMPARE EvtChildListIdentificationDescriptionCompare;
//
// Optional callback to be invoked when an address description needs
// to be copied from one location to another.
//
// If left NULL, RtlCopyMemory will be used to copy the description.
//
PFN_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_COPY EvtChildListAddressDescriptionCopy;
//
// Optional callback to be invoked when an address description needs to be
// duplicated. As opposed to EvtChildListAddressDescriptionCopy,
// EvtChildListAddressDescriptionDuplicate can fail.
//
PFN_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_DUPLICATE EvtChildListAddressDescriptionDuplicate;
//
// Optional callback to be invoked when an address description needs to be
// cleaned up. This function should *NOT* free the description passed to
// it, just free any associated resources.
//
PFN_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_CLEANUP EvtChildListAddressDescriptionCleanup;
//
// If provided, will be called when the child's stack requests that the
// child be reenumerated. Returning TRUE allows for the reenumeration to
// proceed. FALSE will no reenumerate the stack.
//
PFN_WDF_CHILD_LIST_DEVICE_REENUMERATED EvtChildListDeviceReenumerated;
} WDF_CHILD_LIST_CONFIG, *PWDF_CHILD_LIST_CONFIG;
FORCEINLINE
VOID
WDF_CHILD_LIST_CONFIG_INIT(
_Out_ PWDF_CHILD_LIST_CONFIG Config,
_In_ ULONG IdentificationDescriptionSize,
_In_ PFN_WDF_CHILD_LIST_CREATE_DEVICE EvtChildListCreateDevice
)
{
RtlZeroMemory(Config, sizeof(WDF_CHILD_LIST_CONFIG));
Config->Size = sizeof(WDF_CHILD_LIST_CONFIG);
Config->IdentificationDescriptionSize = IdentificationDescriptionSize;
Config->EvtChildListCreateDevice = EvtChildListCreateDevice;
}
typedef struct _WDF_CHILD_LIST_ITERATOR {
//
// Size of this structure in bytes
//
ULONG Size;
//
// What type of devices to return, see WDF_RETRIEVE_CHILD_FLAGS for
// flag values
//
//
ULONG Flags;
//
// For internal use, treat this field as opaque
//
PVOID Reserved[4];
} WDF_CHILD_LIST_ITERATOR, *PWDF_CHILD_LIST_ITERATOR;
FORCEINLINE
VOID
WDF_CHILD_LIST_ITERATOR_INIT(
_Out_ PWDF_CHILD_LIST_ITERATOR Iterator,
_In_ ULONG Flags
)
{
RtlZeroMemory(Iterator, sizeof(WDF_CHILD_LIST_ITERATOR));
Iterator->Size = sizeof(WDF_CHILD_LIST_ITERATOR);
Iterator->Flags = Flags;
}
//
// WDF Function: WdfChildListCreate
//
typedef
_Must_inspect_result_
_IRQL_requires_max_(PASSIVE_LEVEL)
WDFAPI
NTSTATUS
(STDCALL *PFN_WDFCHILDLISTCREATE)(
_In_
PWDF_DRIVER_GLOBALS DriverGlobals,
_In_
WDFDEVICE Device,
_In_
PWDF_CHILD_LIST_CONFIG Config,
_In_opt_
PWDF_OBJECT_ATTRIBUTES ChildListAttributes,
_Out_
WDFCHILDLIST* ChildList
);
_Must_inspect_result_
_IRQL_requires_max_(PASSIVE_LEVEL)
FORCEINLINE
NTSTATUS
WdfChildListCreate(
_In_
WDFDEVICE Device,
_In_
PWDF_CHILD_LIST_CONFIG Config,
_In_opt_
PWDF_OBJECT_ATTRIBUTES ChildListAttributes,
_Out_
WDFCHILDLIST* ChildList
)
{
return ((PFN_WDFCHILDLISTCREATE) WdfFunctions[WdfChildListCreateTableIndex])(WdfDriverGlobals, Device, Config, ChildListAttributes, ChildList);
}
//
// WDF Function: WdfChildListGetDevice
//
typedef
_IRQL_requires_max_(DISPATCH_LEVEL)
WDFAPI
WDFDEVICE
(STDCALL *PFN_WDFCHILDLISTGETDEVICE)(
_In_
PWDF_DRIVER_GLOBALS DriverGlobals,
_In_
WDFCHILDLIST ChildList
);
_IRQL_requires_max_(DISPATCH_LEVEL)
FORCEINLINE
WDFDEVICE
WdfChildListGetDevice(
_In_
WDFCHILDLIST ChildList
)
{
return ((PFN_WDFCHILDLISTGETDEVICE) WdfFunctions[WdfChildListGetDeviceTableIndex])(WdfDriverGlobals, ChildList);
}
//
// WDF Function: WdfChildListRetrievePdo
//
typedef
_Must_inspect_result_
_IRQL_requires_max_(DISPATCH_LEVEL)
WDFAPI
WDFDEVICE
(STDCALL *PFN_WDFCHILDLISTRETRIEVEPDO)(
_In_
PWDF_DRIVER_GLOBALS DriverGlobals,
_In_
WDFCHILDLIST ChildList,
_Inout_
PWDF_CHILD_RETRIEVE_INFO RetrieveInfo
);
_Must_inspect_result_
_IRQL_requires_max_(DISPATCH_LEVEL)
FORCEINLINE
WDFDEVICE
WdfChildListRetrievePdo(
_In_
WDFCHILDLIST ChildList,
_Inout_
PWDF_CHILD_RETRIEVE_INFO RetrieveInfo
)
{
return ((PFN_WDFCHILDLISTRETRIEVEPDO) WdfFunctions[WdfChildListRetrievePdoTableIndex])(WdfDriverGlobals, ChildList, RetrieveInfo);
}
//
// WDF Function: WdfChildListRetrieveAddressDescription
//
typedef
_Must_inspect_result_
_IRQL_requires_max_(DISPATCH_LEVEL)
WDFAPI
NTSTATUS
(STDCALL *PFN_WDFCHILDLISTRETRIEVEADDRESSDESCRIPTION)(
_In_
PWDF_DRIVER_GLOBALS DriverGlobals,
_In_
WDFCHILDLIST ChildList,
_In_
PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription,
_Inout_
PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER AddressDescription
);
_Must_inspect_result_
_IRQL_requires_max_(DISPATCH_LEVEL)
FORCEINLINE
NTSTATUS
WdfChildListRetrieveAddressDescription(
_In_
WDFCHILDLIST ChildList,
_In_
PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription,
_Inout_
PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER AddressDescription
)
{
return ((PFN_WDFCHILDLISTRETRIEVEADDRESSDESCRIPTION) WdfFunctions[WdfChildListRetrieveAddressDescriptionTableIndex])(WdfDriverGlobals, ChildList, IdentificationDescription, AddressDescription);
}
//
// WDF Function: WdfChildListBeginScan
//
typedef
_IRQL_requires_max_(DISPATCH_LEVEL)
WDFAPI
VOID
(STDCALL *PFN_WDFCHILDLISTBEGINSCAN)(
_In_
PWDF_DRIVER_GLOBALS DriverGlobals,
_In_
WDFCHILDLIST ChildList
);
_IRQL_requires_max_(DISPATCH_LEVEL)
FORCEINLINE
VOID
WdfChildListBeginScan(
_In_
WDFCHILDLIST ChildList
)
{
((PFN_WDFCHILDLISTBEGINSCAN) WdfFunctions[WdfChildListBeginScanTableIndex])(WdfDriverGlobals, ChildList);
}
//
// WDF Function: WdfChildListEndScan
//
typedef
_IRQL_requires_max_(DISPATCH_LEVEL)
WDFAPI
VOID
(STDCALL *PFN_WDFCHILDLISTENDSCAN)(
_In_
PWDF_DRIVER_GLOBALS DriverGlobals,
_In_
WDFCHILDLIST ChildList
);
_IRQL_requires_max_(DISPATCH_LEVEL)
FORCEINLINE
VOID
WdfChildListEndScan(
_In_
WDFCHILDLIST ChildList
)
{
((PFN_WDFCHILDLISTENDSCAN) WdfFunctions[WdfChildListEndScanTableIndex])(WdfDriverGlobals, ChildList);
}
//
// WDF Function: WdfChildListBeginIteration
//
typedef
_IRQL_requires_max_(DISPATCH_LEVEL)
WDFAPI
VOID
(STDCALL *PFN_WDFCHILDLISTBEGINITERATION)(
_In_
PWDF_DRIVER_GLOBALS DriverGlobals,
_In_
WDFCHILDLIST ChildList,
_In_
PWDF_CHILD_LIST_ITERATOR Iterator
);
_IRQL_requires_max_(DISPATCH_LEVEL)
FORCEINLINE
VOID
WdfChildListBeginIteration(
_In_
WDFCHILDLIST ChildList,
_In_
PWDF_CHILD_LIST_ITERATOR Iterator
)
{
((PFN_WDFCHILDLISTBEGINITERATION) WdfFunctions[WdfChildListBeginIterationTableIndex])(WdfDriverGlobals, ChildList, Iterator);
}
//
// WDF Function: WdfChildListRetrieveNextDevice
//
typedef
_Must_inspect_result_
_IRQL_requires_max_(DISPATCH_LEVEL)
WDFAPI
NTSTATUS
(STDCALL *PFN_WDFCHILDLISTRETRIEVENEXTDEVICE)(
_In_
PWDF_DRIVER_GLOBALS DriverGlobals,
_In_
WDFCHILDLIST ChildList,
_In_
PWDF_CHILD_LIST_ITERATOR Iterator,
_Out_
WDFDEVICE* Device,
_Inout_opt_
PWDF_CHILD_RETRIEVE_INFO Info
);
_Must_inspect_result_
_IRQL_requires_max_(DISPATCH_LEVEL)
FORCEINLINE
NTSTATUS
WdfChildListRetrieveNextDevice(
_In_
WDFCHILDLIST ChildList,
_In_
PWDF_CHILD_LIST_ITERATOR Iterator,
_Out_
WDFDEVICE* Device,
_Inout_opt_
PWDF_CHILD_RETRIEVE_INFO Info
)
{
return ((PFN_WDFCHILDLISTRETRIEVENEXTDEVICE) WdfFunctions[WdfChildListRetrieveNextDeviceTableIndex])(WdfDriverGlobals, ChildList, Iterator, Device, Info);
}
//
// WDF Function: WdfChildListEndIteration
//
typedef
_IRQL_requires_max_(DISPATCH_LEVEL)
WDFAPI
VOID
(STDCALL *PFN_WDFCHILDLISTENDITERATION)(
_In_
PWDF_DRIVER_GLOBALS DriverGlobals,
_In_
WDFCHILDLIST ChildList,
_In_
PWDF_CHILD_LIST_ITERATOR Iterator
);
_IRQL_requires_max_(DISPATCH_LEVEL)
FORCEINLINE
VOID
WdfChildListEndIteration(
_In_
WDFCHILDLIST ChildList,
_In_
PWDF_CHILD_LIST_ITERATOR Iterator
)
{
((PFN_WDFCHILDLISTENDITERATION) WdfFunctions[WdfChildListEndIterationTableIndex])(WdfDriverGlobals, ChildList, Iterator);
}
//
// WDF Function: WdfChildListAddOrUpdateChildDescriptionAsPresent
//
typedef
_Must_inspect_result_
_IRQL_requires_max_(DISPATCH_LEVEL)
WDFAPI
NTSTATUS
(STDCALL *PFN_WDFCHILDLISTADDORUPDATECHILDDESCRIPTIONASPRESENT)(
_In_
PWDF_DRIVER_GLOBALS DriverGlobals,
_In_
WDFCHILDLIST ChildList,
_In_
PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription,
_In_opt_
PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER AddressDescription
);
_Must_inspect_result_
_IRQL_requires_max_(DISPATCH_LEVEL)
FORCEINLINE
NTSTATUS
WdfChildListAddOrUpdateChildDescriptionAsPresent(
_In_
WDFCHILDLIST ChildList,
_In_
PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription,
_In_opt_
PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER AddressDescription
)
{
return ((PFN_WDFCHILDLISTADDORUPDATECHILDDESCRIPTIONASPRESENT) WdfFunctions[WdfChildListAddOrUpdateChildDescriptionAsPresentTableIndex])(WdfDriverGlobals, ChildList, IdentificationDescription, AddressDescription);
}
//
// WDF Function: WdfChildListUpdateChildDescriptionAsMissing
//
typedef
_Must_inspect_result_
_IRQL_requires_max_(DISPATCH_LEVEL)
WDFAPI
NTSTATUS
(STDCALL *PFN_WDFCHILDLISTUPDATECHILDDESCRIPTIONASMISSING)(
_In_
PWDF_DRIVER_GLOBALS DriverGlobals,
_In_
WDFCHILDLIST ChildList,
_In_
PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription
);
_Must_inspect_result_
_IRQL_requires_max_(DISPATCH_LEVEL)
FORCEINLINE
NTSTATUS
WdfChildListUpdateChildDescriptionAsMissing(
_In_
WDFCHILDLIST ChildList,
_In_
PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription
)
{
return ((PFN_WDFCHILDLISTUPDATECHILDDESCRIPTIONASMISSING) WdfFunctions[WdfChildListUpdateChildDescriptionAsMissingTableIndex])(WdfDriverGlobals, ChildList, IdentificationDescription);
}
//
// WDF Function: WdfChildListUpdateAllChildDescriptionsAsPresent
//
typedef
_IRQL_requires_max_(DISPATCH_LEVEL)
WDFAPI
VOID
(STDCALL *PFN_WDFCHILDLISTUPDATEALLCHILDDESCRIPTIONSASPRESENT)(
_In_
PWDF_DRIVER_GLOBALS DriverGlobals,
_In_
WDFCHILDLIST ChildList
);
_IRQL_requires_max_(DISPATCH_LEVEL)
FORCEINLINE
VOID
WdfChildListUpdateAllChildDescriptionsAsPresent(
_In_
WDFCHILDLIST ChildList
)
{
((PFN_WDFCHILDLISTUPDATEALLCHILDDESCRIPTIONSASPRESENT) WdfFunctions[WdfChildListUpdateAllChildDescriptionsAsPresentTableIndex])(WdfDriverGlobals, ChildList);
}
//
// WDF Function: WdfChildListRequestChildEject
//
typedef
_IRQL_requires_max_(DISPATCH_LEVEL)
WDFAPI
BOOLEAN
(STDCALL *PFN_WDFCHILDLISTREQUESTCHILDEJECT)(
_In_
PWDF_DRIVER_GLOBALS DriverGlobals,
_In_
WDFCHILDLIST ChildList,
_In_
PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription
);
_IRQL_requires_max_(DISPATCH_LEVEL)
FORCEINLINE
BOOLEAN
WdfChildListRequestChildEject(
_In_
WDFCHILDLIST ChildList,
_In_
PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription
)
{
return ((PFN_WDFCHILDLISTREQUESTCHILDEJECT) WdfFunctions[WdfChildListRequestChildEjectTableIndex])(WdfDriverGlobals, ChildList, IdentificationDescription);
}
#endif // (NTDDI_VERSION >= NTDDI_WIN2K)
WDF_EXTERN_C_END
#endif // _WDFCHILDLIST_H_