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
DECLARE_INTERFACE_(IKsClockPropertySet,IUnknown)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
DECLARE_INTERFACE_(IKsAllocator,IUnknown)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
DECLARE_INTERFACE_(IKsAllocatorEx,IKsAllocator)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
DECLARE_INTERFACE_(IKsPin,IUnknown)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
DECLARE_INTERFACE_(IKsPinEx,IKsPin)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
DECLARE_INTERFACE_(IKsPinPipe,IUnknown)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
DECLARE_INTERFACE_(IKsPinFactory,IUnknown)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
DECLARE_INTERFACE_(IKsDataTypeHandler,IUnknown)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
DECLARE_INTERFACE_(IKsDataTypeCompletion,IUnknown)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
DECLARE_INTERFACE_(IKsInterfaceHandler,IUnknown)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
DECLARE_INTERFACE_(IKsObject,IUnknown)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
DECLARE_INTERFACE_(IKsQualityForwarder,IKsObject)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
DECLARE_INTERFACE_(IKsNotifyEvent,IUnknown)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
DECLARE_INTERFACE_(IKsPropertySet,IUnknown)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
DECLARE_INTERFACE_(IKsControl,IUnknown)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
DECLARE_INTERFACE_(IKsAggregateControl,IUnknown)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
DECLARE_INTERFACE_(IKsTopology,IUnknown)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