PortAudio  2.0
ksproxy.h
Go to the documentation of this file.
1 
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
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
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
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
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
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
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
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
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
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
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
469 DECLARE_INTERFACE_(IKsObject,IUnknown)
470 {
471  STDMETHOD_(HANDLE,KsGetObjectHandle) (THIS) PURE;
472 };
473 
474 struct IKsQualityForwarder;
475 #undef INTERFACE
476 #define INTERFACE IKsQualityForwarder
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
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_
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
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
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
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
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