- Implement KsGetFirstChild, KsGetNextSibling
[reactos.git] / reactos / drivers / ksfilter / ks / ksiface.h
1 #ifndef KSIFACE_H__
2 #define KSIFACE_H__
3
4 #include <ntddk.h>
5 #include <ks.h>
6
7 #if !defined(DEFINE_ABSTRACT_UNKNOWN)
8
9 #define DEFINE_ABSTRACT_UNKNOWN() \
10 STDMETHOD_(NTSTATUS, QueryInterface)(THIS_ \
11 REFIID InterfaceId, \
12 PVOID* Interface)PURE; \
13 STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
14 STDMETHOD_(ULONG,Release)(THIS) PURE;
15 #endif
16
17 typedef struct
18 {
19 LIST_ENTRY Entry;
20 LIST_ENTRY ObjectList;
21 PRKMUTEX BagMutex;
22 PVOID DeviceHeader;
23 }KSIOBJECT_BAG, *PKSIOBJECT_BAG;
24
25
26 /*****************************************************************************
27 * IKsAllocator
28 *****************************************************************************
29 */
30
31 #undef INTERFACE
32 #define INTERFACE IKsAllocator
33
34 DECLARE_INTERFACE_(IKsAllocator, IUnknown)
35 {
36 DEFINE_ABSTRACT_UNKNOWN()
37
38 STDMETHOD_(NTSTATUS, DispatchDeviceIoControl)(THIS_
39 IN PDEVICE_OBJECT DeviceObject,
40 IN PIRP Irp) PURE;
41
42 STDMETHOD_(NTSTATUS, Close)(THIS) PURE;
43
44 STDMETHOD_(NTSTATUS, AllocateFrame)(THIS_
45 IN PVOID * OutFrame) PURE;
46
47 STDMETHOD_(VOID, FreeFrame)(THIS_
48 IN PVOID OutFrame) PURE;
49 };
50
51
52 /*****************************************************************************
53 * IKsPin
54 *****************************************************************************
55 */
56
57 #undef INTERFACE
58 #define INTERFACE IKsClock
59
60 DECLARE_INTERFACE_(IKsClock, IUnknown)
61 {
62 DEFINE_ABSTRACT_UNKNOWN()
63 };
64
65 /*****************************************************************************
66 * IKsTransport
67 *****************************************************************************
68 */
69
70 #undef INTERFACE
71 #define INTERFACE IKsTransport
72
73 DECLARE_INTERFACE_(IKsTransport, IUnknown)
74 {
75 DEFINE_ABSTRACT_UNKNOWN()
76 };
77
78
79 /*****************************************************************************
80 * IKsPin
81 *****************************************************************************
82 */
83
84 #undef INTERFACE
85 #define INTERFACE IKsPin
86
87 struct KSPTRANSPORTCONFIG;
88
89 DECLARE_INTERFACE_(IKsPin, IUnknown)
90 {
91 DEFINE_ABSTRACT_UNKNOWN()
92
93 STDMETHOD_(NTSTATUS, TransferKsIrp)(THIS_
94 IN PIRP Irp,
95 IN IKsTransport **OutTransport) PURE;
96
97 STDMETHOD_(VOID, DiscardKsIrp)(THIS_
98 IN PIRP Irp,
99 IN IKsTransport * *OutTransport) PURE;
100
101 STDMETHOD_(NTSTATUS, Connect)(THIS_
102 IN IKsTransport * TransportIn,
103 OUT IKsTransport ** OutTransportIn,
104 OUT IKsTransport * *OutTransportOut,
105 IN KSPIN_DATAFLOW DataFlow) PURE;
106
107 STDMETHOD_(NTSTATUS, SetDeviceState)(THIS_
108 IN KSSTATE OldState,
109 IN KSSTATE NewState,
110 IN IKsTransport * *OutTransport) PURE;
111
112 STDMETHOD_(VOID, SetResetState)(THIS_
113 IN KSRESET ResetState,
114 OUT IKsTransport * * OutTransportOut) PURE;
115
116 STDMETHOD_(NTSTATUS, GetTransportConfig)(THIS_
117 IN struct KSPTRANSPORTCONFIG * TransportConfig,
118 OUT IKsTransport ** OutTransportIn,
119 OUT IKsTransport ** OutTransportOut) PURE;
120
121 STDMETHOD_(NTSTATUS, SetTransportConfig)(THIS_
122 IN struct KSPTRANSPORTCONFIG const * TransportConfig,
123 OUT IKsTransport ** OutTransportIn,
124 OUT IKsTransport ** OutTransportOut) PURE;
125
126 STDMETHOD_(NTSTATUS, ResetTransportConfig)(THIS_
127 OUT IKsTransport ** OutTransportIn,
128 OUT IKsTransport ** OutTransportOut) PURE;
129
130 STDMETHOD_(PKSPIN, GetStruct)(THIS) PURE;
131 STDMETHOD_(PKSPROCESSPIN, GetProcessPin)(THIS) PURE;
132 STDMETHOD_(NTSTATUS, AttemptBypass)(THIS) PURE;
133 STDMETHOD_(NTSTATUS, AttemptUnbypass)(THIS) PURE;
134
135 STDMETHOD_(VOID, GenerateConnectionEvents)(THIS_
136 IN ULONG EventMask) PURE;
137
138 STDMETHOD_(NTSTATUS, ClientSetDeviceState)(THIS_
139 IN KSSTATE StateIn,
140 IN KSSTATE StateOut) PURE;
141 };
142
143 /*****************************************************************************
144 * IKsQueue
145 *****************************************************************************
146 */
147
148 #undef INTERFACE
149 #define INTERFACE IKsQueue
150
151 DECLARE_INTERFACE_(IKsQueue, IUnknown)
152 {
153 DEFINE_ABSTRACT_UNKNOWN()
154
155 };
156
157 /*****************************************************************************
158 * IKsFilterFactory
159 *****************************************************************************
160 */
161
162 #undef INTERFACE
163 #define INTERFACE IKsFilter
164
165 struct KSPROCESSPIPESECTION;
166
167
168 DECLARE_INTERFACE_(IKsFilter, IUnknown)
169 {
170 DEFINE_ABSTRACT_UNKNOWN()
171
172 STDMETHOD_(PKSFILTER, GetStruct)(THIS) PURE;
173
174 STDMETHOD_(BOOL, DoAllNecessaryPinsExist)(THIS) PURE;
175
176 STDMETHOD_(NTSTATUS, CreateNode)(THIS_
177 IN PIRP Irp,
178 IN IKsPin * Pin,
179 IN PLIST_ENTRY ListEntry) PURE;
180
181 STDMETHOD_(NTSTATUS, BindProcessPinsToPipeSection)(THIS_
182 IN struct KSPROCESSPIPESECTION *Section,
183 IN PVOID Create,
184 IN PKSPIN KsPin,
185 OUT IKsPin **Pin,
186 OUT PKSGATE *OutGate) PURE;
187
188 STDMETHOD_(NTSTATUS, UnbindProcessPinsFromPipeSection)(THIS_
189 IN struct KSPROCESSPIPESECTION *Section) PURE;
190
191 STDMETHOD_(NTSTATUS, AddProcessPin)(THIS_
192 IN PKSPROCESSPIN ProcessPin) PURE;
193
194 STDMETHOD_(NTSTATUS, RemoveProcessPin)(THIS_
195 IN PKSPROCESSPIN ProcessPin) PURE;
196
197 STDMETHOD_(BOOL, ReprepareProcessPipeSection)(THIS_
198 IN struct KSPROCESSPIPESECTION *PipeSection,
199 IN PULONG Data) PURE;
200
201 STDMETHOD_(VOID, DeliverResetState)(THIS_
202 IN struct KSPROCESSPIPESECTION *PipeSection,
203 IN KSRESET ResetState) PURE;
204
205 STDMETHOD_(BOOL, IsFrameHolding)(THIS);
206
207 STDMETHOD_(VOID, RegisterForCopyCallbacks)(THIS_
208 IKsQueue * Queue,
209 IN BOOL Enable) PURE;
210
211 STDMETHOD_(PKSPROCESSPIN_INDEXENTRY, GetProcessDispatch)(THIS);
212 };
213
214 /*****************************************************************************
215 * IKsFilterFactory
216 *****************************************************************************
217 */
218
219 #undef INTERFACE
220 #define INTERFACE IKsFilterFactory
221
222 DECLARE_INTERFACE_(IKsFilterFactory, IUnknown)
223 {
224 DEFINE_ABSTRACT_UNKNOWN()
225
226 STDMETHOD_(KSFILTERFACTORY*, GetStruct)(THIS) PURE;
227
228 STDMETHOD_(NTSTATUS, SetDeviceClassesState)(THIS_
229 IN BOOLEAN Enable)PURE;
230
231 STDMETHOD_(NTSTATUS, Initialize)(THIS_
232 IN PDEVICE_OBJECT DeviceObject,
233 IN const KSFILTER_DESCRIPTOR *Descriptor,
234 IN PWSTR RefString OPTIONAL,
235 IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL,
236 IN ULONG CreateItemFlags,
237 IN PFNKSFILTERFACTORYPOWER SleepCallback OPTIONAL,
238 IN PFNKSFILTERFACTORYPOWER WakeCallback OPTIONAL,
239 OUT PKSFILTERFACTORY *FilterFactory OPTIONAL)PURE;
240 };
241
242
243 /*****************************************************************************
244 * IKsPowerNotify
245 *****************************************************************************
246 */
247
248 #undef INTERFACE
249 #define INTERFACE IKsPowerNotify
250
251 DECLARE_INTERFACE_(IKsPowerNotify, IUnknown)
252 {
253 DEFINE_ABSTRACT_UNKNOWN()
254
255 STDMETHOD_(VOID,Sleep)(THIS_
256 IN DEVICE_POWER_STATE State) PURE;
257
258 STDMETHOD_(VOID,Wake)(THIS) PURE;
259 };
260
261
262 /*****************************************************************************
263 * IKsDevice
264 *****************************************************************************
265 */
266
267 #undef INTERFACE
268 #define INTERFACE IKsDevice
269
270 struct KSPOWER_ENTRY;
271
272 DECLARE_INTERFACE_(IKsDevice, IUnknown)
273 {
274 DEFINE_ABSTRACT_UNKNOWN()
275
276 STDMETHOD_(KSDEVICE*,GetStruct)(THIS) PURE;
277
278 STDMETHOD_(NTSTATUS, InitializeObjectBag)(THIS_
279 IN PKSIOBJECT_BAG Bag,
280 IN PRKMUTEX Mutex) PURE;
281
282 STDMETHOD_(NTSTATUS,AcquireDevice)(THIS) PURE;
283 STDMETHOD_(NTSTATUS,ReleaseDevice)(THIS) PURE;
284
285 STDMETHOD_(NTSTATUS, GetAdapterObject)(THIS_
286 IN PADAPTER_OBJECT Object,
287 IN PULONG Unknown1,
288 IN PULONG Unknown2) PURE;
289
290 STDMETHOD_(NTSTATUS, AddPowerEntry)(THIS_
291 IN struct KSPOWER_ENTRY * Entry,
292 IN IKsPowerNotify* Notify)PURE;
293
294 STDMETHOD_(NTSTATUS, RemovePowerEntry)(THIS_
295 IN struct KSPOWER_ENTRY * Entry)PURE;
296
297 STDMETHOD_(NTSTATUS, PinStateChange)(THIS_
298 IN KSPIN Pin,
299 IN PIRP Irp,
300 IN KSSTATE OldState,
301 IN KSSTATE NewState)PURE;
302
303 STDMETHOD_(NTSTATUS, ArbitrateAdapterChannel)(THIS_
304 IN ULONG ControlCode,
305 IN IO_ALLOCATION_ACTION Action,
306 IN PVOID Context)PURE;
307
308 STDMETHOD_(NTSTATUS, CheckIoCapability)(THIS_
309 IN ULONG Unknown)PURE;
310 };
311
312 #endif