diff --git a/reactos/include/ddk/swenum.h b/reactos/include/ddk/swenum.h new file mode 100644 index 00000000000..1ce3388f417 --- /dev/null +++ b/reactos/include/ddk/swenum.h @@ -0,0 +1,153 @@ +#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 + +#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 + +#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 + +#if defined(__cplusplus) +} +#endif +#endif +#endif +