1 /**
2  * This file has no copyright assigned and is placed in the Public Domain.
3  * This file is part of the w64 mingw-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
10 extern "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 	0x423c13a2L,0x2070,0x11d0,0x9e,0xf7,0x00,0xaa,0x00,0xa2,0x16,0xa1
22 
23 #define STATIC_IID_IKsPinEx						\
24 	0x7bb38260L,0xd19c,0x11d2,0xb3,0x8a,0x00,0xa0,0xc9,0x5e,0xc2,0x2e
25 
26 #define STATIC_IID_IKsPin						\
27 	0xb61178d1L,0xa2d9,0x11cf,0x9e,0x53,0x00,0xaa,0x00,0xa2,0x16,0xa1
28 
29 #define STATIC_IID_IKsPinPipe						\
30 	0xe539cd90L,0xa8b4,0x11d1,0x81,0x89,0x00,0xa0,0xc9,0x06,0x28,0x02
31 
32 #define STATIC_IID_IKsDataTypeHandler					\
33 	0x5ffbaa02L,0x49a3,0x11d0,0x9f,0x36,0x00,0xaa,0x00,0xa2,0x16,0xa1
34 
35 #define STATIC_IID_IKsDataTypeCompletion				\
36 	0x827D1A0EL,0x0F73,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96
37 
38 #define STATIC_IID_IKsInterfaceHandler					\
39 	0xD3ABC7E0L,0x9A61,0x11D0,0xA4,0x0D,0x00,0xA0,0xC9,0x22,0x31,0x96
40 
41 #define STATIC_IID_IKsClockPropertySet					\
42 	0x5C5CBD84L,0xE755,0x11D0,0xAC,0x18,0x00,0xA0,0xC9,0x22,0x31,0x96
43 
44 #define STATIC_IID_IKsAllocator						\
45 	0x8da64899L,0xc0d9,0x11d0,0x84,0x13,0x00,0x00,0xf8,0x22,0xfe,0x8a
46 
47 #define STATIC_IID_IKsAllocatorEx					\
48 	0x091bb63aL,0x603f,0x11d1,0xb0,0x67,0x00,0xa0,0xc9,0x06,0x28,0x02
49 
50 #ifndef STATIC_IID_IKsPropertySet
51 #define STATIC_IID_IKsPropertySet					\
52 	0x31EFAC30L,0x515C,0x11d0,0xA9,0xAA,0x00,0xAA,0x00,0x61,0xBE,0x93
53 #endif
54 
55 #define STATIC_IID_IKsTopology						\
56 	0x28F54683L,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96
57 
58 #ifndef STATIC_IID_IKsControl
59 #define STATIC_IID_IKsControl						\
60 	0x28F54685L,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96
61 #endif
62 
63 #define STATIC_IID_IKsAggregateControl					\
64 	0x7F40EAC0L,0x3947,0x11D2,0x87,0x4E,0x00,0xA0,0xC9,0x22,0x31,0x96
65 
66 #define STATIC_CLSID_Proxy						\
67 	0x17CCA71BL,0xECD7,0x11D0,0xB9,0x08,0x00,0xA0,0xC9,0x22,0x31,0x96
68 
69 #ifdef _KS_
70 
71 DEFINE_GUIDEX(IID_IKsObject);
72 
73 DEFINE_GUIDEX(IID_IKsPin);
74 
75 DEFINE_GUIDEX(IID_IKsPinEx);
76 
77 DEFINE_GUIDEX(IID_IKsPinPipe);
78 
79 DEFINE_GUIDEX(IID_IKsDataTypeHandler);
80 
81 DEFINE_GUIDEX(IID_IKsDataTypeCompletion);
82 
83 DEFINE_GUIDEX(IID_IKsInterfaceHandler);
84 
85 DEFINE_GUIDEX(IID_IKsClockPropertySet);
86 
87 DEFINE_GUIDEX(IID_IKsAllocator);
88 
89 DEFINE_GUIDEX(IID_IKsAllocatorEx);
90 
91 #define IID_IKsQualityForwarder KSCATEGORY_QUALITY
92 #define STATIC_IID_IKsQualityForwarder STATIC_KSCATEGORY_QUALITY
93 
94 typedef enum {
95   KsAllocatorMode_User,
96   KsAllocatorMode_Kernel
97 } KSALLOCATORMODE;
98 
99 typedef enum {
100   FramingProp_Uninitialized,
101   FramingProp_None,
102   FramingProp_Old,
103   FramingProp_Ex
104 } FRAMING_PROP;
105 
106 typedef FRAMING_PROP *PFRAMING_PROP;
107 
108 typedef enum {
109   Framing_Cache_Update,
110   Framing_Cache_ReadLast,
111   Framing_Cache_ReadOrig,
112   Framing_Cache_Write
113 } FRAMING_CACHE_OPS;
114 
115 typedef struct {
116   LONGLONG MinTotalNominator;
117   LONGLONG MaxTotalNominator;
118   LONGLONG TotalDenominator;
119 } OPTIMAL_WEIGHT_TOTALS;
120 
121 typedef struct IPin IPin;
122 typedef struct IKsPin IKsPin;
123 typedef struct IKsAllocator IKsAllocator;
124 typedef 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 
147 typedef enum {
148   PipeState_DontCare,
149   PipeState_RangeNotFixed,
150   PipeState_RangeFixed,
151   PipeState_CompressionUnknown,
152   PipeState_Finalized
153 } PIPE_STATE;
154 
155 typedef struct _PIPE_DIMENSIONS {
156   KS_COMPRESSION AllocatorPin;
157   KS_COMPRESSION MaxExpansionPin;
158   KS_COMPRESSION EndPin;
159 } PIPE_DIMENSIONS,*PPIPE_DIMENSIONS;
160 
161 typedef enum {
162   Pipe_Allocator_None,
163   Pipe_Allocator_FirstPin,
164   Pipe_Allocator_LastPin,
165   Pipe_Allocator_MiddlePin
166 } PIPE_ALLOCATOR_PLACE;
167 
168 typedef PIPE_ALLOCATOR_PLACE *PPIPE_ALLOCATOR_PLACE;
169 
170 typedef 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 
180 typedef 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 typedef struct _ALLOCATOR_PROPERTIES_EX
192 {
193   long cBuffers;
194   long cbBuffer;
195   long cbAlign;
196   long 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 
217 typedef ALLOCATOR_PROPERTIES_EX *PALLOCATOR_PROPERTIES_EX;
218 
219 #ifdef __STREAMS__
220 
221 struct IKsClockPropertySet;
222 #undef INTERFACE
223 #define INTERFACE IKsClockPropertySet
DECLARE_INTERFACE_(IKsClockPropertySet,IUnknown)224 DECLARE_INTERFACE_(IKsClockPropertySet,IUnknown)
225 {
226   STDMETHOD(KsGetTime)			(THIS_
227 						LONGLONG *Time
228 					) PURE;
229   STDMETHOD(KsSetTime)			(THIS_
230 						LONGLONG Time
231 					) PURE;
232   STDMETHOD(KsGetPhysicalTime)		(THIS_
233 						LONGLONG *Time
234 					) PURE;
235   STDMETHOD(KsSetPhysicalTime)		(THIS_
236 						LONGLONG Time
237 					) PURE;
238   STDMETHOD(KsGetCorrelatedTime)	(THIS_
239 						KSCORRELATED_TIME *CorrelatedTime
240 					) PURE;
241   STDMETHOD(KsSetCorrelatedTime)	(THIS_
242 						KSCORRELATED_TIME *CorrelatedTime
243 					) PURE;
244   STDMETHOD(KsGetCorrelatedPhysicalTime)(THIS_
245 						KSCORRELATED_TIME *CorrelatedTime
246 					) PURE;
247   STDMETHOD(KsSetCorrelatedPhysicalTime)(THIS_
248 						KSCORRELATED_TIME *CorrelatedTime
249 					) PURE;
250   STDMETHOD(KsGetResolution)		(THIS_
251 						KSRESOLUTION *Resolution
252 					) PURE;
253   STDMETHOD(KsGetState)			(THIS_
254 						KSSTATE *State
255 					) PURE;
256 };
257 
258 struct IKsAllocator;
259 #undef INTERFACE
260 #define INTERFACE IKsAllocator
DECLARE_INTERFACE_(IKsAllocator,IUnknown)261 DECLARE_INTERFACE_(IKsAllocator,IUnknown)
262 {
263   STDMETHOD_(HANDLE,KsGetAllocatorHandle)(THIS) PURE;
264   STDMETHOD_(KSALLOCATORMODE,KsGetAllocatorMode)(THIS) PURE;
265   STDMETHOD(KsGetAllocatorStatus)	(THIS_
266 						PKSSTREAMALLOCATOR_STATUS AllocatorStatus
267 					) PURE;
268   STDMETHOD_(VOID,KsSetAllocatorMode)	(THIS_
269 						KSALLOCATORMODE Mode
270 					) PURE;
271 };
272 
273 struct IKsAllocatorEx;
274 #undef INTERFACE
275 #define INTERFACE IKsAllocatorEx
DECLARE_INTERFACE_(IKsAllocatorEx,IKsAllocator)276 DECLARE_INTERFACE_(IKsAllocatorEx,IKsAllocator)
277 {
278   STDMETHOD_(PALLOCATOR_PROPERTIES_EX,KsGetProperties)(THIS) PURE;
279   STDMETHOD_(VOID,KsSetProperties)	(THIS_
280 						PALLOCATOR_PROPERTIES_EX
281 					) PURE;
282   STDMETHOD_(VOID,KsSetAllocatorHandle)	(THIS_
283 						HANDLE AllocatorHandle
284 					) PURE;
285   STDMETHOD_(HANDLE,KsCreateAllocatorAndGetHandle)(THIS_
286 						IKsPin *KsPin
287 					) PURE;
288 };
289 
290 typedef enum {
291   KsPeekOperation_PeekOnly,
292   KsPeekOperation_AddRef
293 } KSPEEKOPERATION;
294 
295 typedef struct _KSSTREAM_SEGMENT *PKSSTREAM_SEGMENT;
296 struct IKsPin;
297 
298 #undef INTERFACE
299 #define INTERFACE IKsPin
DECLARE_INTERFACE_(IKsPin,IUnknown)300 DECLARE_INTERFACE_(IKsPin,IUnknown)
301 {
302   STDMETHOD(KsQueryMediums)		(THIS_
303 						PKSMULTIPLE_ITEM *MediumList
304 					) PURE;
305   STDMETHOD(KsQueryInterfaces)		(THIS_
306 						PKSMULTIPLE_ITEM *InterfaceList
307 					) PURE;
308   STDMETHOD(KsCreateSinkPinHandle)	(THIS_
309 						KSPIN_INTERFACE& Interface,
310 						KSPIN_MEDIUM& Medium
311 					) PURE;
312   STDMETHOD(KsGetCurrentCommunication)	(THIS_
313 						KSPIN_COMMUNICATION *Communication,
314 						KSPIN_INTERFACE *Interface,
315 						KSPIN_MEDIUM *Medium
316 					) PURE;
317   STDMETHOD(KsPropagateAcquire)		(THIS) PURE;
318   STDMETHOD(KsDeliver)			(THIS_
319 						IMediaSample *Sample,
320 						ULONG Flags
321 					) PURE;
322   STDMETHOD(KsMediaSamplesCompleted)	(THIS_
323 						PKSSTREAM_SEGMENT StreamSegment
324 					) PURE;
325   STDMETHOD_(IMemAllocator *,KsPeekAllocator)(THIS_
326 						KSPEEKOPERATION Operation
327 					) PURE;
328   STDMETHOD(KsReceiveAllocator)		(THIS_
329 						IMemAllocator *MemAllocator
330 					) PURE;
331   STDMETHOD(KsRenegotiateAllocator)	(THIS) PURE;
332   STDMETHOD_(LONG,KsIncrementPendingIoCount)(THIS) PURE;
333   STDMETHOD_(LONG,KsDecrementPendingIoCount)(THIS) PURE;
334   STDMETHOD(KsQualityNotify)		(THIS_
335 						ULONG Proportion,
336 						REFERENCE_TIME TimeDelta
337 					) PURE;
338 };
339 
340 struct IKsPinEx;
341 #undef INTERFACE
342 #define INTERFACE IKsPinEx
DECLARE_INTERFACE_(IKsPinEx,IKsPin)343 DECLARE_INTERFACE_(IKsPinEx,IKsPin)
344 {
345   STDMETHOD_(VOID,KsNotifyError)	(THIS_
346 						IMediaSample *Sample,
347 						HRESULT hr
348 					) PURE;
349 };
350 
351 struct IKsPinPipe;
352 #undef INTERFACE
353 #define INTERFACE IKsPinPipe
DECLARE_INTERFACE_(IKsPinPipe,IUnknown)354 DECLARE_INTERFACE_(IKsPinPipe,IUnknown)
355 {
356   STDMETHOD(KsGetPinFramingCache)	(THIS_
357 						PKSALLOCATOR_FRAMING_EX *FramingEx,
358 						PFRAMING_PROP FramingProp,
359 						FRAMING_CACHE_OPS Option
360 					) PURE;
361   STDMETHOD(KsSetPinFramingCache)	(THIS_
362 						PKSALLOCATOR_FRAMING_EX FramingEx,
363 						PFRAMING_PROP FramingProp,
364 						FRAMING_CACHE_OPS Option
365 					) PURE;
366   STDMETHOD_(IPin*,KsGetConnectedPin)	(THIS) PURE;
367   STDMETHOD_(IKsAllocatorEx*,KsGetPipe)	(THIS_
368 						KSPEEKOPERATION Operation
369 					) PURE;
370   STDMETHOD(KsSetPipe)			(THIS_
371 						IKsAllocatorEx *KsAllocator
372 					) PURE;
373   STDMETHOD_(ULONG,KsGetPipeAllocatorFlag)(THIS) PURE;
374   STDMETHOD(KsSetPipeAllocatorFlag)	(THIS_
375 						ULONG Flag
376 					) PURE;
377   STDMETHOD_(GUID,KsGetPinBusCache)	(THIS) PURE;
378   STDMETHOD(KsSetPinBusCache)		(THIS_
379 						GUID Bus
380 					) PURE;
381   STDMETHOD_(PWCHAR,KsGetPinName)	(THIS) PURE;
382   STDMETHOD_(PWCHAR,KsGetFilterName)	(THIS) PURE;
383 };
384 
385 struct IKsPinFactory;
386 #undef INTERFACE
387 #define INTERFACE IKsPinFactory
DECLARE_INTERFACE_(IKsPinFactory,IUnknown)388 DECLARE_INTERFACE_(IKsPinFactory,IUnknown)
389 {
390   STDMETHOD(KsPinFactory)		(THIS_
391 						ULONG *PinFactory
392 					) PURE;
393 };
394 
395 typedef enum {
396   KsIoOperation_Write,
397   KsIoOperation_Read
398 } KSIOOPERATION;
399 
400 struct IKsDataTypeHandler;
401 #undef INTERFACE
402 #define INTERFACE IKsDataTypeHandler
DECLARE_INTERFACE_(IKsDataTypeHandler,IUnknown)403 DECLARE_INTERFACE_(IKsDataTypeHandler,IUnknown)
404 {
405   STDMETHOD(KsCompleteIoOperation)	(THIS_
406 						IMediaSample *Sample,
407 						PVOID StreamHeader,
408 						KSIOOPERATION IoOperation,
409 						WINBOOL Cancelled
410 					) PURE;
411   STDMETHOD(KsIsMediaTypeInRanges)	(THIS_
412 						PVOID DataRanges
413 					) PURE;
414   STDMETHOD(KsPrepareIoOperation)	(THIS_
415 						IMediaSample *Sample,
416 						PVOID StreamHeader,
417 						KSIOOPERATION IoOperation
418 					) PURE;
419   STDMETHOD(KsQueryExtendedSize)	(THIS_
420 						ULONG *ExtendedSize
421 					) PURE;
422   STDMETHOD(KsSetMediaType)		(THIS_
423 						const AM_MEDIA_TYPE *AmMediaType
424 					) PURE;
425 };
426 
427 struct IKsDataTypeCompletion;
428 #undef INTERFACE
429 #define INTERFACE IKsDataTypeCompletion
DECLARE_INTERFACE_(IKsDataTypeCompletion,IUnknown)430 DECLARE_INTERFACE_(IKsDataTypeCompletion,IUnknown)
431 {
432   STDMETHOD(KsCompleteMediaType)	(THIS_
433 						HANDLE FilterHandle,
434 						ULONG PinFactoryId,
435 						AM_MEDIA_TYPE *AmMediaType
436 					) PURE;
437 };
438 
439 struct IKsInterfaceHandler;
440 #undef INTERFACE
441 #define INTERFACE IKsInterfaceHandler
DECLARE_INTERFACE_(IKsInterfaceHandler,IUnknown)442 DECLARE_INTERFACE_(IKsInterfaceHandler,IUnknown)
443 {
444   STDMETHOD(KsSetPin)			(THIS_
445 						IKsPin *KsPin
446 					) PURE;
447   STDMETHOD(KsProcessMediaSamples)	(THIS_
448 						IKsDataTypeHandler *KsDataTypeHandler,
449 						IMediaSample **SampleList,
450 						PLONG SampleCount,
451 						KSIOOPERATION IoOperation,
452 						PKSSTREAM_SEGMENT *StreamSegment
453 					) PURE;
454   STDMETHOD(KsCompleteIo)		(THIS_
455 						PKSSTREAM_SEGMENT StreamSegment
456 					) PURE;
457 };
458 
459 typedef struct _KSSTREAM_SEGMENT {
460   IKsInterfaceHandler *KsInterfaceHandler;
461   IKsDataTypeHandler *KsDataTypeHandler;
462   KSIOOPERATION IoOperation;
463   HANDLE CompletionEvent;
464 } KSSTREAM_SEGMENT;
465 
466 struct IKsObject;
467 #undef INTERFACE
468 #define INTERFACE IKsObject
DECLARE_INTERFACE_(IKsObject,IUnknown)469 DECLARE_INTERFACE_(IKsObject,IUnknown)
470 {
471   STDMETHOD_(HANDLE,KsGetObjectHandle)	(THIS) PURE;
472 };
473 
474 struct IKsQualityForwarder;
475 #undef INTERFACE
476 #define INTERFACE IKsQualityForwarder
DECLARE_INTERFACE_(IKsQualityForwarder,IKsObject)477 DECLARE_INTERFACE_(IKsQualityForwarder,IKsObject)
478 {
479   STDMETHOD_(VOID,KsFlushClient)	(THIS_
480 						IKsPin *Pin
481 					) PURE;
482 };
483 
484 struct IKsNotifyEvent;
485 #undef INTERFACE
486 #define INTERFACE IKsNotifyEvent
DECLARE_INTERFACE_(IKsNotifyEvent,IUnknown)487 DECLARE_INTERFACE_(IKsNotifyEvent,IUnknown)
488 {
489   STDMETHOD(KsNotifyEvent)		(THIS_
490 						ULONG Event,
491 						ULONG_PTR lParam1,
492 						ULONG_PTR lParam2
493 					) PURE;
494 };
495 
496 KSDDKAPI HRESULT WINAPI KsResolveRequiredAttributes(PKSDATARANGE DataRange,PKSMULTIPLE_ITEM Attributes);
497 KSDDKAPI HRESULT WINAPI KsOpenDefaultDevice(REFGUID Category,ACCESS_MASK Access,PHANDLE DeviceHandle);
498 KSDDKAPI HRESULT WINAPI KsSynchronousDeviceControl(HANDLE Handle,ULONG IoControl,PVOID InBuffer,ULONG InLength,PVOID OutBuffer,ULONG OutLength,PULONG BytesReturned);
499 KSDDKAPI HRESULT WINAPI KsGetMultiplePinFactoryItems(HANDLE FilterHandle,ULONG PinFactoryId,ULONG PropertyId,PVOID *Items);
500 KSDDKAPI HRESULT WINAPI KsGetMediaTypeCount(HANDLE FilterHandle,ULONG PinFactoryId,ULONG *MediaTypeCount);
501 KSDDKAPI HRESULT WINAPI KsGetMediaType(int Position,AM_MEDIA_TYPE *AmMediaType,HANDLE FilterHandle,ULONG PinFactoryId);
502 #endif /* __STREAMS__ */
503 
504 #ifndef _IKsPropertySet_
505 DEFINE_GUIDEX(IID_IKsPropertySet);
506 #endif
507 
508 #ifndef _IKsControl_
509 DEFINE_GUIDEX(IID_IKsControl);
510 #endif
511 
512 DEFINE_GUIDEX(IID_IKsAggregateControl);
513 #ifndef _IKsTopology_
514 DEFINE_GUIDEX(IID_IKsTopology);
515 #endif
516 DEFINE_GUIDSTRUCT("17CCA71B-ECD7-11D0-B908-00A0C9223196",CLSID_Proxy);
517 #define CLSID_Proxy DEFINE_GUIDNAMED(CLSID_Proxy)
518 
519 #else /* _KS_ */
520 
521 #ifndef _IKsPropertySet_
522 DEFINE_GUID(IID_IKsPropertySet,STATIC_IID_IKsPropertySet);
523 #endif
524 
525 DEFINE_GUID(CLSID_Proxy,STATIC_CLSID_Proxy);
526 
527 #endif /* _KS_ */
528 
529 #ifndef _IKsPropertySet_
530 #define _IKsPropertySet_
531 #define KSPROPERTY_SUPPORT_GET 1
532 #define KSPROPERTY_SUPPORT_SET 2
533 
534 #ifdef DECLARE_INTERFACE_
535 struct IKsPropertySet;
536 #undef INTERFACE
537 #define INTERFACE IKsPropertySet
DECLARE_INTERFACE_(IKsPropertySet,IUnknown)538 DECLARE_INTERFACE_(IKsPropertySet,IUnknown)
539 {
540   STDMETHOD(Set)			(THIS_
541 						REFGUID PropSet,
542 						ULONG Id,
543 						LPVOID InstanceData,
544 						ULONG InstanceLength,
545 						LPVOID PropertyData,
546 						ULONG DataLength
547 					) PURE;
548   STDMETHOD(Get)			(THIS_
549 						REFGUID PropSet,
550 						ULONG Id,
551 						LPVOID InstanceData,
552 						ULONG InstanceLength,
553 						LPVOID PropertyData,
554 						ULONG DataLength,
555 						ULONG *BytesReturned
556 					) PURE;
557   STDMETHOD(QuerySupported)		(THIS_
558 						REFGUID PropSet,
559 						ULONG Id,
560 						ULONG *TypeSupport
561 					) PURE;
562 };
563 #endif /* DECLARE_INTERFACE_ */
564 #endif /* _IKsPropertySet_ */
565 
566 #ifndef _IKsControl_
567 #define _IKsControl_
568 #ifdef DECLARE_INTERFACE_
569 struct IKsControl;
570 #undef INTERFACE
571 #define INTERFACE IKsControl
DECLARE_INTERFACE_(IKsControl,IUnknown)572 DECLARE_INTERFACE_(IKsControl,IUnknown)
573 {
574   STDMETHOD(KsProperty)			(THIS_
575 						PKSPROPERTY Property,
576 						ULONG PropertyLength,
577 						LPVOID PropertyData,
578 						ULONG DataLength,
579 						ULONG *BytesReturned
580 					) PURE;
581   STDMETHOD(KsMethod)			(THIS_
582 						PKSMETHOD Method,
583 						ULONG MethodLength,
584 						LPVOID MethodData,
585 						ULONG DataLength,
586 						ULONG *BytesReturned
587 					) PURE;
588   STDMETHOD(KsEvent)			(THIS_
589 						PKSEVENT Event,
590 						ULONG EventLength,
591 						LPVOID EventData,
592 						ULONG DataLength,
593 						ULONG *BytesReturned
594 					) PURE;
595 };
596 #endif /* DECLARE_INTERFACE_ */
597 #endif /* _IKsControl_ */
598 
599 #ifdef DECLARE_INTERFACE_
600 struct IKsAggregateControl;
601 #undef INTERFACE
602 #define INTERFACE IKsAggregateControl
DECLARE_INTERFACE_(IKsAggregateControl,IUnknown)603 DECLARE_INTERFACE_(IKsAggregateControl,IUnknown)
604 {
605   STDMETHOD(KsAddAggregate)		(THIS_
606 						REFGUID AggregateClass
607 					) PURE;
608   STDMETHOD(KsRemoveAggregate)		(THIS_
609 						REFGUID AggregateClass
610 					) PURE;
611 };
612 #endif /* DECLARE_INTERFACE_ */
613 
614 #ifndef _IKsTopology_
615 #define _IKsTopology_
616 #ifdef DECLARE_INTERFACE_
617 struct IKsTopology;
618 #undef INTERFACE
619 #define INTERFACE IKsTopology
DECLARE_INTERFACE_(IKsTopology,IUnknown)620 DECLARE_INTERFACE_(IKsTopology,IUnknown)
621 {
622   STDMETHOD(CreateNodeInstance)		(THIS_
623 						ULONG NodeId,
624 						ULONG Flags,
625 						ACCESS_MASK DesiredAccess,
626 						IUnknown *UnkOuter,
627 						REFGUID InterfaceId,
628 						LPVOID *Interface
629 					) PURE;
630 };
631 #endif /* DECLARE_INTERFACE_ */
632 #endif /* _IKsTopology_ */
633 
634 #ifdef __cplusplus
635 }
636 #endif
637 
638 #endif /* __KSPROXY__ */
639 
640