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