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