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 /* ===============================================================
122 #define IOCTL_KS_DISABLE_EVENT \
129 #define IOCTL_KS_ENABLE_EVENT \
137 #define IOCTL_KS_METHOD \
145 #define IOCTL_KS_PROPERTY \
152 #define IOCTL_KS_WRITE_STREAM \
159 #define IOCTL_KS_READ_STREAM \
166 #define IOCTL_KS_RESET_STATE \
173 /* ===============================================================
177 #define STATIC_KSCATEGORY_BRIDGE \
178 0x085AFF00L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
179 DEFINE_GUIDSTRUCT("085AFF00-62CE-11CF-A5D6-28DB04C10000", KSCATEGORY_BRIDGE
);
180 #define KSCATEGORY_BRIDGE DEFINE_GUIDNAMED(KSCATEGORY_BRIDGE)
182 #define STATIC_KSCATEGORY_CAPTURE \
183 0x65E8773DL, 0x8F56, 0x11D0, {0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
184 DEFINE_GUIDSTRUCT("65E8773D-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_CAPTURE
);
185 #define KSCATEGORY_CAPTURE DEFINE_GUIDNAMED(KSCATEGORY_CAPTURE)
187 #define STATIC_KSCATEGORY_RENDER \
188 0x65E8773EL, 0x8F56, 0x11D0, {0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
189 DEFINE_GUIDSTRUCT("65E8773E-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_RENDER
);
190 #define KSCATEGORY_RENDER DEFINE_GUIDNAMED(KSCATEGORY_RENDER)
192 #define STATIC_KSCATEGORY_MIXER \
193 0xAD809C00L, 0x7B88, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
194 DEFINE_GUIDSTRUCT("AD809C00-7B88-11D0-A5D6-28DB04C10000", KSCATEGORY_MIXER
);
195 #define KSCATEGORY_MIXER DEFINE_GUIDNAMED(KSCATEGORY_MIXER)
197 #define STATIC_KSCATEGORY_SPLITTER \
198 0x0A4252A0L, 0x7E70, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
199 DEFINE_GUIDSTRUCT("0A4252A0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_SPLITTER
);
200 #define KSCATEGORY_SPLITTER DEFINE_GUIDNAMED(KSCATEGORY_SPLITTER)
202 #define STATIC_KSCATEGORY_DATACOMPRESSOR \
203 0x1E84C900L, 0x7E70, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
204 DEFINE_GUIDSTRUCT("1E84C900-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATACOMPRESSOR
);
205 #define KSCATEGORY_DATACOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATACOMPRESSOR)
207 #define STATIC_KSCATEGORY_DATADECOMPRESSOR \
208 0x2721AE20L, 0x7E70, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
209 DEFINE_GUIDSTRUCT("2721AE20-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATADECOMPRESSOR
);
210 #define KSCATEGORY_DATADECOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATADECOMPRESSOR)
212 #define STATIC_KSCATEGORY_DATATRANSFORM \
213 0x2EB07EA0L, 0x7E70, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
214 DEFINE_GUIDSTRUCT("2EB07EA0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATATRANSFORM
);
215 #define KSCATEGORY_DATATRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_DATATRANSFORM)
217 #define STATIC_KSCATEGORY_COMMUNICATIONSTRANSFORM \
218 0xCF1DDA2CL, 0x9743, 0x11D0, {0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
219 DEFINE_GUIDSTRUCT("CF1DDA2C-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_COMMUNICATIONSTRANSFORM
);
220 #define KSCATEGORY_COMMUNICATIONSTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_COMMUNICATIONSTRANSFORM)
222 #define STATIC_KSCATEGORY_INTERFACETRANSFORM \
223 0xCF1DDA2DL, 0x9743, 0x11D0, {0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
224 DEFINE_GUIDSTRUCT("CF1DDA2D-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_INTERFACETRANSFORM
);
225 #define KSCATEGORY_INTERFACETRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_INTERFACETRANSFORM)
227 #define STATIC_KSCATEGORY_MEDIUMTRANSFORM \
228 0xCF1DDA2EL, 0x9743, 0x11D0, {0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
229 DEFINE_GUIDSTRUCT("CF1DDA2E-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_MEDIUMTRANSFORM
);
230 #define KSCATEGORY_MEDIUMTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_MEDIUMTRANSFORM)
232 #define STATIC_KSCATEGORY_FILESYSTEM \
233 0x760FED5EL, 0x9357, 0x11D0, {0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
234 DEFINE_GUIDSTRUCT("760FED5E-9357-11D0-A3CC-00A0C9223196", KSCATEGORY_FILESYSTEM
);
235 #define KSCATEGORY_FILESYSTEM DEFINE_GUIDNAMED(KSCATEGORY_FILESYSTEM)
237 #define STATIC_KSCATEGORY_CLOCK \
238 0x53172480L, 0x4791, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
239 DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000", KSCATEGORY_CLOCK
);
240 #define KSCATEGORY_CLOCK DEFINE_GUIDNAMED(KSCATEGORY_CLOCK)
242 #define STATIC_KSCATEGORY_PROXY \
243 0x97EBAACAL, 0x95BD, 0x11D0, {0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
244 DEFINE_GUIDSTRUCT("97EBAACA-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_PROXY
);
245 #define KSCATEGORY_PROXY DEFINE_GUIDNAMED(KSCATEGORY_PROXY)
247 #define STATIC_KSCATEGORY_QUALITY \
248 0x97EBAACBL, 0x95BD, 0x11D0, {0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
249 DEFINE_GUIDSTRUCT("97EBAACB-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_QUALITY
);
250 #define KSCATEGORY_QUALITY DEFINE_GUIDNAMED(KSCATEGORY_QUALITY)
252 /* ===============================================================
260 } KSIDENTIFIER
, *PKSIDENTIFIER
;
262 typedef KSIDENTIFIER KSPROPERTY
, *PKSPROPERTY
;
263 typedef KSIDENTIFIER KSMETHOD
, *PKSMETHOD
;
264 typedef KSIDENTIFIER KSEVENT
, *PKSEVENT
;
266 typedef KSIDENTIFIER KSDEGRADE
, *PKSDEGRADE
;
268 typedef KSIDENTIFIER KSPIN_INTERFACE
, *PKSPIN_INTERFACE
;
269 typedef KSIDENTIFIER KSPIN_MEDIUM
, *PKSPIN_MEDIUM
;
282 } KSDATAFORMAT
, *PKSDATAFORMAT
, KSDATARANGE
, *PKSDATARANGE
;
288 } KSATTRIBUTE
, *PKSATTRIBUTE
;
291 /* ===============================================================
292 Interface Sets - TODO
296 #define KSINTERFACESETID_Media
297 #define KSINTERFACE_STANDARD_STREAMING
298 #define KSINTERFACE_STANDARD_LOOPED_STREAMING
299 #define KSINTERFACE_STANDARD_CONTROL
302 #define STATIC_KSINTERFACESETID_Standard \
303 0x1A8766A0L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
304 DEFINE_GUIDSTRUCT("1A8766A0-62CE-11CF-A5D6-28DB04C10000", KSINTERFACESETID_Standard
);
305 #define KSINTERFACESETID_Standard DEFINE_GUIDNAMED(KSINTERFACESETID_Standard)
308 KSINTERFACE_STANDARD_STREAMING
,
309 KSINTERFACE_STANDARD_LOOPED_STREAMING
,
310 KSINTERFACE_STANDARD_CONTROL
311 } KSINTERFACE_STANDARD
;
313 #define STATIC_KSINTERFACESETID_FileIo \
314 0x8C6F932CL, 0xE771, 0x11D0, {0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
315 DEFINE_GUIDSTRUCT("8C6F932C-E771-11D0-B8FF-00A0C9223196", KSINTERFACESETID_FileIo
);
316 #define KSINTERFACESETID_FileIo DEFINE_GUIDNAMED(KSINTERFACESETID_FileIo)
318 /* ===============================================================
323 KSINTERFACE_FILEIO_STREAMING
324 } KSINTERFACE_FILEIO
;
326 #define KSMEDIUM_TYPE_ANYINSTANCE 0
328 #define STATIC_KSMEDIUMSETID_Standard \
329 0x4747B320L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
330 DEFINE_GUIDSTRUCT("4747B320-62CE-11CF-A5D6-28DB04C10000", KSMEDIUMSETID_Standard
);
331 #define KSMEDIUMSETID_Standard DEFINE_GUIDNAMED(KSMEDIUMSETID_Standard)
333 /* ===============================================================
334 Clock Properties/Methods/Events
337 #define STATIC_KSPROPSETID_Clock \
338 0xDF12A4C0L, 0xAC17, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
339 DEFINE_GUIDSTRUCT("DF12A4C0-AC17-11CF-A5D6-28DB04C10000", KSPROPSETID_Clock
);
340 #define KSPROPSETID_Clock DEFINE_GUIDNAMED(KSPROPSETID_Clock)
343 KSPROPERTY_CLOCK_TIME
,
344 KSPROPERTY_CLOCK_PHYSICALTIME
,
345 KSPROPERTY_CLOCK_CORRELATEDTIME
,
346 KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME
,
347 KSPROPERTY_CLOCK_RESOLUTION
,
348 KSPROPERTY_CLOCK_STATE
,
350 KSPROPERTY_CLOCK_FUNCTIONTABLE
351 #endif // defined(_NTDDK_)
354 #define STATIC_KSEVENTSETID_Clock \
355 0x364D8E20L, 0x62C7, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
356 DEFINE_GUIDSTRUCT("364D8E20-62C7-11CF-A5D6-28DB04C10000", KSEVENTSETID_Clock
);
357 #define KSEVENTSETID_Clock DEFINE_GUIDNAMED(KSEVENTSETID_Clock)
360 KSEVENT_CLOCK_INTERVAL_MARK
,
361 KSEVENT_CLOCK_POSITION_MARK
362 } KSEVENT_CLOCK_POSITION
;
364 /* ===============================================================
365 Connection Properties/Methods/Events
368 #define STATIC_KSPROPSETID_Connection \
369 0x1D58C920L, 0xAC9B, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
370 DEFINE_GUIDSTRUCT("1D58C920-AC9B-11CF-A5D6-28DB04C10000", KSPROPSETID_Connection
);
371 #define KSPROPSETID_Connection DEFINE_GUIDNAMED(KSPROPSETID_Connection)
374 KSPROPERTY_CONNECTION_STATE
,
375 KSPROPERTY_CONNECTION_PRIORITY
,
376 KSPROPERTY_CONNECTION_DATAFORMAT
,
377 KSPROPERTY_CONNECTION_ALLOCATORFRAMING
,
378 KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT
,
379 KSPROPERTY_CONNECTION_ACQUIREORDERING
,
380 KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX
,
381 KSPROPERTY_CONNECTION_STARTAT
382 } KSPROPERTY_CONNECTION
;
384 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_STATE(GetHandler, SetHandler)\
385 DEFINE_KSPROPERTY_ITEM(\
386 KSPROPERTY_CONNECTION_STATE,\
391 NULL, 0, NULL, NULL, 0)
393 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_PRIORITY(GetHandler, SetHandler)\
394 DEFINE_KSPROPERTY_ITEM(\
395 KSPROPERTY_CONNECTION_PRIORITY,\
400 NULL, 0, NULL, NULL, 0)
402 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_DATAFORMAT(GetHandler, SetHandler)\
403 DEFINE_KSPROPERTY_ITEM(\
404 KSPROPERTY_CONNECTION_DATAFORMAT,\
409 NULL, 0, NULL, NULL, 0)
411 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING(Handler)\
412 DEFINE_KSPROPERTY_ITEM(\
413 KSPROPERTY_CONNECTION_ALLOCATORFRAMING,\
416 sizeof(KSALLOCATOR_FRAMING),\
417 NULL, NULL, 0, NULL, NULL, 0)
419 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING_EX(Handler)\
420 DEFINE_KSPROPERTY_ITEM(\
421 KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,\
425 NULL, NULL, 0, NULL, NULL, 0)
427 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_PROPOSEDATAFORMAT(Handler)\
428 DEFINE_KSPROPERTY_ITEM(\
429 KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT,\
432 sizeof(KSDATAFORMAT),\
434 NULL, 0, NULL, NULL, 0)
436 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ACQUIREORDERING(Handler)\
437 DEFINE_KSPROPERTY_ITEM(\
438 KSPROPERTY_CONNECTION_ACQUIREORDERING,\
442 NULL, NULL, 0, NULL, NULL, 0)
444 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_STARTAT(Handler)\
445 DEFINE_KSPROPERTY_ITEM(\
446 KSPROPERTY_CONNECTION_STARTAT,\
449 sizeof(KSRELATIVEEVENT),\
451 NULL, 0, NULL, NULL, 0)
454 KSEVENT_CONNECTION_POSITIONUPDATE
,
455 KSEVENT_CONNECTION_DATADISCONTINUITY
,
456 KSEVENT_CONNECTION_TIMEDISCONTINUITY
,
457 KSEVENT_CONNECTION_PRIORITY
,
458 KSEVENT_CONNECTION_ENDOFSTREAM
459 } KSEVENT_CONNECTION
;
461 /* ===============================================================
463 Properties/Methods/Events
466 #define STATIC_KSPROPSETID_General\
467 0x1464EDA5L, 0x6A8F, 0x11D1, {0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
468 DEFINE_GUIDSTRUCT("1464EDA5-6A8F-11D1-9AA7-00A0C9223196", KSPROPSETID_General
);
469 #define KSPROPSETID_General DEFINE_GUIDNAMED(KSPROPSETID_General)
472 KSPROPERTY_GENERAL_COMPONENTID
473 } KSPROPERTY_GENERAL
;
475 /* ===============================================================
477 Properties/Methods/Events
480 #define KSPROPSETID_GM \
481 0xAF627536L, 0xE719, 0x11D2, {0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D}
484 KSPROPERTY_GM_GRAPHMANAGER
,
485 KSPROPERTY_GM_TIMESTAMP_CLOCK
,
486 KSPROPERTY_GM_RATEMATCH
,
487 KSPROPERTY_GM_RENDERCLOCK
490 /* ===============================================================
492 Properties/Methods/Events
495 #define STATIC_KSPROPSETID_MediaSeeking\
496 0xEE904F0CL, 0xD09B, 0x11D0, {0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
497 DEFINE_GUIDSTRUCT("EE904F0C-D09B-11D0-ABE9-00A0C9223196", KSPROPSETID_MediaSeeking
);
498 #define KSPROPSETID_MediaSeeking DEFINE_GUIDNAMED(KSPROPSETID_MediaSeeking)
501 KSPROPERTY_MEDIASEEKING_CAPABILITIES
,
502 KSPROPERTY_MEDIASEEKING_FORMATS
,
503 KSPROPERTY_MEDIASEEKING_TIMEFORMAT
,
504 KSPROPERTY_MEDIASEEKING_POSITION
,
505 KSPROPERTY_MEDIASEEKING_STOPPOSITION
,
506 KSPROPERTY_MEDIASEEKING_POSITIONS
,
507 KSPROPERTY_MEDIASEEKING_DURATION
,
508 KSPROPERTY_MEDIASEEKING_AVAILABLE
,
509 KSPROPERTY_MEDIASEEKING_PREROLL
,
510 KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT
511 } KSPROPERTY_MEDIASEEKING
;
514 KS_SEEKING_NoPositioning
,
515 KS_SEEKING_AbsolutePositioning
,
516 KS_SEEKING_RelativePositioning
,
517 KS_SEEKING_IncrementalPositioning
,
518 KS_SEEKING_PositioningBitsMask
= 0x3,
519 KS_SEEKING_SeekToKeyFrame
,
520 KS_SEEKING_ReturnTime
= 0x8
524 KS_SEEKING_CanSeekAbsolute
= 0x1,
525 KS_SEEKING_CanSeekForwards
= 0x2,
526 KS_SEEKING_CanSeekBackwards
= 0x4,
527 KS_SEEKING_CanGetCurrentPos
= 0x8,
528 KS_SEEKING_CanGetStopPos
= 0x10,
529 KS_SEEKING_CanGetDuration
= 0x20,
530 KS_SEEKING_CanPlayBackwards
= 0x40
531 } KS_SEEKING_CAPABILITIES
;
536 KS_SEEKING_FLAGS CurrentFlags
;
537 KS_SEEKING_FLAGS StopFlags
;
538 } KSPROPERTY_POSITIONS
, *PKSPROPERTY_POSITIONS
;
543 } KSPROPERTY_MEDIAAVAILABLE
, *PKSPROPERTY_MEDIAAVAILABLE
;
550 } KSP_TIMEFORMAT
, *PKSP_TIMEFORMAT
;
552 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CAPABILITIES(Handler)\
553 DEFINE_KSPROPERTY_ITEM(\
554 KSPROPERTY_MEDIASEEKING_CAPABILITIES,\
557 sizeof(KS_SEEKING_CAPABILITIES),\
558 NULL, NULL, 0, NULL, NULL, 0)
560 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_FORMATS(Handler)\
561 DEFINE_KSPROPERTY_ITEM(\
562 KSPROPERTY_MEDIASEEKING_FORMATS,\
566 NULL, NULL, 0, NULL, NULL, 0)
568 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_TIMEFORMAT(GetHandler, SetHandler)\
569 DEFINE_KSPROPERTY_ITEM(\
570 KSPROPERTY_MEDIASEEKING_TIMEFORMAT,\
575 NULL, 0, NULL, NULL, 0)
577 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITION(Handler)\
578 DEFINE_KSPROPERTY_ITEM(\
579 KSPROPERTY_MEDIASEEKING_POSITION,\
583 NULL, NULL, 0, NULL, NULL, 0)
585 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_STOPPOSITION(Handler)\
586 DEFINE_KSPROPERTY_ITEM(\
587 KSPROPERTY_MEDIASEEKING_STOPPOSITION,\
591 NULL, NULL, 0, NULL, NULL, 0)
593 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITIONS(Handler)\
594 DEFINE_KSPROPERTY_ITEM(\
595 KSPROPERTY_MEDIASEEKING_POSITIONS,\
598 sizeof(KSPROPERTY_POSITIONS),\
600 NULL, 0, NULL, NULL, 0)
602 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_DURATION(Handler)\
603 DEFINE_KSPROPERTY_ITEM(\
604 KSPROPERTY_MEDIASEEKING_DURATION,\
608 NULL, NULL, 0, NULL, NULL, 0)
610 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_AVAILABLE(Handler)\
611 DEFINE_KSPROPERTY_ITEM(\
612 KSPROPERTY_MEDIASEEKING_AVAILABLE,\
615 sizeof(KSPROPERTY_MEDIAAVAILABLE),\
616 NULL, NULL, 0, NULL, NULL, 0)
618 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_PREROLL(Handler)\
619 DEFINE_KSPROPERTY_ITEM(\
620 KSPROPERTY_MEDIASEEKING_PREROLL,\
624 NULL, NULL, 0, NULL, NULL, 0)
626 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CONVERTTIMEFORMAT(Handler)\
627 DEFINE_KSPROPERTY_ITEM(\
628 KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT,\
630 sizeof(KSP_TIMEFORMAT),\
632 NULL, NULL, 0, NULL, NULL, 0)
634 /* ===============================================================
636 Properties/Methods/Events
639 #define STATIC_KSPROPSETID_Pin\
640 0x8C134960L, 0x51AD, 0x11CF, {0x87, 0x8A, 0x94, 0xF8, 0x01, 0xC1, 0x00, 0x00}
641 DEFINE_GUIDSTRUCT("8C134960-51AD-11CF-878A-94F801C10000", KSPROPSETID_Pin
);
642 #define KSPROPSETID_Pin DEFINE_GUIDNAMED(KSPROPSETID_Pin)
644 #define STATIC_KSNAME_Pin\
645 0x146F1A80L, 0x4791, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
646 DEFINE_GUIDSTRUCT("146F1A80-4791-11D0-A5D6-28DB04C10000", KSNAME_Pin
);
647 #define KSNAME_Pin DEFINE_GUIDNAMED(KSNAME_Pin)
650 KSPROPERTY_PIN_CINSTANCES
,
651 KSPROPERTY_PIN_CTYPES
,
652 KSPROPERTY_PIN_DATAFLOW
,
653 KSPROPERTY_PIN_DATARANGES
,
654 KSPROPERTY_PIN_DATAINTERSECTION
,
655 KSPROPERTY_PIN_INTERFACES
,
656 KSPROPERTY_PIN_MEDIUMS
,
657 KSPROPERTY_PIN_COMMUNICATION
,
658 KSPROPERTY_PIN_GLOBALCINSTANCES
,
659 KSPROPERTY_PIN_NECESSARYINSTANCES
,
660 KSPROPERTY_PIN_PHYSICALCONNECTION
,
661 KSPROPERTY_PIN_CATEGORY
,
663 KSPROPERTY_PIN_CONSTRAINEDDATARANGES
,
664 KSPROPERTY_PIN_PROPOSEDATAFORMAT
671 } KSP_PIN
, *PKSP_PIN
;
673 #define KSINSTANCE_INDETERMINATE ((ULONG)-1)
678 } KSPIN_CINSTANCES
, *PKSPIN_CINSTANCES
;
683 WCHAR SymbolicLinkName
[1];
684 } KSPIN_PHYSICALCONNECTION
, *PKSPIN_PHYSICALCONNECTION
;
686 /* ===============================================================
688 Properties/Methods/Events
691 #define KSPROPSETID_Quality \
692 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
695 KSPROPERTY_QUALITY_REPORT
,
696 KSPROPERTY_QUALITY_ERROR
697 } KSPROPERTY_QUALITY
;
699 /* ===============================================================
701 Properties/Methods/Events
704 #define STATIC_KSPROPSETID_Stream\
705 0x65aaba60L, 0x98ae, 0x11cf, {0xa1, 0x0d, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4}
706 DEFINE_GUIDSTRUCT("65aaba60-98ae-11cf-a10d-0020afd156e4", KSPROPSETID_Stream
);
707 #define KSPROPSETID_Stream DEFINE_GUIDNAMED(KSPROPSETID_Stream)
710 KSPROPERTY_STREAM_ALLOCATOR
,
711 KSPROPERTY_STREAM_QUALITY
,
712 KSPROPERTY_STREAM_DEGRADATION
,
713 KSPROPERTY_STREAM_MASTERCLOCK
,
714 KSPROPERTY_STREAM_TIMEFORMAT
,
715 KSPROPERTY_STREAM_PRESENTATIONTIME
,
716 KSPROPERTY_STREAM_PRESENTATIONEXTENT
,
717 KSPROPERTY_STREAM_FRAMETIME
,
718 KSPROPERTY_STREAM_RATECAPABILITY
,
719 KSPROPERTY_STREAM_RATE
,
720 KSPROPERTY_STREAM_PIPE_ID
723 #define DEFINE_KSPROPERTY_ITEM_STREAM_ALLOCATOR(GetHandler, SetHandler)\
724 DEFINE_KSPROPERTY_ITEM(\
725 KSPROPERTY_STREAM_ALLOCATOR,\
730 NULL, 0, NULL, NULL, 0)
732 #define DEFINE_KSPROPERTY_ITEM_STREAM_QUALITY(Handler)\
733 DEFINE_KSPROPERTY_ITEM(\
734 KSPROPERTY_STREAM_QUALITY,\
737 sizeof(KSQUALITY_MANAGER),\
738 NULL, NULL, 0, NULL, NULL, 0)
740 #define DEFINE_KSPROPERTY_ITEM_STREAM_DEGRADATION(GetHandler, SetHandler)\
741 DEFINE_KSPROPERTY_ITEM(\
742 KSPROPERTY_STREAM_DEGRADATION,\
747 NULL, 0, NULL, NULL, 0)
749 #define DEFINE_KSPROPERTY_ITEM_STREAM_MASTERCLOCK(GetHandler, SetHandler)\
750 DEFINE_KSPROPERTY_ITEM(\
751 KSPROPERTY_STREAM_MASTERCLOCK,\
756 NULL, 0, NULL, NULL, 0)
758 #define DEFINE_KSPROPERTY_ITEM_STREAM_TIMEFORMAT(Handler)\
759 DEFINE_KSPROPERTY_ITEM(\
760 KSPROPERTY_STREAM_TIMEFORMAT,\
764 NULL, NULL, 0, NULL, NULL, 0)
766 #define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONTIME(GetHandler, SetHandler)\
767 DEFINE_KSPROPERTY_ITEM(\
768 KSPROPERTY_STREAM_PRESENTATIONTIME,\
773 NULL, 0, NULL, NULL, 0)
775 #define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONEXTENT(Handler)\
776 DEFINE_KSPROPERTY_ITEM(\
777 KSPROPERTY_STREAM_PRESENTATIONEXTENT,\
781 NULL, NULL, 0, NULL, NULL, 0)
783 #define DEFINE_KSPROPERTY_ITEM_STREAM_FRAMETIME(Handler)\
784 DEFINE_KSPROPERTY_ITEM(\
785 KSPROPERTY_STREAM_FRAMETIME,\
788 sizeof(KSFRAMETIME),\
789 NULL, NULL, 0, NULL, NULL, 0)
791 #define DEFINE_KSPROPERTY_ITEM_STREAM_RATECAPABILITY(Handler)\
792 DEFINE_KSPROPERTY_ITEM(\
793 KSPROPERTY_STREAM_RATECAPABILITY,\
795 sizeof(KSRATE_CAPABILITY),\
797 NULL, NULL, 0, NULL, NULL, 0)
799 #define DEFINE_KSPROPERTY_ITEM_STREAM_RATE(GetHandler, SetHandler)\
800 DEFINE_KSPROPERTY_ITEM(\
801 KSPROPERTY_STREAM_RATE,\
806 NULL, 0, NULL, NULL, 0)
808 #define DEFINE_KSPROPERTY_ITEM_STREAM_PIPE_ID(GetHandler, SetHandler)\
809 DEFINE_KSPROPERTY_ITEM(\
810 KSPROPERTY_STREAM_PIPE_ID,\
815 NULL, 0, NULL, NULL, 0)
817 /* ===============================================================
819 Properties/Methods/Events
822 #define STATIC_KSPROPSETID_StreamAllocator\
823 0xcf6e4342L, 0xec87, 0x11cf, {0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4}
824 DEFINE_GUIDSTRUCT("cf6e4342-ec87-11cf-a130-0020afd156e4", KSPROPSETID_StreamAllocator
);
825 #define KSPROPSETID_StreamAllocator DEFINE_GUIDNAMED(KSPROPSETID_StreamAllocator)
828 KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE
,
829 KSPROPERTY_STREAMALLOCATOR_STATUS
830 } KSPROPERTY_STREAMALLOCATOR
;
832 #define KSMETHODSETID_StreamAllocator \
833 0xcf6e4341L, 0xec87, 0x11cf, {0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4}
836 KSMETHOD_STREAMALLOCATOR_ALLOC
,
837 KSMETHOD_STREAMALLOCATOR_FREE
838 } KSMETHOD_STREAMALLOCATOR
;
840 #define KSEVENTSETID_StreamAllocator
843 KSEVENT_STREAMALLOCATOR_INTERNAL_FREEFRAME
,
844 KSEVENT_STREAMALLOCATOR_FREEFRAME
845 } KSEVENT_STREAMALLOCATOR
;
847 /* ===============================================================
849 Properties/Methods/Events
852 #define KSPROPSETID_StreamInterface \
853 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
856 KSPROPERTY_STREAMINTERFACE_HEADERSIZE
857 } KSPROPERTY_STREAMINTERFACE
;
859 /* ===============================================================
861 Properties/Methods/Events
864 #define STATIC_KSPROPSETID_Topology\
865 0x720D4AC0L, 0x7533, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
866 DEFINE_GUIDSTRUCT("720D4AC0-7533-11D0-A5D6-28DB04C10000", KSPROPSETID_Topology
);
867 #define KSPROPSETID_Topology DEFINE_GUIDNAMED(KSPROPSETID_Topology)
870 KSPROPERTY_TOPOLOGY_CATEGORIES
,
871 KSPROPERTY_TOPOLOGY_NODES
,
872 KSPROPERTY_TOPOLOGY_CONNECTIONS
,
873 KSPROPERTY_TOPOLOGY_NAME
874 } KSPROPERTY_TOPOLOGY
;
876 /* ===============================================================
877 Property Sets for audio drivers - TODO
880 #define STATIC_KSPROPTYPESETID_General \
881 0x97E99BA0L, 0xBDEA, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
882 DEFINE_GUIDSTRUCT("97E99BA0-BDEA-11CF-A5D6-28DB04C10000", KSPROPTYPESETID_General
);
883 #define KSPROPTYPESETID_General DEFINE_GUIDNAMED(KSPROPTYPESETID_General)
886 KSPROPERTY_AC3_ALTERNATE_AUDIO
887 KSPROPERTY_AC3_BIT_STREAM_MODE
888 KSPROPERTY_AC3_DIALOGUE_LEVEL
889 KSPROPERTY_AC3_DOWNMIX
890 KSPROPERTY_AC3_ERROR_CONCEALMENT
891 KSPROPERTY_AC3_LANGUAGE_CODE
892 KSPROPERTY_AC3_ROOM_TYPE
895 #define KSPROPSETID_Acoustic_Echo_Cancel
898 KSPROPERTY_AEC_NOISE_FILL_ENABLE
899 KSPROPERTY_AEC_STATUS
903 KSPROPERTY_AUDIO_3D_INTERFACE
905 KSPROPERTY_AUDIO_ALGORITHM_INSTANCE
906 KSPROPERTY_AUDIO_BASS
907 KSPROPERTY_AUDIO_BASS_BOOST
908 KSPROPERTY_AUDIO_CHANNEL_CONFIG
909 KSPROPERTY_AUDIO_CHORUS_LEVEL
910 KSPROPERTY_AUDIO_COPY_PROTECTION
911 KSPROPERTY_AUDIO_CPU_RESOURCES
912 KSPROPERTY_AUDIO_DELAY
913 KSPROPERTY_AUDIO_DEMUX_DEST
914 KSPROPERTY_AUDIO_DEV_SPECIFIC
915 KSPROPERTY_AUDIO_DYNAMIC_RANGE
916 KSPROPERTY_AUDIO_DYNAMIC_SAMPLING_RATE
917 KSPROPERTY_AUDIO_EQ_BANDS
918 KSPROPERTY_AUDIO_EQ_LEVEL
919 KSPROPERTY_AUDIO_FILTER_STATE
920 KSPROPERTY_AUDIO_LATENCY
921 KSPROPERTY_AUDIO_LOUDNESS
922 KSPROPERTY_AUDIO_MANUFACTURE_GUID
924 KSPROPERTY_AUDIO_MIX_LEVEL_CAPS
925 KSPROPERTY_AUDIO_MIX_LEVEL_TABLE
926 KSPROPERTY_AUDIO_MUTE
927 KSPROPERTY_AUDIO_MUX_SOURCE
928 KSPROPERTY_AUDIO_NUM_EQ_BANDS
929 KSPROPERTY_AUDIO_PEAKMETER
930 KSPROPERTY_AUDIO_POSITION
931 KSPROPERTY_AUDIO_PREFERRED_STATUS
932 KSPROPERTY_AUDIO_PRODUCT_GUID
933 KSPROPERTY_AUDIO_QUALITY
934 KSPROPERTY_AUDIO_REVERB_LEVEL
935 KSPROPERTY_AUDIO_SAMPLING_RATE
936 KSPROPERTY_AUDIO_STEREO_ENHANCE
937 KSPROPERTY_AUDIO_STEREO_SPEAKER_GEOMETRY
938 KSPROPERTY_AUDIO_SURROUND_ENCODE
939 KSPROPERTY_AUDIO_TREBLE
940 KSPROPERTY_AUDIO_VOLUMELEVEL
941 KSPROPERTY_AUDIO_WIDE_MODE
942 KSPROPERTY_AUDIO_WIDENESS
945 #define KSPROPSETID_AudioGfx
947 KSPROPERTY_AUDIOGFX_CAPTURETARGETDEVICEID
948 KSPROPERTY_AUDIOGFX_RENDERTARGETDEVICEID
951 #define KSPROPSETID_DirectSound3DBuffer
953 KSPROPERTY_DIRECTSOUND3DBUFFER_ALL
954 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEANGLES
955 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEORIENTATION
956 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEOUTSIDEVOLUME
957 KSPROPERTY_DIRECTSOUND3DBUFFER_MAXDISTANCE
958 KSPROPERTY_DIRECTSOUND3DBUFFER_MINDISTANCE
959 KSPROPERTY_DIRECTSOUND3DBUFFER_MODE
960 KSPROPERTY_DIRECTSOUND3DBUFFER_POSITION
961 KSPROPERTY_DIRECTSOUND3DBUFFER_VELOCITY
964 #define KSPROPSETID_DirectSound3DListener
966 KSPROPERTY_DIRECTSOUND3DLISTENER_ALL
967 KSPROPERTY_DIRECTSOUND3DLISTENER_ALLOCATION
968 KSPROPERTY_DIRECTSOUND3DLISTENER_BATCH
969 KSPROPERTY_DIRECTSOUND3DLISTENER_DISTANCEFACTOR
970 KSPROPERTY_DIRECTSOUND3DLISTENER_DOPPLERFACTOR
971 KSPROPERTY_DIRECTSOUND3DLISTENER_ORIENTATION
972 KSPROPERTY_DIRECTSOUND3DLISTENER_POSITION
973 KSPROPERTY_DIRECTSOUND3DLISTENER_ROLLOFFFACTOR
974 KSPROPERTY_DIRECTSOUND3DLISTENER_VELOCITY
977 #define KSPROPSETID_Hrtf3d
979 KSPROPERTY_HRTF3D_FILTER_FORMAT
980 KSPROPERTY_HRTF3D_INITIALIZE
981 KSPROPERTY_HRTF3D_PARAMS
984 #define KSPROPSETID_Itd3d
986 KSPROPERTY_ITD3D_PARAMS
989 #define KSPROPSETID_TopologyNode
991 KSPROPERTY_TOPOLOGYNODE_ENABLE
992 KSPROPERTY_TOPOLOGYNODE_RESET
996 /* ===============================================================
1000 KSNODETYPE_3D_EFFECTS
1001 KSNODETYPE_ACOUSTIC_ECHO_CANCEL
1008 KSNODETYPE_DEV_SPECIFIC
1010 KSNODETYPE_DMSYNTH_CAPS
1011 KSNODETYPE_DRM_DESCRAMBLE
1012 KSNODETYPE_EQUALIZER
1016 KSNODETYPE_PEAKMETER
1017 KSNODETYPE_PROLOGIC_DECODER
1018 KSNODETYPE_PROLOGIC_ENCODER
1021 KSNODETYPE_STEREO_ENHANCE
1022 KSNODETYPE_STEREO_WIDE
1027 KSNODETYPE_SYNTHESIZER
1032 typedef PVOID KSDEVICE_HEADER
, KSOBJECT_HEADER
, KSOBJECT_BAG
;
1034 /* ===============================================================
1038 #define KSMETHOD_TYPE_NONE 0x00000000
1039 #define KSMETHOD_TYPE_READ 0x00000001
1040 #define KSMETHOD_TYPE_WRITE 0x00000002
1041 #define KSMETHOD_TYPE_MODIFY 0x00000003
1042 #define KSMETHOD_TYPE_SOURCE 0x00000004
1043 #define KSMETHOD_TYPE_SEND 0x00000001
1044 #define KSMETHOD_TYPE_SETSUPPORT 0x00000100
1045 #define KSMETHOD_TYPE_BASICSUPPORT 0x00000200
1047 /* ===============================================================
1051 #define KSPROPERTY_TYPE_GET 0x00000001
1052 #define KSPROPERTY_TYPE_SET 0x00000002
1053 #define KSPROPERTY_TYPE_SETSUPPORT 0x00000100
1054 #define KSPROPERTY_TYPE_BASICSUPPORT 0x00000200
1055 #define KSPROPERTY_TYPE_RELATIONS 0x00000400
1056 #define KSPROPERTY_TYPE_SERIALIZESET 0x00000800
1057 #define KSPROPERTY_TYPE_UNSERIALIZESET 0x00001000
1058 #define KSPROPERTY_TYPE_SERIALIZERAW 0x00002000
1059 #define KSPROPERTY_TYPE_UNSERIALIZERAW 0x00004000
1060 #define KSPROPERTY_TYPE_SERIALIZESIZE 0x00008000
1061 #define KSPROPERTY_TYPE_DEFAULT_VALUES 0x00010000
1063 /* ===============================================================
1064 Topology Methods/Properties
1067 #define KSMETHOD_TYPE_TOPOLOGY 0x10000000
1068 #define KSPROPERTY_TYPE_TOPOLOGY 0x10000000
1071 #define DEFINE_KS_GUID(GA,GB,GC,GD,GE,GF,GG,GH,GI,GJ,GK) \
1072 DEFINE_GUID(??, 0x#GA#L, 0xGB, 0xGC, 0xGD, 0xGE, 0xGF, 0xGG, 0xGH, 0xGI, 0xGJ, 0xGK) \
1073 "GA-GB-GC-GDGE-GFGGGHGIGJGK"
1076 /* ===============================================================
1079 BRIDGE - 0x085AFF00L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1080 CAPTURE - 0x65E8773DL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1081 RENDER - 0x65E8773EL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1082 MIXER - 0xAD809C00L, 0x7B88, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1083 SPLITTER - 0x0A4252A0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1084 DATACOMPRESSOR - 0x1E84C900L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1085 DATADECOMPRESSOR - 0x2721AE20L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1086 DATATRANSFORM - 0x2EB07EA0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1087 COMMUNICATIONSTRANSFORM - 0xCF1DDA2CL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1088 INTERFACETRANSFORM - 0xCF1DDA2DL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1089 MEDIUMTRANSFORM - 0xCF1DDA2EL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1090 FILESYSTEM - 0x760FED5EL, 0x9357, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1091 CLOCK - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1092 PROXY - 0x97EBAACAL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1093 QUALITY - 0x97EBAACBL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1096 /* ===============================================================
1097 KSNAME GUIDs (defined also as KSSTRING_Xxx L"{...}"
1099 Filter - 0x9b365890L, 0x165f, 0x11d0, 0xa1, 0x95, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
1100 Pin - 0x146F1A80L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1101 Clock - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1102 Allocator - 0x642F5D00L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1103 TopologyNode - 0x0621061AL, 0xEE75, 0x11D0, 0xB9, 0x15, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1106 /* ===============================================================
1109 Standard - 0x1A8766A0L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1110 FileIo - 0x8C6F932CL, 0xE771, 0x11D0, 0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1113 /* ===============================================================
1116 Standard - 0x4747B320L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1119 /* ===============================================================
1122 General - 0x1464EDA5L, 0x6A8F, 0x11D1, 0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1123 StreamIo - 0x65D003CAL, 0x1523, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1124 MediaSeeking - 0xEE904F0CL, 0xD09B, 0x11D0, 0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1125 Topology - 0x720D4AC0L, 0x7533, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1126 GM - 0xAF627536L, 0xE719, 0x11D2, 0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D
1127 Quality - 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1128 Connection - 0x1D58C920L, 0xAC9B, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1131 /* ===============================================================
1132 StreamAllocator Sets
1134 Event set - 0x75d95571L, 0x073c, 0x11d0, 0xa1, 0x61, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
1135 Method set - 0xcf6e4341L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
1136 Property set - 0xcf6e4342L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
1139 /* ===============================================================
1140 StreamInterface Sets
1142 Property set - 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
1145 /* ===============================================================
1148 Property set - 0xDF12A4C0L, 0xAC17, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1149 Event sets - 0x364D8E20L, 0x62C7, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1152 /* ===============================================================
1155 Event set - 0x7f4bcbe0L, 0x9ea5, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00
1158 /* ===============================================================
1161 KSTIME_FORMAT_NONE (null guid)
1162 FRAME - 0x7b785570L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1163 BYTE - 0x7b785571L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1164 SAMPLE - 0x7b785572L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1165 FIELD - 0x7b785573L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1166 MEDIA_TIME - 0x7b785574L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1169 /* ===============================================================
1179 #define STATIC_KSDATAFORMAT_SPECIFIER_NONE\
1180 0x0F6417D6L, 0xC318, 0x11D0, {0xA4, 0x3F, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
1181 DEFINE_GUIDSTRUCT("0F6417D6-C318-11D0-A43F-00A0C9223196", KSDATAFORMAT_SPECIFIER_NONE
);
1182 #define KSDATAFORMAT_SPECIFIER_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_NONE)
1184 /* ===============================================================
1187 WILDCARD, DONT_CARE = NULL
1188 SYSTEM - 0x091bb638L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1189 USER - 0x8cb0fc28L, 0x7893, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1190 KERNEL_PAGED - 0xd833f8f8L, 0x7894, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1191 KERNEL_NONPAGED - 0x4a6d5fc4L, 0x7895, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1192 DEVICE_UNKNOWN - 0x091bb639L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1195 /* ===============================================================
1197 (values have been checked)
1202 #define DEFINE_KSPROPERTY_ITEM(PropertyId, GetHandler,\
1206 Values, RelationsCount, Relations, SupportHandler,\
1209 PropertyId, {(PFNKSHANDLER)GetHandler}, MinProperty, MinData,\
1210 {(PFNKSHANDLER)SetHandler},\
1211 (PKSPROPERTY_VALUES)Values, RelationsCount, (PKSPROPERTY)Relations,\
1212 (PFNKSHANDLER)SupportHandler, (ULONG)SerializedSize\
1217 #define DEFINE_KSPROPERTY_ITEM(PropertyId, GetHandler,\
1221 Values, RelationsCount, Relations, SupportHandler,\
1224 PropertyId, (PFNKSHANDLER)GetHandler, MinProperty, MinData,\
1225 (PFNKSHANDLER)SetHandler,\
1226 (PKSPROPERTY_VALUES)Values, RelationsCount, (PKSPROPERTY)Relations,\
1227 (PFNKSHANDLER)SupportHandler, (ULONG)SerializedSize\
1234 KsObjectTypeFilterFactory
,
1244 } KSSTATE
, *PKSSTATE
;
1247 KSTARGET_STATE_DISABLED
,
1248 KSTARGET_STATE_ENABLED
1261 KSEVENTS_FMUTEXUNSAFE
,
1264 } KSEVENTS_LOCKTYPE
;
1267 KSDEGRADE_STANDARD_SIMPLE
,
1268 KSDEGRADE_STANDARD_QUALITY
,
1269 KSDEGRADE_STANDARD_COMPUTATION
,
1270 KSDEGRADE_STANDARD_SKIP
1271 } KSDEGRADE_STANDARD
;
1274 KSPIN_DATAFLOW_IN
= 1,
1276 } KSPIN_DATAFLOW
, *PKSPIN_DATAFLOW
;
1279 KSPIN_COMMUNICATION_NONE
,
1280 KSPIN_COMMUNICATION_SINK
,
1281 KSPIN_COMMUNICATION_SOURCE
,
1282 KSPIN_COMMUNICATION_BOTH
,
1283 KSPIN_COMMUNICATION_BRIDGE
1284 } KSPIN_COMMUNICATION
, *PKSPIN_COMMUNICATION
;
1289 } KSLIST_ENTRY_LOCATION
;
1292 KsStackCopyToNewLocation
,
1293 KsStackReuseCurrentLocation
,
1294 KsStackUseNewLocation
1300 KsAcquireOnlySingleItem
,
1301 KsAcquireAndRemoveOnlySingleItem
1302 } KSIRP_REMOVAL_OPERATION
;
1305 KsInvokeOnSuccess
= 1,
1306 KsInvokeOnError
= 2,
1307 KsInvokeOnCancel
= 4
1308 } KSCOMPLETION_INVOCATION
;
1310 #if defined(_NTDDK_) && !defined(__wtypes_h__)
1340 VT_USERDEFINED
= 29,
1347 VT_STREAMED_OBJECT
= 68,
1348 VT_STORED_OBJECT
= 69,
1349 VT_BLOB_OBJECT
= 70,
1355 VT_RESERVED
= 0x8000,
1356 VT_ILLEGAL
= 0xffff,
1357 VT_ILLEGALMASKED
= 0xfff,
1362 #define STATIC_KSDATAFORMAT_TYPE_WILDCARD STATIC_GUID_NULL
1363 #define KSDATAFORMAT_TYPE_WILDCARD GUID_NULL
1365 #define STATIC_KSDATAFORMAT_SUBTYPE_WILDCARD STATIC_GUID_NULL
1366 #define KSDATAFORMAT_SUBTYPE_WILDCARD GUID_NULL
1368 #define STATIC_KSDATAFORMAT_SPECIFIER_WILDCARD STATIC_GUID_NULL
1369 #define KSDATAFORMAT_SPECIFIER_WILDCARD GUID_NULL
1371 /* ===============================================================
1379 } KS_FRAMING_RANGE
, *PKS_FRAMING_RANGE
;
1382 KS_FRAMING_RANGE Range
;
1383 ULONG InPlaceWeight
;
1384 ULONG NotInPlaceWeight
;
1385 } KS_FRAMING_RANGE_WEIGHTED
, *PKS_FRAMING_RANGE_WEIGHTED
;
1394 ULONG FileAlignment
;
1395 ULONG MemoryTypeWeight
;
1396 KS_FRAMING_RANGE PhysicalRange
;
1397 KS_FRAMING_RANGE_WEIGHTED FramingRange
;
1398 } KS_FRAMING_ITEM
, *PKS_FRAMING_ITEM
;
1401 ULONG RatioNumerator
;
1402 ULONG RatioDenominator
;
1403 ULONG RatioConstantMargin
;
1404 } KS_COMPRESSION
, *PKS_COMPRESSION
;
1406 /* ===============================================================
1410 #define KSPRIORITY_LOW 0x00000001
1411 #define KSPRIORITY_NORMAL 0x40000000
1412 #define KSPRIORITY_HIGH 0x80000000
1413 #define KSPRIORITY_EXCLUSIVE 0xFFFFFFFF
1416 ULONG PriorityClass
;
1417 ULONG PrioritySubClass
;
1418 } KSPRIORITY
, *PKSPRIORITY
;
1420 /* ===============================================================
1422 http://www.osronline.com/DDKx/stream/ks-struct_494j.htm
1425 #if defined(_NTDDK_)
1428 PDRIVER_DISPATCH DeviceIoControl
;
1429 PDRIVER_DISPATCH Read
;
1430 PDRIVER_DISPATCH Write
;
1431 PDRIVER_DISPATCH Flush
;
1432 PDRIVER_DISPATCH Close
;
1433 PDRIVER_DISPATCH QuerySecurity
;
1434 PDRIVER_DISPATCH SetSecurity
;
1435 PFAST_IO_DEVICE_CONTROL FastDeviceIoControl
;
1436 PFAST_IO_READ FastRead
;
1437 PFAST_IO_WRITE FastWrite
;
1438 } KSDISPATCH_TABLE
, *PKSDISPATCH_TABLE
;
1440 #define KSCREATE_ITEM_IRP_STORAGE(Irp) (*(PKSOBJECT_CREATE_ITEM*)&(Irp)->Tail.Overlay.DriverContext[0])
1441 #define KSEVENT_SET_IRP_STORAGE(Irp) (*(const KSEVENT_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1442 #define KSEVENT_ITEM_IRP_STORAGE(Irp) (*(const KSEVENT_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1443 #define KSEVENT_ENTRY_IRP_STORAGE(Irp) (*(PKSEVENT_ENTRY*)&(Irp)->Tail.Overlay.DriverContext[0])
1444 #define KSMETHOD_SET_IRP_STORAGE(Irp) (*(const KSMETHOD_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1445 #define KSMETHOD_ITEM_IRP_STORAGE(Irp) (*(const KSMETHOD_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1446 #define KSMETHOD_TYPE_IRP_STORAGE(Irp) (*(ULONG_PTR*)(&(Irp)->Tail.Overlay.DriverContext[2]))
1447 #define KSQUEUE_SPINLOCK_IRP_STORAGE(Irp) (*(PKSPIN_LOCK*)&(Irp)->Tail.Overlay.DriverContext[1])
1448 #define KSPROPERTY_SET_IRP_STORAGE(Irp) (*(const KSPROPERTY_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1449 #define KSPROPERTY_ITEM_IRP_STORAGE(Irp) (*(const KSPROPERTY_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1450 #define KSPROPERTY_ATTRIBUTES_IRP_STORAGE(Irp) (*(PKSATTRIBUTE_LIST*)&(Irp)->Tail.Overlay.DriverContext[2])
1452 _IRQL_requires_max_(PASSIVE_LEVEL
)
1454 (NTAPI
*PFNREFERENCEDEVICEOBJECT
)(
1455 _In_ PVOID Context
);
1457 _IRQL_requires_max_(PASSIVE_LEVEL
)
1459 (NTAPI
*PFNDEREFERENCEDEVICEOBJECT
)(
1460 _In_ PVOID Context
);
1462 _IRQL_requires_max_(PASSIVE_LEVEL
)
1464 (NTAPI
*PFNQUERYREFERENCESTRING
)(
1466 _Inout_ PWCHAR
*String
);
1469 INTERFACE Interface
;
1470 PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject
;
1471 PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject
;
1472 PFNQUERYREFERENCESTRING QueryReferenceString
;
1473 } BUS_INTERFACE_REFERENCE
, *PBUS_INTERFACE_REFERENCE
;
1477 ULONG ReferenceCount
;
1478 KSPIN_LOCK AccessLock
;
1479 } KSDPC_ITEM
, *PKSDPC_ITEM
;
1483 LIST_ENTRY BufferList
;
1484 } KSBUFFER_ITEM
, *PKSBUFFER_ITEM
;
1486 #endif /* _NTDDK_ */
1495 } KSCOMPONENTID
, *PKSCOMPONENTID
;
1497 /* ===============================================================
1504 } KSPROPERTY_SERIALHDR
, *PKSPROPERTY_SERIALHDR
;
1507 KSIDENTIFIER PropTypeSet
;
1509 ULONG PropertyLength
;
1510 } KSPROPERTY_SERIAL
, *PKSPROPERTY_SERIAL
;
1516 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1522 ULONG UnsignedMinimum
;
1523 ULONG UnsignedMaximum
;
1524 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1529 } KSPROPERTY_BOUNDS_LONG
, *PKSPROPERTY_BOUNDS_LONG
;
1533 LONGLONG SignedMinimum
;
1534 LONGLONG SignedMaximum
;
1535 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1541 #if defined(_NTDDK_)
1542 ULONGLONG UnsignedMinimum
;
1543 ULONGLONG UnsignedMaximum
;
1545 DWORDLONG UnsignedMinimum
;
1546 DWORDLONG UnsignedMaximum
;
1548 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1553 } KSPROPERTY_BOUNDS_LONGLONG
, *PKSPROPERTY_BOUNDS_LONGLONG
;
1557 ULONG DescriptionSize
;
1558 KSIDENTIFIER PropTypeSet
;
1559 ULONG MembersListCount
;
1561 } KSPROPERTY_DESCRIPTION
, *PKSPROPERTY_DESCRIPTION
;
1568 } KSPROPERTY_MEMBERSHEADER
, *PKSPROPERTY_MEMBERSHEADER
;
1571 KSPROPERTY_MEMBERSHEADER MembersHeader
;
1572 const VOID
*Members
;
1573 } KSPROPERTY_MEMBERSLIST
, *PKSPROPERTY_MEMBERSLIST
;
1575 #define KSPROPERTY_MEMBER_RANGES 0x00000001
1576 #define KSPROPERTY_MEMBER_STEPPEDRANGES 0x00000002
1577 #define KSPROPERTY_MEMBER_VALUES 0x00000003
1579 #define KSPROPERTY_MEMBER_FLAG_DEFAULT 0x00000001
1580 #if (NTDDI_VERSION >= NTDDI_WINXP)
1581 #define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_MULTICHANNEL 0x00000002
1582 #define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_UNIFORM 0x00000004
1586 KSIDENTIFIER PropTypeSet
;
1587 ULONG MembersListCount
;
1588 _Field_size_(MembersListCount
) const KSPROPERTY_MEMBERSLIST
*MembersList
;
1589 } KSPROPERTY_VALUES
, *PKSPROPERTY_VALUES
;
1591 #if defined(_NTDDK_)
1593 _IRQL_requires_max_(PASSIVE_LEVEL
)
1595 (NTAPI
*PFNKSCONTEXT_DISPATCH
)(
1599 _IRQL_requires_max_(PASSIVE_LEVEL
)
1601 (NTAPI
*PFNKSHANDLER
)(
1603 _In_ PKSIDENTIFIER Request
,
1604 _Inout_ PVOID Data
);
1609 PFNKSHANDLER GetPropertyHandler
;
1610 BOOLEAN GetSupported
;
1615 PFNKSHANDLER SetPropertyHandler
;
1616 BOOLEAN SetSupported
;
1618 const KSPROPERTY_VALUES
*Values
;
1619 ULONG RelationsCount
;
1620 _Field_size_(RelationsCount
) const KSPROPERTY
*Relations
;
1621 PFNKSHANDLER SupportHandler
;
1622 ULONG SerializedSize
;
1623 } KSPROPERTY_ITEM
, *PKSPROPERTY_ITEM
;
1625 _IRQL_requires_max_(PASSIVE_LEVEL
)
1627 (NTAPI
*PFNKSFASTHANDLER
)(
1628 _In_ PFILE_OBJECT FileObject
,
1629 _In_reads_bytes_(RequestLength
) PKSIDENTIFIER Request
,
1630 _In_ ULONG RequestLength
,
1631 _Inout_updates_bytes_(DataLength
) PVOID Data
,
1632 _In_ ULONG DataLength
,
1633 _Out_ PIO_STATUS_BLOCK IoStatus
);
1638 PFNKSFASTHANDLER GetPropertyHandler
;
1639 BOOLEAN GetSupported
;
1642 PFNKSFASTHANDLER SetPropertyHandler
;
1643 BOOLEAN SetSupported
;
1646 } KSFASTPROPERTY_ITEM
, *PKSFASTPROPERTY_ITEM
;
1650 ULONG PropertiesCount
;
1651 _Field_size_(PropertiesCount
) const KSPROPERTY_ITEM
*PropertyItem
;
1653 const KSFASTPROPERTY_ITEM
*FastIoTable
;
1654 } KSPROPERTY_SET
, *PKSPROPERTY_SET
;
1656 #endif /* _NTDDK_ */
1659 ULONG SteppingDelta
;
1661 KSPROPERTY_BOUNDS_LONG Bounds
;
1662 } KSPROPERTY_STEPPING_LONG
, *PKSPROPERTY_STEPPING_LONG
;
1665 #if defined(_NTDDK_)
1666 ULONGLONG SteppingDelta
;
1668 DWORDLONG SteppingDelta
;
1670 KSPROPERTY_BOUNDS_LONGLONG Bounds
;
1671 } KSPROPERTY_STEPPING_LONGLONG
, *PKSPROPERTY_STEPPING_LONGLONG
;
1673 /* ===============================================================
1680 ULONG RequirementsFlags
;
1682 #if defined(_NTDDK_)
1689 ULONG FileAlignment
;
1691 } KSALLOCATOR_FRAMING
, *PKSALLOCATOR_FRAMING
;
1696 KS_COMPRESSION OutputCompression
;
1698 KS_FRAMING_ITEM FramingItem
[1];
1699 } KSALLOCATOR_FRAMING_EX
, *PKSALLOCATOR_FRAMING_EX
;
1701 #define KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER 0x00000001
1702 #define KSALLOCATOR_REQUIREMENTF_SYSTEM_MEMORY 0x00000002
1703 #define KSALLOCATOR_REQUIREMENTF_FRAME_INTEGRITY 0x00000004
1704 #define KSALLOCATOR_REQUIREMENTF_MUST_ALLOCATE 0x00000008
1705 #define KSALLOCATOR_REQUIREMENTF_PREFERENCES_ONLY 0x80000000
1707 #define KSALLOCATOR_OPTIONF_COMPATIBLE 0x00000001
1708 #define KSALLOCATOR_OPTIONF_SYSTEM_MEMORY 0x00000002
1709 #define KSALLOCATOR_OPTIONF_VALID 0x00000003
1711 #define KSALLOCATOR_FLAG_PARTIAL_READ_SUPPORT 0x00000010
1712 #define KSALLOCATOR_FLAG_DEVICE_SPECIFIC 0x00000020
1713 #define KSALLOCATOR_FLAG_CAN_ALLOCATE 0x00000040
1714 #define KSALLOCATOR_FLAG_INSIST_ON_FRAMESIZE_RATIO 0x00000080
1716 /* ===============================================================
1724 } KSQUALITY
, *PKSQUALITY
;
1727 HANDLE QualityManager
;
1729 } KSQUALITY_MANAGER
, *PKSQUALITY_MANAGER
;
1732 LONGLONG PresentationStart
;
1734 KSPIN_INTERFACE Interface
;
1740 KSPROPERTY Property
;
1742 } KSRATE_CAPABILITY
, *PKSRATE_CAPABILITY
;
1745 LONGLONG Granularity
;
1747 } KSRESOLUTION
, *PKSRESOLUTION
;
1750 ULONG NotificationType
;
1754 ULONG_PTR Reserved
[2];
1761 #if defined(_NTDDK_)
1764 KPRIORITY Increment
;
1769 KPRIORITY Increment
;
1774 ULONG ReferenceCount
;
1778 PWORK_QUEUE_ITEM WorkQueueItem
;
1779 WORK_QUEUE_TYPE WorkQueueType
;
1783 PWORK_QUEUE_ITEM WorkQueueItem
;
1784 PKSWORKER KsWorkerObject
;
1790 LONG_PTR Alignment
[2];
1793 } KSEVENTDATA
, *PKSEVENTDATA
;
1795 #define KSEVENTF_EVENT_HANDLE 0x00000001
1796 #define KSEVENTF_SEMAPHORE_HANDLE 0x00000002
1797 #if defined(_NTDDK_)
1798 #define KSEVENTF_EVENT_OBJECT 0x00000004
1799 #define KSEVENTF_SEMAPHORE_OBJECT 0x00000008
1800 #define KSEVENTF_DPC 0x00000010
1801 #define KSEVENTF_WORKITEM 0x00000020
1802 #define KSEVENTF_KSWORKITEM 0x00000080
1806 #define KSEVENT_TYPE_ENABLE 0x00000001
1807 #define KSEVENT_TYPE_ONESHOT 0x00000002
1808 #define KSEVENT_TYPE_ENABLEBUFFERED 0x00000004
1809 #define KSEVENT_TYPE_SETSUPPORT 0x00000100
1810 #define KSEVENT_TYPE_BASICSUPPORT 0x00000200
1811 #define KSEVENT_TYPE_QUERYBUFFER 0x00000400
1813 #define KSEVENT_TYPE_TOPOLOGY 0x10000000
1819 HANDLE ObjectHandle
;
1820 PVOID ObjectPointer
;
1824 KSEVENTDATA EventData
;
1825 } KSRELATIVEEVENT
, *PKSRELATIVEEVENT
;
1827 #define KSRELATIVEEVENT_FLAG_HANDLE 0x00000001
1828 #define KSRELATIVEEVENT_FLAG_POINTER 0x00000002
1830 /* ===============================================================
1835 KSEVENTDATA EventData
;
1837 } KSEVENT_TIME_MARK
, *PKSEVENT_TIME_MARK
;
1840 KSEVENTDATA EventData
;
1843 } KSEVENT_TIME_INTERVAL
, *PKSEVENT_TIME_INTERVAL
;
1848 } KSINTERVAL
, *PKSINTERVAL
;
1858 LONGLONG SystemTime
;
1859 } KSCORRELATED_TIME
, *PKSCORRELATED_TIME
;
1865 } KSFRAMETIME
, *PKSFRAMETIME
;
1867 /* ===============================================================
1871 typedef PVOID PKSDEFAULTCLOCK
;
1875 } KSCLOCK_CREATE
, *PKSCLOCK_CREATE
;
1877 #if defined(_NTDDK_)
1879 _IRQL_requires_max_(PASSIVE_LEVEL
)
1881 (FASTCALL
*PFNKSCLOCK_GETTIME
)(
1882 _In_ PFILE_OBJECT FileObject
);
1884 _IRQL_requires_max_(PASSIVE_LEVEL
)
1886 (FASTCALL
*PFNKSCLOCK_CORRELATEDTIME
)(
1887 _In_ PFILE_OBJECT FileObject
,
1888 _Out_ PLONGLONG SystemTime
);
1891 PFNKSCLOCK_GETTIME GetTime
;
1892 PFNKSCLOCK_GETTIME GetPhysicalTime
;
1893 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedTime
;
1894 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedPhysicalTime
;
1895 } KSCLOCK_FUNCTIONTABLE
, *PKSCLOCK_FUNCTIONTABLE
;
1897 #define DEFINE_KSPROPERTY_ITEM_CLOCK_TIME(Handler)\
1898 DEFINE_KSPROPERTY_ITEM(\
1899 KSPROPERTY_CLOCK_TIME,\
1901 sizeof(KSPROPERTY),\
1903 NULL, NULL, 0, NULL, NULL, 0)
1905 #define DEFINE_KSPROPERTY_ITEM_CLOCK_PHYSICALTIME(Handler)\
1906 DEFINE_KSPROPERTY_ITEM(\
1907 KSPROPERTY_CLOCK_PHYSICALTIME,\
1909 sizeof(KSPROPERTY),\
1911 NULL, NULL, 0, NULL, NULL, 0)
1913 #define DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDTIME(Handler)\
1914 DEFINE_KSPROPERTY_ITEM(\
1915 KSPROPERTY_CLOCK_CORRELATEDTIME,\
1917 sizeof(KSPROPERTY),\
1918 sizeof(KSCORRELATED_TIME),\
1919 NULL, NULL, 0, NULL, NULL, 0)
1921 #define DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDPHYSICALTIME(Handler)\
1922 DEFINE_KSPROPERTY_ITEM(\
1923 KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME,\
1925 sizeof(KSPROPERTY),\
1926 sizeof(KSCORRELATED_TIME),\
1927 NULL, NULL, 0, NULL, NULL, 0)
1929 #define DEFINE_KSPROPERTY_ITEM_CLOCK_RESOLUTION(Handler)\
1930 DEFINE_KSPROPERTY_ITEM(\
1931 KSPROPERTY_CLOCK_RESOLUTION,\
1933 sizeof(KSPROPERTY),\
1934 sizeof(KSRESOLUTION),\
1935 NULL, NULL, 0, NULL, NULL, 0)
1937 #define DEFINE_KSPROPERTY_ITEM_CLOCK_STATE(Handler)\
1938 DEFINE_KSPROPERTY_ITEM(\
1939 KSPROPERTY_CLOCK_STATE,\
1941 sizeof(KSPROPERTY),\
1943 NULL, NULL, 0, NULL, NULL, 0)
1945 #define DEFINE_KSPROPERTY_ITEM_CLOCK_FUNCTIONTABLE(Handler)\
1946 DEFINE_KSPROPERTY_ITEM(\
1947 KSPROPERTY_CLOCK_FUNCTIONTABLE,\
1949 sizeof(KSPROPERTY),\
1950 sizeof(KSCLOCK_FUNCTIONTABLE),\
1951 NULL, NULL, 0, NULL, NULL, 0)
1953 #define DEFINE_KSPROPERTY_CLOCKSET(ClockSet,\
1954 PropTime, PropPhysicalTime,\
1955 PropCorrelatedTime, PropCorrelatedPhysicalTime,\
1956 PropResolution, PropState, PropFunctionTable)\
1957 DEFINE_KSPROPERTY_TABLE(ClockSet) {\
1958 DEFINE_KSPROPERTY_ITEM_CLOCK_TIME(PropTime),\
1959 DEFINE_KSPROPERTY_ITEM_CLOCK_PHYSICALTIME(PropPhysicalTime),\
1960 DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDTIME(PropCorrelatedTime),\
1961 DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDPHYSICALTIME(PropCorrelatedPhysicalTime),\
1962 DEFINE_KSPROPERTY_ITEM_CLOCK_RESOLUTION(PropResolution),\
1963 DEFINE_KSPROPERTY_ITEM_CLOCK_STATE(PropState),\
1964 DEFINE_KSPROPERTY_ITEM_CLOCK_FUNCTIONTABLE(PropFunctionTable)\
1967 /* ===============================================================
1968 Objects ??? SORT ME!
1971 #define KSCREATE_ITEM_SECURITYCHANGED 0x1
1972 #define KSCREATE_ITEM_WILDCARD 0x2
1973 #define KSCREATE_ITEM_NOPARAMETERS 0x4
1974 #define KSCREATE_ITEM_FREEONSTOP 0x8
1977 PDRIVER_DISPATCH Create
;
1979 UNICODE_STRING ObjectClass
;
1980 PSECURITY_DESCRIPTOR SecurityDescriptor
;
1982 } KSOBJECT_CREATE_ITEM
, *PKSOBJECT_CREATE_ITEM
;
1985 ULONG CreateItemsCount
;
1986 _Field_size_(CreateItemsCount
) PKSOBJECT_CREATE_ITEM CreateItemsList
;
1987 } KSOBJECT_CREATE
, *PKSOBJECT_CREATE
;
1990 (NTAPI
*PFNKSITEMFREECALLBACK
)(
1991 _In_ PKSOBJECT_CREATE_ITEM CreateItem
);
1993 #endif /* _NTDDK_ */
1998 } KSMULTIPLE_ITEM
, *PKSMULTIPLE_ITEM
;
2002 PKSEVENTDATA EventData
;
2004 } KSQUERYBUFFER
, *PKSQUERYBUFFER
;
2009 } KSERROR
, *PKSERROR
;
2011 /* ===============================================================
2015 #if defined(_NTDDK_)
2020 PFNKSHANDLER MethodHandler
;
2021 BOOLEAN MethodSupported
;
2025 PFNKSHANDLER SupportHandler
;
2027 } KSMETHOD_ITEM
, *PKSMETHOD_ITEM
;
2031 #define DEFINE_KSMETHOD_ITEM(MethodId, Flags,\
2033 MinMethod, MinData, SupportHandler)\
2035 MethodId, {(PFNKSHANDLER)MethodHandler}, MinMethod, MinData,\
2036 SupportHandler, Flags\
2041 #define DEFINE_KSMETHOD_ITEM(MethodId, Flags,\
2043 MinMethod, MinData, SupportHandler)\
2045 MethodId, (PFNKSHANDLER)MethodHandler, MinMethod, MinData,\
2046 SupportHandler, Flags\
2054 PFNKSFASTHANDLER MethodHandler
;
2055 BOOLEAN MethodSupported
;
2057 } KSFASTMETHOD_ITEM
, *PKSFASTMETHOD_ITEM
;
2059 #define DEFINE_KSFASTMETHOD_ITEM(MethodId, MethodHandler)\
2061 MethodId, (PFNKSFASTHANDLER)MethodHandler\
2067 _Field_size_(MethodsCount
) const KSMETHOD_ITEM
*MethodItem
;
2069 _Field_size_(FastIoCount
) const KSFASTMETHOD_ITEM
*FastIoTable
;
2070 } KSMETHOD_SET
, *PKSMETHOD_SET
;
2072 #define DEFINE_KSMETHOD_SET(Set,\
2085 #endif /* _NTDDK_ */
2087 /* ===============================================================
2092 KSPROPERTY Property
;
2095 } KSP_NODE
, *PKSP_NODE
;
2101 } KSM_NODE
, *PKSM_NODE
;
2107 } KSE_NODE
, *PKSE_NODE
;
2112 } KSNODE_CREATE
, *PKSNODE_CREATE
;
2114 /* ===============================================================
2118 typedef struct _KSEVENT_ENTRY KSEVENT_ENTRY
, *PKSEVENT_ENTRY
;
2120 #if defined(_NTDDK_)
2123 (NTAPI
*PFNKSADDEVENT
)(
2125 _In_ PKSEVENTDATA EventData
,
2126 _In_
struct _KSEVENT_ENTRY
*EventEntry
);
2129 (NTAPI
*PFNKSREMOVEEVENT
)(
2130 _In_ PFILE_OBJECT FileObject
,
2131 _In_
struct _KSEVENT_ENTRY
*EventEntry
);
2136 ULONG ExtraEntryData
;
2137 PFNKSADDEVENT AddHandler
;
2138 PFNKSREMOVEEVENT RemoveHandler
;
2139 PFNKSHANDLER SupportHandler
;
2140 } KSEVENT_ITEM
, *PKSEVENT_ITEM
;
2145 _Field_size_(EventsCount
) const KSEVENT_ITEM
*EventItem
;
2146 } KSEVENT_SET
, *PKSEVENT_SET
;
2148 struct _KSEVENT_ENTRY
{
2149 LIST_ENTRY ListEntry
;
2152 PKSDPC_ITEM DpcItem
;
2153 PKSBUFFER_ITEM BufferItem
;
2155 PKSEVENTDATA EventData
;
2156 ULONG NotificationType
;
2157 const KSEVENT_SET
*EventSet
;
2158 const KSEVENT_ITEM
*EventItem
;
2159 PFILE_OBJECT FileObject
;
2160 ULONG SemaphoreAdjustment
;
2165 #endif /* _NTDDK_ */
2167 /* ===============================================================
2171 #if defined(_NTDDK_)
2173 typedef struct _KSPIN KSPIN
, *PKSPIN
;
2174 typedef struct _KSSTREAM_POINTER KSSTREAM_POINTER
, *PKSSTREAM_POINTER
;
2175 typedef struct _KSSTREAM_POINTER_OFFSET KSSTREAM_POINTER_OFFSET
, *PKSSTREAM_POINTER_OFFSET
;
2176 typedef struct _KSMAPPING KSMAPPING
, *PKSMAPPING
;
2177 typedef struct _KSPROCESSPIN KSPROCESSPIN
, *PKSPROCESSPIN
;
2179 #define IOCTL_KS_HANDSHAKE CTL_CODE(FILE_DEVICE_KS, 0x007, METHOD_NEITHER, FILE_ANY_ACCESS)
2185 } KSHANDSHAKE
, *PKSHANDSHAKE
;
2187 _IRQL_requires_max_(PASSIVE_LEVEL
)
2189 (NTAPI
*PFNKSPINHANDSHAKE
)(
2191 _In_ PKSHANDSHAKE In
,
2192 _In_ PKSHANDSHAKE Out
);
2194 _IRQL_requires_max_(PASSIVE_LEVEL
)
2196 (NTAPI
*PFNKSPINPOWER
)(
2198 _In_ DEVICE_POWER_STATE State
);
2201 (NTAPI
*PFNKSPINFRAMERETURN
)(
2203 _In_reads_bytes_opt_(Size
) PVOID Data
,
2204 _In_opt_ ULONG Size
,
2206 _In_opt_ PVOID Context
,
2207 _In_ NTSTATUS Status
);
2209 _IRQL_requires_max_(DISPATCH_LEVEL
)
2211 (NTAPI
*PFNKSPINIRPCOMPLETION
)(
2215 _IRQL_requires_max_(PASSIVE_LEVEL
)
2217 (NTAPI
*PFNKSPINIRP
)(
2225 _IRQL_requires_max_(PASSIVE_LEVEL
)
2227 (NTAPI
*PFNKSPINVOID
)(
2230 _IRQL_requires_max_(DISPATCH_LEVEL
)
2232 (NTAPI
*PFNKSSTREAMPOINTER
)(
2233 _In_ PKSSTREAM_POINTER StreamPointer
);
2237 _Field_size_(Count
) PKSATTRIBUTE
*Attributes
;
2238 } KSATTRIBUTE_LIST
, *PKSATTRIBUTE_LIST
;
2240 _IRQL_requires_max_(PASSIVE_LEVEL
)
2242 (NTAPI
*PFNKSPINSETDATAFORMAT
)(
2244 _In_opt_ PKSDATAFORMAT OldFormat
,
2245 _In_opt_ PKSMULTIPLE_ITEM OldAttributeList
,
2246 _In_
const KSDATARANGE
* DataRange
,
2247 _In_opt_
const KSATTRIBUTE_LIST
* AttributeRange
);
2249 _IRQL_requires_max_(PASSIVE_LEVEL
)
2251 (NTAPI
*PFNKSPINSETDEVICESTATE
)(
2253 _In_ KSSTATE ToState
,
2254 _In_ KSSTATE FromState
);
2256 typedef struct _KSCLOCK_DISPATCH KSCLOCK_DISPATCH
, *PKSCLOCK_DISPATCH
;
2257 typedef struct _KSALLOCATOR_DISPATCH KSALLOCATOR_DISPATCH
, *PKSALLOCATOR_DISPATCH
;
2264 PFNKSPINSETDATAFORMAT SetDataFormat
;
2265 PFNKSPINSETDEVICESTATE SetDeviceState
;
2267 PFNKSPINVOID Disconnect
;
2268 const KSCLOCK_DISPATCH
* Clock
;
2269 const KSALLOCATOR_DISPATCH
* Allocator
;
2270 } KSPIN_DISPATCH
, *PKSPIN_DISPATCH
;
2272 _IRQL_requires_max_(DISPATCH_LEVEL
)
2274 (NTAPI
*PFNKSPINSETTIMER
)(
2277 _In_ LARGE_INTEGER DueTime
,
2280 _IRQL_requires_max_(DISPATCH_LEVEL
)
2282 (NTAPI
*PFNKSPINCANCELTIMER
)(
2284 _In_ PKTIMER Timer
);
2286 _IRQL_requires_max_(DISPATCH_LEVEL
)
2288 (FASTCALL
*PFNKSPINCORRELATEDTIME
)(
2290 _Out_ PLONGLONG SystemTime
);
2292 _IRQL_requires_max_(DISPATCH_LEVEL
)
2294 (NTAPI
*PFNKSPINRESOLUTION
)(
2296 _Out_ PKSRESOLUTION Resolution
);
2298 struct _KSCLOCK_DISPATCH
{
2299 PFNKSPINSETTIMER SetTimer
;
2300 PFNKSPINCANCELTIMER CancelTimer
;
2301 PFNKSPINCORRELATEDTIME CorrelatedTime
;
2302 PFNKSPINRESOLUTION Resolution
;
2305 _IRQL_requires_max_(PASSIVE_LEVEL
)
2307 (NTAPI
*PFNKSPININITIALIZEALLOCATOR
)(
2309 _In_ PKSALLOCATOR_FRAMING AllocatorFraming
,
2310 _Out_ PVOID
*Context
);
2313 (NTAPI
*PFNKSDELETEALLOCATOR
)(
2314 _In_ PVOID Context
);
2317 (NTAPI
*PFNKSDEFAULTALLOCATE
)(
2318 _In_ PVOID Context
);
2321 (NTAPI
*PFNKSDEFAULTFREE
)(
2325 struct _KSALLOCATOR_DISPATCH
{
2326 PFNKSPININITIALIZEALLOCATOR InitializeAllocator
;
2327 PFNKSDELETEALLOCATOR DeleteAllocator
;
2328 PFNKSDEFAULTALLOCATE Allocate
;
2329 PFNKSDEFAULTFREE Free
;
2332 typedef struct KSAUTOMATION_TABLE_
{
2333 ULONG PropertySetsCount
;
2334 ULONG PropertyItemSize
;
2335 _Field_size_bytes_(PropertySetsCount
* PropertyItemSize
) const KSPROPERTY_SET
*PropertySets
;
2336 ULONG MethodSetsCount
;
2337 ULONG MethodItemSize
;
2338 _Field_size_bytes_(MethodSetsCount
* MethodItemSize
) const KSMETHOD_SET
*MethodSets
;
2339 ULONG EventSetsCount
;
2340 ULONG EventItemSize
;
2341 _Field_size_bytes_(EventSetsCount
* EventItemSize
) const KSEVENT_SET
*EventSets
;
2342 #if !defined(_WIN64)
2345 } KSAUTOMATION_TABLE
, *PKSAUTOMATION_TABLE
;
2348 ULONG InterfacesCount
;
2349 _Field_size_(InterfacesCount
) const KSPIN_INTERFACE
*Interfaces
;
2351 _Field_size_(MediumsCount
) const KSPIN_MEDIUM
*Mediums
;
2352 ULONG DataRangesCount
;
2353 _Field_size_(DataRangesCount
) const PKSDATARANGE
*DataRanges
;
2354 KSPIN_DATAFLOW DataFlow
;
2355 KSPIN_COMMUNICATION Communication
;
2356 const GUID
*Category
;
2361 ULONG ConstrainedDataRangesCount
;
2362 _Field_size_(ConstrainedDataRangesCount
) PKSDATARANGE
*ConstrainedDataRanges
;
2365 } KSPIN_DESCRIPTOR
, *PKSPIN_DESCRIPTOR
;
2367 _Must_inspect_result_
2368 _IRQL_requires_max_(PASSIVE_LEVEL
)
2370 (NTAPI
*PFNKSINTERSECTHANDLER
)(
2373 _In_ PKSDATARANGE DataRange
,
2374 _Out_opt_ PVOID Data
);
2376 _Must_inspect_result_
2377 _IRQL_requires_max_(PASSIVE_LEVEL
)
2379 (NTAPI
*PFNKSINTERSECTHANDLEREX
)(
2383 _In_ PKSDATARANGE DataRange
,
2384 _In_ PKSDATARANGE MatchingDataRange
,
2385 _In_ ULONG DataBufferSize
,
2386 _Out_writes_bytes_to_opt_(DataBufferSize
, *DataSize
) PVOID Data
,
2387 _Out_ PULONG DataSize
);
2390 const KSPIN_DISPATCH
* Dispatch
;
2391 const KSAUTOMATION_TABLE
* AutomationTable
;
2392 KSPIN_DESCRIPTOR PinDescriptor
;
2394 ULONG InstancesPossible
;
2395 ULONG InstancesNecessary
;
2396 const KSALLOCATOR_FRAMING_EX
* AllocatorFraming
;
2397 PFNKSINTERSECTHANDLEREX IntersectHandler
;
2398 } KSPIN_DESCRIPTOR_EX
, *PKSPIN_DESCRIPTOR_EX
;
2400 #define KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING 0x00000001
2401 #define KSFILTER_FLAG_CRITICAL_PROCESSING 0x00000002
2402 #define KSFILTER_FLAG_HYPERCRITICAL_PROCESSING 0x00000004
2403 #define KSFILTER_FLAG_RECEIVE_ZERO_LENGTH_SAMPLES 0x00000008
2404 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
2405 #define KSFILTER_FLAG_DENY_USERMODE_ACCESS 0x80000000
2408 #define KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING
2409 #define KSPIN_FLAG_CRITICAL_PROCESSING KSFILTER_FLAG_CRITICAL_PROCESSING
2410 #define KSPIN_FLAG_HYPERCRITICAL_PROCESSING KSFILTER_FLAG_HYPERCRITICAL_PROCESSING
2412 #define KSPIN_FLAG_ASYNCHRONOUS_PROCESSING 0x00000008
2413 #define KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING 0x00000010
2414 #define KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL 0x00000020
2415 #define KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING 0x00000040
2416 #define KSPIN_FLAG_ENFORCE_FIFO 0x00000080
2418 #define KSPIN_FLAG_GENERATE_MAPPINGS 0x00000100
2419 #define KSPIN_FLAG_DISTINCT_TRAILING_EDGE 0x00000200
2421 #define KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY 0x00010000
2422 #define KSPIN_FLAG_SPLITTER 0x00020000
2423 #define KSPIN_FLAG_USE_STANDARD_TRANSPORT 0x00040000
2424 #define KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT 0x00080000
2425 #define KSPIN_FLAG_FIXED_FORMAT 0x00100000
2426 #define KSPIN_FLAG_GENERATE_EOS_EVENTS 0x00200000
2428 #define KSPIN_FLAG_RENDERER (KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY|KSPIN_FLAG_GENERATE_EOS_EVENTS)
2430 #define KSPIN_FLAG_IMPLEMENT_CLOCK 0x00400000
2431 #define KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING 0x00800000
2432 #define KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE 0x01000000
2433 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
2434 #define KSPIN_FLAG_DENY_USERMODE_ACCESS 0x80000000
2438 const KSPIN_DESCRIPTOR_EX
*Descriptor
;
2442 KSPIN_COMMUNICATION Communication
;
2443 BOOLEAN ConnectionIsExternal
;
2444 KSPIN_INTERFACE ConnectionInterface
;
2445 KSPIN_MEDIUM ConnectionMedium
;
2446 KSPRIORITY ConnectionPriority
;
2447 PKSDATAFORMAT ConnectionFormat
;
2448 PKSMULTIPLE_ITEM AttributeList
;
2449 ULONG StreamHeaderSize
;
2450 KSPIN_DATAFLOW DataFlow
;
2451 KSSTATE DeviceState
;
2453 KSSTATE ClientState
;
2456 #define DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(Handler)\
2457 DEFINE_KSPROPERTY_ITEM(\
2458 KSPROPERTY_PIN_CINSTANCES,\
2461 sizeof(KSPIN_CINSTANCES),\
2462 NULL, NULL, 0, NULL, NULL, 0)
2464 #define DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(Handler)\
2465 DEFINE_KSPROPERTY_ITEM(\
2466 KSPROPERTY_PIN_CTYPES,\
2468 sizeof(KSPROPERTY),\
2470 NULL, NULL, 0, NULL, NULL, 0)
2472 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(Handler)\
2473 DEFINE_KSPROPERTY_ITEM(\
2474 KSPROPERTY_PIN_DATAFLOW,\
2477 sizeof(KSPIN_DATAFLOW),\
2478 NULL, NULL, 0, NULL, NULL, 0)
2480 #define DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(Handler)\
2481 DEFINE_KSPROPERTY_ITEM(\
2482 KSPROPERTY_PIN_DATARANGES,\
2486 NULL, NULL, 0, NULL, NULL, 0)
2488 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(Handler)\
2489 DEFINE_KSPROPERTY_ITEM(\
2490 KSPROPERTY_PIN_DATAINTERSECTION,\
2492 sizeof(KSP_PIN) + sizeof(KSMULTIPLE_ITEM),\
2494 NULL, NULL, 0, NULL, NULL, 0)
2496 #define DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(Handler)\
2497 DEFINE_KSPROPERTY_ITEM(\
2498 KSPROPERTY_PIN_INTERFACES,\
2502 NULL, NULL, 0, NULL, NULL, 0)
2504 #define DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(Handler)\
2505 DEFINE_KSPROPERTY_ITEM(\
2506 KSPROPERTY_PIN_MEDIUMS,\
2510 NULL, NULL, 0, NULL, NULL, 0)
2512 #define DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(Handler)\
2513 DEFINE_KSPROPERTY_ITEM(\
2514 KSPROPERTY_PIN_COMMUNICATION,\
2517 sizeof(KSPIN_COMMUNICATION),\
2518 NULL, NULL, 0, NULL, NULL, 0)
2520 #define DEFINE_KSPROPERTY_ITEM_PIN_GLOBALCINSTANCES(Handler)\
2521 DEFINE_KSPROPERTY_ITEM(\
2522 KSPROPERTY_PIN_GLOBALCINSTANCES,\
2525 sizeof(KSPIN_CINSTANCES),\
2526 NULL, NULL, 0, NULL, NULL, 0)
2528 #define DEFINE_KSPROPERTY_ITEM_PIN_NECESSARYINSTANCES(Handler)\
2529 DEFINE_KSPROPERTY_ITEM(\
2530 KSPROPERTY_PIN_NECESSARYINSTANCES,\
2534 NULL, NULL, 0, NULL, NULL, 0)
2536 #define DEFINE_KSPROPERTY_ITEM_PIN_PHYSICALCONNECTION(Handler)\
2537 DEFINE_KSPROPERTY_ITEM(\
2538 KSPROPERTY_PIN_PHYSICALCONNECTION,\
2542 NULL, NULL, 0, NULL, NULL, 0)
2544 #define DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(Handler)\
2545 DEFINE_KSPROPERTY_ITEM(\
2546 KSPROPERTY_PIN_CATEGORY,\
2550 NULL, NULL, 0, NULL, NULL, 0)
2552 #define DEFINE_KSPROPERTY_ITEM_PIN_NAME(Handler)\
2553 DEFINE_KSPROPERTY_ITEM(\
2554 KSPROPERTY_PIN_NAME,\
2558 NULL, NULL, 0, NULL, NULL, 0)
2560 #define DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(Handler)\
2561 DEFINE_KSPROPERTY_ITEM(\
2562 KSPROPERTY_PIN_CONSTRAINEDDATARANGES,\
2566 NULL, NULL, 0, NULL, NULL, 0)
2568 #define DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(Handler)\
2569 DEFINE_KSPROPERTY_ITEM(\
2570 KSPROPERTY_PIN_PROPOSEDATAFORMAT,\
2573 sizeof(KSDATAFORMAT),\
2574 (Handler), NULL, 0, NULL, NULL, 0)
2576 #define DEFINE_KSPROPERTY_PINSET(PinSet,\
2577 PropGeneral, PropInstances, PropIntersection)\
2578 DEFINE_KSPROPERTY_TABLE(PinSet) {\
2579 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
2580 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
2581 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
2582 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
2583 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
2584 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
2585 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
2586 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
2587 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
2588 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral)\
2591 #define DEFINE_KSPROPERTY_PINSETCONSTRAINED(PinSet,\
2592 PropGeneral, PropInstances, PropIntersection)\
2593 DEFINE_KSPROPERTY_TABLE(PinSet) {\
2594 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
2595 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
2596 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
2597 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
2598 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
2599 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
2600 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
2601 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
2602 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
2603 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral),\
2604 DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral)\
2611 #define DEFINE_KSPROPERTY_TABLE(tablename) \
2612 const KSPROPERTY_ITEM tablename[] =
2614 #endif /* _NTDDK_ */
2617 KSPIN_INTERFACE Interface
;
2618 KSPIN_MEDIUM Medium
;
2621 KSPRIORITY Priority
;
2622 } KSPIN_CONNECT
, *PKSPIN_CONNECT
;
2624 /* ===============================================================
2633 } KSTOPOLOGY_CONNECTION
, *PKSTOPOLOGY_CONNECTION
;
2636 ULONG CategoriesCount
;
2637 _Field_size_(CategoriesCount
) const GUID
*Categories
;
2638 ULONG TopologyNodesCount
;
2639 _Field_size_(TopologyNodesCount
) const GUID
*TopologyNodes
;
2640 ULONG TopologyConnectionsCount
;
2641 _Field_size_(TopologyConnectionsCount
) const KSTOPOLOGY_CONNECTION
*TopologyConnections
;
2642 _Field_size_(TopologyNodesCount
) const GUID
*TopologyNodesNames
;
2644 } KSTOPOLOGY
, *PKSTOPOLOGY
;
2647 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler)\
2648 DEFINE_KSPROPERTY_ITEM(\
2649 KSPROPERTY_TOPOLOGY_CATEGORIES,\
2651 sizeof(KSPROPERTY),\
2653 NULL, NULL, 0, NULL, NULL, 0)
2655 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler)\
2656 DEFINE_KSPROPERTY_ITEM(\
2657 KSPROPERTY_TOPOLOGY_NODES,\
2659 sizeof(KSPROPERTY),\
2661 NULL, NULL, 0, NULL, NULL, 0)
2663 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler)\
2664 DEFINE_KSPROPERTY_ITEM(\
2665 KSPROPERTY_TOPOLOGY_CONNECTIONS,\
2667 sizeof(KSPROPERTY),\
2669 NULL, NULL, 0, NULL, NULL, 0)
2671 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\
2672 DEFINE_KSPROPERTY_ITEM(\
2673 KSPROPERTY_TOPOLOGY_NAME,\
2677 NULL, NULL, 0, NULL, NULL, 0)
2679 #define DEFINE_KSPROPERTY_TOPOLOGYSET(TopologySet, Handler)\
2680 DEFINE_KSPROPERTY_TABLE(TopologySet) {\
2681 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler),\
2682 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler),\
2683 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler),\
2684 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\
2687 /* ===============================================================
2692 typedef void* UNKNOWN
;
2695 (NTAPI
*PFNKSINITIALIZEALLOCATOR
)(
2696 _In_ PVOID InitialContext
,
2697 _In_ PKSALLOCATOR_FRAMING AllocatorFraming
,
2698 _Outptr_ PVOID
*Context
);
2700 #if defined(_NTDDK_)
2702 _IRQL_requires_max_(PASSIVE_LEVEL
)
2704 (NTAPI
*PFNKSALLOCATOR
)(
2706 _In_ ULONG BufferSize
,
2707 _In_ BOOLEAN InputOperation
);
2709 _Must_inspect_result_
2710 _IRQL_requires_max_(PASSIVE_LEVEL
)
2712 (NTAPI
*PFNKINTERSECTHANDLEREX
)(
2716 _In_ PKSDATARANGE DataRange
,
2717 _In_ PKSDATARANGE MatchingDataRange
,
2718 _In_ ULONG DataBufferSize
,
2719 _Out_writes_bytes_to_opt_(DataBufferSize
, *DataSize
) PVOID Data
,
2720 _Out_ PULONG DataSize
);
2723 (NTAPI
*PFNALLOCATOR_ALLOCATEFRAME
)(
2724 _In_ PFILE_OBJECT FileObject
,
2725 _Outptr_ PVOID
*Frame
);
2728 (NTAPI
*PFNALLOCATOR_FREEFRAME
)(
2729 _In_ PFILE_OBJECT FileObject
,
2733 PFNALLOCATOR_ALLOCATEFRAME AllocateFrame
;
2734 PFNALLOCATOR_FREEFRAME FreeFrame
;
2735 } KSSTREAMALLOCATOR_FUNCTIONTABLE
, *PKSSTREAMALLOCATOR_FUNCTIONTABLE
;
2737 #endif /* _NTDDK_ */
2740 KSALLOCATOR_FRAMING Framing
;
2741 ULONG AllocatedFrames
;
2743 } KSSTREAMALLOCATOR_STATUS
, *PKSSTREAMALLOCATOR_STATUS
;
2746 KSALLOCATOR_FRAMING_EX Framing
;
2747 ULONG AllocatedFrames
;
2749 } KSSTREAMALLOCATOR_STATUS_EX
, *PKSSTREAMALLOCATOR_STATUS_EX
;
2753 ULONG TypeSpecificFlags
;
2754 KSTIME PresentationTime
;
2763 } KSSTREAM_HEADER
, *PKSSTREAM_HEADER
;
2765 #define KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT 0x00000001
2766 #define KSSTREAM_HEADER_OPTIONSF_PREROLL 0x00000002
2767 #define KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY 0x00000004
2768 #define KSSTREAM_HEADER_OPTIONSF_TYPECHANGED 0x00000008
2769 #define KSSTREAM_HEADER_OPTIONSF_TIMEVALID 0x00000010
2770 #define KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY 0x00000040
2771 #define KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE 0x00000080
2772 #define KSSTREAM_HEADER_OPTIONSF_DURATIONVALID 0x00000100
2773 #define KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM 0x00000200
2774 #define KSSTREAM_HEADER_OPTIONSF_BUFFEREDTRANSFER 0x00000400
2775 #define KSSTREAM_HEADER_OPTIONSF_VRAM_DATA_TRANSFER 0x00000800
2776 #define KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA 0x80000000
2778 /* ===============================================================
2782 #if defined(_NTDDK_)
2784 typedef struct _KSGATE KSGATE
, *PKSGATE
;
2793 _IRQL_requires_max_(HIGH_LEVEL
)
2798 _In_opt_ PKSGATE Gate
)
2800 while (Gate
&& (InterlockedIncrement(&Gate
->Count
) == 1))
2802 Gate
= Gate
->NextGate
;
2806 _IRQL_requires_max_(HIGH_LEVEL
)
2811 _In_opt_ PKSGATE Gate
)
2813 while (Gate
&& (InterlockedDecrement(&Gate
->Count
) == 0))
2815 Gate
= Gate
->NextGate
;
2819 _IRQL_requires_max_(HIGH_LEVEL
)
2823 KsGateGetStateUnsafe(
2827 return((BOOLEAN
)(Gate
->Count
> 0));
2830 _IRQL_requires_max_(HIGH_LEVEL
)
2834 KsGateCaptureThreshold(
2841 captured
= (BOOLEAN
)(InterlockedCompareExchange(&Gate
->Count
,0,1) == 1);
2845 KsGateTurnInputOff(Gate
->NextGate
);
2851 _IRQL_requires_max_(HIGH_LEVEL
)
2857 _In_ LONG InitialCount
,
2858 _In_opt_ PKSGATE NextGate
,
2859 _In_ BOOLEAN StateToPropagate
)
2862 Gate
->Count
= InitialCount
;
2863 Gate
->NextGate
= NextGate
;
2867 if (InitialCount
> 0)
2869 if (StateToPropagate
)
2871 KsGateTurnInputOn(NextGate
);
2876 if (!StateToPropagate
)
2878 KsGateTurnInputOff(NextGate
);
2884 _IRQL_requires_max_(HIGH_LEVEL
)
2888 KsGateInitializeAnd(
2889 _In_ PKSGATE AndGate
,
2890 _In_opt_ PKSGATE NextOrGate
)
2892 KsGateInitialize(AndGate
,1,NextOrGate
,TRUE
);
2895 _IRQL_requires_max_(HIGH_LEVEL
)
2900 _In_ PKSGATE OrGate
,
2901 _In_opt_ PKSGATE NextAndGate
)
2903 KsGateInitialize(OrGate
,0,NextAndGate
,FALSE
);
2906 _IRQL_requires_max_(HIGH_LEVEL
)
2910 KsGateAddOnInputToAnd(
2911 _In_ PKSGATE AndGate
)
2913 UNREFERENCED_PARAMETER (AndGate
);
2916 _IRQL_requires_max_(HIGH_LEVEL
)
2920 KsGateAddOffInputToAnd(
2921 _In_ PKSGATE AndGate
)
2923 KsGateTurnInputOff(AndGate
);
2926 _IRQL_requires_max_(HIGH_LEVEL
)
2930 KsGateRemoveOnInputFromAnd(
2931 _In_ PKSGATE AndGate
)
2933 UNREFERENCED_PARAMETER (AndGate
);
2936 _IRQL_requires_max_(HIGH_LEVEL
)
2940 KsGateRemoveOffInputFromAnd(
2941 _In_ PKSGATE AndGate
)
2943 KsGateTurnInputOn(AndGate
);
2946 _IRQL_requires_max_(HIGH_LEVEL
)
2950 KsGateAddOnInputToOr(
2951 _In_ PKSGATE OrGate
)
2953 KsGateTurnInputOn(OrGate
);
2956 _IRQL_requires_max_(HIGH_LEVEL
)
2960 KsGateAddOffInputToOr(
2961 _In_ PKSGATE OrGate
)
2963 UNREFERENCED_PARAMETER (OrGate
);
2966 _IRQL_requires_max_(HIGH_LEVEL
)
2970 KsGateRemoveOnInputFromOr(
2971 _In_ PKSGATE OrGate
)
2973 KsGateTurnInputOff(OrGate
);
2976 _IRQL_requires_max_(HIGH_LEVEL
)
2980 KsGateRemoveOffInputFromOr(
2981 _In_ PKSGATE OrGate
)
2983 UNREFERENCED_PARAMETER (OrGate
);
2986 _IRQL_requires_max_(HIGH_LEVEL
)
2991 _In_ PKSGATE AndGate
)
2994 if (KsGateGetStateUnsafe(AndGate
))
2996 KsGateRemoveOnInputFromOr(AndGate
->NextGate
);
3000 KsGateRemoveOffInputFromOr(AndGate
->NextGate
);
3004 _IRQL_requires_max_(HIGH_LEVEL
)
3009 _In_ PKSGATE OrGate
)
3012 if (KsGateGetStateUnsafe(OrGate
))
3014 KsGateRemoveOnInputFromAnd(OrGate
->NextGate
);
3018 KsGateRemoveOffInputFromAnd(OrGate
->NextGate
);
3022 #endif /* !_NTOS_ */
3025 PHYSICAL_ADDRESS PhysicalAddress
;
3030 #endif /* _NTDDK_ */
3033 KSSTREAM_POINTER_STATE_UNLOCKED
= 0,
3034 KSSTREAM_POINTER_STATE_LOCKED
3035 } KSSTREAM_POINTER_STATE
;
3037 typedef struct _KSPROCESSPIN_INDEXENTRY KSPROCESSPIN_INDEXENTRY
, *PKSPROCESSPIN_INDEXENTRY
;
3039 struct _KSSTREAM_POINTER_OFFSET
{
3040 #if defined(_NTDDK_)
3043 PKSMAPPING Mappings
;
3048 #if !defined(_WIN64)
3055 #if defined(_NTDDK_)
3057 struct _KSSTREAM_POINTER
{
3060 PKSSTREAM_HEADER StreamHeader
;
3061 PKSSTREAM_POINTER_OFFSET Offset
;
3062 KSSTREAM_POINTER_OFFSET OffsetIn
;
3063 KSSTREAM_POINTER_OFFSET OffsetOut
;
3066 struct _KSPROCESSPIN
{
3068 PKSSTREAM_POINTER StreamPointer
;
3069 PKSPROCESSPIN InPlaceCounterpart
;
3070 PKSPROCESSPIN DelegateBranch
;
3071 PKSPROCESSPIN CopySource
;
3072 _Field_size_bytes_(BytesAvailable
) PVOID Data
;
3073 ULONG BytesAvailable
;
3079 struct _KSPROCESSPIN_INDEXENTRY
{
3080 _Field_size_(Count
) PKSPROCESSPIN
*Pins
;
3084 #endif /* _NTDDK_ */
3086 /* ===============================================================
3090 #if defined(_NTDDK_)
3092 typedef struct _KSFILTER_DISPATCH KSFILTER_DISPATCH
, *PKSFILTER_DISPATCH
;
3093 typedef struct _KSDEVICE KSDEVICE
, *PKSDEVICE
;
3094 typedef struct _KSFILTER KSFILTER
, *PKSFILTER
;
3095 typedef struct _KSNODE_DESCRIPTOR KSNODE_DESCRIPTOR
, *PKSNODE_DESCRIPTOR
;
3096 typedef struct _KSFILTER_DESCRIPTOR KSFILTER_DESCRIPTOR
, *PKSFILTER_DESCRIPTOR
;
3097 typedef struct _KSDEVICE_DESCRIPTOR KSDEVICE_DESCRIPTOR
, *PKSDEVICE_DESCRIPTOR
;
3099 _IRQL_requires_max_(PASSIVE_LEVEL
)
3101 (NTAPI
*PFNKSDEVICECREATE
)(
3102 _In_ PKSDEVICE Device
);
3104 _IRQL_requires_max_(PASSIVE_LEVEL
)
3106 (NTAPI
*PFNKSDEVICEPNPSTART
)(
3107 _In_ PKSDEVICE Device
,
3109 _In_opt_ PCM_RESOURCE_LIST TranslatedResourceList
,
3110 _In_opt_ PCM_RESOURCE_LIST UntranslatedResourceList
);
3112 _IRQL_requires_max_(PASSIVE_LEVEL
)
3114 (NTAPI
*PFNKSDEVICE
)(
3115 _In_ PKSDEVICE Device
);
3117 _IRQL_requires_max_(PASSIVE_LEVEL
)
3119 (NTAPI
*PFNKSDEVICEIRP
)(
3120 _In_ PKSDEVICE Device
,
3123 _IRQL_requires_max_(PASSIVE_LEVEL
)
3125 (NTAPI
*PFNKSDEVICEIRPVOID
)(
3126 _In_ PKSDEVICE Device
,
3129 _IRQL_requires_max_(PASSIVE_LEVEL
)
3131 (NTAPI
*PFNKSDEVICEQUERYCAPABILITIES
)(
3132 _In_ PKSDEVICE Device
,
3134 _Inout_ PDEVICE_CAPABILITIES Capabilities
);
3136 _IRQL_requires_max_(PASSIVE_LEVEL
)
3138 (NTAPI
*PFNKSDEVICEQUERYPOWER
)(
3139 _In_ PKSDEVICE Device
,
3141 _In_ DEVICE_POWER_STATE DeviceTo
,
3142 _In_ DEVICE_POWER_STATE DeviceFrom
,
3143 _In_ SYSTEM_POWER_STATE SystemTo
,
3144 _In_ SYSTEM_POWER_STATE SystemFrom
,
3145 _In_ POWER_ACTION Action
);
3147 _IRQL_requires_max_(PASSIVE_LEVEL
)
3149 (NTAPI
*PFNKSDEVICESETPOWER
)(
3150 _In_ PKSDEVICE Device
,
3152 _In_ DEVICE_POWER_STATE To
,
3153 _In_ DEVICE_POWER_STATE From
);
3155 typedef struct _KSDEVICE_DISPATCH
{
3156 PFNKSDEVICECREATE Add
;
3157 PFNKSDEVICEPNPSTART Start
;
3158 PFNKSDEVICE PostStart
;
3159 PFNKSDEVICEIRP QueryStop
;
3160 PFNKSDEVICEIRPVOID CancelStop
;
3161 PFNKSDEVICEIRPVOID Stop
;
3162 PFNKSDEVICEIRP QueryRemove
;
3163 PFNKSDEVICEIRPVOID CancelRemove
;
3164 PFNKSDEVICEIRPVOID Remove
;
3165 PFNKSDEVICEQUERYCAPABILITIES QueryCapabilities
;
3166 PFNKSDEVICEIRPVOID SurpriseRemoval
;
3167 PFNKSDEVICEQUERYPOWER QueryPower
;
3168 PFNKSDEVICESETPOWER SetPower
;
3169 PFNKSDEVICEIRP QueryInterface
;
3170 } KSDEVICE_DISPATCH
, *PKSDEVICE_DISPATCH
;
3172 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
3173 #define KSDEVICE_DESCRIPTOR_VERSION_2 (0x110)
3174 #define MIN_DEV_VER_FOR_FLAGS (0x110)
3178 const KSDEVICE_DESCRIPTOR
* Descriptor
;
3181 PDEVICE_OBJECT FunctionalDeviceObject
;
3182 PDEVICE_OBJECT PhysicalDeviceObject
;
3183 PDEVICE_OBJECT NextDeviceObject
;
3185 SYSTEM_POWER_STATE SystemPowerState
;
3186 DEVICE_POWER_STATE DevicePowerState
;
3189 #endif /* _NTDDK_ */
3191 /* ===============================================================
3195 #if defined(_NTDDK_)
3198 const KSFILTER_DESCRIPTOR
* Descriptor
;
3203 _IRQL_requires_max_(PASSIVE_LEVEL
)
3205 (NTAPI
*PFNKSFILTERPOWER
)(
3206 _In_ PKSFILTER Filter
,
3207 _In_ DEVICE_POWER_STATE State
);
3209 _IRQL_requires_max_(PASSIVE_LEVEL
)
3211 (NTAPI
*PFNKSFILTERIRP
)(
3212 _In_ PKSFILTER Filter
,
3216 (NTAPI
*PFNKSFILTERPROCESS
)(
3217 _In_ PKSFILTER Filter
,
3218 _In_ PKSPROCESSPIN_INDEXENTRY ProcessPinsIndex
);
3220 _IRQL_requires_max_(PASSIVE_LEVEL
)
3222 (NTAPI
*PFNKSFILTERVOID
)(
3223 _In_ PKSFILTER Filter
);
3225 struct _KSFILTER_DISPATCH
{
3226 PFNKSFILTERIRP Create
;
3227 PFNKSFILTERIRP Close
;
3228 PFNKSFILTERPROCESS Process
;
3229 PFNKSFILTERVOID Reset
;
3232 struct _KSNODE_DESCRIPTOR
{
3233 const KSAUTOMATION_TABLE
*AutomationTable
;
3236 #if !defined(_WIN64)
3241 struct _KSFILTER_DESCRIPTOR
{
3242 const KSFILTER_DISPATCH
*Dispatch
;
3243 const KSAUTOMATION_TABLE
*AutomationTable
;
3246 const GUID
*ReferenceGuid
;
3247 ULONG PinDescriptorsCount
;
3248 ULONG PinDescriptorSize
;
3249 _Field_size_bytes_(PinDescriptorsCount
* PinDescriptorSize
) const KSPIN_DESCRIPTOR_EX
*PinDescriptors
;
3250 ULONG CategoriesCount
;
3251 _Field_size_(CategoriesCount
) const GUID
*Categories
;
3252 ULONG NodeDescriptorsCount
;
3253 ULONG NodeDescriptorSize
;
3254 _Field_size_bytes_(NodeDescriptorsCount
* NodeDescriptorSize
) const KSNODE_DESCRIPTOR
*NodeDescriptors
;
3255 ULONG ConnectionsCount
;
3256 _Field_size_(ConnectionsCount
) const KSTOPOLOGY_CONNECTION
*Connections
;
3257 const KSCOMPONENTID
*ComponentId
;
3260 #define KSFILTER_DESCRIPTOR_VERSION ((ULONG)-1)
3262 struct _KSDEVICE_DESCRIPTOR
{
3263 const KSDEVICE_DISPATCH
*Dispatch
;
3264 ULONG FilterDescriptorsCount
;
3265 _Field_size_(FilterDescriptorsCount
) const KSFILTER_DESCRIPTOR
* const *FilterDescriptors
;
3270 struct _KSFILTERFACTORY
{
3271 const KSFILTER_DESCRIPTOR
* FilterDescriptor
;
3276 #define DEFINE_KSFILTER_DESCRIPTOR(descriptor)\
3277 const KSFILTER_DESCRIPTOR descriptor =
3279 #define DEFINE_KSFILTER_PIN_DESCRIPTORS(table)\
3280 SIZEOF_ARRAY(table),\
3284 #define DEFINE_KSFILTER_CATEGORIES(table)\
3285 SIZEOF_ARRAY(table),\
3288 #define DEFINE_KSFILTER_CATEGORY(category)\
3292 #define DEFINE_KSFILTER_CATEGORIES_NULL\
3296 #define DEFINE_KSFILTER_NODE_DESCRIPTORS(table)\
3297 SIZEOF_ARRAY(table),\
3301 #define DEFINE_KSFILTER_NODE_DESCRIPTORS_NULL\
3303 sizeof(KSNODE_DESCRIPTOR),\
3306 #define DEFINE_KSFILTER_CONNECTIONS(table)\
3307 SIZEOF_ARRAY(table),\
3310 #define DEFINE_KSFILTER_DEFAULT_CONNECTIONS\
3314 #endif /* _NTDDK_ */
3316 /* ===============================================================
3317 Minidriver Callbacks
3320 #if defined(_NTDDK_)
3323 (NTAPI
*KStrMethodHandler
)(
3325 IN PKSIDENTIFIER Request
,
3329 (NTAPI
*KStrSupportHandler
)(
3331 IN PKSIDENTIFIER Request
,
3336 /* ===============================================================
3340 #if defined(_NTDDK_)
3342 _IRQL_requires_max_(PASSIVE_LEVEL
)
3347 _In_ HANDLE ConnectionHandle
,
3348 _In_ PKSALLOCATOR_FRAMING AllocatorFraming
,
3349 _Out_ PHANDLE AllocatorHandle
);
3351 _IRQL_requires_max_(PASSIVE_LEVEL
)
3355 KsCreateDefaultAllocator(
3358 _IRQL_requires_max_(PASSIVE_LEVEL
)
3362 KsValidateAllocatorCreateRequest(
3364 _Out_ PKSALLOCATOR_FRAMING
*AllocatorFraming
);
3366 _IRQL_requires_max_(PASSIVE_LEVEL
)
3370 KsCreateDefaultAllocatorEx(
3372 _In_opt_ PVOID InitializeContext
,
3373 _In_opt_ PFNKSDEFAULTALLOCATE DefaultAllocate
,
3374 _In_opt_ PFNKSDEFAULTFREE DefaultFree
,
3375 _In_opt_ PFNKSINITIALIZEALLOCATOR InitializeAllocator
,
3376 _In_opt_ PFNKSDELETEALLOCATOR DeleteAllocator
);
3378 _IRQL_requires_max_(PASSIVE_LEVEL
)
3382 KsValidateAllocatorFramingEx(
3383 _In_ PKSALLOCATOR_FRAMING_EX Framing
,
3384 _In_ ULONG BufferSize
,
3385 _In_
const KSALLOCATOR_FRAMING_EX
*PinFraming
);
3387 #endif /* _NTDDK_ */
3389 /* ===============================================================
3393 #if defined(_NTDDK_)
3395 _IRQL_requires_max_(DISPATCH_LEVEL
)
3397 (NTAPI
*PFNKSSETTIMER
)(
3400 _In_ LARGE_INTEGER DueTime
,
3403 _IRQL_requires_max_(DISPATCH_LEVEL
)
3405 (NTAPI
*PFNKSCANCELTIMER
)(
3407 _In_ PKTIMER Timer
);
3410 (FASTCALL
*PFNKSCORRELATEDTIME
)(
3412 _Out_ PLONGLONG SystemTime
);
3414 _IRQL_requires_max_(PASSIVE_LEVEL
)
3419 _In_ HANDLE ConnectionHandle
,
3420 _In_ PKSCLOCK_CREATE ClockCreate
,
3421 _Out_ PHANDLE ClockHandle
);
3423 _IRQL_requires_max_(PASSIVE_LEVEL
)
3427 KsCreateDefaultClock(
3429 _In_ PKSDEFAULTCLOCK DefaultClock
);
3431 _IRQL_requires_max_(PASSIVE_LEVEL
)
3435 KsAllocateDefaultClock(
3436 _Out_ PKSDEFAULTCLOCK
*DefaultClock
);
3438 _IRQL_requires_max_(PASSIVE_LEVEL
)
3442 KsAllocateDefaultClockEx(
3443 _Out_ PKSDEFAULTCLOCK
*DefaultClock
,
3444 _In_opt_ PVOID Context
,
3445 _In_opt_ PFNKSSETTIMER SetTimer
,
3446 _In_opt_ PFNKSCANCELTIMER CancelTimer
,
3447 _In_opt_ PFNKSCORRELATEDTIME CorrelatedTime
,
3448 _In_opt_
const KSRESOLUTION
*Resolution
,
3451 _IRQL_requires_max_(PASSIVE_LEVEL
)
3456 _In_ PKSDEFAULTCLOCK DefaultClock
);
3458 _IRQL_requires_max_(PASSIVE_LEVEL
)
3462 KsValidateClockCreateRequest(
3464 _Outptr_ PKSCLOCK_CREATE
*ClockCreate
);
3466 _IRQL_requires_max_(DISPATCH_LEVEL
)
3470 KsGetDefaultClockState(
3471 _In_ PKSDEFAULTCLOCK DefaultClock
);
3473 _IRQL_requires_max_(DISPATCH_LEVEL
)
3477 KsSetDefaultClockState(
3478 _In_ PKSDEFAULTCLOCK DefaultClock
,
3479 _In_ KSSTATE State
);
3481 _IRQL_requires_max_(DISPATCH_LEVEL
)
3485 KsGetDefaultClockTime(
3486 _In_ PKSDEFAULTCLOCK DefaultClock
);
3488 _IRQL_requires_max_(DISPATCH_LEVEL
)
3492 KsSetDefaultClockTime(
3493 _In_ PKSDEFAULTCLOCK DefaultClock
,
3494 _In_ LONGLONG Time
);
3496 #endif /* _NTDDK_ */
3498 /* ===============================================================
3502 /* Method sets - TODO: Make into macros! */
3503 #if defined(_NTDDK_)
3508 KSMETHOD_SET_IRP_STORAGE(
3512 KSMETHOD_ITEM_IRP_STORAGE(
3516 KSMETHOD_TYPE_IRP_STORAGE(
3521 _IRQL_requires_max_(PASSIVE_LEVEL
)
3527 _In_ ULONG MethodSetsCount
,
3528 _In_reads_(MethodSetsCount
) const KSMETHOD_SET
* MethodSet
);
3530 _IRQL_requires_max_(PASSIVE_LEVEL
)
3534 KsMethodHandlerWithAllocator(
3536 _In_ ULONG MethodSetsCount
,
3537 _In_reads_(MethodSetsCount
) const KSMETHOD_SET
* MethodSet
,
3538 _In_opt_ PFNKSALLOCATOR Allocator
,
3539 _In_opt_ ULONG MethodItemSize
);
3541 _IRQL_requires_max_(PASSIVE_LEVEL
)
3545 KsFastMethodHandler(
3546 _In_ PFILE_OBJECT FileObject
,
3547 _In_reads_bytes_(MethodLength
) PKSMETHOD UNALIGNED Method
,
3548 _In_ ULONG MethodLength
,
3549 _Inout_updates_bytes_(DataLength
) PVOID UNALIGNED Data
,
3550 _In_ ULONG DataLength
,
3551 _Out_ PIO_STATUS_BLOCK IoStatus
,
3552 _In_ ULONG MethodSetsCount
,
3553 _In_reads_(MethodSetsCount
) const KSMETHOD_SET
*MethodSet
);
3555 #endif /* _NTDDK_ */
3557 /* ===============================================================
3561 #if defined(_NTDDK_)
3563 _IRQL_requires_max_(PASSIVE_LEVEL
)
3569 _In_ ULONG PropertySetsCount
,
3570 _In_reads_(PropertySetsCount
) const KSPROPERTY_SET
*PropertySet
);
3572 _IRQL_requires_max_(PASSIVE_LEVEL
)
3576 KsPropertyHandlerWithAllocator(
3578 _In_ ULONG PropertySetsCount
,
3579 _In_reads_(PropertySetsCount
) const KSPROPERTY_SET
* PropertySet
,
3580 _In_opt_ PFNKSALLOCATOR Allocator
,
3581 _In_opt_ ULONG PropertyItemSize
);
3583 _IRQL_requires_max_(PASSIVE_LEVEL
)
3587 KsUnserializeObjectPropertiesFromRegistry(
3588 _In_ PFILE_OBJECT FileObject
,
3589 _In_opt_ HANDLE ParentKey
,
3590 _In_opt_ PUNICODE_STRING RegistryPath
);
3592 _IRQL_requires_max_(PASSIVE_LEVEL
)
3596 KsFastPropertyHandler(
3597 _In_ PFILE_OBJECT FileObject
,
3598 _In_reads_bytes_(PropertyLength
) PKSPROPERTY UNALIGNED Property
,
3599 _In_ ULONG PropertyLength
,
3600 _In_reads_bytes_(DataLength
) PVOID UNALIGNED Data
,
3601 _In_ ULONG DataLength
,
3602 _Out_ PIO_STATUS_BLOCK IoStatus
,
3603 _In_ ULONG PropertySetsCount
,
3604 _In_reads_(PropertySetsCount
) const KSPROPERTY_SET
*PropertySet
);
3606 #endif /* _NTDDK_ */
3608 /* ===============================================================
3612 #if defined(_NTDDK_)
3614 #define KSPROBE_STREAMREAD 0x00000000
3615 #define KSPROBE_STREAMWRITE 0x00000001
3616 #define KSPROBE_ALLOCATEMDL 0x00000010
3617 #define KSPROBE_PROBEANDLOCK 0x00000020
3618 #define KSPROBE_SYSTEMADDRESS 0x00000040
3619 #define KSPROBE_MODIFY 0x00000200
3620 #define KSPROBE_STREAMWRITEMODIFY (KSPROBE_MODIFY | KSPROBE_STREAMWRITE)
3621 #define KSPROBE_ALLOWFORMATCHANGE 0x00000080
3623 #define KSSTREAM_READ KSPROBE_STREAMREAD
3624 #define KSSTREAM_WRITE KSPROBE_STREAMWRITE
3625 #define KSSTREAM_PAGED_DATA 0x00000000
3626 #define KSSTREAM_NONPAGED_DATA 0x00000100
3627 #define KSSTREAM_SYNCHRONOUS 0x00001000
3628 #define KSSTREAM_FAILUREEXCEPTION 0x00002000
3630 _IRQL_requires_max_(DISPATCH_LEVEL
)
3632 (NTAPI
*PFNKSGENERATEEVENTCALLBACK
)(
3634 _In_ PKSEVENT_ENTRY EventEntry
);
3640 _In_ PKSEVENT_ENTRY EntryEvent
);
3642 _IRQL_requires_max_(DISPATCH_LEVEL
)
3648 _In_opt_
const GUID
*EventSet
,
3650 _In_ ULONG DataSize
,
3651 _In_reads_bytes_opt_(DataSize
) PVOID Data
,
3652 _In_opt_ PFNKSGENERATEEVENTCALLBACK CallBack
,
3653 _In_opt_ PVOID CallBackContext
);
3655 _IRQL_requires_max_(PASSIVE_LEVEL
)
3659 KsEnableEventWithAllocator(
3661 _In_ ULONG EventSetsCount
,
3662 _In_reads_(EventSetsCount
) const KSEVENT_SET
* EventSet
,
3663 _Inout_opt_ PLIST_ENTRY EventsList
,
3664 _In_opt_ KSEVENTS_LOCKTYPE EventsFlags
,
3665 _In_opt_ PVOID EventsLock
,
3666 _In_opt_ PFNKSALLOCATOR Allocator
,
3667 _In_opt_ ULONG EventItemSize
);
3672 KsGenerateDataEvent(
3673 _In_ PKSEVENT_ENTRY EventEntry
,
3674 _In_ ULONG DataSize
,
3675 _In_reads_bytes_(DataSize
) PVOID Data
);
3677 _IRQL_requires_max_(PASSIVE_LEVEL
)
3683 _In_ ULONG EventSetsCount
,
3684 _In_reads_(EventSetsCount
) KSEVENT_SET
*EventSet
,
3685 _Inout_opt_ PLIST_ENTRY EventsList
,
3686 _In_opt_ KSEVENTS_LOCKTYPE EventsFlags
,
3687 _In_opt_ PVOID EventsLock
);
3689 _IRQL_requires_max_(PASSIVE_LEVEL
)
3694 _In_ PKSEVENT_ENTRY EventEntry
);
3696 _IRQL_requires_max_(PASSIVE_LEVEL
)
3702 _Inout_ PLIST_ENTRY EventsList
,
3703 _In_ KSEVENTS_LOCKTYPE EventsFlags
,
3704 _In_ PVOID EventsLock
);
3706 _IRQL_requires_max_(PASSIVE_LEVEL
)
3711 _In_ PFILE_OBJECT FileObject
,
3712 _Inout_ PLIST_ENTRY EventsList
,
3713 _In_ KSEVENTS_LOCKTYPE EventsFlags
,
3714 _In_ PVOID EventsLock
);
3716 /* ===============================================================
3720 _IRQL_requires_max_(PASSIVE_LEVEL
)
3724 KsValidateTopologyNodeCreateRequest(
3726 _In_ PKSTOPOLOGY Topology
,
3727 _Out_ PKSNODE_CREATE
*NodeCreate
);
3729 _IRQL_requires_max_(PASSIVE_LEVEL
)
3733 KsCreateTopologyNode(
3734 _In_ HANDLE ParentHandle
,
3735 _In_ PKSNODE_CREATE NodeCreate
,
3736 _In_ ACCESS_MASK DesiredAccess
,
3737 _Out_ PHANDLE NodeHandle
);
3739 _IRQL_requires_max_(PASSIVE_LEVEL
)
3743 KsTopologyPropertyHandler(
3745 _In_ PKSPROPERTY Property
,
3747 _In_
const KSTOPOLOGY
*Topology
);
3749 /* ===============================================================
3750 Connectivity Functions
3753 _IRQL_requires_max_(PASSIVE_LEVEL
)
3758 _In_ HANDLE FilterHandle
,
3759 _In_ PKSPIN_CONNECT Connect
,
3760 _In_ ACCESS_MASK DesiredAccess
,
3761 _Out_ PHANDLE ConnectionHandle
);
3763 _IRQL_requires_max_(PASSIVE_LEVEL
)
3767 KsValidateConnectRequest(
3769 _In_ ULONG DescriptorsCount
,
3770 _In_reads_(DescriptorsCount
) KSPIN_DESCRIPTOR
*Descriptor
,
3771 _Out_ PKSPIN_CONNECT
*Connect
);
3773 _IRQL_requires_max_(PASSIVE_LEVEL
)
3777 KsPinPropertyHandler(
3779 _In_ PKSPROPERTY Property
,
3781 _In_ ULONG DescriptorsCount
,
3782 _In_reads_(DescriptorsCount
) const KSPIN_DESCRIPTOR
*Descriptor
);
3784 _Must_inspect_result_
3785 _IRQL_requires_max_(PASSIVE_LEVEL
)
3789 KsPinDataIntersection(
3792 _Out_opt_ PVOID Data
,
3793 _In_ ULONG DescriptorsCount
,
3794 _In_reads_(DescriptorsCount
) const KSPIN_DESCRIPTOR
*Descriptor
,
3795 _In_ PFNKSINTERSECTHANDLER IntersectHandler
);
3797 _Must_inspect_result_
3798 _IRQL_requires_max_(PASSIVE_LEVEL
)
3802 KsPinDataIntersectionEx(
3806 _In_ ULONG DescriptorsCount
,
3807 _In_reads_bytes_(DescriptorsCount
* DescriptorSize
) const KSPIN_DESCRIPTOR
*Descriptor
,
3808 _In_ ULONG DescriptorSize
,
3809 _In_opt_ PFNKSINTERSECTHANDLEREX IntersectHandler
,
3810 _In_opt_ PVOID HandlerContext
);
3812 _IRQL_requires_max_(PASSIVE_LEVEL
)
3816 KsPinGetParentFilter(
3819 _IRQL_requires_max_(PASSIVE_LEVEL
)
3823 KsPinGetNextSiblingPin(
3826 /* Does this belong here? */
3828 _IRQL_requires_max_(PASSIVE_LEVEL
)
3832 KsHandleSizedListQuery(
3834 _In_ ULONG DataItemsCount
,
3835 _In_ ULONG DataItemSize
,
3836 _In_reads_bytes_(DataItemsCount
* DataItemSize
) const VOID
*DataItems
);
3838 /* ===============================================================
3839 IRP Helper Functions
3842 _IRQL_requires_max_(DISPATCH_LEVEL
)
3844 (NTAPI
*PFNKSIRPLISTCALLBACK
)(
3846 _In_ PVOID Context
);
3848 _IRQL_requires_max_(PASSIVE_LEVEL
)
3852 KsAcquireResetValue(
3854 _Out_ KSRESET
*ResetValue
);
3856 _IRQL_requires_max_(DISPATCH_LEVEL
)
3860 KsAddIrpToCancelableQueue(
3861 _Inout_ PLIST_ENTRY QueueHead
,
3862 _In_ PKSPIN_LOCK SpinLock
,
3864 _In_ KSLIST_ENTRY_LOCATION ListLocation
,
3865 _In_opt_ PDRIVER_CANCEL DriverCancel
);
3867 _IRQL_requires_max_(PASSIVE_LEVEL
)
3871 KsAddObjectCreateItemToDeviceHeader(
3872 _In_ KSDEVICE_HEADER Header
,
3873 _In_ PDRIVER_DISPATCH Create
,
3875 _In_ PWSTR ObjectClass
,
3876 _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor
);
3878 _IRQL_requires_max_(PASSIVE_LEVEL
)
3882 KsAddObjectCreateItemToObjectHeader(
3883 _In_ KSOBJECT_HEADER Header
,
3884 _In_ PDRIVER_DISPATCH Create
,
3886 _In_ PWSTR ObjectClass
,
3887 _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor
);
3889 _IRQL_requires_max_(APC_LEVEL
)
3893 KsAllocateDeviceHeader(
3894 _Out_ KSDEVICE_HEADER
*Header
,
3895 _In_ ULONG ItemsCount
,
3896 _In_reads_opt_(ItemsCount
) PKSOBJECT_CREATE_ITEM ItemsList
);
3898 _IRQL_requires_max_(PASSIVE_LEVEL
)
3902 KsAllocateExtraData(
3904 _In_ ULONG ExtraSize
,
3905 _Out_ PVOID
*ExtraBuffer
);
3907 _IRQL_requires_max_(PASSIVE_LEVEL
)
3911 KsAllocateObjectCreateItem(
3912 _In_ KSDEVICE_HEADER Header
,
3913 _In_ PKSOBJECT_CREATE_ITEM CreateItem
,
3914 _In_ BOOLEAN AllocateEntry
,
3915 _In_opt_ PFNKSITEMFREECALLBACK ItemFreeCallback
);
3917 _IRQL_requires_max_(APC_LEVEL
)
3921 KsAllocateObjectHeader(
3922 _Out_ KSOBJECT_HEADER
*Header
,
3923 _In_ ULONG ItemsCount
,
3924 _In_reads_opt_(ItemsCount
) PKSOBJECT_CREATE_ITEM ItemsList
,
3926 _In_ KSDISPATCH_TABLE
*Table
);
3928 _IRQL_requires_max_(DISPATCH_LEVEL
)
3933 _Inout_ PLIST_ENTRY QueueHead
,
3934 _In_ PKSPIN_LOCK SpinLock
);
3936 _IRQL_requires_max_(DISPATCH_LEVEL
)
3941 _In_ PDEVICE_OBJECT DeviceObject
,
3944 _IRQL_requires_max_(PASSIVE_LEVEL
)
3948 KsDefaultDeviceIoCompletion(
3949 _In_ PDEVICE_OBJECT DeviceObject
,
3952 _IRQL_requires_max_(PASSIVE_LEVEL
)
3956 KsDispatchFastIoDeviceControlFailure(
3957 _In_ PFILE_OBJECT FileObject
,
3959 _In_reads_bytes_opt_(InputBufferLength
) PVOID InputBuffer
,
3960 _In_ ULONG InputBufferLength
,
3961 _Out_writes_bytes_opt_(OutputBufferLength
) PVOID OutputBuffer
,
3962 _In_ ULONG OutputBufferLength
,
3963 _In_ ULONG IoControlCode
,
3964 _Out_ PIO_STATUS_BLOCK IoStatus
,
3965 _In_ PDEVICE_OBJECT DeviceObject
); /* always return false */
3967 _IRQL_requires_max_(PASSIVE_LEVEL
)
3971 KsDispatchFastReadFailure(
3972 _In_ PFILE_OBJECT FileObject
,
3973 _In_ PLARGE_INTEGER FileOffset
,
3978 _Out_ PIO_STATUS_BLOCK IoStatus
,
3979 _In_ PDEVICE_OBJECT DeviceObject
); /* always return false */
3981 /* This function does the same as the above */
3982 #define KsDispatchFastWriteFailure KsDispatchFastReadFailure
3984 _IRQL_requires_max_(PASSIVE_LEVEL
)
3988 KsDispatchInvalidDeviceRequest(
3989 _In_ PDEVICE_OBJECT DeviceObject
,
3992 _IRQL_requires_max_(PASSIVE_LEVEL
)
3997 _In_ PDEVICE_OBJECT DeviceObject
,
4000 _IRQL_requires_max_(PASSIVE_LEVEL
)
4004 KsDispatchSpecificMethod(
4006 _In_ PFNKSHANDLER Handler
);
4008 _IRQL_requires_max_(PASSIVE_LEVEL
)
4012 KsDispatchSpecificProperty(
4014 _In_ PFNKSHANDLER Handler
);
4016 _IRQL_requires_max_(PASSIVE_LEVEL
)
4020 KsForwardAndCatchIrp(
4021 _In_ PDEVICE_OBJECT DeviceObject
,
4023 _In_ PFILE_OBJECT FileObject
,
4024 _In_ KSSTACK_USE StackUse
);
4026 _IRQL_requires_max_(PASSIVE_LEVEL
)
4032 _In_ PFILE_OBJECT FileObject
,
4033 _In_ BOOLEAN ReuseStackLocation
);
4035 _IRQL_requires_max_(APC_LEVEL
)
4040 _In_ KSDEVICE_HEADER Header
);
4042 _IRQL_requires_max_(APC_LEVEL
)
4052 KsGetChildCreateParameter(
4054 _Out_ PVOID
*CreateParameter
);
4056 _IRQL_requires_max_(DISPATCH_LEVEL
)
4060 KsMoveIrpsOnCancelableQueue(
4061 _Inout_ PLIST_ENTRY SourceList
,
4062 _In_ PKSPIN_LOCK SourceLock
,
4063 _Inout_ PLIST_ENTRY DestinationList
,
4064 _In_opt_ PKSPIN_LOCK DestinationLock
,
4065 _In_ KSLIST_ENTRY_LOCATION ListLocation
,
4066 _In_ PFNKSIRPLISTCALLBACK ListCallback
,
4067 _In_ PVOID Context
);
4069 _IRQL_requires_max_(PASSIVE_LEVEL
)
4075 _In_ ULONG ProbeFlags
,
4076 _In_ ULONG HeaderSize
);
4078 _IRQL_requires_max_(PASSIVE_LEVEL
)
4082 KsQueryInformationFile(
4083 _In_ PFILE_OBJECT FileObject
,
4084 _Out_writes_bytes_(Length
) PVOID FileInformation
,
4086 _In_ FILE_INFORMATION_CLASS FileInformationClass
);
4088 _IRQL_requires_max_(PASSIVE_LEVEL
)
4092 KsQueryObjectAccessMask(
4093 _In_ KSOBJECT_HEADER Header
);
4095 _IRQL_requires_max_(PASSIVE_LEVEL
)
4097 PKSOBJECT_CREATE_ITEM
4099 KsQueryObjectCreateItem(
4100 _In_ KSOBJECT_HEADER Header
);
4102 _IRQL_requires_max_(PASSIVE_LEVEL
)
4107 _In_ PFILE_OBJECT FileObject
,
4108 _In_opt_ PKEVENT Event
,
4109 _In_opt_ PVOID PortContext
,
4110 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
4111 _Out_writes_bytes_(Length
) PVOID Buffer
,
4114 _In_ KPROCESSOR_MODE RequestorMode
);
4116 _IRQL_requires_max_(DISPATCH_LEVEL
)
4123 _IRQL_requires_max_(DISPATCH_LEVEL
)
4127 KsReleaseIrpOnCancelableQueue(
4129 _In_opt_ PDRIVER_CANCEL DriverCancel
);
4131 _IRQL_requires_max_(DISPATCH_LEVEL
)
4135 KsRemoveIrpFromCancelableQueue(
4136 _Inout_ PLIST_ENTRY QueueHead
,
4137 _In_ PKSPIN_LOCK SpinLock
,
4138 _In_ KSLIST_ENTRY_LOCATION ListLocation
,
4139 _In_ KSIRP_REMOVAL_OPERATION RemovalOperation
);
4141 _IRQL_requires_max_(DISPATCH_LEVEL
)
4145 KsRemoveSpecificIrpFromCancelableQueue(
4148 _IRQL_requires_max_(PASSIVE_LEVEL
)
4152 KsSetInformationFile(
4153 _In_ PFILE_OBJECT FileObject
,
4154 _In_reads_bytes_(Length
) PVOID FileInformation
,
4156 _In_ FILE_INFORMATION_CLASS FileInformationClass
);
4158 _IRQL_requires_max_(PASSIVE_LEVEL
)
4162 KsSetMajorFunctionHandler(
4163 _In_ PDRIVER_OBJECT DriverObject
,
4164 _In_ ULONG MajorFunction
);
4166 _IRQL_requires_max_(PASSIVE_LEVEL
)
4171 _In_ PFILE_OBJECT FileObject
,
4172 _In_opt_ PKEVENT Event
,
4173 _In_opt_ PVOID PortContext
,
4174 _In_opt_ PIO_COMPLETION_ROUTINE CompletionRoutine
,
4175 _In_opt_ PVOID CompletionContext
,
4176 _In_opt_ KSCOMPLETION_INVOCATION CompletionInvocationFlags
,
4177 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
4178 _Inout_updates_bytes_(Length
) PVOID StreamHeaders
,
4181 _In_ KPROCESSOR_MODE RequestorMode
);
4183 _IRQL_requires_max_(PASSIVE_LEVEL
)
4188 _In_ PFILE_OBJECT FileObject
,
4189 _In_opt_ PKEVENT Event
,
4190 _In_opt_ PVOID PortContext
,
4191 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
4192 _In_reads_bytes_(Length
) PVOID Buffer
,
4195 _In_ KPROCESSOR_MODE RequestorMode
);
4200 KsDefaultForwardIrp(
4201 _In_ PDEVICE_OBJECT DeviceObject
,
4204 /* ===============================================================
4205 Worker Management Functions
4208 _IRQL_requires_max_(PASSIVE_LEVEL
)
4213 _In_ WORK_QUEUE_TYPE WorkQueueType
,
4214 _Out_ PKSWORKER
* Worker
);
4216 _IRQL_requires_max_(PASSIVE_LEVEL
)
4221 _In_ PKSWORKER Worker
);
4223 _IRQL_requires_max_(PASSIVE_LEVEL
)
4227 KsRegisterCountedWorker(
4228 _In_ WORK_QUEUE_TYPE WorkQueueType
,
4229 _In_ PWORK_QUEUE_ITEM CountedWorkItem
,
4230 _Out_ PKSWORKER
*Worker
);
4232 _IRQL_requires_max_(PASSIVE_LEVEL
)
4236 KsDecrementCountedWorker(
4237 _In_ PKSWORKER Worker
);
4239 _IRQL_requires_max_(PASSIVE_LEVEL
)
4243 KsIncrementCountedWorker(
4244 _In_ PKSWORKER Worker
);
4246 _IRQL_requires_max_(DISPATCH_LEVEL
)
4251 _In_ PKSWORKER Worker
,
4252 _In_ PWORK_QUEUE_ITEM WorkItem
);
4254 /* ===============================================================
4258 _IRQL_requires_max_(PASSIVE_LEVEL
)
4263 _In_ PVOID ImageBase
,
4264 _In_ POOL_TYPE PoolType
,
4265 _In_ ULONG_PTR ResourceName
,
4266 _In_ ULONG ResourceType
,
4267 _Outptr_result_bytebuffer_(*ResourceSize
) PVOID
*Resource
,
4268 _Out_opt_ PULONG ResourceSize
);
4270 _IRQL_requires_max_(PASSIVE_LEVEL
)
4274 KsGetImageNameAndResourceId(
4276 _Out_ PUNICODE_STRING ImageName
,
4277 _Out_ PULONG_PTR ResourceId
,
4278 _Out_ PULONG ValueType
);
4280 _IRQL_requires_max_(PASSIVE_LEVEL
)
4285 _In_ PDEVICE_OBJECT PhysicalDeviceObject
,
4286 _In_ PUNICODE_STRING ModuleName
,
4287 _Out_ PUNICODE_STRING ImageName
,
4288 _Out_ PULONG_PTR ResourceId
,
4289 _Out_ PULONG ValueType
);
4291 /* ===============================================================
4292 Misc. Helper Functions
4295 _IRQL_requires_max_(PASSIVE_LEVEL
)
4302 _IRQL_requires_max_(PASSIVE_LEVEL
)
4307 _In_ PUNICODE_STRING SymbolicLink
,
4308 _In_ PKSPIN_MEDIUM Medium
,
4309 _In_ ULONG PinDirection
);
4314 KsDefaultDispatchPnp(
4315 _In_ PDEVICE_OBJECT DeviceObject
,
4318 _IRQL_requires_max_(PASSIVE_LEVEL
)
4322 KsSetDevicePnpAndBaseObject(
4323 _In_ KSDEVICE_HEADER Header
,
4324 _In_ PDEVICE_OBJECT PnpDeviceObject
,
4325 _In_ PDEVICE_OBJECT BaseDevice
);
4330 KsDefaultDispatchPower(
4331 _In_ PDEVICE_OBJECT DeviceObject
,
4334 _IRQL_requires_max_(PASSIVE_LEVEL
)
4339 _In_ KSOBJECT_HEADER Header
,
4340 _In_opt_ PFNKSCONTEXT_DISPATCH PowerDispatch
,
4341 _In_opt_ PVOID PowerContext
);
4343 _IRQL_requires_max_(PASSIVE_LEVEL
)
4347 KsReferenceBusObject(
4348 _In_ KSDEVICE_HEADER Header
);
4350 _IRQL_requires_max_(PASSIVE_LEVEL
)
4354 KsDereferenceBusObject(
4355 _In_ KSDEVICE_HEADER Header
);
4357 _IRQL_requires_max_(PASSIVE_LEVEL
)
4361 KsFreeObjectCreateItem(
4362 _In_ KSDEVICE_HEADER Header
,
4363 _In_ PUNICODE_STRING CreateItem
);
4365 _IRQL_requires_max_(PASSIVE_LEVEL
)
4369 KsFreeObjectCreateItemsByContext(
4370 _In_ KSDEVICE_HEADER Header
,
4371 _In_ PVOID Context
);
4373 _IRQL_requires_max_(PASSIVE_LEVEL
)
4378 _In_ PDRIVER_OBJECT DriverObject
);
4380 _IRQL_requires_max_(PASSIVE_LEVEL
)
4384 KsQueryDevicePnpObject(
4385 _In_ KSDEVICE_HEADER Header
);
4387 _IRQL_requires_max_(PASSIVE_LEVEL
)
4391 KsRecalculateStackDepth(
4392 _In_ KSDEVICE_HEADER Header
,
4393 _In_ BOOLEAN ReuseStackLocation
);
4395 _IRQL_requires_max_(PASSIVE_LEVEL
)
4399 KsSetTargetDeviceObject(
4400 _In_ KSOBJECT_HEADER Header
,
4401 _In_opt_ PDEVICE_OBJECT TargetDevice
);
4403 _IRQL_requires_max_(PASSIVE_LEVEL
)
4408 _In_ KSOBJECT_HEADER Header
,
4409 _In_ KSTARGET_STATE TargetState
);
4411 _Must_inspect_result_
4412 _IRQL_requires_max_(PASSIVE_LEVEL
)
4416 KsSynchronousIoControlDevice(
4417 _In_ PFILE_OBJECT FileObject
,
4418 _In_ KPROCESSOR_MODE RequestorMode
,
4419 _In_ ULONG IoControl
,
4420 _In_reads_bytes_(InSize
) PVOID InBuffer
,
4422 _Out_writes_bytes_to_(OutSize
, *BytesReturned
) PVOID OutBuffer
,
4424 _Out_ PULONG BytesReturned
);
4426 _IRQL_requires_max_(PASSIVE_LEVEL
)
4430 KsFilterGetFirstChildPin(
4431 _In_ PKSFILTER Filter
,
4434 _IRQL_requires_max_(PASSIVE_LEVEL
)
4438 KsPinGetConnectedPinFileObject(
4443 #if !defined( KS_NO_CREATE_FUNCTIONS )
4445 _IRQL_requires_max_(PASSIVE_LEVEL
)
4450 _In_ HANDLE ConnectionHandle
,
4451 _In_ PKSALLOCATOR_FRAMING AllocatorFraming
,
4452 _Out_ PHANDLE AllocatorHandle
);
4454 _IRQL_requires_max_(PASSIVE_LEVEL
)
4459 _In_ HANDLE ConnectionHandle
,
4460 _In_ PKSCLOCK_CREATE ClockCreate
,
4461 _Out_ PHANDLE ClockHandle
);
4463 _IRQL_requires_max_(PASSIVE_LEVEL
)
4468 _In_ HANDLE FilterHandle
,
4469 _In_ PKSPIN_CONNECT Connect
,
4470 _In_ ACCESS_MASK DesiredAccess
,
4471 _Out_ PHANDLE ConnectionHandle
);
4473 _IRQL_requires_max_(PASSIVE_LEVEL
)
4477 KsCreateTopologyNode(
4478 _In_ HANDLE ParentHandle
,
4479 _In_ PKSNODE_CREATE NodeCreate
,
4480 _In_ ACCESS_MASK DesiredAccess
,
4481 _Out_ PHANDLE NodeHandle
);
4485 #endif /* _NTDDK_ */
4487 /* ===============================================================
4488 AVStream Functions (XP / DirectX 8)
4490 http://www.osronline.com/ddkx/stream/avstream_5q9f.htm
4493 #if defined(_NTDDK_)
4495 _IRQL_requires_max_(PASSIVE_LEVEL
)
4499 KsMergeAutomationTables(
4500 _Out_ PKSAUTOMATION_TABLE
*AutomationTableAB
,
4501 _In_opt_ PKSAUTOMATION_TABLE AutomationTableA
,
4502 _In_opt_ PKSAUTOMATION_TABLE AutomationTableB
,
4503 _In_opt_ KSOBJECT_BAG Bag
);
4505 _Must_inspect_result_
4506 _IRQL_requires_max_(PASSIVE_LEVEL
)
4511 _In_ PDRIVER_OBJECT DriverObject
,
4512 _In_ PUNICODE_STRING RegistryPath
,
4513 _In_opt_
const KSDEVICE_DESCRIPTOR
*Descriptor
);
4515 typedef struct _KSFILTERFACTORY KSFILTERFACTORY
, *PKSFILTERFACTORY
; //FIXME
4517 _IRQL_requires_max_(PASSIVE_LEVEL
)
4521 KsInitializeDevice (
4522 _In_ PDEVICE_OBJECT FunctionalDeviceObject
,
4523 _In_ PDEVICE_OBJECT PhysicalDeviceObject
,
4524 _In_ PDEVICE_OBJECT NextDeviceObject
,
4525 _In_opt_
const KSDEVICE_DESCRIPTOR
*Descriptor
);
4527 _IRQL_requires_max_(PASSIVE_LEVEL
)
4529 (NTAPI
*PFNKSFILTERFACTORYPOWER
)(
4530 _In_ PKSFILTERFACTORY FilterFactory
,
4531 _In_ DEVICE_POWER_STATE State
);
4533 _Must_inspect_result_
4534 _IRQL_requires_max_(PASSIVE_LEVEL
)
4539 _In_ KSOBJECT_BAG ObjectBag
,
4540 _Inout_ PVOID
*PointerToPointerToItem
,
4545 _IRQL_requires_max_(PASSIVE_LEVEL
)
4552 _IRQL_requires_max_(PASSIVE_LEVEL
)
4557 _In_ PKSDEVICE Device
);
4559 _IRQL_requires_max_(PASSIVE_LEVEL
)
4564 _In_ PDRIVER_OBJECT DriverObject
,
4565 _In_ PDEVICE_OBJECT PhysicalDeviceObject
);
4567 _IRQL_requires_max_(PASSIVE_LEVEL
)
4573 _In_ PKSEVENT_ENTRY EventEntry
);
4575 _Must_inspect_result_
4576 _IRQL_requires_max_(PASSIVE_LEVEL
)
4580 KsAddItemToObjectBag(
4581 _In_ KSOBJECT_BAG ObjectBag
,
4582 _In_ __drv_aliasesMem PVOID Item
,
4583 _In_opt_ PFNKSFREE Free
);
4585 _IRQL_requires_max_(PASSIVE_LEVEL
)
4589 KsRemoveItemFromObjectBag(
4590 _In_ KSOBJECT_BAG ObjectBag
,
4594 _IRQL_requires_max_(PASSIVE_LEVEL
)
4598 KsAllocateObjectBag(
4599 _In_ PKSDEVICE Device
,
4600 _Out_ KSOBJECT_BAG
*ObjectBag
);
4602 _IRQL_requires_max_(PASSIVE_LEVEL
)
4607 _In_ KSOBJECT_BAG ObjectBag
);
4609 _IRQL_requires_max_(DISPATCH_LEVEL
)
4613 KsCompletePendingRequest(
4616 _IRQL_requires_max_(PASSIVE_LEVEL
)
4620 KsCopyObjectBagItems(
4621 _In_ KSOBJECT_BAG ObjectBagDestination
,
4622 _In_ KSOBJECT_BAG ObjectBagSource
);
4624 _IRQL_requires_max_(PASSIVE_LEVEL
)
4629 _In_ PDRIVER_OBJECT DriverObject
,
4630 _In_ PDEVICE_OBJECT PhysicalDeviceObject
,
4631 _In_opt_
const KSDEVICE_DESCRIPTOR
*Descriptor
,
4632 _In_ ULONG ExtensionSize
,
4633 _Out_opt_ PKSDEVICE
*Device
);
4635 _Must_inspect_result_
4636 _IRQL_requires_max_(PASSIVE_LEVEL
)
4640 KsCreateFilterFactory(
4641 _In_ PDEVICE_OBJECT DeviceObject
,
4642 _In_
const KSFILTER_DESCRIPTOR
*Descriptor
,
4643 _In_opt_ PWSTR RefString
,
4644 _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
4645 _In_ ULONG CreateItemFlags
,
4646 _In_opt_ PFNKSFILTERFACTORYPOWER SleepCallback
,
4647 _In_opt_ PFNKSFILTERFACTORYPOWER WakeCallback
,
4648 _Out_opt_ PKSFILTERFACTORY
*FilterFactory
);
4650 _IRQL_requires_max_(PASSIVE_LEVEL
)
4654 KsFilterFactorySetDeviceClassesState(
4655 _In_ PKSFILTERFACTORY FilterFactory
,
4656 _In_ BOOLEAN NewState
);
4658 _Must_inspect_result_
4659 _IRQL_requires_max_(PASSIVE_LEVEL
)
4663 KsFilterFactoryUpdateCacheData(
4664 _In_ PKSFILTERFACTORY FilterFactory
,
4665 _In_opt_
const KSFILTER_DESCRIPTOR
*FilterDescriptor
);
4667 _IRQL_requires_max_(DISPATCH_LEVEL
)
4674 _IRQL_requires_max_(DISPATCH_LEVEL
)
4681 _IRQL_requires_max_(PASSIVE_LEVEL
)
4685 KsDefaultAddEventHandler(
4687 _In_ PKSEVENTDATA EventData
,
4688 _Inout_ PKSEVENT_ENTRY EventEntry
);
4690 _IRQL_requires_max_(PASSIVE_LEVEL
)
4694 KsDispatchQuerySecurity(
4695 _In_ PDEVICE_OBJECT DeviceObject
,
4698 _IRQL_requires_max_(PASSIVE_LEVEL
)
4702 KsDispatchSetSecurity(
4703 _In_ PDEVICE_OBJECT DeviceObject
,
4706 _IRQL_requires_max_(PASSIVE_LEVEL
)
4713 _IRQL_requires_max_(PASSIVE_LEVEL
)
4717 KsFilterGetParentFilterFactory(
4718 _In_ PKSFILTER Filter
)
4720 return (PKSFILTERFACTORY
) KsGetParent((PVOID
) Filter
);
4723 _IRQL_requires_max_(PASSIVE_LEVEL
)
4727 KsFilterFactoryGetParentDevice(
4728 _In_ PKSFILTERFACTORY FilterFactory
)
4730 return (PKSDEVICE
) KsGetParent((PVOID
) FilterFactory
);
4733 #define KsDeleteFilterFactory(FilterFactory) \
4734 KsFreeObjectCreateItemsByContext( \
4735 *(KSDEVICE_HEADER *)( \
4736 KsFilterFactoryGetParentDevice(FilterFactory)->FunctionalDeviceObject-> \
4740 _IRQL_requires_max_(PASSIVE_LEVEL
)
4745 _In_ PKSDEVICE Device
,
4746 _In_ ULONG DataType
,
4747 _In_reads_bytes_(Length
) PVOID Buffer
,
4751 _IRQL_requires_max_(PASSIVE_LEVEL
)
4758 _IRQL_requires_max_(PASSIVE_LEVEL
)
4762 KsDeviceGetFirstChildFilterFactory(
4763 _In_ PKSDEVICE Device
);
4765 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
4767 _IRQL_requires_max_(PASSIVE_LEVEL
)
4774 _IRQL_requires_max_(PASSIVE_LEVEL
)
4778 KsDeviceGetOuterUnknown(
4779 _In_ PKSDEVICE Device
)
4781 return KsGetOuterUnknown((PVOID
) Device
);
4784 _IRQL_requires_max_(PASSIVE_LEVEL
)
4788 KsDeviceRegisterAggregatedClientUnknown(
4789 _In_ PKSDEVICE Device
,
4790 _In_ PUNKNOWN ClientUnknown
);
4794 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
4796 typedef interface IKsReferenceClock
* PIKSREFERENCECLOCK
;
4799 #define INTERFACE IKsReferenceClock
4800 DECLARE_INTERFACE_(IKsReferenceClock
,IUnknown
)
4802 DEFINE_ABSTRACT_UNKNOWN() // For C
4804 STDMETHOD_(LONGLONG
,GetTime
)(THIS
4806 STDMETHOD_(LONGLONG
,GetPhysicalTime
)(THIS
4808 STDMETHOD_(LONGLONG
,GetCorrelatedTime
)(THIS_
4809 _Out_ PLONGLONG SystemTime
4811 STDMETHOD_(LONGLONG
,GetCorrelatedPhysicalTime
)(THIS_
4812 _Out_ PLONGLONG SystemTime
4814 STDMETHOD_(NTSTATUS
, GetResolution
)(THIS_
4815 _Out_ PKSRESOLUTION Resolution
4817 STDMETHOD_(NTSTATUS
, GetState
)(THIS_
4818 _Out_ PKSSTATE State
4823 #define INTERFACE IKsControl
4825 DEFINE_GUID(IID_IKsControl
, 0x28F54685L
, 0x06FD, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96);
4827 DECLARE_INTERFACE_(IKsControl
,IUnknown
)
4829 STDMETHOD_(NTSTATUS
, QueryInterface
)( THIS_
4831 PVOID
* Interface
)PURE
;
4833 STDMETHOD_(ULONG
, AddRef
)(THIS
) PURE
;
4835 STDMETHOD_(ULONG
, Release
)(THIS
) PURE
;
4837 STDMETHOD_(NTSTATUS
, KsProperty
)(THIS_
4838 _In_reads_bytes_(PropertyLength
) PKSPROPERTY Property
,
4839 _In_ ULONG PropertyLength
,
4840 _Inout_updates_bytes_(DataLength
) PVOID PropertyData
,
4841 _In_ ULONG DataLength
,
4842 _Out_ ULONG
*BytesReturned
4844 STDMETHOD_(NTSTATUS
, KsMethod
)(THIS_
4845 _In_reads_bytes_(MethodLength
) PKSMETHOD Method
,
4846 _In_ ULONG MethodLength
,
4847 _Inout_updates_bytes_(DataLength
) PVOID MethodData
,
4848 _In_ ULONG DataLength
,
4849 _Out_ ULONG
*BytesReturned
4851 STDMETHOD_(NTSTATUS
, KsEvent
)(THIS_
4852 _In_reads_bytes_opt_(EventLength
) PKSEVENT Event
,
4853 _In_ ULONG EventLength
,
4854 _Inout_updates_bytes_(DataLength
) PVOID EventData
,
4855 _In_ ULONG DataLength
,
4856 _Out_ ULONG
*BytesReturned
4861 typedef IKsControl
* PIKSCONTROL
;
4865 _IRQL_requires_max_(PASSIVE_LEVEL
)
4869 KsDeviceRegisterAdapterObject(
4870 _In_ PKSDEVICE Device
,
4871 _In_ PADAPTER_OBJECT AdapterObject
,
4872 _In_ ULONG MaxMappingByteCount
,
4873 _In_ ULONG MappingTableStride
);
4875 _IRQL_requires_max_(PASSIVE_LEVEL
)
4880 _In_ PKSDEVICE Device
,
4881 _In_ ULONG DataType
,
4882 _In_reads_bytes_(Length
) PVOID Buffer
,
4886 _IRQL_requires_max_(PASSIVE_LEVEL
)
4893 #define KsDiscard(object, pointer) \
4894 KsRemoveItemFromObjectBag(object->Bag, pointer, TRUE)
4896 #define KsFilterAcquireControl(Filter) \
4897 KsAcquireControl((PVOID) Filter);
4899 #define KsFilterReleaseControl(Filter) \
4900 KsReleaseControl((PVOID) Filter);
4902 #define KsFilterAddEvent(Filter, EventEntry) \
4903 KsAddEvent(Filter,EventEntry);
4905 _IRQL_requires_max_(PASSIVE_LEVEL
)
4909 KsFilterAcquireProcessingMutex(
4910 _In_ PKSFILTER Filter
);
4912 _IRQL_requires_max_(PASSIVE_LEVEL
)
4916 KsFilterAddTopologyConnections(
4917 _In_ PKSFILTER Filter
,
4918 _In_ ULONG NewConnectionsCount
,
4919 _In_reads_(NewConnectionsCount
) const KSTOPOLOGY_CONNECTION
*const NewTopologyConnections
);
4921 _IRQL_requires_max_(DISPATCH_LEVEL
)
4925 KsFilterAttemptProcessing(
4926 _In_ PKSFILTER Filter
,
4927 _In_ BOOLEAN Asynchronous
);
4929 _IRQL_requires_max_(PASSIVE_LEVEL
)
4934 _In_ PKSFILTER Filter
,
4935 _In_
const KSNODE_DESCRIPTOR
*const NodeDescriptor
,
4936 _Out_ PULONG NodeID
);
4938 _IRQL_requires_max_(PASSIVE_LEVEL
)
4942 KsFilterCreatePinFactory(
4943 _In_ PKSFILTER Filter
,
4944 _In_
const KSPIN_DESCRIPTOR_EX
*const PinDescriptor
,
4945 _Out_ PULONG PinID
);
4947 _IRQL_requires_max_(PASSIVE_LEVEL
)
4951 KsFilterFactoryGetDevice(
4952 _In_ PKSFILTERFACTORY FilterFactory
);
4955 #endif /* avstream */