ks.h (118098B)
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 _KS_ 7 #define _KS_ 8 9 #if __GNUC__ >= 3 10 #pragma GCC system_header 11 #endif 12 13 #ifndef __MINGW_EXTENSION 14 #if defined(__GNUC__) || defined(__GNUG__) 15 #define __MINGW_EXTENSION __extension__ 16 #else 17 #define __MINGW_EXTENSION 18 #endif 19 #endif 20 21 #ifdef __TCS__ 22 #define _KS_NO_ANONYMOUS_STRUCTURES_ 1 23 #endif 24 25 #ifdef _KS_NO_ANONYMOUS_STRUCTURES_ 26 #define _KS_ANON_STRUCT(X) struct X 27 #else 28 #define _KS_ANON_STRUCT(X) __MINGW_EXTENSION struct 29 #endif 30 31 #ifndef _NTRTL_ 32 #ifndef DEFINE_GUIDEX 33 #define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name 34 #endif 35 #ifndef STATICGUIDOF 36 #define STATICGUIDOF(guid) STATIC_##guid 37 #endif 38 #endif /* _NTRTL_ */ 39 40 #ifndef SIZEOF_ARRAY 41 #define SIZEOF_ARRAY(ar) (sizeof(ar)/sizeof((ar)[0])) 42 #endif 43 44 #define DEFINE_GUIDSTRUCT(g,n) DEFINE_GUIDEX(n) 45 #define DEFINE_GUIDNAMED(n) n 46 47 #define STATIC_GUID_NULL \ 48 0x00000000L,0x0000,0x0000,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 49 50 DEFINE_GUIDSTRUCT("00000000-0000-0000-0000-000000000000",GUID_NULL); 51 #define GUID_NULL DEFINE_GUIDNAMED(GUID_NULL) 52 53 #define IOCTL_KS_PROPERTY CTL_CODE(FILE_DEVICE_KS,0x000,METHOD_NEITHER,FILE_ANY_ACCESS) 54 #define IOCTL_KS_ENABLE_EVENT CTL_CODE(FILE_DEVICE_KS,0x001,METHOD_NEITHER,FILE_ANY_ACCESS) 55 #define IOCTL_KS_DISABLE_EVENT CTL_CODE(FILE_DEVICE_KS,0x002,METHOD_NEITHER,FILE_ANY_ACCESS) 56 #define IOCTL_KS_METHOD CTL_CODE(FILE_DEVICE_KS,0x003,METHOD_NEITHER,FILE_ANY_ACCESS) 57 #define IOCTL_KS_WRITE_STREAM CTL_CODE(FILE_DEVICE_KS,0x004,METHOD_NEITHER,FILE_WRITE_ACCESS) 58 #define IOCTL_KS_READ_STREAM CTL_CODE(FILE_DEVICE_KS,0x005,METHOD_NEITHER,FILE_READ_ACCESS) 59 #define IOCTL_KS_RESET_STATE CTL_CODE(FILE_DEVICE_KS,0x006,METHOD_NEITHER,FILE_ANY_ACCESS) 60 61 typedef enum { 62 KSRESET_BEGIN, 63 KSRESET_END 64 } KSRESET; 65 66 typedef enum { 67 KSSTATE_STOP, 68 KSSTATE_ACQUIRE, 69 KSSTATE_PAUSE, 70 KSSTATE_RUN 71 } KSSTATE,*PKSSTATE; 72 73 #define KSPRIORITY_LOW 0x00000001 74 #define KSPRIORITY_NORMAL 0x40000000 75 #define KSPRIORITY_HIGH 0x80000000 76 #define KSPRIORITY_EXCLUSIVE 0xFFFFFFFF 77 78 typedef struct { 79 ULONG PriorityClass; 80 ULONG PrioritySubClass; 81 } KSPRIORITY,*PKSPRIORITY; 82 83 typedef struct { 84 __MINGW_EXTENSION union { 85 _KS_ANON_STRUCT(_IDENTIFIER) 86 { 87 GUID Set; 88 ULONG Id; 89 ULONG Flags; 90 }; 91 LONGLONG Alignment; 92 }; 93 } KSIDENTIFIER,*PKSIDENTIFIER; 94 95 typedef KSIDENTIFIER KSPROPERTY,*PKSPROPERTY,KSMETHOD,*PKSMETHOD,KSEVENT,*PKSEVENT; 96 97 #define KSMETHOD_TYPE_NONE 0x00000000 98 #define KSMETHOD_TYPE_READ 0x00000001 99 #define KSMETHOD_TYPE_WRITE 0x00000002 100 #define KSMETHOD_TYPE_MODIFY 0x00000003 101 #define KSMETHOD_TYPE_SOURCE 0x00000004 102 103 #define KSMETHOD_TYPE_SEND 0x00000001 104 #define KSMETHOD_TYPE_SETSUPPORT 0x00000100 105 #define KSMETHOD_TYPE_BASICSUPPORT 0x00000200 106 107 #define KSMETHOD_TYPE_TOPOLOGY 0x10000000 108 109 #define KSPROPERTY_TYPE_GET 0x00000001 110 #define KSPROPERTY_TYPE_SET 0x00000002 111 #define KSPROPERTY_TYPE_SETSUPPORT 0x00000100 112 #define KSPROPERTY_TYPE_BASICSUPPORT 0x00000200 113 #define KSPROPERTY_TYPE_RELATIONS 0x00000400 114 #define KSPROPERTY_TYPE_SERIALIZESET 0x00000800 115 #define KSPROPERTY_TYPE_UNSERIALIZESET 0x00001000 116 #define KSPROPERTY_TYPE_SERIALIZERAW 0x00002000 117 #define KSPROPERTY_TYPE_UNSERIALIZERAW 0x00004000 118 #define KSPROPERTY_TYPE_SERIALIZESIZE 0x00008000 119 #define KSPROPERTY_TYPE_DEFAULTVALUES 0x00010000 120 121 #define KSPROPERTY_TYPE_TOPOLOGY 0x10000000 122 123 typedef struct { 124 KSPROPERTY Property; 125 ULONG NodeId; 126 ULONG Reserved; 127 } KSP_NODE,*PKSP_NODE; 128 129 typedef struct { 130 KSMETHOD Method; 131 ULONG NodeId; 132 ULONG Reserved; 133 } KSM_NODE,*PKSM_NODE; 134 135 typedef struct { 136 KSEVENT Event; 137 ULONG NodeId; 138 ULONG Reserved; 139 } KSE_NODE,*PKSE_NODE; 140 141 #define STATIC_KSPROPTYPESETID_General \ 142 0x97E99BA0L,0xBDEA,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 143 DEFINE_GUIDSTRUCT("97E99BA0-BDEA-11CF-A5D6-28DB04C10000",KSPROPTYPESETID_General); 144 #define KSPROPTYPESETID_General DEFINE_GUIDNAMED(KSPROPTYPESETID_General) 145 146 typedef struct { 147 ULONG Size; 148 ULONG Count; 149 } KSMULTIPLE_ITEM,*PKSMULTIPLE_ITEM; 150 151 typedef struct { 152 ULONG AccessFlags; 153 ULONG DescriptionSize; 154 KSIDENTIFIER PropTypeSet; 155 ULONG MembersListCount; 156 ULONG Reserved; 157 } KSPROPERTY_DESCRIPTION,*PKSPROPERTY_DESCRIPTION; 158 159 #define KSPROPERTY_MEMBER_RANGES 0x00000001 160 #define KSPROPERTY_MEMBER_STEPPEDRANGES 0x00000002 161 #define KSPROPERTY_MEMBER_VALUES 0x00000003 162 163 #define KSPROPERTY_MEMBER_FLAG_DEFAULT 0x00000001 164 #define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_MULTICHANNEL 0x00000002 165 #define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_UNIFORM 0x00000004 166 167 typedef struct { 168 ULONG MembersFlags; 169 ULONG MembersSize; 170 ULONG MembersCount; 171 ULONG Flags; 172 } KSPROPERTY_MEMBERSHEADER,*PKSPROPERTY_MEMBERSHEADER; 173 174 typedef union { 175 _KS_ANON_STRUCT(_SIGNED) 176 { 177 LONG SignedMinimum; 178 LONG SignedMaximum; 179 }; 180 _KS_ANON_STRUCT(_UNSIGNED) 181 { 182 ULONG UnsignedMinimum; 183 ULONG UnsignedMaximum; 184 }; 185 } KSPROPERTY_BOUNDS_LONG,*PKSPROPERTY_BOUNDS_LONG; 186 187 typedef union { 188 _KS_ANON_STRUCT(_SIGNED64) 189 { 190 LONGLONG SignedMinimum; 191 LONGLONG SignedMaximum; 192 }; 193 _KS_ANON_STRUCT(_UNSIGNED64) 194 { 195 DWORDLONG UnsignedMinimum; 196 DWORDLONG UnsignedMaximum; 197 }; 198 } KSPROPERTY_BOUNDS_LONGLONG,*PKSPROPERTY_BOUNDS_LONGLONG; 199 200 typedef struct { 201 ULONG SteppingDelta; 202 ULONG Reserved; 203 KSPROPERTY_BOUNDS_LONG Bounds; 204 } KSPROPERTY_STEPPING_LONG,*PKSPROPERTY_STEPPING_LONG; 205 206 typedef struct { 207 DWORDLONG SteppingDelta; 208 KSPROPERTY_BOUNDS_LONGLONG Bounds; 209 } KSPROPERTY_STEPPING_LONGLONG,*PKSPROPERTY_STEPPING_LONGLONG; 210 211 #if defined(_NTDDK_) 212 typedef struct _KSDEVICE_DESCRIPTOR KSDEVICE_DESCRIPTOR, *PKSDEVICE_DESCRIPTOR; 213 typedef struct _KSDEVICE_DISPATCH KSDEVICE_DISPATCH, *PKSDEVICE_DISPATCH; 214 typedef struct _KSDEVICE KSDEVICE, *PKSDEVICE; 215 typedef struct _KSFILTERFACTORY KSFILTERFACTORY, *PKSFILTERFACTORY; 216 typedef struct _KSFILTER_DESCRIPTOR KSFILTER_DESCRIPTOR, *PKSFILTER_DESCRIPTOR; 217 typedef struct _KSFILTER_DISPATCH KSFILTER_DISPATCH, *PKSFILTER_DISPATCH; 218 typedef struct _KSFILTER KSFILTER, *PKSFILTER; 219 typedef struct _KSPIN_DESCRIPTOR_EX KSPIN_DESCRIPTOR_EX, *PKSPIN_DESCRIPTOR_EX; 220 typedef struct _KSPIN_DISPATCH KSPIN_DISPATCH, *PKSPIN_DISPATCH; 221 typedef struct _KSCLOCK_DISPATCH KSCLOCK_DISPATCH, *PKSCLOCK_DISPATCH; 222 typedef struct _KSALLOCATOR_DISPATCH KSALLOCATOR_DISPATCH, *PKSALLOCATOR_DISPATCH; 223 typedef struct _KSPIN KSPIN, *PKSPIN; 224 typedef struct _KSNODE_DESCRIPTOR KSNODE_DESCRIPTOR, *PKSNODE_DESCRIPTOR; 225 typedef struct _KSSTREAM_POINTER_OFFSET KSSTREAM_POINTER_OFFSET, *PKSSTREAM_POINTER_OFFSET; 226 typedef struct _KSSTREAM_POINTER KSSTREAM_POINTER, *PKSSTREAM_POINTER; 227 typedef struct _KSMAPPING KSMAPPING, *PKSMAPPING; 228 typedef struct _KSPROCESSPIN KSPROCESSPIN, *PKSPROCESSPIN; 229 typedef struct _KSPROCESSPIN_INDEXENTRY KSPROCESSPIN_INDEXENTRY, *PKSPROCESSPIN_INDEXENTRY; 230 #endif /* _NTDDK_ */ 231 232 typedef PVOID PKSWORKER; 233 234 235 typedef struct { 236 ULONG NotificationType; 237 __MINGW_EXTENSION union { 238 struct { 239 HANDLE Event; 240 ULONG_PTR Reserved[2]; 241 } EventHandle; 242 struct { 243 HANDLE Semaphore; 244 ULONG Reserved; 245 LONG Adjustment; 246 } SemaphoreHandle; 247 #if defined(_NTDDK_) 248 struct { 249 PVOID Event; 250 KPRIORITY Increment; 251 ULONG_PTR Reserved; 252 } EventObject; 253 struct { 254 PVOID Semaphore; 255 KPRIORITY Increment; 256 LONG Adjustment; 257 } SemaphoreObject; 258 struct { 259 PKDPC Dpc; 260 ULONG ReferenceCount; 261 ULONG_PTR Reserved; 262 } Dpc; 263 struct { 264 PWORK_QUEUE_ITEM WorkQueueItem; 265 WORK_QUEUE_TYPE WorkQueueType; 266 ULONG_PTR Reserved; 267 } WorkItem; 268 struct { 269 PWORK_QUEUE_ITEM WorkQueueItem; 270 PKSWORKER KsWorkerObject; 271 ULONG_PTR Reserved; 272 } KsWorkItem; 273 #endif /* _NTDDK_ */ 274 struct { 275 PVOID Unused; 276 LONG_PTR Alignment[2]; 277 } Alignment; 278 }; 279 } KSEVENTDATA,*PKSEVENTDATA; 280 281 #define KSEVENTF_EVENT_HANDLE 0x00000001 282 #define KSEVENTF_SEMAPHORE_HANDLE 0x00000002 283 #if defined(_NTDDK_) 284 #define KSEVENTF_EVENT_OBJECT 0x00000004 285 #define KSEVENTF_SEMAPHORE_OBJECT 0x00000008 286 #define KSEVENTF_DPC 0x00000010 287 #define KSEVENTF_WORKITEM 0x00000020 288 #define KSEVENTF_KSWORKITEM 0x00000080 289 #endif /* _NTDDK_ */ 290 291 #define KSEVENT_TYPE_ENABLE 0x00000001 292 #define KSEVENT_TYPE_ONESHOT 0x00000002 293 #define KSEVENT_TYPE_ENABLEBUFFERED 0x00000004 294 #define KSEVENT_TYPE_SETSUPPORT 0x00000100 295 #define KSEVENT_TYPE_BASICSUPPORT 0x00000200 296 #define KSEVENT_TYPE_QUERYBUFFER 0x00000400 297 298 #define KSEVENT_TYPE_TOPOLOGY 0x10000000 299 300 typedef struct { 301 KSEVENT Event; 302 PKSEVENTDATA EventData; 303 PVOID Reserved; 304 } KSQUERYBUFFER,*PKSQUERYBUFFER; 305 306 typedef struct { 307 ULONG Size; 308 ULONG Flags; 309 __MINGW_EXTENSION union { 310 HANDLE ObjectHandle; 311 PVOID ObjectPointer; 312 }; 313 PVOID Reserved; 314 KSEVENT Event; 315 KSEVENTDATA EventData; 316 } KSRELATIVEEVENT; 317 318 #define KSRELATIVEEVENT_FLAG_HANDLE 0x00000001 319 #define KSRELATIVEEVENT_FLAG_POINTER 0x00000002 320 321 typedef struct { 322 KSEVENTDATA EventData; 323 LONGLONG MarkTime; 324 } KSEVENT_TIME_MARK,*PKSEVENT_TIME_MARK; 325 326 typedef struct { 327 KSEVENTDATA EventData; 328 LONGLONG TimeBase; 329 LONGLONG Interval; 330 } KSEVENT_TIME_INTERVAL,*PKSEVENT_TIME_INTERVAL; 331 332 typedef struct { 333 LONGLONG TimeBase; 334 LONGLONG Interval; 335 } KSINTERVAL,*PKSINTERVAL; 336 337 #define STATIC_KSPROPSETID_General \ 338 0x1464EDA5L,0x6A8F,0x11D1,0x9A,0xA7,0x00,0xA0,0xC9,0x22,0x31,0x96 339 DEFINE_GUIDSTRUCT("1464EDA5-6A8F-11D1-9AA7-00A0C9223196",KSPROPSETID_General); 340 #define KSPROPSETID_General DEFINE_GUIDNAMED(KSPROPSETID_General) 341 342 typedef enum { 343 KSPROPERTY_GENERAL_COMPONENTID 344 } KSPROPERTY_GENERAL; 345 346 typedef struct { 347 GUID Manufacturer; 348 GUID Product; 349 GUID Component; 350 GUID Name; 351 ULONG Version; 352 ULONG Revision; 353 } KSCOMPONENTID,*PKSCOMPONENTID; 354 355 #define DEFINE_KSPROPERTY_ITEM_GENERAL_COMPONENTID(Handler) \ 356 DEFINE_KSPROPERTY_ITEM( \ 357 KSPROPERTY_GENERAL_COMPONENTID, \ 358 (Handler), \ 359 sizeof(KSPROPERTY), \ 360 sizeof(KSCOMPONENTID), \ 361 NULL, NULL, 0, NULL, NULL, 0) 362 363 #define STATIC_KSMETHODSETID_StreamIo \ 364 0x65D003CAL,0x1523,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96 365 DEFINE_GUIDSTRUCT("65D003CA-1523-11D2-B27A-00A0C9223196",KSMETHODSETID_StreamIo); 366 #define KSMETHODSETID_StreamIo DEFINE_GUIDNAMED(KSMETHODSETID_StreamIo) 367 368 typedef enum { 369 KSMETHOD_STREAMIO_READ, 370 KSMETHOD_STREAMIO_WRITE 371 } KSMETHOD_STREAMIO; 372 373 #define DEFINE_KSMETHOD_ITEM_STREAMIO_READ(Handler) \ 374 DEFINE_KSMETHOD_ITEM( \ 375 KSMETHOD_STREAMIO_READ, \ 376 KSMETHOD_TYPE_WRITE, \ 377 (Handler), \ 378 sizeof(KSMETHOD), \ 379 0, \ 380 NULL) 381 382 #define DEFINE_KSMETHOD_ITEM_STREAMIO_WRITE(Handler) \ 383 DEFINE_KSMETHOD_ITEM( \ 384 KSMETHOD_STREAMIO_WRITE, \ 385 KSMETHOD_TYPE_READ, \ 386 (Handler), \ 387 sizeof(KSMETHOD), \ 388 0, \ 389 NULL) 390 391 #define STATIC_KSPROPSETID_MediaSeeking \ 392 0xEE904F0CL,0xD09B,0x11D0,0xAB,0xE9,0x00,0xA0,0xC9,0x22,0x31,0x96 393 DEFINE_GUIDSTRUCT("EE904F0C-D09B-11D0-ABE9-00A0C9223196",KSPROPSETID_MediaSeeking); 394 #define KSPROPSETID_MediaSeeking DEFINE_GUIDNAMED(KSPROPSETID_MediaSeeking) 395 396 typedef enum { 397 KSPROPERTY_MEDIASEEKING_CAPABILITIES, 398 KSPROPERTY_MEDIASEEKING_FORMATS, 399 KSPROPERTY_MEDIASEEKING_TIMEFORMAT, 400 KSPROPERTY_MEDIASEEKING_POSITION, 401 KSPROPERTY_MEDIASEEKING_STOPPOSITION, 402 KSPROPERTY_MEDIASEEKING_POSITIONS, 403 KSPROPERTY_MEDIASEEKING_DURATION, 404 KSPROPERTY_MEDIASEEKING_AVAILABLE, 405 KSPROPERTY_MEDIASEEKING_PREROLL, 406 KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT 407 } KSPROPERTY_MEDIASEEKING; 408 409 typedef enum { 410 KS_SEEKING_NoPositioning, 411 KS_SEEKING_AbsolutePositioning, 412 KS_SEEKING_RelativePositioning, 413 KS_SEEKING_IncrementalPositioning, 414 KS_SEEKING_PositioningBitsMask = 0x3, 415 KS_SEEKING_SeekToKeyFrame, 416 KS_SEEKING_ReturnTime = 0x8 417 } KS_SEEKING_FLAGS; 418 419 typedef enum { 420 KS_SEEKING_CanSeekAbsolute = 0x1, 421 KS_SEEKING_CanSeekForwards = 0x2, 422 KS_SEEKING_CanSeekBackwards = 0x4, 423 KS_SEEKING_CanGetCurrentPos = 0x8, 424 KS_SEEKING_CanGetStopPos = 0x10, 425 KS_SEEKING_CanGetDuration = 0x20, 426 KS_SEEKING_CanPlayBackwards = 0x40 427 } KS_SEEKING_CAPABILITIES; 428 429 typedef struct { 430 LONGLONG Current; 431 LONGLONG Stop; 432 KS_SEEKING_FLAGS CurrentFlags; 433 KS_SEEKING_FLAGS StopFlags; 434 } KSPROPERTY_POSITIONS,*PKSPROPERTY_POSITIONS; 435 436 typedef struct { 437 LONGLONG Earliest; 438 LONGLONG Latest; 439 } KSPROPERTY_MEDIAAVAILABLE,*PKSPROPERTY_MEDIAAVAILABLE; 440 441 typedef struct { 442 KSPROPERTY Property; 443 GUID SourceFormat; 444 GUID TargetFormat; 445 LONGLONG Time; 446 } KSP_TIMEFORMAT,*PKSP_TIMEFORMAT; 447 448 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CAPABILITIES(Handler) \ 449 DEFINE_KSPROPERTY_ITEM( \ 450 KSPROPERTY_MEDIASEEKING_CAPABILITIES, \ 451 (Handler), \ 452 sizeof(KSPROPERTY), \ 453 sizeof(KS_SEEKING_CAPABILITIES), \ 454 NULL, NULL, 0, NULL, NULL, 0) 455 456 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_FORMATS(Handler) \ 457 DEFINE_KSPROPERTY_ITEM( \ 458 KSPROPERTY_MEDIASEEKING_FORMATS, \ 459 (Handler), \ 460 sizeof(KSPROPERTY), \ 461 0, \ 462 NULL, NULL, 0, NULL, NULL, 0) 463 464 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_TIMEFORMAT(GetHandler,SetHandler) \ 465 DEFINE_KSPROPERTY_ITEM( \ 466 KSPROPERTY_MEDIASEEKING_TIMEFORMAT, \ 467 (GetHandler), \ 468 sizeof(KSPROPERTY), \ 469 sizeof(GUID), \ 470 (SetHandler), \ 471 NULL, 0, NULL, NULL, 0) 472 473 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITION(Handler) \ 474 DEFINE_KSPROPERTY_ITEM( \ 475 KSPROPERTY_MEDIASEEKING_POSITION, \ 476 (Handler), \ 477 sizeof(KSPROPERTY), \ 478 sizeof(LONGLONG), \ 479 NULL, NULL, 0, NULL, NULL, 0) 480 481 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_STOPPOSITION(Handler) \ 482 DEFINE_KSPROPERTY_ITEM( \ 483 KSPROPERTY_MEDIASEEKING_STOPPOSITION, \ 484 (Handler), \ 485 sizeof(KSPROPERTY), \ 486 sizeof(LONGLONG), \ 487 NULL, NULL, 0, NULL, NULL, 0) 488 489 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITIONS(Handler) \ 490 DEFINE_KSPROPERTY_ITEM( \ 491 KSPROPERTY_MEDIASEEKING_POSITIONS, \ 492 NULL, \ 493 sizeof(KSPROPERTY), \ 494 sizeof(KSPROPERTY_POSITIONS), \ 495 (Handler), \ 496 NULL, 0, NULL, NULL, 0) 497 498 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_DURATION(Handler) \ 499 DEFINE_KSPROPERTY_ITEM( \ 500 KSPROPERTY_MEDIASEEKING_DURATION, \ 501 (Handler), \ 502 sizeof(KSPROPERTY), \ 503 sizeof(LONGLONG), \ 504 NULL, NULL, 0, NULL, NULL, 0) 505 506 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_AVAILABLE(Handler) \ 507 DEFINE_KSPROPERTY_ITEM( \ 508 KSPROPERTY_MEDIASEEKING_AVAILABLE, \ 509 (Handler), \ 510 sizeof(KSPROPERTY), \ 511 sizeof(KSPROPERTY_MEDIAAVAILABLE), \ 512 NULL, NULL, 0, NULL, NULL, 0) 513 514 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_PREROLL(Handler) \ 515 DEFINE_KSPROPERTY_ITEM( \ 516 KSPROPERTY_MEDIASEEKING_PREROLL, \ 517 (Handler), \ 518 sizeof(KSPROPERTY), \ 519 sizeof(LONGLONG), \ 520 NULL, NULL, 0, NULL, NULL, 0) 521 522 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CONVERTTIMEFORMAT(Handler) \ 523 DEFINE_KSPROPERTY_ITEM( \ 524 KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT, \ 525 (Handler), \ 526 sizeof(KSP_TIMEFORMAT), \ 527 sizeof(LONGLONG), \ 528 NULL, NULL, 0, NULL, NULL, 0) 529 530 #define STATIC_KSPROPSETID_Topology \ 531 0x720D4AC0L,0x7533,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 532 DEFINE_GUIDSTRUCT("720D4AC0-7533-11D0-A5D6-28DB04C10000",KSPROPSETID_Topology); 533 #define KSPROPSETID_Topology DEFINE_GUIDNAMED(KSPROPSETID_Topology) 534 535 typedef enum { 536 KSPROPERTY_TOPOLOGY_CATEGORIES, 537 KSPROPERTY_TOPOLOGY_NODES, 538 KSPROPERTY_TOPOLOGY_CONNECTIONS, 539 KSPROPERTY_TOPOLOGY_NAME 540 } KSPROPERTY_TOPOLOGY; 541 542 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler) \ 543 DEFINE_KSPROPERTY_ITEM( \ 544 KSPROPERTY_TOPOLOGY_CATEGORIES, \ 545 (Handler), \ 546 sizeof(KSPROPERTY), \ 547 0, \ 548 NULL, NULL, 0,NULL, NULL, 0) 549 550 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler) \ 551 DEFINE_KSPROPERTY_ITEM( \ 552 KSPROPERTY_TOPOLOGY_NODES, \ 553 (Handler), \ 554 sizeof(KSPROPERTY), \ 555 0, \ 556 NULL, NULL, 0, NULL, NULL, 0) 557 558 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler) \ 559 DEFINE_KSPROPERTY_ITEM( \ 560 KSPROPERTY_TOPOLOGY_CONNECTIONS, \ 561 (Handler), \ 562 sizeof(KSPROPERTY), \ 563 0, \ 564 NULL, NULL, 0, NULL, NULL, 0) 565 566 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler) \ 567 DEFINE_KSPROPERTY_ITEM( \ 568 KSPROPERTY_TOPOLOGY_NAME, \ 569 (Handler), \ 570 sizeof(KSP_NODE), \ 571 0, \ 572 NULL, NULL, 0, NULL, NULL, 0) 573 574 #define DEFINE_KSPROPERTY_TOPOLOGYSET(TopologySet,Handler) \ 575 DEFINE_KSPROPERTY_TABLE(TopologySet) { \ 576 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler), \ 577 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler), \ 578 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler), \ 579 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler) \ 580 } 581 582 #define STATIC_KSCATEGORY_BRIDGE \ 583 0x085AFF00L,0x62CE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 584 DEFINE_GUIDSTRUCT("085AFF00-62CE-11CF-A5D6-28DB04C10000",KSCATEGORY_BRIDGE); 585 #define KSCATEGORY_BRIDGE DEFINE_GUIDNAMED(KSCATEGORY_BRIDGE) 586 587 #define STATIC_KSCATEGORY_CAPTURE \ 588 0x65E8773DL,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96 589 DEFINE_GUIDSTRUCT("65E8773D-8F56-11D0-A3B9-00A0C9223196",KSCATEGORY_CAPTURE); 590 #define KSCATEGORY_CAPTURE DEFINE_GUIDNAMED(KSCATEGORY_CAPTURE) 591 592 #define STATIC_KSCATEGORY_RENDER \ 593 0x65E8773EL,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96 594 DEFINE_GUIDSTRUCT("65E8773E-8F56-11D0-A3B9-00A0C9223196",KSCATEGORY_RENDER); 595 #define KSCATEGORY_RENDER DEFINE_GUIDNAMED(KSCATEGORY_RENDER) 596 597 #define STATIC_KSCATEGORY_MIXER \ 598 0xAD809C00L,0x7B88,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 599 DEFINE_GUIDSTRUCT("AD809C00-7B88-11D0-A5D6-28DB04C10000",KSCATEGORY_MIXER); 600 #define KSCATEGORY_MIXER DEFINE_GUIDNAMED(KSCATEGORY_MIXER) 601 602 #define STATIC_KSCATEGORY_SPLITTER \ 603 0x0A4252A0L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 604 DEFINE_GUIDSTRUCT("0A4252A0-7E70-11D0-A5D6-28DB04C10000",KSCATEGORY_SPLITTER); 605 #define KSCATEGORY_SPLITTER DEFINE_GUIDNAMED(KSCATEGORY_SPLITTER) 606 607 #define STATIC_KSCATEGORY_DATACOMPRESSOR \ 608 0x1E84C900L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 609 DEFINE_GUIDSTRUCT("1E84C900-7E70-11D0-A5D6-28DB04C10000",KSCATEGORY_DATACOMPRESSOR); 610 #define KSCATEGORY_DATACOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATACOMPRESSOR) 611 612 #define STATIC_KSCATEGORY_DATADECOMPRESSOR \ 613 0x2721AE20L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 614 DEFINE_GUIDSTRUCT("2721AE20-7E70-11D0-A5D6-28DB04C10000",KSCATEGORY_DATADECOMPRESSOR); 615 #define KSCATEGORY_DATADECOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATADECOMPRESSOR) 616 617 #define STATIC_KSCATEGORY_DATATRANSFORM \ 618 0x2EB07EA0L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 619 DEFINE_GUIDSTRUCT("2EB07EA0-7E70-11D0-A5D6-28DB04C10000",KSCATEGORY_DATATRANSFORM); 620 #define KSCATEGORY_DATATRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_DATATRANSFORM) 621 622 #define STATIC_KSCATEGORY_COMMUNICATIONSTRANSFORM \ 623 0xCF1DDA2CL,0x9743,0x11D0,0xA3,0xEE,0x00,0xA0,0xC9,0x22,0x31,0x96 624 DEFINE_GUIDSTRUCT("CF1DDA2C-9743-11D0-A3EE-00A0C9223196",KSCATEGORY_COMMUNICATIONSTRANSFORM); 625 #define KSCATEGORY_COMMUNICATIONSTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_COMMUNICATIONSTRANSFORM) 626 627 #define STATIC_KSCATEGORY_INTERFACETRANSFORM \ 628 0xCF1DDA2DL,0x9743,0x11D0,0xA3,0xEE,0x00,0xA0,0xC9,0x22,0x31,0x96 629 DEFINE_GUIDSTRUCT("CF1DDA2D-9743-11D0-A3EE-00A0C9223196",KSCATEGORY_INTERFACETRANSFORM); 630 #define KSCATEGORY_INTERFACETRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_INTERFACETRANSFORM) 631 632 #define STATIC_KSCATEGORY_MEDIUMTRANSFORM \ 633 0xCF1DDA2EL,0x9743,0x11D0,0xA3,0xEE,0x00,0xA0,0xC9,0x22,0x31,0x96 634 DEFINE_GUIDSTRUCT("CF1DDA2E-9743-11D0-A3EE-00A0C9223196",KSCATEGORY_MEDIUMTRANSFORM); 635 #define KSCATEGORY_MEDIUMTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_MEDIUMTRANSFORM) 636 637 #define STATIC_KSCATEGORY_FILESYSTEM \ 638 0x760FED5EL,0x9357,0x11D0,0xA3,0xCC,0x00,0xA0,0xC9,0x22,0x31,0x96 639 DEFINE_GUIDSTRUCT("760FED5E-9357-11D0-A3CC-00A0C9223196",KSCATEGORY_FILESYSTEM); 640 #define KSCATEGORY_FILESYSTEM DEFINE_GUIDNAMED(KSCATEGORY_FILESYSTEM) 641 642 #define STATIC_KSCATEGORY_CLOCK \ 643 0x53172480L,0x4791,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 644 DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000",KSCATEGORY_CLOCK); 645 #define KSCATEGORY_CLOCK DEFINE_GUIDNAMED(KSCATEGORY_CLOCK) 646 647 #define STATIC_KSCATEGORY_PROXY \ 648 0x97EBAACAL,0x95BD,0x11D0,0xA3,0xEA,0x00,0xA0,0xC9,0x22,0x31,0x96 649 DEFINE_GUIDSTRUCT("97EBAACA-95BD-11D0-A3EA-00A0C9223196",KSCATEGORY_PROXY); 650 #define KSCATEGORY_PROXY DEFINE_GUIDNAMED(KSCATEGORY_PROXY) 651 652 #define STATIC_KSCATEGORY_QUALITY \ 653 0x97EBAACBL,0x95BD,0x11D0,0xA3,0xEA,0x00,0xA0,0xC9,0x22,0x31,0x96 654 DEFINE_GUIDSTRUCT("97EBAACB-95BD-11D0-A3EA-00A0C9223196",KSCATEGORY_QUALITY); 655 #define KSCATEGORY_QUALITY DEFINE_GUIDNAMED(KSCATEGORY_QUALITY) 656 657 typedef struct { 658 ULONG FromNode; 659 ULONG FromNodePin; 660 ULONG ToNode; 661 ULONG ToNodePin; 662 } KSTOPOLOGY_CONNECTION,*PKSTOPOLOGY_CONNECTION; 663 664 typedef struct { 665 ULONG CategoriesCount; 666 const GUID *Categories; 667 ULONG TopologyNodesCount; 668 const GUID *TopologyNodes; 669 ULONG TopologyConnectionsCount; 670 const KSTOPOLOGY_CONNECTION *TopologyConnections; 671 const GUID *TopologyNodesNames; 672 ULONG Reserved; 673 } KSTOPOLOGY,*PKSTOPOLOGY; 674 675 #define KSFILTER_NODE ((ULONG)-1) 676 #define KSALL_NODES ((ULONG)-1) 677 678 typedef struct { 679 ULONG CreateFlags; 680 ULONG Node; 681 } KSNODE_CREATE,*PKSNODE_CREATE; 682 683 #define STATIC_KSTIME_FORMAT_NONE STATIC_GUID_NULL 684 #define KSTIME_FORMAT_NONE GUID_NULL 685 686 #define STATIC_KSTIME_FORMAT_FRAME \ 687 0x7b785570L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6 688 DEFINE_GUIDSTRUCT("7b785570-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_FRAME); 689 #define KSTIME_FORMAT_FRAME DEFINE_GUIDNAMED(KSTIME_FORMAT_FRAME) 690 691 #define STATIC_KSTIME_FORMAT_BYTE \ 692 0x7b785571L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6 693 DEFINE_GUIDSTRUCT("7b785571-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_BYTE); 694 #define KSTIME_FORMAT_BYTE DEFINE_GUIDNAMED(KSTIME_FORMAT_BYTE) 695 696 #define STATIC_KSTIME_FORMAT_SAMPLE \ 697 0x7b785572L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6 698 DEFINE_GUIDSTRUCT("7b785572-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_SAMPLE); 699 #define KSTIME_FORMAT_SAMPLE DEFINE_GUIDNAMED(KSTIME_FORMAT_SAMPLE) 700 701 #define STATIC_KSTIME_FORMAT_FIELD \ 702 0x7b785573L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6 703 DEFINE_GUIDSTRUCT("7b785573-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_FIELD); 704 #define KSTIME_FORMAT_FIELD DEFINE_GUIDNAMED(KSTIME_FORMAT_FIELD) 705 706 #define STATIC_KSTIME_FORMAT_MEDIA_TIME \ 707 0x7b785574L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6 708 DEFINE_GUIDSTRUCT("7b785574-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_MEDIA_TIME); 709 #define KSTIME_FORMAT_MEDIA_TIME DEFINE_GUIDNAMED(KSTIME_FORMAT_MEDIA_TIME) 710 711 typedef KSIDENTIFIER KSPIN_INTERFACE,*PKSPIN_INTERFACE; 712 713 #define STATIC_KSINTERFACESETID_Standard \ 714 0x1A8766A0L,0x62CE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 715 DEFINE_GUIDSTRUCT("1A8766A0-62CE-11CF-A5D6-28DB04C10000",KSINTERFACESETID_Standard); 716 #define KSINTERFACESETID_Standard DEFINE_GUIDNAMED(KSINTERFACESETID_Standard) 717 718 typedef enum { 719 KSINTERFACE_STANDARD_STREAMING, 720 KSINTERFACE_STANDARD_LOOPED_STREAMING, 721 KSINTERFACE_STANDARD_CONTROL 722 } KSINTERFACE_STANDARD; 723 724 #define STATIC_KSINTERFACESETID_FileIo \ 725 0x8C6F932CL,0xE771,0x11D0,0xB8,0xFF,0x00,0xA0,0xC9,0x22,0x31,0x96 726 DEFINE_GUIDSTRUCT("8C6F932C-E771-11D0-B8FF-00A0C9223196",KSINTERFACESETID_FileIo); 727 #define KSINTERFACESETID_FileIo DEFINE_GUIDNAMED(KSINTERFACESETID_FileIo) 728 729 typedef enum { 730 KSINTERFACE_FILEIO_STREAMING 731 } KSINTERFACE_FILEIO; 732 733 #define KSMEDIUM_TYPE_ANYINSTANCE 0 734 735 #define STATIC_KSMEDIUMSETID_Standard \ 736 0x4747B320L,0x62CE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 737 DEFINE_GUIDSTRUCT("4747B320-62CE-11CF-A5D6-28DB04C10000",KSMEDIUMSETID_Standard); 738 #define KSMEDIUMSETID_Standard DEFINE_GUIDNAMED(KSMEDIUMSETID_Standard) 739 740 #define KSMEDIUM_STANDARD_DEVIO KSMEDIUM_TYPE_ANYINSTANCE 741 742 #define STATIC_KSPROPSETID_Pin \ 743 0x8C134960L,0x51AD,0x11CF,0x87,0x8A,0x94,0xF8,0x01,0xC1,0x00,0x00 744 DEFINE_GUIDSTRUCT("8C134960-51AD-11CF-878A-94F801C10000",KSPROPSETID_Pin); 745 #define KSPROPSETID_Pin DEFINE_GUIDNAMED(KSPROPSETID_Pin) 746 747 typedef enum { 748 KSPROPERTY_PIN_CINSTANCES, 749 KSPROPERTY_PIN_CTYPES, 750 KSPROPERTY_PIN_DATAFLOW, 751 KSPROPERTY_PIN_DATARANGES, 752 KSPROPERTY_PIN_DATAINTERSECTION, 753 KSPROPERTY_PIN_INTERFACES, 754 KSPROPERTY_PIN_MEDIUMS, 755 KSPROPERTY_PIN_COMMUNICATION, 756 KSPROPERTY_PIN_GLOBALCINSTANCES, 757 KSPROPERTY_PIN_NECESSARYINSTANCES, 758 KSPROPERTY_PIN_PHYSICALCONNECTION, 759 KSPROPERTY_PIN_CATEGORY, 760 KSPROPERTY_PIN_NAME, 761 KSPROPERTY_PIN_CONSTRAINEDDATARANGES, 762 KSPROPERTY_PIN_PROPOSEDATAFORMAT 763 } KSPROPERTY_PIN; 764 765 typedef struct { 766 KSPROPERTY Property; 767 ULONG PinId; 768 ULONG Reserved; 769 } KSP_PIN,*PKSP_PIN; 770 771 #define KSINSTANCE_INDETERMINATE ((ULONG)-1) 772 773 typedef struct { 774 ULONG PossibleCount; 775 ULONG CurrentCount; 776 } KSPIN_CINSTANCES,*PKSPIN_CINSTANCES; 777 778 typedef enum { 779 KSPIN_DATAFLOW_IN = 1, 780 KSPIN_DATAFLOW_OUT 781 } KSPIN_DATAFLOW,*PKSPIN_DATAFLOW; 782 783 #define KSDATAFORMAT_BIT_TEMPORAL_COMPRESSION 0 784 #define KSDATAFORMAT_TEMPORAL_COMPRESSION (1 << KSDATAFORMAT_BIT_TEMPORAL_COMPRESSION) 785 #define KSDATAFORMAT_BIT_ATTRIBUTES 1 786 #define KSDATAFORMAT_ATTRIBUTES (1 << KSDATAFORMAT_BIT_ATTRIBUTES) 787 788 #define KSDATARANGE_BIT_ATTRIBUTES 1 789 #define KSDATARANGE_ATTRIBUTES (1 << KSDATARANGE_BIT_ATTRIBUTES) 790 #define KSDATARANGE_BIT_REQUIRED_ATTRIBUTES 2 791 #define KSDATARANGE_REQUIRED_ATTRIBUTES (1 << KSDATARANGE_BIT_REQUIRED_ATTRIBUTES) 792 793 typedef union { 794 __MINGW_EXTENSION struct { 795 ULONG FormatSize; 796 ULONG Flags; 797 ULONG SampleSize; 798 ULONG Reserved; 799 GUID MajorFormat; 800 GUID SubFormat; 801 GUID Specifier; 802 }; 803 LONGLONG Alignment; 804 } KSDATAFORMAT,*PKSDATAFORMAT,KSDATARANGE,*PKSDATARANGE; 805 806 #define KSATTRIBUTE_REQUIRED 0x00000001 807 808 typedef struct { 809 ULONG Size; 810 ULONG Flags; 811 GUID Attribute; 812 } KSATTRIBUTE,*PKSATTRIBUTE; 813 814 #if defined(_NTDDK_) 815 typedef struct { 816 ULONG Count; 817 PKSATTRIBUTE *Attributes; 818 } KSATTRIBUTE_LIST,*PKSATTRIBUTE_LIST; 819 #endif /* _NTDDK_ */ 820 821 typedef enum { 822 KSPIN_COMMUNICATION_NONE, 823 KSPIN_COMMUNICATION_SINK, 824 KSPIN_COMMUNICATION_SOURCE, 825 KSPIN_COMMUNICATION_BOTH, 826 KSPIN_COMMUNICATION_BRIDGE 827 } KSPIN_COMMUNICATION,*PKSPIN_COMMUNICATION; 828 829 typedef KSIDENTIFIER KSPIN_MEDIUM,*PKSPIN_MEDIUM; 830 831 typedef struct { 832 KSPIN_INTERFACE Interface; 833 KSPIN_MEDIUM Medium; 834 ULONG PinId; 835 HANDLE PinToHandle; 836 KSPRIORITY Priority; 837 } KSPIN_CONNECT,*PKSPIN_CONNECT; 838 839 typedef struct { 840 ULONG Size; 841 ULONG Pin; 842 WCHAR SymbolicLinkName[1]; 843 } KSPIN_PHYSICALCONNECTION,*PKSPIN_PHYSICALCONNECTION; 844 845 #if defined(_NTDDK_) 846 typedef NTSTATUS (*PFNKSINTERSECTHANDLER) ( PIRP Irp, PKSP_PIN Pin, 847 PKSDATARANGE DataRange, 848 PVOID Data); 849 typedef NTSTATUS (*PFNKSINTERSECTHANDLEREX)(PVOID Context, PIRP Irp, 850 PKSP_PIN Pin, 851 PKSDATARANGE DataRange, 852 PKSDATARANGE MatchingDataRange, 853 ULONG DataBufferSize, 854 PVOID Data, 855 PULONG DataSize); 856 #endif /* _NTDDK_ */ 857 858 #define DEFINE_KSPIN_INTERFACE_TABLE(tablename) \ 859 const KSPIN_INTERFACE tablename[] = 860 861 #define DEFINE_KSPIN_INTERFACE_ITEM(guid,_interFace) \ 862 { \ 863 STATICGUIDOF(guid), \ 864 (_interFace), \ 865 0 \ 866 } 867 868 #define DEFINE_KSPIN_MEDIUM_TABLE(tablename) \ 869 const KSPIN_MEDIUM tablename[] = 870 871 #define DEFINE_KSPIN_MEDIUM_ITEM(guid,medium) \ 872 DEFINE_KSPIN_INTERFACE_ITEM(guid,medium) 873 874 #define DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(Handler) \ 875 DEFINE_KSPROPERTY_ITEM( \ 876 KSPROPERTY_PIN_CINSTANCES, \ 877 (Handler), \ 878 sizeof(KSP_PIN), \ 879 sizeof(KSPIN_CINSTANCES), \ 880 NULL, NULL, 0, NULL, NULL, 0) 881 882 #define DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(Handler) \ 883 DEFINE_KSPROPERTY_ITEM( \ 884 KSPROPERTY_PIN_CTYPES, \ 885 (Handler), \ 886 sizeof(KSPROPERTY), \ 887 sizeof(ULONG), \ 888 NULL, NULL, 0, NULL, NULL, 0) 889 890 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(Handler) \ 891 DEFINE_KSPROPERTY_ITEM( \ 892 KSPROPERTY_PIN_DATAFLOW, \ 893 (Handler), \ 894 sizeof(KSP_PIN), \ 895 sizeof(KSPIN_DATAFLOW), \ 896 NULL, NULL, 0, NULL, NULL, 0) 897 898 #define DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(Handler) \ 899 DEFINE_KSPROPERTY_ITEM( \ 900 KSPROPERTY_PIN_DATARANGES, \ 901 (Handler), \ 902 sizeof(KSP_PIN), \ 903 0, \ 904 NULL, NULL, 0, NULL, NULL, 0) 905 906 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(Handler) \ 907 DEFINE_KSPROPERTY_ITEM( \ 908 KSPROPERTY_PIN_DATAINTERSECTION, \ 909 (Handler), \ 910 sizeof(KSP_PIN) + sizeof(KSMULTIPLE_ITEM),\ 911 0, \ 912 NULL, NULL, 0, NULL, NULL, 0) 913 914 #define DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(Handler) \ 915 DEFINE_KSPROPERTY_ITEM( \ 916 KSPROPERTY_PIN_INTERFACES, \ 917 (Handler), \ 918 sizeof(KSP_PIN), \ 919 0, \ 920 NULL, NULL, 0, NULL, NULL, 0) 921 922 #define DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(Handler) \ 923 DEFINE_KSPROPERTY_ITEM( \ 924 KSPROPERTY_PIN_MEDIUMS, \ 925 (Handler), \ 926 sizeof(KSP_PIN), \ 927 0, \ 928 NULL, NULL, 0, NULL, NULL, 0) 929 930 #define DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(Handler) \ 931 DEFINE_KSPROPERTY_ITEM( \ 932 KSPROPERTY_PIN_COMMUNICATION, \ 933 (Handler), \ 934 sizeof(KSP_PIN), \ 935 sizeof(KSPIN_COMMUNICATION), \ 936 NULL, NULL, 0, NULL, NULL, 0) 937 938 #define DEFINE_KSPROPERTY_ITEM_PIN_GLOBALCINSTANCES(Handler) \ 939 DEFINE_KSPROPERTY_ITEM( \ 940 KSPROPERTY_PIN_GLOBALCINSTANCES, \ 941 (Handler), \ 942 sizeof(KSP_PIN), \ 943 sizeof(KSPIN_CINSTANCES), \ 944 NULL, NULL, 0, NULL, NULL, 0) 945 946 #define DEFINE_KSPROPERTY_ITEM_PIN_NECESSARYINSTANCES(Handler) \ 947 DEFINE_KSPROPERTY_ITEM( \ 948 KSPROPERTY_PIN_NECESSARYINSTANCES, \ 949 (Handler), \ 950 sizeof(KSP_PIN), \ 951 sizeof(ULONG), \ 952 NULL, NULL, 0, NULL, NULL, 0) 953 954 #define DEFINE_KSPROPERTY_ITEM_PIN_PHYSICALCONNECTION(Handler) \ 955 DEFINE_KSPROPERTY_ITEM( \ 956 KSPROPERTY_PIN_PHYSICALCONNECTION, \ 957 (Handler), \ 958 sizeof(KSP_PIN), \ 959 0, \ 960 NULL, NULL, 0, NULL, NULL, 0) 961 962 #define DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(Handler) \ 963 DEFINE_KSPROPERTY_ITEM( \ 964 KSPROPERTY_PIN_CATEGORY, \ 965 (Handler), \ 966 sizeof(KSP_PIN), \ 967 sizeof(GUID), \ 968 NULL, NULL, 0, NULL, NULL, 0) 969 970 #define DEFINE_KSPROPERTY_ITEM_PIN_NAME(Handler) \ 971 DEFINE_KSPROPERTY_ITEM( \ 972 KSPROPERTY_PIN_NAME, \ 973 (Handler), \ 974 sizeof(KSP_PIN), \ 975 0, \ 976 NULL, NULL, 0, NULL, NULL, 0) 977 978 #define DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(Handler) \ 979 DEFINE_KSPROPERTY_ITEM( \ 980 KSPROPERTY_PIN_CONSTRAINEDDATARANGES, \ 981 (Handler), \ 982 sizeof(KSP_PIN), \ 983 0, \ 984 NULL, NULL, 0, NULL, NULL, 0) 985 986 #define DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(Handler) \ 987 DEFINE_KSPROPERTY_ITEM( \ 988 KSPROPERTY_PIN_PROPOSEDATAFORMAT, \ 989 NULL, \ 990 sizeof(KSP_PIN), \ 991 sizeof(KSDATAFORMAT), \ 992 (Handler), NULL, 0, NULL, NULL, 0) 993 994 #define DEFINE_KSPROPERTY_PINSET(PinSet,PropGeneral,PropInstances,PropIntersection) \ 995 DEFINE_KSPROPERTY_TABLE(PinSet) { \ 996 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances), \ 997 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral), \ 998 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral), \ 999 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral), \ 1000 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection), \ 1001 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral), \ 1002 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral), \ 1003 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral), \ 1004 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral), \ 1005 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral) \ 1006 } 1007 1008 #define DEFINE_KSPROPERTY_PINSETCONSTRAINED(PinSet,PropGeneral,PropInstances,PropIntersection) \ 1009 DEFINE_KSPROPERTY_TABLE(PinSet) { \ 1010 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances), \ 1011 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral), \ 1012 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral), \ 1013 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral), \ 1014 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection), \ 1015 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral), \ 1016 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral), \ 1017 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral), \ 1018 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral), \ 1019 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral), \ 1020 DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral) \ 1021 } 1022 1023 #define STATIC_KSNAME_Filter \ 1024 0x9b365890L,0x165f,0x11d0,0xa1,0x95,0x00,0x20,0xaf,0xd1,0x56,0xe4 1025 DEFINE_GUIDSTRUCT("9b365890-165f-11d0-a195-0020afd156e4",KSNAME_Filter); 1026 #define KSNAME_Filter DEFINE_GUIDNAMED(KSNAME_Filter) 1027 1028 #define KSSTRING_Filter L"{9B365890-165F-11D0-A195-0020AFD156E4}" 1029 1030 #define STATIC_KSNAME_Pin \ 1031 0x146F1A80L,0x4791,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 1032 DEFINE_GUIDSTRUCT("146F1A80-4791-11D0-A5D6-28DB04C10000",KSNAME_Pin); 1033 #define KSNAME_Pin DEFINE_GUIDNAMED(KSNAME_Pin) 1034 1035 #define KSSTRING_Pin L"{146F1A80-4791-11D0-A5D6-28DB04C10000}" 1036 1037 #define STATIC_KSNAME_Clock \ 1038 0x53172480L,0x4791,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 1039 DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000",KSNAME_Clock); 1040 #define KSNAME_Clock DEFINE_GUIDNAMED(KSNAME_Clock) 1041 1042 #define KSSTRING_Clock L"{53172480-4791-11D0-A5D6-28DB04C10000}" 1043 1044 #define STATIC_KSNAME_Allocator \ 1045 0x642F5D00L,0x4791,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 1046 DEFINE_GUIDSTRUCT("642F5D00-4791-11D0-A5D6-28DB04C10000",KSNAME_Allocator); 1047 #define KSNAME_Allocator DEFINE_GUIDNAMED(KSNAME_Allocator) 1048 1049 #define KSSTRING_Allocator L"{642F5D00-4791-11D0-A5D6-28DB04C10000}" 1050 1051 #define KSSTRING_AllocatorEx L"{091BB63B-603F-11D1-B067-00A0C9062802}" 1052 1053 #define STATIC_KSNAME_TopologyNode \ 1054 0x0621061AL,0xEE75,0x11D0,0xB9,0x15,0x00,0xA0,0xC9,0x22,0x31,0x96 1055 DEFINE_GUIDSTRUCT("0621061A-EE75-11D0-B915-00A0C9223196",KSNAME_TopologyNode); 1056 #define KSNAME_TopologyNode DEFINE_GUIDNAMED(KSNAME_TopologyNode) 1057 1058 #define KSSTRING_TopologyNode L"{0621061A-EE75-11D0-B915-00A0C9223196}" 1059 1060 #if defined(_NTDDK_) 1061 typedef struct { 1062 ULONG InterfacesCount; 1063 const KSPIN_INTERFACE *Interfaces; 1064 ULONG MediumsCount; 1065 const KSPIN_MEDIUM *Mediums; 1066 ULONG DataRangesCount; 1067 const PKSDATARANGE *DataRanges; 1068 KSPIN_DATAFLOW DataFlow; 1069 KSPIN_COMMUNICATION Communication; 1070 const GUID *Category; 1071 const GUID *Name; 1072 __MINGW_EXTENSION union { 1073 LONGLONG Reserved; 1074 __MINGW_EXTENSION struct { 1075 ULONG ConstrainedDataRangesCount; 1076 PKSDATARANGE *ConstrainedDataRanges; 1077 }; 1078 }; 1079 } KSPIN_DESCRIPTOR, *PKSPIN_DESCRIPTOR; 1080 typedef const KSPIN_DESCRIPTOR *PCKSPIN_DESCRIPTOR; 1081 1082 #define DEFINE_KSPIN_DESCRIPTOR_TABLE(tablename) \ 1083 const KSPIN_DESCRIPTOR tablename[] = 1084 1085 #define DEFINE_KSPIN_DESCRIPTOR_ITEM(InterfacesCount,Interfaces,MediumsCount, Mediums,DataRangesCount,DataRanges,DataFlow,Communication)\ 1086 { \ 1087 InterfacesCount, Interfaces, MediumsCount, Mediums, \ 1088 DataRangesCount, DataRanges, DataFlow, Communication, \ 1089 NULL, NULL, 0 \ 1090 } 1091 1092 #define DEFINE_KSPIN_DESCRIPTOR_ITEMEX(InterfacesCount,Interfaces,MediumsCount,Mediums,DataRangesCount,DataRanges,DataFlow,Communication,Category,Name)\ 1093 { \ 1094 InterfacesCount, Interfaces, MediumsCount, Mediums, \ 1095 DataRangesCount, DataRanges, DataFlow, Communication, \ 1096 Category, Name, 0 \ 1097 } 1098 #endif /* _NTDDK_ */ 1099 1100 #define STATIC_KSDATAFORMAT_TYPE_WILDCARD STATIC_GUID_NULL 1101 #define KSDATAFORMAT_TYPE_WILDCARD GUID_NULL 1102 1103 #define STATIC_KSDATAFORMAT_SUBTYPE_WILDCARD STATIC_GUID_NULL 1104 #define KSDATAFORMAT_SUBTYPE_WILDCARD GUID_NULL 1105 1106 #define STATIC_KSDATAFORMAT_TYPE_STREAM \ 1107 0xE436EB83L,0x524F,0x11CE,0x9F,0x53,0x00,0x20,0xAF,0x0B,0xA7,0x70 1108 DEFINE_GUIDSTRUCT("E436EB83-524F-11CE-9F53-0020AF0BA770",KSDATAFORMAT_TYPE_STREAM); 1109 #define KSDATAFORMAT_TYPE_STREAM DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_STREAM) 1110 1111 #define STATIC_KSDATAFORMAT_SUBTYPE_NONE \ 1112 0xE436EB8EL,0x524F,0x11CE,0x9F,0x53,0x00,0x20,0xAF,0x0B,0xA7,0x70 1113 DEFINE_GUIDSTRUCT("E436EB8E-524F-11CE-9F53-0020AF0BA770",KSDATAFORMAT_SUBTYPE_NONE); 1114 #define KSDATAFORMAT_SUBTYPE_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_NONE) 1115 1116 #define STATIC_KSDATAFORMAT_SPECIFIER_WILDCARD STATIC_GUID_NULL 1117 #define KSDATAFORMAT_SPECIFIER_WILDCARD GUID_NULL 1118 1119 #define STATIC_KSDATAFORMAT_SPECIFIER_FILENAME \ 1120 0xAA797B40L,0xE974,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 1121 DEFINE_GUIDSTRUCT("AA797B40-E974-11CF-A5D6-28DB04C10000",KSDATAFORMAT_SPECIFIER_FILENAME); 1122 #define KSDATAFORMAT_SPECIFIER_FILENAME DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_FILENAME) 1123 1124 #define STATIC_KSDATAFORMAT_SPECIFIER_FILEHANDLE \ 1125 0x65E8773CL,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96 1126 DEFINE_GUIDSTRUCT("65E8773C-8F56-11D0-A3B9-00A0C9223196",KSDATAFORMAT_SPECIFIER_FILEHANDLE); 1127 #define KSDATAFORMAT_SPECIFIER_FILEHANDLE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_FILEHANDLE) 1128 1129 #define STATIC_KSDATAFORMAT_SPECIFIER_NONE \ 1130 0x0F6417D6L,0xC318,0x11D0,0xA4,0x3F,0x00,0xA0,0xC9,0x22,0x31,0x96 1131 DEFINE_GUIDSTRUCT("0F6417D6-C318-11D0-A43F-00A0C9223196",KSDATAFORMAT_SPECIFIER_NONE); 1132 #define KSDATAFORMAT_SPECIFIER_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_NONE) 1133 1134 #define STATIC_KSPROPSETID_Quality \ 1135 0xD16AD380L,0xAC1A,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 1136 DEFINE_GUIDSTRUCT("D16AD380-AC1A-11CF-A5D6-28DB04C10000",KSPROPSETID_Quality); 1137 #define KSPROPSETID_Quality DEFINE_GUIDNAMED(KSPROPSETID_Quality) 1138 1139 typedef enum { 1140 KSPROPERTY_QUALITY_REPORT, 1141 KSPROPERTY_QUALITY_ERROR 1142 } KSPROPERTY_QUALITY; 1143 1144 #define DEFINE_KSPROPERTY_ITEM_QUALITY_REPORT(GetHandler,SetHandler) \ 1145 DEFINE_KSPROPERTY_ITEM( \ 1146 KSPROPERTY_QUALITY_REPORT, \ 1147 (GetHandler), \ 1148 sizeof(KSPROPERTY), \ 1149 sizeof(KSQUALITY), \ 1150 (SetHandler), \ 1151 NULL, 0, NULL, NULL, 0) 1152 1153 #define DEFINE_KSPROPERTY_ITEM_QUALITY_ERROR(GetHandler,SetHandler) \ 1154 DEFINE_KSPROPERTY_ITEM( \ 1155 KSPROPERTY_QUALITY_ERROR, \ 1156 (GetHandler), \ 1157 sizeof(KSPROPERTY), \ 1158 sizeof(KSERROR), \ 1159 (SetHandler), \ 1160 NULL, 0, NULL, NULL, 0) 1161 1162 #define STATIC_KSPROPSETID_Connection \ 1163 0x1D58C920L,0xAC9B,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 1164 DEFINE_GUIDSTRUCT("1D58C920-AC9B-11CF-A5D6-28DB04C10000",KSPROPSETID_Connection); 1165 #define KSPROPSETID_Connection DEFINE_GUIDNAMED(KSPROPSETID_Connection) 1166 1167 typedef enum { 1168 KSPROPERTY_CONNECTION_STATE, 1169 KSPROPERTY_CONNECTION_PRIORITY, 1170 KSPROPERTY_CONNECTION_DATAFORMAT, 1171 KSPROPERTY_CONNECTION_ALLOCATORFRAMING, 1172 KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT, 1173 KSPROPERTY_CONNECTION_ACQUIREORDERING, 1174 KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX, 1175 KSPROPERTY_CONNECTION_STARTAT 1176 } KSPROPERTY_CONNECTION; 1177 1178 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_STATE(GetHandler,SetHandler) \ 1179 DEFINE_KSPROPERTY_ITEM( \ 1180 KSPROPERTY_CONNECTION_STATE, \ 1181 (GetHandler), \ 1182 sizeof(KSPROPERTY), \ 1183 sizeof(KSSTATE), \ 1184 (SetHandler), \ 1185 NULL, 0, NULL, NULL, 0) 1186 1187 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_PRIORITY(GetHandler,SetHandler) \ 1188 DEFINE_KSPROPERTY_ITEM( \ 1189 KSPROPERTY_CONNECTION_PRIORITY, \ 1190 (GetHandler), \ 1191 sizeof(KSPROPERTY), \ 1192 sizeof(KSPRIORITY), \ 1193 (SetHandler), \ 1194 NULL, 0, NULL, NULL, 0) 1195 1196 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_DATAFORMAT(GetHandler,SetHandler)\ 1197 DEFINE_KSPROPERTY_ITEM( \ 1198 KSPROPERTY_CONNECTION_DATAFORMAT, \ 1199 (GetHandler), \ 1200 sizeof(KSPROPERTY), \ 1201 0, \ 1202 (SetHandler), \ 1203 NULL, 0, NULL, NULL, 0) 1204 1205 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING(Handler) \ 1206 DEFINE_KSPROPERTY_ITEM( \ 1207 KSPROPERTY_CONNECTION_ALLOCATORFRAMING, \ 1208 (Handler), \ 1209 sizeof(KSPROPERTY), \ 1210 sizeof(KSALLOCATOR_FRAMING), \ 1211 NULL, NULL, 0, NULL, NULL, 0) 1212 1213 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING_EX(Handler) \ 1214 DEFINE_KSPROPERTY_ITEM( \ 1215 KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,\ 1216 (Handler), \ 1217 sizeof(KSPROPERTY), \ 1218 0, \ 1219 NULL, NULL, 0, NULL, NULL, 0) 1220 1221 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_PROPOSEDATAFORMAT(Handler) \ 1222 DEFINE_KSPROPERTY_ITEM( \ 1223 KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT,\ 1224 NULL, \ 1225 sizeof(KSPROPERTY), \ 1226 sizeof(KSDATAFORMAT), \ 1227 (Handler), \ 1228 NULL, 0, NULL, NULL, 0) 1229 1230 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ACQUIREORDERING(Handler) \ 1231 DEFINE_KSPROPERTY_ITEM( \ 1232 KSPROPERTY_CONNECTION_ACQUIREORDERING, \ 1233 (Handler), \ 1234 sizeof(KSPROPERTY), \ 1235 sizeof(int), \ 1236 NULL, NULL, 0, NULL, NULL, 0) 1237 1238 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_STARTAT(Handler) \ 1239 DEFINE_KSPROPERTY_ITEM( \ 1240 KSPROPERTY_CONNECTION_STARTAT, \ 1241 NULL, \ 1242 sizeof(KSPROPERTY), \ 1243 sizeof(KSRELATIVEEVENT), \ 1244 (Handler), \ 1245 NULL, 0, NULL, NULL, 0) 1246 1247 #define KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER 0x00000001 1248 #define KSALLOCATOR_REQUIREMENTF_SYSTEM_MEMORY 0x00000002 1249 #define KSALLOCATOR_REQUIREMENTF_FRAME_INTEGRITY 0x00000004 1250 #define KSALLOCATOR_REQUIREMENTF_MUST_ALLOCATE 0x00000008 1251 #define KSALLOCATOR_REQUIREMENTF_PREFERENCES_ONLY 0x80000000 1252 1253 #define KSALLOCATOR_OPTIONF_COMPATIBLE 0x00000001 1254 #define KSALLOCATOR_OPTIONF_SYSTEM_MEMORY 0x00000002 1255 #define KSALLOCATOR_OPTIONF_VALID 0x00000003 1256 1257 #define KSALLOCATOR_FLAG_PARTIAL_READ_SUPPORT 0x00000010 1258 #define KSALLOCATOR_FLAG_DEVICE_SPECIFIC 0x00000020 1259 #define KSALLOCATOR_FLAG_CAN_ALLOCATE 0x00000040 1260 #define KSALLOCATOR_FLAG_INSIST_ON_FRAMESIZE_RATIO 0x00000080 1261 #define KSALLOCATOR_FLAG_NO_FRAME_INTEGRITY 0x00000100 1262 #define KSALLOCATOR_FLAG_MULTIPLE_OUTPUT 0x00000200 1263 #define KSALLOCATOR_FLAG_CYCLE 0x00000400 1264 #define KSALLOCATOR_FLAG_ALLOCATOR_EXISTS 0x00000800 1265 #define KSALLOCATOR_FLAG_INDEPENDENT_RANGES 0x00001000 1266 #define KSALLOCATOR_FLAG_ATTENTION_STEPPING 0x00002000 1267 1268 typedef struct { 1269 __MINGW_EXTENSION union { 1270 ULONG OptionsFlags; 1271 ULONG RequirementsFlags; 1272 }; 1273 #if defined(_NTDDK_) 1274 POOL_TYPE PoolType; 1275 #else 1276 ULONG PoolType; 1277 #endif /* _NTDDK_ */ 1278 ULONG Frames; 1279 ULONG FrameSize; 1280 ULONG FileAlignment; 1281 ULONG Reserved; 1282 } KSALLOCATOR_FRAMING,*PKSALLOCATOR_FRAMING; 1283 1284 #if defined(_NTDDK_) 1285 typedef PVOID (*PFNKSDEFAULTALLOCATE)(PVOID Context); 1286 typedef VOID (*PFNKSDEFAULTFREE)(PVOID Context, PVOID Buffer); 1287 typedef NTSTATUS (*PFNKSINITIALIZEALLOCATOR)(PVOID InitialContext, 1288 PKSALLOCATOR_FRAMING AllocatorFraming, 1289 PVOID* Context); 1290 typedef VOID (*PFNKSDELETEALLOCATOR) (PVOID Context); 1291 #endif /* _NTDDK_ */ 1292 1293 typedef struct { 1294 ULONG MinFrameSize; 1295 ULONG MaxFrameSize; 1296 ULONG Stepping; 1297 } KS_FRAMING_RANGE,*PKS_FRAMING_RANGE; 1298 1299 typedef struct { 1300 KS_FRAMING_RANGE Range; 1301 ULONG InPlaceWeight; 1302 ULONG NotInPlaceWeight; 1303 } KS_FRAMING_RANGE_WEIGHTED,*PKS_FRAMING_RANGE_WEIGHTED; 1304 1305 typedef struct { 1306 ULONG RatioNumerator; 1307 ULONG RatioDenominator; 1308 ULONG RatioConstantMargin; 1309 } KS_COMPRESSION,*PKS_COMPRESSION; 1310 1311 typedef struct { 1312 GUID MemoryType; 1313 GUID BusType; 1314 ULONG MemoryFlags; 1315 ULONG BusFlags; 1316 ULONG Flags; 1317 ULONG Frames; 1318 ULONG FileAlignment; 1319 ULONG MemoryTypeWeight; 1320 KS_FRAMING_RANGE PhysicalRange; 1321 KS_FRAMING_RANGE_WEIGHTED FramingRange; 1322 } KS_FRAMING_ITEM,*PKS_FRAMING_ITEM; 1323 1324 typedef struct { 1325 ULONG CountItems; 1326 ULONG PinFlags; 1327 KS_COMPRESSION OutputCompression; 1328 ULONG PinWeight; 1329 KS_FRAMING_ITEM FramingItem[1]; 1330 } KSALLOCATOR_FRAMING_EX,*PKSALLOCATOR_FRAMING_EX; 1331 1332 #define KSMEMORY_TYPE_WILDCARD GUID_NULL 1333 #define STATIC_KSMEMORY_TYPE_WILDCARD STATIC_GUID_NULL 1334 1335 #define KSMEMORY_TYPE_DONT_CARE GUID_NULL 1336 #define STATIC_KSMEMORY_TYPE_DONT_CARE STATIC_GUID_NULL 1337 1338 #define KS_TYPE_DONT_CARE GUID_NULL 1339 #define STATIC_KS_TYPE_DONT_CARE STATIC_GUID_NULL 1340 1341 #define STATIC_KSMEMORY_TYPE_SYSTEM \ 1342 0x091bb638L,0x603f,0x11d1,0xb0,0x67,0x00,0xa0,0xc9,0x06,0x28,0x02 1343 DEFINE_GUIDSTRUCT("091bb638-603f-11d1-b067-00a0c9062802",KSMEMORY_TYPE_SYSTEM); 1344 #define KSMEMORY_TYPE_SYSTEM DEFINE_GUIDNAMED(KSMEMORY_TYPE_SYSTEM) 1345 1346 #define STATIC_KSMEMORY_TYPE_USER \ 1347 0x8cb0fc28L,0x7893,0x11d1,0xb0,0x69,0x00,0xa0,0xc9,0x06,0x28,0x02 1348 DEFINE_GUIDSTRUCT("8cb0fc28-7893-11d1-b069-00a0c9062802",KSMEMORY_TYPE_USER); 1349 #define KSMEMORY_TYPE_USER DEFINE_GUIDNAMED(KSMEMORY_TYPE_USER) 1350 1351 #define STATIC_KSMEMORY_TYPE_KERNEL_PAGED \ 1352 0xd833f8f8L,0x7894,0x11d1,0xb0,0x69,0x00,0xa0,0xc9,0x06,0x28,0x02 1353 DEFINE_GUIDSTRUCT("d833f8f8-7894-11d1-b069-00a0c9062802",KSMEMORY_TYPE_KERNEL_PAGED); 1354 #define KSMEMORY_TYPE_KERNEL_PAGED DEFINE_GUIDNAMED(KSMEMORY_TYPE_KERNEL_PAGED) 1355 1356 #define STATIC_KSMEMORY_TYPE_KERNEL_NONPAGED \ 1357 0x4a6d5fc4L,0x7895,0x11d1,0xb0,0x69,0x00,0xa0,0xc9,0x06,0x28,0x02 1358 DEFINE_GUIDSTRUCT("4a6d5fc4-7895-11d1-b069-00a0c9062802",KSMEMORY_TYPE_KERNEL_NONPAGED); 1359 #define KSMEMORY_TYPE_KERNEL_NONPAGED DEFINE_GUIDNAMED(KSMEMORY_TYPE_KERNEL_NONPAGED) 1360 1361 #define STATIC_KSMEMORY_TYPE_DEVICE_UNKNOWN \ 1362 0x091bb639L,0x603f,0x11d1,0xb0,0x67,0x00,0xa0,0xc9,0x06,0x28,0x02 1363 DEFINE_GUIDSTRUCT("091bb639-603f-11d1-b067-00a0c9062802",KSMEMORY_TYPE_DEVICE_UNKNOWN); 1364 #define KSMEMORY_TYPE_DEVICE_UNKNOWN DEFINE_GUIDNAMED(KSMEMORY_TYPE_DEVICE_UNKNOWN) 1365 1366 #define DECLARE_SIMPLE_FRAMING_EX(FramingExName,MemoryType,Flags,Frames,Alignment,MinFrameSize,MaxFrameSize) \ 1367 const KSALLOCATOR_FRAMING_EX FramingExName = \ 1368 { \ 1369 1, \ 1370 0, \ 1371 { \ 1372 1, \ 1373 1, \ 1374 0 \ 1375 }, \ 1376 0, \ 1377 { \ 1378 { \ 1379 MemoryType, \ 1380 STATIC_KS_TYPE_DONT_CARE, \ 1381 0, \ 1382 0, \ 1383 Flags, \ 1384 Frames, \ 1385 Alignment, \ 1386 0, \ 1387 { \ 1388 0, \ 1389 (ULONG)-1, \ 1390 1 \ 1391 }, \ 1392 { \ 1393 { \ 1394 MinFrameSize, \ 1395 MaxFrameSize, \ 1396 1 \ 1397 }, \ 1398 0, \ 1399 0 \ 1400 } \ 1401 } \ 1402 } \ 1403 } 1404 1405 #define SetDefaultKsCompression(KsCompressionPointer) \ 1406 { \ 1407 KsCompressionPointer->RatioNumerator = 1; \ 1408 KsCompressionPointer->RatioDenominator = 1; \ 1409 KsCompressionPointer->RatioConstantMargin = 0; \ 1410 } 1411 1412 #define SetDontCareKsFramingRange(KsFramingRangePointer) \ 1413 { \ 1414 KsFramingRangePointer->MinFrameSize = 0; \ 1415 KsFramingRangePointer->MaxFrameSize = (ULONG) -1; \ 1416 KsFramingRangePointer->Stepping = 1; \ 1417 } 1418 1419 #define SetKsFramingRange(KsFramingRangePointer,P_MinFrameSize,P_MaxFrameSize) \ 1420 { \ 1421 KsFramingRangePointer->MinFrameSize = P_MinFrameSize; \ 1422 KsFramingRangePointer->MaxFrameSize = P_MaxFrameSize; \ 1423 KsFramingRangePointer->Stepping = 1; \ 1424 } 1425 1426 #define SetKsFramingRangeWeighted(KsFramingRangeWeightedPointer,P_MinFrameSize,P_MaxFrameSize) \ 1427 { \ 1428 KS_FRAMING_RANGE *KsFramingRange = \ 1429 &KsFramingRangeWeightedPointer->Range; \ 1430 SetKsFramingRange(KsFramingRange,P_MinFrameSize,P_MaxFrameSize);\ 1431 KsFramingRangeWeightedPointer->InPlaceWeight = 0; \ 1432 KsFramingRangeWeightedPointer->NotInPlaceWeight = 0; \ 1433 } 1434 1435 #define INITIALIZE_SIMPLE_FRAMING_EX(FramingExPointer,P_MemoryType,P_Flags,P_Frames,P_Alignment,P_MinFrameSize,P_MaxFrameSize) \ 1436 { \ 1437 KS_COMPRESSION *KsCompression = \ 1438 &FramingExPointer->OutputCompression; \ 1439 KS_FRAMING_RANGE *KsFramingRange = \ 1440 &FramingExPointer->FramingItem[0].PhysicalRange;\ 1441 KS_FRAMING_RANGE_WEIGHTED *KsFramingRangeWeighted = \ 1442 &FramingExPointer->FramingItem[0].FramingRange; \ 1443 FramingExPointer->CountItems = 1; \ 1444 FramingExPointer->PinFlags = 0; \ 1445 SetDefaultKsCompression(KsCompression); \ 1446 FramingExPointer->PinWeight = 0; \ 1447 FramingExPointer->FramingItem[0].MemoryType = P_MemoryType; \ 1448 FramingExPointer->FramingItem[0].BusType = KS_TYPE_DONT_CARE; \ 1449 FramingExPointer->FramingItem[0].MemoryFlags = 0; \ 1450 FramingExPointer->FramingItem[0].BusFlags = 0; \ 1451 FramingExPointer->FramingItem[0].Flags = P_Flags; \ 1452 FramingExPointer->FramingItem[0].Frames = P_Frames; \ 1453 FramingExPointer->FramingItem[0].FileAlignment = P_Alignment; \ 1454 FramingExPointer->FramingItem[0].MemoryTypeWeight = 0; \ 1455 SetDontCareKsFramingRange(KsFramingRange); \ 1456 SetKsFramingRangeWeighted(KsFramingRangeWeighted, \ 1457 P_MinFrameSize,P_MaxFrameSize); \ 1458 } 1459 1460 #define STATIC_KSEVENTSETID_StreamAllocator \ 1461 0x75d95571L,0x073c,0x11d0,0xa1,0x61,0x00,0x20,0xaf,0xd1,0x56,0xe4 1462 DEFINE_GUIDSTRUCT("75d95571-073c-11d0-a161-0020afd156e4",KSEVENTSETID_StreamAllocator); 1463 #define KSEVENTSETID_StreamAllocator DEFINE_GUIDNAMED(KSEVENTSETID_StreamAllocator) 1464 1465 typedef enum { 1466 KSEVENT_STREAMALLOCATOR_INTERNAL_FREEFRAME, 1467 KSEVENT_STREAMALLOCATOR_FREEFRAME 1468 } KSEVENT_STREAMALLOCATOR; 1469 1470 #define STATIC_KSMETHODSETID_StreamAllocator \ 1471 0xcf6e4341L,0xec87,0x11cf,0xa1,0x30,0x00,0x20,0xaf,0xd1,0x56,0xe4 1472 DEFINE_GUIDSTRUCT("cf6e4341-ec87-11cf-a130-0020afd156e4",KSMETHODSETID_StreamAllocator); 1473 #define KSMETHODSETID_StreamAllocator DEFINE_GUIDNAMED(KSMETHODSETID_StreamAllocator) 1474 1475 typedef enum { 1476 KSMETHOD_STREAMALLOCATOR_ALLOC, 1477 KSMETHOD_STREAMALLOCATOR_FREE 1478 } KSMETHOD_STREAMALLOCATOR; 1479 1480 #define DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_ALLOC(Handler) \ 1481 DEFINE_KSMETHOD_ITEM( \ 1482 KSMETHOD_STREAMALLOCATOR_ALLOC, \ 1483 KSMETHOD_TYPE_WRITE, \ 1484 (Handler), \ 1485 sizeof(KSMETHOD), \ 1486 sizeof(PVOID), \ 1487 NULL) 1488 1489 #define DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_FREE(Handler) \ 1490 DEFINE_KSMETHOD_ITEM( \ 1491 KSMETHOD_STREAMALLOCATOR_FREE, \ 1492 KSMETHOD_TYPE_READ, \ 1493 (Handler), \ 1494 sizeof(KSMETHOD), \ 1495 sizeof(PVOID), \ 1496 NULL) 1497 1498 #define DEFINE_KSMETHOD_ALLOCATORSET(AllocatorSet,MethodAlloc,MethodFree)\ 1499 DEFINE_KSMETHOD_TABLE(AllocatorSet) { \ 1500 DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_ALLOC(MethodAlloc), \ 1501 DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_FREE(MethodFree) \ 1502 } 1503 1504 #define STATIC_KSPROPSETID_StreamAllocator \ 1505 0xcf6e4342L,0xec87,0x11cf,0xa1,0x30,0x00,0x20,0xaf,0xd1,0x56,0xe4 1506 DEFINE_GUIDSTRUCT("cf6e4342-ec87-11cf-a130-0020afd156e4",KSPROPSETID_StreamAllocator); 1507 #define KSPROPSETID_StreamAllocator DEFINE_GUIDNAMED(KSPROPSETID_StreamAllocator) 1508 1509 #if defined(_NTDDK_) 1510 typedef enum { 1511 KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE, 1512 KSPROPERTY_STREAMALLOCATOR_STATUS 1513 } KSPROPERTY_STREAMALLOCATOR; 1514 1515 #define DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_FUNCTIONTABLE(Handler) \ 1516 DEFINE_KSPROPERTY_ITEM( \ 1517 KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE,\ 1518 (Handler), \ 1519 sizeof(KSPROPERTY), \ 1520 sizeof(KSSTREAMALLOCATOR_FUNCTIONTABLE),\ 1521 NULL, NULL, 0, NULL, NULL, 0) 1522 1523 #define DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_STATUS(Handler) \ 1524 DEFINE_KSPROPERTY_ITEM( \ 1525 KSPROPERTY_STREAMALLOCATOR_STATUS, \ 1526 (Handler), \ 1527 sizeof(KSPROPERTY), \ 1528 sizeof(KSSTREAMALLOCATOR_STATUS), \ 1529 NULL, NULL, 0, NULL, NULL, 0) 1530 1531 #define DEFINE_KSPROPERTY_ALLOCATORSET(AllocatorSet,PropFunctionTable,PropStatus)\ 1532 DEFINE_KSPROPERTY_TABLE(AllocatorSet) { \ 1533 DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_STATUS(PropStatus), \ 1534 DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_FUNCTIONTABLE(PropFunctionTable)\ 1535 } 1536 1537 typedef NTSTATUS (*PFNALLOCATOR_ALLOCATEFRAME) (PFILE_OBJECT FileObject, 1538 PVOID *Frame); 1539 typedef VOID (*PFNALLOCATOR_FREEFRAME) (PFILE_OBJECT FileObject, PVOID Frame); 1540 1541 typedef struct { 1542 PFNALLOCATOR_ALLOCATEFRAME AllocateFrame; 1543 PFNALLOCATOR_FREEFRAME FreeFrame; 1544 } KSSTREAMALLOCATOR_FUNCTIONTABLE, *PKSSTREAMALLOCATOR_FUNCTIONTABLE; 1545 #endif /* _NTDDK_ */ 1546 1547 typedef struct { 1548 KSALLOCATOR_FRAMING Framing; 1549 ULONG AllocatedFrames; 1550 ULONG Reserved; 1551 } KSSTREAMALLOCATOR_STATUS,*PKSSTREAMALLOCATOR_STATUS; 1552 1553 typedef struct { 1554 KSALLOCATOR_FRAMING_EX Framing; 1555 ULONG AllocatedFrames; 1556 ULONG Reserved; 1557 } KSSTREAMALLOCATOR_STATUS_EX,*PKSSTREAMALLOCATOR_STATUS_EX; 1558 1559 #define KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT 0x00000001 1560 #define KSSTREAM_HEADER_OPTIONSF_PREROLL 0x00000002 1561 #define KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY 0x00000004 1562 #define KSSTREAM_HEADER_OPTIONSF_TYPECHANGED 0x00000008 1563 #define KSSTREAM_HEADER_OPTIONSF_TIMEVALID 0x00000010 1564 #define KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY 0x00000040 1565 #define KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE 0x00000080 1566 #define KSSTREAM_HEADER_OPTIONSF_DURATIONVALID 0x00000100 1567 #define KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM 0x00000200 1568 #define KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA 0x80000000 1569 1570 typedef struct { 1571 LONGLONG Time; 1572 ULONG Numerator; 1573 ULONG Denominator; 1574 } KSTIME,*PKSTIME; 1575 1576 typedef struct { 1577 ULONG Size; 1578 ULONG TypeSpecificFlags; 1579 KSTIME PresentationTime; 1580 LONGLONG Duration; 1581 ULONG FrameExtent; 1582 ULONG DataUsed; 1583 PVOID Data; 1584 ULONG OptionsFlags; 1585 #ifdef _WIN64 1586 ULONG Reserved; 1587 #endif 1588 } KSSTREAM_HEADER,*PKSSTREAM_HEADER; 1589 1590 #define STATIC_KSPROPSETID_StreamInterface \ 1591 0x1fdd8ee1L,0x9cd3,0x11d0,0x82,0xaa,0x00,0x00,0xf8,0x22,0xfe,0x8a 1592 DEFINE_GUIDSTRUCT("1fdd8ee1-9cd3-11d0-82aa-0000f822fe8a",KSPROPSETID_StreamInterface); 1593 #define KSPROPSETID_StreamInterface DEFINE_GUIDNAMED(KSPROPSETID_StreamInterface) 1594 1595 typedef enum { 1596 KSPROPERTY_STREAMINTERFACE_HEADERSIZE 1597 } KSPROPERTY_STREAMINTERFACE; 1598 1599 #define DEFINE_KSPROPERTY_ITEM_STREAMINTERFACE_HEADERSIZE(GetHandler) \ 1600 DEFINE_KSPROPERTY_ITEM( \ 1601 KSPROPERTY_STREAMINTERFACE_HEADERSIZE, \ 1602 (GetHandler), \ 1603 sizeof(KSPROPERTY), \ 1604 sizeof(ULONG), \ 1605 NULL,NULL,0,NULL,NULL,0) 1606 1607 #define DEFINE_KSPROPERTY_STREAMINTERFACESET(StreamInterfaceSet,HeaderSizeHandler) \ 1608 DEFINE_KSPROPERTY_TABLE(StreamInterfaceSet) { \ 1609 DEFINE_KSPROPERTY_ITEM_STREAMINTERFACE_HEADERSIZE(HeaderSizeHandler)\ 1610 } 1611 1612 #define STATIC_KSPROPSETID_Stream \ 1613 0x65aaba60L,0x98ae,0x11cf,0xa1,0x0d,0x00,0x20,0xaf,0xd1,0x56,0xe4 1614 DEFINE_GUIDSTRUCT("65aaba60-98ae-11cf-a10d-0020afd156e4",KSPROPSETID_Stream); 1615 #define KSPROPSETID_Stream DEFINE_GUIDNAMED(KSPROPSETID_Stream) 1616 1617 typedef enum { 1618 KSPROPERTY_STREAM_ALLOCATOR, 1619 KSPROPERTY_STREAM_QUALITY, 1620 KSPROPERTY_STREAM_DEGRADATION, 1621 KSPROPERTY_STREAM_MASTERCLOCK, 1622 KSPROPERTY_STREAM_TIMEFORMAT, 1623 KSPROPERTY_STREAM_PRESENTATIONTIME, 1624 KSPROPERTY_STREAM_PRESENTATIONEXTENT, 1625 KSPROPERTY_STREAM_FRAMETIME, 1626 KSPROPERTY_STREAM_RATECAPABILITY, 1627 KSPROPERTY_STREAM_RATE, 1628 KSPROPERTY_STREAM_PIPE_ID 1629 } KSPROPERTY_STREAM; 1630 1631 #define DEFINE_KSPROPERTY_ITEM_STREAM_ALLOCATOR(GetHandler,SetHandler) \ 1632 DEFINE_KSPROPERTY_ITEM( \ 1633 KSPROPERTY_STREAM_ALLOCATOR, \ 1634 (GetHandler), \ 1635 sizeof(KSPROPERTY), \ 1636 sizeof(HANDLE), \ 1637 (SetHandler), \ 1638 NULL, 0, NULL, NULL, 0) 1639 1640 #define DEFINE_KSPROPERTY_ITEM_STREAM_QUALITY(Handler) \ 1641 DEFINE_KSPROPERTY_ITEM( \ 1642 KSPROPERTY_STREAM_QUALITY, \ 1643 (Handler), \ 1644 sizeof(KSPROPERTY), \ 1645 sizeof(KSQUALITY_MANAGER), \ 1646 NULL, NULL, 0, NULL, NULL, 0) 1647 1648 #define DEFINE_KSPROPERTY_ITEM_STREAM_DEGRADATION(GetHandler,SetHandler)\ 1649 DEFINE_KSPROPERTY_ITEM( \ 1650 KSPROPERTY_STREAM_DEGRADATION, \ 1651 (GetHandler), \ 1652 sizeof(KSPROPERTY), \ 1653 0, \ 1654 (SetHandler), \ 1655 NULL, 0, NULL, NULL, 0) 1656 1657 #define DEFINE_KSPROPERTY_ITEM_STREAM_MASTERCLOCK(GetHandler,SetHandler)\ 1658 DEFINE_KSPROPERTY_ITEM( \ 1659 KSPROPERTY_STREAM_MASTERCLOCK, \ 1660 (GetHandler), \ 1661 sizeof(KSPROPERTY), \ 1662 sizeof(HANDLE), \ 1663 (SetHandler), \ 1664 NULL, 0, NULL, NULL, 0) 1665 1666 #define DEFINE_KSPROPERTY_ITEM_STREAM_TIMEFORMAT(Handler) \ 1667 DEFINE_KSPROPERTY_ITEM( \ 1668 KSPROPERTY_STREAM_TIMEFORMAT, \ 1669 (Handler), \ 1670 sizeof(KSPROPERTY), \ 1671 sizeof(GUID), \ 1672 NULL, NULL, 0, NULL, NULL, 0) 1673 1674 #define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONTIME(GetHandler,SetHandler)\ 1675 DEFINE_KSPROPERTY_ITEM( \ 1676 KSPROPERTY_STREAM_PRESENTATIONTIME, \ 1677 (GetHandler), \ 1678 sizeof(KSPROPERTY), \ 1679 sizeof(KSTIME), \ 1680 (SetHandler), \ 1681 NULL, 0, NULL, NULL, 0) 1682 1683 #define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONEXTENT(Handler) \ 1684 DEFINE_KSPROPERTY_ITEM( \ 1685 KSPROPERTY_STREAM_PRESENTATIONEXTENT, \ 1686 (Handler), \ 1687 sizeof(KSPROPERTY), \ 1688 sizeof(LONGLONG), \ 1689 NULL, NULL, 0, NULL, NULL, 0) 1690 1691 #define DEFINE_KSPROPERTY_ITEM_STREAM_FRAMETIME(Handler) \ 1692 DEFINE_KSPROPERTY_ITEM( \ 1693 KSPROPERTY_STREAM_FRAMETIME, \ 1694 (Handler), \ 1695 sizeof(KSPROPERTY), \ 1696 sizeof(KSFRAMETIME), \ 1697 NULL, NULL, 0, NULL, NULL, 0) 1698 1699 #define DEFINE_KSPROPERTY_ITEM_STREAM_RATECAPABILITY(Handler) \ 1700 DEFINE_KSPROPERTY_ITEM( \ 1701 KSPROPERTY_STREAM_RATECAPABILITY, \ 1702 (Handler), \ 1703 sizeof(KSRATE_CAPABILITY), \ 1704 sizeof(KSRATE), \ 1705 NULL, NULL, 0, NULL, NULL, 0) 1706 1707 #define DEFINE_KSPROPERTY_ITEM_STREAM_RATE(GetHandler,SetHandler) \ 1708 DEFINE_KSPROPERTY_ITEM( \ 1709 KSPROPERTY_STREAM_RATE, \ 1710 (GetHandler), \ 1711 sizeof(KSPROPERTY), \ 1712 sizeof(KSRATE), \ 1713 (SetHandler), \ 1714 NULL, 0, NULL, NULL, 0) 1715 1716 #define DEFINE_KSPROPERTY_ITEM_STREAM_PIPE_ID(GetHandler,SetHandler) \ 1717 DEFINE_KSPROPERTY_ITEM( \ 1718 KSPROPERTY_STREAM_PIPE_ID, \ 1719 (GetHandler), \ 1720 sizeof(KSPROPERTY), \ 1721 sizeof(HANDLE), \ 1722 (SetHandler), \ 1723 NULL, 0, NULL, NULL, 0) 1724 1725 typedef struct { 1726 HANDLE QualityManager; 1727 PVOID Context; 1728 } KSQUALITY_MANAGER,*PKSQUALITY_MANAGER; 1729 1730 typedef struct { 1731 LONGLONG Duration; 1732 ULONG FrameFlags; 1733 ULONG Reserved; 1734 } KSFRAMETIME,*PKSFRAMETIME; 1735 1736 #define KSFRAMETIME_VARIABLESIZE 0x00000001 1737 1738 typedef struct { 1739 LONGLONG PresentationStart; 1740 LONGLONG Duration; 1741 KSPIN_INTERFACE Interface; 1742 LONG Rate; 1743 ULONG Flags; 1744 } KSRATE,*PKSRATE; 1745 1746 #define KSRATE_NOPRESENTATIONSTART 0x00000001 1747 #define KSRATE_NOPRESENTATIONDURATION 0x00000002 1748 1749 typedef struct { 1750 KSPROPERTY Property; 1751 KSRATE Rate; 1752 } KSRATE_CAPABILITY,*PKSRATE_CAPABILITY; 1753 1754 #define STATIC_KSPROPSETID_Clock \ 1755 0xDF12A4C0L,0xAC17,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 1756 DEFINE_GUIDSTRUCT("DF12A4C0-AC17-11CF-A5D6-28DB04C10000",KSPROPSETID_Clock); 1757 #define KSPROPSETID_Clock DEFINE_GUIDNAMED(KSPROPSETID_Clock) 1758 1759 #define NANOSECONDS 10000000 1760 #define KSCONVERT_PERFORMANCE_TIME(Frequency,PerformanceTime) \ 1761 ((((ULONGLONG)(ULONG)(PerformanceTime).HighPart *NANOSECONDS / (Frequency)) << 32) + \ 1762 ((((((ULONGLONG)(ULONG)(PerformanceTime).HighPart *NANOSECONDS) % (Frequency)) << 32) +\ 1763 ((ULONGLONG)(PerformanceTime).LowPart *NANOSECONDS)) / (Frequency))) 1764 1765 typedef struct { 1766 ULONG CreateFlags; 1767 } KSCLOCK_CREATE,*PKSCLOCK_CREATE; 1768 1769 typedef struct { 1770 LONGLONG Time; 1771 LONGLONG SystemTime; 1772 } KSCORRELATED_TIME,*PKSCORRELATED_TIME; 1773 1774 typedef struct { 1775 LONGLONG Granularity; 1776 LONGLONG Error; 1777 } KSRESOLUTION,*PKSRESOLUTION; 1778 1779 typedef enum { 1780 KSPROPERTY_CLOCK_TIME, 1781 KSPROPERTY_CLOCK_PHYSICALTIME, 1782 KSPROPERTY_CLOCK_CORRELATEDTIME, 1783 KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME, 1784 KSPROPERTY_CLOCK_RESOLUTION, 1785 KSPROPERTY_CLOCK_STATE, 1786 #if defined(_NTDDK_) 1787 KSPROPERTY_CLOCK_FUNCTIONTABLE 1788 #endif /* _NTDDK_ */ 1789 } KSPROPERTY_CLOCK; 1790 1791 #if defined(_NTDDK_) 1792 typedef LONGLONG (FASTCALL *PFNKSCLOCK_GETTIME)(PFILE_OBJECT FileObject); 1793 typedef LONGLONG (FASTCALL *PFNKSCLOCK_CORRELATEDTIME)(PFILE_OBJECT FileObject, 1794 PLONGLONG SystemTime); 1795 1796 typedef struct { 1797 PFNKSCLOCK_GETTIME GetTime; 1798 PFNKSCLOCK_GETTIME GetPhysicalTime; 1799 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedTime; 1800 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedPhysicalTime; 1801 } KSCLOCK_FUNCTIONTABLE, *PKSCLOCK_FUNCTIONTABLE; 1802 1803 typedef BOOLEAN (*PFNKSSETTIMER)(PVOID Context, PKTIMER Timer, 1804 LARGE_INTEGER DueTime, PKDPC Dpc); 1805 typedef BOOLEAN (*PFNKSCANCELTIMER) (PVOID Context, PKTIMER Timer); 1806 typedef LONGLONG (FASTCALL *PFNKSCORRELATEDTIME)(PVOID Context, 1807 PLONGLONG SystemTime); 1808 1809 typedef PVOID PKSDEFAULTCLOCK; 1810 1811 #define DEFINE_KSPROPERTY_ITEM_CLOCK_TIME(Handler) \ 1812 DEFINE_KSPROPERTY_ITEM( \ 1813 KSPROPERTY_CLOCK_TIME, \ 1814 (Handler), \ 1815 sizeof(KSPROPERTY), sizeof(LONGLONG), \ 1816 NULL, NULL, 0, NULL, NULL, 0) 1817 1818 #define DEFINE_KSPROPERTY_ITEM_CLOCK_PHYSICALTIME(Handler) \ 1819 DEFINE_KSPROPERTY_ITEM( \ 1820 KSPROPERTY_CLOCK_PHYSICALTIME, \ 1821 (Handler), \ 1822 sizeof(KSPROPERTY), sizeof(LONGLONG), \ 1823 NULL, NULL, 0, NULL, NULL, 0) 1824 1825 #define DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDTIME(Handler) \ 1826 DEFINE_KSPROPERTY_ITEM( \ 1827 KSPROPERTY_CLOCK_CORRELATEDTIME, \ 1828 (Handler), \ 1829 sizeof(KSPROPERTY), \ 1830 sizeof(KSCORRELATED_TIME), \ 1831 NULL, NULL, 0, NULL, NULL, 0) 1832 1833 #define DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDPHYSICALTIME(Handler) \ 1834 DEFINE_KSPROPERTY_ITEM( \ 1835 KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME,\ 1836 (Handler), \ 1837 sizeof(KSPROPERTY), \ 1838 sizeof(KSCORRELATED_TIME), \ 1839 NULL, NULL, 0, NULL, NULL, 0) 1840 1841 #define DEFINE_KSPROPERTY_ITEM_CLOCK_RESOLUTION(Handler) \ 1842 DEFINE_KSPROPERTY_ITEM( \ 1843 KSPROPERTY_CLOCK_RESOLUTION, \ 1844 (Handler), \ 1845 sizeof(KSPROPERTY),sizeof(KSRESOLUTION),\ 1846 NULL, NULL, 0, NULL, NULL, 0) 1847 1848 #define DEFINE_KSPROPERTY_ITEM_CLOCK_STATE(Handler) \ 1849 DEFINE_KSPROPERTY_ITEM( \ 1850 KSPROPERTY_CLOCK_STATE, \ 1851 (Handler), \ 1852 sizeof(KSPROPERTY), sizeof(KSSTATE), \ 1853 NULL, NULL, 0, NULL, NULL, 0) 1854 1855 #define DEFINE_KSPROPERTY_ITEM_CLOCK_FUNCTIONTABLE(Handler) \ 1856 DEFINE_KSPROPERTY_ITEM( \ 1857 KSPROPERTY_CLOCK_FUNCTIONTABLE, \ 1858 (Handler), \ 1859 sizeof(KSPROPERTY), \ 1860 sizeof(KSCLOCK_FUNCTIONTABLE), \ 1861 NULL, NULL, 0, NULL, NULL, 0) 1862 1863 #define DEFINE_KSPROPERTY_CLOCKSET(ClockSet,PropTime,PropPhysicalTime,PropCorrelatedTime,PropCorrelatedPhysicalTime,PropResolution,PropState,PropFunctionTable)\ 1864 DEFINE_KSPROPERTY_TABLE(ClockSet) { \ 1865 DEFINE_KSPROPERTY_ITEM_CLOCK_TIME(PropTime), \ 1866 DEFINE_KSPROPERTY_ITEM_CLOCK_PHYSICALTIME(PropPhysicalTime), \ 1867 DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDTIME(PropCorrelatedTime),\ 1868 DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDPHYSICALTIME(PropCorrelatedPhysicalTime),\ 1869 DEFINE_KSPROPERTY_ITEM_CLOCK_RESOLUTION(PropResolution), \ 1870 DEFINE_KSPROPERTY_ITEM_CLOCK_STATE(PropState), \ 1871 DEFINE_KSPROPERTY_ITEM_CLOCK_FUNCTIONTABLE(PropFunctionTable), \ 1872 } 1873 #endif /* _NTDDK_ */ 1874 1875 #define STATIC_KSEVENTSETID_Clock \ 1876 0x364D8E20L,0x62C7,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 1877 DEFINE_GUIDSTRUCT("364D8E20-62C7-11CF-A5D6-28DB04C10000",KSEVENTSETID_Clock); 1878 #define KSEVENTSETID_Clock DEFINE_GUIDNAMED(KSEVENTSETID_Clock) 1879 1880 typedef enum { 1881 KSEVENT_CLOCK_INTERVAL_MARK, 1882 KSEVENT_CLOCK_POSITION_MARK 1883 } KSEVENT_CLOCK_POSITION; 1884 1885 #define STATIC_KSEVENTSETID_Connection \ 1886 0x7f4bcbe0L,0x9ea5,0x11cf,0xa5,0xd6,0x28,0xdb,0x04,0xc1,0x00,0x00 1887 DEFINE_GUIDSTRUCT("7f4bcbe0-9ea5-11cf-a5d6-28db04c10000",KSEVENTSETID_Connection); 1888 #define KSEVENTSETID_Connection DEFINE_GUIDNAMED(KSEVENTSETID_Connection) 1889 1890 typedef enum { 1891 KSEVENT_CONNECTION_POSITIONUPDATE, 1892 KSEVENT_CONNECTION_DATADISCONTINUITY, 1893 KSEVENT_CONNECTION_TIMEDISCONTINUITY, 1894 KSEVENT_CONNECTION_PRIORITY, 1895 KSEVENT_CONNECTION_ENDOFSTREAM 1896 } KSEVENT_CONNECTION; 1897 1898 typedef struct { 1899 PVOID Context; 1900 ULONG Proportion; 1901 LONGLONG DeltaTime; 1902 } KSQUALITY,*PKSQUALITY; 1903 1904 typedef struct { 1905 PVOID Context; 1906 ULONG Status; 1907 } KSERROR,*PKSERROR; 1908 1909 typedef KSIDENTIFIER KSDEGRADE,*PKSDEGRADE; 1910 1911 #define STATIC_KSDEGRADESETID_Standard \ 1912 0x9F564180L,0x704C,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00 1913 DEFINE_GUIDSTRUCT("9F564180-704C-11D0-A5D6-28DB04C10000",KSDEGRADESETID_Standard); 1914 #define KSDEGRADESETID_Standard DEFINE_GUIDNAMED(KSDEGRADESETID_Standard) 1915 1916 typedef enum { 1917 KSDEGRADE_STANDARD_SAMPLE, 1918 KSDEGRADE_STANDARD_QUALITY, 1919 KSDEGRADE_STANDARD_COMPUTATION, 1920 KSDEGRADE_STANDARD_SKIP 1921 } KSDEGRADE_STANDARD; 1922 1923 #if defined(_NTDDK_) 1924 1925 #define KSPROBE_STREAMREAD 0x00000000 1926 #define KSPROBE_STREAMWRITE 0x00000001 1927 #define KSPROBE_ALLOCATEMDL 0x00000010 1928 #define KSPROBE_PROBEANDLOCK 0x00000020 1929 #define KSPROBE_SYSTEMADDRESS 0x00000040 1930 #define KSPROBE_MODIFY 0x00000200 1931 #define KSPROBE_STREAMWRITEMODIFY (KSPROBE_MODIFY | KSPROBE_STREAMWRITE) 1932 #define KSPROBE_ALLOWFORMATCHANGE 0x00000080 1933 #define KSSTREAM_READ KSPROBE_STREAMREAD 1934 #define KSSTREAM_WRITE KSPROBE_STREAMWRITE 1935 #define KSSTREAM_PAGED_DATA 0x00000000 1936 #define KSSTREAM_NONPAGED_DATA 0x00000100 1937 #define KSSTREAM_SYNCHRONOUS 0x00001000 1938 #define KSSTREAM_FAILUREEXCEPTION 0x00002000 1939 1940 typedef NTSTATUS (*PFNKSCONTEXT_DISPATCH)(PVOID Context, PIRP Irp); 1941 typedef NTSTATUS (*PFNKSHANDLER)(PIRP Irp, PKSIDENTIFIER Request, PVOID Data); 1942 typedef BOOLEAN (*PFNKSFASTHANDLER)(PFILE_OBJECT FileObject, 1943 PKSIDENTIFIER Request, 1944 ULONG RequestLength, PVOID Data, 1945 ULONG DataLength, 1946 PIO_STATUS_BLOCK IoStatus); 1947 typedef NTSTATUS (*PFNKSALLOCATOR) (PIRP Irp, ULONG BufferSize, 1948 BOOLEAN InputOperation); 1949 1950 typedef struct { 1951 KSPROPERTY_MEMBERSHEADER MembersHeader; 1952 const VOID *Members; 1953 } KSPROPERTY_MEMBERSLIST, *PKSPROPERTY_MEMBERSLIST; 1954 1955 typedef struct { 1956 KSIDENTIFIER PropTypeSet; 1957 ULONG MembersListCount; 1958 const KSPROPERTY_MEMBERSLIST *MembersList; 1959 } KSPROPERTY_VALUES, *PKSPROPERTY_VALUES; 1960 1961 #define DEFINE_KSPROPERTY_TABLE(tablename) \ 1962 const KSPROPERTY_ITEM tablename[] = 1963 1964 #define DEFINE_KSPROPERTY_ITEM(PropertyId,GetHandler,MinProperty,MinData,SetHandler,Values,RelationsCount,Relations,SupportHandler,SerializedSize)\ 1965 { \ 1966 PropertyId, (PFNKSHANDLER)GetHandler, \ 1967 MinProperty, MinData, \ 1968 (PFNKSHANDLER)SetHandler, \ 1969 (PKSPROPERTY_VALUES)Values, RelationsCount, \ 1970 (PKSPROPERTY)Relations, \ 1971 (PFNKSHANDLER)SupportHandler, \ 1972 (ULONG)SerializedSize \ 1973 } 1974 1975 typedef struct { 1976 ULONG PropertyId; 1977 __MINGW_EXTENSION union { 1978 PFNKSHANDLER GetPropertyHandler; 1979 BOOLEAN GetSupported; 1980 }; 1981 ULONG MinProperty; 1982 ULONG MinData; 1983 __MINGW_EXTENSION union { 1984 PFNKSHANDLER SetPropertyHandler; 1985 BOOLEAN SetSupported; 1986 }; 1987 const KSPROPERTY_VALUES *Values; 1988 ULONG RelationsCount; 1989 const KSPROPERTY *Relations; 1990 PFNKSHANDLER SupportHandler; 1991 ULONG SerializedSize; 1992 } KSPROPERTY_ITEM, *PKSPROPERTY_ITEM; 1993 1994 #define DEFINE_KSFASTPROPERTY_ITEM(PropertyId, GetHandler, SetHandler) \ 1995 { \ 1996 PropertyId, (PFNKSFASTHANDLER)GetHandler, \ 1997 (PFNKSFASTHANDLER)SetHandler, 0 \ 1998 } 1999 2000 typedef struct { 2001 ULONG PropertyId; 2002 __MINGW_EXTENSION union { 2003 PFNKSFASTHANDLER GetPropertyHandler; 2004 BOOLEAN GetSupported; 2005 }; 2006 __MINGW_EXTENSION union { 2007 PFNKSFASTHANDLER SetPropertyHandler; 2008 BOOLEAN SetSupported; 2009 }; 2010 ULONG Reserved; 2011 } KSFASTPROPERTY_ITEM, *PKSFASTPROPERTY_ITEM; 2012 2013 #define DEFINE_KSPROPERTY_SET(Set,PropertiesCount,PropertyItem,FastIoCount,FastIoTable)\ 2014 { \ 2015 Set, \ 2016 PropertiesCount, PropertyItem, \ 2017 FastIoCount, FastIoTable \ 2018 } 2019 2020 #define DEFINE_KSPROPERTY_SET_TABLE(tablename) \ 2021 const KSPROPERTY_SET tablename[] = 2022 2023 typedef struct { 2024 const GUID *Set; 2025 ULONG PropertiesCount; 2026 const KSPROPERTY_ITEM *PropertyItem; 2027 ULONG FastIoCount; 2028 const KSFASTPROPERTY_ITEM *FastIoTable; 2029 } KSPROPERTY_SET, *PKSPROPERTY_SET; 2030 2031 #define DEFINE_KSMETHOD_TABLE(tablename) \ 2032 const KSMETHOD_ITEM tablename[] = 2033 2034 #define DEFINE_KSMETHOD_ITEM(MethodId,Flags,MethodHandler,MinMethod,MinData,SupportHandler)\ 2035 { \ 2036 MethodId, (PFNKSHANDLER)MethodHandler, \ 2037 MinMethod, MinData, \ 2038 SupportHandler, Flags \ 2039 } 2040 2041 typedef struct { 2042 ULONG MethodId; 2043 __MINGW_EXTENSION union { 2044 PFNKSHANDLER MethodHandler; 2045 BOOLEAN MethodSupported; 2046 }; 2047 ULONG MinMethod; 2048 ULONG MinData; 2049 PFNKSHANDLER SupportHandler; 2050 ULONG Flags; 2051 } KSMETHOD_ITEM, *PKSMETHOD_ITEM; 2052 2053 #define DEFINE_KSFASTMETHOD_ITEM(MethodId,MethodHandler) \ 2054 { \ 2055 MethodId, (PFNKSFASTHANDLER)MethodHandler \ 2056 } 2057 2058 typedef struct { 2059 ULONG MethodId; 2060 __MINGW_EXTENSION union { 2061 PFNKSFASTHANDLER MethodHandler; 2062 BOOLEAN MethodSupported; 2063 }; 2064 } KSFASTMETHOD_ITEM, *PKSFASTMETHOD_ITEM; 2065 2066 #define DEFINE_KSMETHOD_SET(Set,MethodsCount,MethodItem,FastIoCount,FastIoTable)\ 2067 { \ 2068 Set, \ 2069 MethodsCount, MethodItem, \ 2070 FastIoCount, FastIoTable \ 2071 } 2072 2073 #define DEFINE_KSMETHOD_SET_TABLE(tablename) \ 2074 const KSMETHOD_SET tablename[] = 2075 2076 typedef struct { 2077 const GUID *Set; 2078 ULONG MethodsCount; 2079 const KSMETHOD_ITEM *MethodItem; 2080 ULONG FastIoCount; 2081 const KSFASTMETHOD_ITEM *FastIoTable; 2082 } KSMETHOD_SET, *PKSMETHOD_SET; 2083 2084 typedef struct _KSEVENT_ENTRY KSEVENT_ENTRY, *PKSEVENT_ENTRY; 2085 typedef NTSTATUS (*PFNKSADDEVENT)(PIRP Irp, PKSEVENTDATA EventData, 2086 struct _KSEVENT_ENTRY* EventEntry); 2087 typedef VOID (*PFNKSREMOVEEVENT)(PFILE_OBJECT FileObject, 2088 struct _KSEVENT_ENTRY* EventEntry); 2089 2090 #define DEFINE_KSEVENT_TABLE(tablename) \ 2091 const KSEVENT_ITEM tablename[] = 2092 2093 #define DEFINE_KSEVENT_ITEM(EventId,DataInput,ExtraEntryData,AddHandler,RemoveHandler,SupportHandler)\ 2094 { \ 2095 EventId, DataInput, ExtraEntryData, \ 2096 AddHandler, RemoveHandler, SupportHandler \ 2097 } 2098 2099 typedef struct { 2100 ULONG EventId; 2101 ULONG DataInput; 2102 ULONG ExtraEntryData; 2103 PFNKSADDEVENT AddHandler; 2104 PFNKSREMOVEEVENT RemoveHandler; 2105 PFNKSHANDLER SupportHandler; 2106 } KSEVENT_ITEM, *PKSEVENT_ITEM; 2107 2108 #define DEFINE_KSEVENT_SET(Set,EventsCount,EventItem) \ 2109 { \ 2110 Set, EventsCount, EventItem \ 2111 } 2112 2113 #define DEFINE_KSEVENT_SET_TABLE(tablename) \ 2114 const KSEVENT_SET tablename[] = 2115 2116 typedef struct { 2117 const GUID *Set; 2118 ULONG EventsCount; 2119 const KSEVENT_ITEM *EventItem; 2120 } KSEVENT_SET, *PKSEVENT_SET; 2121 2122 typedef struct { 2123 KDPC Dpc; 2124 ULONG ReferenceCount; 2125 KSPIN_LOCK AccessLock; 2126 } KSDPC_ITEM, *PKSDPC_ITEM; 2127 2128 typedef struct { 2129 KSDPC_ITEM DpcItem; 2130 LIST_ENTRY BufferList; 2131 } KSBUFFER_ITEM, *PKSBUFFER_ITEM; 2132 2133 2134 #define KSEVENT_ENTRY_DELETED 1 2135 #define KSEVENT_ENTRY_ONESHOT 2 2136 #define KSEVENT_ENTRY_BUFFERED 4 2137 2138 struct _KSEVENT_ENTRY { 2139 LIST_ENTRY ListEntry; 2140 PVOID Object; 2141 __MINGW_EXTENSION union { 2142 PKSDPC_ITEM DpcItem; 2143 PKSBUFFER_ITEM BufferItem; 2144 }; 2145 PKSEVENTDATA EventData; 2146 ULONG NotificationType; 2147 const KSEVENT_SET *EventSet; 2148 const KSEVENT_ITEM *EventItem; 2149 PFILE_OBJECT FileObject; 2150 ULONG SemaphoreAdjustment; 2151 ULONG Reserved; 2152 ULONG Flags; 2153 }; 2154 2155 typedef enum { 2156 KSEVENTS_NONE, 2157 KSEVENTS_SPINLOCK, 2158 KSEVENTS_MUTEX, 2159 KSEVENTS_FMUTEX, 2160 KSEVENTS_FMUTEXUNSAFE, 2161 KSEVENTS_INTERRUPT, 2162 KSEVENTS_ERESOURCE 2163 } KSEVENTS_LOCKTYPE; 2164 2165 #define KSDISPATCH_FASTIO 0x80000000 2166 2167 typedef struct { 2168 PDRIVER_DISPATCH Create; 2169 PVOID Context; 2170 UNICODE_STRING ObjectClass; 2171 PSECURITY_DESCRIPTOR SecurityDescriptor; 2172 ULONG Flags; 2173 } KSOBJECT_CREATE_ITEM, *PKSOBJECT_CREATE_ITEM; 2174 2175 typedef VOID (*PFNKSITEMFREECALLBACK)(PKSOBJECT_CREATE_ITEM CreateItem); 2176 2177 #define KSCREATE_ITEM_SECURITYCHANGED 0x00000001 2178 #define KSCREATE_ITEM_WILDCARD 0x00000002 2179 #define KSCREATE_ITEM_NOPARAMETERS 0x00000004 2180 #define KSCREATE_ITEM_FREEONSTOP 0x00000008 2181 2182 #define DEFINE_KSCREATE_DISPATCH_TABLE( tablename ) \ 2183 KSOBJECT_CREATE_ITEM tablename[] = 2184 2185 #define DEFINE_KSCREATE_ITEM(DispatchCreate,TypeName,Context) \ 2186 { \ 2187 (DispatchCreate), (PVOID)(Context), \ 2188 { \ 2189 sizeof(TypeName) - sizeof(UNICODE_NULL),\ 2190 sizeof(TypeName), \ 2191 (PWCHAR)(TypeName) \ 2192 }, \ 2193 NULL, 0 \ 2194 } 2195 2196 #define DEFINE_KSCREATE_ITEMEX(DispatchCreate,TypeName,Context,Flags) \ 2197 { \ 2198 (DispatchCreate), \ 2199 (PVOID)(Context), \ 2200 { \ 2201 sizeof(TypeName) - sizeof(UNICODE_NULL),\ 2202 sizeof(TypeName), \ 2203 (PWCHAR)(TypeName) \ 2204 }, \ 2205 NULL, (Flags) \ 2206 } 2207 2208 #define DEFINE_KSCREATE_ITEMNULL(DispatchCreate,Context) \ 2209 { \ 2210 DispatchCreate, Context, \ 2211 { \ 2212 0, 0, NULL, \ 2213 }, \ 2214 NULL, 0 \ 2215 } 2216 2217 typedef struct { 2218 ULONG CreateItemsCount; 2219 PKSOBJECT_CREATE_ITEM CreateItemsList; 2220 } KSOBJECT_CREATE, *PKSOBJECT_CREATE; 2221 2222 typedef struct { 2223 PDRIVER_DISPATCH DeviceIoControl; 2224 PDRIVER_DISPATCH Read; 2225 PDRIVER_DISPATCH Write; 2226 PDRIVER_DISPATCH Flush; 2227 PDRIVER_DISPATCH Close; 2228 PDRIVER_DISPATCH QuerySecurity; 2229 PDRIVER_DISPATCH SetSecurity; 2230 PFAST_IO_DEVICE_CONTROL FastDeviceIoControl; 2231 PFAST_IO_READ FastRead; 2232 PFAST_IO_WRITE FastWrite; 2233 } KSDISPATCH_TABLE, *PKSDISPATCH_TABLE; 2234 2235 #define DEFINE_KSDISPATCH_TABLE(tablename,DeviceIoControl,Read,Write,Flush,Close,QuerySecurity,SetSecurity,FastDeviceIoControl,FastRead,FastWrite)\ 2236 const KSDISPATCH_TABLE tablename = \ 2237 { \ 2238 DeviceIoControl, \ 2239 Read, \ 2240 Write, \ 2241 Flush, \ 2242 Close, \ 2243 QuerySecurity, \ 2244 SetSecurity, \ 2245 FastDeviceIoControl, \ 2246 FastRead, \ 2247 FastWrite, \ 2248 } 2249 2250 #define KSCREATE_ITEM_IRP_STORAGE(Irp) \ 2251 (*(PKSOBJECT_CREATE_ITEM *)&(Irp)->Tail.Overlay.DriverContext[0]) 2252 #define KSEVENT_SET_IRP_STORAGE(Irp) \ 2253 (*(const KSEVENT_SET **)&(Irp)->Tail.Overlay.DriverContext[0]) 2254 #define KSEVENT_ITEM_IRP_STORAGE(Irp) \ 2255 (*(const KSEVENT_ITEM **)&(Irp)->Tail.Overlay.DriverContext[3]) 2256 #define KSEVENT_ENTRY_IRP_STORAGE(Irp) \ 2257 (*(PKSEVENT_ENTRY *)&(Irp)->Tail.Overlay.DriverContext[0]) 2258 #define KSMETHOD_SET_IRP_STORAGE(Irp) \ 2259 (*(const KSMETHOD_SET **)&(Irp)->Tail.Overlay.DriverContext[0]) 2260 #define KSMETHOD_ITEM_IRP_STORAGE(Irp) \ 2261 (*(const KSMETHOD_ITEM **)&(Irp)->Tail.Overlay.DriverContext[3]) 2262 #define KSMETHOD_TYPE_IRP_STORAGE(Irp) \ 2263 (*(ULONG_PTR *)(&(Irp)->Tail.Overlay.DriverContext[2])) 2264 #define KSQUEUE_SPINLOCK_IRP_STORAGE(Irp) \ 2265 (*(PKSPIN_LOCK *)&(Irp)->Tail.Overlay.DriverContext[1]) 2266 #define KSPROPERTY_SET_IRP_STORAGE(Irp) \ 2267 (*(const KSPROPERTY_SET **)&(Irp)->Tail.Overlay.DriverContext[0]) 2268 #define KSPROPERTY_ITEM_IRP_STORAGE(Irp) \ 2269 (*(const KSPROPERTY_ITEM **)&(Irp)->Tail.Overlay.DriverContext[3]) 2270 #define KSPROPERTY_ATTRIBUTES_IRP_STORAGE(Irp) \ 2271 (*(PKSATTRIBUTE_LIST *)&(Irp)->Tail.Overlay.DriverContext[2]) 2272 2273 typedef PVOID KSDEVICE_HEADER, KSOBJECT_HEADER; 2274 2275 typedef enum { 2276 KsInvokeOnSuccess = 1, 2277 KsInvokeOnError = 2, 2278 KsInvokeOnCancel = 4 2279 } KSCOMPLETION_INVOCATION; 2280 2281 typedef enum { 2282 KsListEntryTail, 2283 KsListEntryHead 2284 } KSLIST_ENTRY_LOCATION; 2285 2286 typedef enum { 2287 KsAcquireOnly, 2288 KsAcquireAndRemove, 2289 KsAcquireOnlySingleItem, 2290 KsAcquireAndRemoveOnlySingleItem 2291 } KSIRP_REMOVAL_OPERATION; 2292 2293 typedef enum { 2294 KsStackCopyToNewLocation, 2295 KsStackReuseCurrentLocation, 2296 KsStackUseNewLocation 2297 } KSSTACK_USE; 2298 2299 typedef enum { 2300 KSTARGET_STATE_DISABLED, 2301 KSTARGET_STATE_ENABLED 2302 } KSTARGET_STATE; 2303 2304 typedef NTSTATUS (*PFNKSIRPLISTCALLBACK)(PIRP Irp, PVOID Context); 2305 typedef VOID (*PFNREFERENCEDEVICEOBJECT)(PVOID Context); 2306 typedef VOID (*PFNDEREFERENCEDEVICEOBJECT)(PVOID Context); 2307 typedef NTSTATUS (*PFNQUERYREFERENCESTRING)(PVOID Context, PWCHAR *String); 2308 2309 #define BUS_INTERFACE_REFERENCE_VERSION 0x100 2310 2311 typedef struct { 2312 INTERFACE Interface; 2313 2314 PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject; 2315 PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject; 2316 PFNQUERYREFERENCESTRING QueryReferenceString; 2317 } BUS_INTERFACE_REFERENCE, *PBUS_INTERFACE_REFERENCE; 2318 2319 #define STATIC_REFERENCE_BUS_INTERFACE STATIC_KSMEDIUMSETID_Standard 2320 #define REFERENCE_BUS_INTERFACE KSMEDIUMSETID_Standard 2321 2322 #endif /* _NTDDK_ */ 2323 2324 #ifndef PACK_PRAGMAS_NOT_SUPPORTED 2325 #include <pshpack1.h> 2326 #endif 2327 2328 typedef struct { 2329 GUID PropertySet; 2330 ULONG Count; 2331 } KSPROPERTY_SERIALHDR,*PKSPROPERTY_SERIALHDR; 2332 2333 #ifndef PACK_PRAGMAS_NOT_SUPPORTED 2334 #include <poppack.h> 2335 #endif 2336 2337 typedef struct { 2338 KSIDENTIFIER PropTypeSet; 2339 ULONG Id; 2340 ULONG PropertyLength; 2341 } KSPROPERTY_SERIAL,*PKSPROPERTY_SERIAL; 2342 2343 2344 #if defined(_NTDDK_) 2345 2346 #define IOCTL_KS_HANDSHAKE \ 2347 CTL_CODE(FILE_DEVICE_KS, 0x007, METHOD_NEITHER, FILE_ANY_ACCESS) 2348 2349 typedef struct { 2350 GUID ProtocolId; 2351 PVOID Argument1; 2352 PVOID Argument2; 2353 } KSHANDSHAKE, *PKSHANDSHAKE; 2354 2355 typedef struct _KSGATE KSGATE, *PKSGATE; 2356 2357 struct _KSGATE { 2358 LONG Count; 2359 PKSGATE NextGate; 2360 }; 2361 2362 typedef PVOID KSOBJECT_BAG; 2363 2364 2365 typedef BOOLEAN (*PFNKSGENERATEEVENTCALLBACK)(PVOID Context, 2366 PKSEVENT_ENTRY EventEntry); 2367 2368 typedef NTSTATUS (*PFNKSDEVICECREATE)(PKSDEVICE Device); 2369 2370 typedef NTSTATUS (*PFNKSDEVICEPNPSTART)(PKSDEVICE Device,PIRP Irp, 2371 PCM_RESOURCE_LIST TranslatedResourceList, 2372 PCM_RESOURCE_LIST UntranslatedResourceList); 2373 2374 typedef NTSTATUS (*PFNKSDEVICE)(PKSDEVICE Device); 2375 2376 typedef NTSTATUS (*PFNKSDEVICEIRP)(PKSDEVICE Device,PIRP Irp); 2377 2378 typedef void (*PFNKSDEVICEIRPVOID)(PKSDEVICE Device,PIRP Irp); 2379 2380 typedef NTSTATUS (*PFNKSDEVICEQUERYCAPABILITIES)(PKSDEVICE Device,PIRP Irp, 2381 PDEVICE_CAPABILITIES Capabilities); 2382 2383 typedef NTSTATUS (*PFNKSDEVICEQUERYPOWER)(PKSDEVICE Device,PIRP Irp, 2384 DEVICE_POWER_STATE DeviceTo, 2385 DEVICE_POWER_STATE DeviceFrom, 2386 SYSTEM_POWER_STATE SystemTo, 2387 SYSTEM_POWER_STATE SystemFrom, 2388 POWER_ACTION Action); 2389 2390 typedef void (*PFNKSDEVICESETPOWER)(PKSDEVICE Device,PIRP Irp, 2391 DEVICE_POWER_STATE To, 2392 DEVICE_POWER_STATE From); 2393 2394 typedef NTSTATUS (*PFNKSFILTERFACTORYVOID)(PKSFILTERFACTORY FilterFactory); 2395 2396 typedef void (*PFNKSFILTERFACTORYPOWER)(PKSFILTERFACTORY FilterFactory, 2397 DEVICE_POWER_STATE State); 2398 2399 typedef NTSTATUS (*PFNKSFILTERIRP)(PKSFILTER Filter,PIRP Irp); 2400 2401 typedef NTSTATUS (*PFNKSFILTERPROCESS)(PKSFILTER Filter, 2402 PKSPROCESSPIN_INDEXENTRY Index); 2403 2404 typedef NTSTATUS (*PFNKSFILTERVOID)(PKSFILTER Filter); 2405 2406 typedef void (*PFNKSFILTERPOWER)(PKSFILTER Filter,DEVICE_POWER_STATE State); 2407 2408 typedef NTSTATUS (*PFNKSPINIRP)(PKSPIN Pin,PIRP Irp); 2409 2410 typedef NTSTATUS (*PFNKSPINSETDEVICESTATE)(PKSPIN Pin,KSSTATE ToState, 2411 KSSTATE FromState); 2412 2413 typedef NTSTATUS (*PFNKSPINSETDATAFORMAT)(PKSPIN Pin,PKSDATAFORMAT OldFormat, 2414 PKSMULTIPLE_ITEM OldAttributeList, 2415 const KSDATARANGE *DataRange, 2416 const KSATTRIBUTE_LIST *AttributeRange); 2417 2418 typedef NTSTATUS (*PFNKSPINHANDSHAKE)(PKSPIN Pin,PKSHANDSHAKE In, 2419 PKSHANDSHAKE Out); 2420 2421 typedef NTSTATUS (*PFNKSPIN)(PKSPIN Pin); 2422 2423 typedef void (*PFNKSPINVOID)(PKSPIN Pin); 2424 2425 typedef void (*PFNKSPINPOWER)(PKSPIN Pin,DEVICE_POWER_STATE State); 2426 2427 typedef BOOLEAN (*PFNKSPINSETTIMER)(PKSPIN Pin,PKTIMER Timer, 2428 LARGE_INTEGER DueTime,PKDPC Dpc); 2429 2430 typedef BOOLEAN (*PFNKSPINCANCELTIMER)(PKSPIN Pin,PKTIMER Timer); 2431 2432 typedef LONGLONG (FASTCALL *PFNKSPINCORRELATEDTIME)(PKSPIN Pin, 2433 PLONGLONG SystemTime); 2434 2435 typedef void (*PFNKSPINRESOLUTION)(PKSPIN Pin,PKSRESOLUTION Resolution); 2436 2437 typedef NTSTATUS (*PFNKSPININITIALIZEALLOCATOR)(PKSPIN Pin, 2438 PKSALLOCATOR_FRAMING AllocatorFraming, 2439 PVOID *Context); 2440 2441 typedef void (*PFNKSSTREAMPOINTER)(PKSSTREAM_POINTER StreamPointer); 2442 2443 2444 typedef struct KSAUTOMATION_TABLE_ KSAUTOMATION_TABLE,*PKSAUTOMATION_TABLE; 2445 2446 struct KSAUTOMATION_TABLE_ { 2447 ULONG PropertySetsCount; 2448 ULONG PropertyItemSize; 2449 const KSPROPERTY_SET *PropertySets; 2450 ULONG MethodSetsCount; 2451 ULONG MethodItemSize; 2452 const KSMETHOD_SET *MethodSets; 2453 ULONG EventSetsCount; 2454 ULONG EventItemSize; 2455 const KSEVENT_SET *EventSets; 2456 #ifndef _WIN64 2457 PVOID Alignment; 2458 #endif 2459 }; 2460 2461 #define DEFINE_KSAUTOMATION_TABLE(table) \ 2462 const KSAUTOMATION_TABLE table = 2463 2464 #define DEFINE_KSAUTOMATION_PROPERTIES(table) \ 2465 SIZEOF_ARRAY(table), \ 2466 sizeof(KSPROPERTY_ITEM), \ 2467 table 2468 2469 #define DEFINE_KSAUTOMATION_METHODS(table) \ 2470 SIZEOF_ARRAY(table), \ 2471 sizeof(KSMETHOD_ITEM), \ 2472 table 2473 2474 #define DEFINE_KSAUTOMATION_EVENTS(table) \ 2475 SIZEOF_ARRAY(table), \ 2476 sizeof(KSEVENT_ITEM), \ 2477 table 2478 2479 #define DEFINE_KSAUTOMATION_PROPERTIES_NULL \ 2480 0, \ 2481 sizeof(KSPROPERTY_ITEM), \ 2482 NULL 2483 2484 #define DEFINE_KSAUTOMATION_METHODS_NULL \ 2485 0, \ 2486 sizeof(KSMETHOD_ITEM), \ 2487 NULL 2488 2489 #define DEFINE_KSAUTOMATION_EVENTS_NULL \ 2490 0, \ 2491 sizeof(KSEVENT_ITEM), \ 2492 NULL 2493 2494 #define MIN_DEV_VER_FOR_QI (0x100) 2495 2496 struct _KSDEVICE_DISPATCH { 2497 PFNKSDEVICECREATE Add; 2498 PFNKSDEVICEPNPSTART Start; 2499 PFNKSDEVICE PostStart; 2500 PFNKSDEVICEIRP QueryStop; 2501 PFNKSDEVICEIRPVOID CancelStop; 2502 PFNKSDEVICEIRPVOID Stop; 2503 PFNKSDEVICEIRP QueryRemove; 2504 PFNKSDEVICEIRPVOID CancelRemove; 2505 PFNKSDEVICEIRPVOID Remove; 2506 PFNKSDEVICEQUERYCAPABILITIES QueryCapabilities; 2507 PFNKSDEVICEIRPVOID SurpriseRemoval; 2508 PFNKSDEVICEQUERYPOWER QueryPower; 2509 PFNKSDEVICESETPOWER SetPower; 2510 PFNKSDEVICEIRP QueryInterface; 2511 }; 2512 2513 struct _KSFILTER_DISPATCH { 2514 PFNKSFILTERIRP Create; 2515 PFNKSFILTERIRP Close; 2516 PFNKSFILTERPROCESS Process; 2517 PFNKSFILTERVOID Reset; 2518 }; 2519 2520 struct _KSPIN_DISPATCH { 2521 PFNKSPINIRP Create; 2522 PFNKSPINIRP Close; 2523 PFNKSPIN Process; 2524 PFNKSPINVOID Reset; 2525 PFNKSPINSETDATAFORMAT SetDataFormat; 2526 PFNKSPINSETDEVICESTATE SetDeviceState; 2527 PFNKSPIN Connect; 2528 PFNKSPINVOID Disconnect; 2529 const KSCLOCK_DISPATCH *Clock; 2530 const KSALLOCATOR_DISPATCH *Allocator; 2531 }; 2532 2533 struct _KSCLOCK_DISPATCH { 2534 PFNKSPINSETTIMER SetTimer; 2535 PFNKSPINCANCELTIMER CancelTimer; 2536 PFNKSPINCORRELATEDTIME CorrelatedTime; 2537 PFNKSPINRESOLUTION Resolution; 2538 }; 2539 2540 struct _KSALLOCATOR_DISPATCH { 2541 PFNKSPININITIALIZEALLOCATOR InitializeAllocator; 2542 PFNKSDELETEALLOCATOR DeleteAllocator; 2543 PFNKSDEFAULTALLOCATE Allocate; 2544 PFNKSDEFAULTFREE Free; 2545 }; 2546 2547 #define KSDEVICE_DESCRIPTOR_VERSION (0x100) 2548 2549 struct _KSDEVICE_DESCRIPTOR { 2550 const KSDEVICE_DISPATCH *Dispatch; 2551 ULONG FilterDescriptorsCount; 2552 const KSFILTER_DESCRIPTOR*const *FilterDescriptors; 2553 ULONG Version; 2554 }; 2555 2556 struct _KSFILTER_DESCRIPTOR { 2557 const KSFILTER_DISPATCH *Dispatch; 2558 const KSAUTOMATION_TABLE *AutomationTable; 2559 ULONG Version; 2560 #define KSFILTER_DESCRIPTOR_VERSION ((ULONG)-1) 2561 ULONG Flags; 2562 #define KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING 0x00000001 2563 #define KSFILTER_FLAG_CRITICAL_PROCESSING 0x00000002 2564 #define KSFILTER_FLAG_HYPERCRITICAL_PROCESSING 0x00000004 2565 #define KSFILTER_FLAG_RECEIVE_ZERO_LENGTH_SAMPLES 0x00000008 2566 #define KSFILTER_FLAG_DENY_USERMODE_ACCESS 0x80000000 2567 const GUID *ReferenceGuid; 2568 ULONG PinDescriptorsCount; 2569 ULONG PinDescriptorSize; 2570 const KSPIN_DESCRIPTOR_EX *PinDescriptors; 2571 ULONG CategoriesCount; 2572 const GUID *Categories; 2573 ULONG NodeDescriptorsCount; 2574 ULONG NodeDescriptorSize; 2575 const KSNODE_DESCRIPTOR *NodeDescriptors; 2576 ULONG ConnectionsCount; 2577 const KSTOPOLOGY_CONNECTION *Connections; 2578 const KSCOMPONENTID *ComponentId; 2579 }; 2580 2581 #define DEFINE_KSFILTER_DESCRIPTOR(descriptor) \ 2582 const KSFILTER_DESCRIPTOR descriptor = 2583 2584 #define DEFINE_KSFILTER_PIN_DESCRIPTORS(table) \ 2585 SIZEOF_ARRAY(table), \ 2586 sizeof(table[0]), \ 2587 table 2588 2589 #define DEFINE_KSFILTER_CATEGORIES(table) \ 2590 SIZEOF_ARRAY(table), \ 2591 table 2592 2593 #define DEFINE_KSFILTER_CATEGORY(category) \ 2594 1, \ 2595 &(category) 2596 2597 #define DEFINE_KSFILTER_CATEGORIES_NULL \ 2598 0, \ 2599 NULL 2600 2601 #define DEFINE_KSFILTER_NODE_DESCRIPTORS(table) \ 2602 SIZEOF_ARRAY(table), \ 2603 sizeof(table[0]), \ 2604 table 2605 2606 #define DEFINE_KSFILTER_NODE_DESCRIPTORS_NULL \ 2607 0, \ 2608 sizeof(KSNODE_DESCRIPTOR), \ 2609 NULL 2610 2611 #define DEFINE_KSFILTER_CONNECTIONS(table) \ 2612 SIZEOF_ARRAY(table), \ 2613 table 2614 2615 #define DEFINE_KSFILTER_DEFAULT_CONNECTIONS \ 2616 0, \ 2617 NULL 2618 2619 #define DEFINE_KSFILTER_DESCRIPTOR_TABLE(table) \ 2620 const KSFILTER_DESCRIPTOR*const table[] = 2621 2622 struct _KSPIN_DESCRIPTOR_EX { 2623 const KSPIN_DISPATCH *Dispatch; 2624 const KSAUTOMATION_TABLE *AutomationTable; 2625 KSPIN_DESCRIPTOR PinDescriptor; 2626 ULONG Flags; 2627 #define KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING 2628 #define KSPIN_FLAG_CRITICAL_PROCESSING KSFILTER_FLAG_CRITICAL_PROCESSING 2629 #define KSPIN_FLAG_HYPERCRITICAL_PROCESSING KSFILTER_FLAG_HYPERCRITICAL_PROCESSING 2630 #define KSPIN_FLAG_ASYNCHRONOUS_PROCESSING 0x00000008 2631 #define KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING 0x00000010 2632 #define KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL 0x00000020 2633 #define KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING 0x00000040 2634 #define KSPIN_FLAG_ENFORCE_FIFO 0x00000080 2635 #define KSPIN_FLAG_GENERATE_MAPPINGS 0x00000100 2636 #define KSPIN_FLAG_DISTINCT_TRAILING_EDGE 0x00000200 2637 #define KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY 0x00010000 2638 #define KSPIN_FLAG_SPLITTER 0x00020000 2639 #define KSPIN_FLAG_USE_STANDARD_TRANSPORT 0x00040000 2640 #define KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT 0x00080000 2641 #define KSPIN_FLAG_FIXED_FORMAT 0x00100000 2642 #define KSPIN_FLAG_GENERATE_EOS_EVENTS 0x00200000 2643 #define KSPIN_FLAG_RENDERER (KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY|KSPIN_FLAG_GENERATE_EOS_EVENTS) 2644 #define KSPIN_FLAG_IMPLEMENT_CLOCK 0x00400000 2645 #define KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING 0x00800000 2646 #define KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE 0x01000000 2647 #define KSPIN_FLAG_DENY_USERMODE_ACCESS 0x80000000 2648 ULONG InstancesPossible; 2649 ULONG InstancesNecessary; 2650 const KSALLOCATOR_FRAMING_EX *AllocatorFraming; 2651 PFNKSINTERSECTHANDLEREX IntersectHandler; 2652 }; 2653 2654 #define DEFINE_KSPIN_DEFAULT_INTERFACES \ 2655 0, \ 2656 NULL 2657 2658 #define DEFINE_KSPIN_DEFAULT_MEDIUMS \ 2659 0, \ 2660 NULL 2661 2662 struct _KSNODE_DESCRIPTOR { 2663 const KSAUTOMATION_TABLE *AutomationTable; 2664 const GUID *Type; 2665 const GUID *Name; 2666 #ifndef _WIN64 2667 PVOID Alignment; 2668 #endif 2669 }; 2670 2671 #ifndef _WIN64 2672 #define DEFINE_NODE_DESCRIPTOR(automation,type,name) \ 2673 { (automation), (type), (name), NULL } 2674 #else 2675 #define DEFINE_NODE_DESCRIPTOR(automation,type,name) \ 2676 { (automation), (type), (name) } 2677 #endif 2678 2679 struct _KSDEVICE { 2680 const KSDEVICE_DESCRIPTOR *Descriptor; 2681 KSOBJECT_BAG Bag; 2682 PVOID Context; 2683 PDEVICE_OBJECT FunctionalDeviceObject; 2684 PDEVICE_OBJECT PhysicalDeviceObject; 2685 PDEVICE_OBJECT NextDeviceObject; 2686 BOOLEAN Started; 2687 SYSTEM_POWER_STATE SystemPowerState; 2688 DEVICE_POWER_STATE DevicePowerState; 2689 }; 2690 2691 struct _KSFILTERFACTORY { 2692 const KSFILTER_DESCRIPTOR *FilterDescriptor; 2693 KSOBJECT_BAG Bag; 2694 PVOID Context; 2695 }; 2696 2697 struct _KSFILTER { 2698 const KSFILTER_DESCRIPTOR *Descriptor; 2699 KSOBJECT_BAG Bag; 2700 PVOID Context; 2701 }; 2702 2703 struct _KSPIN { 2704 const KSPIN_DESCRIPTOR_EX *Descriptor; 2705 KSOBJECT_BAG Bag; 2706 PVOID Context; 2707 ULONG Id; 2708 KSPIN_COMMUNICATION Communication; 2709 BOOLEAN ConnectionIsExternal; 2710 KSPIN_INTERFACE ConnectionInterface; 2711 KSPIN_MEDIUM ConnectionMedium; 2712 KSPRIORITY ConnectionPriority; 2713 PKSDATAFORMAT ConnectionFormat; 2714 PKSMULTIPLE_ITEM AttributeList; 2715 ULONG StreamHeaderSize; 2716 KSPIN_DATAFLOW DataFlow; 2717 KSSTATE DeviceState; 2718 KSRESET ResetState; 2719 KSSTATE ClientState; 2720 }; 2721 2722 struct _KSMAPPING { 2723 PHYSICAL_ADDRESS PhysicalAddress; 2724 ULONG ByteCount; 2725 ULONG Alignment; 2726 }; 2727 2728 struct _KSSTREAM_POINTER_OFFSET 2729 { 2730 #if defined(_NTDDK_) 2731 __MINGW_EXTENSION union { 2732 PUCHAR Data; 2733 PKSMAPPING Mappings; 2734 }; 2735 #else 2736 PUCHAR Data; 2737 #endif /* _NTDDK_ */ 2738 #ifndef _WIN64 2739 PVOID Alignment; 2740 #endif 2741 ULONG Count; 2742 ULONG Remaining; 2743 }; 2744 2745 struct _KSSTREAM_POINTER 2746 { 2747 PVOID Context; 2748 PKSPIN Pin; 2749 PKSSTREAM_HEADER StreamHeader; 2750 PKSSTREAM_POINTER_OFFSET Offset; 2751 KSSTREAM_POINTER_OFFSET OffsetIn; 2752 KSSTREAM_POINTER_OFFSET OffsetOut; 2753 }; 2754 2755 struct _KSPROCESSPIN { 2756 PKSPIN Pin; 2757 PKSSTREAM_POINTER StreamPointer; 2758 PKSPROCESSPIN InPlaceCounterpart; 2759 PKSPROCESSPIN DelegateBranch; 2760 PKSPROCESSPIN CopySource; 2761 PVOID Data; 2762 ULONG BytesAvailable; 2763 ULONG BytesUsed; 2764 ULONG Flags; 2765 BOOLEAN Terminate; 2766 }; 2767 2768 struct _KSPROCESSPIN_INDEXENTRY { 2769 PKSPROCESSPIN *Pins; 2770 ULONG Count; 2771 }; 2772 2773 typedef enum { 2774 KsObjectTypeDevice, 2775 KsObjectTypeFilterFactory, 2776 KsObjectTypeFilter, 2777 KsObjectTypePin 2778 } KSOBJECTTYPE; 2779 2780 2781 typedef void (*PFNKSFREE)(PVOID Data); 2782 2783 typedef void (*PFNKSPINFRAMERETURN)(PKSPIN Pin,PVOID Data,ULONG Size,PMDL Mdl, 2784 PVOID Context,NTSTATUS Status); 2785 2786 typedef void (*PFNKSPINIRPCOMPLETION)(PKSPIN Pin,PIRP Irp); 2787 2788 2789 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) 2790 #ifndef _IKsControl_ 2791 #define _IKsControl_ 2792 2793 typedef struct IKsControl *PIKSCONTROL; 2794 2795 #ifndef DEFINE_ABSTRACT_UNKNOWN 2796 #define DEFINE_ABSTRACT_UNKNOWN() \ 2797 STDMETHOD_(NTSTATUS,QueryInterface) (THIS_ \ 2798 REFIID InterfaceId, \ 2799 PVOID *Interface \ 2800 ) PURE; \ 2801 STDMETHOD_(ULONG,AddRef)(THIS) PURE; \ 2802 STDMETHOD_(ULONG,Release)(THIS) PURE; 2803 #endif 2804 2805 #undef INTERFACE 2806 #define INTERFACE IKsControl 2807 DECLARE_INTERFACE_(IKsControl,IUnknown) 2808 { 2809 DEFINE_ABSTRACT_UNKNOWN() 2810 STDMETHOD_(NTSTATUS,KsProperty)(THIS_ 2811 PKSPROPERTY Property, 2812 ULONG PropertyLength, 2813 PVOID PropertyData, 2814 ULONG DataLength, 2815 ULONG *BytesReturned 2816 ) PURE; 2817 STDMETHOD_(NTSTATUS,KsMethod) (THIS_ 2818 PKSMETHOD Method, 2819 ULONG MethodLength, 2820 PVOID MethodData, 2821 ULONG DataLength, 2822 ULONG *BytesReturned 2823 ) PURE; 2824 STDMETHOD_(NTSTATUS,KsEvent) (THIS_ 2825 PKSEVENT Event, 2826 ULONG EventLength, 2827 PVOID EventData, 2828 ULONG DataLength, 2829 ULONG *BytesReturned 2830 ) PURE; 2831 }; 2832 typedef struct IKsReferenceClock *PIKSREFERENCECLOCK; 2833 2834 #undef INTERFACE 2835 #define INTERFACE IKsReferenceClock 2836 DECLARE_INTERFACE_(IKsReferenceClock,IUnknown) 2837 { 2838 DEFINE_ABSTRACT_UNKNOWN() 2839 STDMETHOD_(LONGLONG,GetTime) (THIS) PURE; 2840 STDMETHOD_(LONGLONG,GetPhysicalTime) (THIS) PURE; 2841 STDMETHOD_(LONGLONG,GetCorrelatedTime)(THIS_ 2842 PLONGLONG SystemTime 2843 ) PURE; 2844 STDMETHOD_(LONGLONG,GetCorrelatedPhysicalTime)(THIS_ 2845 PLONGLONG SystemTime 2846 ) PURE; 2847 STDMETHOD_(NTSTATUS,GetResolution) (THIS_ 2848 PKSRESOLUTION Resolution 2849 ) PURE; 2850 STDMETHOD_(NTSTATUS,GetState) (THIS_ 2851 PKSSTATE State 2852 ) PURE; 2853 }; 2854 #undef INTERFACE 2855 2856 #define INTERFACE IKsDeviceFunctions 2857 DECLARE_INTERFACE_(IKsDeviceFunctions,IUnknown) 2858 { 2859 DEFINE_ABSTRACT_UNKNOWN() 2860 STDMETHOD_(NTSTATUS,RegisterAdapterObjectEx) (THIS_ 2861 PADAPTER_OBJECT AdapterObject, 2862 PDEVICE_DESCRIPTION DeviceDescription, 2863 ULONG NumberOfMapRegisters, 2864 ULONG MaxMappingsByteCount, 2865 ULONG MappingTableStride 2866 ) PURE; 2867 }; 2868 2869 #undef INTERFACE 2870 #define STATIC_IID_IKsControl \ 2871 0x28F54685L,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96 2872 DEFINE_GUID(IID_IKsControl, 2873 0x28F54685L,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96); 2874 #define STATIC_IID_IKsFastClock \ 2875 0xc9902485,0xc180,0x11d2,0x84,0x73,0xd4,0x23,0x94,0x45,0x9e,0x5e 2876 DEFINE_GUID(IID_IKsFastClock, 2877 0xc9902485,0xc180,0x11d2,0x84,0x73,0xd4,0x23,0x94,0x45,0x9e,0x5e); 2878 #define STATIC_IID_IKsDeviceFunctions \ 2879 0xe234f2e2,0xbd69,0x4f8c,0xb3,0xf2,0x7c,0xd7,0x9e,0xd4,0x66,0xbd 2880 DEFINE_GUID(IID_IKsDeviceFunctions, 2881 0xe234f2e2,0xbd69,0x4f8c,0xb3,0xf2,0x7c,0xd7,0x9e,0xd4,0x66,0xbd); 2882 #endif /* _IKsControl_ */ 2883 #endif /* defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) */ 2884 2885 #endif /* _NTDDK_ */ 2886 2887 2888 #ifdef __cplusplus 2889 extern "C" { 2890 #endif 2891 2892 #ifdef _KSDDK_ 2893 #define KSDDKAPI 2894 #else 2895 #define KSDDKAPI DECLSPEC_IMPORT 2896 #endif 2897 2898 #if defined(_NTDDK_) 2899 2900 KSDDKAPI NTSTATUS NTAPI KsEnableEvent 2901 (PIRP Irp, ULONG EventSetsCount, const KSEVENT_SET *EventSet, 2902 PLIST_ENTRY EventsList, KSEVENTS_LOCKTYPE EventsFlags, 2903 PVOID EventsLock); 2904 2905 KSDDKAPI NTSTATUS NTAPI KsEnableEventWithAllocator 2906 (PIRP Irp, ULONG EventSetsCount, const KSEVENT_SET *EventSet, 2907 PLIST_ENTRY EventsList, KSEVENTS_LOCKTYPE EventsFlags, 2908 PVOID EventsLock, PFNKSALLOCATOR Allocator, ULONG EventItemSize); 2909 2910 KSDDKAPI NTSTATUS NTAPI KsDisableEvent 2911 (PIRP Irp, PLIST_ENTRY EventsList, KSEVENTS_LOCKTYPE EventsFlags, 2912 PVOID EventsLock); 2913 2914 KSDDKAPI VOID NTAPI KsDiscardEvent (PKSEVENT_ENTRY EventEntry); 2915 2916 KSDDKAPI VOID NTAPI KsFreeEventList 2917 (PFILE_OBJECT FileObject, PLIST_ENTRY EventsList, 2918 KSEVENTS_LOCKTYPE EventsFlags, PVOID EventsLock); 2919 2920 KSDDKAPI NTSTATUS NTAPI KsGenerateEvent (PKSEVENT_ENTRY EventEntry); 2921 2922 KSDDKAPI NTSTATUS NTAPI KsGenerateDataEvent 2923 (PKSEVENT_ENTRY EventEntry, ULONG DataSize, PVOID Data); 2924 2925 KSDDKAPI VOID NTAPI KsGenerateEventList 2926 (GUID *Set, ULONG EventId, PLIST_ENTRY EventsList, 2927 KSEVENTS_LOCKTYPE EventsFlags, PVOID EventsLock); 2928 2929 KSDDKAPI NTSTATUS NTAPI KsPropertyHandler 2930 (PIRP Irp, ULONG PropertySetsCount, 2931 const KSPROPERTY_SET *PropertySet); 2932 2933 KSDDKAPI NTSTATUS NTAPI KsPropertyHandlerWithAllocator 2934 (PIRP Irp, ULONG PropertySetsCount, 2935 const KSPROPERTY_SET *PropertySet, PFNKSALLOCATOR Allocator, 2936 ULONG PropertyItemSize); 2937 2938 KSDDKAPI BOOLEAN NTAPI KsFastPropertyHandler 2939 (PFILE_OBJECT FileObject, PKSPROPERTY Property, 2940 ULONG PropertyLength, PVOID Data, ULONG DataLength, 2941 PIO_STATUS_BLOCK IoStatus, ULONG PropertySetsCount, 2942 const KSPROPERTY_SET *PropertySet); 2943 2944 KSDDKAPI NTSTATUS NTAPI KsMethodHandler 2945 (PIRP Irp, ULONG MethodSetsCount, 2946 const KSMETHOD_SET *MethodSet); 2947 2948 KSDDKAPI NTSTATUS NTAPI KsMethodHandlerWithAllocator 2949 (PIRP Irp, ULONG MethodSetsCount, 2950 const KSMETHOD_SET *MethodSet, PFNKSALLOCATOR Allocator, 2951 ULONG MethodItemSize); 2952 2953 KSDDKAPI BOOLEAN NTAPI KsFastMethodHandler 2954 (PFILE_OBJECT FileObject, PKSMETHOD Method, ULONG MethodLength, 2955 PVOID Data, ULONG DataLength, PIO_STATUS_BLOCK IoStatus, 2956 ULONG MethodSetsCount, const KSMETHOD_SET *MethodSet); 2957 2958 KSDDKAPI NTSTATUS NTAPI KsCreateDefaultAllocator (PIRP Irp); 2959 2960 KSDDKAPI NTSTATUS NTAPI KsCreateDefaultAllocatorEx 2961 (PIRP Irp, PVOID InitializeContext, 2962 PFNKSDEFAULTALLOCATE DefaultAllocate, 2963 PFNKSDEFAULTFREE DefaultFree, 2964 PFNKSINITIALIZEALLOCATOR InitializeAllocator, 2965 PFNKSDELETEALLOCATOR DeleteAllocator); 2966 2967 KSDDKAPI NTSTATUS NTAPI KsCreateAllocator 2968 (HANDLE ConnectionHandle, PKSALLOCATOR_FRAMING AllocatorFraming, 2969 PHANDLE AllocatorHandle); 2970 2971 KSDDKAPI NTSTATUS NTAPI KsValidateAllocatorCreateRequest 2972 (PIRP Irp, PKSALLOCATOR_FRAMING *AllocatorFraming); 2973 2974 KSDDKAPI NTSTATUS NTAPI KsValidateAllocatorFramingEx 2975 (PKSALLOCATOR_FRAMING_EX Framing, ULONG BufferSize, 2976 const KSALLOCATOR_FRAMING_EX *PinFraming); 2977 2978 KSDDKAPI NTSTATUS NTAPI KsAllocateDefaultClock (PKSDEFAULTCLOCK *DefaultClock); 2979 2980 KSDDKAPI NTSTATUS NTAPI KsAllocateDefaultClockEx 2981 (PKSDEFAULTCLOCK *DefaultClock, PVOID Context, 2982 PFNKSSETTIMER SetTimer, PFNKSCANCELTIMER CancelTimer, 2983 PFNKSCORRELATEDTIME CorrelatedTime, 2984 const KSRESOLUTION *Resolution, ULONG Flags); 2985 2986 KSDDKAPI VOID NTAPI KsFreeDefaultClock (PKSDEFAULTCLOCK DefaultClock); 2987 KSDDKAPI NTSTATUS NTAPI KsCreateDefaultClock (PIRP Irp, PKSDEFAULTCLOCK DefaultClock); 2988 2989 KSDDKAPI NTSTATUS NTAPI KsCreateClock 2990 (HANDLE ConnectionHandle, PKSCLOCK_CREATE ClockCreate, 2991 PHANDLE ClockHandle); 2992 2993 KSDDKAPI NTSTATUS NTAPI KsValidateClockCreateRequest 2994 (PIRP Irp, PKSCLOCK_CREATE *ClockCreate); 2995 2996 KSDDKAPI KSSTATE NTAPI KsGetDefaultClockState (PKSDEFAULTCLOCK DefaultClock); 2997 KSDDKAPI VOID NTAPI KsSetDefaultClockState(PKSDEFAULTCLOCK DefaultClock, KSSTATE State); 2998 KSDDKAPI LONGLONG NTAPI KsGetDefaultClockTime (PKSDEFAULTCLOCK DefaultClock); 2999 KSDDKAPI VOID NTAPI KsSetDefaultClockTime(PKSDEFAULTCLOCK DefaultClock, LONGLONG Time); 3000 3001 KSDDKAPI NTSTATUS NTAPI KsCreatePin 3002 (HANDLE FilterHandle, PKSPIN_CONNECT Connect, 3003 ACCESS_MASK DesiredAccess, PHANDLE ConnectionHandle); 3004 3005 KSDDKAPI NTSTATUS NTAPI KsValidateConnectRequest 3006 (PIRP Irp, ULONG DescriptorsCount, 3007 const KSPIN_DESCRIPTOR *Descriptor, PKSPIN_CONNECT *Connect); 3008 3009 KSDDKAPI NTSTATUS NTAPI KsPinPropertyHandler 3010 (PIRP Irp, PKSPROPERTY Property, PVOID Data, 3011 ULONG DescriptorsCount, const KSPIN_DESCRIPTOR *Descriptor); 3012 3013 KSDDKAPI NTSTATUS NTAPI KsPinDataIntersection 3014 (PIRP Irp, PKSP_PIN Pin, PVOID Data, ULONG DescriptorsCount, 3015 const KSPIN_DESCRIPTOR *Descriptor, 3016 PFNKSINTERSECTHANDLER IntersectHandler); 3017 3018 KSDDKAPI NTSTATUS NTAPI KsPinDataIntersectionEx 3019 (PIRP Irp, PKSP_PIN Pin, PVOID Data, ULONG DescriptorsCount, 3020 const KSPIN_DESCRIPTOR *Descriptor, ULONG DescriptorSize, 3021 PFNKSINTERSECTHANDLEREX IntersectHandler, PVOID HandlerContext); 3022 3023 KSDDKAPI NTSTATUS NTAPI KsHandleSizedListQuery 3024 (PIRP Irp, ULONG DataItemsCount, ULONG DataItemSize, 3025 const VOID *DataItems); 3026 3027 #ifndef MAKEINTRESOURCE 3028 #define MAKEINTRESOURCE(r) ((ULONG_PTR) (USHORT) r) 3029 #endif 3030 #ifndef RT_STRING 3031 #define RT_STRING MAKEINTRESOURCE(6) 3032 #define RT_RCDATA MAKEINTRESOURCE(10) 3033 #endif 3034 3035 KSDDKAPI NTSTATUS NTAPI KsLoadResource 3036 (PVOID ImageBase, POOL_TYPE PoolType, ULONG_PTR ResourceName, 3037 ULONG ResourceType, PVOID *Resource, PULONG ResourceSize); 3038 3039 KSDDKAPI NTSTATUS NTAPI KsGetImageNameAndResourceId 3040 (HANDLE RegKey, PUNICODE_STRING ImageName, PULONG_PTR ResourceId, 3041 PULONG ValueType); 3042 3043 KSDDKAPI NTSTATUS NTAPI KsMapModuleName 3044 (PDEVICE_OBJECT PhysicalDeviceObject, PUNICODE_STRING ModuleName, 3045 PUNICODE_STRING ImageName, PULONG_PTR ResourceId, 3046 PULONG ValueType); 3047 3048 KSDDKAPI NTSTATUS NTAPI KsReferenceBusObject (KSDEVICE_HEADER Header); 3049 KSDDKAPI VOID NTAPI KsDereferenceBusObject (KSDEVICE_HEADER Header); 3050 KSDDKAPI NTSTATUS NTAPI KsDispatchQuerySecurity (PDEVICE_OBJECT DeviceObject, PIRP Irp); 3051 KSDDKAPI NTSTATUS NTAPI KsDispatchSetSecurity (PDEVICE_OBJECT DeviceObject, PIRP Irp); 3052 KSDDKAPI NTSTATUS NTAPI KsDispatchSpecificProperty (PIRP Irp, PFNKSHANDLER Handler); 3053 KSDDKAPI NTSTATUS NTAPI KsDispatchSpecificMethod (PIRP Irp, PFNKSHANDLER Handler); 3054 3055 KSDDKAPI NTSTATUS NTAPI KsReadFile 3056 (PFILE_OBJECT FileObject, PKEVENT Event, PVOID PortContext, 3057 PIO_STATUS_BLOCK IoStatusBlock, PVOID Buffer, ULONG Length, 3058 ULONG Key, KPROCESSOR_MODE RequestorMode); 3059 3060 KSDDKAPI NTSTATUS NTAPI KsWriteFile 3061 (PFILE_OBJECT FileObject, PKEVENT Event, PVOID PortContext, 3062 PIO_STATUS_BLOCK IoStatusBlock, PVOID Buffer, ULONG Length, 3063 ULONG Key, KPROCESSOR_MODE RequestorMode); 3064 3065 KSDDKAPI NTSTATUS NTAPI KsQueryInformationFile 3066 (PFILE_OBJECT FileObject, PVOID FileInformation, ULONG Length, 3067 FILE_INFORMATION_CLASS FileInformationClass); 3068 3069 KSDDKAPI NTSTATUS NTAPI KsSetInformationFile 3070 (PFILE_OBJECT FileObject, PVOID FileInformation, ULONG Length, 3071 FILE_INFORMATION_CLASS FileInformationClass); 3072 3073 KSDDKAPI NTSTATUS NTAPI KsStreamIo 3074 (PFILE_OBJECT FileObject, PKEVENT Event, PVOID PortContext, 3075 PIO_COMPLETION_ROUTINE CompletionRoutine, PVOID CompletionContext, 3076 KSCOMPLETION_INVOCATION CompletionInvocationFlags, 3077 PIO_STATUS_BLOCK IoStatusBlock, PVOID StreamHeaders, ULONG Length, 3078 ULONG Flags, KPROCESSOR_MODE RequestorMode); 3079 3080 KSDDKAPI NTSTATUS NTAPI KsProbeStreamIrp(PIRP Irp, ULONG ProbeFlags, ULONG HeaderSize); 3081 KSDDKAPI NTSTATUS NTAPI KsAllocateExtraData(PIRP Irp, ULONG ExtraSize, PVOID *ExtraBuffer); 3082 KSDDKAPI VOID NTAPI KsNullDriverUnload (PDRIVER_OBJECT DriverObject); 3083 3084 KSDDKAPI NTSTATUS NTAPI KsSetMajorFunctionHandler 3085 (PDRIVER_OBJECT DriverObject, ULONG MajorFunction); 3086 3087 KSDDKAPI NTSTATUS NTAPI KsDispatchInvalidDeviceRequest 3088 (PDEVICE_OBJECT DeviceObject, PIRP Irp); 3089 3090 KSDDKAPI NTSTATUS NTAPI KsDefaultDeviceIoCompletion 3091 (PDEVICE_OBJECT DeviceObject, PIRP Irp); 3092 3093 KSDDKAPI NTSTATUS NTAPI KsDispatchIrp(PDEVICE_OBJECT DeviceObject, PIRP Irp); 3094 3095 KSDDKAPI BOOLEAN NTAPI KsDispatchFastIoDeviceControlFailure 3096 (PFILE_OBJECT FileObject, BOOLEAN Wait, PVOID InputBuffer, 3097 ULONG InputBufferLength, PVOID OutputBuffer, 3098 ULONG OutputBufferLength, ULONG IoControlCode, 3099 PIO_STATUS_BLOCK IoStatus, PDEVICE_OBJECT DeviceObject); 3100 3101 KSDDKAPI BOOLEAN NTAPI KsDispatchFastReadFailure 3102 (PFILE_OBJECT FileObject, PLARGE_INTEGER FileOffset, 3103 ULONG Length, BOOLEAN Wait, ULONG LockKey, PVOID Buffer, 3104 PIO_STATUS_BLOCK IoStatus, PDEVICE_OBJECT DeviceObject); 3105 3106 #define KsDispatchFastWriteFailure KsDispatchFastReadFailure 3107 3108 KSDDKAPI VOID NTAPI KsCancelRoutine(PDEVICE_OBJECT DeviceObject, PIRP Irp); 3109 KSDDKAPI VOID NTAPI KsCancelIo(PLIST_ENTRY QueueHead, PKSPIN_LOCK SpinLock); 3110 KSDDKAPI VOID NTAPI KsReleaseIrpOnCancelableQueue(PIRP Irp, PDRIVER_CANCEL DriverCancel); 3111 3112 KSDDKAPI PIRP NTAPI KsRemoveIrpFromCancelableQueue 3113 (PLIST_ENTRY QueueHead, PKSPIN_LOCK SpinLock, 3114 KSLIST_ENTRY_LOCATION ListLocation, 3115 KSIRP_REMOVAL_OPERATION RemovalOperation); 3116 3117 KSDDKAPI NTSTATUS NTAPI KsMoveIrpsOnCancelableQueue 3118 (PLIST_ENTRY SourceList, PKSPIN_LOCK SourceLock, 3119 PLIST_ENTRY DestinationList, PKSPIN_LOCK DestinationLock, 3120 KSLIST_ENTRY_LOCATION ListLocation, 3121 PFNKSIRPLISTCALLBACK ListCallback, PVOID Context); 3122 3123 KSDDKAPI VOID NTAPI KsRemoveSpecificIrpFromCancelableQueue (PIRP Irp); 3124 3125 KSDDKAPI VOID NTAPI KsAddIrpToCancelableQueue 3126 (PLIST_ENTRY QueueHead, PKSPIN_LOCK SpinLock, PIRP Irp, 3127 KSLIST_ENTRY_LOCATION ListLocation, PDRIVER_CANCEL DriverCancel); 3128 3129 KSDDKAPI NTSTATUS NTAPI KsAcquireResetValue(PIRP Irp, KSRESET *ResetValue); 3130 3131 KSDDKAPI NTSTATUS NTAPI KsTopologyPropertyHandler 3132 (PIRP Irp, PKSPROPERTY Property, PVOID Data, 3133 const KSTOPOLOGY *Topology); 3134 3135 KSDDKAPI VOID NTAPI KsAcquireDeviceSecurityLock(KSDEVICE_HEADER Header, BOOLEAN Exclusive); 3136 KSDDKAPI VOID NTAPI KsReleaseDeviceSecurityLock (KSDEVICE_HEADER Header); 3137 KSDDKAPI NTSTATUS NTAPI KsDefaultDispatchPnp(PDEVICE_OBJECT DeviceObject, PIRP Irp); 3138 KSDDKAPI NTSTATUS NTAPI KsDefaultDispatchPower(PDEVICE_OBJECT DeviceObject, PIRP Irp); 3139 KSDDKAPI NTSTATUS NTAPI KsDefaultForwardIrp(PDEVICE_OBJECT DeviceObject, PIRP Irp); 3140 3141 KSDDKAPI VOID NTAPI KsSetDevicePnpAndBaseObject 3142 (KSDEVICE_HEADER Header, PDEVICE_OBJECT PnpDeviceObject, 3143 PDEVICE_OBJECT BaseObject); 3144 3145 KSDDKAPI PDEVICE_OBJECT NTAPI KsQueryDevicePnpObject (KSDEVICE_HEADER Header); 3146 KSDDKAPI ACCESS_MASK NTAPI KsQueryObjectAccessMask (KSOBJECT_HEADER Header); 3147 3148 KSDDKAPI VOID NTAPI KsRecalculateStackDepth 3149 (KSDEVICE_HEADER Header, BOOLEAN ReuseStackLocation); 3150 3151 KSDDKAPI VOID NTAPI KsSetTargetState 3152 (KSOBJECT_HEADER Header, KSTARGET_STATE TargetState); 3153 3154 KSDDKAPI VOID NTAPI KsSetTargetDeviceObject 3155 (KSOBJECT_HEADER Header, PDEVICE_OBJECT TargetDevice); 3156 3157 KSDDKAPI VOID NTAPI KsSetPowerDispatch 3158 (KSOBJECT_HEADER Header, PFNKSCONTEXT_DISPATCH PowerDispatch, 3159 PVOID PowerContext); 3160 3161 KSDDKAPI PKSOBJECT_CREATE_ITEM NTAPI KsQueryObjectCreateItem (KSOBJECT_HEADER Header); 3162 3163 KSDDKAPI NTSTATUS NTAPI KsAllocateDeviceHeader 3164 (KSDEVICE_HEADER *Header, ULONG ItemsCount, 3165 PKSOBJECT_CREATE_ITEM ItemsList); 3166 3167 KSDDKAPI VOID NTAPI KsFreeDeviceHeader (KSDEVICE_HEADER Header); 3168 3169 KSDDKAPI NTSTATUS NTAPI KsAllocateObjectHeader 3170 (KSOBJECT_HEADER *Header, ULONG ItemsCount, 3171 PKSOBJECT_CREATE_ITEM ItemsList, PIRP Irp, 3172 const KSDISPATCH_TABLE *Table); 3173 3174 KSDDKAPI VOID NTAPI KsFreeObjectHeader (KSOBJECT_HEADER Header); 3175 3176 KSDDKAPI NTSTATUS NTAPI KsAddObjectCreateItemToDeviceHeader 3177 (KSDEVICE_HEADER Header, PDRIVER_DISPATCH Create, PVOID Context, 3178 PWSTR ObjectClass, PSECURITY_DESCRIPTOR SecurityDescriptor); 3179 3180 KSDDKAPI NTSTATUS NTAPI KsAddObjectCreateItemToObjectHeader 3181 (KSOBJECT_HEADER Header, PDRIVER_DISPATCH Create, PVOID Context, 3182 PWSTR ObjectClass, PSECURITY_DESCRIPTOR SecurityDescriptor); 3183 3184 KSDDKAPI NTSTATUS NTAPI KsAllocateObjectCreateItem 3185 (KSDEVICE_HEADER Header, PKSOBJECT_CREATE_ITEM CreateItem, 3186 BOOLEAN AllocateEntry, PFNKSITEMFREECALLBACK ItemFreeCallback); 3187 3188 KSDDKAPI NTSTATUS NTAPI KsFreeObjectCreateItem 3189 (KSDEVICE_HEADER Header, PUNICODE_STRING CreateItem); 3190 3191 KSDDKAPI NTSTATUS NTAPI KsFreeObjectCreateItemsByContext 3192 (KSDEVICE_HEADER Header, PVOID Context); 3193 3194 KSDDKAPI NTSTATUS NTAPI KsCreateDefaultSecurity 3195 (PSECURITY_DESCRIPTOR ParentSecurity, 3196 PSECURITY_DESCRIPTOR *DefaultSecurity); 3197 3198 KSDDKAPI NTSTATUS NTAPI KsForwardIrp 3199 (PIRP Irp, PFILE_OBJECT FileObject, BOOLEAN ReuseStackLocation); 3200 3201 KSDDKAPI NTSTATUS NTAPI KsForwardAndCatchIrp 3202 (PDEVICE_OBJECT DeviceObject, PIRP Irp, PFILE_OBJECT FileObject, 3203 KSSTACK_USE StackUse); 3204 3205 KSDDKAPI NTSTATUS NTAPI KsSynchronousIoControlDevice 3206 (PFILE_OBJECT FileObject, KPROCESSOR_MODE RequestorMode, 3207 ULONG IoControl, PVOID InBuffer, ULONG InSize, PVOID OutBuffer, 3208 ULONG OutSize, PULONG BytesReturned); 3209 3210 KSDDKAPI NTSTATUS NTAPI KsUnserializeObjectPropertiesFromRegistry 3211 (PFILE_OBJECT FileObject, HANDLE ParentKey, 3212 PUNICODE_STRING RegistryPath); 3213 3214 KSDDKAPI NTSTATUS NTAPI KsCacheMedium 3215 (PUNICODE_STRING SymbolicLink, PKSPIN_MEDIUM Medium, 3216 ULONG PinDirection); 3217 3218 KSDDKAPI NTSTATUS NTAPI KsRegisterWorker 3219 (WORK_QUEUE_TYPE WorkQueueType, PKSWORKER *Worker); 3220 3221 KSDDKAPI NTSTATUS NTAPI KsRegisterCountedWorker 3222 (WORK_QUEUE_TYPE WorkQueueType, PWORK_QUEUE_ITEM CountedWorkItem, 3223 PKSWORKER *Worker); 3224 3225 KSDDKAPI VOID NTAPI KsUnregisterWorker (PKSWORKER Worker); 3226 KSDDKAPI NTSTATUS NTAPI KsQueueWorkItem(PKSWORKER Worker, PWORK_QUEUE_ITEM WorkItem); 3227 KSDDKAPI ULONG NTAPI KsIncrementCountedWorker (PKSWORKER Worker); 3228 KSDDKAPI ULONG NTAPI KsDecrementCountedWorker (PKSWORKER Worker); 3229 3230 KSDDKAPI NTSTATUS NTAPI KsCreateTopologyNode 3231 (HANDLE ParentHandle, PKSNODE_CREATE NodeCreate, 3232 ACCESS_MASK DesiredAccess, PHANDLE NodeHandle); 3233 3234 KSDDKAPI NTSTATUS NTAPI KsValidateTopologyNodeCreateRequest 3235 (PIRP Irp, PKSTOPOLOGY Topology, PKSNODE_CREATE *NodeCreate); 3236 3237 KSDDKAPI NTSTATUS NTAPI KsMergeAutomationTables 3238 (PKSAUTOMATION_TABLE *AutomationTableAB, 3239 PKSAUTOMATION_TABLE AutomationTableA, 3240 PKSAUTOMATION_TABLE AutomationTableB, 3241 KSOBJECT_BAG Bag); 3242 3243 KSDDKAPI NTSTATUS NTAPI KsInitializeDriver 3244 (PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPathName, 3245 const KSDEVICE_DESCRIPTOR *Descriptor); 3246 3247 KSDDKAPI NTSTATUS NTAPI KsAddDevice 3248 (PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT PhysicalDeviceObject); 3249 3250 KSDDKAPI NTSTATUS NTAPI KsCreateDevice 3251 (PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT PhysicalDeviceObject, 3252 const KSDEVICE_DESCRIPTOR *Descriptor, ULONG ExtensionSize, 3253 PKSDEVICE *Device); 3254 3255 KSDDKAPI NTSTATUS NTAPI KsInitializeDevice 3256 (PDEVICE_OBJECT FunctionalDeviceObject, 3257 PDEVICE_OBJECT PhysicalDeviceObject, 3258 PDEVICE_OBJECT NextDeviceObject, 3259 const KSDEVICE_DESCRIPTOR *Descriptor); 3260 3261 KSDDKAPI void NTAPI KsTerminateDevice (PDEVICE_OBJECT DeviceObject); 3262 KSDDKAPI PKSDEVICE NTAPI KsGetDeviceForDeviceObject (PDEVICE_OBJECT FunctionalDeviceObject); 3263 KSDDKAPI void NTAPI KsAcquireDevice (PKSDEVICE Device); 3264 KSDDKAPI void NTAPI KsReleaseDevice (PKSDEVICE Device); 3265 3266 KSDDKAPI void NTAPI KsDeviceRegisterAdapterObject 3267 (PKSDEVICE Device, PADAPTER_OBJECT AdapterObject, 3268 ULONG MaxMappingsByteCount, ULONG MappingTableStride); 3269 3270 KSDDKAPI ULONG NTAPI KsDeviceGetBusData 3271 (PKSDEVICE Device, ULONG DataType, PVOID Buffer, ULONG Offset, 3272 ULONG Length); 3273 3274 KSDDKAPI ULONG NTAPI KsDeviceSetBusData 3275 (PKSDEVICE Device, ULONG DataType, PVOID Buffer, ULONG Offset, 3276 ULONG Length); 3277 3278 KSDDKAPI NTSTATUS NTAPI KsCreateFilterFactory 3279 (PDEVICE_OBJECT DeviceObject, const KSFILTER_DESCRIPTOR *Descriptor, 3280 PWSTR RefString, PSECURITY_DESCRIPTOR SecurityDescriptor, 3281 ULONG CreateItemFlags, PFNKSFILTERFACTORYPOWER SleepCallback, 3282 PFNKSFILTERFACTORYPOWER WakeCallback, 3283 PKSFILTERFACTORY *FilterFactory); 3284 3285 #define KsDeleteFilterFactory(FilterFactory) \ 3286 KsFreeObjectCreateItemsByContext( *(KSDEVICE_HEADER *)( \ 3287 KsFilterFactoryGetParentDevice(FilterFactory)->FunctionalDeviceObject->DeviceExtension),\ 3288 FilterFactory) 3289 3290 KSDDKAPI NTSTATUS NTAPI KsFilterFactoryUpdateCacheData 3291 (PKSFILTERFACTORY FilterFactory, 3292 const KSFILTER_DESCRIPTOR *FilterDescriptor); 3293 3294 KSDDKAPI NTSTATUS NTAPI KsFilterFactoryAddCreateItem 3295 (PKSFILTERFACTORY FilterFactory, PWSTR RefString, 3296 PSECURITY_DESCRIPTOR SecurityDescriptor, ULONG CreateItemFlags); 3297 3298 KSDDKAPI NTSTATUS NTAPI KsFilterFactorySetDeviceClassesState 3299 (PKSFILTERFACTORY FilterFactory, BOOLEAN NewState); 3300 3301 KSDDKAPI PUNICODE_STRING NTAPI KsFilterFactoryGetSymbolicLink 3302 (PKSFILTERFACTORY FilterFactory); 3303 3304 KSDDKAPI void NTAPI KsAddEvent(PVOID Object, PKSEVENT_ENTRY EventEntry); 3305 3306 void __forceinline KsFilterAddEvent (PKSFILTER Filter, PKSEVENT_ENTRY EventEntry) 3307 { 3308 KsAddEvent(Filter, EventEntry); 3309 } 3310 3311 void __forceinline KsPinAddEvent (PKSPIN Pin, PKSEVENT_ENTRY EventEntry) 3312 { 3313 KsAddEvent(Pin, EventEntry); 3314 } 3315 3316 KSDDKAPI NTSTATUS NTAPI KsDefaultAddEventHandler 3317 (PIRP Irp, PKSEVENTDATA EventData, PKSEVENT_ENTRY EventEntry); 3318 3319 KSDDKAPI void NTAPI KsGenerateEvents 3320 (PVOID Object, const GUID *EventSet, ULONG EventId, 3321 ULONG DataSize, PVOID Data, PFNKSGENERATEEVENTCALLBACK CallBack, 3322 PVOID CallBackContext); 3323 3324 void __forceinline KsFilterGenerateEvents 3325 (PKSFILTER Filter, const GUID *EventSet, ULONG EventId, 3326 ULONG DataSize, PVOID Data, PFNKSGENERATEEVENTCALLBACK CallBack, 3327 PVOID CallBackContext) 3328 { 3329 KsGenerateEvents(Filter, EventSet, EventId, DataSize, Data, CallBack, 3330 CallBackContext); 3331 } 3332 3333 void __forceinline KsPinGenerateEvents 3334 (PKSPIN Pin, const GUID *EventSet, ULONG EventId, 3335 ULONG DataSize, PVOID Data, PFNKSGENERATEEVENTCALLBACK CallBack, 3336 PVOID CallBackContext) 3337 { 3338 KsGenerateEvents(Pin, EventSet, EventId, DataSize, Data, CallBack, 3339 CallBackContext); 3340 } 3341 3342 typedef enum { 3343 KSSTREAM_POINTER_STATE_UNLOCKED = 0, 3344 KSSTREAM_POINTER_STATE_LOCKED 3345 } KSSTREAM_POINTER_STATE; 3346 3347 KSDDKAPI NTSTATUS NTAPI KsPinGetAvailableByteCount 3348 (PKSPIN Pin, PLONG InputDataBytes, PLONG OutputBufferBytes); 3349 3350 KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetLeadingEdgeStreamPointer 3351 (PKSPIN Pin, KSSTREAM_POINTER_STATE State); 3352 3353 KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetTrailingEdgeStreamPointer 3354 (PKSPIN Pin, KSSTREAM_POINTER_STATE State); 3355 3356 KSDDKAPI NTSTATUS NTAPI KsStreamPointerSetStatusCode 3357 (PKSSTREAM_POINTER StreamPointer, NTSTATUS Status); 3358 3359 KSDDKAPI NTSTATUS NTAPI KsStreamPointerLock (PKSSTREAM_POINTER StreamPointer); 3360 KSDDKAPI void NTAPI KsStreamPointerUnlock(PKSSTREAM_POINTER StreamPointer, BOOLEAN Eject); 3361 3362 KSDDKAPI void NTAPI KsStreamPointerAdvanceOffsetsAndUnlock 3363 (PKSSTREAM_POINTER StreamPointer, ULONG InUsed, ULONG OutUsed, 3364 BOOLEAN Eject); 3365 3366 KSDDKAPI void NTAPI KsStreamPointerDelete (PKSSTREAM_POINTER StreamPointer); 3367 3368 KSDDKAPI NTSTATUS NTAPI KsStreamPointerClone 3369 (PKSSTREAM_POINTER StreamPointer, PFNKSSTREAMPOINTER CancelCallback, 3370 ULONG ContextSize, PKSSTREAM_POINTER *CloneStreamPointer); 3371 3372 KSDDKAPI NTSTATUS NTAPI KsStreamPointerAdvanceOffsets 3373 (PKSSTREAM_POINTER StreamPointer, ULONG InUsed, ULONG OutUsed, 3374 BOOLEAN Eject); 3375 3376 KSDDKAPI NTSTATUS NTAPI KsStreamPointerAdvance (PKSSTREAM_POINTER StreamPointer); 3377 KSDDKAPI PMDL NTAPI KsStreamPointerGetMdl (PKSSTREAM_POINTER StreamPointer); 3378 3379 KSDDKAPI PIRP NTAPI KsStreamPointerGetIrp 3380 (PKSSTREAM_POINTER StreamPointer, PBOOLEAN FirstFrameInIrp, 3381 PBOOLEAN LastFrameInIrp); 3382 3383 KSDDKAPI void NTAPI KsStreamPointerScheduleTimeout 3384 (PKSSTREAM_POINTER StreamPointer, PFNKSSTREAMPOINTER Callback, 3385 ULONGLONG Interval); 3386 3387 KSDDKAPI void NTAPI KsStreamPointerCancelTimeout (PKSSTREAM_POINTER StreamPointer); 3388 KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetFirstCloneStreamPointer (PKSPIN Pin); 3389 3390 KSDDKAPI PKSSTREAM_POINTER NTAPI KsStreamPointerGetNextClone 3391 (PKSSTREAM_POINTER StreamPointer); 3392 3393 KSDDKAPI NTSTATUS NTAPI KsPinHandshake(PKSPIN Pin, PKSHANDSHAKE In, PKSHANDSHAKE Out); 3394 KSDDKAPI void NTAPI KsCompletePendingRequest (PIRP Irp); 3395 KSDDKAPI KSOBJECTTYPE NTAPI KsGetObjectTypeFromIrp (PIRP Irp); 3396 KSDDKAPI PVOID NTAPI KsGetObjectFromFileObject (PFILE_OBJECT FileObject); 3397 KSDDKAPI KSOBJECTTYPE NTAPI KsGetObjectTypeFromFileObject (PFILE_OBJECT FileObject); 3398 3399 PKSFILTER __forceinline KsGetFilterFromFileObject (PFILE_OBJECT FileObject) 3400 { 3401 return (PKSFILTER) KsGetObjectFromFileObject(FileObject); 3402 } 3403 3404 PKSPIN __forceinline KsGetPinFromFileObject (PFILE_OBJECT FileObject) 3405 { 3406 return (PKSPIN) KsGetObjectFromFileObject(FileObject); 3407 } 3408 3409 KSDDKAPI PKSGATE NTAPI KsFilterGetAndGate (PKSFILTER Filter); 3410 KSDDKAPI void NTAPI KsFilterAcquireProcessingMutex (PKSFILTER Filter); 3411 KSDDKAPI void NTAPI KsFilterReleaseProcessingMutex (PKSFILTER Filter); 3412 KSDDKAPI void NTAPI KsFilterAttemptProcessing(PKSFILTER Filter, BOOLEAN Asynchronous); 3413 KSDDKAPI PKSGATE NTAPI KsPinGetAndGate(PKSPIN Pin); 3414 KSDDKAPI void NTAPI KsPinAttachAndGate(PKSPIN Pin, PKSGATE AndGate); 3415 KSDDKAPI void NTAPI KsPinAttachOrGate (PKSPIN Pin, PKSGATE OrGate); 3416 KSDDKAPI void NTAPI KsPinAcquireProcessingMutex (PKSPIN Pin); 3417 KSDDKAPI void NTAPI KsPinReleaseProcessingMutex (PKSPIN Pin); 3418 KSDDKAPI BOOLEAN NTAPI KsProcessPinUpdate (PKSPROCESSPIN ProcessPin); 3419 3420 KSDDKAPI void NTAPI KsPinGetCopyRelationships 3421 (PKSPIN Pin, PKSPIN *CopySource, PKSPIN *DelegateBranch); 3422 3423 KSDDKAPI void NTAPI KsPinAttemptProcessing(PKSPIN Pin, BOOLEAN Asynchronous); 3424 KSDDKAPI PVOID NTAPI KsGetParent (PVOID Object); 3425 3426 PKSDEVICE __forceinline KsFilterFactoryGetParentDevice (PKSFILTERFACTORY FilterFactory) 3427 { 3428 return (PKSDEVICE) KsGetParent((PVOID) FilterFactory); 3429 } 3430 3431 PKSFILTERFACTORY __forceinline KsFilterGetParentFilterFactory (PKSFILTER Filter) 3432 { 3433 return (PKSFILTERFACTORY) KsGetParent((PVOID) Filter); 3434 } 3435 3436 KSDDKAPI PKSFILTER NTAPI KsPinGetParentFilter (PKSPIN Pin); 3437 KSDDKAPI PVOID NTAPI KsGetFirstChild (PVOID Object); 3438 3439 PKSFILTERFACTORY __forceinline KsDeviceGetFirstChildFilterFactory (PKSDEVICE Device) 3440 { 3441 return (PKSFILTERFACTORY) KsGetFirstChild((PVOID) Device); 3442 } 3443 3444 PKSFILTER __forceinline KsFilterFactoryGetFirstChildFilter (PKSFILTERFACTORY FilterFactory) 3445 { 3446 return (PKSFILTER) KsGetFirstChild((PVOID) FilterFactory); 3447 } 3448 3449 KSDDKAPI ULONG NTAPI KsFilterGetChildPinCount(PKSFILTER Filter, ULONG PinId); 3450 KSDDKAPI PKSPIN NTAPI KsFilterGetFirstChildPin(PKSFILTER Filter, ULONG PinId); 3451 KSDDKAPI PVOID NTAPI KsGetNextSibling (PVOID Object); 3452 KSDDKAPI PKSPIN NTAPI KsPinGetNextSiblingPin (PKSPIN Pin); 3453 3454 PKSFILTERFACTORY __forceinline KsFilterFactoryGetNextSiblingFilterFactory 3455 (PKSFILTERFACTORY FilterFactory) 3456 { 3457 return (PKSFILTERFACTORY) KsGetNextSibling((PVOID) FilterFactory); 3458 } 3459 3460 PKSFILTER __forceinline KsFilterGetNextSiblingFilter (PKSFILTER Filter) 3461 { 3462 return (PKSFILTER) KsGetNextSibling((PVOID) Filter); 3463 } 3464 3465 KSDDKAPI PKSDEVICE NTAPI KsGetDevice (PVOID Object); 3466 3467 PKSDEVICE __forceinline KsFilterFactoryGetDevice (PKSFILTERFACTORY FilterFactory) 3468 { 3469 return KsGetDevice((PVOID) FilterFactory); 3470 } 3471 3472 PKSDEVICE __forceinline KsFilterGetDevice (PKSFILTER Filter) 3473 { 3474 return KsGetDevice((PVOID) Filter); 3475 } 3476 3477 PKSDEVICE __forceinline KsPinGetDevice (PKSPIN Pin) 3478 { 3479 return KsGetDevice((PVOID) Pin); 3480 } 3481 3482 KSDDKAPI PKSFILTER NTAPI KsGetFilterFromIrp (PIRP Irp); 3483 KSDDKAPI PKSPIN NTAPI KsGetPinFromIrp (PIRP Irp); 3484 KSDDKAPI ULONG NTAPI KsGetNodeIdFromIrp (PIRP Irp); 3485 KSDDKAPI void NTAPI KsAcquireControl (PVOID Object); 3486 KSDDKAPI void NTAPI KsReleaseControl (PVOID Object); 3487 3488 void __forceinline KsFilterAcquireControl (PKSFILTER Filter) 3489 { 3490 KsAcquireControl((PVOID) Filter); 3491 } 3492 3493 void __forceinline KsFilterReleaseControl (PKSFILTER Filter) 3494 { 3495 KsReleaseControl((PVOID) Filter); 3496 } 3497 3498 void __forceinline KsPinAcquireControl (PKSPIN Pin) 3499 { 3500 KsAcquireControl((PVOID) Pin); 3501 } 3502 3503 void __forceinline KsPinReleaseControl (PKSPIN Pin) 3504 { 3505 KsReleaseControl((PVOID) Pin); 3506 } 3507 3508 KSDDKAPI NTSTATUS NTAPI KsAddItemToObjectBag 3509 (KSOBJECT_BAG ObjectBag, PVOID Item, PFNKSFREE Free); 3510 3511 KSDDKAPI ULONG NTAPI KsRemoveItemFromObjectBag 3512 (KSOBJECT_BAG ObjectBag, PVOID Item, BOOLEAN Free); 3513 3514 #define KsDiscard(Object,Pointer) \ 3515 KsRemoveItemFromObjectBag((Object)->Bag, (PVOID)(Pointer), TRUE) 3516 3517 KSDDKAPI NTSTATUS NTAPI KsAllocateObjectBag(PKSDEVICE Device, KSOBJECT_BAG *ObjectBag); 3518 KSDDKAPI void NTAPI KsFreeObjectBag (KSOBJECT_BAG ObjectBag); 3519 3520 KSDDKAPI NTSTATUS NTAPI KsCopyObjectBagItems 3521 (KSOBJECT_BAG ObjectBagDestination, KSOBJECT_BAG ObjectBagSource); 3522 3523 KSDDKAPI NTSTATUS NTAPI _KsEdit 3524 (KSOBJECT_BAG ObjectBag, PVOID *PointerToPointerToItem, 3525 ULONG NewSize, ULONG OldSize, ULONG Tag); 3526 3527 #define KsEdit(Object, PointerToPointer, Tag) \ 3528 _KsEdit((Object)->Bag, (PVOID*)(PointerToPointer), \ 3529 sizeof(**(PointerToPointer)), sizeof(**(PointerToPointer)), (Tag)) 3530 3531 #define KsEditSized(Object, PointerToPointer, NewSize, OldSize, Tag) \ 3532 _KsEdit((Object)->Bag, (PVOID*)(PointerToPointer), (NewSize), (OldSize), (Tag)) 3533 3534 KSDDKAPI NTSTATUS NTAPI KsRegisterFilterWithNoKSPins 3535 (PDEVICE_OBJECT DeviceObject, const GUID *InterfaceClassGUID, 3536 ULONG PinCount, WINBOOL *PinDirection, KSPIN_MEDIUM *MediumList, 3537 GUID *CategoryList); 3538 3539 KSDDKAPI NTSTATUS NTAPI KsFilterCreatePinFactory 3540 (PKSFILTER Filter, const KSPIN_DESCRIPTOR_EX *const PinDescriptor, 3541 PULONG PinID); 3542 3543 KSDDKAPI NTSTATUS NTAPI KsFilterCreateNode 3544 (PKSFILTER Filter, const KSNODE_DESCRIPTOR *const NodeDescriptor, 3545 PULONG NodeID); 3546 3547 KSDDKAPI NTSTATUS NTAPI KsFilterAddTopologyConnections 3548 (PKSFILTER Filter, ULONG NewConnectionsCount, 3549 const KSTOPOLOGY_CONNECTION *const NewTopologyConnections); 3550 3551 KSDDKAPI NTSTATUS NTAPI KsPinGetConnectedPinInterface 3552 (PKSPIN Pin, const GUID *InterfaceId, PVOID *Interface); 3553 3554 KSDDKAPI PFILE_OBJECT NTAPI KsPinGetConnectedPinFileObject (PKSPIN Pin); 3555 KSDDKAPI PDEVICE_OBJECT NTAPI KsPinGetConnectedPinDeviceObject (PKSPIN Pin); 3556 3557 KSDDKAPI NTSTATUS NTAPI KsPinGetConnectedFilterInterface 3558 (PKSPIN Pin, const GUID *InterfaceId, PVOID *Interface); 3559 3560 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) 3561 KSDDKAPI NTSTATUS NTAPI KsPinGetReferenceClockInterface 3562 (PKSPIN Pin, PIKSREFERENCECLOCK *Interface); 3563 #endif /* defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) */ 3564 3565 KSDDKAPI VOID NTAPI KsPinSetPinClockTime(PKSPIN Pin, LONGLONG Time); 3566 3567 KSDDKAPI NTSTATUS NTAPI KsPinSubmitFrame 3568 (PKSPIN Pin, PVOID Data, ULONG Size, 3569 PKSSTREAM_HEADER StreamHeader, PVOID Context); 3570 3571 KSDDKAPI NTSTATUS NTAPI KsPinSubmitFrameMdl 3572 (PKSPIN Pin, PMDL Mdl, PKSSTREAM_HEADER StreamHeader, 3573 PVOID Context); 3574 3575 KSDDKAPI void NTAPI KsPinRegisterFrameReturnCallback 3576 (PKSPIN Pin, PFNKSPINFRAMERETURN FrameReturn); 3577 3578 KSDDKAPI void NTAPI KsPinRegisterIrpCompletionCallback 3579 (PKSPIN Pin, PFNKSPINIRPCOMPLETION IrpCompletion); 3580 3581 KSDDKAPI void NTAPI KsPinRegisterHandshakeCallback 3582 (PKSPIN Pin, PFNKSPINHANDSHAKE Handshake); 3583 3584 KSDDKAPI void NTAPI KsFilterRegisterPowerCallbacks 3585 (PKSFILTER Filter, PFNKSFILTERPOWER Sleep, PFNKSFILTERPOWER Wake); 3586 3587 KSDDKAPI void NTAPI KsPinRegisterPowerCallbacks 3588 (PKSPIN Pin, PFNKSPINPOWER Sleep, PFNKSPINPOWER Wake); 3589 3590 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) 3591 KSDDKAPI PUNKNOWN NTAPI KsRegisterAggregatedClientUnknown 3592 (PVOID Object, PUNKNOWN ClientUnknown); 3593 3594 KSDDKAPI PUNKNOWN NTAPI KsGetOuterUnknown (PVOID Object); 3595 3596 PUNKNOWN __forceinline KsDeviceRegisterAggregatedClientUnknown 3597 (PKSDEVICE Device, PUNKNOWN ClientUnknown) 3598 { 3599 return KsRegisterAggregatedClientUnknown((PVOID)Device, ClientUnknown); 3600 } 3601 3602 PUNKNOWN __forceinline KsDeviceGetOuterUnknown (PKSDEVICE Device) 3603 { 3604 return KsGetOuterUnknown((PVOID) Device); 3605 } 3606 3607 PUNKNOWN __forceinline KsFilterFactoryRegisterAggregatedClientUnknown 3608 (PKSFILTERFACTORY FilterFactory, PUNKNOWN ClientUnknown) 3609 { 3610 return KsRegisterAggregatedClientUnknown((PVOID)FilterFactory, ClientUnknown); 3611 } 3612 3613 PUNKNOWN __forceinline KsFilterFactoryGetOuterUnknown (PKSFILTERFACTORY FilterFactory) 3614 { 3615 return KsGetOuterUnknown((PVOID)FilterFactory); 3616 } 3617 3618 PUNKNOWN __forceinline KsFilterRegisterAggregatedClientUnknown 3619 (PKSFILTER Filter, PUNKNOWN ClientUnknown) 3620 { 3621 return KsRegisterAggregatedClientUnknown((PVOID)Filter, ClientUnknown); 3622 } 3623 3624 PUNKNOWN __forceinline KsFilterGetOuterUnknown (PKSFILTER Filter) 3625 { 3626 return KsGetOuterUnknown((PVOID)Filter); 3627 } 3628 3629 PUNKNOWN __forceinline KsPinRegisterAggregatedClientUnknown 3630 (PKSPIN Pin, PUNKNOWN ClientUnknown) 3631 { 3632 return KsRegisterAggregatedClientUnknown((PVOID)Pin, ClientUnknown); 3633 } 3634 3635 PUNKNOWN __forceinline KsPinGetOuterUnknown (PKSPIN Pin) 3636 { 3637 return KsGetOuterUnknown((PVOID)Pin); 3638 } 3639 #endif /* defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) */ 3640 3641 #else /* _NTDDK_ */ 3642 3643 #ifndef KS_NO_CREATE_FUNCTIONS 3644 KSDDKAPI DWORD WINAPI KsCreateAllocator(HANDLE ConnectionHandle,PKSALLOCATOR_FRAMING AllocatorFraming,PHANDLE AllocatorHandle); 3645 KSDDKAPI DWORD NTAPI KsCreateClock(HANDLE ConnectionHandle,PKSCLOCK_CREATE ClockCreate,PHANDLE ClockHandle); 3646 KSDDKAPI DWORD WINAPI KsCreatePin(HANDLE FilterHandle,PKSPIN_CONNECT Connect,ACCESS_MASK DesiredAccess,PHANDLE ConnectionHandle); 3647 KSDDKAPI DWORD WINAPI KsCreateTopologyNode(HANDLE ParentHandle,PKSNODE_CREATE NodeCreate,ACCESS_MASK DesiredAccess,PHANDLE NodeHandle); 3648 #endif 3649 3650 #endif /* _NTDDK_ */ 3651 3652 #ifdef __cplusplus 3653 } 3654 #endif 3655 3656 #define DENY_USERMODE_ACCESS(pIrp,CompleteRequest) \ 3657 if(pIrp->RequestorMode!=KernelMode) { \ 3658 pIrp->IoStatus.Information = 0; \ 3659 pIrp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; \ 3660 if(CompleteRequest) \ 3661 IoCompleteRequest (pIrp,IO_NO_INCREMENT); \ 3662 return STATUS_INVALID_DEVICE_REQUEST; \ 3663 } 3664 3665 #endif /* _KS_ */ 3666