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
73 #define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name
75 #define DEFINE_GUIDEX(name) EXTERN_C const GUID name
77 #endif /* !DEFINE_GUIDEX */
80 #define STATICGUIDOF(guid) STATIC_##guid
85 #if defined(__cplusplus)
88 #define DEFINE_GUIDSTRUCT(guid, name) struct __declspec(uuid(guid)) name
89 #define DEFINE_GUIDNAMED(name) __uuidof(struct name)
91 #define DEFINE_GUIDSTRUCT(guid, name) \
92 extern const DECLSPEC_SELECTANY GUID __uuid__##name={STATIC_##name};
93 #define DEFINE_GUIDNAMED(name) __uuid__##name
96 #else /* __cplusplus */
98 #define DEFINE_GUIDSTRUCT(guid, name) DEFINE_GUIDEX(name)
99 #define DEFINE_GUIDNAMED(name) name
101 #endif /* __cplusplus */
103 #define STATIC_GUID_NULL \
104 0x00000000L, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
105 DEFINE_GUIDSTRUCT("00000000-0000-0000-0000-000000000000", GUID_NULL
);
106 #define GUID_NULL DEFINE_GUIDNAMED(GUID_NULL)
108 #define STATIC_KSNAME_Filter\
109 0x9b365890L, 0x165f, 0x11d0, {0xa1, 0x95, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4}
110 DEFINE_GUIDSTRUCT("9b365890-165f-11d0-a195-0020afd156e4", KSNAME_Filter
);
111 #define KSNAME_Filter DEFINE_GUIDNAMED(KSNAME_Filter)
113 #define STATIC_KSMEMORY_TYPE_KERNEL_PAGED \
114 0xd833f8f8L, 0x7894, 0x11d1, {0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02}
115 DEFINE_GUIDSTRUCT("d833f8f8-7894-11d1-b069-00a0c9062802", KSMEMORY_TYPE_KERNEL_PAGED
);
116 #define KSMEMORY_TYPE_KERNEL_PAGED DEFINE_GUIDNAMED(KSMEMORY_TYPE_KERNEL_PAGED)
118 #define STATIC_KSDATAFORMAT_SUBTYPE_NONE \
119 0xe436eb8eL, 0x524f, 0x11ce, {0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70}
120 DEFINE_GUIDSTRUCT("e436eb8e-524f-11ce-9f53-0020af0ba770", KSDATAFORMAT_SUBTYPE_NONE
);
121 #define KSDATAFORMAT_SUBTYPE_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_NONE)
123 /* ===============================================================
127 #define IOCTL_KS_DISABLE_EVENT \
134 #define IOCTL_KS_ENABLE_EVENT \
142 #define IOCTL_KS_METHOD \
150 #define IOCTL_KS_PROPERTY \
157 #define IOCTL_KS_WRITE_STREAM \
164 #define IOCTL_KS_READ_STREAM \
171 #define IOCTL_KS_RESET_STATE \
178 /* ===============================================================
182 #define STATIC_KSCATEGORY_BRIDGE \
183 0x085AFF00L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
184 DEFINE_GUIDSTRUCT("085AFF00-62CE-11CF-A5D6-28DB04C10000", KSCATEGORY_BRIDGE
);
185 #define KSCATEGORY_BRIDGE DEFINE_GUIDNAMED(KSCATEGORY_BRIDGE)
187 #define STATIC_KSCATEGORY_CAPTURE \
188 0x65E8773DL, 0x8F56, 0x11D0, {0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
189 DEFINE_GUIDSTRUCT("65E8773D-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_CAPTURE
);
190 #define KSCATEGORY_CAPTURE DEFINE_GUIDNAMED(KSCATEGORY_CAPTURE)
192 #define STATIC_KSCATEGORY_RENDER \
193 0x65E8773EL, 0x8F56, 0x11D0, {0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
194 DEFINE_GUIDSTRUCT("65E8773E-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_RENDER
);
195 #define KSCATEGORY_RENDER DEFINE_GUIDNAMED(KSCATEGORY_RENDER)
197 #define STATIC_KSCATEGORY_MIXER \
198 0xAD809C00L, 0x7B88, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
199 DEFINE_GUIDSTRUCT("AD809C00-7B88-11D0-A5D6-28DB04C10000", KSCATEGORY_MIXER
);
200 #define KSCATEGORY_MIXER DEFINE_GUIDNAMED(KSCATEGORY_MIXER)
202 #define STATIC_KSCATEGORY_SPLITTER \
203 0x0A4252A0L, 0x7E70, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
204 DEFINE_GUIDSTRUCT("0A4252A0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_SPLITTER
);
205 #define KSCATEGORY_SPLITTER DEFINE_GUIDNAMED(KSCATEGORY_SPLITTER)
207 #define STATIC_KSCATEGORY_DATACOMPRESSOR \
208 0x1E84C900L, 0x7E70, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
209 DEFINE_GUIDSTRUCT("1E84C900-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATACOMPRESSOR
);
210 #define KSCATEGORY_DATACOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATACOMPRESSOR)
212 #define STATIC_KSCATEGORY_DATADECOMPRESSOR \
213 0x2721AE20L, 0x7E70, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
214 DEFINE_GUIDSTRUCT("2721AE20-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATADECOMPRESSOR
);
215 #define KSCATEGORY_DATADECOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATADECOMPRESSOR)
217 #define STATIC_KSCATEGORY_DATATRANSFORM \
218 0x2EB07EA0L, 0x7E70, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
219 DEFINE_GUIDSTRUCT("2EB07EA0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATATRANSFORM
);
220 #define KSCATEGORY_DATATRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_DATATRANSFORM)
222 #define STATIC_KSCATEGORY_COMMUNICATIONSTRANSFORM \
223 0xCF1DDA2CL, 0x9743, 0x11D0, {0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
224 DEFINE_GUIDSTRUCT("CF1DDA2C-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_COMMUNICATIONSTRANSFORM
);
225 #define KSCATEGORY_COMMUNICATIONSTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_COMMUNICATIONSTRANSFORM)
227 #define STATIC_KSCATEGORY_INTERFACETRANSFORM \
228 0xCF1DDA2DL, 0x9743, 0x11D0, {0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
229 DEFINE_GUIDSTRUCT("CF1DDA2D-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_INTERFACETRANSFORM
);
230 #define KSCATEGORY_INTERFACETRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_INTERFACETRANSFORM)
232 #define STATIC_KSCATEGORY_MEDIUMTRANSFORM \
233 0xCF1DDA2EL, 0x9743, 0x11D0, {0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
234 DEFINE_GUIDSTRUCT("CF1DDA2E-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_MEDIUMTRANSFORM
);
235 #define KSCATEGORY_MEDIUMTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_MEDIUMTRANSFORM)
237 #define STATIC_KSCATEGORY_FILESYSTEM \
238 0x760FED5EL, 0x9357, 0x11D0, {0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
239 DEFINE_GUIDSTRUCT("760FED5E-9357-11D0-A3CC-00A0C9223196", KSCATEGORY_FILESYSTEM
);
240 #define KSCATEGORY_FILESYSTEM DEFINE_GUIDNAMED(KSCATEGORY_FILESYSTEM)
242 #define STATIC_KSCATEGORY_CLOCK \
243 0x53172480L, 0x4791, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
244 DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000", KSCATEGORY_CLOCK
);
245 #define KSCATEGORY_CLOCK DEFINE_GUIDNAMED(KSCATEGORY_CLOCK)
247 #define STATIC_KSCATEGORY_PROXY \
248 0x97EBAACAL, 0x95BD, 0x11D0, {0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
249 DEFINE_GUIDSTRUCT("97EBAACA-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_PROXY
);
250 #define KSCATEGORY_PROXY DEFINE_GUIDNAMED(KSCATEGORY_PROXY)
252 #define STATIC_KSCATEGORY_QUALITY \
253 0x97EBAACBL, 0x95BD, 0x11D0, {0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
254 DEFINE_GUIDSTRUCT("97EBAACB-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_QUALITY
);
255 #define KSCATEGORY_QUALITY DEFINE_GUIDNAMED(KSCATEGORY_QUALITY)
257 /* ===============================================================
265 } KSIDENTIFIER
, *PKSIDENTIFIER
;
267 typedef KSIDENTIFIER KSPROPERTY
, *PKSPROPERTY
;
268 typedef KSIDENTIFIER KSMETHOD
, *PKSMETHOD
;
269 typedef KSIDENTIFIER KSEVENT
, *PKSEVENT
;
271 typedef KSIDENTIFIER KSDEGRADE
, *PKSDEGRADE
;
273 typedef KSIDENTIFIER KSPIN_INTERFACE
, *PKSPIN_INTERFACE
;
274 typedef KSIDENTIFIER KSPIN_MEDIUM
, *PKSPIN_MEDIUM
;
287 } KSDATAFORMAT
, *PKSDATAFORMAT
, KSDATARANGE
, *PKSDATARANGE
;
293 } KSATTRIBUTE
, *PKSATTRIBUTE
;
296 /* ===============================================================
297 Interface Sets - TODO
301 #define KSINTERFACESETID_Media
302 #define KSINTERFACE_STANDARD_STREAMING
303 #define KSINTERFACE_STANDARD_LOOPED_STREAMING
304 #define KSINTERFACE_STANDARD_CONTROL
307 #define STATIC_KSINTERFACESETID_Standard \
308 0x1A8766A0L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
309 DEFINE_GUIDSTRUCT("1A8766A0-62CE-11CF-A5D6-28DB04C10000", KSINTERFACESETID_Standard
);
310 #define KSINTERFACESETID_Standard DEFINE_GUIDNAMED(KSINTERFACESETID_Standard)
313 KSINTERFACE_STANDARD_STREAMING
,
314 KSINTERFACE_STANDARD_LOOPED_STREAMING
,
315 KSINTERFACE_STANDARD_CONTROL
316 } KSINTERFACE_STANDARD
;
318 #define STATIC_KSINTERFACESETID_FileIo \
319 0x8C6F932CL, 0xE771, 0x11D0, {0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
320 DEFINE_GUIDSTRUCT("8C6F932C-E771-11D0-B8FF-00A0C9223196", KSINTERFACESETID_FileIo
);
321 #define KSINTERFACESETID_FileIo DEFINE_GUIDNAMED(KSINTERFACESETID_FileIo)
323 /* ===============================================================
328 KSINTERFACE_FILEIO_STREAMING
329 } KSINTERFACE_FILEIO
;
331 #define KSMEDIUM_TYPE_ANYINSTANCE 0
333 #define STATIC_KSMEDIUMSETID_Standard \
334 0x4747B320L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
335 DEFINE_GUIDSTRUCT("4747B320-62CE-11CF-A5D6-28DB04C10000", KSMEDIUMSETID_Standard
);
336 #define KSMEDIUMSETID_Standard DEFINE_GUIDNAMED(KSMEDIUMSETID_Standard)
338 /* ===============================================================
339 Clock Properties/Methods/Events
342 #define STATIC_KSPROPSETID_Clock \
343 0xDF12A4C0L, 0xAC17, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
344 DEFINE_GUIDSTRUCT("DF12A4C0-AC17-11CF-A5D6-28DB04C10000", KSPROPSETID_Clock
);
345 #define KSPROPSETID_Clock DEFINE_GUIDNAMED(KSPROPSETID_Clock)
348 KSPROPERTY_CLOCK_TIME
,
349 KSPROPERTY_CLOCK_PHYSICALTIME
,
350 KSPROPERTY_CLOCK_CORRELATEDTIME
,
351 KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME
,
352 KSPROPERTY_CLOCK_RESOLUTION
,
353 KSPROPERTY_CLOCK_STATE
,
355 KSPROPERTY_CLOCK_FUNCTIONTABLE
356 #endif // defined(_NTDDK_)
359 #define STATIC_KSEVENTSETID_Clock \
360 0x364D8E20L, 0x62C7, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
361 DEFINE_GUIDSTRUCT("364D8E20-62C7-11CF-A5D6-28DB04C10000", KSEVENTSETID_Clock
);
362 #define KSEVENTSETID_Clock DEFINE_GUIDNAMED(KSEVENTSETID_Clock)
365 KSEVENT_CLOCK_INTERVAL_MARK
,
366 KSEVENT_CLOCK_POSITION_MARK
367 } KSEVENT_CLOCK_POSITION
;
369 /* ===============================================================
370 Connection Properties/Methods/Events
373 #define STATIC_KSPROPSETID_Connection \
374 0x1D58C920L, 0xAC9B, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
375 DEFINE_GUIDSTRUCT("1D58C920-AC9B-11CF-A5D6-28DB04C10000", KSPROPSETID_Connection
);
376 #define KSPROPSETID_Connection DEFINE_GUIDNAMED(KSPROPSETID_Connection)
379 KSPROPERTY_CONNECTION_STATE
,
380 KSPROPERTY_CONNECTION_PRIORITY
,
381 KSPROPERTY_CONNECTION_DATAFORMAT
,
382 KSPROPERTY_CONNECTION_ALLOCATORFRAMING
,
383 KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT
,
384 KSPROPERTY_CONNECTION_ACQUIREORDERING
,
385 KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX
,
386 KSPROPERTY_CONNECTION_STARTAT
387 } KSPROPERTY_CONNECTION
;
389 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_STATE(GetHandler, SetHandler)\
390 DEFINE_KSPROPERTY_ITEM(\
391 KSPROPERTY_CONNECTION_STATE,\
396 NULL, 0, NULL, NULL, 0)
398 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_PRIORITY(GetHandler, SetHandler)\
399 DEFINE_KSPROPERTY_ITEM(\
400 KSPROPERTY_CONNECTION_PRIORITY,\
405 NULL, 0, NULL, NULL, 0)
407 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_DATAFORMAT(GetHandler, SetHandler)\
408 DEFINE_KSPROPERTY_ITEM(\
409 KSPROPERTY_CONNECTION_DATAFORMAT,\
414 NULL, 0, NULL, NULL, 0)
416 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING(Handler)\
417 DEFINE_KSPROPERTY_ITEM(\
418 KSPROPERTY_CONNECTION_ALLOCATORFRAMING,\
421 sizeof(KSALLOCATOR_FRAMING),\
422 NULL, NULL, 0, NULL, NULL, 0)
424 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING_EX(Handler)\
425 DEFINE_KSPROPERTY_ITEM(\
426 KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,\
430 NULL, NULL, 0, NULL, NULL, 0)
432 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_PROPOSEDATAFORMAT(Handler)\
433 DEFINE_KSPROPERTY_ITEM(\
434 KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT,\
437 sizeof(KSDATAFORMAT),\
439 NULL, 0, NULL, NULL, 0)
441 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ACQUIREORDERING(Handler)\
442 DEFINE_KSPROPERTY_ITEM(\
443 KSPROPERTY_CONNECTION_ACQUIREORDERING,\
447 NULL, NULL, 0, NULL, NULL, 0)
449 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_STARTAT(Handler)\
450 DEFINE_KSPROPERTY_ITEM(\
451 KSPROPERTY_CONNECTION_STARTAT,\
454 sizeof(KSRELATIVEEVENT),\
456 NULL, 0, NULL, NULL, 0)
459 KSEVENT_CONNECTION_POSITIONUPDATE
,
460 KSEVENT_CONNECTION_DATADISCONTINUITY
,
461 KSEVENT_CONNECTION_TIMEDISCONTINUITY
,
462 KSEVENT_CONNECTION_PRIORITY
,
463 KSEVENT_CONNECTION_ENDOFSTREAM
464 } KSEVENT_CONNECTION
;
466 /* ===============================================================
468 Properties/Methods/Events
471 #define STATIC_KSPROPSETID_General\
472 0x1464EDA5L, 0x6A8F, 0x11D1, {0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
473 DEFINE_GUIDSTRUCT("1464EDA5-6A8F-11D1-9AA7-00A0C9223196", KSPROPSETID_General
);
474 #define KSPROPSETID_General DEFINE_GUIDNAMED(KSPROPSETID_General)
477 KSPROPERTY_GENERAL_COMPONENTID
478 } KSPROPERTY_GENERAL
;
480 /* ===============================================================
482 Properties/Methods/Events
485 #define KSPROPSETID_GM \
486 0xAF627536L, 0xE719, 0x11D2, {0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D}
489 KSPROPERTY_GM_GRAPHMANAGER
,
490 KSPROPERTY_GM_TIMESTAMP_CLOCK
,
491 KSPROPERTY_GM_RATEMATCH
,
492 KSPROPERTY_GM_RENDERCLOCK
495 /* ===============================================================
497 Properties/Methods/Events
500 #define STATIC_KSPROPSETID_MediaSeeking\
501 0xEE904F0CL, 0xD09B, 0x11D0, {0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
502 DEFINE_GUIDSTRUCT("EE904F0C-D09B-11D0-ABE9-00A0C9223196", KSPROPSETID_MediaSeeking
);
503 #define KSPROPSETID_MediaSeeking DEFINE_GUIDNAMED(KSPROPSETID_MediaSeeking)
506 KSPROPERTY_MEDIASEEKING_CAPABILITIES
,
507 KSPROPERTY_MEDIASEEKING_FORMATS
,
508 KSPROPERTY_MEDIASEEKING_TIMEFORMAT
,
509 KSPROPERTY_MEDIASEEKING_POSITION
,
510 KSPROPERTY_MEDIASEEKING_STOPPOSITION
,
511 KSPROPERTY_MEDIASEEKING_POSITIONS
,
512 KSPROPERTY_MEDIASEEKING_DURATION
,
513 KSPROPERTY_MEDIASEEKING_AVAILABLE
,
514 KSPROPERTY_MEDIASEEKING_PREROLL
,
515 KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT
516 } KSPROPERTY_MEDIASEEKING
;
519 KS_SEEKING_NoPositioning
,
520 KS_SEEKING_AbsolutePositioning
,
521 KS_SEEKING_RelativePositioning
,
522 KS_SEEKING_IncrementalPositioning
,
523 KS_SEEKING_PositioningBitsMask
= 0x3,
524 KS_SEEKING_SeekToKeyFrame
,
525 KS_SEEKING_ReturnTime
= 0x8
529 KS_SEEKING_CanSeekAbsolute
= 0x1,
530 KS_SEEKING_CanSeekForwards
= 0x2,
531 KS_SEEKING_CanSeekBackwards
= 0x4,
532 KS_SEEKING_CanGetCurrentPos
= 0x8,
533 KS_SEEKING_CanGetStopPos
= 0x10,
534 KS_SEEKING_CanGetDuration
= 0x20,
535 KS_SEEKING_CanPlayBackwards
= 0x40
536 } KS_SEEKING_CAPABILITIES
;
541 KS_SEEKING_FLAGS CurrentFlags
;
542 KS_SEEKING_FLAGS StopFlags
;
543 } KSPROPERTY_POSITIONS
, *PKSPROPERTY_POSITIONS
;
548 } KSPROPERTY_MEDIAAVAILABLE
, *PKSPROPERTY_MEDIAAVAILABLE
;
555 } KSP_TIMEFORMAT
, *PKSP_TIMEFORMAT
;
557 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CAPABILITIES(Handler)\
558 DEFINE_KSPROPERTY_ITEM(\
559 KSPROPERTY_MEDIASEEKING_CAPABILITIES,\
562 sizeof(KS_SEEKING_CAPABILITIES),\
563 NULL, NULL, 0, NULL, NULL, 0)
565 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_FORMATS(Handler)\
566 DEFINE_KSPROPERTY_ITEM(\
567 KSPROPERTY_MEDIASEEKING_FORMATS,\
571 NULL, NULL, 0, NULL, NULL, 0)
573 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_TIMEFORMAT(GetHandler, SetHandler)\
574 DEFINE_KSPROPERTY_ITEM(\
575 KSPROPERTY_MEDIASEEKING_TIMEFORMAT,\
580 NULL, 0, NULL, NULL, 0)
582 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITION(Handler)\
583 DEFINE_KSPROPERTY_ITEM(\
584 KSPROPERTY_MEDIASEEKING_POSITION,\
588 NULL, NULL, 0, NULL, NULL, 0)
590 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_STOPPOSITION(Handler)\
591 DEFINE_KSPROPERTY_ITEM(\
592 KSPROPERTY_MEDIASEEKING_STOPPOSITION,\
596 NULL, NULL, 0, NULL, NULL, 0)
598 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITIONS(Handler)\
599 DEFINE_KSPROPERTY_ITEM(\
600 KSPROPERTY_MEDIASEEKING_POSITIONS,\
603 sizeof(KSPROPERTY_POSITIONS),\
605 NULL, 0, NULL, NULL, 0)
607 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_DURATION(Handler)\
608 DEFINE_KSPROPERTY_ITEM(\
609 KSPROPERTY_MEDIASEEKING_DURATION,\
613 NULL, NULL, 0, NULL, NULL, 0)
615 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_AVAILABLE(Handler)\
616 DEFINE_KSPROPERTY_ITEM(\
617 KSPROPERTY_MEDIASEEKING_AVAILABLE,\
620 sizeof(KSPROPERTY_MEDIAAVAILABLE),\
621 NULL, NULL, 0, NULL, NULL, 0)
623 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_PREROLL(Handler)\
624 DEFINE_KSPROPERTY_ITEM(\
625 KSPROPERTY_MEDIASEEKING_PREROLL,\
629 NULL, NULL, 0, NULL, NULL, 0)
631 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CONVERTTIMEFORMAT(Handler)\
632 DEFINE_KSPROPERTY_ITEM(\
633 KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT,\
635 sizeof(KSP_TIMEFORMAT),\
637 NULL, NULL, 0, NULL, NULL, 0)
639 /* ===============================================================
641 Properties/Methods/Events
644 #define STATIC_KSPROPSETID_Pin\
645 0x8C134960L, 0x51AD, 0x11CF, {0x87, 0x8A, 0x94, 0xF8, 0x01, 0xC1, 0x00, 0x00}
646 DEFINE_GUIDSTRUCT("8C134960-51AD-11CF-878A-94F801C10000", KSPROPSETID_Pin
);
647 #define KSPROPSETID_Pin DEFINE_GUIDNAMED(KSPROPSETID_Pin)
649 #define STATIC_KSNAME_Pin\
650 0x146F1A80L, 0x4791, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
651 DEFINE_GUIDSTRUCT("146F1A80-4791-11D0-A5D6-28DB04C10000", KSNAME_Pin
);
652 #define KSNAME_Pin DEFINE_GUIDNAMED(KSNAME_Pin)
655 KSPROPERTY_PIN_CINSTANCES
,
656 KSPROPERTY_PIN_CTYPES
,
657 KSPROPERTY_PIN_DATAFLOW
,
658 KSPROPERTY_PIN_DATARANGES
,
659 KSPROPERTY_PIN_DATAINTERSECTION
,
660 KSPROPERTY_PIN_INTERFACES
,
661 KSPROPERTY_PIN_MEDIUMS
,
662 KSPROPERTY_PIN_COMMUNICATION
,
663 KSPROPERTY_PIN_GLOBALCINSTANCES
,
664 KSPROPERTY_PIN_NECESSARYINSTANCES
,
665 KSPROPERTY_PIN_PHYSICALCONNECTION
,
666 KSPROPERTY_PIN_CATEGORY
,
668 KSPROPERTY_PIN_CONSTRAINEDDATARANGES
,
669 KSPROPERTY_PIN_PROPOSEDATAFORMAT
676 } KSP_PIN
, *PKSP_PIN
;
678 #define KSINSTANCE_INDETERMINATE ((ULONG)-1)
683 } KSPIN_CINSTANCES
, *PKSPIN_CINSTANCES
;
688 WCHAR SymbolicLinkName
[1];
689 } KSPIN_PHYSICALCONNECTION
, *PKSPIN_PHYSICALCONNECTION
;
691 /* ===============================================================
693 Properties/Methods/Events
696 #define KSPROPSETID_Quality \
697 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
700 KSPROPERTY_QUALITY_REPORT
,
701 KSPROPERTY_QUALITY_ERROR
702 } KSPROPERTY_QUALITY
;
704 /* ===============================================================
706 Properties/Methods/Events
709 #define STATIC_KSPROPSETID_Stream\
710 0x65aaba60L, 0x98ae, 0x11cf, {0xa1, 0x0d, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4}
711 DEFINE_GUIDSTRUCT("65aaba60-98ae-11cf-a10d-0020afd156e4", KSPROPSETID_Stream
);
712 #define KSPROPSETID_Stream DEFINE_GUIDNAMED(KSPROPSETID_Stream)
715 KSPROPERTY_STREAM_ALLOCATOR
,
716 KSPROPERTY_STREAM_QUALITY
,
717 KSPROPERTY_STREAM_DEGRADATION
,
718 KSPROPERTY_STREAM_MASTERCLOCK
,
719 KSPROPERTY_STREAM_TIMEFORMAT
,
720 KSPROPERTY_STREAM_PRESENTATIONTIME
,
721 KSPROPERTY_STREAM_PRESENTATIONEXTENT
,
722 KSPROPERTY_STREAM_FRAMETIME
,
723 KSPROPERTY_STREAM_RATECAPABILITY
,
724 KSPROPERTY_STREAM_RATE
,
725 KSPROPERTY_STREAM_PIPE_ID
728 #define DEFINE_KSPROPERTY_ITEM_STREAM_ALLOCATOR(GetHandler, SetHandler)\
729 DEFINE_KSPROPERTY_ITEM(\
730 KSPROPERTY_STREAM_ALLOCATOR,\
735 NULL, 0, NULL, NULL, 0)
737 #define DEFINE_KSPROPERTY_ITEM_STREAM_QUALITY(Handler)\
738 DEFINE_KSPROPERTY_ITEM(\
739 KSPROPERTY_STREAM_QUALITY,\
742 sizeof(KSQUALITY_MANAGER),\
743 NULL, NULL, 0, NULL, NULL, 0)
745 #define DEFINE_KSPROPERTY_ITEM_STREAM_DEGRADATION(GetHandler, SetHandler)\
746 DEFINE_KSPROPERTY_ITEM(\
747 KSPROPERTY_STREAM_DEGRADATION,\
752 NULL, 0, NULL, NULL, 0)
754 #define DEFINE_KSPROPERTY_ITEM_STREAM_MASTERCLOCK(GetHandler, SetHandler)\
755 DEFINE_KSPROPERTY_ITEM(\
756 KSPROPERTY_STREAM_MASTERCLOCK,\
761 NULL, 0, NULL, NULL, 0)
763 #define DEFINE_KSPROPERTY_ITEM_STREAM_TIMEFORMAT(Handler)\
764 DEFINE_KSPROPERTY_ITEM(\
765 KSPROPERTY_STREAM_TIMEFORMAT,\
769 NULL, NULL, 0, NULL, NULL, 0)
771 #define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONTIME(GetHandler, SetHandler)\
772 DEFINE_KSPROPERTY_ITEM(\
773 KSPROPERTY_STREAM_PRESENTATIONTIME,\
778 NULL, 0, NULL, NULL, 0)
780 #define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONEXTENT(Handler)\
781 DEFINE_KSPROPERTY_ITEM(\
782 KSPROPERTY_STREAM_PRESENTATIONEXTENT,\
786 NULL, NULL, 0, NULL, NULL, 0)
788 #define DEFINE_KSPROPERTY_ITEM_STREAM_FRAMETIME(Handler)\
789 DEFINE_KSPROPERTY_ITEM(\
790 KSPROPERTY_STREAM_FRAMETIME,\
793 sizeof(KSFRAMETIME),\
794 NULL, NULL, 0, NULL, NULL, 0)
796 #define DEFINE_KSPROPERTY_ITEM_STREAM_RATECAPABILITY(Handler)\
797 DEFINE_KSPROPERTY_ITEM(\
798 KSPROPERTY_STREAM_RATECAPABILITY,\
800 sizeof(KSRATE_CAPABILITY),\
802 NULL, NULL, 0, NULL, NULL, 0)
804 #define DEFINE_KSPROPERTY_ITEM_STREAM_RATE(GetHandler, SetHandler)\
805 DEFINE_KSPROPERTY_ITEM(\
806 KSPROPERTY_STREAM_RATE,\
811 NULL, 0, NULL, NULL, 0)
813 #define DEFINE_KSPROPERTY_ITEM_STREAM_PIPE_ID(GetHandler, SetHandler)\
814 DEFINE_KSPROPERTY_ITEM(\
815 KSPROPERTY_STREAM_PIPE_ID,\
820 NULL, 0, NULL, NULL, 0)
822 /* ===============================================================
824 Properties/Methods/Events
827 #define STATIC_KSPROPSETID_StreamAllocator\
828 0xcf6e4342L, 0xec87, 0x11cf, {0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4}
829 DEFINE_GUIDSTRUCT("cf6e4342-ec87-11cf-a130-0020afd156e4", KSPROPSETID_StreamAllocator
);
830 #define KSPROPSETID_StreamAllocator DEFINE_GUIDNAMED(KSPROPSETID_StreamAllocator)
833 KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE
,
834 KSPROPERTY_STREAMALLOCATOR_STATUS
835 } KSPROPERTY_STREAMALLOCATOR
;
837 #define KSMETHODSETID_StreamAllocator \
838 0xcf6e4341L, 0xec87, 0x11cf, {0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4}
841 KSMETHOD_STREAMALLOCATOR_ALLOC
,
842 KSMETHOD_STREAMALLOCATOR_FREE
843 } KSMETHOD_STREAMALLOCATOR
;
845 #define KSEVENTSETID_StreamAllocator
848 KSEVENT_STREAMALLOCATOR_INTERNAL_FREEFRAME
,
849 KSEVENT_STREAMALLOCATOR_FREEFRAME
850 } KSEVENT_STREAMALLOCATOR
;
852 /* ===============================================================
854 Properties/Methods/Events
857 #define KSPROPSETID_StreamInterface \
858 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
861 KSPROPERTY_STREAMINTERFACE_HEADERSIZE
862 } KSPROPERTY_STREAMINTERFACE
;
864 /* ===============================================================
866 Properties/Methods/Events
869 #define STATIC_KSPROPSETID_Topology\
870 0x720D4AC0L, 0x7533, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
871 DEFINE_GUIDSTRUCT("720D4AC0-7533-11D0-A5D6-28DB04C10000", KSPROPSETID_Topology
);
872 #define KSPROPSETID_Topology DEFINE_GUIDNAMED(KSPROPSETID_Topology)
875 KSPROPERTY_TOPOLOGY_CATEGORIES
,
876 KSPROPERTY_TOPOLOGY_NODES
,
877 KSPROPERTY_TOPOLOGY_CONNECTIONS
,
878 KSPROPERTY_TOPOLOGY_NAME
879 } KSPROPERTY_TOPOLOGY
;
881 /* ===============================================================
882 Property Sets for audio drivers - TODO
885 #define STATIC_KSPROPTYPESETID_General \
886 0x97E99BA0L, 0xBDEA, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
887 DEFINE_GUIDSTRUCT("97E99BA0-BDEA-11CF-A5D6-28DB04C10000", KSPROPTYPESETID_General
);
888 #define KSPROPTYPESETID_General DEFINE_GUIDNAMED(KSPROPTYPESETID_General)
891 KSPROPERTY_AC3_ALTERNATE_AUDIO
892 KSPROPERTY_AC3_BIT_STREAM_MODE
893 KSPROPERTY_AC3_DIALOGUE_LEVEL
894 KSPROPERTY_AC3_DOWNMIX
895 KSPROPERTY_AC3_ERROR_CONCEALMENT
896 KSPROPERTY_AC3_LANGUAGE_CODE
897 KSPROPERTY_AC3_ROOM_TYPE
900 #define KSPROPSETID_Acoustic_Echo_Cancel
903 KSPROPERTY_AEC_NOISE_FILL_ENABLE
904 KSPROPERTY_AEC_STATUS
908 KSPROPERTY_AUDIO_3D_INTERFACE
910 KSPROPERTY_AUDIO_ALGORITHM_INSTANCE
911 KSPROPERTY_AUDIO_BASS
912 KSPROPERTY_AUDIO_BASS_BOOST
913 KSPROPERTY_AUDIO_CHANNEL_CONFIG
914 KSPROPERTY_AUDIO_CHORUS_LEVEL
915 KSPROPERTY_AUDIO_COPY_PROTECTION
916 KSPROPERTY_AUDIO_CPU_RESOURCES
917 KSPROPERTY_AUDIO_DELAY
918 KSPROPERTY_AUDIO_DEMUX_DEST
919 KSPROPERTY_AUDIO_DEV_SPECIFIC
920 KSPROPERTY_AUDIO_DYNAMIC_RANGE
921 KSPROPERTY_AUDIO_DYNAMIC_SAMPLING_RATE
922 KSPROPERTY_AUDIO_EQ_BANDS
923 KSPROPERTY_AUDIO_EQ_LEVEL
924 KSPROPERTY_AUDIO_FILTER_STATE
925 KSPROPERTY_AUDIO_LATENCY
926 KSPROPERTY_AUDIO_LOUDNESS
927 KSPROPERTY_AUDIO_MANUFACTURE_GUID
929 KSPROPERTY_AUDIO_MIX_LEVEL_CAPS
930 KSPROPERTY_AUDIO_MIX_LEVEL_TABLE
931 KSPROPERTY_AUDIO_MUTE
932 KSPROPERTY_AUDIO_MUX_SOURCE
933 KSPROPERTY_AUDIO_NUM_EQ_BANDS
934 KSPROPERTY_AUDIO_PEAKMETER
935 KSPROPERTY_AUDIO_POSITION
936 KSPROPERTY_AUDIO_PREFERRED_STATUS
937 KSPROPERTY_AUDIO_PRODUCT_GUID
938 KSPROPERTY_AUDIO_QUALITY
939 KSPROPERTY_AUDIO_REVERB_LEVEL
940 KSPROPERTY_AUDIO_SAMPLING_RATE
941 KSPROPERTY_AUDIO_STEREO_ENHANCE
942 KSPROPERTY_AUDIO_STEREO_SPEAKER_GEOMETRY
943 KSPROPERTY_AUDIO_SURROUND_ENCODE
944 KSPROPERTY_AUDIO_TREBLE
945 KSPROPERTY_AUDIO_VOLUMELEVEL
946 KSPROPERTY_AUDIO_WIDE_MODE
947 KSPROPERTY_AUDIO_WIDENESS
950 #define KSPROPSETID_AudioGfx
952 KSPROPERTY_AUDIOGFX_CAPTURETARGETDEVICEID
953 KSPROPERTY_AUDIOGFX_RENDERTARGETDEVICEID
956 #define KSPROPSETID_DirectSound3DBuffer
958 KSPROPERTY_DIRECTSOUND3DBUFFER_ALL
959 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEANGLES
960 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEORIENTATION
961 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEOUTSIDEVOLUME
962 KSPROPERTY_DIRECTSOUND3DBUFFER_MAXDISTANCE
963 KSPROPERTY_DIRECTSOUND3DBUFFER_MINDISTANCE
964 KSPROPERTY_DIRECTSOUND3DBUFFER_MODE
965 KSPROPERTY_DIRECTSOUND3DBUFFER_POSITION
966 KSPROPERTY_DIRECTSOUND3DBUFFER_VELOCITY
969 #define KSPROPSETID_DirectSound3DListener
971 KSPROPERTY_DIRECTSOUND3DLISTENER_ALL
972 KSPROPERTY_DIRECTSOUND3DLISTENER_ALLOCATION
973 KSPROPERTY_DIRECTSOUND3DLISTENER_BATCH
974 KSPROPERTY_DIRECTSOUND3DLISTENER_DISTANCEFACTOR
975 KSPROPERTY_DIRECTSOUND3DLISTENER_DOPPLERFACTOR
976 KSPROPERTY_DIRECTSOUND3DLISTENER_ORIENTATION
977 KSPROPERTY_DIRECTSOUND3DLISTENER_POSITION
978 KSPROPERTY_DIRECTSOUND3DLISTENER_ROLLOFFFACTOR
979 KSPROPERTY_DIRECTSOUND3DLISTENER_VELOCITY
982 #define KSPROPSETID_Hrtf3d
984 KSPROPERTY_HRTF3D_FILTER_FORMAT
985 KSPROPERTY_HRTF3D_INITIALIZE
986 KSPROPERTY_HRTF3D_PARAMS
989 #define KSPROPSETID_Itd3d
991 KSPROPERTY_ITD3D_PARAMS
994 #define KSPROPSETID_TopologyNode
996 KSPROPERTY_TOPOLOGYNODE_ENABLE
997 KSPROPERTY_TOPOLOGYNODE_RESET
1001 /* ===============================================================
1005 KSNODETYPE_3D_EFFECTS
1006 KSNODETYPE_ACOUSTIC_ECHO_CANCEL
1013 KSNODETYPE_DEV_SPECIFIC
1015 KSNODETYPE_DMSYNTH_CAPS
1016 KSNODETYPE_DRM_DESCRAMBLE
1017 KSNODETYPE_EQUALIZER
1021 KSNODETYPE_PEAKMETER
1022 KSNODETYPE_PROLOGIC_DECODER
1023 KSNODETYPE_PROLOGIC_ENCODER
1026 KSNODETYPE_STEREO_ENHANCE
1027 KSNODETYPE_STEREO_WIDE
1032 KSNODETYPE_SYNTHESIZER
1037 typedef PVOID KSDEVICE_HEADER
, KSOBJECT_HEADER
, KSOBJECT_BAG
;
1039 /* ===============================================================
1043 #define KSMETHOD_TYPE_NONE 0x00000000
1044 #define KSMETHOD_TYPE_READ 0x00000001
1045 #define KSMETHOD_TYPE_WRITE 0x00000002
1046 #define KSMETHOD_TYPE_MODIFY 0x00000003
1047 #define KSMETHOD_TYPE_SOURCE 0x00000004
1048 #define KSMETHOD_TYPE_SEND 0x00000001
1049 #define KSMETHOD_TYPE_SETSUPPORT 0x00000100
1050 #define KSMETHOD_TYPE_BASICSUPPORT 0x00000200
1052 /* ===============================================================
1056 #define KSPROPERTY_TYPE_GET 0x00000001
1057 #define KSPROPERTY_TYPE_SET 0x00000002
1058 #define KSPROPERTY_TYPE_SETSUPPORT 0x00000100
1059 #define KSPROPERTY_TYPE_BASICSUPPORT 0x00000200
1060 #define KSPROPERTY_TYPE_RELATIONS 0x00000400
1061 #define KSPROPERTY_TYPE_SERIALIZESET 0x00000800
1062 #define KSPROPERTY_TYPE_UNSERIALIZESET 0x00001000
1063 #define KSPROPERTY_TYPE_SERIALIZERAW 0x00002000
1064 #define KSPROPERTY_TYPE_UNSERIALIZERAW 0x00004000
1065 #define KSPROPERTY_TYPE_SERIALIZESIZE 0x00008000
1066 #define KSPROPERTY_TYPE_DEFAULT_VALUES 0x00010000
1068 /* ===============================================================
1069 Topology Methods/Properties
1072 #define KSMETHOD_TYPE_TOPOLOGY 0x10000000
1073 #define KSPROPERTY_TYPE_TOPOLOGY 0x10000000
1076 #define DEFINE_KS_GUID(GA,GB,GC,GD,GE,GF,GG,GH,GI,GJ,GK) \
1077 DEFINE_GUID(??, 0x#GA#L, 0xGB, 0xGC, 0xGD, 0xGE, 0xGF, 0xGG, 0xGH, 0xGI, 0xGJ, 0xGK) \
1078 "GA-GB-GC-GDGE-GFGGGHGIGJGK"
1081 /* ===============================================================
1084 BRIDGE - 0x085AFF00L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1085 CAPTURE - 0x65E8773DL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1086 RENDER - 0x65E8773EL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1087 MIXER - 0xAD809C00L, 0x7B88, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1088 SPLITTER - 0x0A4252A0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1089 DATACOMPRESSOR - 0x1E84C900L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1090 DATADECOMPRESSOR - 0x2721AE20L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1091 DATATRANSFORM - 0x2EB07EA0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1092 COMMUNICATIONSTRANSFORM - 0xCF1DDA2CL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1093 INTERFACETRANSFORM - 0xCF1DDA2DL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1094 MEDIUMTRANSFORM - 0xCF1DDA2EL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1095 FILESYSTEM - 0x760FED5EL, 0x9357, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1096 CLOCK - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1097 PROXY - 0x97EBAACAL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1098 QUALITY - 0x97EBAACBL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1101 /* ===============================================================
1102 KSNAME GUIDs (defined also as KSSTRING_Xxx L"{...}"
1104 Filter - 0x9b365890L, 0x165f, 0x11d0, 0xa1, 0x95, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
1105 Pin - 0x146F1A80L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1106 Clock - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1107 Allocator - 0x642F5D00L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1108 TopologyNode - 0x0621061AL, 0xEE75, 0x11D0, 0xB9, 0x15, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1111 /* ===============================================================
1114 Standard - 0x1A8766A0L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1115 FileIo - 0x8C6F932CL, 0xE771, 0x11D0, 0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1118 /* ===============================================================
1121 Standard - 0x4747B320L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1124 /* ===============================================================
1127 General - 0x1464EDA5L, 0x6A8F, 0x11D1, 0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1128 StreamIo - 0x65D003CAL, 0x1523, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1129 MediaSeeking - 0xEE904F0CL, 0xD09B, 0x11D0, 0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1130 Topology - 0x720D4AC0L, 0x7533, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1131 GM - 0xAF627536L, 0xE719, 0x11D2, 0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D
1132 Quality - 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1133 Connection - 0x1D58C920L, 0xAC9B, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1136 /* ===============================================================
1137 StreamAllocator Sets
1139 Event set - 0x75d95571L, 0x073c, 0x11d0, 0xa1, 0x61, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
1140 Method set - 0xcf6e4341L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
1141 Property set - 0xcf6e4342L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
1144 /* ===============================================================
1145 StreamInterface Sets
1147 Property set - 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
1150 /* ===============================================================
1153 Property set - 0xDF12A4C0L, 0xAC17, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1154 Event sets - 0x364D8E20L, 0x62C7, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1157 /* ===============================================================
1160 Event set - 0x7f4bcbe0L, 0x9ea5, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00
1163 /* ===============================================================
1166 KSTIME_FORMAT_NONE (null guid)
1167 FRAME - 0x7b785570L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1168 BYTE - 0x7b785571L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1169 SAMPLE - 0x7b785572L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1170 FIELD - 0x7b785573L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1171 MEDIA_TIME - 0x7b785574L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1174 /* ===============================================================
1184 #define STATIC_KSDATAFORMAT_SPECIFIER_NONE\
1185 0x0F6417D6L, 0xC318, 0x11D0, {0xA4, 0x3F, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
1186 DEFINE_GUIDSTRUCT("0F6417D6-C318-11D0-A43F-00A0C9223196", KSDATAFORMAT_SPECIFIER_NONE
);
1187 #define KSDATAFORMAT_SPECIFIER_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_NONE)
1189 /* ===============================================================
1192 WILDCARD, DONT_CARE = NULL
1193 SYSTEM - 0x091bb638L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1194 USER - 0x8cb0fc28L, 0x7893, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1195 KERNEL_PAGED - 0xd833f8f8L, 0x7894, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1196 KERNEL_NONPAGED - 0x4a6d5fc4L, 0x7895, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1197 DEVICE_UNKNOWN - 0x091bb639L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1200 /* ===============================================================
1202 (values have been checked)
1207 #define DEFINE_KSPROPERTY_ITEM(PropertyId, GetHandler,\
1211 Values, RelationsCount, Relations, SupportHandler,\
1214 PropertyId, {(PFNKSHANDLER)GetHandler}, MinProperty, MinData,\
1215 {(PFNKSHANDLER)SetHandler},\
1216 (PKSPROPERTY_VALUES)Values, RelationsCount, (PKSPROPERTY)Relations,\
1217 (PFNKSHANDLER)SupportHandler, (ULONG)SerializedSize\
1222 #define DEFINE_KSPROPERTY_ITEM(PropertyId, GetHandler,\
1226 Values, RelationsCount, Relations, SupportHandler,\
1229 PropertyId, (PFNKSHANDLER)GetHandler, MinProperty, MinData,\
1230 (PFNKSHANDLER)SetHandler,\
1231 (PKSPROPERTY_VALUES)Values, RelationsCount, (PKSPROPERTY)Relations,\
1232 (PFNKSHANDLER)SupportHandler, (ULONG)SerializedSize\
1239 KsObjectTypeFilterFactory
,
1249 } KSSTATE
, *PKSSTATE
;
1252 KSTARGET_STATE_DISABLED
,
1253 KSTARGET_STATE_ENABLED
1266 KSEVENTS_FMUTEXUNSAFE
,
1269 } KSEVENTS_LOCKTYPE
;
1272 KSDEGRADE_STANDARD_SIMPLE
,
1273 KSDEGRADE_STANDARD_QUALITY
,
1274 KSDEGRADE_STANDARD_COMPUTATION
,
1275 KSDEGRADE_STANDARD_SKIP
1276 } KSDEGRADE_STANDARD
;
1279 KSPIN_DATAFLOW_IN
= 1,
1281 } KSPIN_DATAFLOW
, *PKSPIN_DATAFLOW
;
1284 KSPIN_COMMUNICATION_NONE
,
1285 KSPIN_COMMUNICATION_SINK
,
1286 KSPIN_COMMUNICATION_SOURCE
,
1287 KSPIN_COMMUNICATION_BOTH
,
1288 KSPIN_COMMUNICATION_BRIDGE
1289 } KSPIN_COMMUNICATION
, *PKSPIN_COMMUNICATION
;
1294 } KSLIST_ENTRY_LOCATION
;
1297 KsStackCopyToNewLocation
,
1298 KsStackReuseCurrentLocation
,
1299 KsStackUseNewLocation
1305 KsAcquireOnlySingleItem
,
1306 KsAcquireAndRemoveOnlySingleItem
1307 } KSIRP_REMOVAL_OPERATION
;
1310 KsInvokeOnSuccess
= 1,
1311 KsInvokeOnError
= 2,
1312 KsInvokeOnCancel
= 4
1313 } KSCOMPLETION_INVOCATION
;
1315 #if defined(_NTDDK_) && !defined(__wtypes_h__)
1345 VT_USERDEFINED
= 29,
1352 VT_STREAMED_OBJECT
= 68,
1353 VT_STORED_OBJECT
= 69,
1354 VT_BLOB_OBJECT
= 70,
1360 VT_RESERVED
= 0x8000,
1361 VT_ILLEGAL
= 0xffff,
1362 VT_ILLEGALMASKED
= 0xfff,
1367 #define STATIC_KSDATAFORMAT_TYPE_WILDCARD STATIC_GUID_NULL
1368 #define KSDATAFORMAT_TYPE_WILDCARD GUID_NULL
1370 #define STATIC_KSDATAFORMAT_SUBTYPE_WILDCARD STATIC_GUID_NULL
1371 #define KSDATAFORMAT_SUBTYPE_WILDCARD GUID_NULL
1373 #define STATIC_KSDATAFORMAT_SPECIFIER_WILDCARD STATIC_GUID_NULL
1374 #define KSDATAFORMAT_SPECIFIER_WILDCARD GUID_NULL
1376 /* ===============================================================
1384 } KS_FRAMING_RANGE
, *PKS_FRAMING_RANGE
;
1387 KS_FRAMING_RANGE Range
;
1388 ULONG InPlaceWeight
;
1389 ULONG NotInPlaceWeight
;
1390 } KS_FRAMING_RANGE_WEIGHTED
, *PKS_FRAMING_RANGE_WEIGHTED
;
1399 ULONG FileAlignment
;
1400 ULONG MemoryTypeWeight
;
1401 KS_FRAMING_RANGE PhysicalRange
;
1402 KS_FRAMING_RANGE_WEIGHTED FramingRange
;
1403 } KS_FRAMING_ITEM
, *PKS_FRAMING_ITEM
;
1406 ULONG RatioNumerator
;
1407 ULONG RatioDenominator
;
1408 ULONG RatioConstantMargin
;
1409 } KS_COMPRESSION
, *PKS_COMPRESSION
;
1411 /* ===============================================================
1415 #define KSPRIORITY_LOW 0x00000001
1416 #define KSPRIORITY_NORMAL 0x40000000
1417 #define KSPRIORITY_HIGH 0x80000000
1418 #define KSPRIORITY_EXCLUSIVE 0xFFFFFFFF
1421 ULONG PriorityClass
;
1422 ULONG PrioritySubClass
;
1423 } KSPRIORITY
, *PKSPRIORITY
;
1425 /* ===============================================================
1427 http://www.osronline.com/DDKx/stream/ks-struct_494j.htm
1430 #if defined(_NTDDK_)
1433 PDRIVER_DISPATCH DeviceIoControl
;
1434 PDRIVER_DISPATCH Read
;
1435 PDRIVER_DISPATCH Write
;
1436 PDRIVER_DISPATCH Flush
;
1437 PDRIVER_DISPATCH Close
;
1438 PDRIVER_DISPATCH QuerySecurity
;
1439 PDRIVER_DISPATCH SetSecurity
;
1440 PFAST_IO_DEVICE_CONTROL FastDeviceIoControl
;
1441 PFAST_IO_READ FastRead
;
1442 PFAST_IO_WRITE FastWrite
;
1443 } KSDISPATCH_TABLE
, *PKSDISPATCH_TABLE
;
1445 #define KSCREATE_ITEM_IRP_STORAGE(Irp) (*(PKSOBJECT_CREATE_ITEM*)&(Irp)->Tail.Overlay.DriverContext[0])
1446 #define KSEVENT_SET_IRP_STORAGE(Irp) (*(const KSEVENT_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1447 #define KSEVENT_ITEM_IRP_STORAGE(Irp) (*(const KSEVENT_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1448 #define KSEVENT_ENTRY_IRP_STORAGE(Irp) (*(PKSEVENT_ENTRY*)&(Irp)->Tail.Overlay.DriverContext[0])
1449 #define KSMETHOD_SET_IRP_STORAGE(Irp) (*(const KSMETHOD_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1450 #define KSMETHOD_ITEM_IRP_STORAGE(Irp) (*(const KSMETHOD_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1451 #define KSMETHOD_TYPE_IRP_STORAGE(Irp) (*(ULONG_PTR*)(&(Irp)->Tail.Overlay.DriverContext[2]))
1452 #define KSQUEUE_SPINLOCK_IRP_STORAGE(Irp) (*(PKSPIN_LOCK*)&(Irp)->Tail.Overlay.DriverContext[1])
1453 #define KSPROPERTY_SET_IRP_STORAGE(Irp) (*(const KSPROPERTY_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1454 #define KSPROPERTY_ITEM_IRP_STORAGE(Irp) (*(const KSPROPERTY_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1455 #define KSPROPERTY_ATTRIBUTES_IRP_STORAGE(Irp) (*(PKSATTRIBUTE_LIST*)&(Irp)->Tail.Overlay.DriverContext[2])
1457 _IRQL_requires_max_(PASSIVE_LEVEL
)
1459 (NTAPI
*PFNREFERENCEDEVICEOBJECT
)(
1460 _In_ PVOID Context
);
1462 _IRQL_requires_max_(PASSIVE_LEVEL
)
1464 (NTAPI
*PFNDEREFERENCEDEVICEOBJECT
)(
1465 _In_ PVOID Context
);
1467 _IRQL_requires_max_(PASSIVE_LEVEL
)
1469 (NTAPI
*PFNQUERYREFERENCESTRING
)(
1471 _Inout_ PWCHAR
*String
);
1474 INTERFACE Interface
;
1475 PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject
;
1476 PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject
;
1477 PFNQUERYREFERENCESTRING QueryReferenceString
;
1478 } BUS_INTERFACE_REFERENCE
, *PBUS_INTERFACE_REFERENCE
;
1482 ULONG ReferenceCount
;
1483 KSPIN_LOCK AccessLock
;
1484 } KSDPC_ITEM
, *PKSDPC_ITEM
;
1488 LIST_ENTRY BufferList
;
1489 } KSBUFFER_ITEM
, *PKSBUFFER_ITEM
;
1491 #endif /* _NTDDK_ */
1500 } KSCOMPONENTID
, *PKSCOMPONENTID
;
1502 #define DEFINE_KSPROPERTY_ITEM_GENERAL_COMPONENTID(Handler)\
1503 DEFINE_KSPROPERTY_ITEM(\
1504 KSPROPERTY_GENERAL_COMPONENTID,\
1506 sizeof(KSPROPERTY),\
1507 sizeof(KSCOMPONENTID),\
1508 NULL, NULL, 0, NULL, NULL, 0)
1510 /* ===============================================================
1517 } KSPROPERTY_SERIALHDR
, *PKSPROPERTY_SERIALHDR
;
1520 KSIDENTIFIER PropTypeSet
;
1522 ULONG PropertyLength
;
1523 } KSPROPERTY_SERIAL
, *PKSPROPERTY_SERIAL
;
1529 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1535 ULONG UnsignedMinimum
;
1536 ULONG UnsignedMaximum
;
1537 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1542 } KSPROPERTY_BOUNDS_LONG
, *PKSPROPERTY_BOUNDS_LONG
;
1546 LONGLONG SignedMinimum
;
1547 LONGLONG SignedMaximum
;
1548 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1554 #if defined(_NTDDK_)
1555 ULONGLONG UnsignedMinimum
;
1556 ULONGLONG UnsignedMaximum
;
1558 DWORDLONG UnsignedMinimum
;
1559 DWORDLONG UnsignedMaximum
;
1561 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1566 } KSPROPERTY_BOUNDS_LONGLONG
, *PKSPROPERTY_BOUNDS_LONGLONG
;
1570 ULONG DescriptionSize
;
1571 KSIDENTIFIER PropTypeSet
;
1572 ULONG MembersListCount
;
1574 } KSPROPERTY_DESCRIPTION
, *PKSPROPERTY_DESCRIPTION
;
1581 } KSPROPERTY_MEMBERSHEADER
, *PKSPROPERTY_MEMBERSHEADER
;
1584 KSPROPERTY_MEMBERSHEADER MembersHeader
;
1585 const VOID
*Members
;
1586 } KSPROPERTY_MEMBERSLIST
, *PKSPROPERTY_MEMBERSLIST
;
1588 #define KSPROPERTY_MEMBER_RANGES 0x00000001
1589 #define KSPROPERTY_MEMBER_STEPPEDRANGES 0x00000002
1590 #define KSPROPERTY_MEMBER_VALUES 0x00000003
1592 #define KSPROPERTY_MEMBER_FLAG_DEFAULT 0x00000001
1593 #if (NTDDI_VERSION >= NTDDI_WINXP)
1594 #define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_MULTICHANNEL 0x00000002
1595 #define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_UNIFORM 0x00000004
1599 KSIDENTIFIER PropTypeSet
;
1600 ULONG MembersListCount
;
1601 _Field_size_(MembersListCount
) const KSPROPERTY_MEMBERSLIST
*MembersList
;
1602 } KSPROPERTY_VALUES
, *PKSPROPERTY_VALUES
;
1604 #if defined(_NTDDK_)
1606 _IRQL_requires_max_(PASSIVE_LEVEL
)
1608 (NTAPI
*PFNKSCONTEXT_DISPATCH
)(
1612 _IRQL_requires_max_(PASSIVE_LEVEL
)
1614 (NTAPI
*PFNKSHANDLER
)(
1616 _In_ PKSIDENTIFIER Request
,
1617 _Inout_ PVOID Data
);
1622 PFNKSHANDLER GetPropertyHandler
;
1623 BOOLEAN GetSupported
;
1628 PFNKSHANDLER SetPropertyHandler
;
1629 BOOLEAN SetSupported
;
1631 const KSPROPERTY_VALUES
*Values
;
1632 ULONG RelationsCount
;
1633 _Field_size_(RelationsCount
) const KSPROPERTY
*Relations
;
1634 PFNKSHANDLER SupportHandler
;
1635 ULONG SerializedSize
;
1636 } KSPROPERTY_ITEM
, *PKSPROPERTY_ITEM
;
1638 _IRQL_requires_max_(PASSIVE_LEVEL
)
1640 (NTAPI
*PFNKSFASTHANDLER
)(
1641 _In_ PFILE_OBJECT FileObject
,
1642 _In_reads_bytes_(RequestLength
) PKSIDENTIFIER Request
,
1643 _In_ ULONG RequestLength
,
1644 _Inout_updates_bytes_(DataLength
) PVOID Data
,
1645 _In_ ULONG DataLength
,
1646 _Out_ PIO_STATUS_BLOCK IoStatus
);
1651 PFNKSFASTHANDLER GetPropertyHandler
;
1652 BOOLEAN GetSupported
;
1655 PFNKSFASTHANDLER SetPropertyHandler
;
1656 BOOLEAN SetSupported
;
1659 } KSFASTPROPERTY_ITEM
, *PKSFASTPROPERTY_ITEM
;
1663 ULONG PropertiesCount
;
1664 _Field_size_(PropertiesCount
) const KSPROPERTY_ITEM
*PropertyItem
;
1666 const KSFASTPROPERTY_ITEM
*FastIoTable
;
1667 } KSPROPERTY_SET
, *PKSPROPERTY_SET
;
1669 #endif /* _NTDDK_ */
1672 ULONG SteppingDelta
;
1674 KSPROPERTY_BOUNDS_LONG Bounds
;
1675 } KSPROPERTY_STEPPING_LONG
, *PKSPROPERTY_STEPPING_LONG
;
1678 #if defined(_NTDDK_)
1679 ULONGLONG SteppingDelta
;
1681 DWORDLONG SteppingDelta
;
1683 KSPROPERTY_BOUNDS_LONGLONG Bounds
;
1684 } KSPROPERTY_STEPPING_LONGLONG
, *PKSPROPERTY_STEPPING_LONGLONG
;
1686 /* ===============================================================
1693 ULONG RequirementsFlags
;
1695 #if defined(_NTDDK_)
1702 ULONG FileAlignment
;
1704 } KSALLOCATOR_FRAMING
, *PKSALLOCATOR_FRAMING
;
1709 KS_COMPRESSION OutputCompression
;
1711 KS_FRAMING_ITEM FramingItem
[1];
1712 } KSALLOCATOR_FRAMING_EX
, *PKSALLOCATOR_FRAMING_EX
;
1714 #define KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER 0x00000001
1715 #define KSALLOCATOR_REQUIREMENTF_SYSTEM_MEMORY 0x00000002
1716 #define KSALLOCATOR_REQUIREMENTF_FRAME_INTEGRITY 0x00000004
1717 #define KSALLOCATOR_REQUIREMENTF_MUST_ALLOCATE 0x00000008
1718 #define KSALLOCATOR_REQUIREMENTF_PREFERENCES_ONLY 0x80000000
1720 #define KSALLOCATOR_OPTIONF_COMPATIBLE 0x00000001
1721 #define KSALLOCATOR_OPTIONF_SYSTEM_MEMORY 0x00000002
1722 #define KSALLOCATOR_OPTIONF_VALID 0x00000003
1724 #define KSALLOCATOR_FLAG_PARTIAL_READ_SUPPORT 0x00000010
1725 #define KSALLOCATOR_FLAG_DEVICE_SPECIFIC 0x00000020
1726 #define KSALLOCATOR_FLAG_CAN_ALLOCATE 0x00000040
1727 #define KSALLOCATOR_FLAG_INSIST_ON_FRAMESIZE_RATIO 0x00000080
1729 /* ===============================================================
1737 } KSQUALITY
, *PKSQUALITY
;
1740 HANDLE QualityManager
;
1742 } KSQUALITY_MANAGER
, *PKSQUALITY_MANAGER
;
1745 LONGLONG PresentationStart
;
1747 KSPIN_INTERFACE Interface
;
1753 KSPROPERTY Property
;
1755 } KSRATE_CAPABILITY
, *PKSRATE_CAPABILITY
;
1758 LONGLONG Granularity
;
1760 } KSRESOLUTION
, *PKSRESOLUTION
;
1763 ULONG NotificationType
;
1767 ULONG_PTR Reserved
[2];
1774 #if defined(_NTDDK_)
1777 KPRIORITY Increment
;
1782 KPRIORITY Increment
;
1787 ULONG ReferenceCount
;
1791 PWORK_QUEUE_ITEM WorkQueueItem
;
1792 WORK_QUEUE_TYPE WorkQueueType
;
1796 PWORK_QUEUE_ITEM WorkQueueItem
;
1797 PKSWORKER KsWorkerObject
;
1803 LONG_PTR Alignment
[2];
1806 } KSEVENTDATA
, *PKSEVENTDATA
;
1808 #define KSEVENTF_EVENT_HANDLE 0x00000001
1809 #define KSEVENTF_SEMAPHORE_HANDLE 0x00000002
1810 #if defined(_NTDDK_)
1811 #define KSEVENTF_EVENT_OBJECT 0x00000004
1812 #define KSEVENTF_SEMAPHORE_OBJECT 0x00000008
1813 #define KSEVENTF_DPC 0x00000010
1814 #define KSEVENTF_WORKITEM 0x00000020
1815 #define KSEVENTF_KSWORKITEM 0x00000080
1819 #define KSEVENT_TYPE_ENABLE 0x00000001
1820 #define KSEVENT_TYPE_ONESHOT 0x00000002
1821 #define KSEVENT_TYPE_ENABLEBUFFERED 0x00000004
1822 #define KSEVENT_TYPE_SETSUPPORT 0x00000100
1823 #define KSEVENT_TYPE_BASICSUPPORT 0x00000200
1824 #define KSEVENT_TYPE_QUERYBUFFER 0x00000400
1826 #define KSEVENT_TYPE_TOPOLOGY 0x10000000
1832 HANDLE ObjectHandle
;
1833 PVOID ObjectPointer
;
1837 KSEVENTDATA EventData
;
1838 } KSRELATIVEEVENT
, *PKSRELATIVEEVENT
;
1840 #define KSRELATIVEEVENT_FLAG_HANDLE 0x00000001
1841 #define KSRELATIVEEVENT_FLAG_POINTER 0x00000002
1843 /* ===============================================================
1848 KSEVENTDATA EventData
;
1850 } KSEVENT_TIME_MARK
, *PKSEVENT_TIME_MARK
;
1853 KSEVENTDATA EventData
;
1856 } KSEVENT_TIME_INTERVAL
, *PKSEVENT_TIME_INTERVAL
;
1861 } KSINTERVAL
, *PKSINTERVAL
;
1871 LONGLONG SystemTime
;
1872 } KSCORRELATED_TIME
, *PKSCORRELATED_TIME
;
1878 } KSFRAMETIME
, *PKSFRAMETIME
;
1880 /* ===============================================================
1884 typedef PVOID PKSDEFAULTCLOCK
;
1888 } KSCLOCK_CREATE
, *PKSCLOCK_CREATE
;
1890 #if defined(_NTDDK_)
1892 _IRQL_requires_max_(PASSIVE_LEVEL
)
1894 (FASTCALL
*PFNKSCLOCK_GETTIME
)(
1895 _In_ PFILE_OBJECT FileObject
);
1897 _IRQL_requires_max_(PASSIVE_LEVEL
)
1899 (FASTCALL
*PFNKSCLOCK_CORRELATEDTIME
)(
1900 _In_ PFILE_OBJECT FileObject
,
1901 _Out_ PLONGLONG SystemTime
);
1904 PFNKSCLOCK_GETTIME GetTime
;
1905 PFNKSCLOCK_GETTIME GetPhysicalTime
;
1906 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedTime
;
1907 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedPhysicalTime
;
1908 } KSCLOCK_FUNCTIONTABLE
, *PKSCLOCK_FUNCTIONTABLE
;
1910 #define DEFINE_KSPROPERTY_ITEM_CLOCK_TIME(Handler)\
1911 DEFINE_KSPROPERTY_ITEM(\
1912 KSPROPERTY_CLOCK_TIME,\
1914 sizeof(KSPROPERTY),\
1916 NULL, NULL, 0, NULL, NULL, 0)
1918 #define DEFINE_KSPROPERTY_ITEM_CLOCK_PHYSICALTIME(Handler)\
1919 DEFINE_KSPROPERTY_ITEM(\
1920 KSPROPERTY_CLOCK_PHYSICALTIME,\
1922 sizeof(KSPROPERTY),\
1924 NULL, NULL, 0, NULL, NULL, 0)
1926 #define DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDTIME(Handler)\
1927 DEFINE_KSPROPERTY_ITEM(\
1928 KSPROPERTY_CLOCK_CORRELATEDTIME,\
1930 sizeof(KSPROPERTY),\
1931 sizeof(KSCORRELATED_TIME),\
1932 NULL, NULL, 0, NULL, NULL, 0)
1934 #define DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDPHYSICALTIME(Handler)\
1935 DEFINE_KSPROPERTY_ITEM(\
1936 KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME,\
1938 sizeof(KSPROPERTY),\
1939 sizeof(KSCORRELATED_TIME),\
1940 NULL, NULL, 0, NULL, NULL, 0)
1942 #define DEFINE_KSPROPERTY_ITEM_CLOCK_RESOLUTION(Handler)\
1943 DEFINE_KSPROPERTY_ITEM(\
1944 KSPROPERTY_CLOCK_RESOLUTION,\
1946 sizeof(KSPROPERTY),\
1947 sizeof(KSRESOLUTION),\
1948 NULL, NULL, 0, NULL, NULL, 0)
1950 #define DEFINE_KSPROPERTY_ITEM_CLOCK_STATE(Handler)\
1951 DEFINE_KSPROPERTY_ITEM(\
1952 KSPROPERTY_CLOCK_STATE,\
1954 sizeof(KSPROPERTY),\
1956 NULL, NULL, 0, NULL, NULL, 0)
1958 #define DEFINE_KSPROPERTY_ITEM_CLOCK_FUNCTIONTABLE(Handler)\
1959 DEFINE_KSPROPERTY_ITEM(\
1960 KSPROPERTY_CLOCK_FUNCTIONTABLE,\
1962 sizeof(KSPROPERTY),\
1963 sizeof(KSCLOCK_FUNCTIONTABLE),\
1964 NULL, NULL, 0, NULL, NULL, 0)
1966 #define DEFINE_KSPROPERTY_CLOCKSET(ClockSet,\
1967 PropTime, PropPhysicalTime,\
1968 PropCorrelatedTime, PropCorrelatedPhysicalTime,\
1969 PropResolution, PropState, PropFunctionTable)\
1970 DEFINE_KSPROPERTY_TABLE(ClockSet) {\
1971 DEFINE_KSPROPERTY_ITEM_CLOCK_TIME(PropTime),\
1972 DEFINE_KSPROPERTY_ITEM_CLOCK_PHYSICALTIME(PropPhysicalTime),\
1973 DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDTIME(PropCorrelatedTime),\
1974 DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDPHYSICALTIME(PropCorrelatedPhysicalTime),\
1975 DEFINE_KSPROPERTY_ITEM_CLOCK_RESOLUTION(PropResolution),\
1976 DEFINE_KSPROPERTY_ITEM_CLOCK_STATE(PropState),\
1977 DEFINE_KSPROPERTY_ITEM_CLOCK_FUNCTIONTABLE(PropFunctionTable)\
1980 /* ===============================================================
1981 Objects ??? SORT ME!
1984 #define KSCREATE_ITEM_SECURITYCHANGED 0x1
1985 #define KSCREATE_ITEM_WILDCARD 0x2
1986 #define KSCREATE_ITEM_NOPARAMETERS 0x4
1987 #define KSCREATE_ITEM_FREEONSTOP 0x8
1990 PDRIVER_DISPATCH Create
;
1992 UNICODE_STRING ObjectClass
;
1993 PSECURITY_DESCRIPTOR SecurityDescriptor
;
1995 } KSOBJECT_CREATE_ITEM
, *PKSOBJECT_CREATE_ITEM
;
1998 ULONG CreateItemsCount
;
1999 _Field_size_(CreateItemsCount
) PKSOBJECT_CREATE_ITEM CreateItemsList
;
2000 } KSOBJECT_CREATE
, *PKSOBJECT_CREATE
;
2003 (NTAPI
*PFNKSITEMFREECALLBACK
)(
2004 _In_ PKSOBJECT_CREATE_ITEM CreateItem
);
2006 #endif /* _NTDDK_ */
2011 } KSMULTIPLE_ITEM
, *PKSMULTIPLE_ITEM
;
2015 PKSEVENTDATA EventData
;
2017 } KSQUERYBUFFER
, *PKSQUERYBUFFER
;
2022 } KSERROR
, *PKSERROR
;
2024 /* ===============================================================
2028 #if defined(_NTDDK_)
2033 PFNKSHANDLER MethodHandler
;
2034 BOOLEAN MethodSupported
;
2038 PFNKSHANDLER SupportHandler
;
2040 } KSMETHOD_ITEM
, *PKSMETHOD_ITEM
;
2044 #define DEFINE_KSMETHOD_ITEM(MethodId, Flags,\
2046 MinMethod, MinData, SupportHandler)\
2048 MethodId, {(PFNKSHANDLER)MethodHandler}, MinMethod, MinData,\
2049 SupportHandler, Flags\
2054 #define DEFINE_KSMETHOD_ITEM(MethodId, Flags,\
2056 MinMethod, MinData, SupportHandler)\
2058 MethodId, (PFNKSHANDLER)MethodHandler, MinMethod, MinData,\
2059 SupportHandler, Flags\
2067 PFNKSFASTHANDLER MethodHandler
;
2068 BOOLEAN MethodSupported
;
2070 } KSFASTMETHOD_ITEM
, *PKSFASTMETHOD_ITEM
;
2072 #define DEFINE_KSFASTMETHOD_ITEM(MethodId, MethodHandler)\
2074 MethodId, (PFNKSFASTHANDLER)MethodHandler\
2080 _Field_size_(MethodsCount
) const KSMETHOD_ITEM
*MethodItem
;
2082 _Field_size_(FastIoCount
) const KSFASTMETHOD_ITEM
*FastIoTable
;
2083 } KSMETHOD_SET
, *PKSMETHOD_SET
;
2085 #define DEFINE_KSMETHOD_SET(Set,\
2098 #endif /* _NTDDK_ */
2100 /* ===============================================================
2105 KSPROPERTY Property
;
2108 } KSP_NODE
, *PKSP_NODE
;
2114 } KSM_NODE
, *PKSM_NODE
;
2120 } KSE_NODE
, *PKSE_NODE
;
2125 } KSNODE_CREATE
, *PKSNODE_CREATE
;
2127 /* ===============================================================
2131 typedef struct _KSEVENT_ENTRY KSEVENT_ENTRY
, *PKSEVENT_ENTRY
;
2133 #if defined(_NTDDK_)
2136 (NTAPI
*PFNKSADDEVENT
)(
2138 _In_ PKSEVENTDATA EventData
,
2139 _In_
struct _KSEVENT_ENTRY
*EventEntry
);
2142 (NTAPI
*PFNKSREMOVEEVENT
)(
2143 _In_ PFILE_OBJECT FileObject
,
2144 _In_
struct _KSEVENT_ENTRY
*EventEntry
);
2149 ULONG ExtraEntryData
;
2150 PFNKSADDEVENT AddHandler
;
2151 PFNKSREMOVEEVENT RemoveHandler
;
2152 PFNKSHANDLER SupportHandler
;
2153 } KSEVENT_ITEM
, *PKSEVENT_ITEM
;
2158 _Field_size_(EventsCount
) const KSEVENT_ITEM
*EventItem
;
2159 } KSEVENT_SET
, *PKSEVENT_SET
;
2161 struct _KSEVENT_ENTRY
{
2162 LIST_ENTRY ListEntry
;
2165 PKSDPC_ITEM DpcItem
;
2166 PKSBUFFER_ITEM BufferItem
;
2168 PKSEVENTDATA EventData
;
2169 ULONG NotificationType
;
2170 const KSEVENT_SET
*EventSet
;
2171 const KSEVENT_ITEM
*EventItem
;
2172 PFILE_OBJECT FileObject
;
2173 ULONG SemaphoreAdjustment
;
2178 #endif /* _NTDDK_ */
2180 /* ===============================================================
2184 #if defined(_NTDDK_)
2186 typedef struct _KSPIN KSPIN
, *PKSPIN
;
2187 typedef struct _KSSTREAM_POINTER KSSTREAM_POINTER
, *PKSSTREAM_POINTER
;
2188 typedef struct _KSSTREAM_POINTER_OFFSET KSSTREAM_POINTER_OFFSET
, *PKSSTREAM_POINTER_OFFSET
;
2189 typedef struct _KSMAPPING KSMAPPING
, *PKSMAPPING
;
2190 typedef struct _KSPROCESSPIN KSPROCESSPIN
, *PKSPROCESSPIN
;
2192 #define IOCTL_KS_HANDSHAKE CTL_CODE(FILE_DEVICE_KS, 0x007, METHOD_NEITHER, FILE_ANY_ACCESS)
2198 } KSHANDSHAKE
, *PKSHANDSHAKE
;
2200 _IRQL_requires_max_(PASSIVE_LEVEL
)
2202 (NTAPI
*PFNKSPINHANDSHAKE
)(
2204 _In_ PKSHANDSHAKE In
,
2205 _In_ PKSHANDSHAKE Out
);
2207 _IRQL_requires_max_(PASSIVE_LEVEL
)
2209 (NTAPI
*PFNKSPINPOWER
)(
2211 _In_ DEVICE_POWER_STATE State
);
2214 (NTAPI
*PFNKSPINFRAMERETURN
)(
2216 _In_reads_bytes_opt_(Size
) PVOID Data
,
2217 _In_opt_ ULONG Size
,
2219 _In_opt_ PVOID Context
,
2220 _In_ NTSTATUS Status
);
2222 _IRQL_requires_max_(DISPATCH_LEVEL
)
2224 (NTAPI
*PFNKSPINIRPCOMPLETION
)(
2228 _IRQL_requires_max_(PASSIVE_LEVEL
)
2230 (NTAPI
*PFNKSPINIRP
)(
2238 _IRQL_requires_max_(PASSIVE_LEVEL
)
2240 (NTAPI
*PFNKSPINVOID
)(
2243 _IRQL_requires_max_(DISPATCH_LEVEL
)
2245 (NTAPI
*PFNKSSTREAMPOINTER
)(
2246 _In_ PKSSTREAM_POINTER StreamPointer
);
2250 _Field_size_(Count
) PKSATTRIBUTE
*Attributes
;
2251 } KSATTRIBUTE_LIST
, *PKSATTRIBUTE_LIST
;
2253 _IRQL_requires_max_(PASSIVE_LEVEL
)
2255 (NTAPI
*PFNKSPINSETDATAFORMAT
)(
2257 _In_opt_ PKSDATAFORMAT OldFormat
,
2258 _In_opt_ PKSMULTIPLE_ITEM OldAttributeList
,
2259 _In_
const KSDATARANGE
* DataRange
,
2260 _In_opt_
const KSATTRIBUTE_LIST
* AttributeRange
);
2262 _IRQL_requires_max_(PASSIVE_LEVEL
)
2264 (NTAPI
*PFNKSPINSETDEVICESTATE
)(
2266 _In_ KSSTATE ToState
,
2267 _In_ KSSTATE FromState
);
2269 typedef struct _KSCLOCK_DISPATCH KSCLOCK_DISPATCH
, *PKSCLOCK_DISPATCH
;
2270 typedef struct _KSALLOCATOR_DISPATCH KSALLOCATOR_DISPATCH
, *PKSALLOCATOR_DISPATCH
;
2277 PFNKSPINSETDATAFORMAT SetDataFormat
;
2278 PFNKSPINSETDEVICESTATE SetDeviceState
;
2280 PFNKSPINVOID Disconnect
;
2281 const KSCLOCK_DISPATCH
* Clock
;
2282 const KSALLOCATOR_DISPATCH
* Allocator
;
2283 } KSPIN_DISPATCH
, *PKSPIN_DISPATCH
;
2285 _IRQL_requires_max_(DISPATCH_LEVEL
)
2287 (NTAPI
*PFNKSPINSETTIMER
)(
2290 _In_ LARGE_INTEGER DueTime
,
2293 _IRQL_requires_max_(DISPATCH_LEVEL
)
2295 (NTAPI
*PFNKSPINCANCELTIMER
)(
2297 _In_ PKTIMER Timer
);
2299 _IRQL_requires_max_(DISPATCH_LEVEL
)
2301 (FASTCALL
*PFNKSPINCORRELATEDTIME
)(
2303 _Out_ PLONGLONG SystemTime
);
2305 _IRQL_requires_max_(DISPATCH_LEVEL
)
2307 (NTAPI
*PFNKSPINRESOLUTION
)(
2309 _Out_ PKSRESOLUTION Resolution
);
2311 struct _KSCLOCK_DISPATCH
{
2312 PFNKSPINSETTIMER SetTimer
;
2313 PFNKSPINCANCELTIMER CancelTimer
;
2314 PFNKSPINCORRELATEDTIME CorrelatedTime
;
2315 PFNKSPINRESOLUTION Resolution
;
2318 _IRQL_requires_max_(PASSIVE_LEVEL
)
2320 (NTAPI
*PFNKSPININITIALIZEALLOCATOR
)(
2322 _In_ PKSALLOCATOR_FRAMING AllocatorFraming
,
2323 _Out_ PVOID
*Context
);
2326 (NTAPI
*PFNKSDELETEALLOCATOR
)(
2327 _In_ PVOID Context
);
2330 (NTAPI
*PFNKSDEFAULTALLOCATE
)(
2331 _In_ PVOID Context
);
2334 (NTAPI
*PFNKSDEFAULTFREE
)(
2338 struct _KSALLOCATOR_DISPATCH
{
2339 PFNKSPININITIALIZEALLOCATOR InitializeAllocator
;
2340 PFNKSDELETEALLOCATOR DeleteAllocator
;
2341 PFNKSDEFAULTALLOCATE Allocate
;
2342 PFNKSDEFAULTFREE Free
;
2345 typedef struct KSAUTOMATION_TABLE_
{
2346 ULONG PropertySetsCount
;
2347 ULONG PropertyItemSize
;
2348 _Field_size_bytes_(PropertySetsCount
* PropertyItemSize
) const KSPROPERTY_SET
*PropertySets
;
2349 ULONG MethodSetsCount
;
2350 ULONG MethodItemSize
;
2351 _Field_size_bytes_(MethodSetsCount
* MethodItemSize
) const KSMETHOD_SET
*MethodSets
;
2352 ULONG EventSetsCount
;
2353 ULONG EventItemSize
;
2354 _Field_size_bytes_(EventSetsCount
* EventItemSize
) const KSEVENT_SET
*EventSets
;
2355 #if !defined(_WIN64)
2358 } KSAUTOMATION_TABLE
, *PKSAUTOMATION_TABLE
;
2361 ULONG InterfacesCount
;
2362 _Field_size_(InterfacesCount
) const KSPIN_INTERFACE
*Interfaces
;
2364 _Field_size_(MediumsCount
) const KSPIN_MEDIUM
*Mediums
;
2365 ULONG DataRangesCount
;
2366 _Field_size_(DataRangesCount
) const PKSDATARANGE
*DataRanges
;
2367 KSPIN_DATAFLOW DataFlow
;
2368 KSPIN_COMMUNICATION Communication
;
2369 const GUID
*Category
;
2374 ULONG ConstrainedDataRangesCount
;
2375 _Field_size_(ConstrainedDataRangesCount
) PKSDATARANGE
*ConstrainedDataRanges
;
2378 } KSPIN_DESCRIPTOR
, *PKSPIN_DESCRIPTOR
;
2380 _Must_inspect_result_
2381 _IRQL_requires_max_(PASSIVE_LEVEL
)
2383 (NTAPI
*PFNKSINTERSECTHANDLER
)(
2386 _In_ PKSDATARANGE DataRange
,
2387 _Out_opt_ PVOID Data
);
2389 _Must_inspect_result_
2390 _IRQL_requires_max_(PASSIVE_LEVEL
)
2392 (NTAPI
*PFNKSINTERSECTHANDLEREX
)(
2396 _In_ PKSDATARANGE DataRange
,
2397 _In_ PKSDATARANGE MatchingDataRange
,
2398 _In_ ULONG DataBufferSize
,
2399 _Out_writes_bytes_to_opt_(DataBufferSize
, *DataSize
) PVOID Data
,
2400 _Out_ PULONG DataSize
);
2403 const KSPIN_DISPATCH
* Dispatch
;
2404 const KSAUTOMATION_TABLE
* AutomationTable
;
2405 KSPIN_DESCRIPTOR PinDescriptor
;
2407 ULONG InstancesPossible
;
2408 ULONG InstancesNecessary
;
2409 const KSALLOCATOR_FRAMING_EX
* AllocatorFraming
;
2410 PFNKSINTERSECTHANDLEREX IntersectHandler
;
2411 } KSPIN_DESCRIPTOR_EX
, *PKSPIN_DESCRIPTOR_EX
;
2413 #define KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING 0x00000001
2414 #define KSFILTER_FLAG_CRITICAL_PROCESSING 0x00000002
2415 #define KSFILTER_FLAG_HYPERCRITICAL_PROCESSING 0x00000004
2416 #define KSFILTER_FLAG_RECEIVE_ZERO_LENGTH_SAMPLES 0x00000008
2417 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
2418 #define KSFILTER_FLAG_DENY_USERMODE_ACCESS 0x80000000
2421 #define KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING
2422 #define KSPIN_FLAG_CRITICAL_PROCESSING KSFILTER_FLAG_CRITICAL_PROCESSING
2423 #define KSPIN_FLAG_HYPERCRITICAL_PROCESSING KSFILTER_FLAG_HYPERCRITICAL_PROCESSING
2425 #define KSPIN_FLAG_ASYNCHRONOUS_PROCESSING 0x00000008
2426 #define KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING 0x00000010
2427 #define KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL 0x00000020
2428 #define KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING 0x00000040
2429 #define KSPIN_FLAG_ENFORCE_FIFO 0x00000080
2431 #define KSPIN_FLAG_GENERATE_MAPPINGS 0x00000100
2432 #define KSPIN_FLAG_DISTINCT_TRAILING_EDGE 0x00000200
2434 #define KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY 0x00010000
2435 #define KSPIN_FLAG_SPLITTER 0x00020000
2436 #define KSPIN_FLAG_USE_STANDARD_TRANSPORT 0x00040000
2437 #define KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT 0x00080000
2438 #define KSPIN_FLAG_FIXED_FORMAT 0x00100000
2439 #define KSPIN_FLAG_GENERATE_EOS_EVENTS 0x00200000
2441 #define KSPIN_FLAG_RENDERER (KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY|KSPIN_FLAG_GENERATE_EOS_EVENTS)
2443 #define KSPIN_FLAG_IMPLEMENT_CLOCK 0x00400000
2444 #define KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING 0x00800000
2445 #define KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE 0x01000000
2446 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
2447 #define KSPIN_FLAG_DENY_USERMODE_ACCESS 0x80000000
2451 const KSPIN_DESCRIPTOR_EX
*Descriptor
;
2455 KSPIN_COMMUNICATION Communication
;
2456 BOOLEAN ConnectionIsExternal
;
2457 KSPIN_INTERFACE ConnectionInterface
;
2458 KSPIN_MEDIUM ConnectionMedium
;
2459 KSPRIORITY ConnectionPriority
;
2460 PKSDATAFORMAT ConnectionFormat
;
2461 PKSMULTIPLE_ITEM AttributeList
;
2462 ULONG StreamHeaderSize
;
2463 KSPIN_DATAFLOW DataFlow
;
2464 KSSTATE DeviceState
;
2466 KSSTATE ClientState
;
2469 #define DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(Handler)\
2470 DEFINE_KSPROPERTY_ITEM(\
2471 KSPROPERTY_PIN_CINSTANCES,\
2474 sizeof(KSPIN_CINSTANCES),\
2475 NULL, NULL, 0, NULL, NULL, 0)
2477 #define DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(Handler)\
2478 DEFINE_KSPROPERTY_ITEM(\
2479 KSPROPERTY_PIN_CTYPES,\
2481 sizeof(KSPROPERTY),\
2483 NULL, NULL, 0, NULL, NULL, 0)
2485 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(Handler)\
2486 DEFINE_KSPROPERTY_ITEM(\
2487 KSPROPERTY_PIN_DATAFLOW,\
2490 sizeof(KSPIN_DATAFLOW),\
2491 NULL, NULL, 0, NULL, NULL, 0)
2493 #define DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(Handler)\
2494 DEFINE_KSPROPERTY_ITEM(\
2495 KSPROPERTY_PIN_DATARANGES,\
2499 NULL, NULL, 0, NULL, NULL, 0)
2501 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(Handler)\
2502 DEFINE_KSPROPERTY_ITEM(\
2503 KSPROPERTY_PIN_DATAINTERSECTION,\
2505 sizeof(KSP_PIN) + sizeof(KSMULTIPLE_ITEM),\
2507 NULL, NULL, 0, NULL, NULL, 0)
2509 #define DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(Handler)\
2510 DEFINE_KSPROPERTY_ITEM(\
2511 KSPROPERTY_PIN_INTERFACES,\
2515 NULL, NULL, 0, NULL, NULL, 0)
2517 #define DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(Handler)\
2518 DEFINE_KSPROPERTY_ITEM(\
2519 KSPROPERTY_PIN_MEDIUMS,\
2523 NULL, NULL, 0, NULL, NULL, 0)
2525 #define DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(Handler)\
2526 DEFINE_KSPROPERTY_ITEM(\
2527 KSPROPERTY_PIN_COMMUNICATION,\
2530 sizeof(KSPIN_COMMUNICATION),\
2531 NULL, NULL, 0, NULL, NULL, 0)
2533 #define DEFINE_KSPROPERTY_ITEM_PIN_GLOBALCINSTANCES(Handler)\
2534 DEFINE_KSPROPERTY_ITEM(\
2535 KSPROPERTY_PIN_GLOBALCINSTANCES,\
2538 sizeof(KSPIN_CINSTANCES),\
2539 NULL, NULL, 0, NULL, NULL, 0)
2541 #define DEFINE_KSPROPERTY_ITEM_PIN_NECESSARYINSTANCES(Handler)\
2542 DEFINE_KSPROPERTY_ITEM(\
2543 KSPROPERTY_PIN_NECESSARYINSTANCES,\
2547 NULL, NULL, 0, NULL, NULL, 0)
2549 #define DEFINE_KSPROPERTY_ITEM_PIN_PHYSICALCONNECTION(Handler)\
2550 DEFINE_KSPROPERTY_ITEM(\
2551 KSPROPERTY_PIN_PHYSICALCONNECTION,\
2555 NULL, NULL, 0, NULL, NULL, 0)
2557 #define DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(Handler)\
2558 DEFINE_KSPROPERTY_ITEM(\
2559 KSPROPERTY_PIN_CATEGORY,\
2563 NULL, NULL, 0, NULL, NULL, 0)
2565 #define DEFINE_KSPROPERTY_ITEM_PIN_NAME(Handler)\
2566 DEFINE_KSPROPERTY_ITEM(\
2567 KSPROPERTY_PIN_NAME,\
2571 NULL, NULL, 0, NULL, NULL, 0)
2573 #define DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(Handler)\
2574 DEFINE_KSPROPERTY_ITEM(\
2575 KSPROPERTY_PIN_CONSTRAINEDDATARANGES,\
2579 NULL, NULL, 0, NULL, NULL, 0)
2581 #define DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(Handler)\
2582 DEFINE_KSPROPERTY_ITEM(\
2583 KSPROPERTY_PIN_PROPOSEDATAFORMAT,\
2586 sizeof(KSDATAFORMAT),\
2587 (Handler), NULL, 0, NULL, NULL, 0)
2589 #define DEFINE_KSPROPERTY_PINSET(PinSet,\
2590 PropGeneral, PropInstances, PropIntersection)\
2591 DEFINE_KSPROPERTY_TABLE(PinSet) {\
2592 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
2593 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
2594 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
2595 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
2596 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
2597 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
2598 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
2599 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
2600 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
2601 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral)\
2604 #define DEFINE_KSPROPERTY_PINSETCONSTRAINED(PinSet,\
2605 PropGeneral, PropInstances, PropIntersection)\
2606 DEFINE_KSPROPERTY_TABLE(PinSet) {\
2607 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
2608 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
2609 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
2610 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
2611 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
2612 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
2613 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
2614 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
2615 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
2616 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral),\
2617 DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral)\
2624 #define DEFINE_KSPROPERTY_TABLE(tablename) \
2625 const KSPROPERTY_ITEM tablename[] =
2627 #endif /* _NTDDK_ */
2630 KSPIN_INTERFACE Interface
;
2631 KSPIN_MEDIUM Medium
;
2634 KSPRIORITY Priority
;
2635 } KSPIN_CONNECT
, *PKSPIN_CONNECT
;
2637 /* ===============================================================
2646 } KSTOPOLOGY_CONNECTION
, *PKSTOPOLOGY_CONNECTION
;
2649 ULONG CategoriesCount
;
2650 _Field_size_(CategoriesCount
) const GUID
*Categories
;
2651 ULONG TopologyNodesCount
;
2652 _Field_size_(TopologyNodesCount
) const GUID
*TopologyNodes
;
2653 ULONG TopologyConnectionsCount
;
2654 _Field_size_(TopologyConnectionsCount
) const KSTOPOLOGY_CONNECTION
*TopologyConnections
;
2655 _Field_size_(TopologyNodesCount
) const GUID
*TopologyNodesNames
;
2657 } KSTOPOLOGY
, *PKSTOPOLOGY
;
2660 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler)\
2661 DEFINE_KSPROPERTY_ITEM(\
2662 KSPROPERTY_TOPOLOGY_CATEGORIES,\
2664 sizeof(KSPROPERTY),\
2666 NULL, NULL, 0, NULL, NULL, 0)
2668 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler)\
2669 DEFINE_KSPROPERTY_ITEM(\
2670 KSPROPERTY_TOPOLOGY_NODES,\
2672 sizeof(KSPROPERTY),\
2674 NULL, NULL, 0, NULL, NULL, 0)
2676 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler)\
2677 DEFINE_KSPROPERTY_ITEM(\
2678 KSPROPERTY_TOPOLOGY_CONNECTIONS,\
2680 sizeof(KSPROPERTY),\
2682 NULL, NULL, 0, NULL, NULL, 0)
2684 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\
2685 DEFINE_KSPROPERTY_ITEM(\
2686 KSPROPERTY_TOPOLOGY_NAME,\
2690 NULL, NULL, 0, NULL, NULL, 0)
2692 #define DEFINE_KSPROPERTY_TOPOLOGYSET(TopologySet, Handler)\
2693 DEFINE_KSPROPERTY_TABLE(TopologySet) {\
2694 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler),\
2695 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler),\
2696 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler),\
2697 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\
2700 /* ===============================================================
2705 typedef void* UNKNOWN
;
2708 (NTAPI
*PFNKSINITIALIZEALLOCATOR
)(
2709 _In_ PVOID InitialContext
,
2710 _In_ PKSALLOCATOR_FRAMING AllocatorFraming
,
2711 _Outptr_ PVOID
*Context
);
2713 #if defined(_NTDDK_)
2715 _IRQL_requires_max_(PASSIVE_LEVEL
)
2717 (NTAPI
*PFNKSALLOCATOR
)(
2719 _In_ ULONG BufferSize
,
2720 _In_ BOOLEAN InputOperation
);
2722 _Must_inspect_result_
2723 _IRQL_requires_max_(PASSIVE_LEVEL
)
2725 (NTAPI
*PFNKINTERSECTHANDLEREX
)(
2729 _In_ PKSDATARANGE DataRange
,
2730 _In_ PKSDATARANGE MatchingDataRange
,
2731 _In_ ULONG DataBufferSize
,
2732 _Out_writes_bytes_to_opt_(DataBufferSize
, *DataSize
) PVOID Data
,
2733 _Out_ PULONG DataSize
);
2736 (NTAPI
*PFNALLOCATOR_ALLOCATEFRAME
)(
2737 _In_ PFILE_OBJECT FileObject
,
2738 _Outptr_ PVOID
*Frame
);
2741 (NTAPI
*PFNALLOCATOR_FREEFRAME
)(
2742 _In_ PFILE_OBJECT FileObject
,
2746 PFNALLOCATOR_ALLOCATEFRAME AllocateFrame
;
2747 PFNALLOCATOR_FREEFRAME FreeFrame
;
2748 } KSSTREAMALLOCATOR_FUNCTIONTABLE
, *PKSSTREAMALLOCATOR_FUNCTIONTABLE
;
2750 #endif /* _NTDDK_ */
2753 KSALLOCATOR_FRAMING Framing
;
2754 ULONG AllocatedFrames
;
2756 } KSSTREAMALLOCATOR_STATUS
, *PKSSTREAMALLOCATOR_STATUS
;
2759 KSALLOCATOR_FRAMING_EX Framing
;
2760 ULONG AllocatedFrames
;
2762 } KSSTREAMALLOCATOR_STATUS_EX
, *PKSSTREAMALLOCATOR_STATUS_EX
;
2766 ULONG TypeSpecificFlags
;
2767 KSTIME PresentationTime
;
2776 } KSSTREAM_HEADER
, *PKSSTREAM_HEADER
;
2778 #define KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT 0x00000001
2779 #define KSSTREAM_HEADER_OPTIONSF_PREROLL 0x00000002
2780 #define KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY 0x00000004
2781 #define KSSTREAM_HEADER_OPTIONSF_TYPECHANGED 0x00000008
2782 #define KSSTREAM_HEADER_OPTIONSF_TIMEVALID 0x00000010
2783 #define KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY 0x00000040
2784 #define KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE 0x00000080
2785 #define KSSTREAM_HEADER_OPTIONSF_DURATIONVALID 0x00000100
2786 #define KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM 0x00000200
2787 #define KSSTREAM_HEADER_OPTIONSF_BUFFEREDTRANSFER 0x00000400
2788 #define KSSTREAM_HEADER_OPTIONSF_VRAM_DATA_TRANSFER 0x00000800
2789 #define KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA 0x80000000
2791 /* ===============================================================
2795 #if defined(_NTDDK_)
2797 typedef struct _KSGATE KSGATE
, *PKSGATE
;
2806 _IRQL_requires_max_(DISPATCH_LEVEL
)
2813 _IRQL_requires_max_(HIGH_LEVEL
)
2818 _In_opt_ PKSGATE Gate
)
2820 while (Gate
&& (InterlockedIncrement(&Gate
->Count
) == 1))
2822 Gate
= Gate
->NextGate
;
2826 _IRQL_requires_max_(HIGH_LEVEL
)
2831 _In_opt_ PKSGATE Gate
)
2833 while (Gate
&& (InterlockedDecrement(&Gate
->Count
) == 0))
2835 Gate
= Gate
->NextGate
;
2839 _IRQL_requires_max_(HIGH_LEVEL
)
2843 KsGateGetStateUnsafe(
2847 return((BOOLEAN
)(Gate
->Count
> 0));
2850 _IRQL_requires_max_(HIGH_LEVEL
)
2854 KsGateCaptureThreshold(
2861 captured
= (BOOLEAN
)(InterlockedCompareExchange(&Gate
->Count
,0,1) == 1);
2865 KsGateTurnInputOff(Gate
->NextGate
);
2871 _IRQL_requires_max_(HIGH_LEVEL
)
2877 _In_ LONG InitialCount
,
2878 _In_opt_ PKSGATE NextGate
,
2879 _In_ BOOLEAN StateToPropagate
)
2882 Gate
->Count
= InitialCount
;
2883 Gate
->NextGate
= NextGate
;
2887 if (InitialCount
> 0)
2889 if (StateToPropagate
)
2891 KsGateTurnInputOn(NextGate
);
2896 if (!StateToPropagate
)
2898 KsGateTurnInputOff(NextGate
);
2904 _IRQL_requires_max_(HIGH_LEVEL
)
2908 KsGateInitializeAnd(
2909 _In_ PKSGATE AndGate
,
2910 _In_opt_ PKSGATE NextOrGate
)
2912 KsGateInitialize(AndGate
,1,NextOrGate
,TRUE
);
2915 _IRQL_requires_max_(HIGH_LEVEL
)
2920 _In_ PKSGATE OrGate
,
2921 _In_opt_ PKSGATE NextAndGate
)
2923 KsGateInitialize(OrGate
,0,NextAndGate
,FALSE
);
2926 _IRQL_requires_max_(HIGH_LEVEL
)
2930 KsGateAddOnInputToAnd(
2931 _In_ PKSGATE AndGate
)
2933 UNREFERENCED_PARAMETER (AndGate
);
2936 _IRQL_requires_max_(HIGH_LEVEL
)
2940 KsGateAddOffInputToAnd(
2941 _In_ PKSGATE AndGate
)
2943 KsGateTurnInputOff(AndGate
);
2946 _IRQL_requires_max_(HIGH_LEVEL
)
2950 KsGateRemoveOnInputFromAnd(
2951 _In_ PKSGATE AndGate
)
2953 UNREFERENCED_PARAMETER (AndGate
);
2956 _IRQL_requires_max_(HIGH_LEVEL
)
2960 KsGateRemoveOffInputFromAnd(
2961 _In_ PKSGATE AndGate
)
2963 KsGateTurnInputOn(AndGate
);
2966 _IRQL_requires_max_(HIGH_LEVEL
)
2970 KsGateAddOnInputToOr(
2971 _In_ PKSGATE OrGate
)
2973 KsGateTurnInputOn(OrGate
);
2976 _IRQL_requires_max_(HIGH_LEVEL
)
2980 KsGateAddOffInputToOr(
2981 _In_ PKSGATE OrGate
)
2983 UNREFERENCED_PARAMETER (OrGate
);
2986 _IRQL_requires_max_(HIGH_LEVEL
)
2990 KsGateRemoveOnInputFromOr(
2991 _In_ PKSGATE OrGate
)
2993 KsGateTurnInputOff(OrGate
);
2996 _IRQL_requires_max_(HIGH_LEVEL
)
3000 KsGateRemoveOffInputFromOr(
3001 _In_ PKSGATE OrGate
)
3003 UNREFERENCED_PARAMETER (OrGate
);
3006 _IRQL_requires_max_(HIGH_LEVEL
)
3011 _In_ PKSGATE AndGate
)
3014 if (KsGateGetStateUnsafe(AndGate
))
3016 KsGateRemoveOnInputFromOr(AndGate
->NextGate
);
3020 KsGateRemoveOffInputFromOr(AndGate
->NextGate
);
3024 _IRQL_requires_max_(HIGH_LEVEL
)
3029 _In_ PKSGATE OrGate
)
3032 if (KsGateGetStateUnsafe(OrGate
))
3034 KsGateRemoveOnInputFromAnd(OrGate
->NextGate
);
3038 KsGateRemoveOffInputFromAnd(OrGate
->NextGate
);
3042 #endif /* !_NTOS_ */
3045 PHYSICAL_ADDRESS PhysicalAddress
;
3050 #endif /* _NTDDK_ */
3053 KSSTREAM_POINTER_STATE_UNLOCKED
= 0,
3054 KSSTREAM_POINTER_STATE_LOCKED
3055 } KSSTREAM_POINTER_STATE
;
3057 typedef struct _KSPROCESSPIN_INDEXENTRY KSPROCESSPIN_INDEXENTRY
, *PKSPROCESSPIN_INDEXENTRY
;
3059 struct _KSSTREAM_POINTER_OFFSET
{
3060 #if defined(_NTDDK_)
3063 PKSMAPPING Mappings
;
3068 #if !defined(_WIN64)
3075 #if defined(_NTDDK_)
3077 struct _KSSTREAM_POINTER
{
3080 PKSSTREAM_HEADER StreamHeader
;
3081 PKSSTREAM_POINTER_OFFSET Offset
;
3082 KSSTREAM_POINTER_OFFSET OffsetIn
;
3083 KSSTREAM_POINTER_OFFSET OffsetOut
;
3086 struct _KSPROCESSPIN
{
3088 PKSSTREAM_POINTER StreamPointer
;
3089 PKSPROCESSPIN InPlaceCounterpart
;
3090 PKSPROCESSPIN DelegateBranch
;
3091 PKSPROCESSPIN CopySource
;
3092 _Field_size_bytes_(BytesAvailable
) PVOID Data
;
3093 ULONG BytesAvailable
;
3099 struct _KSPROCESSPIN_INDEXENTRY
{
3100 _Field_size_(Count
) PKSPROCESSPIN
*Pins
;
3104 #endif /* _NTDDK_ */
3106 /* ===============================================================
3110 #if defined(_NTDDK_)
3112 typedef struct _KSFILTER_DISPATCH KSFILTER_DISPATCH
, *PKSFILTER_DISPATCH
;
3113 typedef struct _KSDEVICE KSDEVICE
, *PKSDEVICE
;
3114 typedef struct _KSFILTER KSFILTER
, *PKSFILTER
;
3115 typedef struct _KSNODE_DESCRIPTOR KSNODE_DESCRIPTOR
, *PKSNODE_DESCRIPTOR
;
3116 typedef struct _KSFILTER_DESCRIPTOR KSFILTER_DESCRIPTOR
, *PKSFILTER_DESCRIPTOR
;
3117 typedef struct _KSDEVICE_DESCRIPTOR KSDEVICE_DESCRIPTOR
, *PKSDEVICE_DESCRIPTOR
;
3119 _IRQL_requires_max_(PASSIVE_LEVEL
)
3121 (NTAPI
*PFNKSDEVICECREATE
)(
3122 _In_ PKSDEVICE Device
);
3124 _IRQL_requires_max_(PASSIVE_LEVEL
)
3126 (NTAPI
*PFNKSDEVICEPNPSTART
)(
3127 _In_ PKSDEVICE Device
,
3129 _In_opt_ PCM_RESOURCE_LIST TranslatedResourceList
,
3130 _In_opt_ PCM_RESOURCE_LIST UntranslatedResourceList
);
3132 _IRQL_requires_max_(PASSIVE_LEVEL
)
3134 (NTAPI
*PFNKSDEVICE
)(
3135 _In_ PKSDEVICE Device
);
3137 _IRQL_requires_max_(PASSIVE_LEVEL
)
3139 (NTAPI
*PFNKSDEVICEIRP
)(
3140 _In_ PKSDEVICE Device
,
3143 _IRQL_requires_max_(PASSIVE_LEVEL
)
3145 (NTAPI
*PFNKSDEVICEIRPVOID
)(
3146 _In_ PKSDEVICE Device
,
3149 _IRQL_requires_max_(PASSIVE_LEVEL
)
3151 (NTAPI
*PFNKSDEVICEQUERYCAPABILITIES
)(
3152 _In_ PKSDEVICE Device
,
3154 _Inout_ PDEVICE_CAPABILITIES Capabilities
);
3156 _IRQL_requires_max_(PASSIVE_LEVEL
)
3158 (NTAPI
*PFNKSDEVICEQUERYPOWER
)(
3159 _In_ PKSDEVICE Device
,
3161 _In_ DEVICE_POWER_STATE DeviceTo
,
3162 _In_ DEVICE_POWER_STATE DeviceFrom
,
3163 _In_ SYSTEM_POWER_STATE SystemTo
,
3164 _In_ SYSTEM_POWER_STATE SystemFrom
,
3165 _In_ POWER_ACTION Action
);
3167 _IRQL_requires_max_(PASSIVE_LEVEL
)
3169 (NTAPI
*PFNKSDEVICESETPOWER
)(
3170 _In_ PKSDEVICE Device
,
3172 _In_ DEVICE_POWER_STATE To
,
3173 _In_ DEVICE_POWER_STATE From
);
3175 typedef struct _KSDEVICE_DISPATCH
{
3176 PFNKSDEVICECREATE Add
;
3177 PFNKSDEVICEPNPSTART Start
;
3178 PFNKSDEVICE PostStart
;
3179 PFNKSDEVICEIRP QueryStop
;
3180 PFNKSDEVICEIRPVOID CancelStop
;
3181 PFNKSDEVICEIRPVOID Stop
;
3182 PFNKSDEVICEIRP QueryRemove
;
3183 PFNKSDEVICEIRPVOID CancelRemove
;
3184 PFNKSDEVICEIRPVOID Remove
;
3185 PFNKSDEVICEQUERYCAPABILITIES QueryCapabilities
;
3186 PFNKSDEVICEIRPVOID SurpriseRemoval
;
3187 PFNKSDEVICEQUERYPOWER QueryPower
;
3188 PFNKSDEVICESETPOWER SetPower
;
3189 PFNKSDEVICEIRP QueryInterface
;
3190 } KSDEVICE_DISPATCH
, *PKSDEVICE_DISPATCH
;
3192 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
3193 #define KSDEVICE_DESCRIPTOR_VERSION_2 (0x110)
3194 #define MIN_DEV_VER_FOR_FLAGS (0x110)
3198 const KSDEVICE_DESCRIPTOR
* Descriptor
;
3201 PDEVICE_OBJECT FunctionalDeviceObject
;
3202 PDEVICE_OBJECT PhysicalDeviceObject
;
3203 PDEVICE_OBJECT NextDeviceObject
;
3205 SYSTEM_POWER_STATE SystemPowerState
;
3206 DEVICE_POWER_STATE DevicePowerState
;
3209 #endif /* _NTDDK_ */
3211 /* ===============================================================
3215 #if defined(_NTDDK_)
3218 const KSFILTER_DESCRIPTOR
* Descriptor
;
3223 _IRQL_requires_max_(PASSIVE_LEVEL
)
3225 (NTAPI
*PFNKSFILTERPOWER
)(
3226 _In_ PKSFILTER Filter
,
3227 _In_ DEVICE_POWER_STATE State
);
3229 _IRQL_requires_max_(PASSIVE_LEVEL
)
3231 (NTAPI
*PFNKSFILTERIRP
)(
3232 _In_ PKSFILTER Filter
,
3236 (NTAPI
*PFNKSFILTERPROCESS
)(
3237 _In_ PKSFILTER Filter
,
3238 _In_ PKSPROCESSPIN_INDEXENTRY ProcessPinsIndex
);
3240 _IRQL_requires_max_(PASSIVE_LEVEL
)
3242 (NTAPI
*PFNKSFILTERVOID
)(
3243 _In_ PKSFILTER Filter
);
3245 struct _KSFILTER_DISPATCH
{
3246 PFNKSFILTERIRP Create
;
3247 PFNKSFILTERIRP Close
;
3248 PFNKSFILTERPROCESS Process
;
3249 PFNKSFILTERVOID Reset
;
3252 struct _KSNODE_DESCRIPTOR
{
3253 const KSAUTOMATION_TABLE
*AutomationTable
;
3256 #if !defined(_WIN64)
3261 struct _KSFILTER_DESCRIPTOR
{
3262 const KSFILTER_DISPATCH
*Dispatch
;
3263 const KSAUTOMATION_TABLE
*AutomationTable
;
3266 const GUID
*ReferenceGuid
;
3267 ULONG PinDescriptorsCount
;
3268 ULONG PinDescriptorSize
;
3269 _Field_size_bytes_(PinDescriptorsCount
* PinDescriptorSize
) const KSPIN_DESCRIPTOR_EX
*PinDescriptors
;
3270 ULONG CategoriesCount
;
3271 _Field_size_(CategoriesCount
) const GUID
*Categories
;
3272 ULONG NodeDescriptorsCount
;
3273 ULONG NodeDescriptorSize
;
3274 _Field_size_bytes_(NodeDescriptorsCount
* NodeDescriptorSize
) const KSNODE_DESCRIPTOR
*NodeDescriptors
;
3275 ULONG ConnectionsCount
;
3276 _Field_size_(ConnectionsCount
) const KSTOPOLOGY_CONNECTION
*Connections
;
3277 const KSCOMPONENTID
*ComponentId
;
3280 #define KSFILTER_DESCRIPTOR_VERSION ((ULONG)-1)
3282 struct _KSDEVICE_DESCRIPTOR
{
3283 const KSDEVICE_DISPATCH
*Dispatch
;
3284 ULONG FilterDescriptorsCount
;
3285 _Field_size_(FilterDescriptorsCount
) const KSFILTER_DESCRIPTOR
* const *FilterDescriptors
;
3290 struct _KSFILTERFACTORY
{
3291 const KSFILTER_DESCRIPTOR
* FilterDescriptor
;
3296 #define DEFINE_KSFILTER_DESCRIPTOR(descriptor)\
3297 const KSFILTER_DESCRIPTOR descriptor =
3299 #define DEFINE_KSFILTER_PIN_DESCRIPTORS(table)\
3300 SIZEOF_ARRAY(table),\
3304 #define DEFINE_KSFILTER_CATEGORIES(table)\
3305 SIZEOF_ARRAY(table),\
3308 #define DEFINE_KSFILTER_CATEGORY(category)\
3312 #define DEFINE_KSFILTER_CATEGORIES_NULL\
3316 #define DEFINE_KSFILTER_NODE_DESCRIPTORS(table)\
3317 SIZEOF_ARRAY(table),\
3321 #define DEFINE_KSFILTER_NODE_DESCRIPTORS_NULL\
3323 sizeof(KSNODE_DESCRIPTOR),\
3326 #define DEFINE_KSFILTER_CONNECTIONS(table)\
3327 SIZEOF_ARRAY(table),\
3330 #define DEFINE_KSFILTER_DEFAULT_CONNECTIONS\
3334 #endif /* _NTDDK_ */
3336 /* ===============================================================
3337 Minidriver Callbacks
3340 #if defined(_NTDDK_)
3343 (NTAPI
*KStrMethodHandler
)(
3345 IN PKSIDENTIFIER Request
,
3349 (NTAPI
*KStrSupportHandler
)(
3351 IN PKSIDENTIFIER Request
,
3356 /* ===============================================================
3360 #if defined(_NTDDK_)
3362 _IRQL_requires_max_(PASSIVE_LEVEL
)
3367 _In_ HANDLE ConnectionHandle
,
3368 _In_ PKSALLOCATOR_FRAMING AllocatorFraming
,
3369 _Out_ PHANDLE AllocatorHandle
);
3371 _IRQL_requires_max_(PASSIVE_LEVEL
)
3375 KsCreateDefaultAllocator(
3378 _IRQL_requires_max_(PASSIVE_LEVEL
)
3382 KsValidateAllocatorCreateRequest(
3384 _Out_ PKSALLOCATOR_FRAMING
*AllocatorFraming
);
3386 _IRQL_requires_max_(PASSIVE_LEVEL
)
3390 KsCreateDefaultAllocatorEx(
3392 _In_opt_ PVOID InitializeContext
,
3393 _In_opt_ PFNKSDEFAULTALLOCATE DefaultAllocate
,
3394 _In_opt_ PFNKSDEFAULTFREE DefaultFree
,
3395 _In_opt_ PFNKSINITIALIZEALLOCATOR InitializeAllocator
,
3396 _In_opt_ PFNKSDELETEALLOCATOR DeleteAllocator
);
3398 _IRQL_requires_max_(PASSIVE_LEVEL
)
3402 KsValidateAllocatorFramingEx(
3403 _In_ PKSALLOCATOR_FRAMING_EX Framing
,
3404 _In_ ULONG BufferSize
,
3405 _In_
const KSALLOCATOR_FRAMING_EX
*PinFraming
);
3407 #endif /* _NTDDK_ */
3409 /* ===============================================================
3413 #if defined(_NTDDK_)
3415 _IRQL_requires_max_(DISPATCH_LEVEL
)
3417 (NTAPI
*PFNKSSETTIMER
)(
3420 _In_ LARGE_INTEGER DueTime
,
3423 _IRQL_requires_max_(DISPATCH_LEVEL
)
3425 (NTAPI
*PFNKSCANCELTIMER
)(
3427 _In_ PKTIMER Timer
);
3430 (FASTCALL
*PFNKSCORRELATEDTIME
)(
3432 _Out_ PLONGLONG SystemTime
);
3434 _IRQL_requires_max_(PASSIVE_LEVEL
)
3439 _In_ HANDLE ConnectionHandle
,
3440 _In_ PKSCLOCK_CREATE ClockCreate
,
3441 _Out_ PHANDLE ClockHandle
);
3443 _IRQL_requires_max_(PASSIVE_LEVEL
)
3447 KsCreateDefaultClock(
3449 _In_ PKSDEFAULTCLOCK DefaultClock
);
3451 _IRQL_requires_max_(PASSIVE_LEVEL
)
3455 KsAllocateDefaultClock(
3456 _Out_ PKSDEFAULTCLOCK
*DefaultClock
);
3458 _IRQL_requires_max_(PASSIVE_LEVEL
)
3462 KsAllocateDefaultClockEx(
3463 _Out_ PKSDEFAULTCLOCK
*DefaultClock
,
3464 _In_opt_ PVOID Context
,
3465 _In_opt_ PFNKSSETTIMER SetTimer
,
3466 _In_opt_ PFNKSCANCELTIMER CancelTimer
,
3467 _In_opt_ PFNKSCORRELATEDTIME CorrelatedTime
,
3468 _In_opt_
const KSRESOLUTION
*Resolution
,
3471 _IRQL_requires_max_(PASSIVE_LEVEL
)
3476 _In_ PKSDEFAULTCLOCK DefaultClock
);
3478 _IRQL_requires_max_(PASSIVE_LEVEL
)
3482 KsValidateClockCreateRequest(
3484 _Outptr_ PKSCLOCK_CREATE
*ClockCreate
);
3486 _IRQL_requires_max_(DISPATCH_LEVEL
)
3490 KsGetDefaultClockState(
3491 _In_ PKSDEFAULTCLOCK DefaultClock
);
3493 _IRQL_requires_max_(DISPATCH_LEVEL
)
3497 KsSetDefaultClockState(
3498 _In_ PKSDEFAULTCLOCK DefaultClock
,
3499 _In_ KSSTATE State
);
3501 _IRQL_requires_max_(DISPATCH_LEVEL
)
3505 KsGetDefaultClockTime(
3506 _In_ PKSDEFAULTCLOCK DefaultClock
);
3508 _IRQL_requires_max_(DISPATCH_LEVEL
)
3512 KsSetDefaultClockTime(
3513 _In_ PKSDEFAULTCLOCK DefaultClock
,
3514 _In_ LONGLONG Time
);
3516 #endif /* _NTDDK_ */
3518 /* ===============================================================
3522 /* Method sets - TODO: Make into macros! */
3523 #if defined(_NTDDK_)
3528 KSMETHOD_SET_IRP_STORAGE(
3532 KSMETHOD_ITEM_IRP_STORAGE(
3536 KSMETHOD_TYPE_IRP_STORAGE(
3541 _IRQL_requires_max_(PASSIVE_LEVEL
)
3547 _In_ ULONG MethodSetsCount
,
3548 _In_reads_(MethodSetsCount
) const KSMETHOD_SET
* MethodSet
);
3550 _IRQL_requires_max_(PASSIVE_LEVEL
)
3554 KsMethodHandlerWithAllocator(
3556 _In_ ULONG MethodSetsCount
,
3557 _In_reads_(MethodSetsCount
) const KSMETHOD_SET
* MethodSet
,
3558 _In_opt_ PFNKSALLOCATOR Allocator
,
3559 _In_opt_ ULONG MethodItemSize
);
3561 _IRQL_requires_max_(PASSIVE_LEVEL
)
3565 KsFastMethodHandler(
3566 _In_ PFILE_OBJECT FileObject
,
3567 _In_reads_bytes_(MethodLength
) PKSMETHOD UNALIGNED Method
,
3568 _In_ ULONG MethodLength
,
3569 _Inout_updates_bytes_(DataLength
) PVOID UNALIGNED Data
,
3570 _In_ ULONG DataLength
,
3571 _Out_ PIO_STATUS_BLOCK IoStatus
,
3572 _In_ ULONG MethodSetsCount
,
3573 _In_reads_(MethodSetsCount
) const KSMETHOD_SET
*MethodSet
);
3575 #endif /* _NTDDK_ */
3577 /* ===============================================================
3581 #if defined(_NTDDK_)
3583 _IRQL_requires_max_(PASSIVE_LEVEL
)
3589 _In_ ULONG PropertySetsCount
,
3590 _In_reads_(PropertySetsCount
) const KSPROPERTY_SET
*PropertySet
);
3592 _IRQL_requires_max_(PASSIVE_LEVEL
)
3596 KsPropertyHandlerWithAllocator(
3598 _In_ ULONG PropertySetsCount
,
3599 _In_reads_(PropertySetsCount
) const KSPROPERTY_SET
* PropertySet
,
3600 _In_opt_ PFNKSALLOCATOR Allocator
,
3601 _In_opt_ ULONG PropertyItemSize
);
3603 _IRQL_requires_max_(PASSIVE_LEVEL
)
3607 KsUnserializeObjectPropertiesFromRegistry(
3608 _In_ PFILE_OBJECT FileObject
,
3609 _In_opt_ HANDLE ParentKey
,
3610 _In_opt_ PUNICODE_STRING RegistryPath
);
3612 _IRQL_requires_max_(PASSIVE_LEVEL
)
3616 KsFastPropertyHandler(
3617 _In_ PFILE_OBJECT FileObject
,
3618 _In_reads_bytes_(PropertyLength
) PKSPROPERTY UNALIGNED Property
,
3619 _In_ ULONG PropertyLength
,
3620 _In_reads_bytes_(DataLength
) PVOID UNALIGNED Data
,
3621 _In_ ULONG DataLength
,
3622 _Out_ PIO_STATUS_BLOCK IoStatus
,
3623 _In_ ULONG PropertySetsCount
,
3624 _In_reads_(PropertySetsCount
) const KSPROPERTY_SET
*PropertySet
);
3626 #endif /* _NTDDK_ */
3628 /* ===============================================================
3632 #if defined(_NTDDK_)
3634 #define KSPROBE_STREAMREAD 0x00000000
3635 #define KSPROBE_STREAMWRITE 0x00000001
3636 #define KSPROBE_ALLOCATEMDL 0x00000010
3637 #define KSPROBE_PROBEANDLOCK 0x00000020
3638 #define KSPROBE_SYSTEMADDRESS 0x00000040
3639 #define KSPROBE_MODIFY 0x00000200
3640 #define KSPROBE_STREAMWRITEMODIFY (KSPROBE_MODIFY | KSPROBE_STREAMWRITE)
3641 #define KSPROBE_ALLOWFORMATCHANGE 0x00000080
3643 #define KSSTREAM_READ KSPROBE_STREAMREAD
3644 #define KSSTREAM_WRITE KSPROBE_STREAMWRITE
3645 #define KSSTREAM_PAGED_DATA 0x00000000
3646 #define KSSTREAM_NONPAGED_DATA 0x00000100
3647 #define KSSTREAM_SYNCHRONOUS 0x00001000
3648 #define KSSTREAM_FAILUREEXCEPTION 0x00002000
3650 _IRQL_requires_max_(DISPATCH_LEVEL
)
3652 (NTAPI
*PFNKSGENERATEEVENTCALLBACK
)(
3654 _In_ PKSEVENT_ENTRY EventEntry
);
3660 _In_ PKSEVENT_ENTRY EntryEvent
);
3662 _IRQL_requires_max_(DISPATCH_LEVEL
)
3668 _In_opt_
const GUID
*EventSet
,
3670 _In_ ULONG DataSize
,
3671 _In_reads_bytes_opt_(DataSize
) PVOID Data
,
3672 _In_opt_ PFNKSGENERATEEVENTCALLBACK CallBack
,
3673 _In_opt_ PVOID CallBackContext
);
3675 _IRQL_requires_max_(PASSIVE_LEVEL
)
3679 KsEnableEventWithAllocator(
3681 _In_ ULONG EventSetsCount
,
3682 _In_reads_(EventSetsCount
) const KSEVENT_SET
* EventSet
,
3683 _Inout_opt_ PLIST_ENTRY EventsList
,
3684 _In_opt_ KSEVENTS_LOCKTYPE EventsFlags
,
3685 _In_opt_ PVOID EventsLock
,
3686 _In_opt_ PFNKSALLOCATOR Allocator
,
3687 _In_opt_ ULONG EventItemSize
);
3692 KsGenerateDataEvent(
3693 _In_ PKSEVENT_ENTRY EventEntry
,
3694 _In_ ULONG DataSize
,
3695 _In_reads_bytes_(DataSize
) PVOID Data
);
3697 _IRQL_requires_max_(PASSIVE_LEVEL
)
3703 _In_ ULONG EventSetsCount
,
3704 _In_reads_(EventSetsCount
) KSEVENT_SET
*EventSet
,
3705 _Inout_opt_ PLIST_ENTRY EventsList
,
3706 _In_opt_ KSEVENTS_LOCKTYPE EventsFlags
,
3707 _In_opt_ PVOID EventsLock
);
3709 _IRQL_requires_max_(PASSIVE_LEVEL
)
3714 _In_ PKSEVENT_ENTRY EventEntry
);
3716 _IRQL_requires_max_(PASSIVE_LEVEL
)
3722 _Inout_ PLIST_ENTRY EventsList
,
3723 _In_ KSEVENTS_LOCKTYPE EventsFlags
,
3724 _In_ PVOID EventsLock
);
3726 _IRQL_requires_max_(PASSIVE_LEVEL
)
3731 _In_ PFILE_OBJECT FileObject
,
3732 _Inout_ PLIST_ENTRY EventsList
,
3733 _In_ KSEVENTS_LOCKTYPE EventsFlags
,
3734 _In_ PVOID EventsLock
);
3736 /* ===============================================================
3740 _IRQL_requires_max_(PASSIVE_LEVEL
)
3744 KsValidateTopologyNodeCreateRequest(
3746 _In_ PKSTOPOLOGY Topology
,
3747 _Out_ PKSNODE_CREATE
*NodeCreate
);
3749 _IRQL_requires_max_(PASSIVE_LEVEL
)
3753 KsCreateTopologyNode(
3754 _In_ HANDLE ParentHandle
,
3755 _In_ PKSNODE_CREATE NodeCreate
,
3756 _In_ ACCESS_MASK DesiredAccess
,
3757 _Out_ PHANDLE NodeHandle
);
3759 _IRQL_requires_max_(PASSIVE_LEVEL
)
3763 KsTopologyPropertyHandler(
3765 _In_ PKSPROPERTY Property
,
3767 _In_
const KSTOPOLOGY
*Topology
);
3769 /* ===============================================================
3770 Connectivity Functions
3773 _IRQL_requires_max_(PASSIVE_LEVEL
)
3778 _In_ HANDLE FilterHandle
,
3779 _In_ PKSPIN_CONNECT Connect
,
3780 _In_ ACCESS_MASK DesiredAccess
,
3781 _Out_ PHANDLE ConnectionHandle
);
3783 _IRQL_requires_max_(PASSIVE_LEVEL
)
3787 KsValidateConnectRequest(
3789 _In_ ULONG DescriptorsCount
,
3790 _In_reads_(DescriptorsCount
) KSPIN_DESCRIPTOR
*Descriptor
,
3791 _Out_ PKSPIN_CONNECT
*Connect
);
3793 _IRQL_requires_max_(PASSIVE_LEVEL
)
3797 KsPinPropertyHandler(
3799 _In_ PKSPROPERTY Property
,
3801 _In_ ULONG DescriptorsCount
,
3802 _In_reads_(DescriptorsCount
) const KSPIN_DESCRIPTOR
*Descriptor
);
3804 _Must_inspect_result_
3805 _IRQL_requires_max_(PASSIVE_LEVEL
)
3809 KsPinDataIntersection(
3812 _Out_opt_ PVOID Data
,
3813 _In_ ULONG DescriptorsCount
,
3814 _In_reads_(DescriptorsCount
) const KSPIN_DESCRIPTOR
*Descriptor
,
3815 _In_ PFNKSINTERSECTHANDLER IntersectHandler
);
3817 _Must_inspect_result_
3818 _IRQL_requires_max_(PASSIVE_LEVEL
)
3822 KsPinDataIntersectionEx(
3826 _In_ ULONG DescriptorsCount
,
3827 _In_reads_bytes_(DescriptorsCount
* DescriptorSize
) const KSPIN_DESCRIPTOR
*Descriptor
,
3828 _In_ ULONG DescriptorSize
,
3829 _In_opt_ PFNKSINTERSECTHANDLEREX IntersectHandler
,
3830 _In_opt_ PVOID HandlerContext
);
3832 _IRQL_requires_max_(PASSIVE_LEVEL
)
3836 KsPinGetParentFilter(
3839 _IRQL_requires_max_(PASSIVE_LEVEL
)
3843 KsPinGetNextSiblingPin(
3846 _IRQL_requires_max_(DISPATCH_LEVEL
)
3850 KsPinGetLeadingEdgeStreamPointer(
3852 _In_ KSSTREAM_POINTER_STATE State
);
3854 _IRQL_requires_max_(DISPATCH_LEVEL
)
3858 KsStreamPointerSetStatusCode(
3859 _In_ PKSSTREAM_POINTER StreamPointer
,
3860 _In_ NTSTATUS Status
3863 _IRQL_requires_max_(DISPATCH_LEVEL
)
3867 KsStreamPointerDelete(
3868 _In_ PKSSTREAM_POINTER StreamPointer
3871 _IRQL_requires_max_(DISPATCH_LEVEL
)
3875 KsStreamPointerClone(
3876 _In_ PKSSTREAM_POINTER StreamPointer
,
3877 _In_opt_ PFNKSSTREAMPOINTER CancelCallback
,
3878 _In_ ULONG ContextSize
,
3879 _Out_ PKSSTREAM_POINTER
* CloneStreamPointer
3883 /* Does this belong here? */
3885 _IRQL_requires_max_(PASSIVE_LEVEL
)
3889 KsHandleSizedListQuery(
3891 _In_ ULONG DataItemsCount
,
3892 _In_ ULONG DataItemSize
,
3893 _In_reads_bytes_(DataItemsCount
* DataItemSize
) const VOID
*DataItems
);
3895 /* ===============================================================
3896 IRP Helper Functions
3899 _IRQL_requires_max_(DISPATCH_LEVEL
)
3901 (NTAPI
*PFNKSIRPLISTCALLBACK
)(
3903 _In_ PVOID Context
);
3905 _IRQL_requires_max_(PASSIVE_LEVEL
)
3909 KsAcquireResetValue(
3911 _Out_ KSRESET
*ResetValue
);
3913 _IRQL_requires_max_(DISPATCH_LEVEL
)
3917 KsAddIrpToCancelableQueue(
3918 _Inout_ PLIST_ENTRY QueueHead
,
3919 _In_ PKSPIN_LOCK SpinLock
,
3921 _In_ KSLIST_ENTRY_LOCATION ListLocation
,
3922 _In_opt_ PDRIVER_CANCEL DriverCancel
);
3924 _IRQL_requires_max_(PASSIVE_LEVEL
)
3928 KsAddObjectCreateItemToDeviceHeader(
3929 _In_ KSDEVICE_HEADER Header
,
3930 _In_ PDRIVER_DISPATCH Create
,
3932 _In_ PWSTR ObjectClass
,
3933 _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor
);
3935 _IRQL_requires_max_(PASSIVE_LEVEL
)
3939 KsAddObjectCreateItemToObjectHeader(
3940 _In_ KSOBJECT_HEADER Header
,
3941 _In_ PDRIVER_DISPATCH Create
,
3943 _In_ PWSTR ObjectClass
,
3944 _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor
);
3946 _IRQL_requires_max_(APC_LEVEL
)
3950 KsAllocateDeviceHeader(
3951 _Out_ KSDEVICE_HEADER
*Header
,
3952 _In_ ULONG ItemsCount
,
3953 _In_reads_opt_(ItemsCount
) PKSOBJECT_CREATE_ITEM ItemsList
);
3955 _IRQL_requires_max_(PASSIVE_LEVEL
)
3959 KsAllocateExtraData(
3961 _In_ ULONG ExtraSize
,
3962 _Out_ PVOID
*ExtraBuffer
);
3964 _IRQL_requires_max_(PASSIVE_LEVEL
)
3968 KsAllocateObjectCreateItem(
3969 _In_ KSDEVICE_HEADER Header
,
3970 _In_ PKSOBJECT_CREATE_ITEM CreateItem
,
3971 _In_ BOOLEAN AllocateEntry
,
3972 _In_opt_ PFNKSITEMFREECALLBACK ItemFreeCallback
);
3974 _IRQL_requires_max_(APC_LEVEL
)
3978 KsAllocateObjectHeader(
3979 _Out_ KSOBJECT_HEADER
*Header
,
3980 _In_ ULONG ItemsCount
,
3981 _In_reads_opt_(ItemsCount
) PKSOBJECT_CREATE_ITEM ItemsList
,
3983 _In_ KSDISPATCH_TABLE
*Table
);
3985 _IRQL_requires_max_(DISPATCH_LEVEL
)
3990 _Inout_ PLIST_ENTRY QueueHead
,
3991 _In_ PKSPIN_LOCK SpinLock
);
3993 _IRQL_requires_max_(DISPATCH_LEVEL
)
3998 _In_ PDEVICE_OBJECT DeviceObject
,
4001 _IRQL_requires_max_(PASSIVE_LEVEL
)
4005 KsDefaultDeviceIoCompletion(
4006 _In_ PDEVICE_OBJECT DeviceObject
,
4009 _IRQL_requires_max_(PASSIVE_LEVEL
)
4013 KsDispatchFastIoDeviceControlFailure(
4014 _In_ PFILE_OBJECT FileObject
,
4016 _In_reads_bytes_opt_(InputBufferLength
) PVOID InputBuffer
,
4017 _In_ ULONG InputBufferLength
,
4018 _Out_writes_bytes_opt_(OutputBufferLength
) PVOID OutputBuffer
,
4019 _In_ ULONG OutputBufferLength
,
4020 _In_ ULONG IoControlCode
,
4021 _Out_ PIO_STATUS_BLOCK IoStatus
,
4022 _In_ PDEVICE_OBJECT DeviceObject
); /* always return false */
4024 _IRQL_requires_max_(PASSIVE_LEVEL
)
4028 KsDispatchFastReadFailure(
4029 _In_ PFILE_OBJECT FileObject
,
4030 _In_ PLARGE_INTEGER FileOffset
,
4035 _Out_ PIO_STATUS_BLOCK IoStatus
,
4036 _In_ PDEVICE_OBJECT DeviceObject
); /* always return false */
4038 /* This function does the same as the above */
4039 #define KsDispatchFastWriteFailure KsDispatchFastReadFailure
4041 _IRQL_requires_max_(PASSIVE_LEVEL
)
4045 KsDispatchInvalidDeviceRequest(
4046 _In_ PDEVICE_OBJECT DeviceObject
,
4049 _IRQL_requires_max_(PASSIVE_LEVEL
)
4054 _In_ PDEVICE_OBJECT DeviceObject
,
4057 _IRQL_requires_max_(PASSIVE_LEVEL
)
4061 KsDispatchSpecificMethod(
4063 _In_ PFNKSHANDLER Handler
);
4065 _IRQL_requires_max_(PASSIVE_LEVEL
)
4069 KsDispatchSpecificProperty(
4071 _In_ PFNKSHANDLER Handler
);
4073 _IRQL_requires_max_(PASSIVE_LEVEL
)
4077 KsForwardAndCatchIrp(
4078 _In_ PDEVICE_OBJECT DeviceObject
,
4080 _In_ PFILE_OBJECT FileObject
,
4081 _In_ KSSTACK_USE StackUse
);
4083 _IRQL_requires_max_(PASSIVE_LEVEL
)
4089 _In_ PFILE_OBJECT FileObject
,
4090 _In_ BOOLEAN ReuseStackLocation
);
4092 _IRQL_requires_max_(APC_LEVEL
)
4097 _In_ KSDEVICE_HEADER Header
);
4099 _IRQL_requires_max_(APC_LEVEL
)
4109 KsGetChildCreateParameter(
4111 _Out_ PVOID
*CreateParameter
);
4113 _IRQL_requires_max_(DISPATCH_LEVEL
)
4117 KsMoveIrpsOnCancelableQueue(
4118 _Inout_ PLIST_ENTRY SourceList
,
4119 _In_ PKSPIN_LOCK SourceLock
,
4120 _Inout_ PLIST_ENTRY DestinationList
,
4121 _In_opt_ PKSPIN_LOCK DestinationLock
,
4122 _In_ KSLIST_ENTRY_LOCATION ListLocation
,
4123 _In_ PFNKSIRPLISTCALLBACK ListCallback
,
4124 _In_ PVOID Context
);
4126 _IRQL_requires_max_(PASSIVE_LEVEL
)
4132 _In_ ULONG ProbeFlags
,
4133 _In_ ULONG HeaderSize
);
4135 _IRQL_requires_max_(PASSIVE_LEVEL
)
4139 KsQueryInformationFile(
4140 _In_ PFILE_OBJECT FileObject
,
4141 _Out_writes_bytes_(Length
) PVOID FileInformation
,
4143 _In_ FILE_INFORMATION_CLASS FileInformationClass
);
4145 _IRQL_requires_max_(PASSIVE_LEVEL
)
4149 KsQueryObjectAccessMask(
4150 _In_ KSOBJECT_HEADER Header
);
4152 _IRQL_requires_max_(PASSIVE_LEVEL
)
4154 PKSOBJECT_CREATE_ITEM
4156 KsQueryObjectCreateItem(
4157 _In_ KSOBJECT_HEADER Header
);
4159 _IRQL_requires_max_(PASSIVE_LEVEL
)
4164 _In_ PFILE_OBJECT FileObject
,
4165 _In_opt_ PKEVENT Event
,
4166 _In_opt_ PVOID PortContext
,
4167 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
4168 _Out_writes_bytes_(Length
) PVOID Buffer
,
4171 _In_ KPROCESSOR_MODE RequestorMode
);
4173 _IRQL_requires_max_(DISPATCH_LEVEL
)
4180 _IRQL_requires_max_(DISPATCH_LEVEL
)
4184 KsReleaseIrpOnCancelableQueue(
4186 _In_opt_ PDRIVER_CANCEL DriverCancel
);
4188 _IRQL_requires_max_(DISPATCH_LEVEL
)
4192 KsRemoveIrpFromCancelableQueue(
4193 _Inout_ PLIST_ENTRY QueueHead
,
4194 _In_ PKSPIN_LOCK SpinLock
,
4195 _In_ KSLIST_ENTRY_LOCATION ListLocation
,
4196 _In_ KSIRP_REMOVAL_OPERATION RemovalOperation
);
4198 _IRQL_requires_max_(DISPATCH_LEVEL
)
4202 KsRemoveSpecificIrpFromCancelableQueue(
4205 _IRQL_requires_max_(PASSIVE_LEVEL
)
4209 KsSetInformationFile(
4210 _In_ PFILE_OBJECT FileObject
,
4211 _In_reads_bytes_(Length
) PVOID FileInformation
,
4213 _In_ FILE_INFORMATION_CLASS FileInformationClass
);
4215 _IRQL_requires_max_(PASSIVE_LEVEL
)
4219 KsSetMajorFunctionHandler(
4220 _In_ PDRIVER_OBJECT DriverObject
,
4221 _In_ ULONG MajorFunction
);
4224 _IRQL_requires_max_(PASSIVE_LEVEL
)
4229 _In_ PFILE_OBJECT FileObject
,
4230 _In_opt_ PKEVENT Event
,
4231 _In_opt_ PVOID PortContext
,
4232 _In_opt_ PIO_COMPLETION_ROUTINE CompletionRoutine
,
4233 _In_opt_ PVOID CompletionContext
,
4234 _In_opt_ KSCOMPLETION_INVOCATION CompletionInvocationFlags
,
4235 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
4236 _Inout_updates_bytes_(Length
) PVOID StreamHeaders
,
4239 _In_ KPROCESSOR_MODE RequestorMode
);
4241 _IRQL_requires_max_(DISPATCH_LEVEL
)
4245 KsStreamPointerUnlock(
4246 _In_ PKSSTREAM_POINTER StreamPointer
,
4247 _In_ BOOLEAN Eject
);
4249 _IRQL_requires_max_(DISPATCH_LEVEL
)
4253 KsStreamPointerAdvanceOffsets(
4254 _In_ PKSSTREAM_POINTER StreamPointer
,
4257 _In_ BOOLEAN Eject
);
4260 _IRQL_requires_max_(DISPATCH_LEVEL
)
4264 KsStreamPointerAdvance(
4265 _In_ PKSSTREAM_POINTER StreamPointer
);
4267 _IRQL_requires_max_(DISPATCH_LEVEL
)
4271 KsStreamPointerAdvanceOffsetsAndUnlock(
4272 _In_ PKSSTREAM_POINTER StreamPointer
,
4279 _IRQL_requires_max_(PASSIVE_LEVEL
)
4284 _In_ PFILE_OBJECT FileObject
,
4285 _In_opt_ PKEVENT Event
,
4286 _In_opt_ PVOID PortContext
,
4287 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
4288 _In_reads_bytes_(Length
) PVOID Buffer
,
4291 _In_ KPROCESSOR_MODE RequestorMode
);
4296 KsDefaultForwardIrp(
4297 _In_ PDEVICE_OBJECT DeviceObject
,
4300 /* ===============================================================
4301 Worker Management Functions
4304 _IRQL_requires_max_(PASSIVE_LEVEL
)
4309 _In_ WORK_QUEUE_TYPE WorkQueueType
,
4310 _Out_ PKSWORKER
* Worker
);
4312 _IRQL_requires_max_(PASSIVE_LEVEL
)
4317 _In_ PKSWORKER Worker
);
4319 _IRQL_requires_max_(PASSIVE_LEVEL
)
4323 KsRegisterCountedWorker(
4324 _In_ WORK_QUEUE_TYPE WorkQueueType
,
4325 _In_ PWORK_QUEUE_ITEM CountedWorkItem
,
4326 _Out_ PKSWORKER
*Worker
);
4328 _IRQL_requires_max_(PASSIVE_LEVEL
)
4332 KsDecrementCountedWorker(
4333 _In_ PKSWORKER Worker
);
4335 _IRQL_requires_max_(PASSIVE_LEVEL
)
4339 KsIncrementCountedWorker(
4340 _In_ PKSWORKER Worker
);
4342 _IRQL_requires_max_(DISPATCH_LEVEL
)
4347 _In_ PKSWORKER Worker
,
4348 _In_ PWORK_QUEUE_ITEM WorkItem
);
4350 /* ===============================================================
4354 _IRQL_requires_max_(PASSIVE_LEVEL
)
4359 _In_ PVOID ImageBase
,
4360 _In_ POOL_TYPE PoolType
,
4361 _In_ ULONG_PTR ResourceName
,
4362 _In_ ULONG ResourceType
,
4363 _Outptr_result_bytebuffer_(*ResourceSize
) PVOID
*Resource
,
4364 _Out_opt_ PULONG ResourceSize
);
4366 _IRQL_requires_max_(PASSIVE_LEVEL
)
4370 KsGetImageNameAndResourceId(
4372 _Out_ PUNICODE_STRING ImageName
,
4373 _Out_ PULONG_PTR ResourceId
,
4374 _Out_ PULONG ValueType
);
4376 _IRQL_requires_max_(PASSIVE_LEVEL
)
4381 _In_ PDEVICE_OBJECT PhysicalDeviceObject
,
4382 _In_ PUNICODE_STRING ModuleName
,
4383 _Out_ PUNICODE_STRING ImageName
,
4384 _Out_ PULONG_PTR ResourceId
,
4385 _Out_ PULONG ValueType
);
4387 /* ===============================================================
4388 Misc. Helper Functions
4391 _IRQL_requires_max_(PASSIVE_LEVEL
)
4398 _IRQL_requires_max_(PASSIVE_LEVEL
)
4403 _In_ PUNICODE_STRING SymbolicLink
,
4404 _In_ PKSPIN_MEDIUM Medium
,
4405 _In_ ULONG PinDirection
);
4410 KsDefaultDispatchPnp(
4411 _In_ PDEVICE_OBJECT DeviceObject
,
4414 _IRQL_requires_max_(PASSIVE_LEVEL
)
4418 KsSetDevicePnpAndBaseObject(
4419 _In_ KSDEVICE_HEADER Header
,
4420 _In_ PDEVICE_OBJECT PnpDeviceObject
,
4421 _In_ PDEVICE_OBJECT BaseDevice
);
4426 KsDefaultDispatchPower(
4427 _In_ PDEVICE_OBJECT DeviceObject
,
4430 _IRQL_requires_max_(PASSIVE_LEVEL
)
4435 _In_ KSOBJECT_HEADER Header
,
4436 _In_opt_ PFNKSCONTEXT_DISPATCH PowerDispatch
,
4437 _In_opt_ PVOID PowerContext
);
4439 _IRQL_requires_max_(PASSIVE_LEVEL
)
4443 KsReferenceBusObject(
4444 _In_ KSDEVICE_HEADER Header
);
4446 _IRQL_requires_max_(PASSIVE_LEVEL
)
4450 KsDereferenceBusObject(
4451 _In_ KSDEVICE_HEADER Header
);
4453 _IRQL_requires_max_(PASSIVE_LEVEL
)
4457 KsFreeObjectCreateItem(
4458 _In_ KSDEVICE_HEADER Header
,
4459 _In_ PUNICODE_STRING CreateItem
);
4461 _IRQL_requires_max_(PASSIVE_LEVEL
)
4465 KsFreeObjectCreateItemsByContext(
4466 _In_ KSDEVICE_HEADER Header
,
4467 _In_ PVOID Context
);
4469 _IRQL_requires_max_(PASSIVE_LEVEL
)
4474 _In_ PDRIVER_OBJECT DriverObject
);
4476 _IRQL_requires_max_(PASSIVE_LEVEL
)
4480 KsQueryDevicePnpObject(
4481 _In_ KSDEVICE_HEADER Header
);
4483 _IRQL_requires_max_(PASSIVE_LEVEL
)
4487 KsRecalculateStackDepth(
4488 _In_ KSDEVICE_HEADER Header
,
4489 _In_ BOOLEAN ReuseStackLocation
);
4491 _IRQL_requires_max_(PASSIVE_LEVEL
)
4495 KsSetTargetDeviceObject(
4496 _In_ KSOBJECT_HEADER Header
,
4497 _In_opt_ PDEVICE_OBJECT TargetDevice
);
4499 _IRQL_requires_max_(PASSIVE_LEVEL
)
4504 _In_ KSOBJECT_HEADER Header
,
4505 _In_ KSTARGET_STATE TargetState
);
4507 _Must_inspect_result_
4508 _IRQL_requires_max_(PASSIVE_LEVEL
)
4512 KsSynchronousIoControlDevice(
4513 _In_ PFILE_OBJECT FileObject
,
4514 _In_ KPROCESSOR_MODE RequestorMode
,
4515 _In_ ULONG IoControl
,
4516 _In_reads_bytes_(InSize
) PVOID InBuffer
,
4518 _Out_writes_bytes_to_(OutSize
, *BytesReturned
) PVOID OutBuffer
,
4520 _Out_ PULONG BytesReturned
);
4522 _IRQL_requires_max_(PASSIVE_LEVEL
)
4526 KsFilterGetFirstChildPin(
4527 _In_ PKSFILTER Filter
,
4530 _IRQL_requires_max_(PASSIVE_LEVEL
)
4534 KsPinGetConnectedPinFileObject(
4539 #if !defined( KS_NO_CREATE_FUNCTIONS )
4541 _IRQL_requires_max_(PASSIVE_LEVEL
)
4546 _In_ HANDLE ConnectionHandle
,
4547 _In_ PKSALLOCATOR_FRAMING AllocatorFraming
,
4548 _Out_ PHANDLE AllocatorHandle
);
4550 _IRQL_requires_max_(PASSIVE_LEVEL
)
4555 _In_ HANDLE ConnectionHandle
,
4556 _In_ PKSCLOCK_CREATE ClockCreate
,
4557 _Out_ PHANDLE ClockHandle
);
4559 _IRQL_requires_max_(PASSIVE_LEVEL
)
4564 _In_ HANDLE FilterHandle
,
4565 _In_ PKSPIN_CONNECT Connect
,
4566 _In_ ACCESS_MASK DesiredAccess
,
4567 _Out_ PHANDLE ConnectionHandle
);
4569 _IRQL_requires_max_(PASSIVE_LEVEL
)
4573 KsCreateTopologyNode(
4574 _In_ HANDLE ParentHandle
,
4575 _In_ PKSNODE_CREATE NodeCreate
,
4576 _In_ ACCESS_MASK DesiredAccess
,
4577 _Out_ PHANDLE NodeHandle
);
4581 #endif /* _NTDDK_ */
4583 /* ===============================================================
4584 AVStream Functions (XP / DirectX 8)
4586 http://www.osronline.com/ddkx/stream/avstream_5q9f.htm
4589 #if defined(_NTDDK_)
4591 _IRQL_requires_max_(PASSIVE_LEVEL
)
4595 KsMergeAutomationTables(
4596 _Out_ PKSAUTOMATION_TABLE
*AutomationTableAB
,
4597 _In_opt_ PKSAUTOMATION_TABLE AutomationTableA
,
4598 _In_opt_ PKSAUTOMATION_TABLE AutomationTableB
,
4599 _In_opt_ KSOBJECT_BAG Bag
);
4601 _Must_inspect_result_
4602 _IRQL_requires_max_(PASSIVE_LEVEL
)
4607 _In_ PDRIVER_OBJECT DriverObject
,
4608 _In_ PUNICODE_STRING RegistryPath
,
4609 _In_opt_
const KSDEVICE_DESCRIPTOR
*Descriptor
);
4611 typedef struct _KSFILTERFACTORY KSFILTERFACTORY
, *PKSFILTERFACTORY
; //FIXME
4613 _IRQL_requires_max_(PASSIVE_LEVEL
)
4617 KsInitializeDevice (
4618 _In_ PDEVICE_OBJECT FunctionalDeviceObject
,
4619 _In_ PDEVICE_OBJECT PhysicalDeviceObject
,
4620 _In_ PDEVICE_OBJECT NextDeviceObject
,
4621 _In_opt_
const KSDEVICE_DESCRIPTOR
*Descriptor
);
4623 _IRQL_requires_max_(PASSIVE_LEVEL
)
4625 (NTAPI
*PFNKSFILTERFACTORYPOWER
)(
4626 _In_ PKSFILTERFACTORY FilterFactory
,
4627 _In_ DEVICE_POWER_STATE State
);
4629 _Must_inspect_result_
4630 _IRQL_requires_max_(PASSIVE_LEVEL
)
4635 _In_ KSOBJECT_BAG ObjectBag
,
4636 _Inout_ PVOID
*PointerToPointerToItem
,
4641 _IRQL_requires_max_(PASSIVE_LEVEL
)
4648 _IRQL_requires_max_(PASSIVE_LEVEL
)
4653 _In_ PKSDEVICE Device
);
4655 _IRQL_requires_max_(PASSIVE_LEVEL
)
4660 _In_ PDRIVER_OBJECT DriverObject
,
4661 _In_ PDEVICE_OBJECT PhysicalDeviceObject
);
4663 _IRQL_requires_max_(PASSIVE_LEVEL
)
4669 _In_ PKSEVENT_ENTRY EventEntry
);
4671 _Must_inspect_result_
4672 _IRQL_requires_max_(PASSIVE_LEVEL
)
4676 KsAddItemToObjectBag(
4677 _In_ KSOBJECT_BAG ObjectBag
,
4678 _In_ __drv_aliasesMem PVOID Item
,
4679 _In_opt_ PFNKSFREE Free
);
4681 _IRQL_requires_max_(PASSIVE_LEVEL
)
4685 KsRemoveItemFromObjectBag(
4686 _In_ KSOBJECT_BAG ObjectBag
,
4690 _IRQL_requires_max_(PASSIVE_LEVEL
)
4694 KsAllocateObjectBag(
4695 _In_ PKSDEVICE Device
,
4696 _Out_ KSOBJECT_BAG
*ObjectBag
);
4698 _IRQL_requires_max_(PASSIVE_LEVEL
)
4703 _In_ KSOBJECT_BAG ObjectBag
);
4705 _IRQL_requires_max_(DISPATCH_LEVEL
)
4709 KsCompletePendingRequest(
4712 _IRQL_requires_max_(PASSIVE_LEVEL
)
4716 KsCopyObjectBagItems(
4717 _In_ KSOBJECT_BAG ObjectBagDestination
,
4718 _In_ KSOBJECT_BAG ObjectBagSource
);
4720 _IRQL_requires_max_(PASSIVE_LEVEL
)
4725 _In_ PDRIVER_OBJECT DriverObject
,
4726 _In_ PDEVICE_OBJECT PhysicalDeviceObject
,
4727 _In_opt_
const KSDEVICE_DESCRIPTOR
*Descriptor
,
4728 _In_ ULONG ExtensionSize
,
4729 _Out_opt_ PKSDEVICE
*Device
);
4731 _Must_inspect_result_
4732 _IRQL_requires_max_(PASSIVE_LEVEL
)
4736 KsCreateFilterFactory(
4737 _In_ PDEVICE_OBJECT DeviceObject
,
4738 _In_
const KSFILTER_DESCRIPTOR
*Descriptor
,
4739 _In_opt_ PWSTR RefString
,
4740 _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
4741 _In_ ULONG CreateItemFlags
,
4742 _In_opt_ PFNKSFILTERFACTORYPOWER SleepCallback
,
4743 _In_opt_ PFNKSFILTERFACTORYPOWER WakeCallback
,
4744 _Out_opt_ PKSFILTERFACTORY
*FilterFactory
);
4746 _IRQL_requires_max_(PASSIVE_LEVEL
)
4750 KsFilterFactorySetDeviceClassesState(
4751 _In_ PKSFILTERFACTORY FilterFactory
,
4752 _In_ BOOLEAN NewState
);
4754 _Must_inspect_result_
4755 _IRQL_requires_max_(PASSIVE_LEVEL
)
4759 KsFilterFactoryUpdateCacheData(
4760 _In_ PKSFILTERFACTORY FilterFactory
,
4761 _In_opt_
const KSFILTER_DESCRIPTOR
*FilterDescriptor
);
4763 _IRQL_requires_max_(DISPATCH_LEVEL
)
4770 _IRQL_requires_max_(DISPATCH_LEVEL
)
4777 _IRQL_requires_max_(PASSIVE_LEVEL
)
4781 KsDefaultAddEventHandler(
4783 _In_ PKSEVENTDATA EventData
,
4784 _Inout_ PKSEVENT_ENTRY EventEntry
);
4786 _IRQL_requires_max_(PASSIVE_LEVEL
)
4790 KsDispatchQuerySecurity(
4791 _In_ PDEVICE_OBJECT DeviceObject
,
4794 _IRQL_requires_max_(PASSIVE_LEVEL
)
4798 KsDispatchSetSecurity(
4799 _In_ PDEVICE_OBJECT DeviceObject
,
4802 _IRQL_requires_max_(DISPATCH_LEVEL
)
4806 KsPinAttemptProcessing(
4808 _In_ BOOLEAN Asynchronous
);
4810 _IRQL_requires_max_(PASSIVE_LEVEL
)
4814 KsPinAcquireProcessingMutex(
4817 _IRQL_requires_max_(PASSIVE_LEVEL
)
4821 KsPinReleaseProcessingMutex(
4824 _IRQL_requires_max_(PASSIVE_LEVEL
)
4831 _IRQL_requires_max_(PASSIVE_LEVEL
)
4835 KsFilterGetParentFilterFactory(
4836 _In_ PKSFILTER Filter
)
4838 return (PKSFILTERFACTORY
) KsGetParent((PVOID
) Filter
);
4841 _IRQL_requires_max_(PASSIVE_LEVEL
)
4845 KsFilterFactoryGetParentDevice(
4846 _In_ PKSFILTERFACTORY FilterFactory
)
4848 return (PKSDEVICE
) KsGetParent((PVOID
) FilterFactory
);
4851 #define KsDeleteFilterFactory(FilterFactory) \
4852 KsFreeObjectCreateItemsByContext( \
4853 *(KSDEVICE_HEADER *)( \
4854 KsFilterFactoryGetParentDevice(FilterFactory)->FunctionalDeviceObject-> \
4858 _IRQL_requires_max_(PASSIVE_LEVEL
)
4863 _In_ PKSDEVICE Device
,
4864 _In_ ULONG DataType
,
4865 _In_reads_bytes_(Length
) PVOID Buffer
,
4869 _IRQL_requires_max_(PASSIVE_LEVEL
)
4876 _IRQL_requires_max_(PASSIVE_LEVEL
)
4880 KsDeviceGetFirstChildFilterFactory(
4881 _In_ PKSDEVICE Device
);
4883 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
4885 _IRQL_requires_max_(PASSIVE_LEVEL
)
4892 _IRQL_requires_max_(PASSIVE_LEVEL
)
4896 KsDeviceGetOuterUnknown(
4897 _In_ PKSDEVICE Device
)
4899 return KsGetOuterUnknown((PVOID
) Device
);
4902 _IRQL_requires_max_(PASSIVE_LEVEL
)
4906 KsDeviceRegisterAggregatedClientUnknown(
4907 _In_ PKSDEVICE Device
,
4908 _In_ PUNKNOWN ClientUnknown
);
4912 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
4914 typedef interface IKsReferenceClock
* PIKSREFERENCECLOCK
;
4917 #define INTERFACE IKsReferenceClock
4918 DECLARE_INTERFACE_(IKsReferenceClock
,IUnknown
)
4920 DEFINE_ABSTRACT_UNKNOWN() // For C
4922 STDMETHOD_(LONGLONG
,GetTime
)(THIS
4924 STDMETHOD_(LONGLONG
,GetPhysicalTime
)(THIS
4926 STDMETHOD_(LONGLONG
,GetCorrelatedTime
)(THIS_
4927 _Out_ PLONGLONG SystemTime
4929 STDMETHOD_(LONGLONG
,GetCorrelatedPhysicalTime
)(THIS_
4930 _Out_ PLONGLONG SystemTime
4932 STDMETHOD_(NTSTATUS
, GetResolution
)(THIS_
4933 _Out_ PKSRESOLUTION Resolution
4935 STDMETHOD_(NTSTATUS
, GetState
)(THIS_
4936 _Out_ PKSSTATE State
4941 #define INTERFACE IKsControl
4943 DEFINE_GUID(IID_IKsControl
, 0x28F54685L
, 0x06FD, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96);
4945 DECLARE_INTERFACE_(IKsControl
,IUnknown
)
4947 STDMETHOD_(NTSTATUS
, QueryInterface
)( THIS_
4949 PVOID
* Interface
)PURE
;
4951 STDMETHOD_(ULONG
, AddRef
)(THIS
) PURE
;
4953 STDMETHOD_(ULONG
, Release
)(THIS
) PURE
;
4955 STDMETHOD_(NTSTATUS
, KsProperty
)(THIS_
4956 _In_reads_bytes_(PropertyLength
) PKSPROPERTY Property
,
4957 _In_ ULONG PropertyLength
,
4958 _Inout_updates_bytes_(DataLength
) PVOID PropertyData
,
4959 _In_ ULONG DataLength
,
4960 _Out_ ULONG
*BytesReturned
4962 STDMETHOD_(NTSTATUS
, KsMethod
)(THIS_
4963 _In_reads_bytes_(MethodLength
) PKSMETHOD Method
,
4964 _In_ ULONG MethodLength
,
4965 _Inout_updates_bytes_(DataLength
) PVOID MethodData
,
4966 _In_ ULONG DataLength
,
4967 _Out_ ULONG
*BytesReturned
4969 STDMETHOD_(NTSTATUS
, KsEvent
)(THIS_
4970 _In_reads_bytes_opt_(EventLength
) PKSEVENT Event
,
4971 _In_ ULONG EventLength
,
4972 _Inout_updates_bytes_(DataLength
) PVOID EventData
,
4973 _In_ ULONG DataLength
,
4974 _Out_ ULONG
*BytesReturned
4979 typedef IKsControl
* PIKSCONTROL
;
4983 _IRQL_requires_max_(PASSIVE_LEVEL
)
4987 KsDeviceRegisterAdapterObject(
4988 _In_ PKSDEVICE Device
,
4989 _In_ PADAPTER_OBJECT AdapterObject
,
4990 _In_ ULONG MaxMappingByteCount
,
4991 _In_ ULONG MappingTableStride
);
4993 _IRQL_requires_max_(PASSIVE_LEVEL
)
4998 _In_ PKSDEVICE Device
,
4999 _In_ ULONG DataType
,
5000 _In_reads_bytes_(Length
) PVOID Buffer
,
5004 _IRQL_requires_max_(PASSIVE_LEVEL
)
5011 #define KsDiscard(object, pointer) \
5012 KsRemoveItemFromObjectBag(object->Bag, pointer, TRUE)
5014 #define KsFilterAcquireControl(Filter) \
5015 KsAcquireControl((PVOID) Filter);
5017 #define KsFilterReleaseControl(Filter) \
5018 KsReleaseControl((PVOID) Filter);
5020 #define KsFilterAddEvent(Filter, EventEntry) \
5021 KsAddEvent(Filter,EventEntry);
5023 _IRQL_requires_max_(PASSIVE_LEVEL
)
5027 KsFilterAcquireProcessingMutex(
5028 _In_ PKSFILTER Filter
);
5030 _IRQL_requires_max_(PASSIVE_LEVEL
)
5034 KsFilterAddTopologyConnections(
5035 _In_ PKSFILTER Filter
,
5036 _In_ ULONG NewConnectionsCount
,
5037 _In_reads_(NewConnectionsCount
) const KSTOPOLOGY_CONNECTION
*const NewTopologyConnections
);
5039 _IRQL_requires_max_(DISPATCH_LEVEL
)
5043 KsFilterAttemptProcessing(
5044 _In_ PKSFILTER Filter
,
5045 _In_ BOOLEAN Asynchronous
);
5047 _IRQL_requires_max_(PASSIVE_LEVEL
)
5052 _In_ PKSFILTER Filter
,
5053 _In_
const KSNODE_DESCRIPTOR
*const NodeDescriptor
,
5054 _Out_ PULONG NodeID
);
5056 _IRQL_requires_max_(PASSIVE_LEVEL
)
5060 KsFilterCreatePinFactory(
5061 _In_ PKSFILTER Filter
,
5062 _In_
const KSPIN_DESCRIPTOR_EX
*const PinDescriptor
,
5063 _Out_ PULONG PinID
);
5065 _IRQL_requires_max_(PASSIVE_LEVEL
)
5069 KsFilterFactoryGetDevice(
5070 _In_ PKSFILTERFACTORY FilterFactory
);
5073 #endif /* avstream */