6 #define IOCTL_SWENUM_INSTALL_INTERFACE \
7 CTL_CODE(FILE_DEVICE_BUS_EXTENDER, 0x000, METHOD_BUFFERED, FILE_ANY_ACCESS)
9 #define IOCTL_SWENUM_REMOVE_INTERFACE \
10 CTL_CODE(FILE_DEVICE_BUS_EXTENDER, 0x001, METHOD_BUFFERED, FILE_ANY_ACCESS)
12 #define IOCTL_SWENUM_GET_BUS_ID \
13 CTL_CODE(FILE_DEVICE_BUS_EXTENDER, 0x002, METHOD_NEITHER, FILE_READ_ACCESS)
15 typedef struct _SWENUM_INSTALL_INTERFACE
{
18 WCHAR ReferenceString
[1];
19 } SWENUM_INSTALL_INTERFACE
, *PSWENUM_INSTALL_INTERFACE
;
22 #define STATIC_BUSID_SoftwareDeviceEnumerator STATIC_KSMEDIUMSETID_Standard
23 #define BUSID_SoftwareDeviceEnumerator KSMEDIUMSETID_Standard
25 #define STATIC_BUSID_SoftwareDeviceEnumerator \
26 0x4747B320L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
34 (NTAPI
*PFNREFERENCEDEVICEOBJECT
)(
38 (NTAPI
*PFNDEREFERENCEDEVICEOBJECT
)(
42 (NTAPI
*PFNQUERYREFERENCESTRING
)(
44 _Inout_ PWCHAR
*String
);
48 #define BUS_INTERFACE_SWENUM_VERSION 0x100
50 typedef struct _BUS_INTERFACE_SWENUM
{
52 PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject
;
53 PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject
;
54 PFNQUERYREFERENCESTRING QueryReferenceString
;
55 } BUS_INTERFACE_SWENUM
, *PBUS_INTERFACE_SWENUM
;
57 #if defined(__cplusplus)
66 KsQuerySoftwareBusInterface(
67 _In_ PDEVICE_OBJECT PnpDeviceObject
,
68 _Out_ PBUS_INTERFACE_SWENUM BusInterface
);
73 KsReferenceSoftwareBusObject(
74 _In_ KSDEVICE_HEADER Header
);
79 KsDereferenceSoftwareBusObject(
80 _In_ KSDEVICE_HEADER Header
);
82 _IRQL_requires_max_(PASSIVE_LEVEL
)
86 KsCreateBusEnumObject(
87 _In_ PWSTR BusIdentifier
,
88 _In_ PDEVICE_OBJECT BusDeviceObject
,
89 _In_ PDEVICE_OBJECT PhysicalDeviceObject
,
90 _In_opt_ PDEVICE_OBJECT PnpDeviceObject
,
91 _In_opt_ REFGUID InterfaceGuid
,
92 _In_opt_ PWSTR ServiceRelativePath
);
97 KsGetBusEnumIdentifier(
100 _IRQL_requires_max_(PASSIVE_LEVEL
)
104 KsGetBusEnumPnpDeviceObject(
105 _In_ PDEVICE_OBJECT DeviceObject
,
106 _Out_ PDEVICE_OBJECT
*PnpDeviceObject
);
108 _IRQL_requires_max_(PASSIVE_LEVEL
)
112 KsInstallBusEnumInterface(
115 _IRQL_requires_max_(PASSIVE_LEVEL
)
119 KsIsBusEnumChildDevice(
120 _In_ PDEVICE_OBJECT DeviceObject
,
121 _Out_ PBOOLEAN ChildDevice
);
123 _IRQL_requires_max_(PASSIVE_LEVEL
)
127 KsRemoveBusEnumInterface(
130 _IRQL_requires_max_(PASSIVE_LEVEL
)
134 KsServiceBusEnumPnpRequest(
135 _In_ PDEVICE_OBJECT DeviceObject
,
138 _IRQL_requires_max_(PASSIVE_LEVEL
)
142 KsServiceBusEnumCreateRequest(
143 _In_ PDEVICE_OBJECT DeviceObject
,
146 _IRQL_requires_max_(PASSIVE_LEVEL
)
150 KsGetBusEnumParentFDOFromChildPDO(
151 _In_ PDEVICE_OBJECT DeviceObject
,
152 _Out_ PDEVICE_OBJECT
*FunctionalDeviceObject
);
156 #if defined(__cplusplus)
162 #endif /* _SWENUM_ */