8 This is a basic stubbing of the Kernel Streaming API header. It is
9 very incomplete - a lot of the #defines are not set to any value at all.
11 Some of the structs/funcs may be incorrectly grouped.
13 GUIDs need to be defined properly.
15 AVStream functionality (XP and above, DirectX 8.0 and above) will NOT
16 implemented for a while.
18 Some example code for interaction from usermode:
25 sizeof(KS_SEEKING_CAPABILITIES),
40 #define KSDDKAPI //DECLSPEC_IMPORT /* TODO */
44 #define KSFILTER_NODE ((ULONG)-1)
45 #define KSALL_NODES ((ULONG)-1)
47 #define KSSTRING_Filter L"{9B365890-165F-11D0-A195-0020AFD156E4}"
48 #define KSSTRING_Pin L"{146F1A80-4791-11D0-A5D6-28DB04C10000}"
49 #define KSSTRING_Clock L"{53172480-4791-11D0-A5D6-28DB04C10000}"
50 #define KSSTRING_Allocator L"{642F5D00-4791-11D0-A5D6-28DB04C10000}"
51 #define KSSTRING_AllocatorEx L"{091BB63B-603F-11D1-B067-00A0C9062802}"
52 #define KSSTRING_TopologyNode L"{0621061A-EE75-11D0-B915-00A0C9223196}"
54 #define KSDATAFORMAT_BIT_ATTRIBUTES 1
55 #define KSDATAFORMAT_ATTRIBUTES (1 << KSDATAFORMAT_BIT_ATTRIBUTES)
58 typedef PVOID PKSWORKER
;
62 #define SIZEOF_ARRAY(a) (sizeof(a)/sizeof((a)[0]))
65 /* ===============================================================
66 GUID definition helpers
72 #define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name
74 #define DEFINE_GUIDEX(name) EXTERN_C const GUID name
79 #define STATICGUIDOF(guid) STATIC_##guid
83 #if defined(__cplusplus) && _MSC_VER >= 1100
84 #define DEFINE_GUIDSTRUCT(guid, name) struct __declspec(uuid(guid)) name
85 #define DEFINE_GUIDNAMED(name) __uuidof(struct name)
87 #define DEFINE_GUIDSTRUCT(guid, name) DEFINE_GUIDEX(name)
88 #define DEFINE_GUIDNAMED(name) name
92 #define STATIC_GUID_NULL \
93 0x00000000L, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
94 DEFINE_GUIDSTRUCT("00000000-0000-0000-0000-000000000000", GUID_NULL
);
95 #define GUID_NULL DEFINE_GUIDNAMED(GUID_NULL)
98 #define STATIC_KSNAME_Filter\
99 0x9b365890L, 0x165f, 0x11d0, {0xa1, 0x95, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4}
100 DEFINE_GUIDSTRUCT("9b365890-165f-11d0-a195-0020afd156e4", KSNAME_Filter
);
101 #define KSNAME_Filter DEFINE_GUIDNAMED(KSNAME_Filter)
103 #define STATIC_KSMEMORY_TYPE_KERNEL_PAGED \
104 0xd833f8f8L, 0x7894, 0x11d1, {0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02}
105 DEFINE_GUIDSTRUCT("d833f8f8-7894-11d1-b069-00a0c9062802", KSMEMORY_TYPE_KERNEL_PAGED
);
106 #define KSMEMORY_TYPE_KERNEL_PAGED DEFINE_GUIDNAMED(KSMEMORY_TYPE_KERNEL_PAGED)
108 /* ===============================================================
112 #define IOCTL_KS_DISABLE_EVENT \
119 #define IOCTL_KS_ENABLE_EVENT \
127 #define IOCTL_KS_METHOD \
135 #define IOCTL_KS_PROPERTY \
142 #define IOCTL_KS_WRITE_STREAM \
149 #define IOCTL_KS_READ_STREAM \
156 #define IOCTL_KS_RESET_STATE \
164 /* ===============================================================
168 #define STATIC_KSCATEGORY_BRIDGE \
169 0x085AFF00L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
170 DEFINE_GUIDSTRUCT("085AFF00-62CE-11CF-A5D6-28DB04C10000", KSCATEGORY_BRIDGE
);
171 #define KSCATEGORY_BRIDGE DEFINE_GUIDNAMED(KSCATEGORY_BRIDGE)
173 #define STATIC_KSCATEGORY_CAPTURE \
174 0x65E8773DL, 0x8F56, 0x11D0, {0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
175 DEFINE_GUIDSTRUCT("65E8773D-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_CAPTURE
);
176 #define KSCATEGORY_CAPTURE DEFINE_GUIDNAMED(KSCATEGORY_CAPTURE)
178 #define STATIC_KSCATEGORY_RENDER \
179 0x65E8773EL, 0x8F56, 0x11D0, {0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
180 DEFINE_GUIDSTRUCT("65E8773E-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_RENDER
);
181 #define KSCATEGORY_RENDER DEFINE_GUIDNAMED(KSCATEGORY_RENDER)
183 #define STATIC_KSCATEGORY_MIXER \
184 0xAD809C00L, 0x7B88, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
185 DEFINE_GUIDSTRUCT("AD809C00-7B88-11D0-A5D6-28DB04C10000", KSCATEGORY_MIXER
);
186 #define KSCATEGORY_MIXER DEFINE_GUIDNAMED(KSCATEGORY_MIXER)
188 #define STATIC_KSCATEGORY_SPLITTER \
189 0x0A4252A0L, 0x7E70, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
190 DEFINE_GUIDSTRUCT("0A4252A0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_SPLITTER
);
191 #define KSCATEGORY_SPLITTER DEFINE_GUIDNAMED(KSCATEGORY_SPLITTER)
193 #define STATIC_KSCATEGORY_DATACOMPRESSOR \
194 0x1E84C900L, 0x7E70, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
195 DEFINE_GUIDSTRUCT("1E84C900-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATACOMPRESSOR
);
196 #define KSCATEGORY_DATACOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATACOMPRESSOR)
198 #define STATIC_KSCATEGORY_DATADECOMPRESSOR \
199 0x2721AE20L, 0x7E70, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
200 DEFINE_GUIDSTRUCT("2721AE20-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATADECOMPRESSOR
);
201 #define KSCATEGORY_DATADECOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATADECOMPRESSOR)
203 #define STATIC_KSCATEGORY_DATATRANSFORM \
204 0x2EB07EA0L, 0x7E70, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
205 DEFINE_GUIDSTRUCT("2EB07EA0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATATRANSFORM
);
206 #define KSCATEGORY_DATATRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_DATATRANSFORM)
208 #define STATIC_KSCATEGORY_COMMUNICATIONSTRANSFORM \
209 0xCF1DDA2CL, 0x9743, 0x11D0, {0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
210 DEFINE_GUIDSTRUCT("CF1DDA2C-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_COMMUNICATIONSTRANSFORM
);
211 #define KSCATEGORY_COMMUNICATIONSTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_COMMUNICATIONSTRANSFORM)
213 #define STATIC_KSCATEGORY_INTERFACETRANSFORM \
214 0xCF1DDA2DL, 0x9743, 0x11D0, {0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
215 DEFINE_GUIDSTRUCT("CF1DDA2D-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_INTERFACETRANSFORM
);
216 #define KSCATEGORY_INTERFACETRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_INTERFACETRANSFORM)
218 #define STATIC_KSCATEGORY_MEDIUMTRANSFORM \
219 0xCF1DDA2EL, 0x9743, 0x11D0, {0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
220 DEFINE_GUIDSTRUCT("CF1DDA2E-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_MEDIUMTRANSFORM
);
221 #define KSCATEGORY_MEDIUMTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_MEDIUMTRANSFORM)
223 #define STATIC_KSCATEGORY_FILESYSTEM \
224 0x760FED5EL, 0x9357, 0x11D0, {0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
225 DEFINE_GUIDSTRUCT("760FED5E-9357-11D0-A3CC-00A0C9223196", KSCATEGORY_FILESYSTEM
);
226 #define KSCATEGORY_FILESYSTEM DEFINE_GUIDNAMED(KSCATEGORY_FILESYSTEM)
228 #define STATIC_KSCATEGORY_CLOCK \
229 0x53172480L, 0x4791, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
230 DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000", KSCATEGORY_CLOCK
);
231 #define KSCATEGORY_CLOCK DEFINE_GUIDNAMED(KSCATEGORY_CLOCK)
233 #define STATIC_KSCATEGORY_PROXY \
234 0x97EBAACAL, 0x95BD, 0x11D0, {0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
235 DEFINE_GUIDSTRUCT("97EBAACA-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_PROXY
);
236 #define KSCATEGORY_PROXY DEFINE_GUIDNAMED(KSCATEGORY_PROXY)
238 #define STATIC_KSCATEGORY_QUALITY \
239 0x97EBAACBL, 0x95BD, 0x11D0, {0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
240 DEFINE_GUIDSTRUCT("97EBAACB-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_QUALITY
);
241 #define KSCATEGORY_QUALITY DEFINE_GUIDNAMED(KSCATEGORY_QUALITY)
243 /* ===============================================================
252 } KSIDENTIFIER
, *PKSIDENTIFIER
;
254 typedef KSIDENTIFIER KSPROPERTY
, *PKSPROPERTY
;
255 typedef KSIDENTIFIER KSMETHOD
, *PKSMETHOD
;
256 typedef KSIDENTIFIER KSEVENT
, *PKSEVENT
;
258 typedef KSIDENTIFIER KSDEGRADE
, *PKSDEGRADE
;
260 typedef KSIDENTIFIER KSPIN_INTERFACE
, *PKSPIN_INTERFACE
;
261 typedef KSIDENTIFIER KSPIN_MEDIUM
, *PKSPIN_MEDIUM
;
274 } KSDATAFORMAT
, *PKSDATAFORMAT
, KSDATARANGE
, *PKSDATARANGE
;
282 } KSATTRIBUTE
, *PKSATTRIBUTE
;
286 /* ===============================================================
287 Interface Sets - TODO
291 #define KSINTERFACESETID_Media
293 #define KSINTERFACE_STANDARD_STREAMING
294 #define KSINTERFACE_STANDARD_LOOPED_STREAMING
295 #define KSINTERFACE_STANDARD_CONTROL
298 #define STATIC_KSINTERFACESETID_Standard \
299 0x1A8766A0L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
300 DEFINE_GUIDSTRUCT("1A8766A0-62CE-11CF-A5D6-28DB04C10000", KSINTERFACESETID_Standard
);
301 #define KSINTERFACESETID_Standard DEFINE_GUIDNAMED(KSINTERFACESETID_Standard)
305 KSINTERFACE_STANDARD_STREAMING
,
306 KSINTERFACE_STANDARD_LOOPED_STREAMING
,
307 KSINTERFACE_STANDARD_CONTROL
308 } KSINTERFACE_STANDARD
;
310 #define STATIC_KSINTERFACESETID_FileIo \
311 0x8C6F932CL, 0xE771, 0x11D0, {0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
312 DEFINE_GUIDSTRUCT("8C6F932C-E771-11D0-B8FF-00A0C9223196", KSINTERFACESETID_FileIo
);
313 #define KSINTERFACESETID_FileIo DEFINE_GUIDNAMED(KSINTERFACESETID_FileIo)
318 /* ===============================================================
324 KSINTERFACE_FILEIO_STREAMING
325 } KSINTERFACE_FILEIO
;
327 #define KSMEDIUM_TYPE_ANYINSTANCE 0
329 #define STATIC_KSMEDIUMSETID_Standard \
330 0x4747B320L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
331 DEFINE_GUIDSTRUCT("4747B320-62CE-11CF-A5D6-28DB04C10000", KSMEDIUMSETID_Standard
);
332 #define KSMEDIUMSETID_Standard DEFINE_GUIDNAMED(KSMEDIUMSETID_Standard)
335 /* ===============================================================
336 Clock Properties/Methods/Events
339 #define STATIC_KSPROPSETID_Clock \
340 0xDF12A4C0L, 0xAC17, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
341 DEFINE_GUIDSTRUCT("DF12A4C0-AC17-11CF-A5D6-28DB04C10000", KSPROPSETID_Clock
);
342 #define KSPROPSETID_Clock DEFINE_GUIDNAMED(KSPROPSETID_Clock)
346 KSPROPERTY_CLOCK_TIME
,
347 KSPROPERTY_CLOCK_PHYSICALTIME
,
348 KSPROPERTY_CLOCK_CORRELATEDTIME
,
349 KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME
,
350 KSPROPERTY_CLOCK_RESOLUTION
,
351 KSPROPERTY_CLOCK_STATE
,
353 KSPROPERTY_CLOCK_FUNCTIONTABLE
354 #endif // defined(_NTDDK_)
357 #define STATIC_KSEVENTSETID_Clock \
358 0x364D8E20L, 0x62C7, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
359 DEFINE_GUIDSTRUCT("364D8E20-62C7-11CF-A5D6-28DB04C10000", KSEVENTSETID_Clock
);
360 #define KSEVENTSETID_Clock DEFINE_GUIDNAMED(KSEVENTSETID_Clock)
364 KSEVENT_CLOCK_INTERVAL_MARK
,
365 KSEVENT_CLOCK_POSITION_MARK
366 } KSEVENT_CLOCK_POSITION
;
369 /* ===============================================================
370 Connection Properties/Methods/Events
373 #define STATIC_KSPROPSETID_Connection \
374 0x1D58C920L, 0xAC9B, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
375 DEFINE_GUIDSTRUCT("1D58C920-AC9B-11CF-A5D6-28DB04C10000", KSPROPSETID_Connection
);
376 #define KSPROPSETID_Connection DEFINE_GUIDNAMED(KSPROPSETID_Connection)
381 KSPROPERTY_CONNECTION_STATE
,
382 KSPROPERTY_CONNECTION_PRIORITY
,
383 KSPROPERTY_CONNECTION_DATAFORMAT
,
384 KSPROPERTY_CONNECTION_ALLOCATORFRAMING
,
385 KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT
,
386 KSPROPERTY_CONNECTION_ACQUIREORDERING
,
387 KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX
,
388 KSPROPERTY_CONNECTION_STARTAT
389 } KSPROPERTY_CONNECTION
;
391 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_STATE(GetHandler, SetHandler)\
392 DEFINE_KSPROPERTY_ITEM(\
393 KSPROPERTY_CONNECTION_STATE,\
398 NULL, 0, NULL, NULL, 0)
400 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_PRIORITY(GetHandler, SetHandler)\
401 DEFINE_KSPROPERTY_ITEM(\
402 KSPROPERTY_CONNECTION_PRIORITY,\
407 NULL, 0, NULL, NULL, 0)
409 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_DATAFORMAT(GetHandler, SetHandler)\
410 DEFINE_KSPROPERTY_ITEM(\
411 KSPROPERTY_CONNECTION_DATAFORMAT,\
416 NULL, 0, NULL, NULL, 0)
418 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING(Handler)\
419 DEFINE_KSPROPERTY_ITEM(\
420 KSPROPERTY_CONNECTION_ALLOCATORFRAMING,\
423 sizeof(KSALLOCATOR_FRAMING),\
424 NULL, NULL, 0, NULL, NULL, 0)
426 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING_EX(Handler)\
427 DEFINE_KSPROPERTY_ITEM(\
428 KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,\
432 NULL, NULL, 0, NULL, NULL, 0)
434 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_PROPOSEDATAFORMAT(Handler)\
435 DEFINE_KSPROPERTY_ITEM(\
436 KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT,\
439 sizeof(KSDATAFORMAT),\
441 NULL, 0, NULL, NULL, 0)
443 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ACQUIREORDERING(Handler)\
444 DEFINE_KSPROPERTY_ITEM(\
445 KSPROPERTY_CONNECTION_ACQUIREORDERING,\
449 NULL, NULL, 0, NULL, NULL, 0)
451 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_STARTAT(Handler)\
452 DEFINE_KSPROPERTY_ITEM(\
453 KSPROPERTY_CONNECTION_STARTAT,\
456 sizeof(KSRELATIVEEVENT),\
458 NULL, 0, NULL, NULL, 0)
463 KSEVENT_CONNECTION_POSITIONUPDATE
,
464 KSEVENT_CONNECTION_DATADISCONTINUITY
,
465 KSEVENT_CONNECTION_TIMEDISCONTINUITY
,
466 KSEVENT_CONNECTION_PRIORITY
,
467 KSEVENT_CONNECTION_ENDOFSTREAM
468 } KSEVENT_CONNECTION
;
471 /* ===============================================================
473 Properties/Methods/Events
476 #define STATIC_KSPROPSETID_General\
477 0x1464EDA5L, 0x6A8F, 0x11D1, {0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
478 DEFINE_GUIDSTRUCT("1464EDA5-6A8F-11D1-9AA7-00A0C9223196", KSPROPSETID_General
);
479 #define KSPROPSETID_General DEFINE_GUIDNAMED(KSPROPSETID_General)
484 KSPROPERTY_GENERAL_COMPONENTID
485 } KSPROPERTY_GENERAL
;
488 /* ===============================================================
490 Properties/Methods/Events
493 #define KSPROPSETID_GM \
494 0xAF627536L, 0xE719, 0x11D2, {0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D}
498 KSPROPERTY_GM_GRAPHMANAGER
,
499 KSPROPERTY_GM_TIMESTAMP_CLOCK
,
500 KSPROPERTY_GM_RATEMATCH
,
501 KSPROPERTY_GM_RENDERCLOCK
505 /* ===============================================================
507 Properties/Methods/Events
510 #define STATIC_KSPROPSETID_MediaSeeking\
511 0xEE904F0CL, 0xD09B, 0x11D0, {0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
512 DEFINE_GUIDSTRUCT("EE904F0C-D09B-11D0-ABE9-00A0C9223196", KSPROPSETID_MediaSeeking
);
513 #define KSPROPSETID_MediaSeeking DEFINE_GUIDNAMED(KSPROPSETID_MediaSeeking)
516 KSPROPERTY_MEDIASEEKING_CAPABILITIES
,
517 KSPROPERTY_MEDIASEEKING_FORMATS
,
518 KSPROPERTY_MEDIASEEKING_TIMEFORMAT
,
519 KSPROPERTY_MEDIASEEKING_POSITION
,
520 KSPROPERTY_MEDIASEEKING_STOPPOSITION
,
521 KSPROPERTY_MEDIASEEKING_POSITIONS
,
522 KSPROPERTY_MEDIASEEKING_DURATION
,
523 KSPROPERTY_MEDIASEEKING_AVAILABLE
,
524 KSPROPERTY_MEDIASEEKING_PREROLL
,
525 KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT
526 } KSPROPERTY_MEDIASEEKING
;
529 KS_SEEKING_NoPositioning
,
530 KS_SEEKING_AbsolutePositioning
,
531 KS_SEEKING_RelativePositioning
,
532 KS_SEEKING_IncrementalPositioning
,
533 KS_SEEKING_PositioningBitsMask
= 0x3,
534 KS_SEEKING_SeekToKeyFrame
,
535 KS_SEEKING_ReturnTime
= 0x8
539 KS_SEEKING_CanSeekAbsolute
= 0x1,
540 KS_SEEKING_CanSeekForwards
= 0x2,
541 KS_SEEKING_CanSeekBackwards
= 0x4,
542 KS_SEEKING_CanGetCurrentPos
= 0x8,
543 KS_SEEKING_CanGetStopPos
= 0x10,
544 KS_SEEKING_CanGetDuration
= 0x20,
545 KS_SEEKING_CanPlayBackwards
= 0x40
546 } KS_SEEKING_CAPABILITIES
;
551 KS_SEEKING_FLAGS CurrentFlags
;
552 KS_SEEKING_FLAGS StopFlags
;
553 } KSPROPERTY_POSITIONS
, *PKSPROPERTY_POSITIONS
;
558 } KSPROPERTY_MEDIAAVAILABLE
, *PKSPROPERTY_MEDIAAVAILABLE
;
565 } KSP_TIMEFORMAT
, *PKSP_TIMEFORMAT
;
567 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CAPABILITIES(Handler)\
568 DEFINE_KSPROPERTY_ITEM(\
569 KSPROPERTY_MEDIASEEKING_CAPABILITIES,\
572 sizeof(KS_SEEKING_CAPABILITIES),\
573 NULL, NULL, 0, NULL, NULL, 0)
575 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_FORMATS(Handler)\
576 DEFINE_KSPROPERTY_ITEM(\
577 KSPROPERTY_MEDIASEEKING_FORMATS,\
581 NULL, NULL, 0, NULL, NULL, 0)
583 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_TIMEFORMAT(GetHandler, SetHandler)\
584 DEFINE_KSPROPERTY_ITEM(\
585 KSPROPERTY_MEDIASEEKING_TIMEFORMAT,\
590 NULL, 0, NULL, NULL, 0)
592 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITION(Handler)\
593 DEFINE_KSPROPERTY_ITEM(\
594 KSPROPERTY_MEDIASEEKING_POSITION,\
598 NULL, NULL, 0, NULL, NULL, 0)
600 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_STOPPOSITION(Handler)\
601 DEFINE_KSPROPERTY_ITEM(\
602 KSPROPERTY_MEDIASEEKING_STOPPOSITION,\
606 NULL, NULL, 0, NULL, NULL, 0)
608 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITIONS(Handler)\
609 DEFINE_KSPROPERTY_ITEM(\
610 KSPROPERTY_MEDIASEEKING_POSITIONS,\
613 sizeof(KSPROPERTY_POSITIONS),\
615 NULL, 0, NULL, NULL, 0)
617 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_DURATION(Handler)\
618 DEFINE_KSPROPERTY_ITEM(\
619 KSPROPERTY_MEDIASEEKING_DURATION,\
623 NULL, NULL, 0, NULL, NULL, 0)
625 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_AVAILABLE(Handler)\
626 DEFINE_KSPROPERTY_ITEM(\
627 KSPROPERTY_MEDIASEEKING_AVAILABLE,\
630 sizeof(KSPROPERTY_MEDIAAVAILABLE),\
631 NULL, NULL, 0, NULL, NULL, 0)
633 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_PREROLL(Handler)\
634 DEFINE_KSPROPERTY_ITEM(\
635 KSPROPERTY_MEDIASEEKING_PREROLL,\
639 NULL, NULL, 0, NULL, NULL, 0)
641 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CONVERTTIMEFORMAT(Handler)\
642 DEFINE_KSPROPERTY_ITEM(\
643 KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT,\
645 sizeof(KSP_TIMEFORMAT),\
647 NULL, NULL, 0, NULL, NULL, 0)
649 /* ===============================================================
651 Properties/Methods/Events
654 #define STATIC_KSPROPSETID_Pin\
655 0x8C134960L, 0x51AD, 0x11CF, {0x87, 0x8A, 0x94, 0xF8, 0x01, 0xC1, 0x00, 0x00}
656 DEFINE_GUIDSTRUCT("8C134960-51AD-11CF-878A-94F801C10000", KSPROPSETID_Pin
);
657 #define KSPROPSETID_Pin DEFINE_GUIDNAMED(KSPROPSETID_Pin)
659 #define STATIC_KSNAME_Pin\
660 0x146F1A80L, 0x4791, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
661 DEFINE_GUIDSTRUCT("146F1A80-4791-11D0-A5D6-28DB04C10000", KSNAME_Pin
);
662 #define KSNAME_Pin DEFINE_GUIDNAMED(KSNAME_Pin)
667 KSPROPERTY_PIN_CINSTANCES
,
668 KSPROPERTY_PIN_CTYPES
,
669 KSPROPERTY_PIN_DATAFLOW
,
670 KSPROPERTY_PIN_DATARANGES
,
671 KSPROPERTY_PIN_DATAINTERSECTION
,
672 KSPROPERTY_PIN_INTERFACES
,
673 KSPROPERTY_PIN_MEDIUMS
,
674 KSPROPERTY_PIN_COMMUNICATION
,
675 KSPROPERTY_PIN_GLOBALCINSTANCES
,
676 KSPROPERTY_PIN_NECESSARYINSTANCES
,
677 KSPROPERTY_PIN_PHYSICALCONNECTION
,
678 KSPROPERTY_PIN_CATEGORY
,
680 KSPROPERTY_PIN_CONSTRAINEDDATARANGES
,
681 KSPROPERTY_PIN_PROPOSEDATAFORMAT
689 } KSP_PIN
, *PKSP_PIN
;
691 #define KSINSTANCE_INDETERMINATE ((ULONG)-1)
697 } KSPIN_CINSTANCES
, *PKSPIN_CINSTANCES
;
703 WCHAR SymbolicLinkName
[1];
704 } KSPIN_PHYSICALCONNECTION
, *PKSPIN_PHYSICALCONNECTION
;
707 /* ===============================================================
709 Properties/Methods/Events
712 #define KSPROPSETID_Quality \
713 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
717 KSPROPERTY_QUALITY_REPORT
,
718 KSPROPERTY_QUALITY_ERROR
719 } KSPROPERTY_QUALITY
;
722 /* ===============================================================
724 Properties/Methods/Events
727 #define STATIC_KSPROPSETID_Stream\
728 0x65aaba60L, 0x98ae, 0x11cf, {0xa1, 0x0d, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4}
729 DEFINE_GUIDSTRUCT("65aaba60-98ae-11cf-a10d-0020afd156e4", KSPROPSETID_Stream
);
730 #define KSPROPSETID_Stream DEFINE_GUIDNAMED(KSPROPSETID_Stream)
734 KSPROPERTY_STREAM_ALLOCATOR
,
735 KSPROPERTY_STREAM_QUALITY
,
736 KSPROPERTY_STREAM_DEGRADATION
,
737 KSPROPERTY_STREAM_MASTERCLOCK
,
738 KSPROPERTY_STREAM_TIMEFORMAT
,
739 KSPROPERTY_STREAM_PRESENTATIONTIME
,
740 KSPROPERTY_STREAM_PRESENTATIONEXTENT
,
741 KSPROPERTY_STREAM_FRAMETIME
,
742 KSPROPERTY_STREAM_RATECAPABILITY
,
743 KSPROPERTY_STREAM_RATE
,
744 KSPROPERTY_STREAM_PIPE_ID
747 #define DEFINE_KSPROPERTY_ITEM_STREAM_ALLOCATOR(GetHandler, SetHandler)\
748 DEFINE_KSPROPERTY_ITEM(\
749 KSPROPERTY_STREAM_ALLOCATOR,\
754 NULL, 0, NULL, NULL, 0)
756 #define DEFINE_KSPROPERTY_ITEM_STREAM_QUALITY(Handler)\
757 DEFINE_KSPROPERTY_ITEM(\
758 KSPROPERTY_STREAM_QUALITY,\
761 sizeof(KSQUALITY_MANAGER),\
762 NULL, NULL, 0, NULL, NULL, 0)
764 #define DEFINE_KSPROPERTY_ITEM_STREAM_DEGRADATION(GetHandler, SetHandler)\
765 DEFINE_KSPROPERTY_ITEM(\
766 KSPROPERTY_STREAM_DEGRADATION,\
771 NULL, 0, NULL, NULL, 0)
773 #define DEFINE_KSPROPERTY_ITEM_STREAM_MASTERCLOCK(GetHandler, SetHandler)\
774 DEFINE_KSPROPERTY_ITEM(\
775 KSPROPERTY_STREAM_MASTERCLOCK,\
780 NULL, 0, NULL, NULL, 0)
782 #define DEFINE_KSPROPERTY_ITEM_STREAM_TIMEFORMAT(Handler)\
783 DEFINE_KSPROPERTY_ITEM(\
784 KSPROPERTY_STREAM_TIMEFORMAT,\
788 NULL, NULL, 0, NULL, NULL, 0)
790 #define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONTIME(GetHandler, SetHandler)\
791 DEFINE_KSPROPERTY_ITEM(\
792 KSPROPERTY_STREAM_PRESENTATIONTIME,\
797 NULL, 0, NULL, NULL, 0)
799 #define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONEXTENT(Handler)\
800 DEFINE_KSPROPERTY_ITEM(\
801 KSPROPERTY_STREAM_PRESENTATIONEXTENT,\
805 NULL, NULL, 0, NULL, NULL, 0)
807 #define DEFINE_KSPROPERTY_ITEM_STREAM_FRAMETIME(Handler)\
808 DEFINE_KSPROPERTY_ITEM(\
809 KSPROPERTY_STREAM_FRAMETIME,\
812 sizeof(KSFRAMETIME),\
813 NULL, NULL, 0, NULL, NULL, 0)
815 #define DEFINE_KSPROPERTY_ITEM_STREAM_RATECAPABILITY(Handler)\
816 DEFINE_KSPROPERTY_ITEM(\
817 KSPROPERTY_STREAM_RATECAPABILITY,\
819 sizeof(KSRATE_CAPABILITY),\
821 NULL, NULL, 0, NULL, NULL, 0)
823 #define DEFINE_KSPROPERTY_ITEM_STREAM_RATE(GetHandler, SetHandler)\
824 DEFINE_KSPROPERTY_ITEM(\
825 KSPROPERTY_STREAM_RATE,\
830 NULL, 0, NULL, NULL, 0)
832 #define DEFINE_KSPROPERTY_ITEM_STREAM_PIPE_ID(GetHandler, SetHandler)\
833 DEFINE_KSPROPERTY_ITEM(\
834 KSPROPERTY_STREAM_PIPE_ID,\
839 NULL, 0, NULL, NULL, 0)
841 /* ===============================================================
843 Properties/Methods/Events
846 #define STATIC_KSPROPSETID_StreamAllocator\
847 0xcf6e4342L, 0xec87, 0x11cf, {0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4}
848 DEFINE_GUIDSTRUCT("cf6e4342-ec87-11cf-a130-0020afd156e4", KSPROPSETID_StreamAllocator
);
849 #define KSPROPSETID_StreamAllocator DEFINE_GUIDNAMED(KSPROPSETID_StreamAllocator)
853 KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE
,
854 KSPROPERTY_STREAMALLOCATOR_STATUS
855 } KSPROPERTY_STREAMALLOCATOR
;
857 #define KSMETHODSETID_StreamAllocator \
858 0xcf6e4341L, 0xec87, 0x11cf, {0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4}
862 KSMETHOD_STREAMALLOCATOR_ALLOC
,
863 KSMETHOD_STREAMALLOCATOR_FREE
864 } KSMETHOD_STREAMALLOCATOR
;
867 #define KSEVENTSETID_StreamAllocator
871 KSEVENT_STREAMALLOCATOR_INTERNAL_FREEFRAME
,
872 KSEVENT_STREAMALLOCATOR_FREEFRAME
873 } KSEVENT_STREAMALLOCATOR
;
876 /* ===============================================================
878 Properties/Methods/Events
881 #define KSPROPSETID_StreamInterface \
882 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
886 KSPROPERTY_STREAMINTERFACE_HEADERSIZE
887 } KSPROPERTY_STREAMINTERFACE
;
890 /* ===============================================================
892 Properties/Methods/Events
895 #define STATIC_KSPROPSETID_Topology\
896 0x720D4AC0L, 0x7533, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
897 DEFINE_GUIDSTRUCT("720D4AC0-7533-11D0-A5D6-28DB04C10000", KSPROPSETID_Topology
);
898 #define KSPROPSETID_Topology DEFINE_GUIDNAMED(KSPROPSETID_Topology)
901 KSPROPERTY_TOPOLOGY_CATEGORIES
,
902 KSPROPERTY_TOPOLOGY_NODES
,
903 KSPROPERTY_TOPOLOGY_CONNECTIONS
,
904 KSPROPERTY_TOPOLOGY_NAME
905 } KSPROPERTY_TOPOLOGY
;
907 /* ===============================================================
908 Property Sets for audio drivers - TODO
911 #define STATIC_KSPROPTYPESETID_General \
912 0x97E99BA0L, 0xBDEA, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
913 DEFINE_GUIDSTRUCT("97E99BA0-BDEA-11CF-A5D6-28DB04C10000", KSPROPTYPESETID_General
);
914 #define KSPROPTYPESETID_General DEFINE_GUIDNAMED(KSPROPTYPESETID_General)
917 KSPROPERTY_AC3_ALTERNATE_AUDIO
918 KSPROPERTY_AC3_BIT_STREAM_MODE
919 KSPROPERTY_AC3_DIALOGUE_LEVEL
920 KSPROPERTY_AC3_DOWNMIX
921 KSPROPERTY_AC3_ERROR_CONCEALMENT
922 KSPROPERTY_AC3_LANGUAGE_CODE
923 KSPROPERTY_AC3_ROOM_TYPE
926 #define KSPROPSETID_Acoustic_Echo_Cancel
929 KSPROPERTY_AEC_NOISE_FILL_ENABLE
930 KSPROPERTY_AEC_STATUS
934 KSPROPERTY_AUDIO_3D_INTERFACE
936 KSPROPERTY_AUDIO_ALGORITHM_INSTANCE
937 KSPROPERTY_AUDIO_BASS
938 KSPROPERTY_AUDIO_BASS_BOOST
939 KSPROPERTY_AUDIO_CHANNEL_CONFIG
940 KSPROPERTY_AUDIO_CHORUS_LEVEL
941 KSPROPERTY_AUDIO_COPY_PROTECTION
942 KSPROPERTY_AUDIO_CPU_RESOURCES
943 KSPROPERTY_AUDIO_DELAY
944 KSPROPERTY_AUDIO_DEMUX_DEST
945 KSPROPERTY_AUDIO_DEV_SPECIFIC
946 KSPROPERTY_AUDIO_DYNAMIC_RANGE
947 KSPROPERTY_AUDIO_DYNAMIC_SAMPLING_RATE
948 KSPROPERTY_AUDIO_EQ_BANDS
949 KSPROPERTY_AUDIO_EQ_LEVEL
950 KSPROPERTY_AUDIO_FILTER_STATE
951 KSPROPERTY_AUDIO_LATENCY
952 KSPROPERTY_AUDIO_LOUDNESS
953 KSPROPERTY_AUDIO_MANUFACTURE_GUID
955 KSPROPERTY_AUDIO_MIX_LEVEL_CAPS
956 KSPROPERTY_AUDIO_MIX_LEVEL_TABLE
957 KSPROPERTY_AUDIO_MUTE
958 KSPROPERTY_AUDIO_MUX_SOURCE
959 KSPROPERTY_AUDIO_NUM_EQ_BANDS
960 KSPROPERTY_AUDIO_PEAKMETER
961 KSPROPERTY_AUDIO_POSITION
962 KSPROPERTY_AUDIO_PREFERRED_STATUS
963 KSPROPERTY_AUDIO_PRODUCT_GUID
964 KSPROPERTY_AUDIO_QUALITY
965 KSPROPERTY_AUDIO_REVERB_LEVEL
966 KSPROPERTY_AUDIO_SAMPLING_RATE
967 KSPROPERTY_AUDIO_STEREO_ENHANCE
968 KSPROPERTY_AUDIO_STEREO_SPEAKER_GEOMETRY
969 KSPROPERTY_AUDIO_SURROUND_ENCODE
970 KSPROPERTY_AUDIO_TREBLE
971 KSPROPERTY_AUDIO_VOLUMELEVEL
972 KSPROPERTY_AUDIO_WIDE_MODE
973 KSPROPERTY_AUDIO_WIDENESS
976 #define KSPROPSETID_AudioGfx
978 KSPROPERTY_AUDIOGFX_CAPTURETARGETDEVICEID
979 KSPROPERTY_AUDIOGFX_RENDERTARGETDEVICEID
982 #define KSPROPSETID_DirectSound3DBuffer
984 KSPROPERTY_DIRECTSOUND3DBUFFER_ALL
985 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEANGLES
986 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEORIENTATION
987 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEOUTSIDEVOLUME
988 KSPROPERTY_DIRECTSOUND3DBUFFER_MAXDISTANCE
989 KSPROPERTY_DIRECTSOUND3DBUFFER_MINDISTANCE
990 KSPROPERTY_DIRECTSOUND3DBUFFER_MODE
991 KSPROPERTY_DIRECTSOUND3DBUFFER_POSITION
992 KSPROPERTY_DIRECTSOUND3DBUFFER_VELOCITY
995 #define KSPROPSETID_DirectSound3DListener
997 KSPROPERTY_DIRECTSOUND3DLISTENER_ALL
998 KSPROPERTY_DIRECTSOUND3DLISTENER_ALLOCATION
999 KSPROPERTY_DIRECTSOUND3DLISTENER_BATCH
1000 KSPROPERTY_DIRECTSOUND3DLISTENER_DISTANCEFACTOR
1001 KSPROPERTY_DIRECTSOUND3DLISTENER_DOPPLERFACTOR
1002 KSPROPERTY_DIRECTSOUND3DLISTENER_ORIENTATION
1003 KSPROPERTY_DIRECTSOUND3DLISTENER_POSITION
1004 KSPROPERTY_DIRECTSOUND3DLISTENER_ROLLOFFFACTOR
1005 KSPROPERTY_DIRECTSOUND3DLISTENER_VELOCITY
1008 #define KSPROPSETID_Hrtf3d
1010 KSPROPERTY_HRTF3D_FILTER_FORMAT
1011 KSPROPERTY_HRTF3D_INITIALIZE
1012 KSPROPERTY_HRTF3D_PARAMS
1015 #define KSPROPSETID_Itd3d
1017 KSPROPERTY_ITD3D_PARAMS
1020 #define KSPROPSETID_TopologyNode
1022 KSPROPERTY_TOPOLOGYNODE_ENABLE
1023 KSPROPERTY_TOPOLOGYNODE_RESET
1027 /* ===============================================================
1031 KSNODETYPE_3D_EFFECTS
1032 KSNODETYPE_ACOUSTIC_ECHO_CANCEL
1039 KSNODETYPE_DEV_SPECIFIC
1041 KSNODETYPE_DMSYNTH_CAPS
1042 KSNODETYPE_DRM_DESCRAMBLE
1043 KSNODETYPE_EQUALIZER
1047 KSNODETYPE_PEAKMETER
1048 KSNODETYPE_PROLOGIC_DECODER
1049 KSNODETYPE_PROLOGIC_ENCODER
1052 KSNODETYPE_STEREO_ENHANCE
1053 KSNODETYPE_STEREO_WIDE
1058 KSNODETYPE_SYNTHESIZER
1064 typedef PVOID KSDEVICE_HEADER
,
1071 /* ===============================================================
1075 #define KSMETHOD_TYPE_NONE 0x00000000
1076 #define KSMETHOD_TYPE_READ 0x00000001
1077 #define KSMETHOD_TYPE_WRITE 0x00000002
1078 #define KSMETHOD_TYPE_MODIFY 0x00000003
1079 #define KSMETHOD_TYPE_SOURCE 0x00000004
1080 #define KSMETHOD_TYPE_SEND 0x00000001
1081 #define KSMETHOD_TYPE_SETSUPPORT 0x00000100
1082 #define KSMETHOD_TYPE_BASICSUPPORT 0x00000200
1085 /* ===============================================================
1089 #define KSPROPERTY_TYPE_GET 0x00000001
1090 #define KSPROPERTY_TYPE_SET 0x00000002
1091 #define KSPROPERTY_TYPE_SETSUPPORT 0x00000100
1092 #define KSPROPERTY_TYPE_BASICSUPPORT 0x00000200
1093 #define KSPROPERTY_TYPE_RELATIONS 0x00000400
1094 #define KSPROPERTY_TYPE_SERIALIZESET 0x00000800
1095 #define KSPROPERTY_TYPE_UNSERIALIZESET 0x00001000
1096 #define KSPROPERTY_TYPE_SERIALIZERAW 0x00002000
1097 #define KSPROPERTY_TYPE_UNSERIALIZERAW 0x00004000
1098 #define KSPROPERTY_TYPE_SERIALIZESIZE 0x00008000
1099 #define KSPROPERTY_TYPE_DEFAULT_VALUES 0x00010000
1102 /* ===============================================================
1103 Topology Methods/Properties
1106 #define KSMETHOD_TYPE_TOPOLOGY 0x10000000
1107 #define KSPROPERTY_TYPE_TOPOLOGY 0x10000000
1110 #define DEFINE_KS_GUID(GA,GB,GC,GD,GE,GF,GG,GH,GI,GJ,GK) \
1111 DEFINE_GUID(??, 0x#GA#L, 0xGB, 0xGC, 0xGD, 0xGE, 0xGF, 0xGG, 0xGH, 0xGI, 0xGJ, 0xGK) \
1112 "GA-GB-GC-GDGE-GFGGGHGIGJGK"
1115 /* ===============================================================
1118 BRIDGE - 0x085AFF00L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1119 CAPTURE - 0x65E8773DL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1120 RENDER - 0x65E8773EL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1121 MIXER - 0xAD809C00L, 0x7B88, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1122 SPLITTER - 0x0A4252A0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1123 DATACOMPRESSOR - 0x1E84C900L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1124 DATADECOMPRESSOR - 0x2721AE20L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1125 DATATRANSFORM - 0x2EB07EA0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1126 COMMUNICATIONSTRANSFORM - 0xCF1DDA2CL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1127 INTERFACETRANSFORM - 0xCF1DDA2DL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1128 MEDIUMTRANSFORM - 0xCF1DDA2EL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1129 FILESYSTEM - 0x760FED5EL, 0x9357, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1130 CLOCK - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1131 PROXY - 0x97EBAACAL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1132 QUALITY - 0x97EBAACBL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1135 /* ===============================================================
1136 KSNAME GUIDs (defined also as KSSTRING_Xxx L"{...}"
1138 Filter - 0x9b365890L, 0x165f, 0x11d0, 0xa1, 0x95, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
1139 Pin - 0x146F1A80L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1140 Clock - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1141 Allocator - 0x642F5D00L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1142 TopologyNode - 0x0621061AL, 0xEE75, 0x11D0, 0xB9, 0x15, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1145 /* ===============================================================
1148 Standard - 0x1A8766A0L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1149 FileIo - 0x8C6F932CL, 0xE771, 0x11D0, 0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1152 /* ===============================================================
1155 Standard - 0x4747B320L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1158 /* ===============================================================
1161 General - 0x1464EDA5L, 0x6A8F, 0x11D1, 0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1162 StreamIo - 0x65D003CAL, 0x1523, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1163 MediaSeeking - 0xEE904F0CL, 0xD09B, 0x11D0, 0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1164 Topology - 0x720D4AC0L, 0x7533, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1165 GM - 0xAF627536L, 0xE719, 0x11D2, 0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D
1166 Quality - 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1167 Connection - 0x1D58C920L, 0xAC9B, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1170 /* ===============================================================
1171 StreamAllocator Sets
1173 Event set - 0x75d95571L, 0x073c, 0x11d0, 0xa1, 0x61, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
1174 Method set - 0xcf6e4341L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
1175 Property set - 0xcf6e4342L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
1178 /* ===============================================================
1179 StreamInterface Sets
1181 Property set - 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
1184 /* ===============================================================
1187 Property set - 0xDF12A4C0L, 0xAC17, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1188 Event sets - 0x364D8E20L, 0x62C7, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1191 /* ===============================================================
1194 Event set - 0x7f4bcbe0L, 0x9ea5, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00
1197 /* ===============================================================
1200 KSTIME_FORMAT_NONE (null guid)
1201 FRAME - 0x7b785570L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1202 BYTE - 0x7b785571L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1203 SAMPLE - 0x7b785572L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1204 FIELD - 0x7b785573L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1205 MEDIA_TIME - 0x7b785574L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1208 /* ===============================================================
1218 #define STATIC_KSDATAFORMAT_SPECIFIER_NONE\
1219 0x0F6417D6L, 0xC318, 0x11D0, {0xA4, 0x3F, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
1220 DEFINE_GUIDSTRUCT("0F6417D6-C318-11D0-A43F-00A0C9223196", KSDATAFORMAT_SPECIFIER_NONE
);
1221 #define KSDATAFORMAT_SPECIFIER_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_NONE)
1224 /* ===============================================================
1227 WILDCARD, DONT_CARE = NULL
1228 SYSTEM - 0x091bb638L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1229 USER - 0x8cb0fc28L, 0x7893, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1230 KERNEL_PAGED - 0xd833f8f8L, 0x7894, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1231 KERNEL_NONPAGED - 0x4a6d5fc4L, 0x7895, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1232 DEVICE_UNKNOWN - 0x091bb639L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1235 /* ===============================================================
1237 (values have been checked)
1242 #define DEFINE_KSPROPERTY_ITEM(PropertyId, GetHandler,\
1246 Values, RelationsCount, Relations, SupportHandler,\
1249 PropertyId, {(PFNKSHANDLER)GetHandler}, MinProperty, MinData,\
1250 {(PFNKSHANDLER)SetHandler},\
1251 (PKSPROPERTY_VALUES)Values, RelationsCount, (PKSPROPERTY)Relations,\
1252 (PFNKSHANDLER)SupportHandler, (ULONG)SerializedSize\
1257 #define DEFINE_KSPROPERTY_ITEM(PropertyId, GetHandler,\
1261 Values, RelationsCount, Relations, SupportHandler,\
1264 PropertyId, (PFNKSHANDLER)GetHandler, MinProperty, MinData,\
1265 (PFNKSHANDLER)SetHandler,\
1266 (PKSPROPERTY_VALUES)Values, RelationsCount, (PKSPROPERTY)Relations,\
1267 (PFNKSHANDLER)SupportHandler, (ULONG)SerializedSize\
1276 KsObjectTypeFilterFactory
,
1287 } KSSTATE
, *PKSSTATE
;
1291 KSTARGET_STATE_DISABLED
,
1292 KSTARGET_STATE_ENABLED
1307 KSEVENTS_FMUTEXUNSAFE
,
1310 } KSEVENTS_LOCKTYPE
;
1314 KSDEGRADE_STANDARD_SIMPLE
,
1315 KSDEGRADE_STANDARD_QUALITY
,
1316 KSDEGRADE_STANDARD_COMPUTATION
,
1317 KSDEGRADE_STANDARD_SKIP
1318 } KSDEGRADE_STANDARD
;
1322 KSPIN_DATAFLOW_IN
= 1,
1324 } KSPIN_DATAFLOW
, *PKSPIN_DATAFLOW
;
1328 KSPIN_COMMUNICATION_NONE
,
1329 KSPIN_COMMUNICATION_SINK
,
1330 KSPIN_COMMUNICATION_SOURCE
,
1331 KSPIN_COMMUNICATION_BOTH
,
1332 KSPIN_COMMUNICATION_BRIDGE
1333 } KSPIN_COMMUNICATION
, *PKSPIN_COMMUNICATION
;
1339 } KSLIST_ENTRY_LOCATION
;
1343 KsStackCopyToNewLocation
,
1344 KsStackReuseCurrentLocation
,
1345 KsStackUseNewLocation
1352 KsAcquireOnlySingleItem
,
1353 KsAcquireAndRemoveOnlySingleItem
1354 } KSIRP_REMOVAL_OPERATION
;
1358 KsInvokeOnSuccess
= 1,
1359 KsInvokeOnError
= 2,
1360 KsInvokeOnCancel
= 4
1361 } KSCOMPLETION_INVOCATION
;
1364 #if defined(_NTDDK_)
1366 typedef NTSTATUS (NTAPI
*PFNKSCONTEXT_DISPATCH
)(
1371 #if defined(_NTDDK_) && !defined(__wtypes_h__)
1401 VT_USERDEFINED
= 29,
1408 VT_STREAMED_OBJECT
= 68,
1409 VT_STORED_OBJECT
= 69,
1410 VT_BLOB_OBJECT
= 70,
1416 VT_RESERVED
= 0x8000,
1417 VT_ILLEGAL
= 0xffff,
1418 VT_ILLEGALMASKED
= 0xfff,
1423 #define STATIC_KSDATAFORMAT_TYPE_WILDCARD STATIC_GUID_NULL
1424 #define KSDATAFORMAT_TYPE_WILDCARD GUID_NULL
1426 #define STATIC_KSDATAFORMAT_SUBTYPE_WILDCARD STATIC_GUID_NULL
1427 #define KSDATAFORMAT_SUBTYPE_WILDCARD GUID_NULL
1429 #define STATIC_KSDATAFORMAT_SPECIFIER_WILDCARD STATIC_GUID_NULL
1430 #define KSDATAFORMAT_SPECIFIER_WILDCARD GUID_NULL
1432 /* ===============================================================
1441 } KS_FRAMING_RANGE
, *PKS_FRAMING_RANGE
;
1445 KS_FRAMING_RANGE Range
;
1446 ULONG InPlaceWeight
;
1447 ULONG NotInPlaceWeight
;
1448 } KS_FRAMING_RANGE_WEIGHTED
, *PKS_FRAMING_RANGE_WEIGHTED
;
1458 ULONG FileAlignment
;
1459 ULONG MemoryTypeWeight
;
1460 KS_FRAMING_RANGE PhysicalRange
;
1461 KS_FRAMING_RANGE_WEIGHTED FramingRange
;
1462 } KS_FRAMING_ITEM
, *PKS_FRAMING_ITEM
;
1466 ULONG RatioNumerator
;
1467 ULONG RatioDenominator
;
1468 ULONG RatioConstantMargin
;
1469 } KS_COMPRESSION
, *PKS_COMPRESSION
;
1472 /* ===============================================================
1476 #define KSPRIORITY_LOW 0x00000001
1477 #define KSPRIORITY_NORMAL 0x40000000
1478 #define KSPRIORITY_HIGH 0x80000000
1479 #define KSPRIORITY_EXCLUSIVE 0xFFFFFFFF
1483 ULONG PriorityClass
;
1484 ULONG PrioritySubClass
;
1485 } KSPRIORITY
, *PKSPRIORITY
;
1488 /* ===============================================================
1490 http://www.osronline.com/DDKx/stream/ks-struct_494j.htm
1492 #if defined(_NTDDK_)
1495 PDRIVER_DISPATCH DeviceIoControl
;
1496 PDRIVER_DISPATCH Read
;
1497 PDRIVER_DISPATCH Write
;
1498 PDRIVER_DISPATCH Flush
;
1499 PDRIVER_DISPATCH Close
;
1500 PDRIVER_DISPATCH QuerySecurity
;
1501 PDRIVER_DISPATCH SetSecurity
;
1502 PFAST_IO_DEVICE_CONTROL FastDeviceIoControl
;
1503 PFAST_IO_READ FastRead
;
1504 PFAST_IO_WRITE FastWrite
;
1505 } KSDISPATCH_TABLE
, *PKSDISPATCH_TABLE
;
1508 #define KSCREATE_ITEM_IRP_STORAGE(Irp) (*(PKSOBJECT_CREATE_ITEM*)&(Irp)->Tail.Overlay.DriverContext[0])
1509 #define KSEVENT_SET_IRP_STORAGE(Irp) (*(const KSEVENT_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1510 #define KSEVENT_ITEM_IRP_STORAGE(Irp) (*(const KSEVENT_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1511 #define KSEVENT_ENTRY_IRP_STORAGE(Irp) (*(PKSEVENT_ENTRY*)&(Irp)->Tail.Overlay.DriverContext[0])
1512 #define KSMETHOD_SET_IRP_STORAGE(Irp) (*(const KSMETHOD_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1513 #define KSMETHOD_ITEM_IRP_STORAGE(Irp) (*(const KSMETHOD_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1514 #define KSMETHOD_TYPE_IRP_STORAGE(Irp) (*(ULONG_PTR*)(&(Irp)->Tail.Overlay.DriverContext[2]))
1515 #define KSQUEUE_SPINLOCK_IRP_STORAGE(Irp) (*(PKSPIN_LOCK*)&(Irp)->Tail.Overlay.DriverContext[1])
1516 #define KSPROPERTY_SET_IRP_STORAGE(Irp) (*(const KSPROPERTY_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1517 #define KSPROPERTY_ITEM_IRP_STORAGE(Irp) (*(const KSPROPERTY_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1518 #define KSPROPERTY_ATTRIBUTES_IRP_STORAGE(Irp) (*(PKSATTRIBUTE_LIST*)&(Irp)->Tail.Overlay.DriverContext[2])
1522 (NTAPI
*PFNREFERENCEDEVICEOBJECT
)(
1528 (NTAPI
*PFNDEREFERENCEDEVICEOBJECT
)(
1534 (NTAPI
*PFNQUERYREFERENCESTRING
)(
1536 IN OUT PWCHAR
*String
1541 INTERFACE Interface
;
1542 PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject
;
1543 PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject
;
1544 PFNQUERYREFERENCESTRING QueryReferenceString
;
1545 } BUS_INTERFACE_REFERENCE
, *PBUS_INTERFACE_REFERENCE
;
1550 ULONG ReferenceCount
;
1551 KSPIN_LOCK AccessLock
;
1552 } KSDPC_ITEM
, *PKSDPC_ITEM
;
1557 LIST_ENTRY BufferList
;
1558 } KSBUFFER_ITEM
, *PKSBUFFER_ITEM
;
1570 } KSCOMPONENTID
, *PKSCOMPONENTID
;
1572 /* ===============================================================
1580 } KSPROPERTY_SERIALHDR
, *PKSPROPERTY_SERIALHDR
;
1584 KSIDENTIFIER PropTypeSet
;
1586 ULONG PropertyLength
;
1587 } KSPROPERTY_SERIAL
, *PKSPROPERTY_SERIAL
;
1596 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1603 ULONG UnsignedMinimum
;
1604 ULONG UnsignedMaximum
;
1605 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1611 } KSPROPERTY_BOUNDS_LONG
, *PKSPROPERTY_BOUNDS_LONG
;
1616 LONGLONG SignedMinimum
;
1617 LONGLONG SignedMaximum
;
1618 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1625 #if defined(_NTDDK_)
1626 ULONGLONG UnsignedMinimum
;
1627 ULONGLONG UnsignedMaximum
;
1629 DWORDLONG UnsignedMinimum
;
1630 DWORDLONG UnsignedMaximum
;
1632 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1637 } KSPROPERTY_BOUNDS_LONGLONG
, *PKSPROPERTY_BOUNDS_LONGLONG
;
1642 ULONG DescriptionSize
;
1643 KSIDENTIFIER PropTypeSet
;
1644 ULONG MembersListCount
;
1646 } KSPROPERTY_DESCRIPTION
, *PKSPROPERTY_DESCRIPTION
;
1654 } KSPROPERTY_MEMBERSHEADER
, *PKSPROPERTY_MEMBERSHEADER
;
1657 KSPROPERTY_MEMBERSHEADER MembersHeader
;
1658 const VOID
* Members
;
1659 } KSPROPERTY_MEMBERSLIST
, *PKSPROPERTY_MEMBERSLIST
;
1661 #define KSPROPERTY_MEMBER_RANGES 0x00000001
1662 #define KSPROPERTY_MEMBER_STEPPEDRANGES 0x00000002
1663 #define KSPROPERTY_MEMBER_VALUES 0x00000003
1665 #define KSPROPERTY_MEMBER_FLAG_DEFAULT 0x00000001
1666 #if (NTDDI_VERSION >= NTDDI_WINXP)
1667 #define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_MULTICHANNEL 0x00000002
1668 #define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_UNIFORM 0x00000004
1673 KSIDENTIFIER PropTypeSet
;
1674 ULONG MembersListCount
;
1675 const KSPROPERTY_MEMBERSLIST
* MembersList
;
1676 } KSPROPERTY_VALUES
, *PKSPROPERTY_VALUES
;
1678 #if defined(_NTDDK_)
1679 typedef NTSTATUS (NTAPI
*PFNKSHANDLER
)(
1681 IN PKSIDENTIFIER Request
,
1689 PFNKSHANDLER GetPropertyHandler
;
1690 BOOLEAN GetSupported
;
1695 PFNKSHANDLER SetPropertyHandler
;
1696 BOOLEAN SetSupported
;
1698 const KSPROPERTY_VALUES
* Values
;
1699 ULONG RelationsCount
;
1700 const KSPROPERTY
* Relations
;
1701 PFNKSHANDLER SupportHandler
;
1702 ULONG SerializedSize
;
1703 } KSPROPERTY_ITEM
, *PKSPROPERTY_ITEM
;
1708 (NTAPI
*PFNKSFASTHANDLER
)(
1709 IN PFILE_OBJECT FileObject
,
1710 IN PKSIDENTIFIER Request
,
1711 IN ULONG RequestLength
,
1713 IN ULONG DataLength
,
1714 OUT PIO_STATUS_BLOCK IoStatus
1720 PFNKSFASTHANDLER GetPropertyHandler
;
1721 BOOLEAN GetSupported
;
1724 PFNKSFASTHANDLER SetPropertyHandler
;
1725 BOOLEAN SetSupported
;
1728 } KSFASTPROPERTY_ITEM
, *PKSFASTPROPERTY_ITEM
;
1733 ULONG PropertiesCount
;
1734 const KSPROPERTY_ITEM
* PropertyItem
;
1736 const KSFASTPROPERTY_ITEM
* FastIoTable
;
1737 } KSPROPERTY_SET
, *PKSPROPERTY_SET
;
1743 ULONG SteppingDelta
;
1745 KSPROPERTY_BOUNDS_LONG Bounds
;
1746 } KSPROPERTY_STEPPING_LONG
, *PKSPROPERTY_STEPPING_LONG
;
1750 #if defined(_NTDDK_)
1751 ULONGLONG SteppingDelta
;
1753 DWORDLONG SteppingDelta
;
1755 KSPROPERTY_BOUNDS_LONGLONG Bounds
;
1756 } KSPROPERTY_STEPPING_LONGLONG
, *PKSPROPERTY_STEPPING_LONGLONG
;
1758 /* ===============================================================
1766 ULONG RequirementsFlags
;
1768 #if defined(_NTDDK_)
1775 ULONG FileAlignment
;
1777 } KSALLOCATOR_FRAMING
, *PKSALLOCATOR_FRAMING
;
1783 KS_COMPRESSION OutputCompression
;
1785 KS_FRAMING_ITEM FramingItem
[1];
1786 } KSALLOCATOR_FRAMING_EX
, *PKSALLOCATOR_FRAMING_EX
;
1788 #define KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER 0x00000001
1789 #define KSALLOCATOR_REQUIREMENTF_SYSTEM_MEMORY 0x00000002
1790 #define KSALLOCATOR_REQUIREMENTF_FRAME_INTEGRITY 0x00000004
1791 #define KSALLOCATOR_REQUIREMENTF_MUST_ALLOCATE 0x00000008
1792 #define KSALLOCATOR_REQUIREMENTF_PREFERENCES_ONLY 0x80000000
1794 #define KSALLOCATOR_OPTIONF_COMPATIBLE 0x00000001
1795 #define KSALLOCATOR_OPTIONF_SYSTEM_MEMORY 0x00000002
1796 #define KSALLOCATOR_OPTIONF_VALID 0x00000003
1798 #define KSALLOCATOR_FLAG_PARTIAL_READ_SUPPORT 0x00000010
1799 #define KSALLOCATOR_FLAG_DEVICE_SPECIFIC 0x00000020
1800 #define KSALLOCATOR_FLAG_CAN_ALLOCATE 0x00000040
1801 #define KSALLOCATOR_FLAG_INSIST_ON_FRAMESIZE_RATIO 0x00000080
1803 /* ===============================================================
1812 } KSQUALITY
, *PKSQUALITY
;
1816 HANDLE QualityManager
;
1818 } KSQUALITY_MANAGER
, *PKSQUALITY_MANAGER
;
1822 LONGLONG PresentationStart
;
1824 KSPIN_INTERFACE Interface
;
1831 KSPROPERTY Property
;
1833 } KSRATE_CAPABILITY
, *PKSRATE_CAPABILITY
;
1837 LONGLONG Granularity
;
1839 } KSRESOLUTION
, *PKSRESOLUTION
;
1843 ULONG NotificationType
;
1847 ULONG_PTR Reserved
[2];
1854 #if defined(_NTDDK_)
1857 KPRIORITY Increment
;
1862 KPRIORITY Increment
;
1867 ULONG ReferenceCount
;
1871 PWORK_QUEUE_ITEM WorkQueueItem
;
1872 WORK_QUEUE_TYPE WorkQueueType
;
1876 PWORK_QUEUE_ITEM WorkQueueItem
;
1877 PKSWORKER KsWorkerObject
;
1883 LONG_PTR Alignment
[2];
1886 } KSEVENTDATA
, *PKSEVENTDATA
;
1888 #define KSEVENTF_EVENT_HANDLE 0x00000001
1889 #define KSEVENTF_SEMAPHORE_HANDLE 0x00000002
1890 #if defined(_NTDDK_)
1891 #define KSEVENTF_EVENT_OBJECT 0x00000004
1892 #define KSEVENTF_SEMAPHORE_OBJECT 0x00000008
1893 #define KSEVENTF_DPC 0x00000010
1894 #define KSEVENTF_WORKITEM 0x00000020
1895 #define KSEVENTF_KSWORKITEM 0x00000080
1899 #define KSEVENT_TYPE_ENABLE 0x00000001
1900 #define KSEVENT_TYPE_ONESHOT 0x00000002
1901 #define KSEVENT_TYPE_ENABLEBUFFERED 0x00000004
1902 #define KSEVENT_TYPE_SETSUPPORT 0x00000100
1903 #define KSEVENT_TYPE_BASICSUPPORT 0x00000200
1904 #define KSEVENT_TYPE_QUERYBUFFER 0x00000400
1906 #define KSEVENT_TYPE_TOPOLOGY 0x10000000
1913 HANDLE ObjectHandle
;
1914 PVOID ObjectPointer
;
1918 KSEVENTDATA EventData
;
1919 } KSRELATIVEEVENT
, *PKSRELATIVEEVENT
;
1921 #define KSRELATIVEEVENT_FLAG_HANDLE 0x00000001
1922 #define KSRELATIVEEVENT_FLAG_POINTER 0x00000002
1924 /* ===============================================================
1930 KSEVENTDATA EventData
;
1932 } KSEVENT_TIME_MARK
, *PKSEVENT_TIME_MARK
;
1935 KSEVENTDATA EventData
;
1938 } KSEVENT_TIME_INTERVAL
, *PKSEVENT_TIME_INTERVAL
;
1943 } KSINTERVAL
, *PKSINTERVAL
;
1957 LONGLONG SystemTime
;
1958 } KSCORRELATED_TIME
, *PKSCORRELATED_TIME
;
1965 } KSFRAMETIME
, *PKSFRAMETIME
;
1968 /* ===============================================================
1972 typedef PVOID PKSDEFAULTCLOCK
;
1977 } KSCLOCK_CREATE
, *PKSCLOCK_CREATE
;
1979 #if defined(_NTDDK_)
1983 (FASTCALL
*PFNKSCLOCK_GETTIME
)(
1984 IN PFILE_OBJECT FileObject
1988 (FASTCALL
*PFNKSCLOCK_CORRELATEDTIME
)(
1989 IN PFILE_OBJECT FileObject
,
1990 OUT PLONGLONG SystemTime
);
1994 PFNKSCLOCK_GETTIME GetTime
;
1995 PFNKSCLOCK_GETTIME GetPhysicalTime
;
1996 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedTime
;
1997 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedPhysicalTime
;
1998 } KSCLOCK_FUNCTIONTABLE
, *PKSCLOCK_FUNCTIONTABLE
;
2001 #define DEFINE_KSPROPERTY_ITEM_CLOCK_TIME(Handler)\
2002 DEFINE_KSPROPERTY_ITEM(\
2003 KSPROPERTY_CLOCK_TIME,\
2005 sizeof(KSPROPERTY),\
2007 NULL, NULL, 0, NULL, NULL, 0)
2009 #define DEFINE_KSPROPERTY_ITEM_CLOCK_PHYSICALTIME(Handler)\
2010 DEFINE_KSPROPERTY_ITEM(\
2011 KSPROPERTY_CLOCK_PHYSICALTIME,\
2013 sizeof(KSPROPERTY),\
2015 NULL, NULL, 0, NULL, NULL, 0)
2017 #define DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDTIME(Handler)\
2018 DEFINE_KSPROPERTY_ITEM(\
2019 KSPROPERTY_CLOCK_CORRELATEDTIME,\
2021 sizeof(KSPROPERTY),\
2022 sizeof(KSCORRELATED_TIME),\
2023 NULL, NULL, 0, NULL, NULL, 0)
2025 #define DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDPHYSICALTIME(Handler)\
2026 DEFINE_KSPROPERTY_ITEM(\
2027 KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME,\
2029 sizeof(KSPROPERTY),\
2030 sizeof(KSCORRELATED_TIME),\
2031 NULL, NULL, 0, NULL, NULL, 0)
2033 #define DEFINE_KSPROPERTY_ITEM_CLOCK_RESOLUTION(Handler)\
2034 DEFINE_KSPROPERTY_ITEM(\
2035 KSPROPERTY_CLOCK_RESOLUTION,\
2037 sizeof(KSPROPERTY),\
2038 sizeof(KSRESOLUTION),\
2039 NULL, NULL, 0, NULL, NULL, 0)
2041 #define DEFINE_KSPROPERTY_ITEM_CLOCK_STATE(Handler)\
2042 DEFINE_KSPROPERTY_ITEM(\
2043 KSPROPERTY_CLOCK_STATE,\
2045 sizeof(KSPROPERTY),\
2047 NULL, NULL, 0, NULL, NULL, 0)
2049 #define DEFINE_KSPROPERTY_ITEM_CLOCK_FUNCTIONTABLE(Handler)\
2050 DEFINE_KSPROPERTY_ITEM(\
2051 KSPROPERTY_CLOCK_FUNCTIONTABLE,\
2053 sizeof(KSPROPERTY),\
2054 sizeof(KSCLOCK_FUNCTIONTABLE),\
2055 NULL, NULL, 0, NULL, NULL, 0)
2057 #define DEFINE_KSPROPERTY_CLOCKSET(ClockSet,\
2058 PropTime, PropPhysicalTime,\
2059 PropCorrelatedTime, PropCorrelatedPhysicalTime,\
2060 PropResolution, PropState, PropFunctionTable)\
2061 DEFINE_KSPROPERTY_TABLE(ClockSet) {\
2062 DEFINE_KSPROPERTY_ITEM_CLOCK_TIME(PropTime),\
2063 DEFINE_KSPROPERTY_ITEM_CLOCK_PHYSICALTIME(PropPhysicalTime),\
2064 DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDTIME(PropCorrelatedTime),\
2065 DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDPHYSICALTIME(PropCorrelatedPhysicalTime),\
2066 DEFINE_KSPROPERTY_ITEM_CLOCK_RESOLUTION(PropResolution),\
2067 DEFINE_KSPROPERTY_ITEM_CLOCK_STATE(PropState),\
2068 DEFINE_KSPROPERTY_ITEM_CLOCK_FUNCTIONTABLE(PropFunctionTable)\
2071 /* ===============================================================
2072 Objects ??? SORT ME!
2075 #define KSCREATE_ITEM_SECURITYCHANGED 0x1
2076 #define KSCREATE_ITEM_WILDCARD 0x2
2077 #define KSCREATE_ITEM_NOPARAMETERS 0x4
2078 #define KSCREATE_ITEM_FREEONSTOP 0x8
2082 PDRIVER_DISPATCH Create
;
2084 UNICODE_STRING ObjectClass
;
2085 PSECURITY_DESCRIPTOR SecurityDescriptor
;
2087 } KSOBJECT_CREATE_ITEM
, *PKSOBJECT_CREATE_ITEM
;
2091 ULONG CreateItemsCount
;
2092 PKSOBJECT_CREATE_ITEM CreateItemsList
;
2093 } KSOBJECT_CREATE
, *PKSOBJECT_CREATE
;
2095 typedef VOID (NTAPI
*PFNKSITEMFREECALLBACK
)(
2096 IN PKSOBJECT_CREATE_ITEM CreateItem
);
2104 } KSMULTIPLE_ITEM
, *PKSMULTIPLE_ITEM
;
2109 PKSEVENTDATA EventData
;
2111 } KSQUERYBUFFER
, *PKSQUERYBUFFER
;
2117 } KSERROR
, *PKSERROR
;
2119 /* ===============================================================
2122 #if defined(_NTDDK_)
2128 PFNKSHANDLER MethodHandler
;
2129 BOOLEAN MethodSupported
;
2133 PFNKSHANDLER SupportHandler
;
2135 } KSMETHOD_ITEM
, *PKSMETHOD_ITEM
;
2139 #define DEFINE_KSMETHOD_ITEM(MethodId, Flags,\
2141 MinMethod, MinData, SupportHandler)\
2143 MethodId, {(PFNKSHANDLER)MethodHandler}, MinMethod, MinData,\
2144 SupportHandler, Flags\
2149 #define DEFINE_KSMETHOD_ITEM(MethodId, Flags,\
2151 MinMethod, MinData, SupportHandler)\
2153 MethodId, (PFNKSHANDLER)MethodHandler, MinMethod, MinData,\
2154 SupportHandler, Flags\
2166 PFNKSFASTHANDLER MethodHandler
;
2167 BOOLEAN MethodSupported
;
2169 } KSFASTMETHOD_ITEM
, *PKSFASTMETHOD_ITEM
;
2171 #define DEFINE_KSFASTMETHOD_ITEM(MethodId, MethodHandler)\
2173 MethodId, (PFNKSFASTHANDLER)MethodHandler\
2181 const KSMETHOD_ITEM
* MethodItem
;
2183 const KSFASTMETHOD_ITEM
*FastIoTable
;
2184 } KSMETHOD_SET
, *PKSMETHOD_SET
;
2187 #define DEFINE_KSMETHOD_SET(Set,\
2201 /* ===============================================================
2207 KSPROPERTY Property
;
2210 } KSP_NODE
, *PKSP_NODE
;
2217 } KSM_NODE
, *PKSM_NODE
;
2224 } KSE_NODE
, *PKSE_NODE
;
2229 } KSNODE_CREATE
, *PKSNODE_CREATE
;
2232 /* ===============================================================
2235 typedef struct _KSEVENT_ENTRY KSEVENT_ENTRY
, *PKSEVENT_ENTRY
;
2237 #if defined(_NTDDK_)
2239 typedef NTSTATUS (NTAPI
*PFNKSADDEVENT
)(
2241 IN PKSEVENTDATA EventData
,
2242 IN
struct _KSEVENT_ENTRY
* EventEntry
);
2246 (NTAPI
*PFNKSREMOVEEVENT
)(
2247 IN PFILE_OBJECT FileObject
,
2248 IN
struct _KSEVENT_ENTRY
* EventEntry
2255 ULONG ExtraEntryData
;
2256 PFNKSADDEVENT AddHandler
;
2257 PFNKSREMOVEEVENT RemoveHandler
;
2258 PFNKSHANDLER SupportHandler
;
2259 } KSEVENT_ITEM
, *PKSEVENT_ITEM
;
2265 const KSEVENT_ITEM
* EventItem
;
2266 } KSEVENT_SET
, *PKSEVENT_SET
;
2268 struct _KSEVENT_ENTRY
2270 LIST_ENTRY ListEntry
;
2273 PKSDPC_ITEM DpcItem
;
2274 PKSBUFFER_ITEM BufferItem
;
2276 PKSEVENTDATA EventData
;
2277 ULONG NotificationType
;
2278 const KSEVENT_SET
* EventSet
;
2279 const KSEVENT_ITEM
* EventItem
;
2280 PFILE_OBJECT FileObject
;
2281 ULONG SemaphoreAdjustment
;
2287 /* ===============================================================
2291 #if defined(_NTDDK_)
2293 typedef struct _KSPIN KSPIN
, *PKSPIN
;
2294 typedef struct _KSSTREAM_POINTER KSSTREAM_POINTER
, *PKSSTREAM_POINTER
;
2295 typedef struct _KSSTREAM_POINTER_OFFSET KSSTREAM_POINTER_OFFSET
, *PKSSTREAM_POINTER_OFFSET
;
2296 typedef struct _KSMAPPING KSMAPPING
, *PKSMAPPING
;
2297 typedef struct _KSPROCESSPIN KSPROCESSPIN
, *PKSPROCESSPIN
;
2299 #define IOCTL_KS_HANDSHAKE CTL_CODE(FILE_DEVICE_KS, 0x007, METHOD_NEITHER, FILE_ANY_ACCESS)
2305 } KSHANDSHAKE
, *PKSHANDSHAKE
;
2309 (NTAPI
*PFNKSPINHANDSHAKE
)(
2317 (NTAPI
*PFNKSPINPOWER
)(
2319 IN DEVICE_POWER_STATE State
2324 (NTAPI
*PFNKSPINFRAMERETURN
)(
2326 IN PVOID Data OPTIONAL
,
2327 IN ULONG Size OPTIONAL
,
2328 IN PMDL Mdl OPTIONAL
,
2329 IN PVOID Context OPTIONAL
,
2335 (NTAPI
*PFNKSPINIRPCOMPLETION
)(
2342 (NTAPI
*PFNKSPINIRP
)(
2355 (NTAPI
*PFNKSPINVOID
)(
2361 (NTAPI
*PFNKSSTREAMPOINTER
)(
2362 IN PKSSTREAM_POINTER StreamPointer
2367 PKSATTRIBUTE
* Attributes
;
2368 } KSATTRIBUTE_LIST
, *PKSATTRIBUTE_LIST
;
2372 (NTAPI
*PFNKSPINSETDATAFORMAT
)(
2374 IN PKSDATAFORMAT OldFormat OPTIONAL
,
2375 IN PKSMULTIPLE_ITEM OldAttributeList OPTIONAL
,
2376 IN
const KSDATARANGE
* DataRange
,
2377 IN
const KSATTRIBUTE_LIST
* AttributeRange OPTIONAL
2382 (NTAPI
*PFNKSPINSETDEVICESTATE
)(
2385 IN KSSTATE FromState
2388 typedef struct _KSCLOCK_DISPATCH KSCLOCK_DISPATCH
, *PKSCLOCK_DISPATCH
;
2389 typedef struct _KSALLOCATOR_DISPATCH KSALLOCATOR_DISPATCH
, *PKSALLOCATOR_DISPATCH
;
2397 PFNKSPINSETDATAFORMAT SetDataFormat
;
2398 PFNKSPINSETDEVICESTATE SetDeviceState
;
2400 PFNKSPINVOID Disconnect
;
2401 const KSCLOCK_DISPATCH
* Clock
;
2402 const KSALLOCATOR_DISPATCH
* Allocator
;
2403 } KSPIN_DISPATCH
, *PKSPIN_DISPATCH
;
2407 (NTAPI
*PFNKSPINSETTIMER
)(
2410 IN LARGE_INTEGER DueTime
,
2416 (NTAPI
*PFNKSPINCANCELTIMER
)(
2423 (FASTCALL
*PFNKSPINCORRELATEDTIME
)(
2425 OUT PLONGLONG SystemTime
2430 (NTAPI
*PFNKSPINRESOLUTION
)(
2432 OUT PKSRESOLUTION Resolution
2435 struct _KSCLOCK_DISPATCH
{
2436 PFNKSPINSETTIMER SetTimer
;
2437 PFNKSPINCANCELTIMER CancelTimer
;
2438 PFNKSPINCORRELATEDTIME CorrelatedTime
;
2439 PFNKSPINRESOLUTION Resolution
;
2444 (NTAPI
*PFNKSPININITIALIZEALLOCATOR
)(
2446 IN PKSALLOCATOR_FRAMING AllocatorFraming
,
2450 typedef PVOID (NTAPI
*PFNKSDELETEALLOCATOR
)(
2453 typedef PVOID (NTAPI
*PFNKSDEFAULTALLOCATE
)(
2456 typedef PVOID (NTAPI
*PFNKSDEFAULTFREE
)(
2460 struct _KSALLOCATOR_DISPATCH
{
2461 PFNKSPININITIALIZEALLOCATOR InitializeAllocator
;
2462 PFNKSDELETEALLOCATOR DeleteAllocator
;
2463 PFNKSDEFAULTALLOCATE Allocate
;
2464 PFNKSDEFAULTFREE Free
;
2469 ULONG PropertySetsCount
;
2470 ULONG PropertyItemSize
;
2471 const KSPROPERTY_SET
* PropertySets
;
2472 ULONG MethodSetsCount
;
2473 ULONG MethodItemSize
;
2474 const KSMETHOD_SET
* MethodSets
;
2475 ULONG EventSetsCount
;
2476 ULONG EventItemSize
;
2477 const KSEVENT_SET
* EventSets
;
2478 #if !defined(_WIN64)
2481 } KSAUTOMATION_TABLE
, *PKSAUTOMATION_TABLE
;
2487 ULONG InterfacesCount
;
2488 const KSPIN_INTERFACE
* Interfaces
;
2490 const KSPIN_MEDIUM
* Mediums
;
2491 ULONG DataRangesCount
;
2492 const PKSDATARANGE
* DataRanges
;
2493 KSPIN_DATAFLOW DataFlow
;
2494 KSPIN_COMMUNICATION Communication
;
2495 const GUID
* Category
;
2500 ULONG ConstrainedDataRangesCount
;
2501 PKSDATARANGE
* ConstrainedDataRanges
;
2504 } KSPIN_DESCRIPTOR
, *PKSPIN_DESCRIPTOR
;
2508 (NTAPI
*PFNKSINTERSECTHANDLER
)(
2511 IN PKSDATARANGE DataRange
,
2512 OUT PVOID Data OPTIONAL
2517 (NTAPI
*PFNKSINTERSECTHANDLEREX
)(
2521 IN PKSDATARANGE DataRange
,
2522 IN PKSDATARANGE MatchingDataRange
,
2523 IN ULONG DataBufferSize
,
2524 OUT PVOID Data OPTIONAL
,
2530 const KSPIN_DISPATCH
* Dispatch
;
2531 const KSAUTOMATION_TABLE
* AutomationTable
;
2532 KSPIN_DESCRIPTOR PinDescriptor
;
2534 ULONG InstancesPossible
;
2535 ULONG InstancesNecessary
;
2536 const KSALLOCATOR_FRAMING_EX
* AllocatorFraming
;
2537 PFNKSINTERSECTHANDLEREX IntersectHandler
;
2538 } KSPIN_DESCRIPTOR_EX
, *PKSPIN_DESCRIPTOR_EX
;
2540 #define KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING 0x00000001
2541 #define KSFILTER_FLAG_CRITICAL_PROCESSING 0x00000002
2542 #define KSFILTER_FLAG_HYPERCRITICAL_PROCESSING 0x00000004
2543 #define KSFILTER_FLAG_RECEIVE_ZERO_LENGTH_SAMPLES 0x00000008
2544 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
2545 #define KSFILTER_FLAG_DENY_USERMODE_ACCESS 0x80000000
2549 #define KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING
2550 #define KSPIN_FLAG_CRITICAL_PROCESSING KSFILTER_FLAG_CRITICAL_PROCESSING
2551 #define KSPIN_FLAG_HYPERCRITICAL_PROCESSING KSFILTER_FLAG_HYPERCRITICAL_PROCESSING
2552 #define KSPIN_FLAG_ASYNCHRONOUS_PROCESSING 0x00000008
2553 #define KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING 0x00000010
2554 #define KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL 0x00000020
2555 #define KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING 0x00000040
2556 #define KSPIN_FLAG_ENFORCE_FIFO 0x00000080
2558 #define KSPIN_FLAG_GENERATE_MAPPINGS 0x00000100
2559 #define KSPIN_FLAG_DISTINCT_TRAILING_EDGE 0x00000200
2561 #define KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY 0x00010000
2562 #define KSPIN_FLAG_SPLITTER 0x00020000
2563 #define KSPIN_FLAG_USE_STANDARD_TRANSPORT 0x00040000
2564 #define KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT 0x00080000
2565 #define KSPIN_FLAG_FIXED_FORMAT 0x00100000
2566 #define KSPIN_FLAG_GENERATE_EOS_EVENTS 0x00200000
2567 #define KSPIN_FLAG_RENDERER (KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY|KSPIN_FLAG_GENERATE_EOS_EVENTS)
2568 #define KSPIN_FLAG_IMPLEMENT_CLOCK 0x00400000
2569 #define KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING 0x00800000
2570 #define KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE 0x01000000
2571 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
2572 #define KSPIN_FLAG_DENY_USERMODE_ACCESS 0x80000000
2577 const KSPIN_DESCRIPTOR_EX
* Descriptor
;
2581 KSPIN_COMMUNICATION Communication
;
2582 BOOLEAN ConnectionIsExternal
;
2583 KSPIN_INTERFACE ConnectionInterface
;
2584 KSPIN_MEDIUM ConnectionMedium
;
2585 KSPRIORITY ConnectionPriority
;
2586 PKSDATAFORMAT ConnectionFormat
;
2587 PKSMULTIPLE_ITEM AttributeList
;
2588 ULONG StreamHeaderSize
;
2589 KSPIN_DATAFLOW DataFlow
;
2590 KSSTATE DeviceState
;
2592 KSSTATE ClientState
;
2595 #define DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(Handler)\
2596 DEFINE_KSPROPERTY_ITEM(\
2597 KSPROPERTY_PIN_CINSTANCES,\
2600 sizeof(KSPIN_CINSTANCES),\
2601 NULL, NULL, 0, NULL, NULL, 0)
2603 #define DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(Handler)\
2604 DEFINE_KSPROPERTY_ITEM(\
2605 KSPROPERTY_PIN_CTYPES,\
2607 sizeof(KSPROPERTY),\
2609 NULL, NULL, 0, NULL, NULL, 0)
2611 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(Handler)\
2612 DEFINE_KSPROPERTY_ITEM(\
2613 KSPROPERTY_PIN_DATAFLOW,\
2616 sizeof(KSPIN_DATAFLOW),\
2617 NULL, NULL, 0, NULL, NULL, 0)
2619 #define DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(Handler)\
2620 DEFINE_KSPROPERTY_ITEM(\
2621 KSPROPERTY_PIN_DATARANGES,\
2625 NULL, NULL, 0, NULL, NULL, 0)
2627 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(Handler)\
2628 DEFINE_KSPROPERTY_ITEM(\
2629 KSPROPERTY_PIN_DATAINTERSECTION,\
2631 sizeof(KSP_PIN) + sizeof(KSMULTIPLE_ITEM),\
2633 NULL, NULL, 0, NULL, NULL, 0)
2635 #define DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(Handler)\
2636 DEFINE_KSPROPERTY_ITEM(\
2637 KSPROPERTY_PIN_INTERFACES,\
2641 NULL, NULL, 0, NULL, NULL, 0)
2643 #define DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(Handler)\
2644 DEFINE_KSPROPERTY_ITEM(\
2645 KSPROPERTY_PIN_MEDIUMS,\
2649 NULL, NULL, 0, NULL, NULL, 0)
2651 #define DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(Handler)\
2652 DEFINE_KSPROPERTY_ITEM(\
2653 KSPROPERTY_PIN_COMMUNICATION,\
2656 sizeof(KSPIN_COMMUNICATION),\
2657 NULL, NULL, 0, NULL, NULL, 0)
2659 #define DEFINE_KSPROPERTY_ITEM_PIN_GLOBALCINSTANCES(Handler)\
2660 DEFINE_KSPROPERTY_ITEM(\
2661 KSPROPERTY_PIN_GLOBALCINSTANCES,\
2664 sizeof(KSPIN_CINSTANCES),\
2665 NULL, NULL, 0, NULL, NULL, 0)
2667 #define DEFINE_KSPROPERTY_ITEM_PIN_NECESSARYINSTANCES(Handler)\
2668 DEFINE_KSPROPERTY_ITEM(\
2669 KSPROPERTY_PIN_NECESSARYINSTANCES,\
2673 NULL, NULL, 0, NULL, NULL, 0)
2675 #define DEFINE_KSPROPERTY_ITEM_PIN_PHYSICALCONNECTION(Handler)\
2676 DEFINE_KSPROPERTY_ITEM(\
2677 KSPROPERTY_PIN_PHYSICALCONNECTION,\
2681 NULL, NULL, 0, NULL, NULL, 0)
2683 #define DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(Handler)\
2684 DEFINE_KSPROPERTY_ITEM(\
2685 KSPROPERTY_PIN_CATEGORY,\
2689 NULL, NULL, 0, NULL, NULL, 0)
2691 #define DEFINE_KSPROPERTY_ITEM_PIN_NAME(Handler)\
2692 DEFINE_KSPROPERTY_ITEM(\
2693 KSPROPERTY_PIN_NAME,\
2697 NULL, NULL, 0, NULL, NULL, 0)
2699 #define DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(Handler)\
2700 DEFINE_KSPROPERTY_ITEM(\
2701 KSPROPERTY_PIN_CONSTRAINEDDATARANGES,\
2705 NULL, NULL, 0, NULL, NULL, 0)
2707 #define DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(Handler)\
2708 DEFINE_KSPROPERTY_ITEM(\
2709 KSPROPERTY_PIN_PROPOSEDATAFORMAT,\
2712 sizeof(KSDATAFORMAT),\
2713 (Handler), NULL, 0, NULL, NULL, 0)
2715 #define DEFINE_KSPROPERTY_PINSET(PinSet,\
2716 PropGeneral, PropInstances, PropIntersection)\
2717 DEFINE_KSPROPERTY_TABLE(PinSet) {\
2718 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
2719 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
2720 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
2721 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
2722 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
2723 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
2724 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
2725 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
2726 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
2727 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral)\
2730 #define DEFINE_KSPROPERTY_PINSETCONSTRAINED(PinSet,\
2731 PropGeneral, PropInstances, PropIntersection)\
2732 DEFINE_KSPROPERTY_TABLE(PinSet) {\
2733 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
2734 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
2735 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
2736 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
2737 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
2738 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
2739 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
2740 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
2741 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
2742 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral),\
2743 DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral)\
2756 #define DEFINE_KSPROPERTY_TABLE(tablename)\
2757 const KSPROPERTY_ITEM tablename[] =
2763 KSPIN_INTERFACE Interface
;
2764 KSPIN_MEDIUM Medium
;
2767 KSPRIORITY Priority
;
2768 } KSPIN_CONNECT
, *PKSPIN_CONNECT
;
2770 /* ===============================================================
2780 } KSTOPOLOGY_CONNECTION
, *PKSTOPOLOGY_CONNECTION
;
2784 ULONG CategoriesCount
;
2785 const GUID
* Categories
;
2786 ULONG TopologyNodesCount
;
2787 const GUID
* TopologyNodes
;
2788 ULONG TopologyConnectionsCount
;
2789 const KSTOPOLOGY_CONNECTION
* TopologyConnections
;
2790 const GUID
* TopologyNodesNames
;
2792 } KSTOPOLOGY
, *PKSTOPOLOGY
;
2795 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler)\
2796 DEFINE_KSPROPERTY_ITEM(\
2797 KSPROPERTY_TOPOLOGY_CATEGORIES,\
2799 sizeof(KSPROPERTY),\
2801 NULL, NULL, 0, NULL, NULL, 0)
2803 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler)\
2804 DEFINE_KSPROPERTY_ITEM(\
2805 KSPROPERTY_TOPOLOGY_NODES,\
2807 sizeof(KSPROPERTY),\
2809 NULL, NULL, 0, NULL, NULL, 0)
2811 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler)\
2812 DEFINE_KSPROPERTY_ITEM(\
2813 KSPROPERTY_TOPOLOGY_CONNECTIONS,\
2815 sizeof(KSPROPERTY),\
2817 NULL, NULL, 0, NULL, NULL, 0)
2819 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\
2820 DEFINE_KSPROPERTY_ITEM(\
2821 KSPROPERTY_TOPOLOGY_NAME,\
2825 NULL, NULL, 0, NULL, NULL, 0)
2827 #define DEFINE_KSPROPERTY_TOPOLOGYSET(TopologySet, Handler)\
2828 DEFINE_KSPROPERTY_TABLE(TopologySet) {\
2829 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler),\
2830 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler),\
2831 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler),\
2832 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\
2835 /* ===============================================================
2840 typedef void* UNKNOWN
;
2842 typedef PVOID (NTAPI
*PFNKSINITIALIZEALLOCATOR
)(
2843 IN PVOID InitialContext
,
2844 IN PKSALLOCATOR_FRAMING AllocatorFraming
,
2845 OUT PVOID
* Context
);
2847 #if defined(_NTDDK_)
2848 typedef NTSTATUS (NTAPI
*PFNKSALLOCATOR
)(
2850 IN ULONG BufferSize
,
2851 IN BOOLEAN InputOperation
);
2853 typedef NTSTATUS (NTAPI
*PFNKINTERSECTHANDLEREX
)(
2857 IN PKSDATARANGE DataRange
,
2858 IN PKSDATARANGE MatchingDataRange
,
2859 IN ULONG DataBufferSize
,
2860 OUT PVOID Data OPTIONAL
,
2861 OUT PULONG DataSize
);
2866 (NTAPI
*PFNALLOCATOR_ALLOCATEFRAME
)(
2867 IN PFILE_OBJECT FileObject
,
2873 (NTAPI
*PFNALLOCATOR_FREEFRAME
)(
2874 IN PFILE_OBJECT FileObject
,
2879 PFNALLOCATOR_ALLOCATEFRAME AllocateFrame
;
2880 PFNALLOCATOR_FREEFRAME FreeFrame
;
2881 } KSSTREAMALLOCATOR_FUNCTIONTABLE
, *PKSSTREAMALLOCATOR_FUNCTIONTABLE
;
2887 KSALLOCATOR_FRAMING Framing
;
2888 ULONG AllocatedFrames
;
2890 } KSSTREAMALLOCATOR_STATUS
, *PKSSTREAMALLOCATOR_STATUS
;
2894 KSALLOCATOR_FRAMING_EX Framing
;
2895 ULONG AllocatedFrames
;
2897 } KSSTREAMALLOCATOR_STATUS_EX
, *PKSSTREAMALLOCATOR_STATUS_EX
;
2902 ULONG TypeSpecificFlags
;
2903 KSTIME PresentationTime
;
2912 } KSSTREAM_HEADER
, *PKSSTREAM_HEADER
;
2914 #define KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT 0x00000001
2915 #define KSSTREAM_HEADER_OPTIONSF_PREROLL 0x00000002
2916 #define KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY 0x00000004
2917 #define KSSTREAM_HEADER_OPTIONSF_TYPECHANGED 0x00000008
2918 #define KSSTREAM_HEADER_OPTIONSF_TIMEVALID 0x00000010
2919 #define KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY 0x00000040
2920 #define KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE 0x00000080
2921 #define KSSTREAM_HEADER_OPTIONSF_DURATIONVALID 0x00000100
2922 #define KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM 0x00000200
2923 #define KSSTREAM_HEADER_OPTIONSF_BUFFEREDTRANSFER 0x00000400
2924 #define KSSTREAM_HEADER_OPTIONSF_VRAM_DATA_TRANSFER 0x00000800
2925 #define KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA 0x80000000
2927 /* ===============================================================
2930 #if defined(_NTDDK_)
2932 typedef struct _KSGATE KSGATE
, *PKSGATE
;
2945 IN PKSGATE Gate OPTIONAL
)
2947 while (Gate
&& (InterlockedIncrement(&Gate
->Count
) == 1))
2949 Gate
= Gate
->NextGate
;
2957 IN PKSGATE Gate OPTIONAL
)
2959 while (Gate
&& (InterlockedDecrement(&Gate
->Count
) == 0))
2961 Gate
= Gate
->NextGate
;
2968 KsGateGetStateUnsafe(
2972 return((BOOLEAN
)(Gate
->Count
> 0));
2978 KsGateCaptureThreshold(
2985 captured
= (BOOLEAN
)(InterlockedCompareExchange(&Gate
->Count
,0,1) == 1);
2989 KsGateTurnInputOff(Gate
->NextGate
);
3000 IN LONG InitialCount
,
3001 IN PKSGATE NextGate OPTIONAL
,
3002 IN BOOLEAN StateToPropagate
3006 Gate
->Count
= InitialCount
;
3007 Gate
->NextGate
= NextGate
;
3011 if (InitialCount
> 0)
3013 if (StateToPropagate
)
3015 KsGateTurnInputOn(NextGate
);
3020 if (!StateToPropagate
)
3022 KsGateTurnInputOff(NextGate
);
3031 KsGateInitializeAnd(
3033 IN PKSGATE NextOrGate OPTIONAL
)
3035 KsGateInitialize(AndGate
,1,NextOrGate
,TRUE
);
3043 IN PKSGATE NextAndGate OPTIONAL
)
3045 KsGateInitialize(OrGate
,0,NextAndGate
,FALSE
);
3051 KsGateAddOnInputToAnd(
3054 UNREFERENCED_PARAMETER (AndGate
);
3060 KsGateAddOffInputToAnd(
3063 KsGateTurnInputOff(AndGate
);
3069 KsGateRemoveOnInputFromAnd(
3072 UNREFERENCED_PARAMETER (AndGate
);
3078 KsGateRemoveOffInputFromAnd(
3081 KsGateTurnInputOn(AndGate
);
3087 KsGateAddOnInputToOr(
3090 KsGateTurnInputOn(OrGate
);
3096 KsGateAddOffInputToOr(
3099 UNREFERENCED_PARAMETER (OrGate
);
3105 KsGateRemoveOnInputFromOr(
3108 KsGateTurnInputOff(OrGate
);
3114 KsGateRemoveOffInputFromOr(
3117 UNREFERENCED_PARAMETER (OrGate
);
3127 if (KsGateGetStateUnsafe(AndGate
))
3129 KsGateRemoveOnInputFromOr(AndGate
->NextGate
);
3133 KsGateRemoveOffInputFromOr(AndGate
->NextGate
);
3144 if (KsGateGetStateUnsafe(OrGate
))
3146 KsGateRemoveOnInputFromAnd(OrGate
->NextGate
);
3150 KsGateRemoveOffInputFromAnd(OrGate
->NextGate
);
3158 PHYSICAL_ADDRESS PhysicalAddress
;
3165 KSSTREAM_POINTER_STATE_UNLOCKED
= 0,
3166 KSSTREAM_POINTER_STATE_LOCKED
3167 } KSSTREAM_POINTER_STATE
;
3169 typedef struct _KSPROCESSPIN_INDEXENTRY KSPROCESSPIN_INDEXENTRY
, *PKSPROCESSPIN_INDEXENTRY
;
3171 struct _KSSTREAM_POINTER_OFFSET
3173 #if defined(_NTDDK_)
3176 PKSMAPPING Mappings
;
3181 #if !defined(_WIN64)
3187 #if defined(_NTDDK_)
3188 struct _KSSTREAM_POINTER
3192 PKSSTREAM_HEADER StreamHeader
;
3193 PKSSTREAM_POINTER_OFFSET Offset
;
3194 KSSTREAM_POINTER_OFFSET OffsetIn
;
3195 KSSTREAM_POINTER_OFFSET OffsetOut
;
3198 struct _KSPROCESSPIN
3201 PKSSTREAM_POINTER StreamPointer
;
3202 PKSPROCESSPIN InPlaceCounterpart
;
3203 PKSPROCESSPIN DelegateBranch
;
3204 PKSPROCESSPIN CopySource
;
3206 ULONG BytesAvailable
;
3212 struct _KSPROCESSPIN_INDEXENTRY
3214 PKSPROCESSPIN
* Pins
;
3219 /* ===============================================================
3225 #if defined(_NTDDK_)
3227 typedef struct _KSFILTER_DISPATCH KSFILTER_DISPATCH
, *PKSFILTER_DISPATCH
;
3228 typedef struct _KSDEVICE KSDEVICE
, *PKSDEVICE
;
3229 typedef struct _KSFILTER KSFILTER
, *PKSFILTER
;
3230 typedef struct _KSNODE_DESCRIPTOR KSNODE_DESCRIPTOR
, *PKSNODE_DESCRIPTOR
;
3231 typedef struct _KSFILTER_DESCRIPTOR KSFILTER_DESCRIPTOR
, *PKSFILTER_DESCRIPTOR
;
3232 typedef struct _KSDEVICE_DESCRIPTOR KSDEVICE_DESCRIPTOR
, *PKSDEVICE_DESCRIPTOR
;
3234 typedef NTSTATUS (NTAPI
*PFNKSDEVICECREATE
)(
3235 IN PKSDEVICE Device
);
3237 typedef NTSTATUS (NTAPI
*PFNKSDEVICEPNPSTART
)(
3238 IN PKSDEVICE Device
,
3240 IN PCM_RESOURCE_LIST TranslatedResourceList OPTIONAL
,
3241 IN PCM_RESOURCE_LIST UntranslatedResourceList OPTIONAL
);
3243 typedef NTSTATUS (NTAPI
*PFNKSDEVICE
)(
3244 IN PKSDEVICE Device
);
3246 typedef NTSTATUS (NTAPI
*PFNKSDEVICEIRP
)(
3247 IN PKSDEVICE Device
,
3250 typedef VOID (NTAPI
*PFNKSDEVICEIRPVOID
)(
3251 IN PKSDEVICE Device
,
3254 typedef NTSTATUS (NTAPI
*PFNKSDEVICEQUERYCAPABILITIES
)(
3255 IN PKSDEVICE Device
,
3257 IN OUT PDEVICE_CAPABILITIES Capabilities
);
3259 typedef NTSTATUS (NTAPI
*PFNKSDEVICEQUERYPOWER
)(
3260 IN PKSDEVICE Device
,
3262 IN DEVICE_POWER_STATE DeviceTo
,
3263 IN DEVICE_POWER_STATE DeviceFrom
,
3264 IN SYSTEM_POWER_STATE SystemTo
,
3265 IN SYSTEM_POWER_STATE SystemFrom
,
3266 IN POWER_ACTION Action
);
3268 typedef VOID (NTAPI
*PFNKSDEVICESETPOWER
)(
3269 IN PKSDEVICE Device
,
3271 IN DEVICE_POWER_STATE To
,
3272 IN DEVICE_POWER_STATE From
);
3274 typedef struct _KSDEVICE_DISPATCH
{
3275 PFNKSDEVICECREATE Add
;
3276 PFNKSDEVICEPNPSTART Start
;
3277 PFNKSDEVICE PostStart
;
3278 PFNKSDEVICEIRP QueryStop
;
3279 PFNKSDEVICEIRPVOID CancelStop
;
3280 PFNKSDEVICEIRPVOID Stop
;
3281 PFNKSDEVICEIRP QueryRemove
;
3282 PFNKSDEVICEIRPVOID CancelRemove
;
3283 PFNKSDEVICEIRPVOID Remove
;
3284 PFNKSDEVICEQUERYCAPABILITIES QueryCapabilities
;
3285 PFNKSDEVICEIRPVOID SurpriseRemoval
;
3286 PFNKSDEVICEQUERYPOWER QueryPower
;
3287 PFNKSDEVICESETPOWER SetPower
;
3288 PFNKSDEVICEIRP QueryInterface
;
3289 }KSDEVICE_DISPATCH
, *PKSDEVICE_DISPATCH
;
3291 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
3292 #define KSDEVICE_DESCRIPTOR_VERSION_2 (0x110)
3293 #define MIN_DEV_VER_FOR_FLAGS (0x110)
3298 const KSDEVICE_DESCRIPTOR
* Descriptor
;
3301 PDEVICE_OBJECT FunctionalDeviceObject
;
3302 PDEVICE_OBJECT PhysicalDeviceObject
;
3303 PDEVICE_OBJECT NextDeviceObject
;
3305 SYSTEM_POWER_STATE SystemPowerState
;
3306 DEVICE_POWER_STATE DevicePowerState
;
3310 /* ===============================================================
3313 #if defined(_NTDDK_)
3316 const KSFILTER_DESCRIPTOR
* Descriptor
;
3323 (NTAPI
*PFNKSFILTERPOWER
)(
3324 IN PKSFILTER Filter
,
3325 IN DEVICE_POWER_STATE State
3328 typedef NTSTATUS (NTAPI
*PFNKSFILTERIRP
)(
3329 IN PKSFILTER Filter
,
3332 typedef NTSTATUS (NTAPI
*PFNKSFILTERPROCESS
)(
3333 IN PKSFILTER Filter
,
3334 IN PKSPROCESSPIN_INDEXENTRY ProcessPinsIndex
);
3336 typedef NTSTATUS (NTAPI
*PFNKSFILTERVOID
)(
3337 IN PKSFILTER Filter
);
3339 struct _KSFILTER_DISPATCH
3341 PFNKSFILTERIRP Create
;
3342 PFNKSFILTERIRP Close
;
3343 PFNKSFILTERPROCESS Process
;
3344 PFNKSFILTERVOID Reset
;
3347 struct _KSNODE_DESCRIPTOR
3349 const KSAUTOMATION_TABLE
* AutomationTable
;
3352 #if !defined(_WIN64)
3357 struct _KSFILTER_DESCRIPTOR
3359 const KSFILTER_DISPATCH
* Dispatch
;
3360 const KSAUTOMATION_TABLE
* AutomationTable
;
3363 const GUID
* ReferenceGuid
;
3364 ULONG PinDescriptorsCount
;
3365 ULONG PinDescriptorSize
;
3366 const KSPIN_DESCRIPTOR_EX
* PinDescriptors
;
3367 ULONG CategoriesCount
;
3368 const GUID
* Categories
;
3369 ULONG NodeDescriptorsCount
;
3370 ULONG NodeDescriptorSize
;
3371 const KSNODE_DESCRIPTOR
* NodeDescriptors
;
3372 ULONG ConnectionsCount
;
3373 const KSTOPOLOGY_CONNECTION
* Connections
;
3374 const KSCOMPONENTID
* ComponentId
;
3377 #define KSFILTER_DESCRIPTOR_VERSION ((ULONG)-1)
3379 struct _KSDEVICE_DESCRIPTOR
3381 const KSDEVICE_DISPATCH
* Dispatch
;
3382 ULONG FilterDescriptorsCount
;
3383 const KSFILTER_DESCRIPTOR
*const* FilterDescriptors
;
3388 struct _KSFILTERFACTORY
{
3389 const KSFILTER_DESCRIPTOR
* FilterDescriptor
;
3394 #define DEFINE_KSFILTER_DESCRIPTOR(descriptor)\
3395 const KSFILTER_DESCRIPTOR descriptor =
3397 #define DEFINE_KSFILTER_PIN_DESCRIPTORS(table)\
3398 SIZEOF_ARRAY(table),\
3402 #define DEFINE_KSFILTER_CATEGORIES(table)\
3403 SIZEOF_ARRAY(table),\
3406 #define DEFINE_KSFILTER_CATEGORY(category)\
3410 #define DEFINE_KSFILTER_CATEGORIES_NULL\
3414 #define DEFINE_KSFILTER_NODE_DESCRIPTORS(table)\
3415 SIZEOF_ARRAY(table),\
3419 #define DEFINE_KSFILTER_NODE_DESCRIPTORS_NULL\
3421 sizeof(KSNODE_DESCRIPTOR),\
3424 #define DEFINE_KSFILTER_CONNECTIONS(table)\
3425 SIZEOF_ARRAY(table),\
3428 #define DEFINE_KSFILTER_DEFAULT_CONNECTIONS\
3433 /* ===============================================================
3434 Minidriver Callbacks
3436 #if defined(_NTDDK_)
3437 typedef NTSTATUS (NTAPI
*KStrMethodHandler
)(
3439 IN PKSIDENTIFIER Request
,
3442 typedef NTSTATUS (NTAPI
*KStrSupportHandler
)(
3444 IN PKSIDENTIFIER Request
,
3448 /* ===============================================================
3451 #if defined(_NTDDK_)
3452 KSDDKAPI NTSTATUS NTAPI
3454 IN HANDLE ConnectionHandle
,
3455 IN PKSALLOCATOR_FRAMING AllocatorFraming
,
3456 OUT PHANDLE AllocatorHandle
);
3458 KSDDKAPI NTSTATUS NTAPI
3459 KsCreateDefaultAllocator(
3462 KSDDKAPI NTSTATUS NTAPI
3463 KsValidateAllocatorCreateRequest(
3465 OUT PKSALLOCATOR_FRAMING
* AllocatorFraming
);
3467 KSDDKAPI NTSTATUS NTAPI
3468 KsCreateDefaultAllocatorEx(
3470 IN PVOID InitializeContext OPTIONAL
,
3471 IN PFNKSDEFAULTALLOCATE DefaultAllocate OPTIONAL
,
3472 IN PFNKSDEFAULTFREE DefaultFree OPTIONAL
,
3473 IN PFNKSINITIALIZEALLOCATOR InitializeAllocator OPTIONAL
,
3474 IN PFNKSDELETEALLOCATOR DeleteAllocator OPTIONAL
);
3476 KSDDKAPI NTSTATUS NTAPI
3477 KsValidateAllocatorFramingEx(
3478 IN PKSALLOCATOR_FRAMING_EX Framing
,
3479 IN ULONG BufferSize
,
3480 IN
const KSALLOCATOR_FRAMING_EX
* PinFraming
);
3483 /* ===============================================================
3486 #if defined(_NTDDK_)
3487 typedef BOOLEAN (NTAPI
*PFNKSSETTIMER
)(
3490 IN LARGE_INTEGER DueTime
,
3493 typedef BOOLEAN (NTAPI
*PFNKSCANCELTIMER
)(
3497 typedef LONGLONG (FASTCALL
*PFNKSCORRELATEDTIME
)(
3499 OUT PLONGLONG SystemTime
);
3501 KSDDKAPI NTSTATUS NTAPI
3503 IN HANDLE ConnectionHandle
,
3504 IN PKSCLOCK_CREATE ClockCreate
,
3505 OUT PHANDLE ClockHandle
);
3507 KSDDKAPI NTSTATUS NTAPI
3508 KsCreateDefaultClock(
3510 IN PKSDEFAULTCLOCK DefaultClock
);
3512 KSDDKAPI NTSTATUS NTAPI
3513 KsAllocateDefaultClock(
3514 OUT PKSDEFAULTCLOCK
* DefaultClock
);
3516 KSDDKAPI NTSTATUS NTAPI
3517 KsAllocateDefaultClockEx(
3518 OUT PKSDEFAULTCLOCK
* DefaultClock
,
3519 IN PVOID Context OPTIONAL
,
3520 IN PFNKSSETTIMER SetTimer OPTIONAL
,
3521 IN PFNKSCANCELTIMER CancelTimer OPTIONAL
,
3522 IN PFNKSCORRELATEDTIME CorrelatedTime OPTIONAL
,
3523 IN
const KSRESOLUTION
* Resolution OPTIONAL
,
3528 IN PKSDEFAULTCLOCK DefaultClock
);
3530 KSDDKAPI NTSTATUS NTAPI
3531 KsValidateClockCreateRequest(
3533 OUT PKSCLOCK_CREATE
* ClockCreate
);
3535 KSDDKAPI KSSTATE NTAPI
3536 KsGetDefaultClockState(
3537 IN PKSDEFAULTCLOCK DefaultClock
);
3540 KsSetDefaultClockState(
3541 IN PKSDEFAULTCLOCK DefaultClock
,
3544 KSDDKAPI LONGLONG NTAPI
3545 KsGetDefaultClockTime(
3546 IN PKSDEFAULTCLOCK DefaultClock
);
3549 KsSetDefaultClockTime(
3550 IN PKSDEFAULTCLOCK DefaultClock
,
3554 /* ===============================================================
3558 /* Method sets - TODO: Make into macros! */
3559 #if defined(_NTDDK_)
3562 KSMETHOD_SET_IRP_STORAGE(
3566 KSMETHOD_ITEM_IRP_STORAGE(
3570 KSMETHOD_TYPE_IRP_STORAGE(
3574 KSDDKAPI NTSTATUS NTAPI
3577 IN ULONG MethodSetsCount
,
3578 IN PKSMETHOD_SET MethodSet
);
3580 KSDDKAPI NTSTATUS NTAPI
3581 KsMethodHandlerWithAllocator(
3583 IN ULONG MethodSetsCount
,
3584 IN PKSMETHOD_SET MethodSet
,
3585 IN PFNKSALLOCATOR Allocator OPTIONAL
,
3586 IN ULONG MethodItemSize OPTIONAL
);
3588 KSDDKAPI BOOLEAN NTAPI
3589 KsFastMethodHandler(
3590 IN PFILE_OBJECT FileObject
,
3591 IN PKSMETHOD UNALIGNED Method
,
3592 IN ULONG MethodLength
,
3593 IN OUT PVOID UNALIGNED Data
,
3594 IN ULONG DataLength
,
3595 OUT PIO_STATUS_BLOCK IoStatus
,
3596 IN ULONG MethodSetsCount
,
3597 IN
const KSMETHOD_SET
* MethodSet
);
3600 /* ===============================================================
3603 #if defined(_NTDDK_)
3604 KSDDKAPI NTSTATUS NTAPI
3607 IN ULONG PropertySetsCount
,
3608 IN
const KSPROPERTY_SET
* PropertySet
);
3610 KSDDKAPI NTSTATUS NTAPI
3611 KsPropertyHandlerWithAllocator(
3613 IN ULONG PropertySetsCount
,
3614 IN PKSPROPERTY_SET PropertySet
,
3615 IN PFNKSALLOCATOR Allocator OPTIONAL
,
3616 IN ULONG PropertyItemSize OPTIONAL
);
3618 KSDDKAPI NTSTATUS NTAPI
3619 KsUnserializeObjectPropertiesFromRegistry(
3620 IN PFILE_OBJECT FileObject
,
3621 IN HANDLE ParentKey OPTIONAL
,
3622 IN PUNICODE_STRING RegistryPath OPTIONAL
);
3624 KSDDKAPI BOOLEAN NTAPI
3625 KsFastPropertyHandler(
3626 IN PFILE_OBJECT FileObject
,
3627 IN PKSPROPERTY UNALIGNED Property
,
3628 IN ULONG PropertyLength
,
3629 IN OUT PVOID UNALIGNED Data
,
3630 IN ULONG DataLength
,
3631 OUT PIO_STATUS_BLOCK IoStatus
,
3632 IN ULONG PropertySetsCount
,
3633 IN
const KSPROPERTY_SET
* PropertySet
);
3636 /* ===============================================================
3640 #if defined(_NTDDK_)
3642 #define KSPROBE_STREAMREAD 0x00000000
3643 #define KSPROBE_STREAMWRITE 0x00000001
3644 #define KSPROBE_ALLOCATEMDL 0x00000010
3645 #define KSPROBE_PROBEANDLOCK 0x00000020
3646 #define KSPROBE_SYSTEMADDRESS 0x00000040
3647 #define KSPROBE_MODIFY 0x00000200
3648 #define KSPROBE_STREAMWRITEMODIFY (KSPROBE_MODIFY | KSPROBE_STREAMWRITE)
3649 #define KSPROBE_ALLOWFORMATCHANGE 0x00000080
3651 #define KSSTREAM_READ KSPROBE_STREAMREAD
3652 #define KSSTREAM_WRITE KSPROBE_STREAMWRITE
3653 #define KSSTREAM_PAGED_DATA 0x00000000
3654 #define KSSTREAM_NONPAGED_DATA 0x00000100
3655 #define KSSTREAM_SYNCHRONOUS 0x00001000
3656 #define KSSTREAM_FAILUREEXCEPTION 0x00002000
3660 (NTAPI
*PFNKSGENERATEEVENTCALLBACK
)(
3662 IN PKSEVENT_ENTRY EventEntry
3665 KSDDKAPI NTSTATUS NTAPI
3667 IN PKSEVENT_ENTRY EntryEvent
);
3672 IN
const GUID
* EventSet OPTIONAL
,
3675 IN PVOID Data OPTIONAL
,
3676 IN PFNKSGENERATEEVENTCALLBACK CallBack OPTIONAL
,
3677 IN PVOID CallBackContext OPTIONAL
3681 KSDDKAPI NTSTATUS NTAPI
3682 KsEnableEventWithAllocator(
3684 IN ULONG EventSetsCount
,
3685 IN PKSEVENT_SET EventSet
,
3686 IN OUT PLIST_ENTRY EventsList OPTIONAL
,
3687 IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL
,
3688 IN PVOID EventsLock OPTIONAL
,
3689 IN PFNKSALLOCATOR Allocator OPTIONAL
,
3690 IN ULONG EventItemSize OPTIONAL
);
3692 KSDDKAPI NTSTATUS NTAPI
3693 KsGenerateDataEvent(
3694 IN PKSEVENT_ENTRY EventEntry
,
3698 KSDDKAPI NTSTATUS NTAPI
3701 IN ULONG EventSetsCount
,
3702 IN KSEVENT_SET
* EventSet
,
3703 IN OUT PLIST_ENTRY EventsList OPTIONAL
,
3704 IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL
,
3705 IN PVOID EventsLock OPTIONAL
);
3709 IN PKSEVENT_ENTRY EventEntry
);
3711 KSDDKAPI NTSTATUS NTAPI
3714 IN OUT PLIST_ENTRY EventsList
,
3715 IN KSEVENTS_LOCKTYPE EventsFlags
,
3716 IN PVOID EventsLock
);
3720 IN PFILE_OBJECT FileObject
,
3721 IN OUT PLIST_ENTRY EventsList
,
3722 IN KSEVENTS_LOCKTYPE EVentsFlags
,
3723 IN PVOID EventsLock
);
3725 /* ===============================================================
3729 KSDDKAPI NTSTATUS NTAPI
3730 KsValidateTopologyNodeCreateRequest(
3732 IN PKSTOPOLOGY Topology
,
3733 OUT PKSNODE_CREATE
* NodeCreate
);
3735 KSDDKAPI NTSTATUS NTAPI
3736 KsCreateTopologyNode(
3737 IN HANDLE ParentHandle
,
3738 IN PKSNODE_CREATE NodeCreate
,
3739 IN ACCESS_MASK DesiredAccess
,
3740 OUT PHANDLE NodeHandle
);
3742 KSDDKAPI NTSTATUS NTAPI
3743 KsTopologyPropertyHandler(
3745 IN PKSPROPERTY Property
,
3747 IN
const KSTOPOLOGY
* Topology
);
3751 /* ===============================================================
3752 Connectivity Functions
3755 KSDDKAPI NTSTATUS NTAPI
3757 IN HANDLE FilterHandle
,
3758 IN PKSPIN_CONNECT Connect
,
3759 IN ACCESS_MASK DesiredAccess
,
3760 OUT PHANDLE ConnectionHandle
);
3762 KSDDKAPI NTSTATUS NTAPI
3763 KsValidateConnectRequest(
3765 IN ULONG DescriptorsCount
,
3766 IN KSPIN_DESCRIPTOR
* Descriptor
,
3767 OUT PKSPIN_CONNECT
* Connect
);
3769 KSDDKAPI NTSTATUS NTAPI
3770 KsPinPropertyHandler(
3772 IN PKSPROPERTY Property
,
3774 IN ULONG DescriptorsCount
,
3775 IN
const KSPIN_DESCRIPTOR
* Descriptor
);
3777 KSDDKAPI NTSTATUS NTAPI
3778 KsPinDataIntersection(
3782 IN ULONG DescriptorsCount
,
3783 IN
const KSPIN_DESCRIPTOR
* Descriptor
,
3784 IN PFNKSINTERSECTHANDLER IntersectHandler
);
3786 KSDDKAPI NTSTATUS NTAPI
3787 KsPinDataIntersectionEx(
3791 IN ULONG DescriptorsCount
,
3792 IN
const KSPIN_DESCRIPTOR
* Descriptor
,
3793 IN ULONG DescriptorSize
,
3794 IN PFNKSINTERSECTHANDLEREX IntersectHandler OPTIONAL
,
3795 IN PVOID HandlerContext OPTIONAL
);
3797 KSDDKAPI PKSFILTER NTAPI
3798 KsPinGetParentFilter(
3802 KSDDKAPI PKSPIN NTAPI
3803 KsPinGetNextSiblingPin(
3808 /* Does this belong here? */
3810 KSDDKAPI NTSTATUS NTAPI
3811 KsHandleSizedListQuery(
3813 IN ULONG DataItemsCount
,
3814 IN ULONG DataItemSize
,
3815 IN
const VOID
* DataItems
);
3818 /* ===============================================================
3819 IRP Helper Functions
3822 typedef NTSTATUS (NTAPI
*PFNKSIRPLISTCALLBACK
)(
3826 KSDDKAPI NTSTATUS NTAPI
3827 KsAcquireResetValue(
3829 OUT KSRESET
* ResetValue
);
3832 KsAddIrpToCancelableQueue(
3833 IN OUT PLIST_ENTRY QueueHead
,
3834 IN PKSPIN_LOCK SpinLock
,
3836 IN KSLIST_ENTRY_LOCATION ListLocation
,
3837 IN PDRIVER_CANCEL DriverCancel OPTIONAL
);
3839 KSDDKAPI NTSTATUS NTAPI
3840 KsAddObjectCreateItemToDeviceHeader(
3841 IN KSDEVICE_HEADER Header
,
3842 IN PDRIVER_DISPATCH Create
,
3844 IN PWCHAR ObjectClass
,
3845 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
3847 KSDDKAPI NTSTATUS NTAPI
3848 KsAddObjectCreateItemToObjectHeader(
3849 IN KSOBJECT_HEADER Header
,
3850 IN PDRIVER_DISPATCH Create
,
3852 IN PWCHAR ObjectClass
,
3853 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
3855 KSDDKAPI NTSTATUS NTAPI
3856 KsAllocateDeviceHeader(
3857 OUT KSDEVICE_HEADER
* Header
,
3858 IN ULONG ItemsCount
,
3859 IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL
);
3861 KSDDKAPI NTSTATUS NTAPI
3862 KsAllocateExtraData(
3865 OUT PVOID
* ExtraBuffer
);
3867 KSDDKAPI NTSTATUS NTAPI
3868 KsAllocateObjectCreateItem(
3869 IN KSDEVICE_HEADER Header
,
3870 IN PKSOBJECT_CREATE_ITEM CreateItem
,
3871 IN BOOLEAN AllocateEntry
,
3872 IN PFNKSITEMFREECALLBACK ItemFreeCallback OPTIONAL
);
3874 KSDDKAPI NTSTATUS NTAPI
3875 KsAllocateObjectHeader(
3876 OUT KSOBJECT_HEADER
*Header
,
3877 IN ULONG ItemsCount
,
3878 IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL
,
3880 IN KSDISPATCH_TABLE
* Table
);
3884 IN OUT PLIST_ENTRY QueueHead
,
3885 IN PKSPIN_LOCK SpinLock
);
3889 IN PDEVICE_OBJECT DeviceObject
,
3892 KSDDKAPI NTSTATUS NTAPI
3893 KsDefaultDeviceIoCompletion(
3894 IN PDEVICE_OBJECT DeviceObject
,
3898 KSDDKAPI ULONG NTAPI
3899 KsDecrementCountedWorker(
3900 IN PKSWORKER Worker);
3903 KSDDKAPI BOOLEAN NTAPI
3904 KsDispatchFastIoDeviceControlFailure(
3905 IN PFILE_OBJECT FileObject
,
3907 IN PVOID InputBuffer OPTIONAL
,
3908 IN ULONG InputBufferLength
,
3909 OUT PVOID OutputBuffer OPTIONAL
,
3910 IN ULONG OutputBufferLength
,
3911 IN ULONG IoControlCode
,
3912 OUT PIO_STATUS_BLOCK IoStatus
,
3913 IN PDEVICE_OBJECT DeviceObject
); /* always return false */
3915 KSDDKAPI BOOLEAN NTAPI
3916 KsDispatchFastReadFailure(
3917 IN PFILE_OBJECT FileObject
,
3918 IN PLARGE_INTEGER FileOffset
,
3923 OUT PIO_STATUS_BLOCK IoStatus
,
3924 IN PDEVICE_OBJECT DeviceObject
); /* always return false */
3926 /* This function does the same as the above */
3927 #define KsDispatchFastWriteFailure KsDispatchFastReadFailure
3929 KSDDKAPI NTSTATUS NTAPI
3930 KsDispatchInvalidDeviceRequest(
3931 IN PDEVICE_OBJECT DeviceObject
,
3934 KSDDKAPI NTSTATUS NTAPI
3936 IN PDEVICE_OBJECT DeviceObject
,
3939 KSDDKAPI NTSTATUS NTAPI
3940 KsDispatchSpecificMethod(
3942 IN PFNKSHANDLER Handler
);
3944 KSDDKAPI NTSTATUS NTAPI
3945 KsDispatchSpecificProperty(
3947 IN PFNKSHANDLER Handler
);
3949 KSDDKAPI NTSTATUS NTAPI
3950 KsForwardAndCatchIrp(
3951 IN PDEVICE_OBJECT DeviceObject
,
3953 IN PFILE_OBJECT FileObject
,
3954 IN KSSTACK_USE StackUse
);
3956 KSDDKAPI NTSTATUS NTAPI
3959 IN PFILE_OBJECT FileObject
,
3960 IN BOOLEAN ReuseStackLocation
);
3964 IN KSDEVICE_HEADER Header
);
3970 KSDDKAPI NTSTATUS NTAPI
3971 KsGetChildCreateParameter(
3973 OUT PVOID
* CreateParameter
);
3975 KSDDKAPI NTSTATUS NTAPI
3976 KsMoveIrpsOnCancelableQueue(
3977 IN OUT PLIST_ENTRY SourceList
,
3978 IN PKSPIN_LOCK SourceLock
,
3979 IN OUT PLIST_ENTRY DestinationList
,
3980 IN PKSPIN_LOCK DestinationLock OPTIONAL
,
3981 IN KSLIST_ENTRY_LOCATION ListLocation
,
3982 IN PFNKSIRPLISTCALLBACK ListCallback
,
3985 KSDDKAPI NTSTATUS NTAPI
3988 IN ULONG ProbeFlags
,
3989 IN ULONG HeaderSize
);
3991 KSDDKAPI NTSTATUS NTAPI
3992 KsQueryInformationFile(
3993 IN PFILE_OBJECT FileObject
,
3994 OUT PVOID FileInformation
,
3996 IN FILE_INFORMATION_CLASS FileInformationClass
);
3998 KSDDKAPI ACCESS_MASK NTAPI
3999 KsQueryObjectAccessMask(
4000 IN KSOBJECT_HEADER Header
);
4002 KSDDKAPI PKSOBJECT_CREATE_ITEM NTAPI
4003 KsQueryObjectCreateItem(
4004 IN KSOBJECT_HEADER Header
);
4006 KSDDKAPI NTSTATUS NTAPI
4008 IN PFILE_OBJECT FileObject
,
4009 IN PKEVENT Event OPTIONAL
,
4010 IN PVOID PortContext OPTIONAL
,
4011 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4014 IN ULONG Key OPTIONAL
,
4015 IN KPROCESSOR_MODE RequestorMode
);
4018 KsReleaseIrpOnCancelableQueue(
4020 IN PDRIVER_CANCEL DriverCancel OPTIONAL
);
4023 KsRemoveIrpFromCancelableQueue(
4024 IN OUT PLIST_ENTRY QueueHead
,
4025 IN PKSPIN_LOCK SpinLock
,
4026 IN KSLIST_ENTRY_LOCATION ListLocation
,
4027 IN KSIRP_REMOVAL_OPERATION RemovalOperation
);
4030 KsRemoveSpecificIrpFromCancelableQueue(
4033 KSDDKAPI NTSTATUS NTAPI
4034 KsSetInformationFile(
4035 IN PFILE_OBJECT FileObject
,
4036 IN PVOID FileInformation
,
4038 IN FILE_INFORMATION_CLASS FileInformationClass
);
4040 KSDDKAPI NTSTATUS NTAPI
4041 KsSetMajorFunctionHandler(
4042 IN PDRIVER_OBJECT DriverObject
,
4043 IN ULONG MajorFunction
);
4045 KSDDKAPI NTSTATUS NTAPI
4047 IN PFILE_OBJECT FileObject
,
4048 IN PKEVENT Event OPTIONAL
,
4049 IN PVOID PortContext OPTIONAL
,
4050 IN PIO_COMPLETION_ROUTINE CompletionRoutine OPTIONAL
,
4051 IN PVOID CompletionContext OPTIONAL
,
4052 IN KSCOMPLETION_INVOCATION CompletionInvocationFlags OPTIONAL
,
4053 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4054 IN OUT PVOID StreamHeaders
,
4057 IN KPROCESSOR_MODE RequestorMode
);
4059 KSDDKAPI NTSTATUS NTAPI
4061 IN PFILE_OBJECT FileObject
,
4062 IN PKEVENT Event OPTIONAL
,
4063 IN PVOID PortContext OPTIONAL
,
4064 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4067 IN ULONG Key OPTIONAL
,
4068 IN KPROCESSOR_MODE RequestorMode
);
4071 KSDDKAPI NTSTATUS NTAPI
4072 KsDefaultForwardIrp(
4073 IN PDEVICE_OBJECT DeviceObject
,
4076 /* ===============================================================
4077 Worker Management Functions
4080 KSDDKAPI NTSTATUS NTAPI
4082 IN WORK_QUEUE_TYPE WorkQueueType
,
4083 OUT PKSWORKER
* Worker
);
4087 IN PKSWORKER Worker
);
4089 KSDDKAPI NTSTATUS NTAPI
4090 KsRegisterCountedWorker(
4091 IN WORK_QUEUE_TYPE WorkQueueType
,
4092 IN PWORK_QUEUE_ITEM CountedWorkItem
,
4093 OUT PKSWORKER
* Worker
);
4095 KSDDKAPI ULONG NTAPI
4096 KsDecrementCountedWorker(
4097 IN PKSWORKER Worker
);
4099 KSDDKAPI ULONG NTAPI
4100 KsIncrementCountedWorker(
4101 IN PKSWORKER Worker
);
4103 KSDDKAPI NTSTATUS NTAPI
4105 IN PKSWORKER Worker
,
4106 IN PWORK_QUEUE_ITEM WorkItem
);
4109 /* ===============================================================
4113 KSDDKAPI NTSTATUS NTAPI
4116 IN POOL_TYPE PoolType
,
4117 IN ULONG_PTR ResourceName
,
4118 IN ULONG ResourceType
,
4119 OUT PVOID
* Resource
,
4120 OUT PULONG ResourceSize
);
4123 KSDDKAPI NTSTATUS NTAPI
4124 KsGetImageNameAndResourceId(
4126 OUT PUNICODE_STRING ImageName,
4127 OUT PULONG_PTR ResourceId,
4128 OUT PULONG ValueType);
4130 KSDDKAPI NTSTATUS NTAPI
4132 IN PDEVICE_OBJECT PhysicalDeviceObject,
4133 IN PUNICODE_STRING ModuleName,
4134 OUT PUNICODE_STRING ImageName,
4135 OUT PULONG_PTR ResourceId,
4136 OUT PULONG ValueType);
4140 /* ===============================================================
4141 Misc. Helper Functions
4144 KSDDKAPI PVOID NTAPI
4149 KSDDKAPI NTSTATUS NTAPI
4151 IN PUNICODE_STRING SymbolicLink
,
4152 IN PKSPIN_MEDIUM Medium
,
4153 IN ULONG PinDirection
);
4155 KSDDKAPI NTSTATUS NTAPI
4156 KsDefaultDispatchPnp(
4157 IN PDEVICE_OBJECT DeviceObject
,
4161 KsSetDevicePnpAndBaseObject(
4162 IN KSDEVICE_HEADER Header
,
4163 IN PDEVICE_OBJECT PnpDeviceObject
,
4164 IN PDEVICE_OBJECT BaseDevice
);
4166 KSDDKAPI NTSTATUS NTAPI
4167 KsDefaultDispatchPower(
4168 IN PDEVICE_OBJECT DeviceObject
,
4173 IN KSOBJECT_HEADER Header
,
4174 IN PFNKSCONTEXT_DISPATCH PowerDispatch OPTIONAL
,
4175 IN PVOID PowerContext OPTIONAL
);
4177 KSDDKAPI NTSTATUS NTAPI
4178 KsReferenceBusObject(
4179 IN KSDEVICE_HEADER Header
);
4182 KsDereferenceBusObject(
4183 IN KSDEVICE_HEADER Header
);
4185 KSDDKAPI NTSTATUS NTAPI
4186 KsFreeObjectCreateItem(
4187 IN KSDEVICE_HEADER Header
,
4188 IN PUNICODE_STRING CreateItem
);
4190 KSDDKAPI NTSTATUS NTAPI
4191 KsFreeObjectCreateItemsByContext(
4192 IN KSDEVICE_HEADER Header
,
4197 IN PDRIVER_OBJECT DriverObject
);
4199 KSDDKAPI PDEVICE_OBJECT NTAPI
4200 KsQueryDevicePnpObject(
4201 IN KSDEVICE_HEADER Header
);
4204 KsRecalculateStackDepth(
4205 IN KSDEVICE_HEADER Header
,
4206 IN BOOLEAN ReuseStackLocation
);
4209 KsSetTargetDeviceObject(
4210 IN KSOBJECT_HEADER Header
,
4211 IN PDEVICE_OBJECT TargetDevice OPTIONAL
);
4215 IN KSOBJECT_HEADER Header
,
4216 IN KSTARGET_STATE TargetState
);
4218 KSDDKAPI NTSTATUS NTAPI
4219 KsSynchronousIoControlDevice(
4220 IN PFILE_OBJECT FileObject
,
4221 IN KPROCESSOR_MODE RequestorMode
,
4225 OUT PVOID OutBuffer
,
4227 OUT PULONG BytesReturned
);
4232 KsFilterGetFirstChildPin(
4233 IN PKSFILTER Filter
,
4240 KsPinGetConnectedPinFileObject(
4246 #if !defined( KS_NO_CREATE_FUNCTIONS )
4252 IN HANDLE ConnectionHandle
,
4253 IN PKSALLOCATOR_FRAMING AllocatorFraming
,
4254 OUT PHANDLE AllocatorHandle
4261 IN HANDLE ConnectionHandle
,
4262 IN PKSCLOCK_CREATE ClockCreate
,
4263 OUT PHANDLE ClockHandle
4270 IN HANDLE FilterHandle
,
4271 IN PKSPIN_CONNECT Connect
,
4272 IN ACCESS_MASK DesiredAccess
,
4273 OUT PHANDLE ConnectionHandle
4279 KsCreateTopologyNode(
4280 IN HANDLE ParentHandle
,
4281 IN PKSNODE_CREATE NodeCreate
,
4282 IN ACCESS_MASK DesiredAccess
,
4283 OUT PHANDLE NodeHandle
4290 /* ===============================================================
4291 AVStream Functions (XP / DirectX 8)
4293 http://www.osronline.com/ddkx/stream/avstream_5q9f.htm
4296 #if defined(_NTDDK_)
4301 KsMergeAutomationTables(
4302 OUT PKSAUTOMATION_TABLE
* AutomationTableAB
,
4303 IN PKSAUTOMATION_TABLE AutomationTableA OPTIONAL
,
4304 IN PKSAUTOMATION_TABLE AutomationTableB OPTIONAL
,
4305 IN KSOBJECT_BAG Bag OPTIONAL
4312 IN PDRIVER_OBJECT DriverObject
,
4313 IN PUNICODE_STRING RegistryPath
,
4314 IN
const KSDEVICE_DESCRIPTOR
*Descriptor OPTIONAL
);
4316 typedef struct _KSFILTERFACTORY KSFILTERFACTORY
, *PKSFILTERFACTORY
; //FIXME
4323 KsInitializeDevice (
4324 IN PDEVICE_OBJECT FunctionalDeviceObject
,
4325 IN PDEVICE_OBJECT PhysicalDeviceObject
,
4326 IN PDEVICE_OBJECT NextDeviceObject
,
4327 IN
const KSDEVICE_DESCRIPTOR
* Descriptor OPTIONAL
);
4330 typedef void (NTAPI
*PFNKSFILTERFACTORYPOWER
)(
4331 IN PKSFILTERFACTORY FilterFactory
,
4332 IN DEVICE_POWER_STATE State
);
4338 IN KSOBJECT_BAG ObjectBag
,
4339 IN OUT PVOID
* PointerToPointerToItem
,
4354 IN PKSDEVICE Device
);
4360 IN PDRIVER_OBJECT DriverObject
,
4361 IN PDEVICE_OBJECT PhysicalDeviceObject
);
4368 IN PKSEVENT_ENTRY EventEntry
);
4373 KsAddItemToObjectBag(
4374 IN KSOBJECT_BAG ObjectBag
,
4376 IN PFNKSFREE Free OPTIONAL
);
4381 KsRemoveItemFromObjectBag(
4382 IN KSOBJECT_BAG ObjectBag
,
4389 KsAllocateObjectBag(
4390 IN PKSDEVICE Device
,
4391 OUT KSOBJECT_BAG
* ObjectBag
);
4397 IN KSOBJECT_BAG ObjectBag
4403 KsCompletePendingRequest(
4409 KsCopyObjectBagItems(
4410 IN KSOBJECT_BAG ObjectBagDestination
,
4411 IN KSOBJECT_BAG ObjectBagSource
);
4417 IN PDRIVER_OBJECT DriverObject
,
4418 IN PDEVICE_OBJECT PhysicalDeviceObject
,
4419 IN
const KSDEVICE_DESCRIPTOR
* Descriptor OPTIONAL
,
4420 IN ULONG ExtensionSize OPTIONAL
,
4421 OUT PKSDEVICE
* Device OPTIONAL
);
4426 KsCreateFilterFactory(
4427 IN PDEVICE_OBJECT DeviceObject
,
4428 IN
const KSFILTER_DESCRIPTOR
* Descriptor
,
4429 IN PWCHAR RefString OPTIONAL
,
4430 IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL
,
4431 IN ULONG CreateItemFlags
,
4432 IN PFNKSFILTERFACTORYPOWER SleepCallback OPTIONAL
,
4433 IN PFNKSFILTERFACTORYPOWER WakeCallback OPTIONAL
,
4434 OUT PKSFILTERFACTORY
*FilterFactory OPTIONAL
);
4439 KsFilterFactorySetDeviceClassesState(
4440 IN PKSFILTERFACTORY FilterFactory
,
4447 KsFilterFactoryUpdateCacheData(
4448 IN PKSFILTERFACTORY FilterFactory
,
4449 IN
const KSFILTER_DESCRIPTOR
*FilterDescriptor OPTIONAL
4469 KsDefaultAddEventHandler(
4471 IN PKSEVENTDATA EventData
,
4472 IN OUT PKSEVENT_ENTRY EventEntry
);
4477 KsDispatchQuerySecurity(
4478 IN PDEVICE_OBJECT DeviceObject
,
4485 KsDispatchSetSecurity(
4486 IN PDEVICE_OBJECT DeviceObject
,
4501 KsFilterGetParentFilterFactory(
4505 return (PKSFILTERFACTORY
) KsGetParent((PVOID
) Filter
);
4511 KsFilterFactoryGetParentDevice(
4512 IN PKSFILTERFACTORY FilterFactory
4515 return (PKSDEVICE
) KsGetParent((PVOID
) FilterFactory
);
4520 #define KsDeleteFilterFactory(FilterFactory) \
4521 KsFreeObjectCreateItemsByContext( \
4522 *(KSDEVICE_HEADER *)( \
4523 KsFilterFactoryGetParentDevice(FilterFactory)->FunctionalDeviceObject-> \
4531 IN PKSDEVICE Device
,
4548 KsDeviceGetFirstChildFilterFactory(
4549 IN PKSDEVICE Device
);
4551 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
4563 KsDeviceGetOuterUnknown(
4564 IN PKSDEVICE Device
)
4566 return KsGetOuterUnknown((PVOID
) Device
);
4572 KsDeviceRegisterAggregatedClientUnknown(
4573 IN PKSDEVICE Device
,
4574 IN PUNKNOWN ClientUnknown
);
4579 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
4581 typedef interface IKsReferenceClock
* PIKSREFERENCECLOCK
;
4584 #define INTERFACE IKsReferenceClock
4585 DECLARE_INTERFACE_(IKsReferenceClock
,IUnknown
)
4587 DEFINE_ABSTRACT_UNKNOWN() // For C
4589 STDMETHOD_(LONGLONG
,GetTime
)(THIS
4591 STDMETHOD_(LONGLONG
,GetPhysicalTime
)(THIS
4593 STDMETHOD_(LONGLONG
,GetCorrelatedTime
)(THIS_
4594 OUT PLONGLONG SystemTime
4596 STDMETHOD_(LONGLONG
,GetCorrelatedPhysicalTime
)(THIS_
4597 OUT PLONGLONG SystemTime
4599 STDMETHOD_(NTSTATUS
, GetResolution
)(THIS_
4600 OUT PKSRESOLUTION Resolution
4602 STDMETHOD_(NTSTATUS
, GetState
)(THIS_
4608 #define INTERFACE IKsControl
4610 DEFINE_GUID(IID_IKsControl
, 0x28F54685L
, 0x06FD, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96);
4612 DECLARE_INTERFACE_(IKsControl
,IUnknown
)
4614 STDMETHOD_(NTSTATUS
, QueryInterface
)( THIS_
4616 PVOID
* Interface
)PURE
;
4618 STDMETHOD_(ULONG
, AddRef
)(THIS
) PURE
;
4620 STDMETHOD_(ULONG
, Release
)(THIS
) PURE
;
4622 STDMETHOD_(NTSTATUS
, KsProperty
)(THIS_
4623 IN PKSPROPERTY Property
,
4624 IN ULONG PropertyLength
,
4625 IN OUT PVOID PropertyData
,
4626 IN ULONG DataLength
,
4627 OUT ULONG
* BytesReturned
4629 STDMETHOD_(NTSTATUS
, KsMethod
)(THIS_
4630 IN PKSMETHOD Method
,
4631 IN ULONG MethodLength
,
4632 IN OUT PVOID MethodData
,
4633 IN ULONG DataLength
,
4634 OUT ULONG
* BytesReturned
4636 STDMETHOD_(NTSTATUS
, KsEvent
)(THIS_
4637 IN PKSEVENT Event OPTIONAL
,
4638 IN ULONG EventLength
,
4639 IN OUT PVOID EventData
,
4640 IN ULONG DataLength
,
4641 OUT ULONG
* BytesReturned
4646 typedef IKsControl
* PIKSCONTROL
;
4653 KsDeviceRegisterAdapterObject(
4654 IN PKSDEVICE Device
,
4655 IN PADAPTER_OBJECT AdapterObject
,
4656 IN ULONG MaxMappingByteCount
,
4657 IN ULONG MappingTableStride
);
4663 IN PKSDEVICE Device
,
4677 #define KsDiscard(object, pointer) \
4678 KsRemoveItemFromObjectBag(object->Bag, pointer, TRUE)
4680 #define KsFilterAcquireControl(Filter) \
4681 KsAcquireControl((PVOID) Filter);
4683 #define KsFilterReleaseControl(Filter) \
4684 KsReleaseControl((PVOID) Filter);
4686 #define KsFilterAddEvent(Filter, EventEntry) \
4687 KsAddEvent(Filter,EventEntry);
4692 KsFilterAcquireProcessingMutex(
4693 IN PKSFILTER Filter
);
4699 KsFilterAddTopologyConnections(
4700 IN PKSFILTER Filter
,
4701 IN ULONG NewConnectionsCount
,
4702 IN
const KSTOPOLOGY_CONNECTION
*const NewTopologyConnections
);
4707 KsFilterAttemptProcessing(
4708 IN PKSFILTER Filter
,
4709 IN BOOLEAN Asynchronous
);
4715 IN PKSFILTER Filter
,
4716 IN
const KSNODE_DESCRIPTOR
*const NodeDescriptor
,
4722 KsFilterCreatePinFactory(
4723 IN PKSFILTER Filter
,
4724 IN
const KSPIN_DESCRIPTOR_EX
*const PinDescriptor
,
4730 KsFilterFactoryGetDevice(
4731 IN PKSFILTERFACTORY FilterFactory
);
4734 #endif /* avstream */