Home | History | Annotate | Download | only in ddk
      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