10 #pragma GCC system_header
13 #ifndef __MINGW_EXTENSION
14 #if defined(__GNUC__) || defined(__GNUG__)
15 #define __MINGW_EXTENSION __extension__
17 #define __MINGW_EXTENSION
22 #define _KS_NO_ANONYMOUS_STRUCTURES_ 1
25 #ifdef _KS_NO_ANONYMOUS_STRUCTURES_
26 #define _KS_ANON_STRUCT(X) struct X
28 #define _KS_ANON_STRUCT(X) __MINGW_EXTENSION struct
33 #define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name
36 #define STATICGUIDOF(guid) STATIC_##guid
41 #define SIZEOF_ARRAY(ar) (sizeof(ar)/sizeof((ar)[0]))
44 #define DEFINE_GUIDSTRUCT(g,n) DEFINE_GUIDEX(n)
45 #define DEFINE_GUIDNAMED(n) n
47 #define STATIC_GUID_NULL \
48 0x00000000L,0x0000,0x0000,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
51 #define GUID_NULL DEFINE_GUIDNAMED(GUID_NULL)
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)
73 #define KSPRIORITY_LOW 0x00000001
74 #define KSPRIORITY_NORMAL 0x40000000
75 #define KSPRIORITY_HIGH 0x80000000
76 #define KSPRIORITY_EXCLUSIVE 0xFFFFFFFF
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
103 #define KSMETHOD_TYPE_SEND 0x00000001
104 #define KSMETHOD_TYPE_SETSUPPORT 0x00000100
105 #define KSMETHOD_TYPE_BASICSUPPORT 0x00000200
107 #define KSMETHOD_TYPE_TOPOLOGY 0x10000000
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
121 #define KSPROPERTY_TYPE_TOPOLOGY 0x10000000
141 #define STATIC_KSPROPTYPESETID_General \
142 0x97E99BA0L,0xBDEA,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
144 #define KSPROPTYPESETID_General DEFINE_GUIDNAMED(KSPROPTYPESETID_General)
159 #define KSPROPERTY_MEMBER_RANGES 0x00000001
160 #define KSPROPERTY_MEMBER_STEPPEDRANGES 0x00000002
161 #define KSPROPERTY_MEMBER_VALUES 0x00000003
163 #define KSPROPERTY_MEMBER_FLAG_DEFAULT 0x00000001
164 #define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_MULTICHANNEL 0x00000002
165 #define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_UNIFORM 0x00000004
182 ULONG UnsignedMinimum;
183 ULONG UnsignedMaximum;
190 LONGLONG SignedMinimum;
191 LONGLONG SignedMaximum;
195 DWORDLONG UnsignedMinimum;
196 DWORDLONG UnsignedMaximum;
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;
240 ULONG_PTR Reserved[2];
260 ULONG ReferenceCount;
264 PWORK_QUEUE_ITEM WorkQueueItem;
265 WORK_QUEUE_TYPE WorkQueueType;
269 PWORK_QUEUE_ITEM WorkQueueItem;
276 LONG_PTR Alignment[2];
281 #define KSEVENTF_EVENT_HANDLE 0x00000001
282 #define KSEVENTF_SEMAPHORE_HANDLE 0x00000002
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
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
298 #define KSEVENT_TYPE_TOPOLOGY 0x10000000
318 #define KSRELATIVEEVENT_FLAG_HANDLE 0x00000001
319 #define KSRELATIVEEVENT_FLAG_POINTER 0x00000002
337 #define STATIC_KSPROPSETID_General \
338 0x1464EDA5L,0x6A8F,0x11D1,0x9A,0xA7,0x00,0xA0,0xC9,0x22,0x31,0x96
340 #define KSPROPSETID_General DEFINE_GUIDNAMED(KSPROPSETID_General)
355 #define DEFINE_KSPROPERTY_ITEM_GENERAL_COMPONENTID(Handler) \
356 DEFINE_KSPROPERTY_ITEM( \
357 KSPROPERTY_GENERAL_COMPONENTID, \
359 sizeof(KSPROPERTY), \
360 sizeof(KSCOMPONENTID), \
361 NULL, NULL, 0, NULL, NULL, 0)
363 #define STATIC_KSMETHODSETID_StreamIo \
364 0x65D003CAL,0x1523,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96
366 #define KSMETHODSETID_StreamIo DEFINE_GUIDNAMED(KSMETHODSETID_StreamIo)
373 #define DEFINE_KSMETHOD_ITEM_STREAMIO_READ(Handler) \
374 DEFINE_KSMETHOD_ITEM( \
375 KSMETHOD_STREAMIO_READ, \
376 KSMETHOD_TYPE_WRITE, \
382 #define DEFINE_KSMETHOD_ITEM_STREAMIO_WRITE(Handler) \
383 DEFINE_KSMETHOD_ITEM( \
384 KSMETHOD_STREAMIO_WRITE, \
385 KSMETHOD_TYPE_READ, \
391 #define STATIC_KSPROPSETID_MediaSeeking \
392 0xEE904F0CL,0xD09B,0x11D0,0xAB,0xE9,0x00,0xA0,0xC9,0x22,0x31,0x96
394 #define KSPROPSETID_MediaSeeking DEFINE_GUIDNAMED(KSPROPSETID_MediaSeeking)
448 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CAPABILITIES(Handler) \
449 DEFINE_KSPROPERTY_ITEM( \
450 KSPROPERTY_MEDIASEEKING_CAPABILITIES, \
452 sizeof(KSPROPERTY), \
453 sizeof(KS_SEEKING_CAPABILITIES), \
454 NULL, NULL, 0, NULL, NULL, 0)
456 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_FORMATS(Handler) \
457 DEFINE_KSPROPERTY_ITEM( \
458 KSPROPERTY_MEDIASEEKING_FORMATS, \
460 sizeof(KSPROPERTY), \
462 NULL, NULL, 0, NULL, NULL, 0)
464 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_TIMEFORMAT(GetHandler,SetHandler) \
465 DEFINE_KSPROPERTY_ITEM( \
466 KSPROPERTY_MEDIASEEKING_TIMEFORMAT, \
468 sizeof(KSPROPERTY), \
471 NULL, 0, NULL, NULL, 0)
473 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITION(Handler) \
474 DEFINE_KSPROPERTY_ITEM( \
475 KSPROPERTY_MEDIASEEKING_POSITION, \
477 sizeof(KSPROPERTY), \
479 NULL, NULL, 0, NULL, NULL, 0)
481 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_STOPPOSITION(Handler) \
482 DEFINE_KSPROPERTY_ITEM( \
483 KSPROPERTY_MEDIASEEKING_STOPPOSITION, \
485 sizeof(KSPROPERTY), \
487 NULL, NULL, 0, NULL, NULL, 0)
489 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITIONS(Handler) \
490 DEFINE_KSPROPERTY_ITEM( \
491 KSPROPERTY_MEDIASEEKING_POSITIONS, \
493 sizeof(KSPROPERTY), \
494 sizeof(KSPROPERTY_POSITIONS), \
496 NULL, 0, NULL, NULL, 0)
498 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_DURATION(Handler) \
499 DEFINE_KSPROPERTY_ITEM( \
500 KSPROPERTY_MEDIASEEKING_DURATION, \
502 sizeof(KSPROPERTY), \
504 NULL, NULL, 0, NULL, NULL, 0)
506 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_AVAILABLE(Handler) \
507 DEFINE_KSPROPERTY_ITEM( \
508 KSPROPERTY_MEDIASEEKING_AVAILABLE, \
510 sizeof(KSPROPERTY), \
511 sizeof(KSPROPERTY_MEDIAAVAILABLE), \
512 NULL, NULL, 0, NULL, NULL, 0)
514 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_PREROLL(Handler) \
515 DEFINE_KSPROPERTY_ITEM( \
516 KSPROPERTY_MEDIASEEKING_PREROLL, \
518 sizeof(KSPROPERTY), \
520 NULL, NULL, 0, NULL, NULL, 0)
522 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CONVERTTIMEFORMAT(Handler) \
523 DEFINE_KSPROPERTY_ITEM( \
524 KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT, \
526 sizeof(KSP_TIMEFORMAT), \
528 NULL, NULL, 0, NULL, NULL, 0)
530 #define STATIC_KSPROPSETID_Topology \
531 0x720D4AC0L,0x7533,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
533 #define KSPROPSETID_Topology DEFINE_GUIDNAMED(KSPROPSETID_Topology)
542 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler) \
543 DEFINE_KSPROPERTY_ITEM( \
544 KSPROPERTY_TOPOLOGY_CATEGORIES, \
546 sizeof(KSPROPERTY), \
548 NULL, NULL, 0,NULL, NULL, 0)
550 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler) \
551 DEFINE_KSPROPERTY_ITEM( \
552 KSPROPERTY_TOPOLOGY_NODES, \
554 sizeof(KSPROPERTY), \
556 NULL, NULL, 0, NULL, NULL, 0)
558 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler) \
559 DEFINE_KSPROPERTY_ITEM( \
560 KSPROPERTY_TOPOLOGY_CONNECTIONS, \
562 sizeof(KSPROPERTY), \
564 NULL, NULL, 0, NULL, NULL, 0)
566 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler) \
567 DEFINE_KSPROPERTY_ITEM( \
568 KSPROPERTY_TOPOLOGY_NAME, \
572 NULL, NULL, 0, NULL, NULL, 0)
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) \
582 #define STATIC_KSCATEGORY_BRIDGE \
583 0x085AFF00L,0x62CE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
585 #define KSCATEGORY_BRIDGE DEFINE_GUIDNAMED(KSCATEGORY_BRIDGE)
587 #define STATIC_KSCATEGORY_CAPTURE \
588 0x65E8773DL,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96
590 #define KSCATEGORY_CAPTURE DEFINE_GUIDNAMED(KSCATEGORY_CAPTURE)
592 #define STATIC_KSCATEGORY_RENDER \
593 0x65E8773EL,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96
595 #define KSCATEGORY_RENDER DEFINE_GUIDNAMED(KSCATEGORY_RENDER)
597 #define STATIC_KSCATEGORY_MIXER \
598 0xAD809C00L,0x7B88,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
600 #define KSCATEGORY_MIXER DEFINE_GUIDNAMED(KSCATEGORY_MIXER)
602 #define STATIC_KSCATEGORY_SPLITTER \
603 0x0A4252A0L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
605 #define KSCATEGORY_SPLITTER DEFINE_GUIDNAMED(KSCATEGORY_SPLITTER)
607 #define STATIC_KSCATEGORY_DATACOMPRESSOR \
608 0x1E84C900L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
610 #define KSCATEGORY_DATACOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATACOMPRESSOR)
612 #define STATIC_KSCATEGORY_DATADECOMPRESSOR \
613 0x2721AE20L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
615 #define KSCATEGORY_DATADECOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATADECOMPRESSOR)
617 #define STATIC_KSCATEGORY_DATATRANSFORM \
618 0x2EB07EA0L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
620 #define KSCATEGORY_DATATRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_DATATRANSFORM)
622 #define STATIC_KSCATEGORY_COMMUNICATIONSTRANSFORM \
623 0xCF1DDA2CL,0x9743,0x11D0,0xA3,0xEE,0x00,0xA0,0xC9,0x22,0x31,0x96
625 #define KSCATEGORY_COMMUNICATIONSTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_COMMUNICATIONSTRANSFORM)
627 #define STATIC_KSCATEGORY_INTERFACETRANSFORM \
628 0xCF1DDA2DL,0x9743,0x11D0,0xA3,0xEE,0x00,0xA0,0xC9,0x22,0x31,0x96
630 #define KSCATEGORY_INTERFACETRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_INTERFACETRANSFORM)
632 #define STATIC_KSCATEGORY_MEDIUMTRANSFORM \
633 0xCF1DDA2EL,0x9743,0x11D0,0xA3,0xEE,0x00,0xA0,0xC9,0x22,0x31,0x96
635 #define KSCATEGORY_MEDIUMTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_MEDIUMTRANSFORM)
637 #define STATIC_KSCATEGORY_FILESYSTEM \
638 0x760FED5EL,0x9357,0x11D0,0xA3,0xCC,0x00,0xA0,0xC9,0x22,0x31,0x96
640 #define KSCATEGORY_FILESYSTEM DEFINE_GUIDNAMED(KSCATEGORY_FILESYSTEM)
642 #define STATIC_KSCATEGORY_CLOCK \
643 0x53172480L,0x4791,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
645 #define KSCATEGORY_CLOCK DEFINE_GUIDNAMED(KSCATEGORY_CLOCK)
647 #define STATIC_KSCATEGORY_PROXY \
648 0x97EBAACAL,0x95BD,0x11D0,0xA3,0xEA,0x00,0xA0,0xC9,0x22,0x31,0x96
650 #define KSCATEGORY_PROXY DEFINE_GUIDNAMED(KSCATEGORY_PROXY)
652 #define STATIC_KSCATEGORY_QUALITY \
653 0x97EBAACBL,0x95BD,0x11D0,0xA3,0xEA,0x00,0xA0,0xC9,0x22,0x31,0x96
655 #define KSCATEGORY_QUALITY DEFINE_GUIDNAMED(KSCATEGORY_QUALITY)
675 #define KSFILTER_NODE ((ULONG)-1)
676 #define KSALL_NODES ((ULONG)-1)
683 #define STATIC_KSTIME_FORMAT_NONE STATIC_GUID_NULL
684 #define KSTIME_FORMAT_NONE GUID_NULL
686 #define STATIC_KSTIME_FORMAT_FRAME \
687 0x7b785570L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6
689 #define KSTIME_FORMAT_FRAME DEFINE_GUIDNAMED(KSTIME_FORMAT_FRAME)
691 #define STATIC_KSTIME_FORMAT_BYTE \
692 0x7b785571L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6
694 #define KSTIME_FORMAT_BYTE DEFINE_GUIDNAMED(KSTIME_FORMAT_BYTE)
696 #define STATIC_KSTIME_FORMAT_SAMPLE \
697 0x7b785572L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6
699 #define KSTIME_FORMAT_SAMPLE DEFINE_GUIDNAMED(KSTIME_FORMAT_SAMPLE)
701 #define STATIC_KSTIME_FORMAT_FIELD \
702 0x7b785573L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6
704 #define KSTIME_FORMAT_FIELD DEFINE_GUIDNAMED(KSTIME_FORMAT_FIELD)
706 #define STATIC_KSTIME_FORMAT_MEDIA_TIME \
707 0x7b785574L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6
709 #define KSTIME_FORMAT_MEDIA_TIME DEFINE_GUIDNAMED(KSTIME_FORMAT_MEDIA_TIME)
713 #define STATIC_KSINTERFACESETID_Standard \
714 0x1A8766A0L,0x62CE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
716 #define KSINTERFACESETID_Standard DEFINE_GUIDNAMED(KSINTERFACESETID_Standard)
724 #define STATIC_KSINTERFACESETID_FileIo \
725 0x8C6F932CL,0xE771,0x11D0,0xB8,0xFF,0x00,0xA0,0xC9,0x22,0x31,0x96
727 #define KSINTERFACESETID_FileIo DEFINE_GUIDNAMED(KSINTERFACESETID_FileIo)
733 #define KSMEDIUM_TYPE_ANYINSTANCE 0
735 #define STATIC_KSMEDIUMSETID_Standard \
736 0x4747B320L,0x62CE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
738 #define KSMEDIUMSETID_Standard DEFINE_GUIDNAMED(KSMEDIUMSETID_Standard)
740 #define KSMEDIUM_STANDARD_DEVIO KSMEDIUM_TYPE_ANYINSTANCE
742 #define STATIC_KSPROPSETID_Pin \
743 0x8C134960L,0x51AD,0x11CF,0x87,0x8A,0x94,0xF8,0x01,0xC1,0x00,0x00
745 #define KSPROPSETID_Pin DEFINE_GUIDNAMED(KSPROPSETID_Pin)
771 #define KSINSTANCE_INDETERMINATE ((ULONG)-1)
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)
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)
806 #define KSATTRIBUTE_REQUIRED 0x00000001
817 PKSATTRIBUTE *Attributes;
818 } KSATTRIBUTE_LIST,*PKSATTRIBUTE_LIST;
842 WCHAR SymbolicLinkName[1];
846 typedef NTSTATUS (*PFNKSINTERSECTHANDLER) ( PIRP Irp, PKSP_PIN Pin,
847 PKSDATARANGE DataRange,
849 typedef NTSTATUS (*PFNKSINTERSECTHANDLEREX)(PVOID Context, PIRP Irp,
851 PKSDATARANGE DataRange,
852 PKSDATARANGE MatchingDataRange,
853 ULONG DataBufferSize,
858 #define DEFINE_KSPIN_INTERFACE_TABLE(tablename) \
859 const KSPIN_INTERFACE tablename[] =
861 #define DEFINE_KSPIN_INTERFACE_ITEM(guid,_interFace) \
863 STATICGUIDOF(guid), \
868 #define DEFINE_KSPIN_MEDIUM_TABLE(tablename) \
869 const KSPIN_MEDIUM tablename[] =
871 #define DEFINE_KSPIN_MEDIUM_ITEM(guid,medium) \
872 DEFINE_KSPIN_INTERFACE_ITEM(guid,medium)
874 #define DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(Handler) \
875 DEFINE_KSPROPERTY_ITEM( \
876 KSPROPERTY_PIN_CINSTANCES, \
879 sizeof(KSPIN_CINSTANCES), \
880 NULL, NULL, 0, NULL, NULL, 0)
882 #define DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(Handler) \
883 DEFINE_KSPROPERTY_ITEM( \
884 KSPROPERTY_PIN_CTYPES, \
886 sizeof(KSPROPERTY), \
888 NULL, NULL, 0, NULL, NULL, 0)
890 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(Handler) \
891 DEFINE_KSPROPERTY_ITEM( \
892 KSPROPERTY_PIN_DATAFLOW, \
895 sizeof(KSPIN_DATAFLOW), \
896 NULL, NULL, 0, NULL, NULL, 0)
898 #define DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(Handler) \
899 DEFINE_KSPROPERTY_ITEM( \
900 KSPROPERTY_PIN_DATARANGES, \
904 NULL, NULL, 0, NULL, NULL, 0)
906 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(Handler) \
907 DEFINE_KSPROPERTY_ITEM( \
908 KSPROPERTY_PIN_DATAINTERSECTION, \
910 sizeof(KSP_PIN) + sizeof(KSMULTIPLE_ITEM),\
912 NULL, NULL, 0, NULL, NULL, 0)
914 #define DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(Handler) \
915 DEFINE_KSPROPERTY_ITEM( \
916 KSPROPERTY_PIN_INTERFACES, \
920 NULL, NULL, 0, NULL, NULL, 0)
922 #define DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(Handler) \
923 DEFINE_KSPROPERTY_ITEM( \
924 KSPROPERTY_PIN_MEDIUMS, \
928 NULL, NULL, 0, NULL, NULL, 0)
930 #define DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(Handler) \
931 DEFINE_KSPROPERTY_ITEM( \
932 KSPROPERTY_PIN_COMMUNICATION, \
935 sizeof(KSPIN_COMMUNICATION), \
936 NULL, NULL, 0, NULL, NULL, 0)
938 #define DEFINE_KSPROPERTY_ITEM_PIN_GLOBALCINSTANCES(Handler) \
939 DEFINE_KSPROPERTY_ITEM( \
940 KSPROPERTY_PIN_GLOBALCINSTANCES, \
943 sizeof(KSPIN_CINSTANCES), \
944 NULL, NULL, 0, NULL, NULL, 0)
946 #define DEFINE_KSPROPERTY_ITEM_PIN_NECESSARYINSTANCES(Handler) \
947 DEFINE_KSPROPERTY_ITEM( \
948 KSPROPERTY_PIN_NECESSARYINSTANCES, \
952 NULL, NULL, 0, NULL, NULL, 0)
954 #define DEFINE_KSPROPERTY_ITEM_PIN_PHYSICALCONNECTION(Handler) \
955 DEFINE_KSPROPERTY_ITEM( \
956 KSPROPERTY_PIN_PHYSICALCONNECTION, \
960 NULL, NULL, 0, NULL, NULL, 0)
962 #define DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(Handler) \
963 DEFINE_KSPROPERTY_ITEM( \
964 KSPROPERTY_PIN_CATEGORY, \
968 NULL, NULL, 0, NULL, NULL, 0)
970 #define DEFINE_KSPROPERTY_ITEM_PIN_NAME(Handler) \
971 DEFINE_KSPROPERTY_ITEM( \
972 KSPROPERTY_PIN_NAME, \
976 NULL, NULL, 0, NULL, NULL, 0)
978 #define DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(Handler) \
979 DEFINE_KSPROPERTY_ITEM( \
980 KSPROPERTY_PIN_CONSTRAINEDDATARANGES, \
984 NULL, NULL, 0, NULL, NULL, 0)
986 #define DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(Handler) \
987 DEFINE_KSPROPERTY_ITEM( \
988 KSPROPERTY_PIN_PROPOSEDATAFORMAT, \
991 sizeof(KSDATAFORMAT), \
992 (Handler), NULL, 0, NULL, NULL, 0)
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) \
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) \
1023 #define STATIC_KSNAME_Filter \
1024 0x9b365890L,0x165f,0x11d0,0xa1,0x95,0x00,0x20,0xaf,0xd1,0x56,0xe4
1026 #define KSNAME_Filter DEFINE_GUIDNAMED(KSNAME_Filter)
1028 #define KSSTRING_Filter L"{9B365890-165F-11D0-A195-0020AFD156E4}"
1030 #define STATIC_KSNAME_Pin \
1031 0x146F1A80L,0x4791,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
1033 #define KSNAME_Pin DEFINE_GUIDNAMED(KSNAME_Pin)
1035 #define KSSTRING_Pin L"{146F1A80-4791-11D0-A5D6-28DB04C10000}"
1037 #define STATIC_KSNAME_Clock \
1038 0x53172480L,0x4791,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
1040 #define KSNAME_Clock DEFINE_GUIDNAMED(KSNAME_Clock)
1042 #define KSSTRING_Clock L"{53172480-4791-11D0-A5D6-28DB04C10000}"
1044 #define STATIC_KSNAME_Allocator \
1045 0x642F5D00L,0x4791,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
1047 #define KSNAME_Allocator DEFINE_GUIDNAMED(KSNAME_Allocator)
1049 #define KSSTRING_Allocator L"{642F5D00-4791-11D0-A5D6-28DB04C10000}"
1051 #define KSSTRING_AllocatorEx L"{091BB63B-603F-11D1-B067-00A0C9062802}"
1053 #define STATIC_KSNAME_TopologyNode \
1054 0x0621061AL,0xEE75,0x11D0,0xB9,0x15,0x00,0xA0,0xC9,0x22,0x31,0x96
1056 #define KSNAME_TopologyNode DEFINE_GUIDNAMED(KSNAME_TopologyNode)
1058 #define KSSTRING_TopologyNode L"{0621061A-EE75-11D0-B915-00A0C9223196}"
1060 #if defined(_NTDDK_)
1062 ULONG InterfacesCount;
1066 ULONG DataRangesCount;
1067 const PKSDATARANGE *DataRanges;
1070 const GUID *Category;
1075 ULONG ConstrainedDataRangesCount;
1076 PKSDATARANGE *ConstrainedDataRanges;
1079 } KSPIN_DESCRIPTOR, *PKSPIN_DESCRIPTOR;
1080 typedef const KSPIN_DESCRIPTOR *PCKSPIN_DESCRIPTOR;
1082 #define DEFINE_KSPIN_DESCRIPTOR_TABLE(tablename) \
1083 const KSPIN_DESCRIPTOR tablename[] =
1085 #define DEFINE_KSPIN_DESCRIPTOR_ITEM(InterfacesCount,Interfaces,MediumsCount, Mediums,DataRangesCount,DataRanges,DataFlow,Communication)\
1087 InterfacesCount, Interfaces, MediumsCount, Mediums, \
1088 DataRangesCount, DataRanges, DataFlow, Communication, \
1092 #define DEFINE_KSPIN_DESCRIPTOR_ITEMEX(InterfacesCount,Interfaces,MediumsCount,Mediums,DataRangesCount,DataRanges,DataFlow,Communication,Category,Name)\
1094 InterfacesCount, Interfaces, MediumsCount, Mediums, \
1095 DataRangesCount, DataRanges, DataFlow, Communication, \
1100 #define STATIC_KSDATAFORMAT_TYPE_WILDCARD STATIC_GUID_NULL
1101 #define KSDATAFORMAT_TYPE_WILDCARD GUID_NULL
1103 #define STATIC_KSDATAFORMAT_SUBTYPE_WILDCARD STATIC_GUID_NULL
1104 #define KSDATAFORMAT_SUBTYPE_WILDCARD GUID_NULL
1106 #define STATIC_KSDATAFORMAT_TYPE_STREAM \
1107 0xE436EB83L,0x524F,0x11CE,0x9F,0x53,0x00,0x20,0xAF,0x0B,0xA7,0x70
1109 #define KSDATAFORMAT_TYPE_STREAM DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_STREAM)
1111 #define STATIC_KSDATAFORMAT_SUBTYPE_NONE \
1112 0xE436EB8EL,0x524F,0x11CE,0x9F,0x53,0x00,0x20,0xAF,0x0B,0xA7,0x70
1114 #define KSDATAFORMAT_SUBTYPE_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_NONE)
1116 #define STATIC_KSDATAFORMAT_SPECIFIER_WILDCARD STATIC_GUID_NULL
1117 #define KSDATAFORMAT_SPECIFIER_WILDCARD GUID_NULL
1119 #define STATIC_KSDATAFORMAT_SPECIFIER_FILENAME \
1120 0xAA797B40L,0xE974,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
1122 #define KSDATAFORMAT_SPECIFIER_FILENAME DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_FILENAME)
1124 #define STATIC_KSDATAFORMAT_SPECIFIER_FILEHANDLE \
1125 0x65E8773CL,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96
1127 #define KSDATAFORMAT_SPECIFIER_FILEHANDLE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_FILEHANDLE)
1129 #define STATIC_KSDATAFORMAT_SPECIFIER_NONE \
1130 0x0F6417D6L,0xC318,0x11D0,0xA4,0x3F,0x00,0xA0,0xC9,0x22,0x31,0x96
1132 #define KSDATAFORMAT_SPECIFIER_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_NONE)
1134 #define STATIC_KSPROPSETID_Quality \
1135 0xD16AD380L,0xAC1A,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
1137 #define KSPROPSETID_Quality DEFINE_GUIDNAMED(KSPROPSETID_Quality)
1144 #define DEFINE_KSPROPERTY_ITEM_QUALITY_REPORT(GetHandler,SetHandler) \
1145 DEFINE_KSPROPERTY_ITEM( \
1146 KSPROPERTY_QUALITY_REPORT, \
1148 sizeof(KSPROPERTY), \
1149 sizeof(KSQUALITY), \
1151 NULL, 0, NULL, NULL, 0)
1153 #define DEFINE_KSPROPERTY_ITEM_QUALITY_ERROR(GetHandler,SetHandler) \
1154 DEFINE_KSPROPERTY_ITEM( \
1155 KSPROPERTY_QUALITY_ERROR, \
1157 sizeof(KSPROPERTY), \
1160 NULL, 0, NULL, NULL, 0)
1162 #define STATIC_KSPROPSETID_Connection \
1163 0x1D58C920L,0xAC9B,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
1165 #define KSPROPSETID_Connection DEFINE_GUIDNAMED(KSPROPSETID_Connection)
1178 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_STATE(GetHandler,SetHandler) \
1179 DEFINE_KSPROPERTY_ITEM( \
1180 KSPROPERTY_CONNECTION_STATE, \
1182 sizeof(KSPROPERTY), \
1185 NULL, 0, NULL, NULL, 0)
1187 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_PRIORITY(GetHandler,SetHandler) \
1188 DEFINE_KSPROPERTY_ITEM( \
1189 KSPROPERTY_CONNECTION_PRIORITY, \
1191 sizeof(KSPROPERTY), \
1192 sizeof(KSPRIORITY), \
1194 NULL, 0, NULL, NULL, 0)
1196 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_DATAFORMAT(GetHandler,SetHandler)\
1197 DEFINE_KSPROPERTY_ITEM( \
1198 KSPROPERTY_CONNECTION_DATAFORMAT, \
1200 sizeof(KSPROPERTY), \
1203 NULL, 0, NULL, NULL, 0)
1205 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING(Handler) \
1206 DEFINE_KSPROPERTY_ITEM( \
1207 KSPROPERTY_CONNECTION_ALLOCATORFRAMING, \
1209 sizeof(KSPROPERTY), \
1210 sizeof(KSALLOCATOR_FRAMING), \
1211 NULL, NULL, 0, NULL, NULL, 0)
1213 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING_EX(Handler) \
1214 DEFINE_KSPROPERTY_ITEM( \
1215 KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,\
1217 sizeof(KSPROPERTY), \
1219 NULL, NULL, 0, NULL, NULL, 0)
1221 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_PROPOSEDATAFORMAT(Handler) \
1222 DEFINE_KSPROPERTY_ITEM( \
1223 KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT,\
1225 sizeof(KSPROPERTY), \
1226 sizeof(KSDATAFORMAT), \
1228 NULL, 0, NULL, NULL, 0)
1230 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ACQUIREORDERING(Handler) \
1231 DEFINE_KSPROPERTY_ITEM( \
1232 KSPROPERTY_CONNECTION_ACQUIREORDERING, \
1234 sizeof(KSPROPERTY), \
1236 NULL, NULL, 0, NULL, NULL, 0)
1238 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_STARTAT(Handler) \
1239 DEFINE_KSPROPERTY_ITEM( \
1240 KSPROPERTY_CONNECTION_STARTAT, \
1242 sizeof(KSPROPERTY), \
1243 sizeof(KSRELATIVEEVENT), \
1245 NULL, 0, NULL, NULL, 0)
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
1253 #define KSALLOCATOR_OPTIONF_COMPATIBLE 0x00000001
1254 #define KSALLOCATOR_OPTIONF_SYSTEM_MEMORY 0x00000002
1255 #define KSALLOCATOR_OPTIONF_VALID 0x00000003
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
1273 #if defined(_NTDDK_)
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,
1290 typedef VOID (*PFNKSDELETEALLOCATOR) (PVOID Context);
1332 #define KSMEMORY_TYPE_WILDCARD GUID_NULL
1333 #define STATIC_KSMEMORY_TYPE_WILDCARD STATIC_GUID_NULL
1335 #define KSMEMORY_TYPE_DONT_CARE GUID_NULL
1336 #define STATIC_KSMEMORY_TYPE_DONT_CARE STATIC_GUID_NULL
1338 #define KS_TYPE_DONT_CARE GUID_NULL
1339 #define STATIC_KS_TYPE_DONT_CARE STATIC_GUID_NULL
1341 #define STATIC_KSMEMORY_TYPE_SYSTEM \
1342 0x091bb638L,0x603f,0x11d1,0xb0,0x67,0x00,0xa0,0xc9,0x06,0x28,0x02
1344 #define KSMEMORY_TYPE_SYSTEM DEFINE_GUIDNAMED(KSMEMORY_TYPE_SYSTEM)
1346 #define STATIC_KSMEMORY_TYPE_USER \
1347 0x8cb0fc28L,0x7893,0x11d1,0xb0,0x69,0x00,0xa0,0xc9,0x06,0x28,0x02
1349 #define KSMEMORY_TYPE_USER DEFINE_GUIDNAMED(KSMEMORY_TYPE_USER)
1351 #define STATIC_KSMEMORY_TYPE_KERNEL_PAGED \
1352 0xd833f8f8L,0x7894,0x11d1,0xb0,0x69,0x00,0xa0,0xc9,0x06,0x28,0x02
1354 #define KSMEMORY_TYPE_KERNEL_PAGED DEFINE_GUIDNAMED(KSMEMORY_TYPE_KERNEL_PAGED)
1356 #define STATIC_KSMEMORY_TYPE_KERNEL_NONPAGED \
1357 0x4a6d5fc4L,0x7895,0x11d1,0xb0,0x69,0x00,0xa0,0xc9,0x06,0x28,0x02
1359 #define KSMEMORY_TYPE_KERNEL_NONPAGED DEFINE_GUIDNAMED(KSMEMORY_TYPE_KERNEL_NONPAGED)
1361 #define STATIC_KSMEMORY_TYPE_DEVICE_UNKNOWN \
1362 0x091bb639L,0x603f,0x11d1,0xb0,0x67,0x00,0xa0,0xc9,0x06,0x28,0x02
1364 #define KSMEMORY_TYPE_DEVICE_UNKNOWN DEFINE_GUIDNAMED(KSMEMORY_TYPE_DEVICE_UNKNOWN)
1366 #define DECLARE_SIMPLE_FRAMING_EX(FramingExName,MemoryType,Flags,Frames,Alignment,MinFrameSize,MaxFrameSize) \
1367 const KSALLOCATOR_FRAMING_EX FramingExName = \
1380 STATIC_KS_TYPE_DONT_CARE, \
1405 #define SetDefaultKsCompression(KsCompressionPointer) \
1407 KsCompressionPointer->RatioNumerator = 1; \
1408 KsCompressionPointer->RatioDenominator = 1; \
1409 KsCompressionPointer->RatioConstantMargin = 0; \
1412 #define SetDontCareKsFramingRange(KsFramingRangePointer) \
1414 KsFramingRangePointer->MinFrameSize = 0; \
1415 KsFramingRangePointer->MaxFrameSize = (ULONG) -1; \
1416 KsFramingRangePointer->Stepping = 1; \
1419 #define SetKsFramingRange(KsFramingRangePointer,P_MinFrameSize,P_MaxFrameSize) \
1421 KsFramingRangePointer->MinFrameSize = P_MinFrameSize; \
1422 KsFramingRangePointer->MaxFrameSize = P_MaxFrameSize; \
1423 KsFramingRangePointer->Stepping = 1; \
1426 #define SetKsFramingRangeWeighted(KsFramingRangeWeightedPointer,P_MinFrameSize,P_MaxFrameSize) \
1428 KS_FRAMING_RANGE *KsFramingRange = \
1429 &KsFramingRangeWeightedPointer->Range; \
1430 SetKsFramingRange(KsFramingRange,P_MinFrameSize,P_MaxFrameSize);\
1431 KsFramingRangeWeightedPointer->InPlaceWeight = 0; \
1432 KsFramingRangeWeightedPointer->NotInPlaceWeight = 0; \
1435 #define INITIALIZE_SIMPLE_FRAMING_EX(FramingExPointer,P_MemoryType,P_Flags,P_Frames,P_Alignment,P_MinFrameSize,P_MaxFrameSize) \
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); \
1460 #define STATIC_KSEVENTSETID_StreamAllocator \
1461 0x75d95571L,0x073c,0x11d0,0xa1,0x61,0x00,0x20,0xaf,0xd1,0x56,0xe4
1463 #define KSEVENTSETID_StreamAllocator DEFINE_GUIDNAMED(KSEVENTSETID_StreamAllocator)
1470 #define STATIC_KSMETHODSETID_StreamAllocator \
1471 0xcf6e4341L,0xec87,0x11cf,0xa1,0x30,0x00,0x20,0xaf,0xd1,0x56,0xe4
1473 #define KSMETHODSETID_StreamAllocator DEFINE_GUIDNAMED(KSMETHODSETID_StreamAllocator)
1480 #define DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_ALLOC(Handler) \
1481 DEFINE_KSMETHOD_ITEM( \
1482 KSMETHOD_STREAMALLOCATOR_ALLOC, \
1483 KSMETHOD_TYPE_WRITE, \
1489 #define DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_FREE(Handler) \
1490 DEFINE_KSMETHOD_ITEM( \
1491 KSMETHOD_STREAMALLOCATOR_FREE, \
1492 KSMETHOD_TYPE_READ, \
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) \
1504 #define STATIC_KSPROPSETID_StreamAllocator \
1505 0xcf6e4342L,0xec87,0x11cf,0xa1,0x30,0x00,0x20,0xaf,0xd1,0x56,0xe4
1507 #define KSPROPSETID_StreamAllocator DEFINE_GUIDNAMED(KSPROPSETID_StreamAllocator)
1509 #if defined(_NTDDK_)
1511 KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE,
1512 KSPROPERTY_STREAMALLOCATOR_STATUS
1513 } KSPROPERTY_STREAMALLOCATOR;
1515 #define DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_FUNCTIONTABLE(Handler) \
1516 DEFINE_KSPROPERTY_ITEM( \
1517 KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE,\
1519 sizeof(KSPROPERTY), \
1520 sizeof(KSSTREAMALLOCATOR_FUNCTIONTABLE),\
1521 NULL, NULL, 0, NULL, NULL, 0)
1523 #define DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_STATUS(Handler) \
1524 DEFINE_KSPROPERTY_ITEM( \
1525 KSPROPERTY_STREAMALLOCATOR_STATUS, \
1527 sizeof(KSPROPERTY), \
1528 sizeof(KSSTREAMALLOCATOR_STATUS), \
1529 NULL, NULL, 0, NULL, NULL, 0)
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)\
1537 typedef NTSTATUS (*PFNALLOCATOR_ALLOCATEFRAME) (PFILE_OBJECT FileObject,
1539 typedef VOID (*PFNALLOCATOR_FREEFRAME) (PFILE_OBJECT FileObject, PVOID Frame);
1542 PFNALLOCATOR_ALLOCATEFRAME AllocateFrame;
1543 PFNALLOCATOR_FREEFRAME FreeFrame;
1544 } KSSTREAMALLOCATOR_FUNCTIONTABLE, *PKSSTREAMALLOCATOR_FUNCTIONTABLE;
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
1590 #define STATIC_KSPROPSETID_StreamInterface \
1591 0x1fdd8ee1L,0x9cd3,0x11d0,0x82,0xaa,0x00,0x00,0xf8,0x22,0xfe,0x8a
1593 #define KSPROPSETID_StreamInterface DEFINE_GUIDNAMED(KSPROPSETID_StreamInterface)
1599 #define DEFINE_KSPROPERTY_ITEM_STREAMINTERFACE_HEADERSIZE(GetHandler) \
1600 DEFINE_KSPROPERTY_ITEM( \
1601 KSPROPERTY_STREAMINTERFACE_HEADERSIZE, \
1603 sizeof(KSPROPERTY), \
1605 NULL,NULL,0,NULL,NULL,0)
1607 #define DEFINE_KSPROPERTY_STREAMINTERFACESET(StreamInterfaceSet,HeaderSizeHandler) \
1608 DEFINE_KSPROPERTY_TABLE(StreamInterfaceSet) { \
1609 DEFINE_KSPROPERTY_ITEM_STREAMINTERFACE_HEADERSIZE(HeaderSizeHandler)\
1612 #define STATIC_KSPROPSETID_Stream \
1613 0x65aaba60L,0x98ae,0x11cf,0xa1,0x0d,0x00,0x20,0xaf,0xd1,0x56,0xe4
1615 #define KSPROPSETID_Stream DEFINE_GUIDNAMED(KSPROPSETID_Stream)
1631 #define DEFINE_KSPROPERTY_ITEM_STREAM_ALLOCATOR(GetHandler,SetHandler) \
1632 DEFINE_KSPROPERTY_ITEM( \
1633 KSPROPERTY_STREAM_ALLOCATOR, \
1635 sizeof(KSPROPERTY), \
1638 NULL, 0, NULL, NULL, 0)
1640 #define DEFINE_KSPROPERTY_ITEM_STREAM_QUALITY(Handler) \
1641 DEFINE_KSPROPERTY_ITEM( \
1642 KSPROPERTY_STREAM_QUALITY, \
1644 sizeof(KSPROPERTY), \
1645 sizeof(KSQUALITY_MANAGER), \
1646 NULL, NULL, 0, NULL, NULL, 0)
1648 #define DEFINE_KSPROPERTY_ITEM_STREAM_DEGRADATION(GetHandler,SetHandler)\
1649 DEFINE_KSPROPERTY_ITEM( \
1650 KSPROPERTY_STREAM_DEGRADATION, \
1652 sizeof(KSPROPERTY), \
1655 NULL, 0, NULL, NULL, 0)
1657 #define DEFINE_KSPROPERTY_ITEM_STREAM_MASTERCLOCK(GetHandler,SetHandler)\
1658 DEFINE_KSPROPERTY_ITEM( \
1659 KSPROPERTY_STREAM_MASTERCLOCK, \
1661 sizeof(KSPROPERTY), \
1664 NULL, 0, NULL, NULL, 0)
1666 #define DEFINE_KSPROPERTY_ITEM_STREAM_TIMEFORMAT(Handler) \
1667 DEFINE_KSPROPERTY_ITEM( \
1668 KSPROPERTY_STREAM_TIMEFORMAT, \
1670 sizeof(KSPROPERTY), \
1672 NULL, NULL, 0, NULL, NULL, 0)
1674 #define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONTIME(GetHandler,SetHandler)\
1675 DEFINE_KSPROPERTY_ITEM( \
1676 KSPROPERTY_STREAM_PRESENTATIONTIME, \
1678 sizeof(KSPROPERTY), \
1681 NULL, 0, NULL, NULL, 0)
1683 #define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONEXTENT(Handler) \
1684 DEFINE_KSPROPERTY_ITEM( \
1685 KSPROPERTY_STREAM_PRESENTATIONEXTENT, \
1687 sizeof(KSPROPERTY), \
1689 NULL, NULL, 0, NULL, NULL, 0)
1691 #define DEFINE_KSPROPERTY_ITEM_STREAM_FRAMETIME(Handler) \
1692 DEFINE_KSPROPERTY_ITEM( \
1693 KSPROPERTY_STREAM_FRAMETIME, \
1695 sizeof(KSPROPERTY), \
1696 sizeof(KSFRAMETIME), \
1697 NULL, NULL, 0, NULL, NULL, 0)
1699 #define DEFINE_KSPROPERTY_ITEM_STREAM_RATECAPABILITY(Handler) \
1700 DEFINE_KSPROPERTY_ITEM( \
1701 KSPROPERTY_STREAM_RATECAPABILITY, \
1703 sizeof(KSRATE_CAPABILITY), \
1705 NULL, NULL, 0, NULL, NULL, 0)
1707 #define DEFINE_KSPROPERTY_ITEM_STREAM_RATE(GetHandler,SetHandler) \
1708 DEFINE_KSPROPERTY_ITEM( \
1709 KSPROPERTY_STREAM_RATE, \
1711 sizeof(KSPROPERTY), \
1714 NULL, 0, NULL, NULL, 0)
1716 #define DEFINE_KSPROPERTY_ITEM_STREAM_PIPE_ID(GetHandler,SetHandler) \
1717 DEFINE_KSPROPERTY_ITEM( \
1718 KSPROPERTY_STREAM_PIPE_ID, \
1720 sizeof(KSPROPERTY), \
1723 NULL, 0, NULL, NULL, 0)
1736 #define KSFRAMETIME_VARIABLESIZE 0x00000001
1746 #define KSRATE_NOPRESENTATIONSTART 0x00000001
1747 #define KSRATE_NOPRESENTATIONDURATION 0x00000002
1754 #define STATIC_KSPROPSETID_Clock \
1755 0xDF12A4C0L,0xAC17,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
1757 #define KSPROPSETID_Clock DEFINE_GUIDNAMED(KSPROPSETID_Clock)
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)))
1786 #if defined(_NTDDK_)
1787 KSPROPERTY_CLOCK_FUNCTIONTABLE
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);
1797 PFNKSCLOCK_GETTIME GetTime;
1798 PFNKSCLOCK_GETTIME GetPhysicalTime;
1799 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedTime;
1800 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedPhysicalTime;
1801 } KSCLOCK_FUNCTIONTABLE, *PKSCLOCK_FUNCTIONTABLE;
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);
1809 typedef PVOID PKSDEFAULTCLOCK;
1811 #define DEFINE_KSPROPERTY_ITEM_CLOCK_TIME(Handler) \
1812 DEFINE_KSPROPERTY_ITEM( \
1813 KSPROPERTY_CLOCK_TIME, \
1815 sizeof(KSPROPERTY), sizeof(LONGLONG), \
1816 NULL, NULL, 0, NULL, NULL, 0)
1818 #define DEFINE_KSPROPERTY_ITEM_CLOCK_PHYSICALTIME(Handler) \
1819 DEFINE_KSPROPERTY_ITEM( \
1820 KSPROPERTY_CLOCK_PHYSICALTIME, \
1822 sizeof(KSPROPERTY), sizeof(LONGLONG), \
1823 NULL, NULL, 0, NULL, NULL, 0)
1825 #define DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDTIME(Handler) \
1826 DEFINE_KSPROPERTY_ITEM( \
1827 KSPROPERTY_CLOCK_CORRELATEDTIME, \
1829 sizeof(KSPROPERTY), \
1830 sizeof(KSCORRELATED_TIME), \
1831 NULL, NULL, 0, NULL, NULL, 0)
1833 #define DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDPHYSICALTIME(Handler) \
1834 DEFINE_KSPROPERTY_ITEM( \
1835 KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME,\
1837 sizeof(KSPROPERTY), \
1838 sizeof(KSCORRELATED_TIME), \
1839 NULL, NULL, 0, NULL, NULL, 0)
1841 #define DEFINE_KSPROPERTY_ITEM_CLOCK_RESOLUTION(Handler) \
1842 DEFINE_KSPROPERTY_ITEM( \
1843 KSPROPERTY_CLOCK_RESOLUTION, \
1845 sizeof(KSPROPERTY),sizeof(KSRESOLUTION),\
1846 NULL, NULL, 0, NULL, NULL, 0)
1848 #define DEFINE_KSPROPERTY_ITEM_CLOCK_STATE(Handler) \
1849 DEFINE_KSPROPERTY_ITEM( \
1850 KSPROPERTY_CLOCK_STATE, \
1852 sizeof(KSPROPERTY), sizeof(KSSTATE), \
1853 NULL, NULL, 0, NULL, NULL, 0)
1855 #define DEFINE_KSPROPERTY_ITEM_CLOCK_FUNCTIONTABLE(Handler) \
1856 DEFINE_KSPROPERTY_ITEM( \
1857 KSPROPERTY_CLOCK_FUNCTIONTABLE, \
1859 sizeof(KSPROPERTY), \
1860 sizeof(KSCLOCK_FUNCTIONTABLE), \
1861 NULL, NULL, 0, NULL, NULL, 0)
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), \
1875 #define STATIC_KSEVENTSETID_Clock \
1876 0x364D8E20L,0x62C7,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
1878 #define KSEVENTSETID_Clock DEFINE_GUIDNAMED(KSEVENTSETID_Clock)
1885 #define STATIC_KSEVENTSETID_Connection \
1886 0x7f4bcbe0L,0x9ea5,0x11cf,0xa5,0xd6,0x28,0xdb,0x04,0xc1,0x00,0x00
1888 #define KSEVENTSETID_Connection DEFINE_GUIDNAMED(KSEVENTSETID_Connection)
1911 #define STATIC_KSDEGRADESETID_Standard \
1912 0x9F564180L,0x704C,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
1914 #define KSDEGRADESETID_Standard DEFINE_GUIDNAMED(KSDEGRADESETID_Standard)
1923 #if defined(_NTDDK_)
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
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,
1946 PIO_STATUS_BLOCK IoStatus);
1947 typedef NTSTATUS (*PFNKSALLOCATOR) (PIRP Irp, ULONG BufferSize,
1948 BOOLEAN InputOperation);
1952 const VOID *Members;
1953 } KSPROPERTY_MEMBERSLIST, *PKSPROPERTY_MEMBERSLIST;
1957 ULONG MembersListCount;
1958 const KSPROPERTY_MEMBERSLIST *MembersList;
1959 } KSPROPERTY_VALUES, *PKSPROPERTY_VALUES;
1961 #define DEFINE_KSPROPERTY_TABLE(tablename) \
1962 const KSPROPERTY_ITEM tablename[] =
1964 #define DEFINE_KSPROPERTY_ITEM(PropertyId,GetHandler,MinProperty,MinData,SetHandler,Values,RelationsCount,Relations,SupportHandler,SerializedSize)\
1966 PropertyId, (PFNKSHANDLER)GetHandler, \
1967 MinProperty, MinData, \
1968 (PFNKSHANDLER)SetHandler, \
1969 (PKSPROPERTY_VALUES)Values, RelationsCount, \
1970 (PKSPROPERTY)Relations, \
1971 (PFNKSHANDLER)SupportHandler, \
1972 (ULONG)SerializedSize \
1978 PFNKSHANDLER GetPropertyHandler;
1979 BOOLEAN GetSupported;
1984 PFNKSHANDLER SetPropertyHandler;
1985 BOOLEAN SetSupported;
1987 const KSPROPERTY_VALUES *Values;
1988 ULONG RelationsCount;
1990 PFNKSHANDLER SupportHandler;
1991 ULONG SerializedSize;
1992 } KSPROPERTY_ITEM, *PKSPROPERTY_ITEM;
1994 #define DEFINE_KSFASTPROPERTY_ITEM(PropertyId, GetHandler, SetHandler) \
1996 PropertyId, (PFNKSFASTHANDLER)GetHandler, \
1997 (PFNKSFASTHANDLER)SetHandler, 0 \
2003 PFNKSFASTHANDLER GetPropertyHandler;
2004 BOOLEAN GetSupported;
2007 PFNKSFASTHANDLER SetPropertyHandler;
2008 BOOLEAN SetSupported;
2011 } KSFASTPROPERTY_ITEM, *PKSFASTPROPERTY_ITEM;
2013 #define DEFINE_KSPROPERTY_SET(Set,PropertiesCount,PropertyItem,FastIoCount,FastIoTable)\
2016 PropertiesCount, PropertyItem, \
2017 FastIoCount, FastIoTable \
2020 #define DEFINE_KSPROPERTY_SET_TABLE(tablename) \
2021 const KSPROPERTY_SET tablename[] =
2025 ULONG PropertiesCount;
2026 const KSPROPERTY_ITEM *PropertyItem;
2028 const KSFASTPROPERTY_ITEM *FastIoTable;
2029 } KSPROPERTY_SET, *PKSPROPERTY_SET;
2031 #define DEFINE_KSMETHOD_TABLE(tablename) \
2032 const KSMETHOD_ITEM tablename[] =
2034 #define DEFINE_KSMETHOD_ITEM(MethodId,Flags,MethodHandler,MinMethod,MinData,SupportHandler)\
2036 MethodId, (PFNKSHANDLER)MethodHandler, \
2037 MinMethod, MinData, \
2038 SupportHandler, Flags \
2044 PFNKSHANDLER MethodHandler;
2045 BOOLEAN MethodSupported;
2049 PFNKSHANDLER SupportHandler;
2051 } KSMETHOD_ITEM, *PKSMETHOD_ITEM;
2053 #define DEFINE_KSFASTMETHOD_ITEM(MethodId,MethodHandler) \
2055 MethodId, (PFNKSFASTHANDLER)MethodHandler \
2061 PFNKSFASTHANDLER MethodHandler;
2062 BOOLEAN MethodSupported;
2064 } KSFASTMETHOD_ITEM, *PKSFASTMETHOD_ITEM;
2066 #define DEFINE_KSMETHOD_SET(Set,MethodsCount,MethodItem,FastIoCount,FastIoTable)\
2069 MethodsCount, MethodItem, \
2070 FastIoCount, FastIoTable \
2073 #define DEFINE_KSMETHOD_SET_TABLE(tablename) \
2074 const KSMETHOD_SET tablename[] =
2079 const KSMETHOD_ITEM *MethodItem;
2081 const KSFASTMETHOD_ITEM *FastIoTable;
2082 } KSMETHOD_SET, *PKSMETHOD_SET;
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);
2090 #define DEFINE_KSEVENT_TABLE(tablename) \
2091 const KSEVENT_ITEM tablename[] =
2093 #define DEFINE_KSEVENT_ITEM(EventId,DataInput,ExtraEntryData,AddHandler,RemoveHandler,SupportHandler)\
2095 EventId, DataInput, ExtraEntryData, \
2096 AddHandler, RemoveHandler, SupportHandler \
2102 ULONG ExtraEntryData;
2103 PFNKSADDEVENT AddHandler;
2104 PFNKSREMOVEEVENT RemoveHandler;
2105 PFNKSHANDLER SupportHandler;
2106 } KSEVENT_ITEM, *PKSEVENT_ITEM;
2108 #define DEFINE_KSEVENT_SET(Set,EventsCount,EventItem) \
2110 Set, EventsCount, EventItem \
2113 #define DEFINE_KSEVENT_SET_TABLE(tablename) \
2114 const KSEVENT_SET tablename[] =
2119 const KSEVENT_ITEM *EventItem;
2120 } KSEVENT_SET, *PKSEVENT_SET;
2124 ULONG ReferenceCount;
2125 KSPIN_LOCK AccessLock;
2126 } KSDPC_ITEM, *PKSDPC_ITEM;
2130 LIST_ENTRY BufferList;
2131 } KSBUFFER_ITEM, *PKSBUFFER_ITEM;
2134 #define KSEVENT_ENTRY_DELETED 1
2135 #define KSEVENT_ENTRY_ONESHOT 2
2136 #define KSEVENT_ENTRY_BUFFERED 4
2138 struct _KSEVENT_ENTRY {
2139 LIST_ENTRY ListEntry;
2142 PKSDPC_ITEM DpcItem;
2143 PKSBUFFER_ITEM BufferItem;
2145 PKSEVENTDATA EventData;
2146 ULONG NotificationType;
2147 const KSEVENT_SET *EventSet;
2148 const KSEVENT_ITEM *EventItem;
2149 PFILE_OBJECT FileObject;
2150 ULONG SemaphoreAdjustment;
2160 KSEVENTS_FMUTEXUNSAFE,
2163 } KSEVENTS_LOCKTYPE;
2165 #define KSDISPATCH_FASTIO 0x80000000
2168 PDRIVER_DISPATCH Create;
2170 UNICODE_STRING ObjectClass;
2171 PSECURITY_DESCRIPTOR SecurityDescriptor;
2173 } KSOBJECT_CREATE_ITEM, *PKSOBJECT_CREATE_ITEM;
2175 typedef VOID (*PFNKSITEMFREECALLBACK)(PKSOBJECT_CREATE_ITEM CreateItem);
2177 #define KSCREATE_ITEM_SECURITYCHANGED 0x00000001
2178 #define KSCREATE_ITEM_WILDCARD 0x00000002
2179 #define KSCREATE_ITEM_NOPARAMETERS 0x00000004
2180 #define KSCREATE_ITEM_FREEONSTOP 0x00000008
2182 #define DEFINE_KSCREATE_DISPATCH_TABLE( tablename ) \
2183 KSOBJECT_CREATE_ITEM tablename[] =
2185 #define DEFINE_KSCREATE_ITEM(DispatchCreate,TypeName,Context) \
2187 (DispatchCreate), (PVOID)(Context), \
2189 sizeof(TypeName) - sizeof(UNICODE_NULL),\
2191 (PWCHAR)(TypeName) \
2196 #define DEFINE_KSCREATE_ITEMEX(DispatchCreate,TypeName,Context,Flags) \
2201 sizeof(TypeName) - sizeof(UNICODE_NULL),\
2203 (PWCHAR)(TypeName) \
2208 #define DEFINE_KSCREATE_ITEMNULL(DispatchCreate,Context) \
2210 DispatchCreate, Context, \
2218 ULONG CreateItemsCount;
2219 PKSOBJECT_CREATE_ITEM CreateItemsList;
2220 } KSOBJECT_CREATE, *PKSOBJECT_CREATE;
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;
2235 #define DEFINE_KSDISPATCH_TABLE(tablename,DeviceIoControl,Read,Write,Flush,Close,QuerySecurity,SetSecurity,FastDeviceIoControl,FastRead,FastWrite)\
2236 const KSDISPATCH_TABLE tablename = \
2245 FastDeviceIoControl, \
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])
2273 typedef PVOID KSDEVICE_HEADER, KSOBJECT_HEADER;
2276 KsInvokeOnSuccess = 1,
2277 KsInvokeOnError = 2,
2278 KsInvokeOnCancel = 4
2279 } KSCOMPLETION_INVOCATION;
2284 } KSLIST_ENTRY_LOCATION;
2289 KsAcquireOnlySingleItem,
2290 KsAcquireAndRemoveOnlySingleItem
2291 } KSIRP_REMOVAL_OPERATION;
2294 KsStackCopyToNewLocation,
2295 KsStackReuseCurrentLocation,
2296 KsStackUseNewLocation
2300 KSTARGET_STATE_DISABLED,
2301 KSTARGET_STATE_ENABLED
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);
2309 #define BUS_INTERFACE_REFERENCE_VERSION 0x100
2312 INTERFACE Interface;
2314 PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject;
2315 PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject;
2316 PFNQUERYREFERENCESTRING QueryReferenceString;
2317 } BUS_INTERFACE_REFERENCE, *PBUS_INTERFACE_REFERENCE;
2319 #define STATIC_REFERENCE_BUS_INTERFACE STATIC_KSMEDIUMSETID_Standard
2320 #define REFERENCE_BUS_INTERFACE KSMEDIUMSETID_Standard
2324 #ifndef PACK_PRAGMAS_NOT_SUPPORTED
2325 #include <pshpack1.h>
2333 #ifndef PACK_PRAGMAS_NOT_SUPPORTED
2334 #include <poppack.h>
2344 #if defined(_NTDDK_)
2346 #define IOCTL_KS_HANDSHAKE \
2347 CTL_CODE(FILE_DEVICE_KS, 0x007, METHOD_NEITHER, FILE_ANY_ACCESS)
2353 } KSHANDSHAKE, *PKSHANDSHAKE;
2355 typedef struct _KSGATE KSGATE, *PKSGATE;
2362 typedef PVOID KSOBJECT_BAG;
2365 typedef BOOLEAN (*PFNKSGENERATEEVENTCALLBACK)(PVOID Context,
2366 PKSEVENT_ENTRY EventEntry);
2368 typedef NTSTATUS (*PFNKSDEVICECREATE)(PKSDEVICE Device);
2370 typedef NTSTATUS (*PFNKSDEVICEPNPSTART)(PKSDEVICE Device,PIRP Irp,
2371 PCM_RESOURCE_LIST TranslatedResourceList,
2372 PCM_RESOURCE_LIST UntranslatedResourceList);
2374 typedef NTSTATUS (*PFNKSDEVICE)(PKSDEVICE Device);
2376 typedef NTSTATUS (*PFNKSDEVICEIRP)(PKSDEVICE Device,PIRP Irp);
2378 typedef void (*PFNKSDEVICEIRPVOID)(PKSDEVICE Device,PIRP Irp);
2380 typedef NTSTATUS (*PFNKSDEVICEQUERYCAPABILITIES)(PKSDEVICE Device,PIRP Irp,
2381 PDEVICE_CAPABILITIES Capabilities);
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);
2390 typedef void (*PFNKSDEVICESETPOWER)(PKSDEVICE Device,PIRP Irp,
2391 DEVICE_POWER_STATE To,
2392 DEVICE_POWER_STATE From);
2394 typedef NTSTATUS (*PFNKSFILTERFACTORYVOID)(PKSFILTERFACTORY FilterFactory);
2396 typedef void (*PFNKSFILTERFACTORYPOWER)(PKSFILTERFACTORY FilterFactory,
2397 DEVICE_POWER_STATE State);
2399 typedef NTSTATUS (*PFNKSFILTERIRP)(PKSFILTER Filter,PIRP Irp);
2401 typedef NTSTATUS (*PFNKSFILTERPROCESS)(PKSFILTER Filter,
2402 PKSPROCESSPIN_INDEXENTRY Index);
2404 typedef NTSTATUS (*PFNKSFILTERVOID)(PKSFILTER Filter);
2406 typedef void (*PFNKSFILTERPOWER)(PKSFILTER Filter,DEVICE_POWER_STATE State);
2408 typedef NTSTATUS (*PFNKSPINIRP)(PKSPIN Pin,PIRP Irp);
2410 typedef NTSTATUS (*PFNKSPINSETDEVICESTATE)(PKSPIN Pin,
KSSTATE ToState,
2413 typedef NTSTATUS (*PFNKSPINSETDATAFORMAT)(PKSPIN Pin,PKSDATAFORMAT OldFormat,
2414 PKSMULTIPLE_ITEM OldAttributeList,
2415 const KSDATARANGE *DataRange,
2416 const KSATTRIBUTE_LIST *AttributeRange);
2418 typedef NTSTATUS (*PFNKSPINHANDSHAKE)(PKSPIN Pin,PKSHANDSHAKE
In,
2421 typedef NTSTATUS (*PFNKSPIN)(PKSPIN Pin);
2423 typedef void (*PFNKSPINVOID)(PKSPIN Pin);
2425 typedef void (*PFNKSPINPOWER)(PKSPIN Pin,DEVICE_POWER_STATE State);
2427 typedef BOOLEAN (*PFNKSPINSETTIMER)(PKSPIN Pin,PKTIMER Timer,
2428 LARGE_INTEGER DueTime,PKDPC Dpc);
2430 typedef BOOLEAN (*PFNKSPINCANCELTIMER)(PKSPIN Pin,PKTIMER Timer);
2432 typedef LONGLONG (FASTCALL *PFNKSPINCORRELATEDTIME)(PKSPIN Pin,
2433 PLONGLONG SystemTime);
2435 typedef void (*PFNKSPINRESOLUTION)(PKSPIN Pin,PKSRESOLUTION Resolution);
2437 typedef NTSTATUS (*PFNKSPININITIALIZEALLOCATOR)(PKSPIN Pin,
2438 PKSALLOCATOR_FRAMING AllocatorFraming,
2441 typedef void (*PFNKSSTREAMPOINTER)(PKSSTREAM_POINTER StreamPointer);
2444 typedef struct KSAUTOMATION_TABLE_ KSAUTOMATION_TABLE,*PKSAUTOMATION_TABLE;
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;
2461 #define DEFINE_KSAUTOMATION_TABLE(table) \
2462 const KSAUTOMATION_TABLE table =
2464 #define DEFINE_KSAUTOMATION_PROPERTIES(table) \
2465 SIZEOF_ARRAY(table), \
2466 sizeof(KSPROPERTY_ITEM), \
2469 #define DEFINE_KSAUTOMATION_METHODS(table) \
2470 SIZEOF_ARRAY(table), \
2471 sizeof(KSMETHOD_ITEM), \
2474 #define DEFINE_KSAUTOMATION_EVENTS(table) \
2475 SIZEOF_ARRAY(table), \
2476 sizeof(KSEVENT_ITEM), \
2479 #define DEFINE_KSAUTOMATION_PROPERTIES_NULL \
2481 sizeof(KSPROPERTY_ITEM), \
2484 #define DEFINE_KSAUTOMATION_METHODS_NULL \
2486 sizeof(KSMETHOD_ITEM), \
2489 #define DEFINE_KSAUTOMATION_EVENTS_NULL \
2491 sizeof(KSEVENT_ITEM), \
2494 #define MIN_DEV_VER_FOR_QI (0x100)
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;
2513 struct _KSFILTER_DISPATCH {
2514 PFNKSFILTERIRP Create;
2515 PFNKSFILTERIRP Close;
2516 PFNKSFILTERPROCESS Process;
2517 PFNKSFILTERVOID Reset;
2520 struct _KSPIN_DISPATCH {
2525 PFNKSPINSETDATAFORMAT SetDataFormat;
2526 PFNKSPINSETDEVICESTATE SetDeviceState;
2528 PFNKSPINVOID Disconnect;
2529 const KSCLOCK_DISPATCH *Clock;
2530 const KSALLOCATOR_DISPATCH *Allocator;
2533 struct _KSCLOCK_DISPATCH {
2534 PFNKSPINSETTIMER SetTimer;
2535 PFNKSPINCANCELTIMER CancelTimer;
2536 PFNKSPINCORRELATEDTIME CorrelatedTime;
2537 PFNKSPINRESOLUTION Resolution;
2540 struct _KSALLOCATOR_DISPATCH {
2541 PFNKSPININITIALIZEALLOCATOR InitializeAllocator;
2542 PFNKSDELETEALLOCATOR DeleteAllocator;
2543 PFNKSDEFAULTALLOCATE Allocate;
2544 PFNKSDEFAULTFREE Free;
2547 #define KSDEVICE_DESCRIPTOR_VERSION (0x100)
2549 struct _KSDEVICE_DESCRIPTOR {
2550 const KSDEVICE_DISPATCH *Dispatch;
2551 ULONG FilterDescriptorsCount;
2552 const KSFILTER_DESCRIPTOR*
const *FilterDescriptors;
2556 struct _KSFILTER_DESCRIPTOR {
2557 const KSFILTER_DISPATCH *Dispatch;
2558 const KSAUTOMATION_TABLE *AutomationTable;
2560 #define KSFILTER_DESCRIPTOR_VERSION ((ULONG)-1)
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;
2581 #define DEFINE_KSFILTER_DESCRIPTOR(descriptor) \
2582 const KSFILTER_DESCRIPTOR descriptor =
2584 #define DEFINE_KSFILTER_PIN_DESCRIPTORS(table) \
2585 SIZEOF_ARRAY(table), \
2589 #define DEFINE_KSFILTER_CATEGORIES(table) \
2590 SIZEOF_ARRAY(table), \
2593 #define DEFINE_KSFILTER_CATEGORY(category) \
2597 #define DEFINE_KSFILTER_CATEGORIES_NULL \
2601 #define DEFINE_KSFILTER_NODE_DESCRIPTORS(table) \
2602 SIZEOF_ARRAY(table), \
2606 #define DEFINE_KSFILTER_NODE_DESCRIPTORS_NULL \
2608 sizeof(KSNODE_DESCRIPTOR), \
2611 #define DEFINE_KSFILTER_CONNECTIONS(table) \
2612 SIZEOF_ARRAY(table), \
2615 #define DEFINE_KSFILTER_DEFAULT_CONNECTIONS \
2619 #define DEFINE_KSFILTER_DESCRIPTOR_TABLE(table) \
2620 const KSFILTER_DESCRIPTOR*const table[] =
2622 struct _KSPIN_DESCRIPTOR_EX {
2623 const KSPIN_DISPATCH *Dispatch;
2624 const KSAUTOMATION_TABLE *AutomationTable;
2625 KSPIN_DESCRIPTOR PinDescriptor;
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;
2651 PFNKSINTERSECTHANDLEREX IntersectHandler;
2654 #define DEFINE_KSPIN_DEFAULT_INTERFACES \
2658 #define DEFINE_KSPIN_DEFAULT_MEDIUMS \
2662 struct _KSNODE_DESCRIPTOR {
2663 const KSAUTOMATION_TABLE *AutomationTable;
2672 #define DEFINE_NODE_DESCRIPTOR(automation,type,name) \
2673 { (automation), (type), (name), NULL }
2675 #define DEFINE_NODE_DESCRIPTOR(automation,type,name) \
2676 { (automation), (type), (name) }
2680 const KSDEVICE_DESCRIPTOR *Descriptor;
2683 PDEVICE_OBJECT FunctionalDeviceObject;
2684 PDEVICE_OBJECT PhysicalDeviceObject;
2685 PDEVICE_OBJECT NextDeviceObject;
2687 SYSTEM_POWER_STATE SystemPowerState;
2688 DEVICE_POWER_STATE DevicePowerState;
2691 struct _KSFILTERFACTORY {
2692 const KSFILTER_DESCRIPTOR *FilterDescriptor;
2698 const KSFILTER_DESCRIPTOR *Descriptor;
2704 const KSPIN_DESCRIPTOR_EX *Descriptor;
2709 BOOLEAN ConnectionIsExternal;
2713 PKSDATAFORMAT ConnectionFormat;
2714 PKSMULTIPLE_ITEM AttributeList;
2715 ULONG StreamHeaderSize;
2723 PHYSICAL_ADDRESS PhysicalAddress;
2728 struct _KSSTREAM_POINTER_OFFSET
2730 #if defined(_NTDDK_)
2733 PKSMAPPING Mappings;
2745 struct _KSSTREAM_POINTER
2749 PKSSTREAM_HEADER StreamHeader;
2750 PKSSTREAM_POINTER_OFFSET Offset;
2751 KSSTREAM_POINTER_OFFSET OffsetIn;
2752 KSSTREAM_POINTER_OFFSET OffsetOut;
2755 struct _KSPROCESSPIN {
2757 PKSSTREAM_POINTER StreamPointer;
2758 PKSPROCESSPIN InPlaceCounterpart;
2759 PKSPROCESSPIN DelegateBranch;
2760 PKSPROCESSPIN CopySource;
2762 ULONG BytesAvailable;
2768 struct _KSPROCESSPIN_INDEXENTRY {
2769 PKSPROCESSPIN *Pins;
2775 KsObjectTypeFilterFactory,
2781 typedef void (*PFNKSFREE)(PVOID Data);
2783 typedef void (*PFNKSPINFRAMERETURN)(PKSPIN Pin,PVOID Data,ULONG Size,PMDL Mdl,
2784 PVOID Context,NTSTATUS Status);
2786 typedef void (*PFNKSPINIRPCOMPLETION)(PKSPIN Pin,PIRP Irp);
2789 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
2790 #ifndef _IKsControl_
2791 #define _IKsControl_
2795 #ifndef DEFINE_ABSTRACT_UNKNOWN
2796 #define DEFINE_ABSTRACT_UNKNOWN() \
2797 STDMETHOD_(NTSTATUS,QueryInterface) (THIS_ \
2798 REFIID InterfaceId, \
2801 STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
2802 STDMETHOD_(ULONG,Release)(THIS) PURE;
2806 #define INTERFACE IKsControl
2809 DEFINE_ABSTRACT_UNKNOWN()
2810 STDMETHOD_(NTSTATUS,KsProperty)(THIS_
2812 ULONG PropertyLength,
2815 ULONG *BytesReturned
2817 STDMETHOD_(NTSTATUS,KsMethod) (THIS_
2822 ULONG *BytesReturned
2824 STDMETHOD_(NTSTATUS,KsEvent) (THIS_
2829 ULONG *BytesReturned
2832 typedef struct IKsReferenceClock *PIKSREFERENCECLOCK;
2835 #define INTERFACE IKsReferenceClock
2836 DECLARE_INTERFACE_(IKsReferenceClock,IUnknown)
2838 DEFINE_ABSTRACT_UNKNOWN()
2839 STDMETHOD_(LONGLONG,GetTime) (THIS) PURE;
2840 STDMETHOD_(LONGLONG,GetPhysicalTime) (THIS) PURE;
2841 STDMETHOD_(LONGLONG,GetCorrelatedTime)(THIS_
2842 PLONGLONG SystemTime
2844 STDMETHOD_(LONGLONG,GetCorrelatedPhysicalTime)(THIS_
2845 PLONGLONG SystemTime
2847 STDMETHOD_(NTSTATUS,GetResolution) (THIS_
2848 PKSRESOLUTION Resolution
2850 STDMETHOD_(NTSTATUS,GetState) (THIS_
2856 #define INTERFACE IKsDeviceFunctions
2857 DECLARE_INTERFACE_(IKsDeviceFunctions,IUnknown)
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
2870 #define STATIC_IID_IKsControl \
2871 0x28F54685L,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96
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
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
2881 0xe234f2e2,0xbd69,0x4f8c,0xb3,0xf2,0x7c,0xd7,0x9e,0xd4,0x66,0xbd);
2895 #define KSDDKAPI DECLSPEC_IMPORT
2898 #if defined(_NTDDK_)
2900 KSDDKAPI NTSTATUS NTAPI KsEnableEvent
2901 (PIRP Irp, ULONG EventSetsCount,
const KSEVENT_SET *EventSet,
2902 PLIST_ENTRY EventsList, KSEVENTS_LOCKTYPE EventsFlags,
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);
2910 KSDDKAPI NTSTATUS NTAPI KsDisableEvent
2911 (PIRP Irp, PLIST_ENTRY EventsList, KSEVENTS_LOCKTYPE EventsFlags,
2914 KSDDKAPI VOID NTAPI KsDiscardEvent (PKSEVENT_ENTRY EventEntry);
2916 KSDDKAPI VOID NTAPI KsFreeEventList
2917 (PFILE_OBJECT FileObject, PLIST_ENTRY EventsList,
2918 KSEVENTS_LOCKTYPE EventsFlags, PVOID EventsLock);
2920 KSDDKAPI NTSTATUS NTAPI KsGenerateEvent (PKSEVENT_ENTRY EventEntry);
2922 KSDDKAPI NTSTATUS NTAPI KsGenerateDataEvent
2923 (PKSEVENT_ENTRY EventEntry, ULONG DataSize, PVOID Data);
2925 KSDDKAPI VOID NTAPI KsGenerateEventList
2926 (GUID *Set, ULONG EventId, PLIST_ENTRY EventsList,
2927 KSEVENTS_LOCKTYPE EventsFlags, PVOID EventsLock);
2929 KSDDKAPI NTSTATUS NTAPI KsPropertyHandler
2930 (PIRP Irp, ULONG PropertySetsCount,
2931 const KSPROPERTY_SET *PropertySet);
2933 KSDDKAPI NTSTATUS NTAPI KsPropertyHandlerWithAllocator
2934 (PIRP Irp, ULONG PropertySetsCount,
2935 const KSPROPERTY_SET *PropertySet, PFNKSALLOCATOR Allocator,
2936 ULONG PropertyItemSize);
2938 KSDDKAPI BOOLEAN NTAPI KsFastPropertyHandler
2940 ULONG PropertyLength, PVOID Data, ULONG DataLength,
2941 PIO_STATUS_BLOCK IoStatus, ULONG PropertySetsCount,
2942 const KSPROPERTY_SET *PropertySet);
2944 KSDDKAPI NTSTATUS NTAPI KsMethodHandler
2945 (PIRP Irp, ULONG MethodSetsCount,
2946 const KSMETHOD_SET *MethodSet);
2948 KSDDKAPI NTSTATUS NTAPI KsMethodHandlerWithAllocator
2949 (PIRP Irp, ULONG MethodSetsCount,
2950 const KSMETHOD_SET *MethodSet, PFNKSALLOCATOR Allocator,
2951 ULONG MethodItemSize);
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);
2958 KSDDKAPI NTSTATUS NTAPI KsCreateDefaultAllocator (PIRP Irp);
2960 KSDDKAPI NTSTATUS NTAPI KsCreateDefaultAllocatorEx
2961 (PIRP Irp, PVOID InitializeContext,
2962 PFNKSDEFAULTALLOCATE DefaultAllocate,
2963 PFNKSDEFAULTFREE DefaultFree,
2964 PFNKSINITIALIZEALLOCATOR InitializeAllocator,
2965 PFNKSDELETEALLOCATOR DeleteAllocator);
2968 (
HANDLE ConnectionHandle, PKSALLOCATOR_FRAMING AllocatorFraming,
2969 PHANDLE AllocatorHandle);
2971 KSDDKAPI NTSTATUS NTAPI KsValidateAllocatorCreateRequest
2972 (PIRP Irp, PKSALLOCATOR_FRAMING *AllocatorFraming);
2974 KSDDKAPI NTSTATUS NTAPI KsValidateAllocatorFramingEx
2975 (PKSALLOCATOR_FRAMING_EX Framing, ULONG BufferSize,
2978 KSDDKAPI NTSTATUS NTAPI KsAllocateDefaultClock (PKSDEFAULTCLOCK *DefaultClock);
2980 KSDDKAPI NTSTATUS NTAPI KsAllocateDefaultClockEx
2981 (PKSDEFAULTCLOCK *DefaultClock, PVOID Context,
2982 PFNKSSETTIMER SetTimer, PFNKSCANCELTIMER CancelTimer,
2983 PFNKSCORRELATEDTIME CorrelatedTime,
2986 KSDDKAPI VOID NTAPI KsFreeDefaultClock (PKSDEFAULTCLOCK DefaultClock);
2987 KSDDKAPI NTSTATUS NTAPI KsCreateDefaultClock (PIRP Irp, PKSDEFAULTCLOCK DefaultClock);
2990 (
HANDLE ConnectionHandle, PKSCLOCK_CREATE ClockCreate,
2991 PHANDLE ClockHandle);
2993 KSDDKAPI NTSTATUS NTAPI KsValidateClockCreateRequest
2994 (PIRP Irp, PKSCLOCK_CREATE *ClockCreate);
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);
3002 (
HANDLE FilterHandle, PKSPIN_CONNECT Connect,
3003 ACCESS_MASK DesiredAccess, PHANDLE ConnectionHandle);
3005 KSDDKAPI NTSTATUS NTAPI KsValidateConnectRequest
3006 (PIRP Irp, ULONG DescriptorsCount,
3007 const KSPIN_DESCRIPTOR *Descriptor, PKSPIN_CONNECT *Connect);
3009 KSDDKAPI NTSTATUS NTAPI KsPinPropertyHandler
3011 ULONG DescriptorsCount,
const KSPIN_DESCRIPTOR *Descriptor);
3013 KSDDKAPI NTSTATUS NTAPI KsPinDataIntersection
3014 (PIRP Irp, PKSP_PIN Pin, PVOID Data, ULONG DescriptorsCount,
3015 const KSPIN_DESCRIPTOR *Descriptor,
3016 PFNKSINTERSECTHANDLER IntersectHandler);
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);
3023 KSDDKAPI NTSTATUS NTAPI KsHandleSizedListQuery
3024 (PIRP Irp, ULONG DataItemsCount, ULONG DataItemSize,
3025 const VOID *DataItems);
3027 #ifndef MAKEINTRESOURCE
3028 #define MAKEINTRESOURCE(r) ((ULONG_PTR) (USHORT) r)
3031 #define RT_STRING MAKEINTRESOURCE(6)
3032 #define RT_RCDATA MAKEINTRESOURCE(10)
3035 KSDDKAPI NTSTATUS NTAPI KsLoadResource
3036 (PVOID ImageBase, POOL_TYPE PoolType, ULONG_PTR ResourceName,
3037 ULONG ResourceType, PVOID *Resource, PULONG ResourceSize);
3039 KSDDKAPI NTSTATUS NTAPI KsGetImageNameAndResourceId
3040 (
HANDLE RegKey, PUNICODE_STRING ImageName, PULONG_PTR ResourceId,
3043 KSDDKAPI NTSTATUS NTAPI KsMapModuleName
3044 (PDEVICE_OBJECT PhysicalDeviceObject, PUNICODE_STRING ModuleName,
3045 PUNICODE_STRING ImageName, PULONG_PTR ResourceId,
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);
3056 (PFILE_OBJECT FileObject, PKEVENT Event, PVOID PortContext,
3057 PIO_STATUS_BLOCK IoStatusBlock, PVOID Buffer, ULONG Length,
3058 ULONG Key, KPROCESSOR_MODE RequestorMode);
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);
3065 KSDDKAPI NTSTATUS NTAPI KsQueryInformationFile
3066 (PFILE_OBJECT FileObject, PVOID FileInformation, ULONG Length,
3067 FILE_INFORMATION_CLASS FileInformationClass);
3069 KSDDKAPI NTSTATUS NTAPI KsSetInformationFile
3070 (PFILE_OBJECT FileObject, PVOID FileInformation, ULONG Length,
3071 FILE_INFORMATION_CLASS FileInformationClass);
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);
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);
3084 KSDDKAPI NTSTATUS NTAPI KsSetMajorFunctionHandler
3085 (PDRIVER_OBJECT DriverObject, ULONG MajorFunction);
3087 KSDDKAPI NTSTATUS NTAPI KsDispatchInvalidDeviceRequest
3088 (PDEVICE_OBJECT DeviceObject, PIRP Irp);
3090 KSDDKAPI NTSTATUS NTAPI KsDefaultDeviceIoCompletion
3091 (PDEVICE_OBJECT DeviceObject, PIRP Irp);
3093 KSDDKAPI NTSTATUS NTAPI KsDispatchIrp(PDEVICE_OBJECT DeviceObject, PIRP Irp);
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);
3101 KSDDKAPI BOOLEAN NTAPI KsDispatchFastReadFailure
3103 ULONG Length, BOOLEAN Wait, ULONG LockKey, PVOID Buffer,
3104 PIO_STATUS_BLOCK IoStatus, PDEVICE_OBJECT DeviceObject);
3106 #define KsDispatchFastWriteFailure KsDispatchFastReadFailure
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);
3112 KSDDKAPI PIRP NTAPI KsRemoveIrpFromCancelableQueue
3113 (PLIST_ENTRY QueueHead, PKSPIN_LOCK SpinLock,
3114 KSLIST_ENTRY_LOCATION ListLocation,
3115 KSIRP_REMOVAL_OPERATION RemovalOperation);
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);
3123 KSDDKAPI VOID NTAPI KsRemoveSpecificIrpFromCancelableQueue (PIRP Irp);
3125 KSDDKAPI VOID NTAPI KsAddIrpToCancelableQueue
3126 (PLIST_ENTRY QueueHead, PKSPIN_LOCK SpinLock, PIRP Irp,
3127 KSLIST_ENTRY_LOCATION ListLocation, PDRIVER_CANCEL DriverCancel);
3129 KSDDKAPI NTSTATUS NTAPI KsAcquireResetValue(PIRP Irp,
KSRESET *ResetValue);
3131 KSDDKAPI NTSTATUS NTAPI KsTopologyPropertyHandler
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);
3141 KSDDKAPI VOID NTAPI KsSetDevicePnpAndBaseObject
3142 (KSDEVICE_HEADER Header, PDEVICE_OBJECT PnpDeviceObject,
3143 PDEVICE_OBJECT BaseObject);
3145 KSDDKAPI PDEVICE_OBJECT NTAPI KsQueryDevicePnpObject (KSDEVICE_HEADER Header);
3146 KSDDKAPI ACCESS_MASK NTAPI KsQueryObjectAccessMask (KSOBJECT_HEADER Header);
3148 KSDDKAPI VOID NTAPI KsRecalculateStackDepth
3149 (KSDEVICE_HEADER Header, BOOLEAN ReuseStackLocation);
3151 KSDDKAPI VOID NTAPI KsSetTargetState
3152 (KSOBJECT_HEADER Header, KSTARGET_STATE TargetState);
3154 KSDDKAPI VOID NTAPI KsSetTargetDeviceObject
3155 (KSOBJECT_HEADER Header, PDEVICE_OBJECT TargetDevice);
3157 KSDDKAPI VOID NTAPI KsSetPowerDispatch
3158 (KSOBJECT_HEADER Header, PFNKSCONTEXT_DISPATCH PowerDispatch,
3159 PVOID PowerContext);
3161 KSDDKAPI PKSOBJECT_CREATE_ITEM NTAPI KsQueryObjectCreateItem (KSOBJECT_HEADER Header);
3163 KSDDKAPI NTSTATUS NTAPI KsAllocateDeviceHeader
3164 (KSDEVICE_HEADER *Header, ULONG ItemsCount,
3165 PKSOBJECT_CREATE_ITEM ItemsList);
3167 KSDDKAPI VOID NTAPI KsFreeDeviceHeader (KSDEVICE_HEADER Header);
3169 KSDDKAPI NTSTATUS NTAPI KsAllocateObjectHeader
3170 (KSOBJECT_HEADER *Header, ULONG ItemsCount,
3171 PKSOBJECT_CREATE_ITEM ItemsList, PIRP Irp,
3172 const KSDISPATCH_TABLE *Table);
3174 KSDDKAPI VOID NTAPI KsFreeObjectHeader (KSOBJECT_HEADER Header);
3176 KSDDKAPI NTSTATUS NTAPI KsAddObjectCreateItemToDeviceHeader
3177 (KSDEVICE_HEADER Header, PDRIVER_DISPATCH Create, PVOID Context,
3178 PWSTR ObjectClass, PSECURITY_DESCRIPTOR SecurityDescriptor);
3180 KSDDKAPI NTSTATUS NTAPI KsAddObjectCreateItemToObjectHeader
3181 (KSOBJECT_HEADER Header, PDRIVER_DISPATCH Create, PVOID Context,
3182 PWSTR ObjectClass, PSECURITY_DESCRIPTOR SecurityDescriptor);
3184 KSDDKAPI NTSTATUS NTAPI KsAllocateObjectCreateItem
3185 (KSDEVICE_HEADER Header, PKSOBJECT_CREATE_ITEM CreateItem,
3186 BOOLEAN AllocateEntry, PFNKSITEMFREECALLBACK ItemFreeCallback);
3188 KSDDKAPI NTSTATUS NTAPI KsFreeObjectCreateItem
3189 (KSDEVICE_HEADER Header, PUNICODE_STRING CreateItem);
3191 KSDDKAPI NTSTATUS NTAPI KsFreeObjectCreateItemsByContext
3192 (KSDEVICE_HEADER Header, PVOID Context);
3194 KSDDKAPI NTSTATUS NTAPI KsCreateDefaultSecurity
3195 (PSECURITY_DESCRIPTOR ParentSecurity,
3196 PSECURITY_DESCRIPTOR *DefaultSecurity);
3198 KSDDKAPI NTSTATUS NTAPI KsForwardIrp
3199 (PIRP Irp, PFILE_OBJECT FileObject, BOOLEAN ReuseStackLocation);
3201 KSDDKAPI NTSTATUS NTAPI KsForwardAndCatchIrp
3202 (PDEVICE_OBJECT DeviceObject, PIRP Irp, PFILE_OBJECT FileObject,
3203 KSSTACK_USE StackUse);
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);
3210 KSDDKAPI NTSTATUS NTAPI KsUnserializeObjectPropertiesFromRegistry
3211 (PFILE_OBJECT FileObject,
HANDLE ParentKey,
3212 PUNICODE_STRING RegistryPath);
3214 KSDDKAPI NTSTATUS NTAPI KsCacheMedium
3216 ULONG PinDirection);
3218 KSDDKAPI NTSTATUS NTAPI KsRegisterWorker
3219 (WORK_QUEUE_TYPE WorkQueueType,
PKSWORKER *Worker);
3221 KSDDKAPI NTSTATUS NTAPI KsRegisterCountedWorker
3222 (WORK_QUEUE_TYPE WorkQueueType, PWORK_QUEUE_ITEM CountedWorkItem,
3226 KSDDKAPI NTSTATUS NTAPI KsQueueWorkItem(
PKSWORKER Worker, PWORK_QUEUE_ITEM WorkItem);
3231 (
HANDLE ParentHandle, PKSNODE_CREATE NodeCreate,
3232 ACCESS_MASK DesiredAccess, PHANDLE NodeHandle);
3234 KSDDKAPI NTSTATUS NTAPI KsValidateTopologyNodeCreateRequest
3235 (PIRP Irp, PKSTOPOLOGY Topology, PKSNODE_CREATE *NodeCreate);
3237 KSDDKAPI NTSTATUS NTAPI KsMergeAutomationTables
3238 (PKSAUTOMATION_TABLE *AutomationTableAB,
3239 PKSAUTOMATION_TABLE AutomationTableA,
3240 PKSAUTOMATION_TABLE AutomationTableB,
3243 KSDDKAPI NTSTATUS NTAPI KsInitializeDriver
3244 (PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPathName,
3245 const KSDEVICE_DESCRIPTOR *Descriptor);
3247 KSDDKAPI NTSTATUS NTAPI KsAddDevice
3248 (PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT PhysicalDeviceObject);
3250 KSDDKAPI NTSTATUS NTAPI KsCreateDevice
3251 (PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT PhysicalDeviceObject,
3252 const KSDEVICE_DESCRIPTOR *Descriptor, ULONG ExtensionSize,
3255 KSDDKAPI NTSTATUS NTAPI KsInitializeDevice
3256 (PDEVICE_OBJECT FunctionalDeviceObject,
3257 PDEVICE_OBJECT PhysicalDeviceObject,
3258 PDEVICE_OBJECT NextDeviceObject,
3259 const KSDEVICE_DESCRIPTOR *Descriptor);
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);
3266 KSDDKAPI void NTAPI KsDeviceRegisterAdapterObject
3267 (PKSDEVICE Device, PADAPTER_OBJECT AdapterObject,
3268 ULONG MaxMappingsByteCount, ULONG MappingTableStride);
3270 KSDDKAPI ULONG NTAPI KsDeviceGetBusData
3271 (PKSDEVICE Device, ULONG DataType, PVOID Buffer, ULONG Offset,
3274 KSDDKAPI ULONG NTAPI KsDeviceSetBusData
3275 (PKSDEVICE Device, ULONG DataType, PVOID Buffer, ULONG Offset,
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);
3285 #define KsDeleteFilterFactory(FilterFactory) \
3286 KsFreeObjectCreateItemsByContext( *(KSDEVICE_HEADER *)( \
3287 KsFilterFactoryGetParentDevice(FilterFactory)->FunctionalDeviceObject->DeviceExtension),\
3290 KSDDKAPI NTSTATUS NTAPI KsFilterFactoryUpdateCacheData
3291 (PKSFILTERFACTORY FilterFactory,
3292 const KSFILTER_DESCRIPTOR *FilterDescriptor);
3294 KSDDKAPI NTSTATUS NTAPI KsFilterFactoryAddCreateItem
3295 (PKSFILTERFACTORY FilterFactory, PWSTR RefString,
3296 PSECURITY_DESCRIPTOR SecurityDescriptor, ULONG CreateItemFlags);
3298 KSDDKAPI NTSTATUS NTAPI KsFilterFactorySetDeviceClassesState
3299 (PKSFILTERFACTORY FilterFactory, BOOLEAN NewState);
3301 KSDDKAPI PUNICODE_STRING NTAPI KsFilterFactoryGetSymbolicLink
3302 (PKSFILTERFACTORY FilterFactory);
3304 KSDDKAPI void NTAPI KsAddEvent(PVOID Object, PKSEVENT_ENTRY EventEntry);
3306 void __forceinline KsFilterAddEvent (PKSFILTER Filter, PKSEVENT_ENTRY EventEntry)
3308 KsAddEvent(Filter, EventEntry);
3311 void __forceinline KsPinAddEvent (PKSPIN Pin, PKSEVENT_ENTRY EventEntry)
3313 KsAddEvent(Pin, EventEntry);
3316 KSDDKAPI NTSTATUS NTAPI KsDefaultAddEventHandler
3317 (PIRP Irp, PKSEVENTDATA EventData, PKSEVENT_ENTRY EventEntry);
3319 KSDDKAPI void NTAPI KsGenerateEvents
3320 (PVOID Object,
const GUID *EventSet, ULONG EventId,
3321 ULONG DataSize, PVOID Data, PFNKSGENERATEEVENTCALLBACK CallBack,
3322 PVOID CallBackContext);
3324 void __forceinline KsFilterGenerateEvents
3325 (PKSFILTER Filter,
const GUID *EventSet, ULONG EventId,
3326 ULONG DataSize, PVOID Data, PFNKSGENERATEEVENTCALLBACK CallBack,
3327 PVOID CallBackContext)
3329 KsGenerateEvents(Filter, EventSet, EventId, DataSize, Data, CallBack,
3333 void __forceinline KsPinGenerateEvents
3334 (PKSPIN Pin,
const GUID *EventSet, ULONG EventId,
3335 ULONG DataSize, PVOID Data, PFNKSGENERATEEVENTCALLBACK CallBack,
3336 PVOID CallBackContext)
3338 KsGenerateEvents(Pin, EventSet, EventId, DataSize, Data, CallBack,
3343 KSSTREAM_POINTER_STATE_UNLOCKED = 0,
3344 KSSTREAM_POINTER_STATE_LOCKED
3345 } KSSTREAM_POINTER_STATE;
3347 KSDDKAPI NTSTATUS NTAPI KsPinGetAvailableByteCount
3348 (PKSPIN Pin, PLONG InputDataBytes, PLONG OutputBufferBytes);
3350 KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetLeadingEdgeStreamPointer
3351 (PKSPIN Pin, KSSTREAM_POINTER_STATE State);
3353 KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetTrailingEdgeStreamPointer
3354 (PKSPIN Pin, KSSTREAM_POINTER_STATE State);
3356 KSDDKAPI NTSTATUS NTAPI KsStreamPointerSetStatusCode
3357 (PKSSTREAM_POINTER StreamPointer, NTSTATUS Status);
3359 KSDDKAPI NTSTATUS NTAPI KsStreamPointerLock (PKSSTREAM_POINTER StreamPointer);
3360 KSDDKAPI void NTAPI KsStreamPointerUnlock(PKSSTREAM_POINTER StreamPointer, BOOLEAN Eject);
3362 KSDDKAPI void NTAPI KsStreamPointerAdvanceOffsetsAndUnlock
3363 (PKSSTREAM_POINTER StreamPointer, ULONG InUsed, ULONG OutUsed,
3366 KSDDKAPI void NTAPI KsStreamPointerDelete (PKSSTREAM_POINTER StreamPointer);
3368 KSDDKAPI NTSTATUS NTAPI KsStreamPointerClone
3369 (PKSSTREAM_POINTER StreamPointer, PFNKSSTREAMPOINTER CancelCallback,
3370 ULONG ContextSize, PKSSTREAM_POINTER *CloneStreamPointer);
3372 KSDDKAPI NTSTATUS NTAPI KsStreamPointerAdvanceOffsets
3373 (PKSSTREAM_POINTER StreamPointer, ULONG InUsed, ULONG OutUsed,
3376 KSDDKAPI NTSTATUS NTAPI KsStreamPointerAdvance (PKSSTREAM_POINTER StreamPointer);
3377 KSDDKAPI PMDL NTAPI KsStreamPointerGetMdl (PKSSTREAM_POINTER StreamPointer);
3379 KSDDKAPI PIRP NTAPI KsStreamPointerGetIrp
3380 (PKSSTREAM_POINTER StreamPointer, PBOOLEAN FirstFrameInIrp,
3381 PBOOLEAN LastFrameInIrp);
3383 KSDDKAPI void NTAPI KsStreamPointerScheduleTimeout
3384 (PKSSTREAM_POINTER StreamPointer, PFNKSSTREAMPOINTER Callback,
3387 KSDDKAPI void NTAPI KsStreamPointerCancelTimeout (PKSSTREAM_POINTER StreamPointer);
3388 KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetFirstCloneStreamPointer (PKSPIN Pin);
3390 KSDDKAPI PKSSTREAM_POINTER NTAPI KsStreamPointerGetNextClone
3391 (PKSSTREAM_POINTER StreamPointer);
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);
3399 PKSFILTER __forceinline KsGetFilterFromFileObject (PFILE_OBJECT FileObject)
3401 return (PKSFILTER) KsGetObjectFromFileObject(FileObject);
3404 PKSPIN __forceinline KsGetPinFromFileObject (PFILE_OBJECT FileObject)
3406 return (PKSPIN) KsGetObjectFromFileObject(FileObject);
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);
3420 KSDDKAPI void NTAPI KsPinGetCopyRelationships
3421 (PKSPIN Pin, PKSPIN *CopySource, PKSPIN *DelegateBranch);
3423 KSDDKAPI void NTAPI KsPinAttemptProcessing(PKSPIN Pin, BOOLEAN Asynchronous);
3424 KSDDKAPI PVOID NTAPI KsGetParent (PVOID Object);
3426 PKSDEVICE __forceinline KsFilterFactoryGetParentDevice (PKSFILTERFACTORY FilterFactory)
3428 return (PKSDEVICE) KsGetParent((PVOID) FilterFactory);
3431 PKSFILTERFACTORY __forceinline KsFilterGetParentFilterFactory (PKSFILTER Filter)
3433 return (PKSFILTERFACTORY) KsGetParent((PVOID) Filter);
3436 KSDDKAPI PKSFILTER NTAPI KsPinGetParentFilter (PKSPIN Pin);
3437 KSDDKAPI PVOID NTAPI KsGetFirstChild (PVOID Object);
3439 PKSFILTERFACTORY __forceinline KsDeviceGetFirstChildFilterFactory (PKSDEVICE Device)
3441 return (PKSFILTERFACTORY) KsGetFirstChild((PVOID) Device);
3444 PKSFILTER __forceinline KsFilterFactoryGetFirstChildFilter (PKSFILTERFACTORY FilterFactory)
3446 return (PKSFILTER) KsGetFirstChild((PVOID) FilterFactory);
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);
3454 PKSFILTERFACTORY __forceinline KsFilterFactoryGetNextSiblingFilterFactory
3455 (PKSFILTERFACTORY FilterFactory)
3457 return (PKSFILTERFACTORY) KsGetNextSibling((PVOID) FilterFactory);
3460 PKSFILTER __forceinline KsFilterGetNextSiblingFilter (PKSFILTER Filter)
3462 return (PKSFILTER) KsGetNextSibling((PVOID) Filter);
3465 KSDDKAPI PKSDEVICE NTAPI KsGetDevice (PVOID Object);
3467 PKSDEVICE __forceinline KsFilterFactoryGetDevice (PKSFILTERFACTORY FilterFactory)
3469 return KsGetDevice((PVOID) FilterFactory);
3472 PKSDEVICE __forceinline KsFilterGetDevice (PKSFILTER Filter)
3474 return KsGetDevice((PVOID) Filter);
3477 PKSDEVICE __forceinline KsPinGetDevice (PKSPIN Pin)
3479 return KsGetDevice((PVOID) Pin);
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);
3488 void __forceinline KsFilterAcquireControl (PKSFILTER Filter)
3490 KsAcquireControl((PVOID) Filter);
3493 void __forceinline KsFilterReleaseControl (PKSFILTER Filter)
3495 KsReleaseControl((PVOID) Filter);
3498 void __forceinline KsPinAcquireControl (PKSPIN Pin)
3500 KsAcquireControl((PVOID) Pin);
3503 void __forceinline KsPinReleaseControl (PKSPIN Pin)
3505 KsReleaseControl((PVOID) Pin);
3508 KSDDKAPI NTSTATUS NTAPI KsAddItemToObjectBag
3509 (KSOBJECT_BAG ObjectBag, PVOID Item, PFNKSFREE Free);
3511 KSDDKAPI ULONG NTAPI KsRemoveItemFromObjectBag
3512 (KSOBJECT_BAG ObjectBag, PVOID Item, BOOLEAN Free);
3514 #define KsDiscard(Object,Pointer) \
3515 KsRemoveItemFromObjectBag((Object)->Bag, (PVOID)(Pointer), TRUE)
3517 KSDDKAPI NTSTATUS NTAPI KsAllocateObjectBag(PKSDEVICE Device, KSOBJECT_BAG *ObjectBag);
3518 KSDDKAPI void NTAPI KsFreeObjectBag (KSOBJECT_BAG ObjectBag);
3520 KSDDKAPI NTSTATUS NTAPI KsCopyObjectBagItems
3521 (KSOBJECT_BAG ObjectBagDestination, KSOBJECT_BAG ObjectBagSource);
3524 (KSOBJECT_BAG ObjectBag, PVOID *PointerToPointerToItem,
3525 ULONG NewSize, ULONG OldSize, ULONG Tag);
3527 #define KsEdit(Object, PointerToPointer, Tag) \
3528 _KsEdit((Object)->Bag, (PVOID*)(PointerToPointer), \
3529 sizeof(**(PointerToPointer)), sizeof(**(PointerToPointer)), (Tag))
3531 #define KsEditSized(Object, PointerToPointer, NewSize, OldSize, Tag) \
3532 _KsEdit((Object)->Bag, (PVOID*)(PointerToPointer), (NewSize), (OldSize), (Tag))
3534 KSDDKAPI NTSTATUS NTAPI KsRegisterFilterWithNoKSPins
3535 (PDEVICE_OBJECT DeviceObject,
const GUID *InterfaceClassGUID,
3536 ULONG PinCount, WINBOOL *PinDirection,
KSPIN_MEDIUM *MediumList,
3537 GUID *CategoryList);
3539 KSDDKAPI NTSTATUS NTAPI KsFilterCreatePinFactory
3540 (PKSFILTER Filter,
const KSPIN_DESCRIPTOR_EX *
const PinDescriptor,
3543 KSDDKAPI NTSTATUS NTAPI KsFilterCreateNode
3544 (PKSFILTER Filter,
const KSNODE_DESCRIPTOR *
const NodeDescriptor,
3547 KSDDKAPI NTSTATUS NTAPI KsFilterAddTopologyConnections
3548 (PKSFILTER Filter, ULONG NewConnectionsCount,
3551 KSDDKAPI NTSTATUS NTAPI KsPinGetConnectedPinInterface
3552 (PKSPIN Pin,
const GUID *InterfaceId, PVOID *Interface);
3554 KSDDKAPI PFILE_OBJECT NTAPI KsPinGetConnectedPinFileObject (PKSPIN Pin);
3555 KSDDKAPI PDEVICE_OBJECT NTAPI KsPinGetConnectedPinDeviceObject (PKSPIN Pin);
3557 KSDDKAPI NTSTATUS NTAPI KsPinGetConnectedFilterInterface
3558 (PKSPIN Pin,
const GUID *InterfaceId, PVOID *Interface);
3560 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
3561 KSDDKAPI NTSTATUS NTAPI KsPinGetReferenceClockInterface
3562 (PKSPIN Pin, PIKSREFERENCECLOCK *Interface);
3565 KSDDKAPI VOID NTAPI KsPinSetPinClockTime(PKSPIN Pin, LONGLONG Time);
3567 KSDDKAPI NTSTATUS NTAPI KsPinSubmitFrame
3568 (PKSPIN Pin, PVOID Data, ULONG Size,
3569 PKSSTREAM_HEADER StreamHeader, PVOID Context);
3571 KSDDKAPI NTSTATUS NTAPI KsPinSubmitFrameMdl
3572 (PKSPIN Pin, PMDL Mdl, PKSSTREAM_HEADER StreamHeader,
3575 KSDDKAPI void NTAPI KsPinRegisterFrameReturnCallback
3576 (PKSPIN Pin, PFNKSPINFRAMERETURN FrameReturn);
3578 KSDDKAPI void NTAPI KsPinRegisterIrpCompletionCallback
3579 (PKSPIN Pin, PFNKSPINIRPCOMPLETION IrpCompletion);
3581 KSDDKAPI void NTAPI KsPinRegisterHandshakeCallback
3582 (PKSPIN Pin, PFNKSPINHANDSHAKE Handshake);
3584 KSDDKAPI void NTAPI KsFilterRegisterPowerCallbacks
3585 (PKSFILTER Filter, PFNKSFILTERPOWER Sleep, PFNKSFILTERPOWER Wake);
3587 KSDDKAPI void NTAPI KsPinRegisterPowerCallbacks
3588 (PKSPIN Pin, PFNKSPINPOWER Sleep, PFNKSPINPOWER Wake);
3590 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
3591 KSDDKAPI PUNKNOWN NTAPI KsRegisterAggregatedClientUnknown
3592 (PVOID Object, PUNKNOWN ClientUnknown);
3594 KSDDKAPI PUNKNOWN NTAPI KsGetOuterUnknown (PVOID Object);
3596 PUNKNOWN __forceinline KsDeviceRegisterAggregatedClientUnknown
3597 (PKSDEVICE Device, PUNKNOWN ClientUnknown)
3599 return KsRegisterAggregatedClientUnknown((PVOID)Device, ClientUnknown);
3602 PUNKNOWN __forceinline KsDeviceGetOuterUnknown (PKSDEVICE Device)
3604 return KsGetOuterUnknown((PVOID) Device);
3607 PUNKNOWN __forceinline KsFilterFactoryRegisterAggregatedClientUnknown
3608 (PKSFILTERFACTORY FilterFactory, PUNKNOWN ClientUnknown)
3610 return KsRegisterAggregatedClientUnknown((PVOID)FilterFactory, ClientUnknown);
3613 PUNKNOWN __forceinline KsFilterFactoryGetOuterUnknown (PKSFILTERFACTORY FilterFactory)
3615 return KsGetOuterUnknown((PVOID)FilterFactory);
3618 PUNKNOWN __forceinline KsFilterRegisterAggregatedClientUnknown
3619 (PKSFILTER Filter, PUNKNOWN ClientUnknown)
3621 return KsRegisterAggregatedClientUnknown((PVOID)Filter, ClientUnknown);
3624 PUNKNOWN __forceinline KsFilterGetOuterUnknown (PKSFILTER Filter)
3626 return KsGetOuterUnknown((PVOID)Filter);
3629 PUNKNOWN __forceinline KsPinRegisterAggregatedClientUnknown
3630 (PKSPIN Pin, PUNKNOWN ClientUnknown)
3632 return KsRegisterAggregatedClientUnknown((PVOID)Pin, ClientUnknown);
3635 PUNKNOWN __forceinline KsPinGetOuterUnknown (PKSPIN Pin)
3637 return KsGetOuterUnknown((PVOID)Pin);
3643 #ifndef KS_NO_CREATE_FUNCTIONS
3646 KSDDKAPI DWORD WINAPI
KsCreatePin(
HANDLE FilterHandle,PKSPIN_CONNECT Connect,ACCESS_MASK DesiredAccess,PHANDLE ConnectionHandle);
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; \