3 #if !defined(DEFINE_ABSTRACT_UNKNOWN)
5 #define DEFINE_ABSTRACT_UNKNOWN() \
6 STDMETHOD_(NTSTATUS, QueryInterface)(THIS_ \
8 PVOID* Interface)PURE; \
9 STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
10 STDMETHOD_(ULONG,Release)(THIS) PURE;
16 LIST_ENTRY ObjectList
;
19 }KSIOBJECT_BAG
, *PKSIOBJECT_BAG
;
22 /*****************************************************************************
24 *****************************************************************************
28 #define INTERFACE IKsAllocator
30 DECLARE_INTERFACE_(IKsAllocator
, IUnknown
)
32 DEFINE_ABSTRACT_UNKNOWN()
34 STDMETHOD_(NTSTATUS
, DispatchDeviceIoControl
)(THIS_
35 IN PDEVICE_OBJECT DeviceObject
,
38 STDMETHOD_(NTSTATUS
, Close
)(THIS
) PURE
;
40 STDMETHOD_(NTSTATUS
, AllocateFrame
)(THIS_
41 IN PVOID
* OutFrame
) PURE
;
43 STDMETHOD_(VOID
, FreeFrame
)(THIS_
44 IN PVOID OutFrame
) PURE
;
48 /*****************************************************************************
50 *****************************************************************************
54 #define INTERFACE IKsClock
56 DECLARE_INTERFACE_(IKsClock
, IUnknown
)
58 DEFINE_ABSTRACT_UNKNOWN()
61 /*****************************************************************************
63 *****************************************************************************
67 #define INTERFACE IKsTransport
69 DECLARE_INTERFACE_(IKsTransport
, IUnknown
)
71 DEFINE_ABSTRACT_UNKNOWN()
75 /*****************************************************************************
77 *****************************************************************************
81 #define INTERFACE IKsPin
83 struct KSPTRANSPORTCONFIG
;
85 DECLARE_INTERFACE_(IKsPin
, IUnknown
)
87 DEFINE_ABSTRACT_UNKNOWN()
89 STDMETHOD_(NTSTATUS
, TransferKsIrp
)(THIS_
91 IN IKsTransport
**OutTransport
) PURE
;
93 STDMETHOD_(VOID
, DiscardKsIrp
)(THIS_
95 IN IKsTransport
* *OutTransport
) PURE
;
97 STDMETHOD_(NTSTATUS
, Connect
)(THIS_
98 IN IKsTransport
* TransportIn
,
99 OUT IKsTransport
** OutTransportIn
,
100 OUT IKsTransport
* *OutTransportOut
,
101 IN KSPIN_DATAFLOW DataFlow
) PURE
;
103 STDMETHOD_(NTSTATUS
, SetDeviceState
)(THIS_
106 IN IKsTransport
* *OutTransport
) PURE
;
108 STDMETHOD_(VOID
, SetResetState
)(THIS_
109 IN KSRESET ResetState
,
110 OUT IKsTransport
* * OutTransportOut
) PURE
;
112 STDMETHOD_(NTSTATUS
, GetTransportConfig
)(THIS_
113 IN
struct KSPTRANSPORTCONFIG
* TransportConfig
,
114 OUT IKsTransport
** OutTransportIn
,
115 OUT IKsTransport
** OutTransportOut
) PURE
;
117 STDMETHOD_(NTSTATUS
, SetTransportConfig
)(THIS_
118 IN
struct KSPTRANSPORTCONFIG
const * TransportConfig
,
119 OUT IKsTransport
** OutTransportIn
,
120 OUT IKsTransport
** OutTransportOut
) PURE
;
122 STDMETHOD_(NTSTATUS
, ResetTransportConfig
)(THIS_
123 OUT IKsTransport
** OutTransportIn
,
124 OUT IKsTransport
** OutTransportOut
) PURE
;
126 STDMETHOD_(PKSPIN
, GetStruct
)(THIS
) PURE
;
127 STDMETHOD_(PKSPROCESSPIN
, GetProcessPin
)(THIS
) PURE
;
128 STDMETHOD_(NTSTATUS
, AttemptBypass
)(THIS
) PURE
;
129 STDMETHOD_(NTSTATUS
, AttemptUnbypass
)(THIS
) PURE
;
131 STDMETHOD_(VOID
, GenerateConnectionEvents
)(THIS_
132 IN ULONG EventMask
) PURE
;
134 STDMETHOD_(NTSTATUS
, ClientSetDeviceState
)(THIS_
136 IN KSSTATE StateOut
) PURE
;
139 /*****************************************************************************
141 *****************************************************************************
145 #define INTERFACE IKsQueue
147 DECLARE_INTERFACE_(IKsQueue
, IUnknown
)
149 DEFINE_ABSTRACT_UNKNOWN()
153 /*****************************************************************************
155 *****************************************************************************
159 #define INTERFACE IKsFilter
161 struct KSPROCESSPIPESECTION
;
164 DECLARE_INTERFACE_(IKsFilter
, IUnknown
)
166 DEFINE_ABSTRACT_UNKNOWN()
168 STDMETHOD_(PKSFILTER
, GetStruct
)(THIS
) PURE
;
170 STDMETHOD_(BOOL
, DoAllNecessaryPinsExist
)(THIS
) PURE
;
172 STDMETHOD_(NTSTATUS
, CreateNode
)(THIS_
175 IN PLIST_ENTRY ListEntry
) PURE
;
177 STDMETHOD_(NTSTATUS
, BindProcessPinsToPipeSection
)(THIS_
178 IN
struct KSPROCESSPIPESECTION
*Section
,
182 OUT PKSGATE
*OutGate
) PURE
;
184 STDMETHOD_(NTSTATUS
, UnbindProcessPinsFromPipeSection
)(THIS_
185 IN
struct KSPROCESSPIPESECTION
*Section
) PURE
;
187 STDMETHOD_(NTSTATUS
, AddProcessPin
)(THIS_
188 IN PKSPROCESSPIN ProcessPin
) PURE
;
190 STDMETHOD_(NTSTATUS
, RemoveProcessPin
)(THIS_
191 IN PKSPROCESSPIN ProcessPin
) PURE
;
193 STDMETHOD_(BOOL
, ReprepareProcessPipeSection
)(THIS_
194 IN
struct KSPROCESSPIPESECTION
*PipeSection
,
195 IN PULONG Data
) PURE
;
197 STDMETHOD_(VOID
, DeliverResetState
)(THIS_
198 IN
struct KSPROCESSPIPESECTION
*PipeSection
,
199 IN KSRESET ResetState
) PURE
;
201 STDMETHOD_(BOOL
, IsFrameHolding
)(THIS
);
203 STDMETHOD_(VOID
, RegisterForCopyCallbacks
)(THIS_
205 IN BOOL Enable
) PURE
;
207 STDMETHOD_(PKSPROCESSPIN_INDEXENTRY
, GetProcessDispatch
)(THIS
);
210 /*****************************************************************************
212 *****************************************************************************
216 #define INTERFACE IKsFilterFactory
218 DECLARE_INTERFACE_(IKsFilterFactory
, IUnknown
)
220 DEFINE_ABSTRACT_UNKNOWN()
222 STDMETHOD_(KSFILTERFACTORY
*, GetStruct
)(THIS
) PURE
;
224 STDMETHOD_(NTSTATUS
, SetDeviceClassesState
)(THIS_
225 IN BOOLEAN Enable
)PURE
;
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
;
239 /*****************************************************************************
241 *****************************************************************************
245 #define INTERFACE IKsPowerNotify
247 DECLARE_INTERFACE_(IKsPowerNotify
, IUnknown
)
249 DEFINE_ABSTRACT_UNKNOWN()
251 STDMETHOD_(VOID
,Sleep
)(THIS_
252 IN DEVICE_POWER_STATE State
) PURE
;
254 STDMETHOD_(VOID
,Wake
)(THIS
) PURE
;
258 /*****************************************************************************
260 *****************************************************************************
264 #define INTERFACE IKsDevice
266 struct KSPOWER_ENTRY
;
268 DECLARE_INTERFACE_(IKsDevice
, IUnknown
)
270 DEFINE_ABSTRACT_UNKNOWN()
272 STDMETHOD_(KSDEVICE
*,GetStruct
)(THIS
) PURE
;
274 STDMETHOD_(NTSTATUS
, InitializeObjectBag
)(THIS_
275 IN PKSIOBJECT_BAG Bag
,
276 IN PRKMUTEX Mutex
) PURE
;
278 STDMETHOD_(NTSTATUS
,AcquireDevice
)(THIS
) PURE
;
279 STDMETHOD_(NTSTATUS
,ReleaseDevice
)(THIS
) PURE
;
281 STDMETHOD_(NTSTATUS
, GetAdapterObject
)(THIS_
282 IN PADAPTER_OBJECT
* Object
,
283 IN PULONG MaxMappingsByteCount
,
284 IN PULONG MappingTableStride
) PURE
;
286 STDMETHOD_(NTSTATUS
, AddPowerEntry
)(THIS_
287 IN
struct KSPOWER_ENTRY
* Entry
,
288 IN IKsPowerNotify
* Notify
)PURE
;
290 STDMETHOD_(NTSTATUS
, RemovePowerEntry
)(THIS_
291 IN
struct KSPOWER_ENTRY
* Entry
)PURE
;
293 STDMETHOD_(NTSTATUS
, PinStateChange
)(THIS_
297 IN KSSTATE NewState
)PURE
;
299 STDMETHOD_(NTSTATUS
, ArbitrateAdapterChannel
)(THIS_
300 IN ULONG NumberOfMapRegisters
,
301 IN PDRIVER_CONTROL ExecutionRoutine
,
302 IN PVOID Context
)PURE
;
304 STDMETHOD_(NTSTATUS
, CheckIoCapability
)(THIS_
305 IN ULONG Unknown
)PURE
;
311 /*****************************************************************************
312 * IKsProcessingObject
313 *****************************************************************************
317 #define INTERFACE IKsProcessingObject
319 DECLARE_INTERFACE_(IKsProcessingObject
, IUnknown
)
321 DEFINE_ABSTRACT_UNKNOWN()
323 STDMETHOD_(VOID
, ProcessingObjectWork
)(THIS
) PURE
;
325 STDMETHOD_(PKSGATE
, GetAndGate
)(THIS
) PURE
;
327 STDMETHOD_(VOID
, Process
)(THIS_
328 IN BOOLEAN Asynchronous
)PURE
;
330 STDMETHOD_(VOID
, Reset
)(THIS
) PURE
;
332 STDMETHOD_(VOID
, TriggerNotification
)(THIS
) PURE
;