4 #define IOCTL_SWENUM_INSTALL_INTERFACE CTL_CODE(FILE_DEVICE_BUS_EXTENDER, 0x000, METHOD_BUFFERED, FILE_ANY_ACCESS)
5 #define IOCTL_SWENUM_REMOVE_INTERFACE CTL_CODE(FILE_DEVICE_BUS_EXTENDER, 0x001, METHOD_BUFFERED, FILE_ANY_ACCESS)
6 #define IOCTL_SWENUM_GET_BUS_ID CTL_CODE(FILE_DEVICE_BUS_EXTENDER, 0x002, METHOD_NEITHER, FILE_READ_ACCESS)
8 typedef struct _SWENUM_INSTALL_INTERFACE
{
11 WCHAR ReferenceString
[1];
13 } SWENUM_INSTALL_INTERFACE
, *PSWENUM_INSTALL_INTERFACE
;
16 #define STATIC_BUSID_SoftwareDeviceEnumerator STATIC_KSMEDIUMSETID_Standard
17 #define BUSID_SoftwareDeviceEnumerator KSMEDIUMSETID_Standard
19 #define STATIC_BUSID_SoftwareDeviceEnumerator \
20 0x4747B320L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
28 typedef VOID (NTAPI
*PFNREFERENCEDEVICEOBJECT
)(PVOID Context
);
29 typedef VOID (NTAPI
*PFNDEREFERENCEDEVICEOBJECT
)(PVOID Context
);
30 typedef NTSTATUS (NTAPI
*PFNQUERYREFERENCESTRING
)(PVOID Context
, PWCHAR
*String
);
34 #define BUS_INTERFACE_SWENUM_VERSION 0x100
36 typedef struct _BUS_INTERFACE_SWENUM
39 PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject
;
40 PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject
;
41 PFNQUERYREFERENCESTRING QueryReferenceString
;
42 } BUS_INTERFACE_SWENUM
, *PBUS_INTERFACE_SWENUM
;
44 #if defined(__cplusplus)
53 KsQuerySoftwareBusInterface(
54 IN PDEVICE_OBJECT PnpDeviceObject
,
55 OUT PBUS_INTERFACE_SWENUM BusInterface
61 KsReferenceSoftwareBusObject(
62 IN KSDEVICE_HEADER Header
68 KsDereferenceSoftwareBusObject(
69 IN KSDEVICE_HEADER Header
75 KsCreateBusEnumObject(
76 IN PWSTR BusIdentifier
,
77 IN PDEVICE_OBJECT BusDeviceObject
,
78 IN PDEVICE_OBJECT PhysicalDeviceObject
,
79 IN PDEVICE_OBJECT PnpDeviceObject
,
80 IN REFGUID InterfaceGuid
,
81 IN PWSTR ServiceRelativePath
87 KsGetBusEnumIdentifier(
94 KsGetBusEnumPnpDeviceObject(
95 IN PDEVICE_OBJECT DeviceObject
,
96 OUT PDEVICE_OBJECT
*PnpDeviceObject
102 KsInstallBusEnumInterface(
109 KsIsBusEnumChildDevice(
110 IN PDEVICE_OBJECT DeviceObject
,
111 OUT PBOOLEAN ChildDevice
118 KsRemoveBusEnumInterface(
125 KsServiceBusEnumPnpRequest(
126 IN PDEVICE_OBJECT DeviceObject
,
133 KsServiceBusEnumCreateRequest(
134 IN PDEVICE_OBJECT DeviceObject
,
141 KsGetBusEnumParentFDOFromChildPDO(
142 IN PDEVICE_OBJECT DeviceObject
,
143 OUT PDEVICE_OBJECT
*FunctionalDeviceObject
148 #if defined(__cplusplus)