Home | History | Annotate | Download | only in include
      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
     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 	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 
     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   __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 
    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_
    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
    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 
    640