1 #ifndef _SWENUM_ 2 #define _SWENUM_ 3 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) 7 8 typedef struct _SWENUM_INSTALL_INTERFACE { 9 GUID DeviceId; 10 GUID InterfaceId; 11 WCHAR ReferenceString[1]; 12 } SWENUM_INSTALL_INTERFACE, *PSWENUM_INSTALL_INTERFACE; 13 14 #if defined(_KS_) 15 #define STATIC_BUSID_SoftwareDeviceEnumerator STATIC_KSMEDIUMSETID_Standard 16 #define BUSID_SoftwareDeviceEnumerator KSMEDIUMSETID_Standard 17 #else 18 #define STATIC_BUSID_SoftwareDeviceEnumerator \ 19 0x4747B320L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 20 #endif /* _KS_ */ 21 22 #if defined(_NTDDK_) 23 24 #if !defined(_KS_) 25 typedef VOID (NTAPI *PFNREFERENCEDEVICEOBJECT)(PVOID Context); 26 typedef VOID (NTAPI *PFNDEREFERENCEDEVICEOBJECT)(PVOID Context); 27 typedef NTSTATUS (NTAPI *PFNQUERYREFERENCESTRING)(PVOID Context, PWCHAR *String); 28 #endif /* _KS_ */ 29 30 #define BUS_INTERFACE_SWENUM_VERSION 0x100 31 32 typedef struct _BUS_INTERFACE_SWENUM { 33 INTERFACE Interface; 34 PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject; 35 PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject; 36 PFNQUERYREFERENCESTRING QueryReferenceString; 37 } BUS_INTERFACE_SWENUM, *PBUS_INTERFACE_SWENUM; 38 39 #if defined(__cplusplus) 40 extern "C" { 41 #endif 42 43 #if defined(_KS_) 44 45 KSDDKAPI 46 NTSTATUS 47 NTAPI 48 KsQuerySoftwareBusInterface( 49 IN PDEVICE_OBJECT PnpDeviceObject, 50 OUT PBUS_INTERFACE_SWENUM BusInterface 51 ); 52 53 KSDDKAPI 54 NTSTATUS 55 NTAPI 56 KsReferenceSoftwareBusObject( 57 IN KSDEVICE_HEADER Header 58 ); 59 60 KSDDKAPI 61 VOID 62 NTAPI 63 KsDereferenceSoftwareBusObject( 64 IN KSDEVICE_HEADER Header 65 ); 66 67 KSDDKAPI 68 NTSTATUS 69 NTAPI 70 KsCreateBusEnumObject( 71 IN PWSTR BusIdentifier, 72 IN PDEVICE_OBJECT BusDeviceObject, 73 IN PDEVICE_OBJECT PhysicalDeviceObject, 74 IN PDEVICE_OBJECT PnpDeviceObject, 75 IN REFGUID InterfaceGuid, 76 IN PWSTR ServiceRelativePath 77 ); 78 79 KSDDKAPI 80 NTSTATUS 81 NTAPI 82 KsGetBusEnumIdentifier( 83 IN OUT PIRP Irp 84 ); 85 86 KSDDKAPI 87 NTSTATUS 88 NTAPI 89 KsGetBusEnumPnpDeviceObject( 90 IN PDEVICE_OBJECT DeviceObject, 91 OUT PDEVICE_OBJECT *PnpDeviceObject 92 ); 93 94 KSDDKAPI 95 NTSTATUS 96 NTAPI 97 KsInstallBusEnumInterface( 98 IN PIRP Irp 99 ); 100 101 KSDDKAPI 102 NTSTATUS 103 NTAPI 104 KsIsBusEnumChildDevice( 105 IN PDEVICE_OBJECT DeviceObject, 106 OUT PBOOLEAN ChildDevice 107 ); 108 109 110 KSDDKAPI 111 NTSTATUS 112 NTAPI 113 KsRemoveBusEnumInterface( 114 IN PIRP Irp 115 ); 116 117 KSDDKAPI 118 NTSTATUS 119 NTAPI 120 KsServiceBusEnumPnpRequest( 121 IN PDEVICE_OBJECT DeviceObject, 122 IN OUT PIRP Irp 123 ); 124 125 KSDDKAPI 126 NTSTATUS 127 NTAPI 128 KsServiceBusEnumCreateRequest( 129 IN PDEVICE_OBJECT DeviceObject, 130 IN OUT PIRP Irp 131 ); 132 133 KSDDKAPI 134 NTSTATUS 135 NTAPI 136 KsGetBusEnumParentFDOFromChildPDO( 137 IN PDEVICE_OBJECT DeviceObject, 138 OUT PDEVICE_OBJECT *FunctionalDeviceObject 139 ); 140 141 #endif /* _KS_ */ 142 143 #if defined(__cplusplus) 144 } 145 #endif 146 147 #endif /* _NTDDK_ */ 148 149 #endif /* _SWENUM_ */ 150 151