8 This is a basic stubbing of the Kernel Streaming API header. It is
9 very incomplete - a lot of the #defines are not set to any value at all.
11 Some of the structs/funcs may be incorrectly grouped.
13 GUIDs need to be defined properly.
15 AVStream functionality (XP and above, DirectX 8.0 and above) will NOT
16 implemented for a while.
18 Some example code for interaction from usermode:
25 sizeof(KS_SEEKING_CAPABILITIES),
40 #define KSDDKAPI //DECLSPEC_IMPORT /* TODO */
44 #define KSFILTER_NODE ((ULONG)-1)
45 #define KSALL_NODES ((ULONG)-1)
47 #define KSSTRING_Filter L"{9B365890-165F-11D0-A195-0020AFD156E4}"
48 #define KSSTRING_Pin L"{146F1A80-4791-11D0-A5D6-28DB04C10000}"
49 #define KSSTRING_Clock L"{53172480-4791-11D0-A5D6-28DB04C10000}"
50 #define KSSTRING_Allocator L"{642F5D00-4791-11D0-A5D6-28DB04C10000}"
51 #define KSSTRING_AllocatorEx L"{091BB63B-603F-11D1-B067-00A0C9062802}"
52 #define KSSTRING_TopologyNode L"{0621061A-EE75-11D0-B915-00A0C9223196}"
54 #define KSDATAFORMAT_BIT_ATTRIBUTES 1
55 #define KSDATAFORMAT_ATTRIBUTES (1 << KSDATAFORMAT_BIT_ATTRIBUTES)
58 typedef PVOID PKSWORKER
;
62 #define SIZEOF_ARRAY(a) (sizeof(a)/sizeof((a)[0]))
65 /* ===============================================================
66 GUID definition helpers
72 #define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name
74 #define DEFINE_GUIDEX(name) EXTERN_C const GUID name
79 #define STATICGUIDOF(guid) STATIC_##guid
83 #if defined(__cplusplus) && _MSC_VER >= 1100
84 #define DEFINE_GUIDSTRUCT(guid, name) struct __declspec(uuid(guid)) name
85 #define DEFINE_GUIDNAMED(name) __uuidof(struct name)
87 #define DEFINE_GUIDSTRUCT(guid, name) DEFINE_GUIDEX(name)
88 #define DEFINE_GUIDNAMED(name) name
92 #define STATIC_GUID_NULL \
93 0x00000000L, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
94 DEFINE_GUIDSTRUCT("00000000-0000-0000-0000-000000000000", GUID_NULL
);
95 #define GUID_NULL DEFINE_GUIDNAMED(GUID_NULL)
98 #define STATIC_KSNAME_Filter\
99 0x9b365890L, 0x165f, 0x11d0, {0xa1, 0x95, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4}
100 DEFINE_GUIDSTRUCT("9b365890-165f-11d0-a195-0020afd156e4", KSNAME_Filter
);
101 #define KSNAME_Filter DEFINE_GUIDNAMED(KSNAME_Filter)
103 #define STATIC_KSMEMORY_TYPE_KERNEL_PAGED \
104 0xd833f8f8L, 0x7894, 0x11d1, {0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02}
105 DEFINE_GUIDSTRUCT("d833f8f8-7894-11d1-b069-00a0c9062802", KSMEMORY_TYPE_KERNEL_PAGED
);
106 #define KSMEMORY_TYPE_KERNEL_PAGED DEFINE_GUIDNAMED(KSMEMORY_TYPE_KERNEL_PAGED)
108 /* ===============================================================
112 #define IOCTL_KS_DISABLE_EVENT \
119 #define IOCTL_KS_ENABLE_EVENT \
127 #define IOCTL_KS_METHOD \
135 #define IOCTL_KS_PROPERTY \
142 #define IOCTL_KS_WRITE_STREAM \
149 #define IOCTL_KS_READ_STREAM \
156 #define IOCTL_KS_RESET_STATE \
164 /* ===============================================================
168 #define STATIC_KSCATEGORY_BRIDGE \
169 0x085AFF00L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
170 DEFINE_GUIDSTRUCT("085AFF00-62CE-11CF-A5D6-28DB04C10000", KSCATEGORY_BRIDGE
);
171 #define KSCATEGORY_BRIDGE DEFINE_GUIDNAMED(KSCATEGORY_BRIDGE)
173 #define STATIC_KSCATEGORY_CAPTURE \
174 0x65E8773DL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
175 DEFINE_GUIDSTRUCT("65E8773D-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_CAPTURE
);
176 #define KSCATEGORY_CAPTURE DEFINE_GUIDNAMED(KSCATEGORY_CAPTURE)
178 #define STATIC_KSCATEGORY_RENDER \
179 0x65E8773EL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
180 DEFINE_GUIDSTRUCT("65E8773E-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_RENDER
);
181 #define KSCATEGORY_RENDER DEFINE_GUIDNAMED(KSCATEGORY_RENDER)
183 #define STATIC_KSCATEGORY_MIXER \
184 0xAD809C00L, 0x7B88, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
185 DEFINE_GUIDSTRUCT("AD809C00-7B88-11D0-A5D6-28DB04C10000", KSCATEGORY_MIXER
);
186 #define KSCATEGORY_MIXER DEFINE_GUIDNAMED(KSCATEGORY_MIXER)
188 #define STATIC_KSCATEGORY_SPLITTER \
189 0x0A4252A0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
190 DEFINE_GUIDSTRUCT("0A4252A0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_SPLITTER
);
191 #define KSCATEGORY_SPLITTER DEFINE_GUIDNAMED(KSCATEGORY_SPLITTER)
193 #define STATIC_KSCATEGORY_DATACOMPRESSOR \
194 0x1E84C900L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
195 DEFINE_GUIDSTRUCT("1E84C900-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATACOMPRESSOR
);
196 #define KSCATEGORY_DATACOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATACOMPRESSOR)
198 #define STATIC_KSCATEGORY_DATADECOMPRESSOR \
199 0x2721AE20L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
200 DEFINE_GUIDSTRUCT("2721AE20-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATADECOMPRESSOR
);
201 #define KSCATEGORY_DATADECOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATADECOMPRESSOR)
203 #define STATIC_KSCATEGORY_DATATRANSFORM \
204 0x2EB07EA0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
205 DEFINE_GUIDSTRUCT("2EB07EA0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATATRANSFORM
);
206 #define KSCATEGORY_DATATRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_DATATRANSFORM)
208 #define STATIC_KSCATEGORY_COMMUNICATIONSTRANSFORM \
209 0xCF1DDA2CL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
210 DEFINE_GUIDSTRUCT("CF1DDA2C-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_COMMUNICATIONSTRANSFORM
);
211 #define KSCATEGORY_COMMUNICATIONSTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_COMMUNICATIONSTRANSFORM)
213 #define STATIC_KSCATEGORY_INTERFACETRANSFORM \
214 0xCF1DDA2DL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
215 DEFINE_GUIDSTRUCT("CF1DDA2D-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_INTERFACETRANSFORM
);
216 #define KSCATEGORY_INTERFACETRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_INTERFACETRANSFORM)
218 #define STATIC_KSCATEGORY_MEDIUMTRANSFORM \
219 0xCF1DDA2EL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
220 DEFINE_GUIDSTRUCT("CF1DDA2E-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_MEDIUMTRANSFORM
);
221 #define KSCATEGORY_MEDIUMTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_MEDIUMTRANSFORM)
223 #define STATIC_KSCATEGORY_FILESYSTEM \
224 0x760FED5EL, 0x9357, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
225 DEFINE_GUIDSTRUCT("760FED5E-9357-11D0-A3CC-00A0C9223196", KSCATEGORY_FILESYSTEM
);
226 #define KSCATEGORY_FILESYSTEM DEFINE_GUIDNAMED(KSCATEGORY_FILESYSTEM)
228 #define STATIC_KSCATEGORY_CLOCK \
229 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
230 DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000", KSCATEGORY_CLOCK
);
231 #define KSCATEGORY_CLOCK DEFINE_GUIDNAMED(KSCATEGORY_CLOCK)
233 #define STATIC_KSCATEGORY_PROXY \
234 0x97EBAACAL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
235 DEFINE_GUIDSTRUCT("97EBAACA-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_PROXY
);
236 #define KSCATEGORY_PROXY DEFINE_GUIDNAMED(KSCATEGORY_PROXY)
238 #define STATIC_KSCATEGORY_QUALITY \
239 0x97EBAACBL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
240 DEFINE_GUIDSTRUCT("97EBAACB-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_QUALITY
);
241 #define KSCATEGORY_QUALITY DEFINE_GUIDNAMED(KSCATEGORY_QUALITY)
243 /* ===============================================================
252 } KSIDENTIFIER
, *PKSIDENTIFIER
;
254 typedef KSIDENTIFIER KSPROPERTY
, *PKSPROPERTY
;
255 typedef KSIDENTIFIER KSMETHOD
, *PKSMETHOD
;
256 typedef KSIDENTIFIER KSEVENT
, *PKSEVENT
;
258 typedef KSIDENTIFIER KSDEGRADE
, *PKSDEGRADE
;
260 typedef KSIDENTIFIER KSPIN_INTERFACE
, *PKSPIN_INTERFACE
;
261 typedef KSIDENTIFIER KSPIN_MEDIUM
, *PKSPIN_MEDIUM
;
274 } KSDATAFORMAT
, *PKSDATAFORMAT
, KSDATARANGE
, *PKSDATARANGE
;
282 } KSATTRIBUTE
, *PKSATTRIBUTE
;
286 /* ===============================================================
287 Interface Sets - TODO
291 #define KSINTERFACESETID_Media
293 #define KSINTERFACESETID_Standard
294 #define KSINTERFACE_STANDARD_STREAMING
295 #define KSINTERFACE_STANDARD_LOOPED_STREAMING
296 #define KSINTERFACE_STANDARD_CONTROL
299 #define STATIC_KSINTERFACESETID_Standard \
300 0x1A8766A0L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
301 DEFINE_GUIDSTRUCT("1A8766A0-62CE-11CF-A5D6-28DB04C10000", KSINTERFACESETID_Standard
);
302 #define KSINTERFACESETID_Standard DEFINE_GUIDNAMED(KSINTERFACESETID_Standard)
306 KSINTERFACE_STANDARD_STREAMING
,
307 KSINTERFACE_STANDARD_LOOPED_STREAMING
,
308 KSINTERFACE_STANDARD_CONTROL
309 } KSINTERFACE_STANDARD
;
311 #define STATIC_KSINTERFACESETID_FileIo \
312 0x8C6F932CL, 0xE771, 0x11D0, 0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
313 DEFINE_GUIDSTRUCT("8C6F932C-E771-11D0-B8FF-00A0C9223196", KSINTERFACESETID_FileIo
);
314 #define KSINTERFACESETID_FileIo DEFINE_GUIDNAMED(KSINTERFACESETID_FileIo)
319 /* ===============================================================
325 KSINTERFACE_FILEIO_STREAMING
326 } KSINTERFACE_FILEIO
;
328 #define KSMEDIUM_TYPE_ANYINSTANCE 0
330 #define STATIC_KSMEDIUMSETID_Standard \
331 0x4747B320L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
332 DEFINE_GUIDSTRUCT("4747B320-62CE-11CF-A5D6-28DB04C10000", KSMEDIUMSETID_Standard
);
333 #define KSMEDIUMSETID_Standard DEFINE_GUIDNAMED(KSMEDIUMSETID_Standard)
336 /* ===============================================================
337 Clock Properties/Methods/Events
340 #define KSPROPSETID_Clock \
341 0xDF12A4C0L, 0xAC17, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
345 KSPROPERTY_CLOCK_TIME
,
346 KSPROPERTY_CLOCK_PHYSICALTIME
,
347 KSPROPERTY_CORRELATEDTIME
,
348 KSPROPERTY_CORRELATEDPHYSICALTIME
,
349 KSPROPERTY_CLOCK_RESOLUTION
,
350 KSPROPERTY_CLOCK_STATE
,
351 KSPROPERTY_CLOCK_FUNCTIONTABLE
354 #define KSEVENTSETID_Clock \
355 0x364D8E20L, 0x62C7, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
359 KSEVENT_CLOCK_INTERVAL_MARK
,
360 KSEVENT_CLOCK_POSITION_MARK
361 } KSEVENT_CLOCK_POSITION
;
364 /* ===============================================================
365 Connection Properties/Methods/Events
368 #define STATIC_KSPROPSETID_Connection \
369 0x1D58C920L, 0xAC9B, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
370 DEFINE_GUIDSTRUCT("1D58C920-AC9B-11CF-A5D6-28DB04C10000", KSPROPSETID_Connection
);
371 #define KSPROPSETID_Connection DEFINE_GUIDNAMED(KSPROPSETID_Connection)
376 KSPROPERTY_CONNECTION_STATE
,
377 KSPROPERTY_CONNECTION_PRIORITY
,
378 KSPROPERTY_CONNECTION_DATAFORMAT
,
379 KSPROPERTY_CONNECTION_ALLOCATORFRAMING
,
380 KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT
,
381 KSPROPERTY_CONNECTION_ACQUIREORDERING
,
382 KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX
,
383 KSPROPERTY_CONNECTION_STARTAT
384 } KSPROPERTY_CONNECTION
;
386 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_STATE(GetHandler, SetHandler)\
387 DEFINE_KSPROPERTY_ITEM(\
388 KSPROPERTY_CONNECTION_STATE,\
393 NULL, 0, NULL, NULL, 0)
395 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_PRIORITY(GetHandler, SetHandler)\
396 DEFINE_KSPROPERTY_ITEM(\
397 KSPROPERTY_CONNECTION_PRIORITY,\
402 NULL, 0, NULL, NULL, 0)
404 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_DATAFORMAT(GetHandler, SetHandler)\
405 DEFINE_KSPROPERTY_ITEM(\
406 KSPROPERTY_CONNECTION_DATAFORMAT,\
411 NULL, 0, NULL, NULL, 0)
413 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING(Handler)\
414 DEFINE_KSPROPERTY_ITEM(\
415 KSPROPERTY_CONNECTION_ALLOCATORFRAMING,\
418 sizeof(KSALLOCATOR_FRAMING),\
419 NULL, NULL, 0, NULL, NULL, 0)
421 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING_EX(Handler)\
422 DEFINE_KSPROPERTY_ITEM(\
423 KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,\
427 NULL, NULL, 0, NULL, NULL, 0)
429 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_PROPOSEDATAFORMAT(Handler)\
430 DEFINE_KSPROPERTY_ITEM(\
431 KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT,\
434 sizeof(KSDATAFORMAT),\
436 NULL, 0, NULL, NULL, 0)
438 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ACQUIREORDERING(Handler)\
439 DEFINE_KSPROPERTY_ITEM(\
440 KSPROPERTY_CONNECTION_ACQUIREORDERING,\
444 NULL, NULL, 0, NULL, NULL, 0)
446 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_STARTAT(Handler)\
447 DEFINE_KSPROPERTY_ITEM(\
448 KSPROPERTY_CONNECTION_STARTAT,\
451 sizeof(KSRELATIVEEVENT),\
453 NULL, 0, NULL, NULL, 0)
456 #define KSEVENTSETID_Connection \
457 0x7f4bcbe0L, 0x9ea5, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00
461 KSEVENT_CONNECTION_POSITIONUPDATE
,
462 KSEVENT_CONNECTION_DATADISCONTINUITY
,
463 KSEVENT_CONNECTION_TIMEDISCONTINUITY
,
464 KSEVENT_CONNECTION_PRIORITY
,
465 KSEVENT_CONNECTION_ENDOFSTREAM
466 } KSEVENT_CONNECTION
;
469 /* ===============================================================
471 Properties/Methods/Events
474 #define STATIC_KSPROPSETID_General\
475 0x1464EDA5L, 0x6A8F, 0x11D1, {0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
476 DEFINE_GUIDSTRUCT("1464EDA5-6A8F-11D1-9AA7-00A0C9223196", KSPROPSETID_General
);
477 #define KSPROPSETID_General DEFINE_GUIDNAMED(KSPROPSETID_General)
482 KSPROPERTY_GENERAL_COMPONENTID
483 } KSPROPERTY_GENERAL
;
486 /* ===============================================================
488 Properties/Methods/Events
491 #define KSPROPSETID_GM \
492 0xAF627536L, 0xE719, 0x11D2, 0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D
496 KSPROPERTY_GM_GRAPHMANAGER
,
497 KSPROPERTY_GM_TIMESTAMP_CLOCK
,
498 KSPROPERTY_GM_RATEMATCH
,
499 KSPROPERTY_GM_RENDERCLOCK
503 /* ===============================================================
505 Properties/Methods/Events
508 #define KSPROPSETID_MediaSeeking \
509 0xEE904F0CL, 0xD09B, 0x11D0, 0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
513 KSPROPERTY_MEDIASEEKING_CAPABILITIES
,
514 KSPROPERTY_MEDIASEEKING_FORMATS
,
515 KSPROPERTY_MEDIASEEKING_TIMEFORMAT
,
516 KSPROPERTY_MEDIASEEKING_POSITION
,
517 KSPROPERTY_MEDIASEEKING_STOPPOSITION
,
518 KSPROPERTY_MEDIASEEKING_POSITIONS
,
519 KSPROPERTY_MEDIASEEKING_DURATION
,
520 KSPROPERTY_MEDIASEEKING_AVAILABLE
,
521 KSPROPERTY_MEDIASEEKING_PREROLL
,
522 KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT
523 } KSPROPERTY_MEDIASEEKING
;
526 /* ===============================================================
528 Properties/Methods/Events
531 #define STATIC_KSPROPSETID_Pin\
532 0x8C134960L, 0x51AD, 0x11CF, 0x87, 0x8A, 0x94, 0xF8, 0x01, 0xC1, 0x00, 0x00
533 DEFINE_GUIDSTRUCT("8C134960-51AD-11CF-878A-94F801C10000", KSPROPSETID_Pin
);
534 #define KSPROPSETID_Pin DEFINE_GUIDNAMED(KSPROPSETID_Pin)
536 #define STATIC_KSNAME_Pin\
537 0x146F1A80L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
538 DEFINE_GUIDSTRUCT("146F1A80-4791-11D0-A5D6-28DB04C10000", KSNAME_Pin
);
539 #define KSNAME_Pin DEFINE_GUIDNAMED(KSNAME_Pin)
544 KSPROPERTY_PIN_CINSTANCES
,
545 KSPROPERTY_PIN_CTYPES
,
546 KSPROPERTY_PIN_DATAFLOW
,
547 KSPROPERTY_PIN_DATARANGES
,
548 KSPROPERTY_PIN_DATAINTERSECTION
,
549 KSPROPERTY_PIN_INTERFACES
,
550 KSPROPERTY_PIN_MEDIUMS
,
551 KSPROPERTY_PIN_COMMUNICATION
,
552 KSPROPERTY_PIN_GLOBALCINSTANCES
,
553 KSPROPERTY_PIN_NECESSARYINSTANCES
,
554 KSPROPERTY_PIN_PHYSICALCONNECTION
,
555 KSPROPERTY_PIN_CATEGORY
,
557 KSPROPERTY_PIN_CONSTRAINEDDATARANGES
,
558 KSPROPERTY_PIN_PROPOSEDATAFORMAT
566 } KSP_PIN
, *PKSP_PIN
;
568 #define KSINSTANCE_INDETERMINATE ((ULONG)-1)
574 } KSPIN_CINSTANCES
, *PKSPIN_CINSTANCES
;
580 WCHAR SymbolicLinkName
[1];
581 } KSPIN_PHYSICALCONNECTION
, *PKSPIN_PHYSICALCONNECTION
;
584 /* ===============================================================
586 Properties/Methods/Events
589 #define KSPROPSETID_Quality \
590 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
594 KSPROPERTY_QUALITY_REPORT
,
595 KSPROPERTY_QUALITY_ERROR
596 } KSPROPERTY_QUALITY
;
599 /* ===============================================================
601 Properties/Methods/Events
604 #define KSPROPSETID_Stream \
605 0x65aaba60L, 0x98ae, 0x11cf, 0xa1, 0x0d, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
609 KSPROPERTY_STREAM_ALLOCATOR
,
610 KSPROPERTY_STREAM_QUALITY
,
611 KSPROPERTY_STREAM_DEGRADATION
,
612 KSPROPERTY_STREAM_MASTERCLOCK
,
613 KSPROPERTY_STREAM_TIMEFORMAT
,
614 KSPROPERTY_STREAM_PRESENTATIONTIME
,
615 KSPROPERTY_STREAM_PRESENTATIONEXTENT
,
616 KSPROPERTY_STREAM_FRAMETIME
,
617 KSPROPERTY_STREAM_RATECAPABILITY
,
618 KSPROPERTY_STREAM_RATE
,
619 KSPROPERTY_STREAM_PIPE_ID
623 /* ===============================================================
625 Properties/Methods/Events
628 #define STATIC_KSPROPSETID_StreamAllocator\
629 0xcf6e4342L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
630 DEFINE_GUIDSTRUCT("cf6e4342-ec87-11cf-a130-0020afd156e4", KSPROPSETID_StreamAllocator
);
631 #define KSPROPSETID_StreamAllocator DEFINE_GUIDNAMED(KSPROPSETID_StreamAllocator)
635 KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE
,
636 KSPROPERTY_STREAMALLOCATOR_STATUS
637 } KSPROPERTY_STREAMALLOCATOR
;
639 #define KSMETHODSETID_StreamAllocator \
640 0xcf6e4341L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
644 KSMETHOD_STREAMALLOCATOR_ALLOC
,
645 KSMETHOD_STREAMALLOCATOR_FREE
646 } KSMETHOD_STREAMALLOCATOR
;
649 #define KSEVENTSETID_StreamAllocator
653 KSEVENT_STREAMALLOCATOR_INTERNAL_FREEFRAME
,
654 KSEVENT_STREAMALLOCATOR_FREEFRAME
655 } KSEVENT_STREAMALLOCATOR
;
658 /* ===============================================================
660 Properties/Methods/Events
663 #define KSPROPSETID_StreamInterface \
664 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
668 KSPROPERTY_STREAMINTERFACE_HEADERSIZE
669 } KSPROPERTY_STREAMINTERFACE
;
672 /* ===============================================================
674 Properties/Methods/Events
677 #define STATIC_KSPROPSETID_Topology\
678 0x720D4AC0L, 0x7533, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
679 DEFINE_GUIDSTRUCT("720D4AC0-7533-11D0-A5D6-28DB04C10000", KSPROPSETID_Topology
);
680 #define KSPROPSETID_Topology DEFINE_GUIDNAMED(KSPROPSETID_Topology)
683 KSPROPERTY_TOPOLOGY_CATEGORIES
,
684 KSPROPERTY_TOPOLOGY_NODES
,
685 KSPROPERTY_TOPOLOGY_CONNECTIONS
,
686 KSPROPERTY_TOPOLOGY_NAME
687 } KSPROPERTY_TOPOLOGY
;
689 /* ===============================================================
690 Property Sets for audio drivers - TODO
693 #define STATIC_KSPROPTYPESETID_General \
694 0x97E99BA0L, 0xBDEA, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
695 DEFINE_GUIDSTRUCT("97E99BA0-BDEA-11CF-A5D6-28DB04C10000", KSPROPTYPESETID_General
);
696 #define KSPROPTYPESETID_General DEFINE_GUIDNAMED(KSPROPTYPESETID_General)
699 KSPROPERTY_AC3_ALTERNATE_AUDIO
700 KSPROPERTY_AC3_BIT_STREAM_MODE
701 KSPROPERTY_AC3_DIALOGUE_LEVEL
702 KSPROPERTY_AC3_DOWNMIX
703 KSPROPERTY_AC3_ERROR_CONCEALMENT
704 KSPROPERTY_AC3_LANGUAGE_CODE
705 KSPROPERTY_AC3_ROOM_TYPE
708 #define KSPROPSETID_Acoustic_Echo_Cancel
711 KSPROPERTY_AEC_NOISE_FILL_ENABLE
712 KSPROPERTY_AEC_STATUS
716 KSPROPERTY_AUDIO_3D_INTERFACE
718 KSPROPERTY_AUDIO_ALGORITHM_INSTANCE
719 KSPROPERTY_AUDIO_BASS
720 KSPROPERTY_AUDIO_BASS_BOOST
721 KSPROPERTY_AUDIO_CHANNEL_CONFIG
722 KSPROPERTY_AUDIO_CHORUS_LEVEL
723 KSPROPERTY_AUDIO_COPY_PROTECTION
724 KSPROPERTY_AUDIO_CPU_RESOURCES
725 KSPROPERTY_AUDIO_DELAY
726 KSPROPERTY_AUDIO_DEMUX_DEST
727 KSPROPERTY_AUDIO_DEV_SPECIFIC
728 KSPROPERTY_AUDIO_DYNAMIC_RANGE
729 KSPROPERTY_AUDIO_DYNAMIC_SAMPLING_RATE
730 KSPROPERTY_AUDIO_EQ_BANDS
731 KSPROPERTY_AUDIO_EQ_LEVEL
732 KSPROPERTY_AUDIO_FILTER_STATE
733 KSPROPERTY_AUDIO_LATENCY
734 KSPROPERTY_AUDIO_LOUDNESS
735 KSPROPERTY_AUDIO_MANUFACTURE_GUID
737 KSPROPERTY_AUDIO_MIX_LEVEL_CAPS
738 KSPROPERTY_AUDIO_MIX_LEVEL_TABLE
739 KSPROPERTY_AUDIO_MUTE
740 KSPROPERTY_AUDIO_MUX_SOURCE
741 KSPROPERTY_AUDIO_NUM_EQ_BANDS
742 KSPROPERTY_AUDIO_PEAKMETER
743 KSPROPERTY_AUDIO_POSITION
744 KSPROPERTY_AUDIO_PREFERRED_STATUS
745 KSPROPERTY_AUDIO_PRODUCT_GUID
746 KSPROPERTY_AUDIO_QUALITY
747 KSPROPERTY_AUDIO_REVERB_LEVEL
748 KSPROPERTY_AUDIO_SAMPLING_RATE
749 KSPROPERTY_AUDIO_STEREO_ENHANCE
750 KSPROPERTY_AUDIO_STEREO_SPEAKER_GEOMETRY
751 KSPROPERTY_AUDIO_SURROUND_ENCODE
752 KSPROPERTY_AUDIO_TREBLE
753 KSPROPERTY_AUDIO_VOLUMELEVEL
754 KSPROPERTY_AUDIO_WIDE_MODE
755 KSPROPERTY_AUDIO_WIDENESS
758 #define KSPROPSETID_AudioGfx
760 KSPROPERTY_AUDIOGFX_CAPTURETARGETDEVICEID
761 KSPROPERTY_AUDIOGFX_RENDERTARGETDEVICEID
764 #define KSPROPSETID_DirectSound3DBuffer
766 KSPROPERTY_DIRECTSOUND3DBUFFER_ALL
767 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEANGLES
768 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEORIENTATION
769 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEOUTSIDEVOLUME
770 KSPROPERTY_DIRECTSOUND3DBUFFER_MAXDISTANCE
771 KSPROPERTY_DIRECTSOUND3DBUFFER_MINDISTANCE
772 KSPROPERTY_DIRECTSOUND3DBUFFER_MODE
773 KSPROPERTY_DIRECTSOUND3DBUFFER_POSITION
774 KSPROPERTY_DIRECTSOUND3DBUFFER_VELOCITY
777 #define KSPROPSETID_DirectSound3DListener
779 KSPROPERTY_DIRECTSOUND3DLISTENER_ALL
780 KSPROPERTY_DIRECTSOUND3DLISTENER_ALLOCATION
781 KSPROPERTY_DIRECTSOUND3DLISTENER_BATCH
782 KSPROPERTY_DIRECTSOUND3DLISTENER_DISTANCEFACTOR
783 KSPROPERTY_DIRECTSOUND3DLISTENER_DOPPLERFACTOR
784 KSPROPERTY_DIRECTSOUND3DLISTENER_ORIENTATION
785 KSPROPERTY_DIRECTSOUND3DLISTENER_POSITION
786 KSPROPERTY_DIRECTSOUND3DLISTENER_ROLLOFFFACTOR
787 KSPROPERTY_DIRECTSOUND3DLISTENER_VELOCITY
790 #define KSPROPSETID_DrmAudioStream
792 KSPROPERTY_DRMAUDIOSTREAM_CONTENTID
795 #define KSPROPSETID_Hrtf3d
797 KSPROPERTY_HRTF3D_FILTER_FORMAT
798 KSPROPERTY_HRTF3D_INITIALIZE
799 KSPROPERTY_HRTF3D_PARAMS
802 #define KSPROPSETID_Itd3d
804 KSPROPERTY_ITD3D_PARAMS
807 #define KSPROPSETID_Synth
809 KSPROPERTY_SYNTH_CAPS
810 KSPROPERTY_SYNTH_CHANNELGROUPS
811 KSPROPERTY_SYNTH_LATENCYCLOCK
812 KSPROPERTY_SYNTH_MASTERCLOCK
813 KSPROPERTY_SYNTH_PORTPARAMETERS
814 KSPROPERTY_SYNTH_RUNNINGSTATS
815 KSPROPERTY_SYNTH_VOICEPRIORITY
816 KSPROPERTY_SYNTH_VOLUME
817 KSPROPERTY_SYNTH_VOLUMEBOOST
820 #define KSPROPSETID_Synth_Dls
822 KSPROPERTY_SYNTH_DLS_APPEND
823 KSPROPERTY_SYNTH_DLS_COMPACT
824 KSPROPERTY_SYNTH_DLS_DOWNLOAD
825 KSPROPERTY_SYNTH_DLS_UNLOAD
826 KSPROPERTY_SYNTH_DLS_WAVEFORMAT
829 #define KSPROPSETID_TopologyNode
831 KSPROPERTY_TOPOLOGYNODE_ENABLE
832 KSPROPERTY_TOPOLOGYNODE_RESET
838 /* ===============================================================
839 Event Sets for audio drivers - TODO
841 #define KSEVENTSETID_AudioControlChange
843 KSEVENT_CONTROL_CHANGE
848 /* ===============================================================
852 KSNODETYPE_3D_EFFECTS
853 KSNODETYPE_ACOUSTIC_ECHO_CANCEL
860 KSNODETYPE_DEV_SPECIFIC
862 KSNODETYPE_DMSYNTH_CAPS
863 KSNODETYPE_DRM_DESCRAMBLE
869 KSNODETYPE_PROLOGIC_DECODER
870 KSNODETYPE_PROLOGIC_ENCODER
873 KSNODETYPE_STEREO_ENHANCE
874 KSNODETYPE_STEREO_WIDE
879 KSNODETYPE_SYNTHESIZER
885 typedef PVOID KSDEVICE_HEADER
,
892 /* ===============================================================
896 #define KSMETHOD_TYPE_NONE 0x00000000
897 #define KSMETHOD_TYPE_READ 0x00000001
898 #define KSMETHOD_TYPE_WRITE 0x00000002
899 #define KSMETHOD_TYPE_MODIFY 0x00000003
900 #define KSMETHOD_TYPE_SOURCE 0x00000004
901 #define KSMETHOD_TYPE_SEND 0x00000001
902 #define KSMETHOD_TYPE_SETSUPPORT 0x00000100
903 #define KSMETHOD_TYPE_BASICSUPPORT 0x00000200
906 /* ===============================================================
910 #define KSPROPERTY_TYPE_GET 0x00000001
911 #define KSPROPERTY_TYPE_SET 0x00000002
912 #define KSPROPERTY_TYPE_SETSUPPORT 0x00000100
913 #define KSPROPERTY_TYPE_BASICSUPPORT 0x00000200
914 #define KSPROPERTY_TYPE_RELATIONS 0x00000400
915 #define KSPROPERTY_TYPE_SERIALIZESET 0x00000800
916 #define KSPROPERTY_TYPE_UNSERIALIZESET 0x00001000
917 #define KSPROPERTY_TYPE_SERIALIZERAW 0x00002000
918 #define KSPROPERTY_TYPE_UNSERIALIZERAW 0x00004000
919 #define KSPROPERTY_TYPE_SERIALIZESIZE 0x00008000
920 #define KSPROPERTY_TYPE_DEFAULT_VALUES 0x00010000
923 /* ===============================================================
924 Topology Methods/Properties
927 #define KSMETHOD_TYPE_TOPOLOGY 0x10000000
928 #define KSPROPERTY_TYPE_TOPOLOGY 0x10000000
931 #define DEFINE_KS_GUID(GA,GB,GC,GD,GE,GF,GG,GH,GI,GJ,GK) \
932 DEFINE_GUID(??, 0x#GA#L, 0xGB, 0xGC, 0xGD, 0xGE, 0xGF, 0xGG, 0xGH, 0xGI, 0xGJ, 0xGK) \
933 "GA-GB-GC-GDGE-GFGGGHGIGJGK"
936 /* ===============================================================
939 BRIDGE - 0x085AFF00L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
940 CAPTURE - 0x65E8773DL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
941 RENDER - 0x65E8773EL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
942 MIXER - 0xAD809C00L, 0x7B88, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
943 SPLITTER - 0x0A4252A0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
944 DATACOMPRESSOR - 0x1E84C900L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
945 DATADECOMPRESSOR - 0x2721AE20L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
946 DATATRANSFORM - 0x2EB07EA0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
947 COMMUNICATIONSTRANSFORM - 0xCF1DDA2CL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
948 INTERFACETRANSFORM - 0xCF1DDA2DL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
949 MEDIUMTRANSFORM - 0xCF1DDA2EL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
950 FILESYSTEM - 0x760FED5EL, 0x9357, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
951 CLOCK - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
952 PROXY - 0x97EBAACAL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
953 QUALITY - 0x97EBAACBL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
956 /* ===============================================================
957 KSNAME GUIDs (defined also as KSSTRING_Xxx L"{...}"
959 Filter - 0x9b365890L, 0x165f, 0x11d0, 0xa1, 0x95, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
960 Pin - 0x146F1A80L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
961 Clock - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
962 Allocator - 0x642F5D00L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
963 TopologyNode - 0x0621061AL, 0xEE75, 0x11D0, 0xB9, 0x15, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
966 /* ===============================================================
969 Standard - 0x1A8766A0L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
970 FileIo - 0x8C6F932CL, 0xE771, 0x11D0, 0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
973 /* ===============================================================
976 Standard - 0x4747B320L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
979 /* ===============================================================
982 General - 0x1464EDA5L, 0x6A8F, 0x11D1, 0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
983 StreamIo - 0x65D003CAL, 0x1523, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
984 MediaSeeking - 0xEE904F0CL, 0xD09B, 0x11D0, 0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
985 Topology - 0x720D4AC0L, 0x7533, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
986 GM - 0xAF627536L, 0xE719, 0x11D2, 0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D
987 Quality - 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
988 Connection - 0x1D58C920L, 0xAC9B, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
991 /* ===============================================================
994 Event set - 0x75d95571L, 0x073c, 0x11d0, 0xa1, 0x61, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
995 Method set - 0xcf6e4341L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
996 Property set - 0xcf6e4342L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
999 /* ===============================================================
1000 StreamInterface Sets
1002 Property set - 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
1005 /* ===============================================================
1008 Property set - 0xDF12A4C0L, 0xAC17, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1009 Event sets - 0x364D8E20L, 0x62C7, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1012 /* ===============================================================
1015 Event set - 0x7f4bcbe0L, 0x9ea5, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00
1018 /* ===============================================================
1021 KSTIME_FORMAT_NONE (null guid)
1022 FRAME - 0x7b785570L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1023 BYTE - 0x7b785571L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1024 SAMPLE - 0x7b785572L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1025 FIELD - 0x7b785573L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1026 MEDIA_TIME - 0x7b785574L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1029 /* ===============================================================
1039 #define STATIC_KSDATAFORMAT_SPECIFIER_NONE\
1040 0x0F6417D6L, 0xC318, 0x11D0, 0xA4, 0x3F, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1041 DEFINE_GUIDSTRUCT("0F6417D6-C318-11D0-A43F-00A0C9223196", KSDATAFORMAT_SPECIFIER_NONE
);
1042 #define KSDATAFORMAT_SPECIFIER_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_NONE)
1045 /* ===============================================================
1048 WILDCARD, DONT_CARE = NULL
1049 SYSTEM - 0x091bb638L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1050 USER - 0x8cb0fc28L, 0x7893, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1051 KERNEL_PAGED - 0xd833f8f8L, 0x7894, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1052 KERNEL_NONPAGED - 0x4a6d5fc4L, 0x7895, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1053 DEVICE_UNKNOWN - 0x091bb639L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1056 /* ===============================================================
1058 (values have been checked)
1063 #define DEFINE_KSPROPERTY_ITEM(PropertyId, GetHandler,\
1067 Values, RelationsCount, Relations, SupportHandler,\
1070 PropertyId, {(PFNKSHANDLER)GetHandler}, MinProperty, MinData,\
1071 {(PFNKSHANDLER)SetHandler},\
1072 (PKSPROPERTY_VALUES)Values, RelationsCount, (PKSPROPERTY)Relations,\
1073 (PFNKSHANDLER)SupportHandler, (ULONG)SerializedSize\
1078 #define DEFINE_KSPROPERTY_ITEM(PropertyId, GetHandler,\
1082 Values, RelationsCount, Relations, SupportHandler,\
1085 PropertyId, (PFNKSHANDLER)GetHandler, MinProperty, MinData,\
1086 (PFNKSHANDLER)SetHandler,\
1087 (PKSPROPERTY_VALUES)Values, RelationsCount, (PKSPROPERTY)Relations,\
1088 (PFNKSHANDLER)SupportHandler, (ULONG)SerializedSize\
1097 KsObjectTypeFilterFactory
,
1108 } KSSTATE
, *PKSSTATE
;
1112 KSTARGET_STATE_DISABLED
,
1113 KSTARGET_STATE_ENABLED
1128 KSEVENTS_FMUTEXUNSAFE
,
1131 } KSEVENTS_LOCKTYPE
;
1135 KSDEGRADE_STANDARD_SIMPLE
,
1136 KSDEGRADE_STANDARD_QUALITY
,
1137 KSDEGRADE_STANDARD_COMPUTATION
,
1138 KSDEGRADE_STANDARD_SKIP
1139 } KSDEGRADE_STANDARD
;
1143 KSPIN_DATAFLOW_IN
= 1,
1145 } KSPIN_DATAFLOW
, *PKSPIN_DATAFLOW
;
1149 KSPIN_COMMUNICATION_NONE
,
1150 KSPIN_COMMUNICATION_SINK
,
1151 KSPIN_COMMUNICATION_SOURCE
,
1152 KSPIN_COMMUNICATION_BOTH
,
1153 KSPIN_COMMUNICATION_BRIDGE
1154 } KSPIN_COMMUNICATION
, *PKSPIN_COMMUNICATION
;
1160 } KSLIST_ENTRY_LOCATION
;
1164 KsStackCopyToNewLocation
,
1165 KsStackReuseCurrentLocation
,
1166 KsStackUseNewLocation
1173 KsAcquireOnlySingleItem
,
1174 KsAcquireAndRemoveOnlySingleItem
1175 } KSIRP_REMOVAL_OPERATION
;
1179 KsInvokeOnSuccess
= 1,
1180 KsInvokeOnError
= 2,
1181 KsInvokeOnCancel
= 4
1182 } KSCOMPLETION_INVOCATION
;
1185 #if defined(_NTDDK_)
1187 typedef NTSTATUS (NTAPI
*PFNKSCONTEXT_DISPATCH
)(
1192 #if defined(_NTDDK_) && !defined(__wtypes_h__)
1222 VT_USERDEFINED
= 29,
1229 VT_STREAMED_OBJECT
= 68,
1230 VT_STORED_OBJECT
= 69,
1231 VT_BLOB_OBJECT
= 70,
1237 VT_RESERVED
= 0x8000,
1238 VT_ILLEGAL
= 0xffff,
1239 VT_ILLEGALMASKED
= 0xfff,
1244 #define STATIC_KSDATAFORMAT_TYPE_WILDCARD STATIC_GUID_NULL
1245 #define KSDATAFORMAT_TYPE_WILDCARD GUID_NULL
1247 #define STATIC_KSDATAFORMAT_SUBTYPE_WILDCARD STATIC_GUID_NULL
1248 #define KSDATAFORMAT_SUBTYPE_WILDCARD GUID_NULL
1250 #define STATIC_KSDATAFORMAT_SPECIFIER_WILDCARD STATIC_GUID_NULL
1251 #define KSDATAFORMAT_SPECIFIER_WILDCARD GUID_NULL
1253 /* ===============================================================
1262 } KS_FRAMING_RANGE
, *PKS_FRAMING_RANGE
;
1266 KS_FRAMING_RANGE Range
;
1267 ULONG InPlaceWeight
;
1268 ULONG NotInPlaceWeight
;
1269 } KS_FRAMING_RANGE_WEIGHTED
, *PKS_FRAMING_RANGE_WEIGHTED
;
1279 ULONG FileAlignment
;
1280 ULONG MemoryTypeWeight
;
1281 KS_FRAMING_RANGE PhysicalRange
;
1282 KS_FRAMING_RANGE_WEIGHTED FramingRange
;
1283 } KS_FRAMING_ITEM
, *PKS_FRAMING_ITEM
;
1287 ULONG RatioNumerator
;
1288 ULONG RatioDenominator
;
1289 ULONG RatioConstantMargin
;
1290 } KS_COMPRESSION
, *PKS_COMPRESSION
;
1293 /* ===============================================================
1297 #define KSPRIORITY_LOW 0x00000001
1298 #define KSPRIORITY_NORMAL 0x40000000
1299 #define KSPRIORITY_HIGH 0x80000000
1300 #define KSPRIORITY_EXCLUSIVE 0xFFFFFFFF
1304 ULONG PriorityClass
;
1305 ULONG PrioritySubClass
;
1306 } KSPRIORITY
, *PKSPRIORITY
;
1309 /* ===============================================================
1311 http://www.osronline.com/DDKx/stream/ks-struct_494j.htm
1313 #if defined(_NTDDK_)
1316 PDRIVER_DISPATCH DeviceIoControl
;
1317 PDRIVER_DISPATCH Read
;
1318 PDRIVER_DISPATCH Write
;
1319 PDRIVER_DISPATCH Flush
;
1320 PDRIVER_DISPATCH Close
;
1321 PDRIVER_DISPATCH QuerySecurity
;
1322 PDRIVER_DISPATCH SetSecurity
;
1323 PFAST_IO_DEVICE_CONTROL FastDeviceIoControl
;
1324 PFAST_IO_READ FastRead
;
1325 PFAST_IO_WRITE FastWrite
;
1326 } KSDISPATCH_TABLE
, *PKSDISPATCH_TABLE
;
1329 #define KSCREATE_ITEM_IRP_STORAGE(Irp) (*(PKSOBJECT_CREATE_ITEM*)&(Irp)->Tail.Overlay.DriverContext[0])
1330 #define KSEVENT_SET_IRP_STORAGE(Irp) (*(const KSEVENT_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1331 #define KSEVENT_ITEM_IRP_STORAGE(Irp) (*(const KSEVENT_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1332 #define KSEVENT_ENTRY_IRP_STORAGE(Irp) (*(PKSEVENT_ENTRY*)&(Irp)->Tail.Overlay.DriverContext[0])
1333 #define KSMETHOD_SET_IRP_STORAGE(Irp) (*(const KSMETHOD_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1334 #define KSMETHOD_ITEM_IRP_STORAGE(Irp) (*(const KSMETHOD_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1335 #define KSMETHOD_TYPE_IRP_STORAGE(Irp) (*(ULONG_PTR*)(&(Irp)->Tail.Overlay.DriverContext[2]))
1336 #define KSQUEUE_SPINLOCK_IRP_STORAGE(Irp) (*(PKSPIN_LOCK*)&(Irp)->Tail.Overlay.DriverContext[1])
1337 #define KSPROPERTY_SET_IRP_STORAGE(Irp) (*(const KSPROPERTY_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1338 #define KSPROPERTY_ITEM_IRP_STORAGE(Irp) (*(const KSPROPERTY_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1339 #define KSPROPERTY_ATTRIBUTES_IRP_STORAGE(Irp) (*(PKSATTRIBUTE_LIST*)&(Irp)->Tail.Overlay.DriverContext[2])
1343 (NTAPI
*PFNREFERENCEDEVICEOBJECT
)(
1349 (NTAPI
*PFNDEREFERENCEDEVICEOBJECT
)(
1355 (NTAPI
*PFNQUERYREFERENCESTRING
)(
1357 IN OUT PWCHAR
*String
1362 INTERFACE Interface
;
1363 PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject
;
1364 PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject
;
1365 PFNQUERYREFERENCESTRING QueryReferenceString
;
1366 } BUS_INTERFACE_REFERENCE
, *PBUS_INTERFACE_REFERENCE
;
1371 ULONG ReferenceCount
;
1372 KSPIN_LOCK AccessLock
;
1373 } KSDPC_ITEM
, *PKSDPC_ITEM
;
1378 LIST_ENTRY BufferList
;
1379 } KSBUFFER_ITEM
, *PKSBUFFER_ITEM
;
1391 } KSCOMPONENTID
, *PKSCOMPONENTID
;
1393 /* ===============================================================
1397 #define KSPROPERTY_MEMBER_RANGES 0x00000001
1398 #define KSPROPERTY_MEMBER_STEPPEDRANGES 0x00000002
1399 #define KSPROPERTY_MEMBER_VALUES 0x00000003
1400 #define KSPROPERTY_MEMBER_FLAG_DEFAULT KSPROPERTY_MEMBER_RANGES
1403 KS_SEEKING_NoPositioning
,
1404 KS_SEEKING_AbsolutePositioning
,
1405 KS_SEEKING_RelativePositioning
,
1406 KS_SEEKING_IncrementalPositioning
,
1407 KS_SEEKING_PositioningBitsMask
= 0x3,
1408 KS_SEEKING_SeekToKeyFrame
,
1409 KS_SEEKING_ReturnTime
= 0x8
1416 KS_SEEKING_FLAGS CurrentFlags
;
1417 KS_SEEKING_FLAGS StopFlags
;
1418 } KSPROPERTY_POSITIONS
, *PKSPROPERTY_POSITIONS
;
1424 } KSPROPERTY_SERIALHDR
, *PKSPROPERTY_SERIALHDR
;
1428 KSIDENTIFIER PropTypeSet
;
1430 ULONG PropertyLength
;
1431 } KSPROPERTY_SERIAL
, *PKSPROPERTY_SERIAL
;
1440 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1447 ULONG UnsignedMinimum
;
1448 ULONG UnsignedMaximum
;
1449 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1455 } KSPROPERTY_BOUNDS_LONG
, *PKSPROPERTY_BOUNDS_LONG
;
1460 LONGLONG SignedMinimum
;
1461 LONGLONG SignedMaximum
;
1462 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1469 #if defined(_NTDDK_)
1470 ULONGLONG UnsignedMinimum
;
1471 ULONGLONG UnsignedMaximum
;
1473 DWORDLONG UnsignedMinimum
;
1474 DWORDLONG UnsignedMaximum
;
1476 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1481 } KSPROPERTY_BOUNDS_LONGLONG
, *PKSPROPERTY_BOUNDS_LONGLONG
;
1486 ULONG DescriptionSize
;
1487 KSIDENTIFIER PropTypeSet
;
1488 ULONG MembersListCount
;
1490 } KSPROPERTY_DESCRIPTION
, *PKSPROPERTY_DESCRIPTION
;
1496 } KSPROPERTY_MEDIAAVAILABLE
, *PKSPROPERTY_MEDIAAVAILABLE
;
1505 } KSPROPERTY_MEMBERSHEADER
, *PKSPROPERTY_MEMBERSHEADER
;
1508 KSPROPERTY_MEMBERSHEADER MembersHeader
;
1509 const VOID
* Members
;
1510 } KSPROPERTY_MEMBERSLIST
, *PKSPROPERTY_MEMBERSLIST
;
1513 KSIDENTIFIER PropTypeSet
;
1514 ULONG MembersListCount
;
1515 const KSPROPERTY_MEMBERSLIST
* MembersList
;
1516 } KSPROPERTY_VALUES
, *PKSPROPERTY_VALUES
;
1518 #if defined(_NTDDK_)
1519 typedef NTSTATUS (NTAPI
*PFNKSHANDLER
)(
1521 IN PKSIDENTIFIER Request
,
1529 PFNKSHANDLER GetPropertyHandler
;
1530 BOOLEAN GetSupported
;
1535 PFNKSHANDLER SetPropertyHandler
;
1536 BOOLEAN SetSupported
;
1538 const KSPROPERTY_VALUES
* Values
;
1539 ULONG RelationsCount
;
1540 const KSPROPERTY
* Relations
;
1541 PFNKSHANDLER SupportHandler
;
1542 ULONG SerializedSize
;
1543 } KSPROPERTY_ITEM
, *PKSPROPERTY_ITEM
;
1548 (NTAPI
*PFNKSFASTHANDLER
)(
1549 IN PFILE_OBJECT FileObject
,
1550 IN PKSIDENTIFIER Request
,
1551 IN ULONG RequestLength
,
1553 IN ULONG DataLength
,
1554 OUT PIO_STATUS_BLOCK IoStatus
1560 PFNKSFASTHANDLER GetPropertyHandler
;
1561 BOOLEAN GetSupported
;
1564 PFNKSFASTHANDLER SetPropertyHandler
;
1565 BOOLEAN SetSupported
;
1568 } KSFASTPROPERTY_ITEM
, *PKSFASTPROPERTY_ITEM
;
1573 ULONG PropertiesCount
;
1574 const KSPROPERTY_ITEM
* PropertyItem
;
1576 const KSFASTPROPERTY_ITEM
* FastIoTable
;
1577 } KSPROPERTY_SET
, *PKSPROPERTY_SET
;
1583 ULONG SteppingDelta
;
1585 KSPROPERTY_BOUNDS_LONG Bounds
;
1586 } KSPROPERTY_STEPPING_LONG
, *PKSPROPERTY_STEPPING_LONG
;
1590 #if defined(_NTDDK_)
1591 ULONGLONG SteppingDelta
;
1593 DWORDLONG SteppingDelta
;
1595 KSPROPERTY_BOUNDS_LONGLONG Bounds
;
1596 } KSPROPERTY_STEPPING_LONGLONG
, *PKSPROPERTY_STEPPING_LONGLONG
;
1598 /* ===============================================================
1606 ULONG RequirementsFlags
;
1608 #if defined(_NTDDK_)
1615 ULONG FileAlignment
;
1617 } KSALLOCATOR_FRAMING
, *PKSALLOCATOR_FRAMING
;
1623 KS_COMPRESSION OutputCompression
;
1625 KS_FRAMING_ITEM FramingItem
[1];
1626 } KSALLOCATOR_FRAMING_EX
, *PKSALLOCATOR_FRAMING_EX
;
1628 #define KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER 0x00000001
1629 #define KSALLOCATOR_REQUIREMENTF_SYSTEM_MEMORY 0x00000002
1630 #define KSALLOCATOR_REQUIREMENTF_FRAME_INTEGRITY 0x00000004
1631 #define KSALLOCATOR_REQUIREMENTF_MUST_ALLOCATE 0x00000008
1632 #define KSALLOCATOR_REQUIREMENTF_PREFERENCES_ONLY 0x80000000
1634 #define KSALLOCATOR_OPTIONF_COMPATIBLE 0x00000001
1635 #define KSALLOCATOR_OPTIONF_SYSTEM_MEMORY 0x00000002
1636 #define KSALLOCATOR_OPTIONF_VALID 0x00000003
1638 #define KSALLOCATOR_FLAG_PARTIAL_READ_SUPPORT 0x00000010
1639 #define KSALLOCATOR_FLAG_DEVICE_SPECIFIC 0x00000020
1640 #define KSALLOCATOR_FLAG_CAN_ALLOCATE 0x00000040
1641 #define KSALLOCATOR_FLAG_INSIST_ON_FRAMESIZE_RATIO 0x00000080
1643 /* ===============================================================
1652 } KSQUALITY
, *PKSQUALITY
;
1656 HANDLE QualityManager
;
1658 } KSQUALITY_MANAGER
, *PKSQUALITY_MANAGER
;
1662 LONGLONG PresentationStart
;
1664 KSPIN_INTERFACE Interface
;
1671 KSPROPERTY Property
;
1673 } KSRATE_CAPABILITY
, *PKSRATE_CAPABILITY
;
1677 LONGLONG Granularity
;
1679 } KSRESOLUTION
, *PKSRESOLUTION
;
1683 ULONG NotificationType
;
1687 ULONG_PTR Reserved
[2];
1694 #if defined(_NTDDK_)
1697 KPRIORITY Increment
;
1702 KPRIORITY Increment
;
1707 ULONG ReferenceCount
;
1711 PWORK_QUEUE_ITEM WorkQueueItem
;
1712 WORK_QUEUE_TYPE WorkQueueType
;
1716 PWORK_QUEUE_ITEM WorkQueueItem
;
1717 PKSWORKER KsWorkerObject
;
1723 LONG_PTR Alignment
[2];
1726 } KSEVENTDATA
, *PKSEVENTDATA
;
1728 #define KSEVENTF_EVENT_HANDLE 0x00000001
1729 #define KSEVENTF_SEMAPHORE_HANDLE 0x00000002
1730 #if defined(_NTDDK_)
1731 #define KSEVENTF_EVENT_OBJECT 0x00000004
1732 #define KSEVENTF_SEMAPHORE_OBJECT 0x00000008
1733 #define KSEVENTF_DPC 0x00000010
1734 #define KSEVENTF_WORKITEM 0x00000020
1735 #define KSEVENTF_KSWORKITEM 0x00000080
1739 #define KSEVENT_TYPE_ENABLE 0x00000001
1740 #define KSEVENT_TYPE_ONESHOT 0x00000002
1741 #define KSEVENT_TYPE_ENABLEBUFFERED 0x00000004
1742 #define KSEVENT_TYPE_SETSUPPORT 0x00000100
1743 #define KSEVENT_TYPE_BASICSUPPORT 0x00000200
1744 #define KSEVENT_TYPE_QUERYBUFFER 0x00000400
1746 #define KSEVENT_TYPE_TOPOLOGY 0x10000000
1753 HANDLE ObjectHandle
;
1754 PVOID ObjectPointer
;
1758 KSEVENTDATA EventData
;
1759 } KSRELATIVEEVENT
, *PKSRELATIVEEVENT
;
1762 /* ===============================================================
1776 LONGLONG SystemTime
;
1777 } KSCORRELATED_TIME
, *PKSCORRELATED_TIME
;
1781 KSPROPERTY Property
;
1785 } KSP_TIMEFORMAT
, *PKSP_TIMEFORMAT
;
1791 } KSINTERVAL
, *PKSINTERVAL
;
1798 } KSFRAMETIME
, *PKSFRAMETIME
;
1801 /* ===============================================================
1805 typedef PVOID PKSDEFAULTCLOCK
;
1810 } KSCLOCK_CREATE
, *PKSCLOCK_CREATE
;
1812 #if defined(_NTDDK_)
1816 (FASTCALL
*PFNKSCLOCK_GETTIME
)(
1817 IN PFILE_OBJECT FileObject
1821 (FASTCALL
*PFNKSCLOCK_CORRELATEDTIME
)(
1822 IN PFILE_OBJECT FileObject
,
1823 OUT PLONGLONG SystemTime
);
1827 PFNKSCLOCK_GETTIME GetTime
;
1828 PFNKSCLOCK_GETTIME GetPhysicalTime
;
1829 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedTime
;
1830 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedPhysicalTime
;
1831 } KSCLOCK_FUNCTIONTABLE
, *PKSCLOCK_FUNCTIONTABLE
;
1834 /* ===============================================================
1835 Objects ??? SORT ME!
1838 #define KSCREATE_ITEM_SECURITYCHANGED 0x1
1839 #define KSCREATE_ITEM_WILDCARD 0x2
1840 #define KSCREATE_ITEM_NOPARAMETERS 0x4
1841 #define KSCREATE_ITEM_FREEONSTOP 0x8
1845 PDRIVER_DISPATCH Create
;
1847 UNICODE_STRING ObjectClass
;
1848 PSECURITY_DESCRIPTOR SecurityDescriptor
;
1850 } KSOBJECT_CREATE_ITEM
, *PKSOBJECT_CREATE_ITEM
;
1854 ULONG CreateItemsCount
;
1855 PKSOBJECT_CREATE_ITEM CreateItemsList
;
1856 } KSOBJECT_CREATE
, *PKSOBJECT_CREATE
;
1858 typedef VOID (NTAPI
*PFNKSITEMFREECALLBACK
)(
1859 IN PKSOBJECT_CREATE_ITEM CreateItem
);
1867 } KSMULTIPLE_ITEM
, *PKSMULTIPLE_ITEM
;
1872 PKSEVENTDATA EventData
;
1874 } KSQUERYBUFFER
, *PKSQUERYBUFFER
;
1880 } KSERROR
, *PKSERROR
;
1882 /* ===============================================================
1885 #if defined(_NTDDK_)
1891 PFNKSHANDLER MethodHandler
;
1892 BOOLEAN MethodSupported
;
1896 PFNKSHANDLER SupportHandler
;
1898 } KSMETHOD_ITEM
, *PKSMETHOD_ITEM
;
1902 #define DEFINE_KSMETHOD_ITEM(MethodId, Flags,\
1904 MinMethod, MinData, SupportHandler)\
1906 MethodId, {(PFNKSHANDLER)MethodHandler}, MinMethod, MinData,\
1907 SupportHandler, Flags\
1912 #define DEFINE_KSMETHOD_ITEM(MethodId, Flags,\
1914 MinMethod, MinData, SupportHandler)\
1916 MethodId, (PFNKSHANDLER)MethodHandler, MinMethod, MinData,\
1917 SupportHandler, Flags\
1929 PFNKSFASTHANDLER MethodHandler
;
1930 BOOLEAN MethodSupported
;
1932 } KSFASTMETHOD_ITEM
, *PKSFASTMETHOD_ITEM
;
1934 #define DEFINE_KSFASTMETHOD_ITEM(MethodId, MethodHandler)\
1936 MethodId, (PFNKSFASTHANDLER)MethodHandler\
1944 const KSMETHOD_ITEM
* MethodItem
;
1946 const KSFASTMETHOD_ITEM
*FastIoTable
;
1947 } KSMETHOD_SET
, *PKSMETHOD_SET
;
1950 #define DEFINE_KSMETHOD_SET(Set,\
1964 /* ===============================================================
1970 KSPROPERTY Property
;
1973 } KSP_NODE
, *PKSP_NODE
;
1980 } KSM_NODE
, *PKSM_NODE
;
1987 } KSE_NODE
, *PKSE_NODE
;
1992 } KSNODE_CREATE
, *PKSNODE_CREATE
;
1995 /* ===============================================================
1998 typedef struct _KSEVENT_ENTRY KSEVENT_ENTRY
, *PKSEVENT_ENTRY
;
2000 #if defined(_NTDDK_)
2003 KSEVENTDATA EventData
;
2005 } KSEVENT_TIME_MARK
, *PKSEVENT_TIME_MARK
;
2009 KSEVENTDATA EventData
;
2012 } KSEVENT_TIME_INTERVAL
, *PKSEVENT_TIME_INTERVAL
;
2014 typedef NTSTATUS (NTAPI
*PFNKSADDEVENT
)(
2016 IN PKSEVENTDATA EventData
,
2017 IN
struct _KSEVENT_ENTRY
* EventEntry
);
2021 (NTAPI
*PFNKSREMOVEEVENT
)(
2022 IN PFILE_OBJECT FileObject
,
2023 IN
struct _KSEVENT_ENTRY
* EventEntry
2030 ULONG ExtraEntryData
;
2031 PFNKSADDEVENT AddHandler
;
2032 PFNKSREMOVEEVENT RemoveHandler
;
2033 PFNKSHANDLER SupportHandler
;
2034 } KSEVENT_ITEM
, *PKSEVENT_ITEM
;
2040 const KSEVENT_ITEM
* EventItem
;
2041 } KSEVENT_SET
, *PKSEVENT_SET
;
2043 struct _KSEVENT_ENTRY
2045 LIST_ENTRY ListEntry
;
2048 PKSDPC_ITEM DpcItem
;
2049 PKSBUFFER_ITEM BufferItem
;
2051 PKSEVENTDATA EventData
;
2052 ULONG NotificationType
;
2053 const KSEVENT_SET
* EventSet
;
2054 const KSEVENT_ITEM
* EventItem
;
2055 PFILE_OBJECT FileObject
;
2056 ULONG SemaphoreAdjustment
;
2062 /* ===============================================================
2066 #if defined(_NTDDK_)
2068 typedef struct _KSPIN KSPIN
, *PKSPIN
;
2069 typedef struct _KSSTREAM_POINTER KSSTREAM_POINTER
, *PKSSTREAM_POINTER
;
2070 typedef struct _KSSTREAM_POINTER_OFFSET KSSTREAM_POINTER_OFFSET
, *PKSSTREAM_POINTER_OFFSET
;
2071 typedef struct _KSMAPPING KSMAPPING
, *PKSMAPPING
;
2072 typedef struct _KSPROCESSPIN KSPROCESSPIN
, *PKSPROCESSPIN
;
2074 #define IOCTL_KS_HANDSHAKE CTL_CODE(FILE_DEVICE_KS, 0x007, METHOD_NEITHER, FILE_ANY_ACCESS)
2080 } KSHANDSHAKE
, *PKSHANDSHAKE
;
2084 (NTAPI
*PFNKSPINHANDSHAKE
)(
2092 (NTAPI
*PFNKSPINPOWER
)(
2094 IN DEVICE_POWER_STATE State
2099 (NTAPI
*PFNKSPINFRAMERETURN
)(
2101 IN PVOID Data OPTIONAL
,
2102 IN ULONG Size OPTIONAL
,
2103 IN PMDL Mdl OPTIONAL
,
2104 IN PVOID Context OPTIONAL
,
2110 (NTAPI
*PFNKSPINIRPCOMPLETION
)(
2117 (NTAPI
*PFNKSPINIRP
)(
2130 (NTAPI
*PFNKSPINVOID
)(
2136 (NTAPI
*PFNKSSTREAMPOINTER
)(
2137 IN PKSSTREAM_POINTER StreamPointer
2142 PKSATTRIBUTE
* Attributes
;
2143 } KSATTRIBUTE_LIST
, *PKSATTRIBUTE_LIST
;
2147 (NTAPI
*PFNKSPINSETDATAFORMAT
)(
2149 IN PKSDATAFORMAT OldFormat OPTIONAL
,
2150 IN PKSMULTIPLE_ITEM OldAttributeList OPTIONAL
,
2151 IN
const KSDATARANGE
* DataRange
,
2152 IN
const KSATTRIBUTE_LIST
* AttributeRange OPTIONAL
2157 (NTAPI
*PFNKSPINSETDEVICESTATE
)(
2160 IN KSSTATE FromState
2163 typedef struct _KSCLOCK_DISPATCH KSCLOCK_DISPATCH
, *PKSCLOCK_DISPATCH
;
2164 typedef struct _KSALLOCATOR_DISPATCH KSALLOCATOR_DISPATCH
, *PKSALLOCATOR_DISPATCH
;
2172 PFNKSPINSETDATAFORMAT SetDataFormat
;
2173 PFNKSPINSETDEVICESTATE SetDeviceState
;
2175 PFNKSPINVOID Disconnect
;
2176 const KSCLOCK_DISPATCH
* Clock
;
2177 const KSALLOCATOR_DISPATCH
* Allocator
;
2178 } KSPIN_DISPATCH
, *PKSPIN_DISPATCH
;
2182 (NTAPI
*PFNKSPINSETTIMER
)(
2185 IN LARGE_INTEGER DueTime
,
2191 (NTAPI
*PFNKSPINCANCELTIMER
)(
2198 (FASTCALL
*PFNKSPINCORRELATEDTIME
)(
2200 OUT PLONGLONG SystemTime
2205 (NTAPI
*PFNKSPINRESOLUTION
)(
2207 OUT PKSRESOLUTION Resolution
2210 struct _KSCLOCK_DISPATCH
{
2211 PFNKSPINSETTIMER SetTimer
;
2212 PFNKSPINCANCELTIMER CancelTimer
;
2213 PFNKSPINCORRELATEDTIME CorrelatedTime
;
2214 PFNKSPINRESOLUTION Resolution
;
2219 (NTAPI
*PFNKSPININITIALIZEALLOCATOR
)(
2221 IN PKSALLOCATOR_FRAMING AllocatorFraming
,
2225 typedef PVOID (NTAPI
*PFNKSDELETEALLOCATOR
)(
2228 typedef PVOID (NTAPI
*PFNKSDEFAULTALLOCATE
)(
2231 typedef PVOID (NTAPI
*PFNKSDEFAULTFREE
)(
2235 struct _KSALLOCATOR_DISPATCH
{
2236 PFNKSPININITIALIZEALLOCATOR InitializeAllocator
;
2237 PFNKSDELETEALLOCATOR DeleteAllocator
;
2238 PFNKSDEFAULTALLOCATE Allocate
;
2239 PFNKSDEFAULTFREE Free
;
2244 ULONG PropertySetsCount
;
2245 ULONG PropertyItemSize
;
2246 const KSPROPERTY_SET
* PropertySets
;
2247 ULONG MethodSetsCount
;
2248 ULONG MethodItemSize
;
2249 const KSMETHOD_SET
* MethodSets
;
2250 ULONG EventSetsCount
;
2251 ULONG EventItemSize
;
2252 const KSEVENT_SET
* EventSets
;
2253 #if !defined(_WIN64)
2256 } KSAUTOMATION_TABLE
, *PKSAUTOMATION_TABLE
;
2262 ULONG InterfacesCount
;
2263 const KSPIN_INTERFACE
* Interfaces
;
2265 const KSPIN_MEDIUM
* Mediums
;
2266 ULONG DataRangesCount
;
2267 const PKSDATARANGE
* DataRanges
;
2268 KSPIN_DATAFLOW DataFlow
;
2269 KSPIN_COMMUNICATION Communication
;
2270 const GUID
* Category
;
2275 ULONG ConstrainedDataRangesCount
;
2276 PKSDATARANGE
* ConstrainedDataRanges
;
2279 } KSPIN_DESCRIPTOR
, *PKSPIN_DESCRIPTOR
;
2283 (NTAPI
*PFNKSINTERSECTHANDLER
)(
2286 IN PKSDATARANGE DataRange
,
2287 OUT PVOID Data OPTIONAL
2292 (NTAPI
*PFNKSINTERSECTHANDLEREX
)(
2296 IN PKSDATARANGE DataRange
,
2297 IN PKSDATARANGE MatchingDataRange
,
2298 IN ULONG DataBufferSize
,
2299 OUT PVOID Data OPTIONAL
,
2305 const KSPIN_DISPATCH
* Dispatch
;
2306 const KSAUTOMATION_TABLE
* AutomationTable
;
2307 KSPIN_DESCRIPTOR PinDescriptor
;
2309 ULONG InstancesPossible
;
2310 ULONG InstancesNecessary
;
2311 const KSALLOCATOR_FRAMING_EX
* AllocatorFraming
;
2312 PFNKSINTERSECTHANDLEREX IntersectHandler
;
2313 } KSPIN_DESCRIPTOR_EX
, *PKSPIN_DESCRIPTOR_EX
;
2315 #define KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING 0x00000001
2316 #define KSFILTER_FLAG_CRITICAL_PROCESSING 0x00000002
2317 #define KSFILTER_FLAG_HYPERCRITICAL_PROCESSING 0x00000004
2318 #define KSFILTER_FLAG_RECEIVE_ZERO_LENGTH_SAMPLES 0x00000008
2319 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
2320 #define KSFILTER_FLAG_DENY_USERMODE_ACCESS 0x80000000
2324 #define KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING
2325 #define KSPIN_FLAG_CRITICAL_PROCESSING KSFILTER_FLAG_CRITICAL_PROCESSING
2326 #define KSPIN_FLAG_HYPERCRITICAL_PROCESSING KSFILTER_FLAG_HYPERCRITICAL_PROCESSING
2327 #define KSPIN_FLAG_ASYNCHRONOUS_PROCESSING 0x00000008
2328 #define KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING 0x00000010
2329 #define KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL 0x00000020
2330 #define KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING 0x00000040
2331 #define KSPIN_FLAG_ENFORCE_FIFO 0x00000080
2333 #define KSPIN_FLAG_GENERATE_MAPPINGS 0x00000100
2334 #define KSPIN_FLAG_DISTINCT_TRAILING_EDGE 0x00000200
2336 #define KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY 0x00010000
2337 #define KSPIN_FLAG_SPLITTER 0x00020000
2338 #define KSPIN_FLAG_USE_STANDARD_TRANSPORT 0x00040000
2339 #define KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT 0x00080000
2340 #define KSPIN_FLAG_FIXED_FORMAT 0x00100000
2341 #define KSPIN_FLAG_GENERATE_EOS_EVENTS 0x00200000
2342 #define KSPIN_FLAG_RENDERER (KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY|KSPIN_FLAG_GENERATE_EOS_EVENTS)
2343 #define KSPIN_FLAG_IMPLEMENT_CLOCK 0x00400000
2344 #define KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING 0x00800000
2345 #define KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE 0x01000000
2346 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
2347 #define KSPIN_FLAG_DENY_USERMODE_ACCESS 0x80000000
2352 const KSPIN_DESCRIPTOR_EX
* Descriptor
;
2356 KSPIN_COMMUNICATION Communication
;
2357 BOOLEAN ConnectionIsExternal
;
2358 KSPIN_INTERFACE ConnectionInterface
;
2359 KSPIN_MEDIUM ConnectionMedium
;
2360 KSPRIORITY ConnectionPriority
;
2361 PKSDATAFORMAT ConnectionFormat
;
2362 PKSMULTIPLE_ITEM AttributeList
;
2363 ULONG StreamHeaderSize
;
2364 KSPIN_DATAFLOW DataFlow
;
2365 KSSTATE DeviceState
;
2367 KSSTATE ClientState
;
2370 #define DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(Handler)\
2371 DEFINE_KSPROPERTY_ITEM(\
2372 KSPROPERTY_PIN_CINSTANCES,\
2375 sizeof(KSPIN_CINSTANCES),\
2376 NULL, NULL, 0, NULL, NULL, 0)
2378 #define DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(Handler)\
2379 DEFINE_KSPROPERTY_ITEM(\
2380 KSPROPERTY_PIN_CTYPES,\
2382 sizeof(KSPROPERTY),\
2384 NULL, NULL, 0, NULL, NULL, 0)
2386 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(Handler)\
2387 DEFINE_KSPROPERTY_ITEM(\
2388 KSPROPERTY_PIN_DATAFLOW,\
2391 sizeof(KSPIN_DATAFLOW),\
2392 NULL, NULL, 0, NULL, NULL, 0)
2394 #define DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(Handler)\
2395 DEFINE_KSPROPERTY_ITEM(\
2396 KSPROPERTY_PIN_DATARANGES,\
2400 NULL, NULL, 0, NULL, NULL, 0)
2402 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(Handler)\
2403 DEFINE_KSPROPERTY_ITEM(\
2404 KSPROPERTY_PIN_DATAINTERSECTION,\
2406 sizeof(KSP_PIN) + sizeof(KSMULTIPLE_ITEM),\
2408 NULL, NULL, 0, NULL, NULL, 0)
2410 #define DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(Handler)\
2411 DEFINE_KSPROPERTY_ITEM(\
2412 KSPROPERTY_PIN_INTERFACES,\
2416 NULL, NULL, 0, NULL, NULL, 0)
2418 #define DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(Handler)\
2419 DEFINE_KSPROPERTY_ITEM(\
2420 KSPROPERTY_PIN_MEDIUMS,\
2424 NULL, NULL, 0, NULL, NULL, 0)
2426 #define DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(Handler)\
2427 DEFINE_KSPROPERTY_ITEM(\
2428 KSPROPERTY_PIN_COMMUNICATION,\
2431 sizeof(KSPIN_COMMUNICATION),\
2432 NULL, NULL, 0, NULL, NULL, 0)
2434 #define DEFINE_KSPROPERTY_ITEM_PIN_GLOBALCINSTANCES(Handler)\
2435 DEFINE_KSPROPERTY_ITEM(\
2436 KSPROPERTY_PIN_GLOBALCINSTANCES,\
2439 sizeof(KSPIN_CINSTANCES),\
2440 NULL, NULL, 0, NULL, NULL, 0)
2442 #define DEFINE_KSPROPERTY_ITEM_PIN_NECESSARYINSTANCES(Handler)\
2443 DEFINE_KSPROPERTY_ITEM(\
2444 KSPROPERTY_PIN_NECESSARYINSTANCES,\
2448 NULL, NULL, 0, NULL, NULL, 0)
2450 #define DEFINE_KSPROPERTY_ITEM_PIN_PHYSICALCONNECTION(Handler)\
2451 DEFINE_KSPROPERTY_ITEM(\
2452 KSPROPERTY_PIN_PHYSICALCONNECTION,\
2456 NULL, NULL, 0, NULL, NULL, 0)
2458 #define DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(Handler)\
2459 DEFINE_KSPROPERTY_ITEM(\
2460 KSPROPERTY_PIN_CATEGORY,\
2464 NULL, NULL, 0, NULL, NULL, 0)
2466 #define DEFINE_KSPROPERTY_ITEM_PIN_NAME(Handler)\
2467 DEFINE_KSPROPERTY_ITEM(\
2468 KSPROPERTY_PIN_NAME,\
2472 NULL, NULL, 0, NULL, NULL, 0)
2474 #define DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(Handler)\
2475 DEFINE_KSPROPERTY_ITEM(\
2476 KSPROPERTY_PIN_CONSTRAINEDDATARANGES,\
2480 NULL, NULL, 0, NULL, NULL, 0)
2482 #define DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(Handler)\
2483 DEFINE_KSPROPERTY_ITEM(\
2484 KSPROPERTY_PIN_PROPOSEDATAFORMAT,\
2487 sizeof(KSDATAFORMAT),\
2488 (Handler), NULL, 0, NULL, NULL, 0)
2490 #define DEFINE_KSPROPERTY_PINSET(PinSet,\
2491 PropGeneral, PropInstances, PropIntersection)\
2492 DEFINE_KSPROPERTY_TABLE(PinSet) {\
2493 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
2494 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
2495 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
2496 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
2497 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
2498 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
2499 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
2500 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
2501 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
2502 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral)\
2505 #define DEFINE_KSPROPERTY_PINSETCONSTRAINED(PinSet,\
2506 PropGeneral, PropInstances, PropIntersection)\
2507 DEFINE_KSPROPERTY_TABLE(PinSet) {\
2508 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
2509 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
2510 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
2511 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
2512 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
2513 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
2514 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
2515 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
2516 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
2517 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral),\
2518 DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral)\
2531 #define DEFINE_KSPROPERTY_TABLE(tablename)\
2532 const KSPROPERTY_ITEM tablename[] =
2538 KSPIN_INTERFACE Interface
;
2539 KSPIN_MEDIUM Medium
;
2542 KSPRIORITY Priority
;
2543 } KSPIN_CONNECT
, *PKSPIN_CONNECT
;
2545 /* ===============================================================
2555 } KSTOPOLOGY_CONNECTION
, *PKSTOPOLOGY_CONNECTION
;
2559 ULONG CategoriesCount
;
2560 const GUID
* Categories
;
2561 ULONG TopologyNodesCount
;
2562 const GUID
* TopologyNodes
;
2563 ULONG TopologyConnectionsCount
;
2564 const KSTOPOLOGY_CONNECTION
* TopologyConnections
;
2565 const GUID
* TopologyNodesNames
;
2567 } KSTOPOLOGY
, *PKSTOPOLOGY
;
2570 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler)\
2571 DEFINE_KSPROPERTY_ITEM(\
2572 KSPROPERTY_TOPOLOGY_CATEGORIES,\
2574 sizeof(KSPROPERTY),\
2576 NULL, NULL, 0, NULL, NULL, 0)
2578 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler)\
2579 DEFINE_KSPROPERTY_ITEM(\
2580 KSPROPERTY_TOPOLOGY_NODES,\
2582 sizeof(KSPROPERTY),\
2584 NULL, NULL, 0, NULL, NULL, 0)
2586 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler)\
2587 DEFINE_KSPROPERTY_ITEM(\
2588 KSPROPERTY_TOPOLOGY_CONNECTIONS,\
2590 sizeof(KSPROPERTY),\
2592 NULL, NULL, 0, NULL, NULL, 0)
2594 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\
2595 DEFINE_KSPROPERTY_ITEM(\
2596 KSPROPERTY_TOPOLOGY_NAME,\
2600 NULL, NULL, 0, NULL, NULL, 0)
2602 #define DEFINE_KSPROPERTY_TOPOLOGYSET(TopologySet, Handler)\
2603 DEFINE_KSPROPERTY_TABLE(TopologySet) {\
2604 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler),\
2605 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler),\
2606 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler),\
2607 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\
2610 /* ===============================================================
2615 typedef void* UNKNOWN
;
2617 typedef PVOID (NTAPI
*PFNKSINITIALIZEALLOCATOR
)(
2618 IN PVOID InitialContext
,
2619 IN PKSALLOCATOR_FRAMING AllocatorFraming
,
2620 OUT PVOID
* Context
);
2622 #if defined(_NTDDK_)
2623 typedef NTSTATUS (NTAPI
*PFNKSALLOCATOR
)(
2625 IN ULONG BufferSize
,
2626 IN BOOLEAN InputOperation
);
2628 typedef NTSTATUS (NTAPI
*PFNKINTERSECTHANDLEREX
)(
2632 IN PKSDATARANGE DataRange
,
2633 IN PKSDATARANGE MatchingDataRange
,
2634 IN ULONG DataBufferSize
,
2635 OUT PVOID Data OPTIONAL
,
2636 OUT PULONG DataSize
);
2641 (NTAPI
*PFNALLOCATOR_ALLOCATEFRAME
)(
2642 IN PFILE_OBJECT FileObject
,
2648 (NTAPI
*PFNALLOCATOR_FREEFRAME
)(
2649 IN PFILE_OBJECT FileObject
,
2654 PFNALLOCATOR_ALLOCATEFRAME AllocateFrame
;
2655 PFNALLOCATOR_FREEFRAME FreeFrame
;
2656 } KSSTREAMALLOCATOR_FUNCTIONTABLE
, *PKSSTREAMALLOCATOR_FUNCTIONTABLE
;
2662 KSALLOCATOR_FRAMING Framing
;
2663 ULONG AllocatedFrames
;
2665 } KSSTREAMALLOCATOR_STATUS
, *PKSSTREAMALLOCATOR_STATUS
;
2669 KSALLOCATOR_FRAMING_EX Framing
;
2670 ULONG AllocatedFrames
;
2672 } KSSTREAMALLOCATOR_STATUS_EX
, *PKSSTREAMALLOCATOR_STATUS_EX
;
2677 ULONG TypeSpecificFlags
;
2678 KSTIME PresentationTime
;
2687 } KSSTREAM_HEADER
, *PKSSTREAM_HEADER
;
2689 #define KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT 0x00000001
2690 #define KSSTREAM_HEADER_OPTIONSF_PREROLL 0x00000002
2691 #define KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY 0x00000004
2692 #define KSSTREAM_HEADER_OPTIONSF_TYPECHANGED 0x00000008
2693 #define KSSTREAM_HEADER_OPTIONSF_TIMEVALID 0x00000010
2694 #define KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY 0x00000040
2695 #define KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE 0x00000080
2696 #define KSSTREAM_HEADER_OPTIONSF_DURATIONVALID 0x00000100
2697 #define KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM 0x00000200
2698 #define KSSTREAM_HEADER_OPTIONSF_BUFFEREDTRANSFER 0x00000400
2699 #define KSSTREAM_HEADER_OPTIONSF_VRAM_DATA_TRANSFER 0x00000800
2700 #define KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA 0x80000000
2702 /* ===============================================================
2705 #if defined(_NTDDK_)
2707 PHYSICAL_ADDRESS PhysicalAddress
;
2714 KSSTREAM_POINTER_STATE_UNLOCKED
= 0,
2715 KSSTREAM_POINTER_STATE_LOCKED
2716 } KSSTREAM_POINTER_STATE
;
2718 typedef struct _KSGATE KSGATE
, *PKSGATE
;
2719 typedef struct _KSPROCESSPIN_INDEXENTRY KSPROCESSPIN_INDEXENTRY
, *PKSPROCESSPIN_INDEXENTRY
;
2726 struct _KSSTREAM_POINTER_OFFSET
2728 #if defined(_NTDDK_)
2731 PKSMAPPING Mappings
;
2736 #if !defined(_WIN64)
2742 #if defined(_NTDDK_)
2743 struct _KSSTREAM_POINTER
2747 PKSSTREAM_HEADER StreamHeader
;
2748 PKSSTREAM_POINTER_OFFSET Offset
;
2749 KSSTREAM_POINTER_OFFSET OffsetIn
;
2750 KSSTREAM_POINTER_OFFSET OffsetOut
;
2753 struct _KSPROCESSPIN
2756 PKSSTREAM_POINTER StreamPointer
;
2757 PKSPROCESSPIN InPlaceCounterpart
;
2758 PKSPROCESSPIN DelegateBranch
;
2759 PKSPROCESSPIN CopySource
;
2761 ULONG BytesAvailable
;
2767 struct _KSPROCESSPIN_INDEXENTRY
2769 PKSPROCESSPIN
* Pins
;
2774 /* ===============================================================
2780 #if defined(_NTDDK_)
2782 typedef struct _KSFILTER_DISPATCH KSFILTER_DISPATCH
, *PKSFILTER_DISPATCH
;
2783 typedef struct _KSDEVICE KSDEVICE
, *PKSDEVICE
;
2784 typedef struct _KSFILTER KSFILTER
, *PKSFILTER
;
2785 typedef struct _KSNODE_DESCRIPTOR KSNODE_DESCRIPTOR
, *PKSNODE_DESCRIPTOR
;
2786 typedef struct _KSFILTER_DESCRIPTOR KSFILTER_DESCRIPTOR
, *PKSFILTER_DESCRIPTOR
;
2787 typedef struct _KSDEVICE_DESCRIPTOR KSDEVICE_DESCRIPTOR
, *PKSDEVICE_DESCRIPTOR
;
2789 typedef NTSTATUS (NTAPI
*PFNKSDEVICECREATE
)(
2790 IN PKSDEVICE Device
);
2792 typedef NTSTATUS (NTAPI
*PFNKSDEVICEPNPSTART
)(
2793 IN PKSDEVICE Device
,
2795 IN PCM_RESOURCE_LIST TranslatedResourceList OPTIONAL
,
2796 IN PCM_RESOURCE_LIST UntranslatedResourceList OPTIONAL
);
2798 typedef NTSTATUS (NTAPI
*PFNKSDEVICE
)(
2799 IN PKSDEVICE Device
);
2801 typedef NTSTATUS (NTAPI
*PFNKSDEVICEIRP
)(
2802 IN PKSDEVICE Device
,
2805 typedef VOID (NTAPI
*PFNKSDEVICEIRPVOID
)(
2806 IN PKSDEVICE Device
,
2809 typedef NTSTATUS (NTAPI
*PFNKSDEVICEQUERYCAPABILITIES
)(
2810 IN PKSDEVICE Device
,
2812 IN OUT PDEVICE_CAPABILITIES Capabilities
);
2814 typedef NTSTATUS (NTAPI
*PFNKSDEVICEQUERYPOWER
)(
2815 IN PKSDEVICE Device
,
2817 IN DEVICE_POWER_STATE DeviceTo
,
2818 IN DEVICE_POWER_STATE DeviceFrom
,
2819 IN SYSTEM_POWER_STATE SystemTo
,
2820 IN SYSTEM_POWER_STATE SystemFrom
,
2821 IN POWER_ACTION Action
);
2823 typedef VOID (NTAPI
*PFNKSDEVICESETPOWER
)(
2824 IN PKSDEVICE Device
,
2826 IN DEVICE_POWER_STATE To
,
2827 IN DEVICE_POWER_STATE From
);
2829 typedef struct _KSDEVICE_DISPATCH
{
2830 PFNKSDEVICECREATE Add
;
2831 PFNKSDEVICEPNPSTART Start
;
2832 PFNKSDEVICE PostStart
;
2833 PFNKSDEVICEIRP QueryStop
;
2834 PFNKSDEVICEIRPVOID CancelStop
;
2835 PFNKSDEVICEIRPVOID Stop
;
2836 PFNKSDEVICEIRP QueryRemove
;
2837 PFNKSDEVICEIRPVOID CancelRemove
;
2838 PFNKSDEVICEIRPVOID Remove
;
2839 PFNKSDEVICEQUERYCAPABILITIES QueryCapabilities
;
2840 PFNKSDEVICEIRPVOID SurpriseRemoval
;
2841 PFNKSDEVICEQUERYPOWER QueryPower
;
2842 PFNKSDEVICESETPOWER SetPower
;
2843 PFNKSDEVICEIRP QueryInterface
;
2844 }KSDEVICE_DISPATCH
, *PKSDEVICE_DISPATCH
;
2846 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
2847 #define KSDEVICE_DESCRIPTOR_VERSION_2 (0x110)
2848 #define MIN_DEV_VER_FOR_FLAGS (0x110)
2853 const KSDEVICE_DESCRIPTOR
* Descriptor
;
2856 PDEVICE_OBJECT FunctionalDeviceObject
;
2857 PDEVICE_OBJECT PhysicalDeviceObject
;
2858 PDEVICE_OBJECT NextDeviceObject
;
2860 SYSTEM_POWER_STATE SystemPowerState
;
2861 DEVICE_POWER_STATE DevicePowerState
;
2865 /* ===============================================================
2868 #if defined(_NTDDK_)
2871 const KSFILTER_DESCRIPTOR
* Descriptor
;
2878 (NTAPI
*PFNKSFILTERPOWER
)(
2879 IN PKSFILTER Filter
,
2880 IN DEVICE_POWER_STATE State
2883 typedef NTSTATUS (NTAPI
*PFNKSFILTERIRP
)(
2884 IN PKSFILTER Filter
,
2887 typedef NTSTATUS (NTAPI
*PFNKSFILTERPROCESS
)(
2888 IN PKSFILTER Filter
,
2889 IN PKSPROCESSPIN_INDEXENTRY ProcessPinsIndex
);
2891 typedef NTSTATUS (NTAPI
*PFNKSFILTERVOID
)(
2892 IN PKSFILTER Filter
);
2894 struct _KSFILTER_DISPATCH
2896 PFNKSFILTERIRP Create
;
2897 PFNKSFILTERIRP Close
;
2898 PFNKSFILTERPROCESS Process
;
2899 PFNKSFILTERVOID Reset
;
2902 struct _KSNODE_DESCRIPTOR
2904 const KSAUTOMATION_TABLE
* AutomationTable
;
2909 struct _KSFILTER_DESCRIPTOR
2911 const KSFILTER_DISPATCH
* Dispatch
;
2912 const KSAUTOMATION_TABLE
* AutomationTable
;
2915 const GUID
* ReferenceGuid
;
2916 ULONG PinDescriptorsCount
;
2917 ULONG PinDescriptorSize
;
2918 const KSPIN_DESCRIPTOR_EX
* PinDescriptors
;
2919 ULONG CategoriesCount
;
2920 const GUID
* Categories
;
2921 ULONG NodeDescriptorsCount
;
2922 ULONG NodeDescriptorSize
;
2923 const KSNODE_DESCRIPTOR
* NodeDescriptors
;
2924 ULONG ConnectionsCount
;
2925 const KSTOPOLOGY_CONNECTION
* Connections
;
2926 const KSCOMPONENTID
* ComponentId
;
2929 #define KSFILTER_DESCRIPTOR_VERSION ((ULONG)-1)
2931 struct _KSDEVICE_DESCRIPTOR
2933 const KSDEVICE_DISPATCH
* Dispatch
;
2934 ULONG FilterDescriptorsCount
;
2935 const KSFILTER_DESCRIPTOR
*const* FilterDescriptors
;
2940 struct _KSFILTERFACTORY
{
2941 const KSFILTER_DESCRIPTOR
* FilterDescriptor
;
2946 #define DEFINE_KSFILTER_DESCRIPTOR(descriptor)\
2947 const KSFILTER_DESCRIPTOR descriptor =
2949 #define DEFINE_KSFILTER_PIN_DESCRIPTORS(table)\
2950 SIZEOF_ARRAY(table),\
2954 #define DEFINE_KSFILTER_CATEGORIES(table)\
2955 SIZEOF_ARRAY(table),\
2958 #define DEFINE_KSFILTER_CATEGORY(category)\
2962 #define DEFINE_KSFILTER_CATEGORIES_NULL\
2966 #define DEFINE_KSFILTER_NODE_DESCRIPTORS(table)\
2967 SIZEOF_ARRAY(table),\
2971 #define DEFINE_KSFILTER_NODE_DESCRIPTORS_NULL\
2973 sizeof(KSNODE_DESCRIPTOR),\
2976 #define DEFINE_KSFILTER_CONNECTIONS(table)\
2977 SIZEOF_ARRAY(table),\
2980 #define DEFINE_KSFILTER_DEFAULT_CONNECTIONS\
2985 /* ===============================================================
2986 Minidriver Callbacks
2988 #if defined(_NTDDK_)
2989 typedef NTSTATUS (NTAPI
*KStrMethodHandler
)(
2991 IN PKSIDENTIFIER Request
,
2994 typedef NTSTATUS (NTAPI
*KStrSupportHandler
)(
2996 IN PKSIDENTIFIER Request
,
3000 /* ===============================================================
3003 #if defined(_NTDDK_)
3004 KSDDKAPI NTSTATUS NTAPI
3006 IN HANDLE ConnectionHandle
,
3007 IN PKSALLOCATOR_FRAMING AllocatorFraming
,
3008 OUT PHANDLE AllocatorHandle
);
3010 KSDDKAPI NTSTATUS NTAPI
3011 KsCreateDefaultAllocator(
3014 KSDDKAPI NTSTATUS NTAPI
3015 KsValidateAllocatorCreateRequest(
3017 OUT PKSALLOCATOR_FRAMING
* AllocatorFraming
);
3019 KSDDKAPI NTSTATUS NTAPI
3020 KsCreateDefaultAllocatorEx(
3022 IN PVOID InitializeContext OPTIONAL
,
3023 IN PFNKSDEFAULTALLOCATE DefaultAllocate OPTIONAL
,
3024 IN PFNKSDEFAULTFREE DefaultFree OPTIONAL
,
3025 IN PFNKSINITIALIZEALLOCATOR InitializeAllocator OPTIONAL
,
3026 IN PFNKSDELETEALLOCATOR DeleteAllocator OPTIONAL
);
3028 KSDDKAPI NTSTATUS NTAPI
3029 KsValidateAllocatorFramingEx(
3030 IN PKSALLOCATOR_FRAMING_EX Framing
,
3031 IN ULONG BufferSize
,
3032 IN
const KSALLOCATOR_FRAMING_EX
* PinFraming
);
3035 /* ===============================================================
3038 #if defined(_NTDDK_)
3039 typedef BOOLEAN (NTAPI
*PFNKSSETTIMER
)(
3042 IN LARGE_INTEGER DueTime
,
3045 typedef BOOLEAN (NTAPI
*PFNKSCANCELTIMER
)(
3049 typedef LONGLONG (FASTCALL
*PFNKSCORRELATEDTIME
)(
3051 OUT PLONGLONG SystemTime
);
3053 KSDDKAPI NTSTATUS NTAPI
3055 IN HANDLE ConnectionHandle
,
3056 IN PKSCLOCK_CREATE ClockCreate
,
3057 OUT PHANDLE ClockHandle
);
3059 KSDDKAPI NTSTATUS NTAPI
3060 KsCreateDefaultClock(
3062 IN PKSDEFAULTCLOCK DefaultClock
);
3064 KSDDKAPI NTSTATUS NTAPI
3065 KsAllocateDefaultClock(
3066 OUT PKSDEFAULTCLOCK
* DefaultClock
);
3068 KSDDKAPI NTSTATUS NTAPI
3069 KsAllocateDefaultClockEx(
3070 OUT PKSDEFAULTCLOCK
* DefaultClock
,
3071 IN PVOID Context OPTIONAL
,
3072 IN PFNKSSETTIMER SetTimer OPTIONAL
,
3073 IN PFNKSCANCELTIMER CancelTimer OPTIONAL
,
3074 IN PFNKSCORRELATEDTIME CorrelatedTime OPTIONAL
,
3075 IN
const KSRESOLUTION
* Resolution OPTIONAL
,
3080 IN PKSDEFAULTCLOCK DefaultClock
);
3082 KSDDKAPI NTSTATUS NTAPI
3083 KsValidateClockCreateRequest(
3085 OUT PKSCLOCK_CREATE
* ClockCreate
);
3087 KSDDKAPI KSSTATE NTAPI
3088 KsGetDefaultClockState(
3089 IN PKSDEFAULTCLOCK DefaultClock
);
3092 KsSetDefaultClockState(
3093 IN PKSDEFAULTCLOCK DefaultClock
,
3096 KSDDKAPI LONGLONG NTAPI
3097 KsGetDefaultClockTime(
3098 IN PKSDEFAULTCLOCK DefaultClock
);
3101 KsSetDefaultClockTime(
3102 IN PKSDEFAULTCLOCK DefaultClock
,
3106 /* ===============================================================
3110 /* Method sets - TODO: Make into macros! */
3111 #if defined(_NTDDK_)
3114 KSMETHOD_SET_IRP_STORAGE(
3118 KSMETHOD_ITEM_IRP_STORAGE(
3122 KSMETHOD_TYPE_IRP_STORAGE(
3126 KSDDKAPI NTSTATUS NTAPI
3129 IN ULONG MethodSetsCount
,
3130 IN PKSMETHOD_SET MethodSet
);
3132 KSDDKAPI NTSTATUS NTAPI
3133 KsMethodHandlerWithAllocator(
3135 IN ULONG MethodSetsCount
,
3136 IN PKSMETHOD_SET MethodSet
,
3137 IN PFNKSALLOCATOR Allocator OPTIONAL
,
3138 IN ULONG MethodItemSize OPTIONAL
);
3140 KSDDKAPI BOOLEAN NTAPI
3141 KsFastMethodHandler(
3142 IN PFILE_OBJECT FileObject
,
3143 IN PKSMETHOD UNALIGNED Method
,
3144 IN ULONG MethodLength
,
3145 IN OUT PVOID UNALIGNED Data
,
3146 IN ULONG DataLength
,
3147 OUT PIO_STATUS_BLOCK IoStatus
,
3148 IN ULONG MethodSetsCount
,
3149 IN
const KSMETHOD_SET
* MethodSet
);
3152 /* ===============================================================
3155 #if defined(_NTDDK_)
3156 KSDDKAPI NTSTATUS NTAPI
3159 IN ULONG PropertySetsCount
,
3160 IN
const KSPROPERTY_SET
* PropertySet
);
3162 KSDDKAPI NTSTATUS NTAPI
3163 KsPropertyHandlerWithAllocator(
3165 IN ULONG PropertySetsCount
,
3166 IN PKSPROPERTY_SET PropertySet
,
3167 IN PFNKSALLOCATOR Allocator OPTIONAL
,
3168 IN ULONG PropertyItemSize OPTIONAL
);
3170 KSDDKAPI NTSTATUS NTAPI
3171 KsUnserializeObjectPropertiesFromRegistry(
3172 IN PFILE_OBJECT FileObject
,
3173 IN HANDLE ParentKey OPTIONAL
,
3174 IN PUNICODE_STRING RegistryPath OPTIONAL
);
3176 KSDDKAPI BOOLEAN NTAPI
3177 KsFastPropertyHandler(
3178 IN PFILE_OBJECT FileObject
,
3179 IN PKSPROPERTY UNALIGNED Property
,
3180 IN ULONG PropertyLength
,
3181 IN OUT PVOID UNALIGNED Data
,
3182 IN ULONG DataLength
,
3183 OUT PIO_STATUS_BLOCK IoStatus
,
3184 IN ULONG PropertySetsCount
,
3185 IN
const KSPROPERTY_SET
* PropertySet
);
3188 /* ===============================================================
3192 #if defined(_NTDDK_)
3194 #define KSPROBE_STREAMREAD 0x00000000
3195 #define KSPROBE_STREAMWRITE 0x00000001
3196 #define KSPROBE_ALLOCATEMDL 0x00000010
3197 #define KSPROBE_PROBEANDLOCK 0x00000020
3198 #define KSPROBE_SYSTEMADDRESS 0x00000040
3199 #define KSPROBE_MODIFY 0x00000200
3200 #define KSPROBE_STREAMWRITEMODIFY (KSPROBE_MODIFY | KSPROBE_STREAMWRITE)
3201 #define KSPROBE_ALLOWFORMATCHANGE 0x00000080
3203 #define KSSTREAM_READ KSPROBE_STREAMREAD
3204 #define KSSTREAM_WRITE KSPROBE_STREAMWRITE
3205 #define KSSTREAM_PAGED_DATA 0x00000000
3206 #define KSSTREAM_NONPAGED_DATA 0x00000100
3207 #define KSSTREAM_SYNCHRONOUS 0x00001000
3208 #define KSSTREAM_FAILUREEXCEPTION 0x00002000
3212 (NTAPI
*PFNKSGENERATEEVENTCALLBACK
)(
3214 IN PKSEVENT_ENTRY EventEntry
3217 KSDDKAPI NTSTATUS NTAPI
3219 IN PKSEVENT_ENTRY EntryEvent
);
3224 IN
const GUID
* EventSet OPTIONAL
,
3227 IN PVOID Data OPTIONAL
,
3228 IN PFNKSGENERATEEVENTCALLBACK CallBack OPTIONAL
,
3229 IN PVOID CallBackContext OPTIONAL
3233 KSDDKAPI NTSTATUS NTAPI
3234 KsEnableEventWithAllocator(
3236 IN ULONG EventSetsCount
,
3237 IN PKSEVENT_SET EventSet
,
3238 IN OUT PLIST_ENTRY EventsList OPTIONAL
,
3239 IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL
,
3240 IN PVOID EventsLock OPTIONAL
,
3241 IN PFNKSALLOCATOR Allocator OPTIONAL
,
3242 IN ULONG EventItemSize OPTIONAL
);
3244 KSDDKAPI NTSTATUS NTAPI
3245 KsGenerateDataEvent(
3246 IN PKSEVENT_ENTRY EventEntry
,
3250 KSDDKAPI NTSTATUS NTAPI
3253 IN ULONG EventSetsCount
,
3254 IN KSEVENT_SET
* EventSet
,
3255 IN OUT PLIST_ENTRY EventsList OPTIONAL
,
3256 IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL
,
3257 IN PVOID EventsLock OPTIONAL
);
3261 IN PKSEVENT_ENTRY EventEntry
);
3263 KSDDKAPI NTSTATUS NTAPI
3266 IN OUT PLIST_ENTRY EventsList
,
3267 IN KSEVENTS_LOCKTYPE EventsFlags
,
3268 IN PVOID EventsLock
);
3272 IN PFILE_OBJECT FileObject
,
3273 IN OUT PLIST_ENTRY EventsList
,
3274 IN KSEVENTS_LOCKTYPE EVentsFlags
,
3275 IN PVOID EventsLock
);
3277 /* ===============================================================
3281 KSDDKAPI NTSTATUS NTAPI
3282 KsValidateTopologyNodeCreateRequest(
3284 IN PKSTOPOLOGY Topology
,
3285 OUT PKSNODE_CREATE
* NodeCreate
);
3287 KSDDKAPI NTSTATUS NTAPI
3288 KsCreateTopologyNode(
3289 IN HANDLE ParentHandle
,
3290 IN PKSNODE_CREATE NodeCreate
,
3291 IN ACCESS_MASK DesiredAccess
,
3292 OUT PHANDLE NodeHandle
);
3294 KSDDKAPI NTSTATUS NTAPI
3295 KsTopologyPropertyHandler(
3297 IN PKSPROPERTY Property
,
3299 IN
const KSTOPOLOGY
* Topology
);
3303 /* ===============================================================
3304 Connectivity Functions
3307 KSDDKAPI NTSTATUS NTAPI
3309 IN HANDLE FilterHandle
,
3310 IN PKSPIN_CONNECT Connect
,
3311 IN ACCESS_MASK DesiredAccess
,
3312 OUT PHANDLE ConnectionHandle
);
3314 KSDDKAPI NTSTATUS NTAPI
3315 KsValidateConnectRequest(
3317 IN ULONG DescriptorsCount
,
3318 IN KSPIN_DESCRIPTOR
* Descriptor
,
3319 OUT PKSPIN_CONNECT
* Connect
);
3321 KSDDKAPI NTSTATUS NTAPI
3322 KsPinPropertyHandler(
3324 IN PKSPROPERTY Property
,
3326 IN ULONG DescriptorsCount
,
3327 IN
const KSPIN_DESCRIPTOR
* Descriptor
);
3329 KSDDKAPI NTSTATUS NTAPI
3330 KsPinDataIntersection(
3334 IN ULONG DescriptorsCount
,
3335 IN
const KSPIN_DESCRIPTOR
* Descriptor
,
3336 IN PFNKSINTERSECTHANDLER IntersectHandler
);
3338 KSDDKAPI NTSTATUS NTAPI
3339 KsPinDataIntersectionEx(
3343 IN ULONG DescriptorsCount
,
3344 IN
const KSPIN_DESCRIPTOR
* Descriptor
,
3345 IN ULONG DescriptorSize
,
3346 IN PFNKSINTERSECTHANDLEREX IntersectHandler OPTIONAL
,
3347 IN PVOID HandlerContext OPTIONAL
);
3349 KSDDKAPI PKSFILTER NTAPI
3350 KsPinGetParentFilter(
3354 KSDDKAPI PKSPIN NTAPI
3355 KsPinGetNextSiblingPin(
3360 /* Does this belong here? */
3362 KSDDKAPI NTSTATUS NTAPI
3363 KsHandleSizedListQuery(
3365 IN ULONG DataItemsCount
,
3366 IN ULONG DataItemSize
,
3367 IN
const VOID
* DataItems
);
3370 /* ===============================================================
3371 IRP Helper Functions
3374 typedef NTSTATUS (NTAPI
*PFNKSIRPLISTCALLBACK
)(
3378 KSDDKAPI NTSTATUS NTAPI
3379 KsAcquireResetValue(
3381 OUT KSRESET
* ResetValue
);
3384 KsAddIrpToCancelableQueue(
3385 IN OUT PLIST_ENTRY QueueHead
,
3386 IN PKSPIN_LOCK SpinLock
,
3388 IN KSLIST_ENTRY_LOCATION ListLocation
,
3389 IN PDRIVER_CANCEL DriverCancel OPTIONAL
);
3391 KSDDKAPI NTSTATUS NTAPI
3392 KsAddObjectCreateItemToDeviceHeader(
3393 IN KSDEVICE_HEADER Header
,
3394 IN PDRIVER_DISPATCH Create
,
3396 IN PWCHAR ObjectClass
,
3397 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
3399 KSDDKAPI NTSTATUS NTAPI
3400 KsAddObjectCreateItemToObjectHeader(
3401 IN KSOBJECT_HEADER Header
,
3402 IN PDRIVER_DISPATCH Create
,
3404 IN PWCHAR ObjectClass
,
3405 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
3407 KSDDKAPI NTSTATUS NTAPI
3408 KsAllocateDeviceHeader(
3409 OUT KSDEVICE_HEADER
* Header
,
3410 IN ULONG ItemsCount
,
3411 IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL
);
3413 KSDDKAPI NTSTATUS NTAPI
3414 KsAllocateExtraData(
3417 OUT PVOID
* ExtraBuffer
);
3419 KSDDKAPI NTSTATUS NTAPI
3420 KsAllocateObjectCreateItem(
3421 IN KSDEVICE_HEADER Header
,
3422 IN PKSOBJECT_CREATE_ITEM CreateItem
,
3423 IN BOOLEAN AllocateEntry
,
3424 IN PFNKSITEMFREECALLBACK ItemFreeCallback OPTIONAL
);
3426 KSDDKAPI NTSTATUS NTAPI
3427 KsAllocateObjectHeader(
3428 OUT KSOBJECT_HEADER
*Header
,
3429 IN ULONG ItemsCount
,
3430 IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL
,
3432 IN KSDISPATCH_TABLE
* Table
);
3436 IN OUT PLIST_ENTRY QueueHead
,
3437 IN PKSPIN_LOCK SpinLock
);
3441 IN PDEVICE_OBJECT DeviceObject
,
3444 KSDDKAPI NTSTATUS NTAPI
3445 KsDefaultDeviceIoCompletion(
3446 IN PDEVICE_OBJECT DeviceObject
,
3450 KSDDKAPI ULONG NTAPI
3451 KsDecrementCountedWorker(
3452 IN PKSWORKER Worker);
3455 KSDDKAPI BOOLEAN NTAPI
3456 KsDispatchFastIoDeviceControlFailure(
3457 IN PFILE_OBJECT FileObject
,
3459 IN PVOID InputBuffer OPTIONAL
,
3460 IN ULONG InputBufferLength
,
3461 OUT PVOID OutputBuffer OPTIONAL
,
3462 IN ULONG OutputBufferLength
,
3463 IN ULONG IoControlCode
,
3464 OUT PIO_STATUS_BLOCK IoStatus
,
3465 IN PDEVICE_OBJECT DeviceObject
); /* always return false */
3467 KSDDKAPI BOOLEAN NTAPI
3468 KsDispatchFastReadFailure(
3469 IN PFILE_OBJECT FileObject
,
3470 IN PLARGE_INTEGER FileOffset
,
3475 OUT PIO_STATUS_BLOCK IoStatus
,
3476 IN PDEVICE_OBJECT DeviceObject
); /* always return false */
3478 /* This function does the same as the above */
3479 #define KsDispatchFastWriteFailure KsDispatchFastReadFailure
3481 KSDDKAPI NTSTATUS NTAPI
3482 KsDispatchInvalidDeviceRequest(
3483 IN PDEVICE_OBJECT DeviceObject
,
3486 KSDDKAPI NTSTATUS NTAPI
3488 IN PDEVICE_OBJECT DeviceObject
,
3491 KSDDKAPI NTSTATUS NTAPI
3492 KsDispatchSpecificMethod(
3494 IN PFNKSHANDLER Handler
);
3496 KSDDKAPI NTSTATUS NTAPI
3497 KsDispatchSpecificProperty(
3499 IN PFNKSHANDLER Handler
);
3501 KSDDKAPI NTSTATUS NTAPI
3502 KsForwardAndCatchIrp(
3503 IN PDEVICE_OBJECT DeviceObject
,
3505 IN PFILE_OBJECT FileObject
,
3506 IN KSSTACK_USE StackUse
);
3508 KSDDKAPI NTSTATUS NTAPI
3511 IN PFILE_OBJECT FileObject
,
3512 IN BOOLEAN ReuseStackLocation
);
3516 IN KSDEVICE_HEADER Header
);
3522 KSDDKAPI NTSTATUS NTAPI
3523 KsGetChildCreateParameter(
3525 OUT PVOID
* CreateParameter
);
3527 KSDDKAPI NTSTATUS NTAPI
3528 KsMoveIrpsOnCancelableQueue(
3529 IN OUT PLIST_ENTRY SourceList
,
3530 IN PKSPIN_LOCK SourceLock
,
3531 IN OUT PLIST_ENTRY DestinationList
,
3532 IN PKSPIN_LOCK DestinationLock OPTIONAL
,
3533 IN KSLIST_ENTRY_LOCATION ListLocation
,
3534 IN PFNKSIRPLISTCALLBACK ListCallback
,
3537 KSDDKAPI NTSTATUS NTAPI
3540 IN ULONG ProbeFlags
,
3541 IN ULONG HeaderSize
);
3543 KSDDKAPI NTSTATUS NTAPI
3544 KsQueryInformationFile(
3545 IN PFILE_OBJECT FileObject
,
3546 OUT PVOID FileInformation
,
3548 IN FILE_INFORMATION_CLASS FileInformationClass
);
3550 KSDDKAPI ACCESS_MASK NTAPI
3551 KsQueryObjectAccessMask(
3552 IN KSOBJECT_HEADER Header
);
3554 KSDDKAPI PKSOBJECT_CREATE_ITEM NTAPI
3555 KsQueryObjectCreateItem(
3556 IN KSOBJECT_HEADER Header
);
3558 KSDDKAPI NTSTATUS NTAPI
3560 IN PFILE_OBJECT FileObject
,
3561 IN PKEVENT Event OPTIONAL
,
3562 IN PVOID PortContext OPTIONAL
,
3563 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3566 IN ULONG Key OPTIONAL
,
3567 IN KPROCESSOR_MODE RequestorMode
);
3570 KsReleaseIrpOnCancelableQueue(
3572 IN PDRIVER_CANCEL DriverCancel OPTIONAL
);
3575 KsRemoveIrpFromCancelableQueue(
3576 IN OUT PLIST_ENTRY QueueHead
,
3577 IN PKSPIN_LOCK SpinLock
,
3578 IN KSLIST_ENTRY_LOCATION ListLocation
,
3579 IN KSIRP_REMOVAL_OPERATION RemovalOperation
);
3582 KsRemoveSpecificIrpFromCancelableQueue(
3585 KSDDKAPI NTSTATUS NTAPI
3586 KsSetInformationFile(
3587 IN PFILE_OBJECT FileObject
,
3588 IN PVOID FileInformation
,
3590 IN FILE_INFORMATION_CLASS FileInformationClass
);
3592 KSDDKAPI NTSTATUS NTAPI
3593 KsSetMajorFunctionHandler(
3594 IN PDRIVER_OBJECT DriverObject
,
3595 IN ULONG MajorFunction
);
3597 KSDDKAPI NTSTATUS NTAPI
3599 IN PFILE_OBJECT FileObject
,
3600 IN PKEVENT Event OPTIONAL
,
3601 IN PVOID PortContext OPTIONAL
,
3602 IN PIO_COMPLETION_ROUTINE CompletionRoutine OPTIONAL
,
3603 IN PVOID CompletionContext OPTIONAL
,
3604 IN KSCOMPLETION_INVOCATION CompletionInvocationFlags OPTIONAL
,
3605 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3606 IN OUT PVOID StreamHeaders
,
3609 IN KPROCESSOR_MODE RequestorMode
);
3611 KSDDKAPI NTSTATUS NTAPI
3613 IN PFILE_OBJECT FileObject
,
3614 IN PKEVENT Event OPTIONAL
,
3615 IN PVOID PortContext OPTIONAL
,
3616 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3619 IN ULONG Key OPTIONAL
,
3620 IN KPROCESSOR_MODE RequestorMode
);
3623 KSDDKAPI NTSTATUS NTAPI
3624 KsDefaultForwardIrp(
3625 IN PDEVICE_OBJECT DeviceObject
,
3628 /* ===============================================================
3629 Worker Management Functions
3632 KSDDKAPI NTSTATUS NTAPI
3634 IN WORK_QUEUE_TYPE WorkQueueType
,
3635 OUT PKSWORKER
* Worker
);
3639 IN PKSWORKER Worker
);
3641 KSDDKAPI NTSTATUS NTAPI
3642 KsRegisterCountedWorker(
3643 IN WORK_QUEUE_TYPE WorkQueueType
,
3644 IN PWORK_QUEUE_ITEM CountedWorkItem
,
3645 OUT PKSWORKER
* Worker
);
3647 KSDDKAPI ULONG NTAPI
3648 KsDecrementCountedWorker(
3649 IN PKSWORKER Worker
);
3651 KSDDKAPI ULONG NTAPI
3652 KsIncrementCountedWorker(
3653 IN PKSWORKER Worker
);
3655 KSDDKAPI NTSTATUS NTAPI
3657 IN PKSWORKER Worker
,
3658 IN PWORK_QUEUE_ITEM WorkItem
);
3661 /* ===============================================================
3665 KSDDKAPI NTSTATUS NTAPI
3668 IN POOL_TYPE PoolType
,
3669 IN ULONG_PTR ResourceName
,
3670 IN ULONG ResourceType
,
3671 OUT PVOID
* Resource
,
3672 OUT PULONG ResourceSize
);
3675 KSDDKAPI NTSTATUS NTAPI
3676 KsGetImageNameAndResourceId(
3678 OUT PUNICODE_STRING ImageName,
3679 OUT PULONG_PTR ResourceId,
3680 OUT PULONG ValueType);
3682 KSDDKAPI NTSTATUS NTAPI
3684 IN PDEVICE_OBJECT PhysicalDeviceObject,
3685 IN PUNICODE_STRING ModuleName,
3686 OUT PUNICODE_STRING ImageName,
3687 OUT PULONG_PTR ResourceId,
3688 OUT PULONG ValueType);
3692 /* ===============================================================
3693 Misc. Helper Functions
3696 KSDDKAPI PVOID NTAPI
3701 KSDDKAPI NTSTATUS NTAPI
3703 IN PUNICODE_STRING SymbolicLink
,
3704 IN PKSPIN_MEDIUM Medium
,
3705 IN ULONG PinDirection
);
3707 KSDDKAPI NTSTATUS NTAPI
3708 KsDefaultDispatchPnp(
3709 IN PDEVICE_OBJECT DeviceObject
,
3713 KsSetDevicePnpAndBaseObject(
3714 IN KSDEVICE_HEADER Header
,
3715 IN PDEVICE_OBJECT PnpDeviceObject
,
3716 IN PDEVICE_OBJECT BaseDevice
);
3718 KSDDKAPI NTSTATUS NTAPI
3719 KsDefaultDispatchPower(
3720 IN PDEVICE_OBJECT DeviceObject
,
3725 IN KSOBJECT_HEADER Header
,
3726 IN PFNKSCONTEXT_DISPATCH PowerDispatch OPTIONAL
,
3727 IN PVOID PowerContext OPTIONAL
);
3729 KSDDKAPI NTSTATUS NTAPI
3730 KsReferenceBusObject(
3731 IN KSDEVICE_HEADER Header
);
3734 KsDereferenceBusObject(
3735 IN KSDEVICE_HEADER Header
);
3737 KSDDKAPI NTSTATUS NTAPI
3738 KsFreeObjectCreateItem(
3739 IN KSDEVICE_HEADER Header
,
3740 IN PUNICODE_STRING CreateItem
);
3742 KSDDKAPI NTSTATUS NTAPI
3743 KsFreeObjectCreateItemsByContext(
3744 IN KSDEVICE_HEADER Header
,
3749 IN PDRIVER_OBJECT DriverObject
);
3751 KSDDKAPI PDEVICE_OBJECT NTAPI
3752 KsQueryDevicePnpObject(
3753 IN KSDEVICE_HEADER Header
);
3756 KsRecalculateStackDepth(
3757 IN KSDEVICE_HEADER Header
,
3758 IN BOOLEAN ReuseStackLocation
);
3761 KsSetTargetDeviceObject(
3762 IN KSOBJECT_HEADER Header
,
3763 IN PDEVICE_OBJECT TargetDevice OPTIONAL
);
3767 IN KSOBJECT_HEADER Header
,
3768 IN KSTARGET_STATE TargetState
);
3770 KSDDKAPI NTSTATUS NTAPI
3771 KsSynchronousIoControlDevice(
3772 IN PFILE_OBJECT FileObject
,
3773 IN KPROCESSOR_MODE RequestorMode
,
3777 OUT PVOID OutBuffer
,
3779 OUT PULONG BytesReturned
);
3784 KsFilterGetFirstChildPin(
3785 IN PKSFILTER Filter
,
3792 KsPinGetConnectedPinFileObject(
3802 IN HANDLE FilterHandle
,
3803 IN PKSPIN_CONNECT Connect
,
3804 IN ACCESS_MASK DesiredAccess
,
3805 OUT PHANDLE ConnectionHandle
3811 /* ===============================================================
3812 AVStream Functions (XP / DirectX 8)
3814 http://www.osronline.com/ddkx/stream/avstream_5q9f.htm
3817 #if defined(_NTDDK_)
3822 KsMergeAutomationTables(
3823 OUT PKSAUTOMATION_TABLE
* AutomationTableAB
,
3824 IN PKSAUTOMATION_TABLE AutomationTableA OPTIONAL
,
3825 IN PKSAUTOMATION_TABLE AutomationTableB OPTIONAL
,
3826 IN KSOBJECT_BAG Bag OPTIONAL
3833 IN PDRIVER_OBJECT DriverObject
,
3834 IN PUNICODE_STRING RegistryPath
,
3835 IN
const KSDEVICE_DESCRIPTOR
*Descriptor OPTIONAL
);
3837 typedef struct _KSFILTERFACTORY KSFILTERFACTORY
, *PKSFILTERFACTORY
; //FIXME
3844 KsInitializeDevice (
3845 IN PDEVICE_OBJECT FunctionalDeviceObject
,
3846 IN PDEVICE_OBJECT PhysicalDeviceObject
,
3847 IN PDEVICE_OBJECT NextDeviceObject
,
3848 IN
const KSDEVICE_DESCRIPTOR
* Descriptor OPTIONAL
);
3851 typedef void (NTAPI
*PFNKSFILTERFACTORYPOWER
)(
3852 IN PKSFILTERFACTORY FilterFactory
,
3853 IN DEVICE_POWER_STATE State
);
3859 IN KSOBJECT_BAG ObjectBag
,
3860 IN OUT PVOID
* PointerToPointerToItem
,
3875 IN PKSDEVICE Device
);
3881 IN PDRIVER_OBJECT DriverObject
,
3882 IN PDEVICE_OBJECT PhysicalDeviceObject
);
3889 IN PKSEVENT_ENTRY EventEntry
);
3894 KsAddItemToObjectBag(
3895 IN KSOBJECT_BAG ObjectBag
,
3897 IN PFNKSFREE Free OPTIONAL
);
3902 KsRemoveItemFromObjectBag(
3903 IN KSOBJECT_BAG ObjectBag
,
3910 KsAllocateObjectBag(
3911 IN PKSDEVICE Device
,
3912 OUT KSOBJECT_BAG
* ObjectBag
);
3918 IN KSOBJECT_BAG ObjectBag
3924 KsCompletePendingRequest(
3930 KsCopyObjectBagItems(
3931 IN KSOBJECT_BAG ObjectBagDestination
,
3932 IN KSOBJECT_BAG ObjectBagSource
);
3938 IN PDRIVER_OBJECT DriverObject
,
3939 IN PDEVICE_OBJECT PhysicalDeviceObject
,
3940 IN
const KSDEVICE_DESCRIPTOR
* Descriptor OPTIONAL
,
3941 IN ULONG ExtensionSize OPTIONAL
,
3942 OUT PKSDEVICE
* Device OPTIONAL
);
3947 KsCreateFilterFactory(
3948 IN PDEVICE_OBJECT DeviceObject
,
3949 IN
const KSFILTER_DESCRIPTOR
* Descriptor
,
3950 IN PWCHAR RefString OPTIONAL
,
3951 IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL
,
3952 IN ULONG CreateItemFlags
,
3953 IN PFNKSFILTERFACTORYPOWER SleepCallback OPTIONAL
,
3954 IN PFNKSFILTERFACTORYPOWER WakeCallback OPTIONAL
,
3955 OUT PKSFILTERFACTORY
*FilterFactory OPTIONAL
);
3960 KsFilterFactoryUpdateCacheData(
3961 IN PKSFILTERFACTORY FilterFactory
,
3962 IN
const KSFILTER_DESCRIPTOR
*FilterDescriptor OPTIONAL
3982 KsDefaultAddEventHandler(
3984 IN PKSEVENTDATA EventData
,
3985 IN OUT PKSEVENT_ENTRY EventEntry
);
3990 KsDispatchQuerySecurity(
3991 IN PDEVICE_OBJECT DeviceObject
,
3998 KsDispatchSetSecurity(
3999 IN PDEVICE_OBJECT DeviceObject
,
4014 KsFilterGetParentFilterFactory(
4018 return (PKSFILTERFACTORY
) KsGetParent((PVOID
) Filter
);
4024 KsFilterFactoryGetParentDevice(
4025 IN PKSFILTERFACTORY FilterFactory
4028 return (PKSDEVICE
) KsGetParent((PVOID
) FilterFactory
);
4033 #define KsDeleteFilterFactory(FilterFactory) \
4034 KsFreeObjectCreateItemsByContext( \
4035 *(KSDEVICE_HEADER *)( \
4036 KsFilterFactoryGetParentDevice(FilterFactory)->FunctionalDeviceObject-> \
4044 IN PKSDEVICE Device
,
4061 KsDeviceGetFirstChildFilterFactory(
4062 IN PKSDEVICE Device
);
4064 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
4076 KsDeviceGetOuterUnknown(
4077 IN PKSDEVICE Device
)
4079 return KsGetOuterUnknown((PVOID
) Device
);
4085 KsDeviceRegisterAggregatedClientUnknown(
4086 IN PKSDEVICE Device
,
4087 IN PUNKNOWN ClientUnknown
);
4092 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
4094 typedef interface IKsReferenceClock
* PIKSREFERENCECLOCK
;
4097 #define INTERFACE IKsReferenceClock
4098 DECLARE_INTERFACE_(IKsReferenceClock
,IUnknown
)
4100 DEFINE_ABSTRACT_UNKNOWN() // For C
4102 STDMETHOD_(LONGLONG
,GetTime
)(THIS
4104 STDMETHOD_(LONGLONG
,GetPhysicalTime
)(THIS
4106 STDMETHOD_(LONGLONG
,GetCorrelatedTime
)(THIS_
4107 OUT PLONGLONG SystemTime
4109 STDMETHOD_(LONGLONG
,GetCorrelatedPhysicalTime
)(THIS_
4110 OUT PLONGLONG SystemTime
4112 STDMETHOD_(NTSTATUS
, GetResolution
)(THIS_
4113 OUT PKSRESOLUTION Resolution
4115 STDMETHOD_(NTSTATUS
, GetState
)(THIS_
4121 #define INTERFACE IKsControl
4123 DEFINE_GUID(IID_IKsControl
, 0x28F54685L
, 0x06FD, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96);
4125 DECLARE_INTERFACE_(IKsControl
,IUnknown
)
4127 STDMETHOD_(NTSTATUS
, QueryInterface
)( THIS_
4129 PVOID
* Interface
)PURE
;
4131 STDMETHOD_(ULONG
, AddRef
)(THIS
) PURE
;
4133 STDMETHOD_(ULONG
, Release
)(THIS
) PURE
;
4135 STDMETHOD_(NTSTATUS
, KsProperty
)(THIS_
4136 IN PKSPROPERTY Property
,
4137 IN ULONG PropertyLength
,
4138 IN OUT PVOID PropertyData
,
4139 IN ULONG DataLength
,
4140 OUT ULONG
* BytesReturned
4142 STDMETHOD_(NTSTATUS
, KsMethod
)(THIS_
4143 IN PKSMETHOD Method
,
4144 IN ULONG MethodLength
,
4145 IN OUT PVOID MethodData
,
4146 IN ULONG DataLength
,
4147 OUT ULONG
* BytesReturned
4149 STDMETHOD_(NTSTATUS
, KsEvent
)(THIS_
4150 IN PKSEVENT Event OPTIONAL
,
4151 IN ULONG EventLength
,
4152 IN OUT PVOID EventData
,
4153 IN ULONG DataLength
,
4154 OUT ULONG
* BytesReturned
4159 typedef IKsControl
* PIKSCONTROL
;
4166 KsDeviceRegisterAdapterObject(
4167 IN PKSDEVICE Device
,
4168 IN PADAPTER_OBJECT AdapterObject
,
4169 IN ULONG MaxMappingByteCount
,
4170 IN ULONG MappingTableStride
);
4176 IN PKSDEVICE Device
,
4190 #define KsDiscard(object, pointer) \
4191 KsRemoveItemFromObjectBag(object->Bag, pointer, TRUE)
4193 #define KsFilterAcquireControl(Filter) \
4194 KsAcquireControl((PVOID) Filter);
4196 #define KsFilterReleaseControl(Filter) \
4197 KsReleaseControl((PVOID) Filter);
4199 #define KsFilterAddEvent(Filter, EventEntry) \
4200 KsAddEvent(Filter,EventEntry);
4205 KsFilterAcquireProcessingMutex(
4206 IN PKSFILTER Filter
);
4212 KsFilterAddTopologyConnections(
4213 IN PKSFILTER Filter
,
4214 IN ULONG NewConnectionsCount
,
4215 IN
const KSTOPOLOGY_CONNECTION
*const NewTopologyConnections
);
4220 KsFilterAttemptProcessing(
4221 IN PKSFILTER Filter
,
4222 IN BOOLEAN Asynchronous
);
4228 IN PKSFILTER Filter
,
4229 IN
const KSNODE_DESCRIPTOR
*const NodeDescriptor
,
4235 KsFilterCreatePinFactory(
4236 IN PKSFILTER Filter
,
4237 IN
const KSPIN_DESCRIPTOR_EX
*const PinDescriptor
,
4243 KsFilterFactoryGetDevice(
4244 IN PKSFILTERFACTORY FilterFactory
);
4247 #endif /* avstream */