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];
12 } SWENUM_INSTALL_INTERFACE
, *PSWENUM_INSTALL_INTERFACE
;
15 #define STATIC_BUSID_SoftwareDeviceEnumerator STATIC_KSMEDIUMSETID_Standard
16 #define BUSID_SoftwareDeviceEnumerator KSMEDIUMSETID_Standard
18 #define STATIC_BUSID_SoftwareDeviceEnumerator \
19 0x4747B320L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
25 typedef VOID (NTAPI
*PFNREFERENCEDEVICEOBJECT
)(PVOID Context
);
26 typedef VOID (NTAPI
*PFNDEREFERENCEDEVICEOBJECT
)(PVOID Context
);
27 typedef NTSTATUS (NTAPI
*PFNQUERYREFERENCESTRING
)(PVOID Context
, PWCHAR
*String
);
30 #define BUS_INTERFACE_SWENUM_VERSION 0x100
32 typedef struct _BUS_INTERFACE_SWENUM
{
34 PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject
;
35 PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject
;
36 PFNQUERYREFERENCESTRING QueryReferenceString
;
37 } BUS_INTERFACE_SWENUM
, *PBUS_INTERFACE_SWENUM
;
39 #if defined(__cplusplus)
48 KsQuerySoftwareBusInterface(
49 IN PDEVICE_OBJECT PnpDeviceObject
,
50 OUT PBUS_INTERFACE_SWENUM BusInterface
);
55 KsReferenceSoftwareBusObject(
56 IN KSDEVICE_HEADER Header
);
61 KsDereferenceSoftwareBusObject(
62 IN KSDEVICE_HEADER Header
);
67 KsCreateBusEnumObject(
68 IN PWSTR BusIdentifier
,
69 IN PDEVICE_OBJECT BusDeviceObject
,
70 IN PDEVICE_OBJECT PhysicalDeviceObject
,
71 IN PDEVICE_OBJECT PnpDeviceObject
,
72 IN REFGUID InterfaceGuid
,
73 IN PWSTR ServiceRelativePath
);
78 KsGetBusEnumIdentifier(
84 KsGetBusEnumPnpDeviceObject(
85 IN PDEVICE_OBJECT DeviceObject
,
86 OUT PDEVICE_OBJECT
*PnpDeviceObject
);
91 KsInstallBusEnumInterface(
97 KsIsBusEnumChildDevice(
98 IN PDEVICE_OBJECT DeviceObject
,
99 OUT PBOOLEAN ChildDevice
);
104 KsRemoveBusEnumInterface(
110 KsServiceBusEnumPnpRequest(
111 IN PDEVICE_OBJECT DeviceObject
,
117 KsServiceBusEnumCreateRequest(
118 IN PDEVICE_OBJECT DeviceObject
,
124 KsGetBusEnumParentFDOFromChildPDO(
125 IN PDEVICE_OBJECT DeviceObject
,
126 OUT PDEVICE_OBJECT
*FunctionalDeviceObject
);
130 #if defined(__cplusplus)
136 #endif /* _SWENUM_ */