xref: /reactos/sdk/include/psdk/ksproxy.h (revision 9393fc32)
1 #ifndef __KSPROXY__
2 #define __KSPROXY__
3 
4 #ifdef __cplusplus
5 extern "C" {
6 #endif
7 
8 #undef KSDDKAPI
9 #ifdef _KSDDK_
10 #define KSDDKAPI
11 #else
12 #define KSDDKAPI DECLSPEC_IMPORT
13 #endif
14 
15 #define STATIC_IID_IKsObject\
16     0x423c13a2L, 0x2070, 0x11d0, {0x9e, 0xf7, 0x00, 0xaa, 0x00, 0xa2, 0x16, 0xa1}
17 
18 #define STATIC_IID_IKsPinEx\
19     0x7bb38260L, 0xd19c, 0x11d2, {0xb3, 0x8a, 0x00, 0xa0, 0xc9, 0x5e, 0xc2, 0x2e}
20 
21 #define STATIC_IID_IKsPin\
22     0xb61178d1L, 0xa2d9, 0x11cf, {0x9e, 0x53, 0x00, 0xaa, 0x00, 0xa2, 0x16, 0xa1}
23 
24 #define STATIC_IID_IKsPinPipe\
25     0xe539cd90L, 0xa8b4, 0x11d1, {0x81, 0x89, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02}
26 
27 #define STATIC_IID_IKsDataTypeHandler\
28     0x5ffbaa02L, 0x49a3, 0x11d0, {0x9f, 0x36, 0x00, 0xaa, 0x00, 0xa2, 0x16, 0xa1}
29 
30 #define STATIC_IID_IKsDataTypeCompletion\
31     0x827D1A0EL, 0x0F73, 0x11D2, {0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
32 
33 #define STATIC_IID_IKsInterfaceHandler\
34     0xD3ABC7E0L, 0x9A61, 0x11D0, {0xA4, 0x0D, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
35 
36 #define STATIC_IID_IKsClockPropertySet\
37     0x5C5CBD84L, 0xE755, 0x11D0, {0xAC, 0x18, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
38 
39 #define STATIC_IID_IKsAllocator\
40     0x8da64899L, 0xc0d9, 0x11d0, {0x84, 0x13, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a}
41 
42 #define STATIC_IID_IKsAllocatorEx\
43     0x091bb63aL, 0x603f, 0x11d1, {0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02}
44 
45 
46 #ifndef STATIC_IID_IKsPropertySet
47 #define STATIC_IID_IKsPropertySet\
48     0x31EFAC30L, 0x515C, 0x11d0, {0xA9, 0xAA, 0x00, 0xAA, 0x00, 0x61, 0xBE, 0x93}
49 #endif
50 
51 #define STATIC_IID_IKsTopology\
52     0x28F54683L, 0x06FD, 0x11D2, {0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
53 
54 #ifndef STATIC_IID_IKsControl
55 #define STATIC_IID_IKsControl\
56     0x28F54685L, 0x06FD, 0x11D2, {0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
57 #endif
58 
59 #define STATIC_IID_IKsAggregateControl\
60     0x7F40EAC0L, 0x3947, 0x11D2, {0x87, 0x4E, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
61 
62 #define STATIC_CLSID_Proxy \
63     0x17CCA71BL, 0xECD7, 0x11D0, {0xB9, 0x08, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
64 
65 #ifdef _KS_
66 
67 #if !defined(__cplusplus) || _MSC_VER < 1100
68 
69 #define IID_IKsQualityForwarder KSCATEGORY_QUALITY
70 
71 DEFINE_GUIDEX(IID_IKsObject);
72 DEFINE_GUIDEX(IID_IKsPin);
73 DEFINE_GUIDEX(IID_IKsPinEx);
74 DEFINE_GUIDEX(IID_IKsPinPipe);
75 DEFINE_GUIDEX(IID_IKsDataTypeHandler);
76 DEFINE_GUIDEX(IID_IKsDataTypeCompletion);
77 DEFINE_GUIDEX(IID_IKsInterfaceHandler);
78 DEFINE_GUIDEX(IID_IKsClockPropertySet);
79 DEFINE_GUIDEX(IID_IKsAllocator);
80 DEFINE_GUIDEX(IID_IKsAllocatorEx);
81 #endif
82 
83 #define STATIC_IID_IKsQualityForwarder STATIC_KSCATEGORY_QUALITY
84 
85 typedef enum
86 {
87     KsAllocatorMode_User,
88     KsAllocatorMode_Kernel
89 }KSALLOCATORMODE;
90 
91 
92 typedef enum
93 {
94     FramingProp_Uninitialized,
95     FramingProp_None,
96     FramingProp_Old,
97     FramingProp_Ex
98 }FRAMING_PROP;
99 
100 typedef FRAMING_PROP *PFRAMING_PROP;
101 
102 
103 typedef enum
104 {
105     Framing_Cache_Update,
106     Framing_Cache_ReadLast,
107     Framing_Cache_ReadOrig,
108     Framing_Cache_Write
109 }FRAMING_CACHE_OPS;
110 
111 
112 typedef struct
113 {
114     LONGLONG     MinTotalNominator;
115     LONGLONG     MaxTotalNominator;
116     LONGLONG     TotalDenominator;
117 }OPTIMAL_WEIGHT_TOTALS;
118 
119 typedef struct IPin IPin;
120 typedef struct IKsPin IKsPin;
121 typedef struct IKsAllocator IKsAllocator;
122 typedef struct IKsAllocatorEx IKsAllocatorEx;
123 
124 
125 #define AllocatorStrategy_DontCare                      0
126 #define AllocatorStrategy_MinimizeNumberOfFrames        1
127 #define AllocatorStrategy_MinimizeFrameSize             2
128 #define AllocatorStrategy_MinimizeNumberOfAllocators    4
129 #define AllocatorStrategy_MaximizeSpeed                 8
130 
131 #define PipeFactor_None                   0x0
132 #define PipeFactor_UserModeUpstream       0x1
133 #define PipeFactor_UserModeDownstream     0x2
134 #define PipeFactor_MemoryTypes            0x4
135 #define PipeFactor_Flags                  0x8
136 #define PipeFactor_PhysicalRanges         0x10
137 #define PipeFactor_OptimalRanges          0x20
138 #define PipeFactor_FixedCompression       0x40
139 #define PipeFactor_UnknownCompression     0x80
140 #define PipeFactor_Buffers                0x100
141 #define PipeFactor_Align                  0x200
142 #define PipeFactor_PhysicalEnd            0x400
143 #define PipeFactor_LogicalEnd             0x800
144 
145 typedef enum
146 {
147     PipeState_DontCare,
148     PipeState_RangeNotFixed,
149     PipeState_RangeFixed,
150     PipeState_CompressionUnknown,
151     PipeState_Finalized
152 }PIPE_STATE;
153 
154 
155 typedef struct _PIPE_DIMENSIONS
156 {
157     KS_COMPRESSION AllocatorPin;
158     KS_COMPRESSION MaxExpansionPin;
159     KS_COMPRESSION EndPin;
160 }PIPE_DIMENSIONS, *PPIPE_DIMENSIONS;
161 
162 
163 typedef enum
164 {
165     Pipe_Allocator_None,
166     Pipe_Allocator_FirstPin,
167     Pipe_Allocator_LastPin,
168     Pipe_Allocator_MiddlePin
169 }PIPE_ALLOCATOR_PLACE, *PPIPE_ALLOCATOR_PLACE;
170 
171 typedef enum
172 {
173     KS_MemoryTypeDontCare = 0,
174     KS_MemoryTypeKernelPaged,
175     KS_MemoryTypeKernelNonPaged,
176     KS_MemoryTypeDeviceHostMapped,
177     KS_MemoryTypeDeviceSpecific,
178     KS_MemoryTypeUser,
179     KS_MemoryTypeAnyHost
180 }KS_LogicalMemoryType, *PKS_LogicalMemoryType;
181 
182 typedef 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 
191 
192 typedef struct _ALLOCATOR_PROPERTIES_EX
193 {
194     long cBuffers;
195     long cbBuffer;
196     long cbAlign;
197     long cbPrefix;
198 
199     GUID                       MemoryType;
200     GUID                       BusType;
201     PIPE_STATE                 State;
202     PIPE_TERMINATION           Input;
203     PIPE_TERMINATION           Output;
204     ULONG                      Strategy;
205     ULONG                      Flags;
206     ULONG                      Weight;
207     KS_LogicalMemoryType       LogicalMemoryType;
208     PIPE_ALLOCATOR_PLACE       AllocatorPlace;
209     PIPE_DIMENSIONS            Dimensions;
210     KS_FRAMING_RANGE           PhysicalRange;
211     IKsAllocatorEx*            PrevSegment;
212     ULONG                      CountNextSegments;
213     IKsAllocatorEx**           NextSegments;
214     ULONG                      InsideFactors;
215     ULONG                      NumberPins;
216 }ALLOCATOR_PROPERTIES_EX;
217 
218 typedef ALLOCATOR_PROPERTIES_EX *PALLOCATOR_PROPERTIES_EX;
219 
220 
221 #ifdef __STREAMS__
222 
223 struct DECLSPEC_UUID("5C5CBD84-E755-11D0-AC18-00A0C9223196") IKsClockPropertySet;
224 #undef INTERFACE
225 #define INTERFACE IKsClockPropertySet
226 DECLARE_INTERFACE_(IKsClockPropertySet, IUnknown)
227 {
228     STDMETHOD(KsGetTime)(
229         THIS_
230         LONGLONG* Time
231     ) PURE;
232     STDMETHOD(KsSetTime)(
233         THIS_
234         LONGLONG Time
235     ) PURE;
236     STDMETHOD(KsGetPhysicalTime)(
237         THIS_
238         LONGLONG* Time
239     ) PURE;
240     STDMETHOD(KsSetPhysicalTime)(
241         THIS_
242         LONGLONG Time
243     ) PURE;
244     STDMETHOD(KsGetCorrelatedTime)(
245         THIS_
246         KSCORRELATED_TIME* CorrelatedTime
247     ) PURE;
248     STDMETHOD(KsSetCorrelatedTime)(
249         THIS_
250         KSCORRELATED_TIME* CorrelatedTime
251     ) PURE;
252     STDMETHOD(KsGetCorrelatedPhysicalTime)(
253         THIS_
254         KSCORRELATED_TIME* CorrelatedTime
255     ) PURE;
256     STDMETHOD(KsSetCorrelatedPhysicalTime)(
257         THIS_
258         KSCORRELATED_TIME* CorrelatedTime
259     ) PURE;
260     STDMETHOD(KsGetResolution)(
261         THIS_
262         KSRESOLUTION* Resolution
263     ) PURE;
264     STDMETHOD(KsGetState)(
265         THIS_
266         KSSTATE* State
267     ) PURE;
268 };
269 
270 
271 interface DECLSPEC_UUID("8da64899-c0d9-11d0-8413-0000f822fe8a") IKsAllocator;
272 #undef INTERFACE
273 #define INTERFACE IKsAllocator
274 DECLARE_INTERFACE_(IKsAllocator, IUnknown)
275 {
276     STDMETHOD_(HANDLE, KsGetAllocatorHandle)(
277         THIS
278     ) PURE;
279     STDMETHOD_(KSALLOCATORMODE, KsGetAllocatorMode)(
280         THIS
281     ) PURE;
282     STDMETHOD(KsGetAllocatorStatus)(
283         THIS_
284         PKSSTREAMALLOCATOR_STATUS AllocatorStatus
285     ) PURE;
286     STDMETHOD_(VOID, KsSetAllocatorMode)(
287         THIS_
288         KSALLOCATORMODE Mode
289     ) PURE;
290 };
291 
292 interface DECLSPEC_UUID("091bb63a-603f-11d1-b067-00a0c9062802") IKsAllocatorEx;
293 #undef INTERFACE
294 #define INTERFACE IKsAllocatorEx
295 DECLARE_INTERFACE_(IKsAllocatorEx, IKsAllocator)
296 {
297     STDMETHOD_(PALLOCATOR_PROPERTIES_EX, KsGetProperties)(
298         THIS
299     ) PURE;
300     STDMETHOD_(VOID, KsSetProperties)(
301         THIS_
302         PALLOCATOR_PROPERTIES_EX
303     ) PURE;
304     STDMETHOD_(VOID, KsSetAllocatorHandle)(
305         THIS_
306         HANDLE AllocatorHandle
307     ) PURE;
308     STDMETHOD_(HANDLE, KsCreateAllocatorAndGetHandle)(
309         THIS_
310         IKsPin*   KsPin
311     ) PURE;
312 };
313 
314 typedef enum {
315     KsPeekOperation_PeekOnly,
316     KsPeekOperation_AddRef
317 } KSPEEKOPERATION;
318 
319 typedef struct _KSSTREAM_SEGMENT *PKSSTREAM_SEGMENT;
320 
321 interface DECLSPEC_UUID("b61178d1-a2d9-11cf-9e53-00aa00a216a1") IKsPin;
322 
323 #undef INTERFACE
324 #define INTERFACE IKsPin
325 DECLARE_INTERFACE_(IKsPin, IUnknown)
326 {
327     STDMETHOD(KsQueryMediums)(
328         THIS_
329         PKSMULTIPLE_ITEM* MediumList
330     ) PURE;
331     STDMETHOD(KsQueryInterfaces)(
332         THIS_
333         PKSMULTIPLE_ITEM* InterfaceList
334     ) PURE;
335     STDMETHOD(KsCreateSinkPinHandle)(
336         THIS_
337         KSPIN_INTERFACE& Interface,
338         KSPIN_MEDIUM& Medium
339     ) PURE;
340     STDMETHOD(KsGetCurrentCommunication)(
341         THIS_
342         KSPIN_COMMUNICATION *Communication,
343         KSPIN_INTERFACE *Interface,
344         KSPIN_MEDIUM *Medium
345     ) PURE;
346     STDMETHOD(KsPropagateAcquire)(
347         THIS
348     ) PURE;
349     STDMETHOD(KsDeliver)(
350         THIS_
351         IMediaSample* Sample,
352         ULONG Flags
353     ) PURE;
354     STDMETHOD(KsMediaSamplesCompleted)(
355         THIS_
356         PKSSTREAM_SEGMENT StreamSegment
357     ) PURE;
358     STDMETHOD_(IMemAllocator *, KsPeekAllocator)(
359         THIS_
360         KSPEEKOPERATION Operation
361     ) PURE;
362     STDMETHOD(KsReceiveAllocator)(
363         THIS_
364         IMemAllocator *MemAllocator
365     ) PURE;
366     STDMETHOD(KsRenegotiateAllocator)(
367         THIS
368     ) PURE;
369     STDMETHOD_(LONG, KsIncrementPendingIoCount)(
370         THIS
371     ) PURE;
372     STDMETHOD_(LONG, KsDecrementPendingIoCount)(
373         THIS
374     ) PURE;
375     STDMETHOD(KsQualityNotify)(
376         THIS_
377         ULONG Proportion,
378         REFERENCE_TIME TimeDelta
379     ) PURE;
380 };
381 
382 interface DECLSPEC_UUID("7bb38260-d19c-11d2-b38a-00a0c95ec22e") IKsPinEx;
383 #undef INTERFACE
384 #define INTERFACE IKsPinEx
385 DECLARE_INTERFACE_(IKsPinEx, IKsPin)
386 {
387     STDMETHOD_(VOID, KsNotifyError)(
388         THIS_
389         IMediaSample* Sample,
390         HRESULT hr
391     ) PURE;
392 };
393 
394 interface DECLSPEC_UUID("e539cd90-a8b4-11d1-8189-00a0c9062802") IKsPinPipe;
395 #undef INTERFACE
396 #define INTERFACE IKsPinPipe
397 DECLARE_INTERFACE_(IKsPinPipe, IUnknown)
398 {
399     STDMETHOD(KsGetPinFramingCache)(
400         THIS_
401         PKSALLOCATOR_FRAMING_EX *FramingEx,
402         PFRAMING_PROP FramingProp,
403         FRAMING_CACHE_OPS Option
404     ) PURE;
405     STDMETHOD(KsSetPinFramingCache)(
406         THIS_
407         PKSALLOCATOR_FRAMING_EX FramingEx,
408         PFRAMING_PROP FramingProp,
409         FRAMING_CACHE_OPS Option
410     ) PURE;
411     STDMETHOD_(IPin*, KsGetConnectedPin)(
412         THIS
413     ) PURE;
414     STDMETHOD_(IKsAllocatorEx*, KsGetPipe)(
415         THIS_
416         KSPEEKOPERATION Operation
417     ) PURE;
418     STDMETHOD(KsSetPipe)(
419         THIS_
420         IKsAllocatorEx *KsAllocator
421     ) PURE;
422     STDMETHOD_(ULONG, KsGetPipeAllocatorFlag)(
423         THIS
424     ) PURE;
425     STDMETHOD(KsSetPipeAllocatorFlag)(
426         THIS_
427         ULONG Flag
428     ) PURE;
429     STDMETHOD_(GUID, KsGetPinBusCache)(
430         THIS
431     ) PURE;
432     STDMETHOD(KsSetPinBusCache)(
433         THIS_
434         GUID Bus
435     ) PURE;
436 
437     STDMETHOD_(PWCHAR, KsGetPinName)(
438         THIS
439     ) PURE;
440     STDMETHOD_(PWCHAR, KsGetFilterName)(
441         THIS
442     ) PURE;
443 };
444 
445 
446 interface DECLSPEC_UUID("CD5EBE6B-8B6E-11D1-8AE0-00A0C9223196") IKsPinFactory;
447 #undef INTERFACE
448 #define INTERFACE IKsPinFactory
449 DECLARE_INTERFACE_(IKsPinFactory, IUnknown)
450 {
451     STDMETHOD(KsPinFactory)(
452         THIS_
453         ULONG* PinFactory
454     ) PURE;
455 };
456 
457 typedef enum {
458     KsIoOperation_Write,
459     KsIoOperation_Read
460 } KSIOOPERATION;
461 
462 interface DECLSPEC_UUID("5ffbaa02-49a3-11d0-9f36-00aa00a216a1") IKsDataTypeHandler;
463 #undef INTERFACE
464 #define INTERFACE IKsDataTypeHandler
465 DECLARE_INTERFACE_(IKsDataTypeHandler, IUnknown)
466 {
467     STDMETHOD(KsCompleteIoOperation)(
468         THIS_
469         IMediaSample *Sample,
470         PVOID StreamHeader,
471         KSIOOPERATION IoOperation,
472         BOOL Cancelled
473     ) PURE;
474     STDMETHOD(KsIsMediaTypeInRanges)(
475         THIS_
476         PVOID DataRanges
477         ) PURE;
478     STDMETHOD(KsPrepareIoOperation)(
479         THIS_
480         IMediaSample *Sample,
481         PVOID StreamHeader,
482         KSIOOPERATION IoOperation
483     ) PURE;
484     STDMETHOD(KsQueryExtendedSize)(
485         THIS_
486         ULONG* ExtendedSize
487     ) PURE;
488     STDMETHOD(KsSetMediaType)(
489         THIS_
490         const AM_MEDIA_TYPE* AmMediaType
491     ) PURE;
492 };
493 
494 interface DECLSPEC_UUID("827D1A0E-0F73-11D2-B27A-00A0C9223196") IKsDataTypeCompletion;
495 #undef INTERFACE
496 #define INTERFACE IKsDataTypeCompletion
497 DECLARE_INTERFACE_(IKsDataTypeCompletion, IUnknown)
498 {
499     STDMETHOD(KsCompleteMediaType)(
500         THIS_
501         HANDLE FilterHandle,
502         ULONG PinFactoryId,
503         AM_MEDIA_TYPE* AmMediaType
504     ) PURE;
505 };
506 
507 interface DECLSPEC_UUID("D3ABC7E0-9A61-11d0-A40D-00A0C9223196") IKsInterfaceHandler;
508 #undef INTERFACE
509 #define INTERFACE IKsInterfaceHandler
510 DECLARE_INTERFACE_(IKsInterfaceHandler, IUnknown)
511 {
512     STDMETHOD(KsSetPin)(
513         THIS_
514         IKsPin *KsPin
515     ) PURE;
516     STDMETHOD(KsProcessMediaSamples)(
517         THIS_
518         IKsDataTypeHandler *KsDataTypeHandler,
519         IMediaSample** SampleList,
520         PLONG SampleCount,
521         KSIOOPERATION IoOperation,
522         PKSSTREAM_SEGMENT *StreamSegment
523     ) PURE;
524     STDMETHOD(KsCompleteIo)(
525         THIS_
526         PKSSTREAM_SEGMENT StreamSegment
527     ) PURE;
528 };
529 
530 
531 typedef struct _KSSTREAM_SEGMENT
532 {
533     IKsInterfaceHandler     *KsInterfaceHandler;
534     IKsDataTypeHandler      *KsDataTypeHandler;
535     KSIOOPERATION           IoOperation;
536     HANDLE                  CompletionEvent;
537 
538 }KSSTREAM_SEGMENT;
539 
540 interface DECLSPEC_UUID("423c13a2-2070-11d0-9ef7-00aa00a216a1") IKsObject;
541 #undef INTERFACE
542 #define INTERFACE IKsObject
543 DECLARE_INTERFACE_(IKsObject, IUnknown)
544 {
545     STDMETHOD_(HANDLE, KsGetObjectHandle)(
546         THIS
547     ) PURE;
548 };
549 
550 interface DECLSPEC_UUID("97ebaacb-95bd-11d0-a3ea-00a0c9223196") IKsQualityForwarder;
551 #undef INTERFACE
552 #define INTERFACE IKsQualityForwarder
553 DECLARE_INTERFACE_(IKsQualityForwarder, IKsObject)
554 {
555     STDMETHOD_(VOID, KsFlushClient)(
556         THIS_
557         IKsPin* Pin
558     ) PURE;
559 };
560 
561 #if ( (NTDDI_VERSION >= NTDDI_WINXPSP2) && (NTDDI_VERSION < NTDDI_WS03) ) || (NTDDI_VERSION >= NTDDI_WS03SP1)
562 
563 interface DECLSPEC_UUID("412bd695-f84b-46c1-ac73-54196dbc8fa7") IKsNotifyEvent;
564 #undef INTERFACE
565 #define INTERFACE IKsNotifyEvent
566 DECLARE_INTERFACE_(IKsNotifyEvent, IUnknown)
567 {
568     STDMETHOD(KsNotifyEvent)(
569         THIS_
570         ULONG Event,
571         ULONG_PTR lParam1,
572         ULONG_PTR lParam2
573     ) PURE;
574 };
575 
576 #endif
577 
578 KSDDKAPI
579 HRESULT
580 WINAPI
581 KsResolveRequiredAttributes(
582     PKSDATARANGE DataRange,
583     PKSMULTIPLE_ITEM Attributes OPTIONAL);
584 
585 KSDDKAPI
586 HRESULT
587 WINAPI
588 KsOpenDefaultDevice(
589     REFGUID Category,
590     ACCESS_MASK Access,
591     PHANDLE DeviceHandle);
592 
593 KSDDKAPI
594 HRESULT
595 WINAPI
596 KsSynchronousDeviceControl(
597     HANDLE      Handle,
598     ULONG       IoControl,
599     PVOID       InBuffer,
600     ULONG       InLength,
601     PVOID       OutBuffer,
602     ULONG       OutLength,
603     PULONG      BytesReturned);
604 
605 KSDDKAPI
606 HRESULT
607 WINAPI
608 KsGetMultiplePinFactoryItems(
609     HANDLE  FilterHandle,
610     ULONG   PinFactoryId,
611     ULONG   PropertyId,
612     PVOID*  Items);
613 
614 KSDDKAPI
615 HRESULT
616 WINAPI
617 KsGetMediaTypeCount(
618     HANDLE      FilterHandle,
619     ULONG       PinFactoryId,
620     ULONG*      MediaTypeCount);
621 
622 KSDDKAPI
623 HRESULT
624 WINAPI
625 KsGetMediaType(
626     int         Position,
627     AM_MEDIA_TYPE* AmMediaType,
628     HANDLE      FilterHandle,
629     ULONG       PinFactoryId);
630 
631 #endif
632 
633 #ifndef _IKsPropertySet_
634 #if !defined(__cplusplus) || _MSC_VER < 1100
635 DEFINE_GUIDEX(IID_IKsPropertySet);
636 #endif
637 #endif
638 
639 #ifndef _IKsControl_
640 #if !defined(__cplusplus) || _MSC_VER < 1100
641 DEFINE_GUIDEX(IID_IKsControl);
642 #endif
643 #endif
644 
645 #if !defined(__cplusplus) || _MSC_VER < 1100
646 DEFINE_GUIDEX(IID_IKsAggregateControl);
647 #endif
648 
649 #ifndef _IKsTopology_
650 #if !defined(__cplusplus) || _MSC_VER < 1100
651 DEFINE_GUIDEX(IID_IKsTopology);
652 #endif
653 #endif
654 
655 DEFINE_GUIDSTRUCT("17CCA71B-ECD7-11D0-B908-00A0C9223196", CLSID_Proxy);
656 #define CLSID_Proxy DEFINE_GUIDNAMED(CLSID_Proxy)
657 
658 #else
659 
660 #ifndef _IKsPropertySet_
661 #if !defined(__cplusplus) || _MSC_VER < 1100
662 DEFINE_GUID(IID_IKsPropertySet, STATIC_IID_IKsPropertySet);
663 #endif
664 #endif
665 
666 #if !defined(__cplusplus) || _MSC_VER < 1100
667 DEFINE_GUID(CLSID_Proxy, STATIC_CLSID_Proxy);
668 #else
669 DECLSPEC_UUID("17CCA71B-ECD7-11D0-B908-00A0C9223196") CLSID_Proxy;
670 #endif
671 
672 #endif
673 
674 #ifndef _IKsPropertySet_
675 #define _IKsPropertySet_
676 
677 #define KSPROPERTY_SUPPORT_GET 1
678 #define KSPROPERTY_SUPPORT_SET 2
679 
680 interface DECLSPEC_UUID("31EFAC30-515C-11d0-A9AA-00aa0061be93")
681 #undef INTERFACE
682 #define INTERFACE IKsPropertySet
683 DECLARE_INTERFACE_(IKsPropertySet, IUnknown)
684 {
685     STDMETHOD(Set)(
686         THIS_
687         IN REFGUID PropSet,
688         IN ULONG Id,
689         IN LPVOID InstanceData,
690         IN ULONG InstanceLength,
691         IN LPVOID PropertyData,
692         IN ULONG DataLength
693     ) PURE;
694 
695     STDMETHOD(Get)(
696         THIS_
697         IN REFGUID PropSet,
698         IN ULONG Id,
699         IN LPVOID InstanceData,
700         IN ULONG InstanceLength,
701         OUT LPVOID PropertyData,
702         IN ULONG DataLength,
703         OUT ULONG* BytesReturned
704     ) PURE;
705 
706     STDMETHOD(QuerySupported)(
707         THIS_
708         IN REFGUID PropSet,
709         IN ULONG Id,
710         OUT ULONG* TypeSupport
711     ) PURE;
712 };
713 
714 #endif
715 
716 #ifndef _IKsControl_
717 #define _IKsControl_
718 
719 DEFINE_GUID(IID_IKsControl, 28F54685, 0x06FD, 0x11D2, 0xB2, 0x7A, 0x00, 0A0, 0xC9, 0x22, 0x31, 0x96);
720 
721 
722 interface DECLSPEC_UUID("28F54685-06FD-11D2-B27A-00A0C9223196") IKsControl;
723 #undef INTERFACE
724 #define INTERFACE IKsControl
725 DECLARE_INTERFACE_(IKsControl, IUnknown)
726 {
727     STDMETHOD(KsProperty)(
728         THIS_
729         IN PKSPROPERTY Property,
730         IN ULONG PropertyLength,
731         IN OUT LPVOID PropertyData,
732         IN ULONG DataLength,
733         OUT ULONG* BytesReturned
734     ) PURE;
735     STDMETHOD(KsMethod)(
736         THIS_
737         IN PKSMETHOD Method,
738         IN ULONG MethodLength,
739         IN OUT LPVOID MethodData,
740         IN ULONG DataLength,
741         OUT ULONG* BytesReturned
742     ) PURE;
743     STDMETHOD(KsEvent)(
744         THIS_
745         IN PKSEVENT Event OPTIONAL,
746         IN ULONG EventLength,
747         IN OUT LPVOID EventData,
748         IN ULONG DataLength,
749         OUT ULONG* BytesReturned
750     ) PURE;
751 };
752 
753 #endif
754 
755 
756 DEFINE_GUID(IID_IKsAggregateControl, 0x7F40EAC0, 0x3947, 0x11D2, 0x87, 0x4E, 0x00, 0A0, 0xC9, 0x22, 0x31, 0x96);
757 
758 #undef INTERFACE
759 #define INTERFACE IKsAggregateControl
760 DECLARE_INTERFACE_(IKsAggregateControl, IUnknown)
761 {
762     STDMETHOD(KsAddAggregate)(
763         THIS_
764         IN REFGUID AggregateClass
765     ) PURE;
766     STDMETHOD(KsRemoveAggregate)(
767         THIS_
768         IN REFGUID AggregateClass
769     ) PURE;
770 };
771 
772 #ifndef _IKsTopology_
773 #define _IKsTopology_
774 
775 DEFINE_GUID(IID_IKsTopology, 0x28F54683, 0x06FD, 0x11D2, 0xB2, 0x7A, 0x00, 0A0, 0xC9, 0x22, 0x31, 0x96);
776 
777 #undef INTERFACE
778 #define INTERFACE IKsTopology
779 DECLARE_INTERFACE_(IKsTopology, IUnknown)
780 {
781     STDMETHOD(CreateNodeInstance)(
782         THIS_
783         IN ULONG NodeId,
784         IN ULONG Flags,
785         IN ACCESS_MASK DesiredAccess,
786         IN IUnknown* UnkOuter OPTIONAL,
787         IN REFGUID InterfaceId,
788         OUT LPVOID* Interface
789     ) PURE;
790 };
791 
792 #endif
793 
794 #ifdef __cplusplus
795 }
796 #endif
797 
798 #endif
799