7 #if !defined(DEFINE_ABSTRACT_UNKNOWN)
9 #define DEFINE_ABSTRACT_UNKNOWN() \
10 STDMETHOD_(NTSTATUS, QueryInterface)(THIS_ \
12 PVOID* Interface)PURE; \
13 STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
14 STDMETHOD_(ULONG,Release)(THIS) PURE;
20 LIST_ENTRY ObjectList
;
23 }KSIOBJECT_BAG
, *PKSIOBJECT_BAG
;
26 /*****************************************************************************
28 *****************************************************************************
32 #define INTERFACE IKsAllocator
34 DECLARE_INTERFACE_(IKsAllocator
, IUnknown
)
36 DEFINE_ABSTRACT_UNKNOWN()
38 STDMETHOD_(NTSTATUS
, DispatchDeviceIoControl
)(THIS_
39 IN PDEVICE_OBJECT DeviceObject
,
42 STDMETHOD_(NTSTATUS
, Close
)(THIS
) PURE
;
44 STDMETHOD_(NTSTATUS
, AllocateFrame
)(THIS_
45 IN PVOID
* OutFrame
) PURE
;
47 STDMETHOD_(VOID
, FreeFrame
)(THIS_
48 IN PVOID OutFrame
) PURE
;
52 /*****************************************************************************
54 *****************************************************************************
58 #define INTERFACE IKsClock
60 DECLARE_INTERFACE_(IKsClock
, IUnknown
)
62 DEFINE_ABSTRACT_UNKNOWN()
65 /*****************************************************************************
67 *****************************************************************************
71 #define INTERFACE IKsTransport
73 DECLARE_INTERFACE_(IKsTransport
, IUnknown
)
75 DEFINE_ABSTRACT_UNKNOWN()
79 /*****************************************************************************
81 *****************************************************************************
85 #define INTERFACE IKsPin
87 struct KSPTRANSPORTCONFIG
;
89 DECLARE_INTERFACE_(IKsPin
, IUnknown
)
91 DEFINE_ABSTRACT_UNKNOWN()
93 STDMETHOD_(NTSTATUS
, TransferKsIrp
)(THIS_
95 IN IKsTransport
**OutTransport
) PURE
;
97 STDMETHOD_(VOID
, DiscardKsIrp
)(THIS_
99 IN IKsTransport
* *OutTransport
) PURE
;
101 STDMETHOD_(NTSTATUS
, Connect
)(THIS_
102 IN IKsTransport
* TransportIn
,
103 OUT IKsTransport
** OutTransportIn
,
104 OUT IKsTransport
* *OutTransportOut
,
105 IN KSPIN_DATAFLOW DataFlow
) PURE
;
107 STDMETHOD_(NTSTATUS
, SetDeviceState
)(THIS_
110 IN IKsTransport
* *OutTransport
) PURE
;
112 STDMETHOD_(VOID
, SetResetState
)(THIS_
113 IN KSRESET ResetState
,
114 OUT IKsTransport
* * OutTransportOut
) PURE
;
116 STDMETHOD_(NTSTATUS
, GetTransportConfig
)(THIS_
117 IN
struct KSPTRANSPORTCONFIG
* TransportConfig
,
118 OUT IKsTransport
** OutTransportIn
,
119 OUT IKsTransport
** OutTransportOut
) PURE
;
121 STDMETHOD_(NTSTATUS
, SetTransportConfig
)(THIS_
122 IN
struct KSPTRANSPORTCONFIG
const * TransportConfig
,
123 OUT IKsTransport
** OutTransportIn
,
124 OUT IKsTransport
** OutTransportOut
) PURE
;
126 STDMETHOD_(NTSTATUS
, ResetTransportConfig
)(THIS_
127 OUT IKsTransport
** OutTransportIn
,
128 OUT IKsTransport
** OutTransportOut
) PURE
;
130 STDMETHOD_(PKSPIN
, GetStruct
)(THIS
) PURE
;
131 STDMETHOD_(PKSPROCESSPIN
, GetProcessPin
)(THIS
) PURE
;
132 STDMETHOD_(NTSTATUS
, AttemptBypass
)(THIS
) PURE
;
133 STDMETHOD_(NTSTATUS
, AttemptUnbypass
)(THIS
) PURE
;
135 STDMETHOD_(VOID
, GenerateConnectionEvents
)(THIS_
136 IN ULONG EventMask
) PURE
;
138 STDMETHOD_(NTSTATUS
, ClientSetDeviceState
)(THIS_
140 IN KSSTATE StateOut
) PURE
;
143 /*****************************************************************************
145 *****************************************************************************
149 #define INTERFACE IKsQueue
151 DECLARE_INTERFACE_(IKsQueue
, IUnknown
)
153 DEFINE_ABSTRACT_UNKNOWN()
157 /*****************************************************************************
159 *****************************************************************************
163 #define INTERFACE IKsFilter
165 struct KSPROCESSPIPESECTION
;
168 DECLARE_INTERFACE_(IKsFilter
, IUnknown
)
170 DEFINE_ABSTRACT_UNKNOWN()
172 STDMETHOD_(PKSFILTER
, GetStruct
)(THIS
) PURE
;
174 STDMETHOD_(BOOL
, DoAllNecessaryPinsExist
)(THIS
) PURE
;
176 STDMETHOD_(NTSTATUS
, CreateNode
)(THIS_
179 IN PLIST_ENTRY ListEntry
) PURE
;
181 STDMETHOD_(NTSTATUS
, BindProcessPinsToPipeSection
)(THIS_
182 IN
struct KSPROCESSPIPESECTION
*Section
,
186 OUT PKSGATE
*OutGate
) PURE
;
188 STDMETHOD_(NTSTATUS
, UnbindProcessPinsFromPipeSection
)(THIS_
189 IN
struct KSPROCESSPIPESECTION
*Section
) PURE
;
191 STDMETHOD_(NTSTATUS
, AddProcessPin
)(THIS_
192 IN PKSPROCESSPIN ProcessPin
) PURE
;
194 STDMETHOD_(NTSTATUS
, RemoveProcessPin
)(THIS_
195 IN PKSPROCESSPIN ProcessPin
) PURE
;
197 STDMETHOD_(BOOL
, ReprepareProcessPipeSection
)(THIS_
198 IN
struct KSPROCESSPIPESECTION
*PipeSection
,
199 IN PULONG Data
) PURE
;
201 STDMETHOD_(VOID
, DeliverResetState
)(THIS_
202 IN
struct KSPROCESSPIPESECTION
*PipeSection
,
203 IN KSRESET ResetState
) PURE
;
205 STDMETHOD_(BOOL
, IsFrameHolding
)(THIS
);
207 STDMETHOD_(VOID
, RegisterForCopyCallbacks
)(THIS_
209 IN BOOL Enable
) PURE
;
211 STDMETHOD_(PKSPROCESSPIN_INDEXENTRY
, GetProcessDispatch
)(THIS
);
214 /*****************************************************************************
216 *****************************************************************************
220 #define INTERFACE IKsFilterFactory
222 DECLARE_INTERFACE_(IKsFilterFactory
, IUnknown
)
224 DEFINE_ABSTRACT_UNKNOWN()
226 STDMETHOD_(KSFILTERFACTORY
*, GetStruct
)(THIS
) PURE
;
228 STDMETHOD_(NTSTATUS
, SetDeviceClassesState
)(THIS_
229 IN BOOLEAN Enable
)PURE
;
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
;
243 /*****************************************************************************
245 *****************************************************************************
249 #define INTERFACE IKsPowerNotify
251 DECLARE_INTERFACE_(IKsPowerNotify
, IUnknown
)
253 DEFINE_ABSTRACT_UNKNOWN()
255 STDMETHOD_(VOID
,Sleep
)(THIS_
256 IN DEVICE_POWER_STATE State
) PURE
;
258 STDMETHOD_(VOID
,Wake
)(THIS
) PURE
;
262 /*****************************************************************************
264 *****************************************************************************
268 #define INTERFACE IKsDevice
270 struct KSPOWER_ENTRY
;
272 DECLARE_INTERFACE_(IKsDevice
, IUnknown
)
274 DEFINE_ABSTRACT_UNKNOWN()
276 STDMETHOD_(KSDEVICE
*,GetStruct
)(THIS
) PURE
;
278 STDMETHOD_(NTSTATUS
, InitializeObjectBag
)(THIS_
279 IN PKSIOBJECT_BAG Bag
,
280 IN PRKMUTEX Mutex
) PURE
;
282 STDMETHOD_(NTSTATUS
,AcquireDevice
)(THIS
) PURE
;
283 STDMETHOD_(NTSTATUS
,ReleaseDevice
)(THIS
) PURE
;
285 STDMETHOD_(NTSTATUS
, GetAdapterObject
)(THIS_
286 IN PADAPTER_OBJECT Object
,
288 IN PULONG Unknown2
) PURE
;
290 STDMETHOD_(NTSTATUS
, AddPowerEntry
)(THIS_
291 IN
struct KSPOWER_ENTRY
* Entry
,
292 IN IKsPowerNotify
* Notify
)PURE
;
294 STDMETHOD_(NTSTATUS
, RemovePowerEntry
)(THIS_
295 IN
struct KSPOWER_ENTRY
* Entry
)PURE
;
297 STDMETHOD_(NTSTATUS
, PinStateChange
)(THIS_
301 IN KSSTATE NewState
)PURE
;
303 STDMETHOD_(NTSTATUS
, ArbitrateAdapterChannel
)(THIS_
304 IN ULONG ControlCode
,
305 IN IO_ALLOCATION_ACTION Action
,
306 IN PVOID Context
)PURE
;
308 STDMETHOD_(NTSTATUS
, CheckIoCapability
)(THIS_
309 IN ULONG Unknown
)PURE
;