#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