| #ifndef _SWENUM_ | |
| #define _SWENUM_ | |
| #define IOCTL_SWENUM_INSTALL_INTERFACE CTL_CODE(FILE_DEVICE_BUS_EXTENDER, 0x000, METHOD_BUFFERED, FILE_ANY_ACCESS) | |
| #define IOCTL_SWENUM_REMOVE_INTERFACE CTL_CODE(FILE_DEVICE_BUS_EXTENDER, 0x001, METHOD_BUFFERED, FILE_ANY_ACCESS) | |
| #define IOCTL_SWENUM_GET_BUS_ID CTL_CODE(FILE_DEVICE_BUS_EXTENDER, 0x002, METHOD_NEITHER, FILE_READ_ACCESS) | |
| typedef struct _SWENUM_INSTALL_INTERFACE { | |
| GUID DeviceId; | |
| GUID InterfaceId; | |
| WCHAR ReferenceString[1]; | |
| } SWENUM_INSTALL_INTERFACE, *PSWENUM_INSTALL_INTERFACE; | |
| #if defined(_KS_) | |
| #define STATIC_BUSID_SoftwareDeviceEnumerator STATIC_KSMEDIUMSETID_Standard | |
| #define BUSID_SoftwareDeviceEnumerator KSMEDIUMSETID_Standard | |
| #else | |
| #define STATIC_BUSID_SoftwareDeviceEnumerator \ | |
| 0x4747B320L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 | |
| #endif /* _KS_ */ | |
| #if defined(_NTDDK_) | |
| #if !defined(_KS_) | |
| typedef VOID (NTAPI *PFNREFERENCEDEVICEOBJECT)(PVOID Context); | |
| typedef VOID (NTAPI *PFNDEREFERENCEDEVICEOBJECT)(PVOID Context); | |
| typedef NTSTATUS (NTAPI *PFNQUERYREFERENCESTRING)(PVOID Context, PWCHAR *String); | |
| #endif /* _KS_ */ | |
| #define BUS_INTERFACE_SWENUM_VERSION 0x100 | |
| typedef struct _BUS_INTERFACE_SWENUM { | |
| INTERFACE Interface; | |
| PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject; | |
| PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject; | |
| PFNQUERYREFERENCESTRING QueryReferenceString; | |
| } BUS_INTERFACE_SWENUM, *PBUS_INTERFACE_SWENUM; | |
| #if defined(__cplusplus) | |
| extern "C" { | |
| #endif | |
| #if defined(_KS_) | |
| KSDDKAPI | |
| NTSTATUS | |
| NTAPI | |
| KsQuerySoftwareBusInterface( | |
| IN PDEVICE_OBJECT PnpDeviceObject, | |
| OUT PBUS_INTERFACE_SWENUM BusInterface | |
| ); | |
| KSDDKAPI | |
| NTSTATUS | |
| NTAPI | |
| KsReferenceSoftwareBusObject( | |
| IN KSDEVICE_HEADER Header | |
| ); | |
| KSDDKAPI | |
| VOID | |
| NTAPI | |
| KsDereferenceSoftwareBusObject( | |
| IN KSDEVICE_HEADER Header | |
| ); | |
| KSDDKAPI | |
| NTSTATUS | |
| NTAPI | |
| KsCreateBusEnumObject( | |
| IN PWSTR BusIdentifier, | |
| IN PDEVICE_OBJECT BusDeviceObject, | |
| IN PDEVICE_OBJECT PhysicalDeviceObject, | |
| IN PDEVICE_OBJECT PnpDeviceObject, | |
| IN REFGUID InterfaceGuid, | |
| IN PWSTR ServiceRelativePath | |
| ); | |
| KSDDKAPI | |
| NTSTATUS | |
| NTAPI | |
| KsGetBusEnumIdentifier( | |
| IN OUT PIRP Irp | |
| ); | |
| KSDDKAPI | |
| NTSTATUS | |
| NTAPI | |
| KsGetBusEnumPnpDeviceObject( | |
| IN PDEVICE_OBJECT DeviceObject, | |
| OUT PDEVICE_OBJECT *PnpDeviceObject | |
| ); | |
| KSDDKAPI | |
| NTSTATUS | |
| NTAPI | |
| KsInstallBusEnumInterface( | |
| IN PIRP Irp | |
| ); | |
| KSDDKAPI | |
| NTSTATUS | |
| NTAPI | |
| KsIsBusEnumChildDevice( | |
| IN PDEVICE_OBJECT DeviceObject, | |
| OUT PBOOLEAN ChildDevice | |
| ); | |
| KSDDKAPI | |
| NTSTATUS | |
| NTAPI | |
| KsRemoveBusEnumInterface( | |
| IN PIRP Irp | |
| ); | |
| KSDDKAPI | |
| NTSTATUS | |
| NTAPI | |
| KsServiceBusEnumPnpRequest( | |
| IN PDEVICE_OBJECT DeviceObject, | |
| IN OUT PIRP Irp | |
| ); | |
| KSDDKAPI | |
| NTSTATUS | |
| NTAPI | |
| KsServiceBusEnumCreateRequest( | |
| IN PDEVICE_OBJECT DeviceObject, | |
| IN OUT PIRP Irp | |
| ); | |
| KSDDKAPI | |
| NTSTATUS | |
| NTAPI | |
| KsGetBusEnumParentFDOFromChildPDO( | |
| IN PDEVICE_OBJECT DeviceObject, | |
| OUT PDEVICE_OBJECT *FunctionalDeviceObject | |
| ); | |
| #endif /* _KS_ */ | |
| #if defined(__cplusplus) | |
| } | |
| #endif | |
| #endif /* _NTDDK_ */ | |
| #endif /* _SWENUM_ */ | |