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