master
  1/**
  2 * This file has no copyright assigned and is placed in the Public Domain.
  3 * This file is part of the mingw-w64 runtime package.
  4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  5 */
  6#ifndef __KSPROXY__
  7#define __KSPROXY__
  8
  9#ifdef __cplusplus
 10extern "C" {
 11#endif
 12
 13#undef KSDDKAPI
 14#ifdef _KSDDK_
 15#define KSDDKAPI
 16#else
 17#define KSDDKAPI DECLSPEC_IMPORT
 18#endif
 19
 20#define STATIC_IID_IKsObject						\
 21	0x423c13a2,0x2070,0x11d0,0x9e,0xf7,0x00,0xaa,0x00,0xa2,0x16,0xa1
 22
 23#define STATIC_IID_IKsPinEx						\
 24	0x7bb38260,0xd19c,0x11d2,0xb3,0x8a,0x00,0xa0,0xc9,0x5e,0xc2,0x2e
 25
 26#define STATIC_IID_IKsPin						\
 27	0xb61178d1,0xa2d9,0x11cf,0x9e,0x53,0x00,0xaa,0x00,0xa2,0x16,0xa1
 28
 29#define STATIC_IID_IKsPinPipe						\
 30	0xe539cd90,0xa8b4,0x11d1,0x81,0x89,0x00,0xa0,0xc9,0x06,0x28,0x02
 31
 32#define STATIC_IID_IKsDataTypeHandler					\
 33	0x5ffbaa02,0x49a3,0x11d0,0x9f,0x36,0x00,0xaa,0x00,0xa2,0x16,0xa1
 34
 35#define STATIC_IID_IKsDataTypeCompletion				\
 36	0x827D1A0E,0x0F73,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96
 37
 38#define STATIC_IID_IKsInterfaceHandler					\
 39	0xD3ABC7E0,0x9A61,0x11D0,0xA4,0x0D,0x00,0xA0,0xC9,0x22,0x31,0x96
 40
 41#define STATIC_IID_IKsClockPropertySet					\
 42	0x5C5CBD84,0xE755,0x11D0,0xAC,0x18,0x00,0xA0,0xC9,0x22,0x31,0x96
 43
 44#define STATIC_IID_IKsAllocator						\
 45	0x8da64899,0xc0d9,0x11d0,0x84,0x13,0x00,0x00,0xf8,0x22,0xfe,0x8a
 46
 47#define STATIC_IID_IKsAllocatorEx					\
 48	0x091bb63a,0x603f,0x11d1,0xb0,0x67,0x00,0xa0,0xc9,0x06,0x28,0x02
 49
 50#ifndef STATIC_IID_IKsPropertySet
 51#define STATIC_IID_IKsPropertySet					\
 52	0x31EFAC30,0x515C,0x11d0,0xA9,0xAA,0x00,0xAA,0x00,0x61,0xBE,0x93
 53#endif
 54
 55#define STATIC_IID_IKsTopology						\
 56	0x28F54683,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96
 57
 58#ifndef STATIC_IID_IKsControl
 59#define STATIC_IID_IKsControl						\
 60	0x28F54685,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96
 61#endif
 62
 63#define STATIC_IID_IKsAggregateControl					\
 64	0x7F40EAC0,0x3947,0x11D2,0x87,0x4E,0x00,0xA0,0xC9,0x22,0x31,0x96
 65
 66#define STATIC_CLSID_Proxy						\
 67	0x17CCA71B,0xECD7,0x11D0,0xB9,0x08,0x00,0xA0,0xC9,0x22,0x31,0x96
 68
 69#ifdef _KS_
 70
 71DEFINE_GUIDEX(IID_IKsObject);
 72
 73DEFINE_GUIDEX(IID_IKsPin);
 74
 75DEFINE_GUIDEX(IID_IKsPinEx);
 76
 77DEFINE_GUIDEX(IID_IKsPinPipe);
 78
 79DEFINE_GUIDEX(IID_IKsDataTypeHandler);
 80
 81DEFINE_GUIDEX(IID_IKsDataTypeCompletion);
 82
 83DEFINE_GUIDEX(IID_IKsInterfaceHandler);
 84
 85DEFINE_GUIDEX(IID_IKsClockPropertySet);
 86
 87DEFINE_GUIDEX(IID_IKsAllocator);
 88
 89DEFINE_GUIDEX(IID_IKsAllocatorEx);
 90
 91#define IID_IKsQualityForwarder KSCATEGORY_QUALITY
 92#define STATIC_IID_IKsQualityForwarder STATIC_KSCATEGORY_QUALITY
 93
 94typedef enum {
 95  KsAllocatorMode_User,
 96  KsAllocatorMode_Kernel
 97} KSALLOCATORMODE;
 98
 99typedef enum {
100  FramingProp_Uninitialized,
101  FramingProp_None,
102  FramingProp_Old,
103  FramingProp_Ex
104} FRAMING_PROP;
105
106typedef FRAMING_PROP *PFRAMING_PROP;
107
108typedef enum {
109  Framing_Cache_Update,
110  Framing_Cache_ReadLast,
111  Framing_Cache_ReadOrig,
112  Framing_Cache_Write
113} FRAMING_CACHE_OPS;
114
115typedef struct {
116  LONGLONG MinTotalNominator;
117  LONGLONG MaxTotalNominator;
118  LONGLONG TotalDenominator;
119} OPTIMAL_WEIGHT_TOTALS;
120
121typedef struct IPin IPin;
122typedef struct IKsPin IKsPin;
123typedef struct IKsAllocator IKsAllocator;
124typedef struct IKsAllocatorEx IKsAllocatorEx;
125
126#define AllocatorStrategy_DontCare			0
127#define AllocatorStrategy_MinimizeNumberOfFrames	0x00000001
128#define AllocatorStrategy_MinimizeFrameSize		0x00000002
129#define AllocatorStrategy_MinimizeNumberOfAllocators	0x00000004
130#define AllocatorStrategy_MaximizeSpeed			0x00000008
131
132#define PipeFactor_None					0
133#define PipeFactor_UserModeUpstream			0x00000001
134#define PipeFactor_UserModeDownstream			0x00000002
135#define PipeFactor_MemoryTypes				0x00000004
136#define PipeFactor_Flags				0x00000008
137#define PipeFactor_PhysicalRanges			0x00000010
138#define PipeFactor_OptimalRanges			0x00000020
139#define PipeFactor_FixedCompression			0x00000040
140#define PipeFactor_UnknownCompression			0x00000080
141
142#define PipeFactor_Buffers				0x00000100
143#define PipeFactor_Align				0x00000200
144#define PipeFactor_PhysicalEnd				0x00000400
145#define PipeFactor_LogicalEnd				0x00000800
146
147typedef enum {
148  PipeState_DontCare,
149  PipeState_RangeNotFixed,
150  PipeState_RangeFixed,
151  PipeState_CompressionUnknown,
152  PipeState_Finalized
153} PIPE_STATE;
154
155typedef struct _PIPE_DIMENSIONS {
156  KS_COMPRESSION AllocatorPin;
157  KS_COMPRESSION MaxExpansionPin;
158  KS_COMPRESSION EndPin;
159} PIPE_DIMENSIONS,*PPIPE_DIMENSIONS;
160
161typedef enum {
162  Pipe_Allocator_None,
163  Pipe_Allocator_FirstPin,
164  Pipe_Allocator_LastPin,
165  Pipe_Allocator_MiddlePin
166} PIPE_ALLOCATOR_PLACE;
167
168typedef PIPE_ALLOCATOR_PLACE *PPIPE_ALLOCATOR_PLACE;
169
170typedef enum {
171  KS_MemoryTypeDontCare = 0,
172  KS_MemoryTypeKernelPaged,
173  KS_MemoryTypeKernelNonPaged,
174  KS_MemoryTypeDeviceHostMapped,
175  KS_MemoryTypeDeviceSpecific,
176  KS_MemoryTypeUser,
177  KS_MemoryTypeAnyHost
178} KS_LogicalMemoryType;
179
180typedef KS_LogicalMemoryType *PKS_LogicalMemoryType;
181
182typedef struct _PIPE_TERMINATION {
183  ULONG Flags;
184  ULONG OutsideFactors;
185  ULONG Weigth;
186  KS_FRAMING_RANGE PhysicalRange;
187  KS_FRAMING_RANGE_WEIGHTED OptimalRange;
188  KS_COMPRESSION Compression;
189} PIPE_TERMINATION;
190
191typedef struct _ALLOCATOR_PROPERTIES_EX
192{
193  __LONG32 cBuffers;
194  __LONG32 cbBuffer;
195  __LONG32 cbAlign;
196  __LONG32 cbPrefix;
197
198  GUID MemoryType;
199  GUID BusType;
200  PIPE_STATE State;
201  PIPE_TERMINATION Input;
202  PIPE_TERMINATION Output;
203  ULONG Strategy;
204  ULONG Flags;
205  ULONG Weight;
206  KS_LogicalMemoryType LogicalMemoryType;
207  PIPE_ALLOCATOR_PLACE AllocatorPlace;
208  PIPE_DIMENSIONS Dimensions;
209  KS_FRAMING_RANGE PhysicalRange;
210  IKsAllocatorEx *PrevSegment;
211  ULONG CountNextSegments;
212  IKsAllocatorEx **NextSegments;
213  ULONG InsideFactors;
214  ULONG NumberPins;
215} ALLOCATOR_PROPERTIES_EX;
216
217typedef ALLOCATOR_PROPERTIES_EX *PALLOCATOR_PROPERTIES_EX;
218
219#ifdef __STREAMS__
220
221struct IKsClockPropertySet;
222
223#ifdef __CRT_UUID_DECL
224__CRT_UUID_DECL(IKsClockPropertySet,0x5c5cbd84,0xe755,0x11d0,0xac,0x18,0x00,0xa0,0xc9,0x22,0x31,0x96);
225#endif
226
227#undef INTERFACE
228#define INTERFACE IKsClockPropertySet
229DECLARE_INTERFACE_(IKsClockPropertySet,IUnknown)
230{
231  STDMETHOD(KsGetTime)			(THIS_
232						LONGLONG *Time
233					) PURE;
234  STDMETHOD(KsSetTime)			(THIS_
235						LONGLONG Time
236					) PURE;
237  STDMETHOD(KsGetPhysicalTime)		(THIS_
238						LONGLONG *Time
239					) PURE;
240  STDMETHOD(KsSetPhysicalTime)		(THIS_
241						LONGLONG Time
242					) PURE;
243  STDMETHOD(KsGetCorrelatedTime)	(THIS_
244						KSCORRELATED_TIME *CorrelatedTime
245					) PURE;
246  STDMETHOD(KsSetCorrelatedTime)	(THIS_
247						KSCORRELATED_TIME *CorrelatedTime
248					) PURE;
249  STDMETHOD(KsGetCorrelatedPhysicalTime)(THIS_
250						KSCORRELATED_TIME *CorrelatedTime
251					) PURE;
252  STDMETHOD(KsSetCorrelatedPhysicalTime)(THIS_
253						KSCORRELATED_TIME *CorrelatedTime
254					) PURE;
255  STDMETHOD(KsGetResolution)		(THIS_
256						KSRESOLUTION *Resolution
257					) PURE;
258  STDMETHOD(KsGetState)			(THIS_
259						KSSTATE *State
260					) PURE;
261};
262
263struct IKsAllocator;
264
265#ifdef __CRT_UUID_DECL
266__CRT_UUID_DECL(IKsAllocator,0x8da64899,0xc0d9,0x11d0,0x84,0x13,0x00,0x00,0xf8,0x22,0xfe,0x8a);
267#endif
268
269#undef INTERFACE
270#define INTERFACE IKsAllocator
271DECLARE_INTERFACE_(IKsAllocator,IUnknown)
272{
273  STDMETHOD_(HANDLE,KsGetAllocatorHandle)(THIS) PURE;
274  STDMETHOD_(KSALLOCATORMODE,KsGetAllocatorMode)(THIS) PURE;
275  STDMETHOD(KsGetAllocatorStatus)	(THIS_
276						PKSSTREAMALLOCATOR_STATUS AllocatorStatus
277					) PURE;
278  STDMETHOD_(VOID,KsSetAllocatorMode)	(THIS_
279						KSALLOCATORMODE Mode
280					) PURE;
281};
282
283struct IKsAllocatorEx;
284
285#ifdef __CRT_UUID_DECL
286__CRT_UUID_DECL(IKsAllocatorEx,0x091bb63a,0x603f,0x11d1,0xb0,0x67,0x00,0xa0,0xc9,0x06,0x28,0x02);
287#endif
288
289#undef INTERFACE
290#define INTERFACE IKsAllocatorEx
291DECLARE_INTERFACE_(IKsAllocatorEx,IKsAllocator)
292{
293  STDMETHOD_(PALLOCATOR_PROPERTIES_EX,KsGetProperties)(THIS) PURE;
294  STDMETHOD_(VOID,KsSetProperties)	(THIS_
295						PALLOCATOR_PROPERTIES_EX
296					) PURE;
297  STDMETHOD_(VOID,KsSetAllocatorHandle)	(THIS_
298						HANDLE AllocatorHandle
299					) PURE;
300  STDMETHOD_(HANDLE,KsCreateAllocatorAndGetHandle)(THIS_
301						IKsPin *KsPin
302					) PURE;
303};
304
305typedef enum {
306  KsPeekOperation_PeekOnly,
307  KsPeekOperation_AddRef
308} KSPEEKOPERATION;
309
310typedef struct _KSSTREAM_SEGMENT *PKSSTREAM_SEGMENT;
311struct IKsPin;
312
313#ifdef __CRT_UUID_DECL
314__CRT_UUID_DECL(IKsPin,0xb61178d1,0xa2d9,0x11cf,0x9e,0x53,0x00,0xaa,0x00,0xa2,0x16,0xa1);
315#endif
316
317#undef INTERFACE
318#define INTERFACE IKsPin
319DECLARE_INTERFACE_(IKsPin,IUnknown)
320{
321  STDMETHOD(KsQueryMediums)		(THIS_
322						PKSMULTIPLE_ITEM *MediumList
323					) PURE;
324  STDMETHOD(KsQueryInterfaces)		(THIS_
325						PKSMULTIPLE_ITEM *InterfaceList
326					) PURE;
327  STDMETHOD(KsCreateSinkPinHandle)	(THIS_
328						KSPIN_INTERFACE& Interface,
329						KSPIN_MEDIUM& Medium
330					) PURE;
331  STDMETHOD(KsGetCurrentCommunication)	(THIS_
332						KSPIN_COMMUNICATION *Communication,
333						KSPIN_INTERFACE *Interface,
334						KSPIN_MEDIUM *Medium
335					) PURE;
336  STDMETHOD(KsPropagateAcquire)		(THIS) PURE;
337  STDMETHOD(KsDeliver)			(THIS_
338						IMediaSample *Sample,
339						ULONG Flags
340					) PURE;
341  STDMETHOD(KsMediaSamplesCompleted)	(THIS_
342						PKSSTREAM_SEGMENT StreamSegment
343					) PURE;
344  STDMETHOD_(IMemAllocator *,KsPeekAllocator)(THIS_
345						KSPEEKOPERATION Operation
346					) PURE;
347  STDMETHOD(KsReceiveAllocator)		(THIS_
348						IMemAllocator *MemAllocator
349					) PURE;
350  STDMETHOD(KsRenegotiateAllocator)	(THIS) PURE;
351  STDMETHOD_(LONG,KsIncrementPendingIoCount)(THIS) PURE;
352  STDMETHOD_(LONG,KsDecrementPendingIoCount)(THIS) PURE;
353  STDMETHOD(KsQualityNotify)		(THIS_
354						ULONG Proportion,
355						REFERENCE_TIME TimeDelta
356					) PURE;
357};
358
359struct IKsPinEx;
360
361#ifdef __CRT_UUID_DECL
362__CRT_UUID_DECL(IKsPinEx,0x7bb38260,0xd19c,0x11d2,0xb3,0x8a,0x00,0xa0,0xc9,0x5e,0xc2,0x2e);
363#endif
364
365#undef INTERFACE
366#define INTERFACE IKsPinEx
367DECLARE_INTERFACE_(IKsPinEx,IKsPin)
368{
369  STDMETHOD_(VOID,KsNotifyError)	(THIS_
370						IMediaSample *Sample,
371						HRESULT hr
372					) PURE;
373};
374
375struct IKsPinPipe;
376
377#ifdef __CRT_UUID_DECL
378__CRT_UUID_DECL(IKsPinPipe,0xe539cd90,0xa8b4,0x11d1,0x81,0x89,0x00,0xa0,0xc9,0x06,0x28,0x02);
379#endif
380
381#undef INTERFACE
382#define INTERFACE IKsPinPipe
383DECLARE_INTERFACE_(IKsPinPipe,IUnknown)
384{
385  STDMETHOD(KsGetPinFramingCache)	(THIS_
386						PKSALLOCATOR_FRAMING_EX *FramingEx,
387						PFRAMING_PROP FramingProp,
388						FRAMING_CACHE_OPS Option
389					) PURE;
390  STDMETHOD(KsSetPinFramingCache)	(THIS_
391						PKSALLOCATOR_FRAMING_EX FramingEx,
392						PFRAMING_PROP FramingProp,
393						FRAMING_CACHE_OPS Option
394					) PURE;
395  STDMETHOD_(IPin*,KsGetConnectedPin)	(THIS) PURE;
396  STDMETHOD_(IKsAllocatorEx*,KsGetPipe)	(THIS_
397						KSPEEKOPERATION Operation
398					) PURE;
399  STDMETHOD(KsSetPipe)			(THIS_
400						IKsAllocatorEx *KsAllocator
401					) PURE;
402  STDMETHOD_(ULONG,KsGetPipeAllocatorFlag)(THIS) PURE;
403  STDMETHOD(KsSetPipeAllocatorFlag)	(THIS_
404						ULONG Flag
405					) PURE;
406  STDMETHOD_(GUID,KsGetPinBusCache)	(THIS) PURE;
407  STDMETHOD(KsSetPinBusCache)		(THIS_
408						GUID Bus
409					) PURE;
410  STDMETHOD_(PWCHAR,KsGetPinName)	(THIS) PURE;
411  STDMETHOD_(PWCHAR,KsGetFilterName)	(THIS) PURE;
412};
413
414struct IKsPinFactory;
415
416#ifdef __CRT_UUID_DECL
417__CRT_UUID_DECL(IKsPinFactory,0xcd5ebe6b,0x8b6e,0x11d1,0x8a,0xe0,0x00,0xa0,0xc9,0x22,0x31,0x96);
418#endif
419
420#undef INTERFACE
421#define INTERFACE IKsPinFactory
422DECLARE_INTERFACE_(IKsPinFactory,IUnknown)
423{
424  STDMETHOD(KsPinFactory)		(THIS_
425						ULONG *PinFactory
426					) PURE;
427};
428
429typedef enum {
430  KsIoOperation_Write,
431  KsIoOperation_Read
432} KSIOOPERATION;
433
434struct IKsDataTypeHandler;
435
436#ifdef __CRT_UUID_DECL
437__CRT_UUID_DECL(IKsDataTypeHandler,0x5ffbaa02,0x49a3,0x11d0,0x9f,0x36,0x00,0xaa,0x00,0xa2,0x16,0xa1);
438#endif
439
440#undef INTERFACE
441#define INTERFACE IKsDataTypeHandler
442DECLARE_INTERFACE_(IKsDataTypeHandler,IUnknown)
443{
444  STDMETHOD(KsCompleteIoOperation)	(THIS_
445						IMediaSample *Sample,
446						PVOID StreamHeader,
447						KSIOOPERATION IoOperation,
448						WINBOOL Cancelled
449					) PURE;
450  STDMETHOD(KsIsMediaTypeInRanges)	(THIS_
451						PVOID DataRanges
452					) PURE;
453  STDMETHOD(KsPrepareIoOperation)	(THIS_
454						IMediaSample *Sample,
455						PVOID StreamHeader,
456						KSIOOPERATION IoOperation
457					) PURE;
458  STDMETHOD(KsQueryExtendedSize)	(THIS_
459						ULONG *ExtendedSize
460					) PURE;
461  STDMETHOD(KsSetMediaType)		(THIS_
462						const AM_MEDIA_TYPE *AmMediaType
463					) PURE;
464};
465
466struct IKsDataTypeCompletion;
467
468#ifdef __CRT_UUID_DECL
469__CRT_UUID_DECL(IKsDataTypeCompletion,0x827d1a0e,0x0f73,0x11d2,0xb2,0x7a,0x00,0xa0,0xc9,0x22,0x31,0x96);
470#endif
471
472#undef INTERFACE
473#define INTERFACE IKsDataTypeCompletion
474DECLARE_INTERFACE_(IKsDataTypeCompletion,IUnknown)
475{
476  STDMETHOD(KsCompleteMediaType)	(THIS_
477						HANDLE FilterHandle,
478						ULONG PinFactoryId,
479						AM_MEDIA_TYPE *AmMediaType
480					) PURE;
481};
482
483struct IKsInterfaceHandler;
484
485#ifdef __CRT_UUID_DECL
486__CRT_UUID_DECL(IKsInterfaceHandler,0xd3abc7e0,0x9a61,0x11d0,0xa4,0x0d,0x00,0xa0,0xc9,0x22,0x31,0x96);
487#endif
488
489#undef INTERFACE
490#define INTERFACE IKsInterfaceHandler
491DECLARE_INTERFACE_(IKsInterfaceHandler,IUnknown)
492{
493  STDMETHOD(KsSetPin)			(THIS_
494						IKsPin *KsPin
495					) PURE;
496  STDMETHOD(KsProcessMediaSamples)	(THIS_
497						IKsDataTypeHandler *KsDataTypeHandler,
498						IMediaSample **SampleList,
499						PLONG SampleCount,
500						KSIOOPERATION IoOperation,
501						PKSSTREAM_SEGMENT *StreamSegment
502					) PURE;
503  STDMETHOD(KsCompleteIo)		(THIS_
504						PKSSTREAM_SEGMENT StreamSegment
505					) PURE;
506};
507
508typedef struct _KSSTREAM_SEGMENT {
509  IKsInterfaceHandler *KsInterfaceHandler;
510  IKsDataTypeHandler *KsDataTypeHandler;
511  KSIOOPERATION IoOperation;
512  HANDLE CompletionEvent;
513} KSSTREAM_SEGMENT;
514
515struct IKsObject;
516
517#ifdef __CRT_UUID_DECL
518__CRT_UUID_DECL(IKsObject,0x423c13a2,0x2070,0x11d0,0x9e,0xf7,0x00,0xaa,0x00,0xa2,0x16,0xa1);
519#endif
520
521#undef INTERFACE
522#define INTERFACE IKsObject
523DECLARE_INTERFACE_(IKsObject,IUnknown)
524{
525  STDMETHOD_(HANDLE,KsGetObjectHandle)	(THIS) PURE;
526};
527
528struct IKsQualityForwarder;
529
530#ifdef __CRT_UUID_DECL
531__CRT_UUID_DECL(IKsQualityForwarder,0x97ebaacb,0x95bd,0x11d0,0xa3,0xea,0x00,0xa0,0xc9,0x22,0x31,0x96);
532#endif
533
534#undef INTERFACE
535#define INTERFACE IKsQualityForwarder
536DECLARE_INTERFACE_(IKsQualityForwarder,IKsObject)
537{
538  STDMETHOD_(VOID,KsFlushClient)	(THIS_
539						IKsPin *Pin
540					) PURE;
541};
542
543struct IKsNotifyEvent;
544
545#ifdef __CRT_UUID_DECL
546__CRT_UUID_DECL(IKsNotifyEvent,0x412bd695,0xf84b,0x46c1,0xac,0x73,0x54,0x19,0x6d,0xbc,0x8f,0xa7);
547#endif
548
549#undef INTERFACE
550#define INTERFACE IKsNotifyEvent
551DECLARE_INTERFACE_(IKsNotifyEvent,IUnknown)
552{
553  STDMETHOD(KsNotifyEvent)		(THIS_
554						ULONG Event,
555						ULONG_PTR lParam1,
556						ULONG_PTR lParam2
557					) PURE;
558};
559
560KSDDKAPI HRESULT WINAPI KsResolveRequiredAttributes(PKSDATARANGE DataRange,PKSMULTIPLE_ITEM Attributes);
561KSDDKAPI HRESULT WINAPI KsOpenDefaultDevice(REFGUID Category,ACCESS_MASK Access,PHANDLE DeviceHandle);
562KSDDKAPI HRESULT WINAPI KsSynchronousDeviceControl(HANDLE Handle,ULONG IoControl,PVOID InBuffer,ULONG InLength,PVOID OutBuffer,ULONG OutLength,PULONG BytesReturned);
563KSDDKAPI HRESULT WINAPI KsGetMultiplePinFactoryItems(HANDLE FilterHandle,ULONG PinFactoryId,ULONG PropertyId,PVOID *Items);
564KSDDKAPI HRESULT WINAPI KsGetMediaTypeCount(HANDLE FilterHandle,ULONG PinFactoryId,ULONG *MediaTypeCount);
565KSDDKAPI HRESULT WINAPI KsGetMediaType(int Position,AM_MEDIA_TYPE *AmMediaType,HANDLE FilterHandle,ULONG PinFactoryId);
566#endif /* __STREAMS__ */
567
568#ifndef _IKsPropertySet_
569DEFINE_GUIDEX(IID_IKsPropertySet);
570#endif
571
572#ifndef _IKsControl_
573DEFINE_GUIDEX(IID_IKsControl);
574#endif
575
576DEFINE_GUIDEX(IID_IKsAggregateControl);
577#ifndef _IKsTopology_
578DEFINE_GUIDEX(IID_IKsTopology);
579#endif
580DEFINE_GUIDSTRUCT("17CCA71B-ECD7-11D0-B908-00A0C9223196",CLSID_Proxy);
581#define CLSID_Proxy DEFINE_GUIDNAMED(CLSID_Proxy)
582
583#else /* _KS_ */
584
585#ifndef _IKsPropertySet_
586DEFINE_GUID(IID_IKsPropertySet,STATIC_IID_IKsPropertySet);
587#endif
588
589DEFINE_GUID(CLSID_Proxy,STATIC_CLSID_Proxy);
590
591#endif /* _KS_ */
592
593#ifndef _IKsPropertySet_
594#define _IKsPropertySet_
595#define KSPROPERTY_SUPPORT_GET 1
596#define KSPROPERTY_SUPPORT_SET 2
597
598#ifdef DECLARE_INTERFACE_
599struct IKsPropertySet;
600#undef INTERFACE
601#define INTERFACE IKsPropertySet
602DECLARE_INTERFACE_(IKsPropertySet,IUnknown)
603{
604  STDMETHOD(Set)			(THIS_
605						REFGUID PropSet,
606						ULONG Id,
607						LPVOID InstanceData,
608						ULONG InstanceLength,
609						LPVOID PropertyData,
610						ULONG DataLength
611					) PURE;
612  STDMETHOD(Get)			(THIS_
613						REFGUID PropSet,
614						ULONG Id,
615						LPVOID InstanceData,
616						ULONG InstanceLength,
617						LPVOID PropertyData,
618						ULONG DataLength,
619						ULONG *BytesReturned
620					) PURE;
621  STDMETHOD(QuerySupported)		(THIS_
622						REFGUID PropSet,
623						ULONG Id,
624						ULONG *TypeSupport
625					) PURE;
626};
627#endif /* DECLARE_INTERFACE_ */
628#endif /* _IKsPropertySet_ */
629
630#ifndef _IKsControl_
631#define _IKsControl_
632#ifdef DECLARE_INTERFACE_
633struct IKsControl;
634#undef INTERFACE
635#define INTERFACE IKsControl
636DECLARE_INTERFACE_(IKsControl,IUnknown)
637{
638  STDMETHOD(KsProperty)			(THIS_
639						PKSPROPERTY Property,
640						ULONG PropertyLength,
641						LPVOID PropertyData,
642						ULONG DataLength,
643						ULONG *BytesReturned
644					) PURE;
645  STDMETHOD(KsMethod)			(THIS_
646						PKSMETHOD Method,
647						ULONG MethodLength,
648						LPVOID MethodData,
649						ULONG DataLength,
650						ULONG *BytesReturned
651					) PURE;
652  STDMETHOD(KsEvent)			(THIS_
653						PKSEVENT Event,
654						ULONG EventLength,
655						LPVOID EventData,
656						ULONG DataLength,
657						ULONG *BytesReturned
658					) PURE;
659};
660#endif /* DECLARE_INTERFACE_ */
661#endif /* _IKsControl_ */
662
663#ifdef DECLARE_INTERFACE_
664struct IKsAggregateControl;
665#undef INTERFACE
666#define INTERFACE IKsAggregateControl
667DECLARE_INTERFACE_(IKsAggregateControl,IUnknown)
668{
669  STDMETHOD(KsAddAggregate)		(THIS_
670						REFGUID AggregateClass
671					) PURE;
672  STDMETHOD(KsRemoveAggregate)		(THIS_
673						REFGUID AggregateClass
674					) PURE;
675};
676#endif /* DECLARE_INTERFACE_ */
677
678#ifndef _IKsTopology_
679#define _IKsTopology_
680#ifdef DECLARE_INTERFACE_
681struct IKsTopology;
682#undef INTERFACE
683#define INTERFACE IKsTopology
684DECLARE_INTERFACE_(IKsTopology,IUnknown)
685{
686  STDMETHOD(CreateNodeInstance)		(THIS_
687						ULONG NodeId,
688						ULONG Flags,
689						ACCESS_MASK DesiredAccess,
690						IUnknown *UnkOuter,
691						REFGUID InterfaceId,
692						LPVOID *Interface
693					) PURE;
694};
695#endif /* DECLARE_INTERFACE_ */
696#endif /* _IKsTopology_ */
697
698#ifdef __cplusplus
699}
700#endif
701
702#endif /* __KSPROXY__ */
703