6 #if !defined(DEFINE_ABSTRACT_UNKNOWN)
8 #define DEFINE_ABSTRACT_UNKNOWN() \
9 STDMETHOD_(NTSTATUS, QueryInterface)(THIS_ \
11 PVOID* Interface)PURE; \
12 STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
13 STDMETHOD_(ULONG,Release)(THIS) PURE;
19 LIST_ENTRY ObjectList
;
22 }KSIOBJECT_BAG
, *PKSIOBJECT_BAG
;
25 /*****************************************************************************
27 *****************************************************************************
31 #define INTERFACE IKsAllocator
33 DECLARE_INTERFACE_(IKsAllocator
, IUnknown
)
35 DEFINE_ABSTRACT_UNKNOWN()
37 STDMETHOD_(NTSTATUS
, DispatchDeviceIoControl
)(THIS_
38 IN PDEVICE_OBJECT DeviceObject
,
41 STDMETHOD_(NTSTATUS
, Close
)(THIS
) PURE
;
43 STDMETHOD_(NTSTATUS
, AllocateFrame
)(THIS_
44 IN PVOID
* OutFrame
) PURE
;
46 STDMETHOD_(VOID
, FreeFrame
)(THIS_
47 IN PVOID OutFrame
) PURE
;
51 /*****************************************************************************
53 *****************************************************************************
57 #define INTERFACE IKsClock
59 DECLARE_INTERFACE_(IKsClock
, IUnknown
)
61 DEFINE_ABSTRACT_UNKNOWN()
64 /*****************************************************************************
66 *****************************************************************************
70 #define INTERFACE IKsTransport
72 DECLARE_INTERFACE_(IKsTransport
, IUnknown
)
74 DEFINE_ABSTRACT_UNKNOWN()
78 /*****************************************************************************
80 *****************************************************************************
84 #define INTERFACE IKsPin
86 struct KSPTRANSPORTCONFIG
;
88 DECLARE_INTERFACE_(IKsPin
, IUnknown
)
90 DEFINE_ABSTRACT_UNKNOWN()
92 STDMETHOD_(NTSTATUS
, TransferKsIrp
)(THIS_
94 IN IKsTransport
**OutTransport
) PURE
;
96 STDMETHOD_(VOID
, DiscardKsIrp
)(THIS_
98 IN IKsTransport
* *OutTransport
) PURE
;
100 STDMETHOD_(NTSTATUS
, Connect
)(THIS_
101 IN IKsTransport
* TransportIn
,
102 OUT IKsTransport
** OutTransportIn
,
103 OUT IKsTransport
* *OutTransportOut
,
104 IN KSPIN_DATAFLOW DataFlow
) PURE
;
106 STDMETHOD_(NTSTATUS
, SetDeviceState
)(THIS_
109 IN IKsTransport
* *OutTransport
) PURE
;
111 STDMETHOD_(VOID
, SetResetState
)(THIS_
112 IN KSRESET ResetState
,
113 OUT IKsTransport
* * OutTransportOut
) PURE
;
115 STDMETHOD_(NTSTATUS
, GetTransportConfig
)(THIS_
116 IN
struct KSPTRANSPORTCONFIG
* TransportConfig
,
117 OUT IKsTransport
** OutTransportIn
,
118 OUT IKsTransport
** OutTransportOut
) PURE
;
120 STDMETHOD_(NTSTATUS
, SetTransportConfig
)(THIS_
121 IN
struct KSPTRANSPORTCONFIG
const * TransportConfig
,
122 OUT IKsTransport
** OutTransportIn
,
123 OUT IKsTransport
** OutTransportOut
) PURE
;
125 STDMETHOD_(NTSTATUS
, ResetTransportConfig
)(THIS_
126 OUT IKsTransport
** OutTransportIn
,
127 OUT IKsTransport
** OutTransportOut
) PURE
;
129 STDMETHOD_(PKSPIN
, GetStruct
)(THIS
) PURE
;
130 STDMETHOD_(PKSPROCESSPIN
, GetProcessPin
)(THIS
) PURE
;
131 STDMETHOD_(NTSTATUS
, AttemptBypass
)(THIS
) PURE
;
132 STDMETHOD_(NTSTATUS
, AttemptUnbypass
)(THIS
) PURE
;
134 STDMETHOD_(VOID
, GenerateConnectionEvents
)(THIS_
135 IN ULONG EventMask
) PURE
;
137 STDMETHOD_(NTSTATUS
, ClientSetDeviceState
)(THIS_
139 IN KSSTATE StateOut
) PURE
;
142 /*****************************************************************************
144 *****************************************************************************
148 #define INTERFACE IKsQueue
150 DECLARE_INTERFACE_(IKsQueue
, IUnknown
)
152 DEFINE_ABSTRACT_UNKNOWN()
156 /*****************************************************************************
158 *****************************************************************************
162 #define INTERFACE IKsFilter
164 struct KSPROCESSPIPESECTION
;
167 DECLARE_INTERFACE_(IKsFilter
, IUnknown
)
169 DEFINE_ABSTRACT_UNKNOWN()
171 STDMETHOD_(PKSFILTER
, GetStruct
)(THIS
) PURE
;
173 STDMETHOD_(BOOL
, DoAllNecessaryPinsExist
)(THIS
) PURE
;
175 STDMETHOD_(NTSTATUS
, CreateNode
)(THIS_
178 IN PLIST_ENTRY ListEntry
) PURE
;
180 STDMETHOD_(NTSTATUS
, BindProcessPinsToPipeSection
)(THIS_
181 IN
struct KSPROCESSPIPESECTION
*Section
,
185 OUT PKSGATE
*OutGate
) PURE
;
187 STDMETHOD_(NTSTATUS
, UnbindProcessPinsFromPipeSection
)(THIS_
188 IN
struct KSPROCESSPIPESECTION
*Section
) PURE
;
190 STDMETHOD_(NTSTATUS
, AddProcessPin
)(THIS_
191 IN PKSPROCESSPIN ProcessPin
) PURE
;
193 STDMETHOD_(NTSTATUS
, RemoveProcessPin
)(THIS_
194 IN PKSPROCESSPIN ProcessPin
) PURE
;
196 STDMETHOD_(BOOL
, ReprepareProcessPipeSection
)(THIS_
197 IN
struct KSPROCESSPIPESECTION
*PipeSection
,
198 IN PULONG Data
) PURE
;
200 STDMETHOD_(VOID
, DeliverResetState
)(THIS_
201 IN
struct KSPROCESSPIPESECTION
*PipeSection
,
202 IN KSRESET ResetState
) PURE
;
204 STDMETHOD_(BOOL
, IsFrameHolding
)(THIS
);
206 STDMETHOD_(VOID
, RegisterForCopyCallbacks
)(THIS_
208 IN BOOL Enable
) PURE
;
210 STDMETHOD_(PKSPROCESSPIN_INDEXENTRY
, GetProcessDispatch
)(THIS
);
213 /*****************************************************************************
215 *****************************************************************************
219 #define INTERFACE IKsFilterFactory
221 DECLARE_INTERFACE_(IKsFilterFactory
, IUnknown
)
223 DEFINE_ABSTRACT_UNKNOWN()
225 STDMETHOD_(KSFILTERFACTORY
*, GetStruct
)(THIS
) PURE
;
227 STDMETHOD_(NTSTATUS
, SetDeviceClassesState
)(THIS_
228 IN BOOLEAN Enable
)PURE
;
230 STDMETHOD_(NTSTATUS
, Initialize
)(THIS_
231 IN PDEVICE_OBJECT DeviceObject
,
232 IN
const KSFILTER_DESCRIPTOR
*Descriptor
,
233 IN PWSTR RefString OPTIONAL
,
234 IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL
,
235 IN ULONG CreateItemFlags
,
236 IN PFNKSFILTERFACTORYPOWER SleepCallback OPTIONAL
,
237 IN PFNKSFILTERFACTORYPOWER WakeCallback OPTIONAL
,
238 OUT PKSFILTERFACTORY
*FilterFactory OPTIONAL
)PURE
;
242 /*****************************************************************************
244 *****************************************************************************
248 #define INTERFACE IKsPowerNotify
250 DECLARE_INTERFACE_(IKsPowerNotify
, IUnknown
)
252 DEFINE_ABSTRACT_UNKNOWN()
254 STDMETHOD_(VOID
,Sleep
)(THIS_
255 IN DEVICE_POWER_STATE State
) PURE
;
257 STDMETHOD_(VOID
,Wake
)(THIS
) PURE
;
261 /*****************************************************************************
263 *****************************************************************************
267 #define INTERFACE IKsDevice
269 struct KSPOWER_ENTRY
;
271 DECLARE_INTERFACE_(IKsDevice
, IUnknown
)
273 DEFINE_ABSTRACT_UNKNOWN()
275 STDMETHOD_(KSDEVICE
*,GetStruct
)(THIS
) PURE
;
277 STDMETHOD_(NTSTATUS
, InitializeObjectBag
)(THIS_
278 IN PKSIOBJECT_BAG Bag
,
279 IN PRKMUTEX Mutex
) PURE
;
281 STDMETHOD_(NTSTATUS
,AcquireDevice
)(THIS
) PURE
;
282 STDMETHOD_(NTSTATUS
,ReleaseDevice
)(THIS
) PURE
;
284 STDMETHOD_(NTSTATUS
, GetAdapterObject
)(THIS_
285 IN PADAPTER_OBJECT
* Object
,
286 IN PULONG MaxMappingsByteCount
,
287 IN PULONG MappingTableStride
) PURE
;
289 STDMETHOD_(NTSTATUS
, AddPowerEntry
)(THIS_
290 IN
struct KSPOWER_ENTRY
* Entry
,
291 IN IKsPowerNotify
* Notify
)PURE
;
293 STDMETHOD_(NTSTATUS
, RemovePowerEntry
)(THIS_
294 IN
struct KSPOWER_ENTRY
* Entry
)PURE
;
296 STDMETHOD_(NTSTATUS
, PinStateChange
)(THIS_
300 IN KSSTATE NewState
)PURE
;
302 STDMETHOD_(NTSTATUS
, ArbitrateAdapterChannel
)(THIS_
303 IN ULONG NumberOfMapRegisters
,
304 IN PDRIVER_CONTROL ExecutionRoutine
,
305 IN PVOID Context
)PURE
;
307 STDMETHOD_(NTSTATUS
, CheckIoCapability
)(THIS_
308 IN ULONG Unknown
)PURE
;
314 /*****************************************************************************
315 * IKsProcessingObject
316 *****************************************************************************
320 #define INTERFACE IKsProcessingObject
322 DECLARE_INTERFACE_(IKsProcessingObject
, IUnknown
)
324 DEFINE_ABSTRACT_UNKNOWN()
326 STDMETHOD_(VOID
, ProcessingObjectWork
)(THIS
) PURE
;
328 STDMETHOD_(PKSGATE
, GetAndGate
)(THIS
) PURE
;
330 STDMETHOD_(VOID
, Process
)(THIS_
331 IN BOOLEAN Asynchronous
)PURE
;
333 STDMETHOD_(VOID
, Reset
)(THIS
) PURE
;
335 STDMETHOD_(VOID
, TriggerNotification
)(THIS
) PURE
;