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)
85 #define DEFINE_GUIDSTRUCT(guid, name) struct __declspec(uuid(guid)) name
86 #define DEFINE_GUIDNAMED(name) __uuidof(struct name)
89 template<typename T
> const GUID
&__mingw_uuidof();
91 #define DEFINE_GUIDSTRUCT(guid, name) \
92 struct __guid ## name; \
94 template<> inline const GUID &__mingw_uuidof<__guid ## name>() { \
95 static const IID iid = {STATICGUIDOF(name)}; \
98 template<> inline const GUID &__mingw_uuidof<__guid ## name *>() { \
99 return __mingw_uuidof<__guid ## name>(); \
102 #define DEFINE_GUIDNAMED(name) __mingw_uuidof<__guid ## name>()
105 #define DEFINE_GUIDSTRUCT(guid, name) DEFINE_GUIDEX(name)
106 #define DEFINE_GUIDNAMED(name) name
110 #define STATIC_GUID_NULL \
111 0x00000000L, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
112 DEFINE_GUIDSTRUCT("00000000-0000-0000-0000-000000000000", GUID_NULL
);
113 #define GUID_NULL DEFINE_GUIDNAMED(GUID_NULL)
115 #define STATIC_KSNAME_Filter\
116 0x9b365890L, 0x165f, 0x11d0, {0xa1, 0x95, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4}
117 DEFINE_GUIDSTRUCT("9b365890-165f-11d0-a195-0020afd156e4", KSNAME_Filter
);
118 #define KSNAME_Filter DEFINE_GUIDNAMED(KSNAME_Filter)
120 #define STATIC_KSMEMORY_TYPE_KERNEL_PAGED \
121 0xd833f8f8L, 0x7894, 0x11d1, {0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02}
122 DEFINE_GUIDSTRUCT("d833f8f8-7894-11d1-b069-00a0c9062802", KSMEMORY_TYPE_KERNEL_PAGED
);
123 #define KSMEMORY_TYPE_KERNEL_PAGED DEFINE_GUIDNAMED(KSMEMORY_TYPE_KERNEL_PAGED)
125 /* ===============================================================
129 #define IOCTL_KS_DISABLE_EVENT \
136 #define IOCTL_KS_ENABLE_EVENT \
144 #define IOCTL_KS_METHOD \
152 #define IOCTL_KS_PROPERTY \
159 #define IOCTL_KS_WRITE_STREAM \
166 #define IOCTL_KS_READ_STREAM \
173 #define IOCTL_KS_RESET_STATE \
181 /* ===============================================================
185 #define STATIC_KSCATEGORY_BRIDGE \
186 0x085AFF00L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
187 DEFINE_GUIDSTRUCT("085AFF00-62CE-11CF-A5D6-28DB04C10000", KSCATEGORY_BRIDGE
);
188 #define KSCATEGORY_BRIDGE DEFINE_GUIDNAMED(KSCATEGORY_BRIDGE)
190 #define STATIC_KSCATEGORY_CAPTURE \
191 0x65E8773DL, 0x8F56, 0x11D0, {0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
192 DEFINE_GUIDSTRUCT("65E8773D-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_CAPTURE
);
193 #define KSCATEGORY_CAPTURE DEFINE_GUIDNAMED(KSCATEGORY_CAPTURE)
195 #define STATIC_KSCATEGORY_RENDER \
196 0x65E8773EL, 0x8F56, 0x11D0, {0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
197 DEFINE_GUIDSTRUCT("65E8773E-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_RENDER
);
198 #define KSCATEGORY_RENDER DEFINE_GUIDNAMED(KSCATEGORY_RENDER)
200 #define STATIC_KSCATEGORY_MIXER \
201 0xAD809C00L, 0x7B88, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
202 DEFINE_GUIDSTRUCT("AD809C00-7B88-11D0-A5D6-28DB04C10000", KSCATEGORY_MIXER
);
203 #define KSCATEGORY_MIXER DEFINE_GUIDNAMED(KSCATEGORY_MIXER)
205 #define STATIC_KSCATEGORY_SPLITTER \
206 0x0A4252A0L, 0x7E70, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
207 DEFINE_GUIDSTRUCT("0A4252A0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_SPLITTER
);
208 #define KSCATEGORY_SPLITTER DEFINE_GUIDNAMED(KSCATEGORY_SPLITTER)
210 #define STATIC_KSCATEGORY_DATACOMPRESSOR \
211 0x1E84C900L, 0x7E70, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
212 DEFINE_GUIDSTRUCT("1E84C900-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATACOMPRESSOR
);
213 #define KSCATEGORY_DATACOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATACOMPRESSOR)
215 #define STATIC_KSCATEGORY_DATADECOMPRESSOR \
216 0x2721AE20L, 0x7E70, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
217 DEFINE_GUIDSTRUCT("2721AE20-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATADECOMPRESSOR
);
218 #define KSCATEGORY_DATADECOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATADECOMPRESSOR)
220 #define STATIC_KSCATEGORY_DATATRANSFORM \
221 0x2EB07EA0L, 0x7E70, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
222 DEFINE_GUIDSTRUCT("2EB07EA0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATATRANSFORM
);
223 #define KSCATEGORY_DATATRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_DATATRANSFORM)
225 #define STATIC_KSCATEGORY_COMMUNICATIONSTRANSFORM \
226 0xCF1DDA2CL, 0x9743, 0x11D0, {0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
227 DEFINE_GUIDSTRUCT("CF1DDA2C-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_COMMUNICATIONSTRANSFORM
);
228 #define KSCATEGORY_COMMUNICATIONSTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_COMMUNICATIONSTRANSFORM)
230 #define STATIC_KSCATEGORY_INTERFACETRANSFORM \
231 0xCF1DDA2DL, 0x9743, 0x11D0, {0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
232 DEFINE_GUIDSTRUCT("CF1DDA2D-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_INTERFACETRANSFORM
);
233 #define KSCATEGORY_INTERFACETRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_INTERFACETRANSFORM)
235 #define STATIC_KSCATEGORY_MEDIUMTRANSFORM \
236 0xCF1DDA2EL, 0x9743, 0x11D0, {0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
237 DEFINE_GUIDSTRUCT("CF1DDA2E-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_MEDIUMTRANSFORM
);
238 #define KSCATEGORY_MEDIUMTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_MEDIUMTRANSFORM)
240 #define STATIC_KSCATEGORY_FILESYSTEM \
241 0x760FED5EL, 0x9357, 0x11D0, {0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
242 DEFINE_GUIDSTRUCT("760FED5E-9357-11D0-A3CC-00A0C9223196", KSCATEGORY_FILESYSTEM
);
243 #define KSCATEGORY_FILESYSTEM DEFINE_GUIDNAMED(KSCATEGORY_FILESYSTEM)
245 #define STATIC_KSCATEGORY_CLOCK \
246 0x53172480L, 0x4791, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
247 DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000", KSCATEGORY_CLOCK
);
248 #define KSCATEGORY_CLOCK DEFINE_GUIDNAMED(KSCATEGORY_CLOCK)
250 #define STATIC_KSCATEGORY_PROXY \
251 0x97EBAACAL, 0x95BD, 0x11D0, {0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
252 DEFINE_GUIDSTRUCT("97EBAACA-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_PROXY
);
253 #define KSCATEGORY_PROXY DEFINE_GUIDNAMED(KSCATEGORY_PROXY)
255 #define STATIC_KSCATEGORY_QUALITY \
256 0x97EBAACBL, 0x95BD, 0x11D0, {0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
257 DEFINE_GUIDSTRUCT("97EBAACB-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_QUALITY
);
258 #define KSCATEGORY_QUALITY DEFINE_GUIDNAMED(KSCATEGORY_QUALITY)
260 /* ===============================================================
269 } KSIDENTIFIER
, *PKSIDENTIFIER
;
271 typedef KSIDENTIFIER KSPROPERTY
, *PKSPROPERTY
;
272 typedef KSIDENTIFIER KSMETHOD
, *PKSMETHOD
;
273 typedef KSIDENTIFIER KSEVENT
, *PKSEVENT
;
275 typedef KSIDENTIFIER KSDEGRADE
, *PKSDEGRADE
;
277 typedef KSIDENTIFIER KSPIN_INTERFACE
, *PKSPIN_INTERFACE
;
278 typedef KSIDENTIFIER KSPIN_MEDIUM
, *PKSPIN_MEDIUM
;
291 } KSDATAFORMAT
, *PKSDATAFORMAT
, KSDATARANGE
, *PKSDATARANGE
;
299 } KSATTRIBUTE
, *PKSATTRIBUTE
;
303 /* ===============================================================
304 Interface Sets - TODO
308 #define KSINTERFACESETID_Media
310 #define KSINTERFACE_STANDARD_STREAMING
311 #define KSINTERFACE_STANDARD_LOOPED_STREAMING
312 #define KSINTERFACE_STANDARD_CONTROL
315 #define STATIC_KSINTERFACESETID_Standard \
316 0x1A8766A0L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
317 DEFINE_GUIDSTRUCT("1A8766A0-62CE-11CF-A5D6-28DB04C10000", KSINTERFACESETID_Standard
);
318 #define KSINTERFACESETID_Standard DEFINE_GUIDNAMED(KSINTERFACESETID_Standard)
322 KSINTERFACE_STANDARD_STREAMING
,
323 KSINTERFACE_STANDARD_LOOPED_STREAMING
,
324 KSINTERFACE_STANDARD_CONTROL
325 } KSINTERFACE_STANDARD
;
327 #define STATIC_KSINTERFACESETID_FileIo \
328 0x8C6F932CL, 0xE771, 0x11D0, {0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
329 DEFINE_GUIDSTRUCT("8C6F932C-E771-11D0-B8FF-00A0C9223196", KSINTERFACESETID_FileIo
);
330 #define KSINTERFACESETID_FileIo DEFINE_GUIDNAMED(KSINTERFACESETID_FileIo)
335 /* ===============================================================
341 KSINTERFACE_FILEIO_STREAMING
342 } KSINTERFACE_FILEIO
;
344 #define KSMEDIUM_TYPE_ANYINSTANCE 0
346 #define STATIC_KSMEDIUMSETID_Standard \
347 0x4747B320L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
348 DEFINE_GUIDSTRUCT("4747B320-62CE-11CF-A5D6-28DB04C10000", KSMEDIUMSETID_Standard
);
349 #define KSMEDIUMSETID_Standard DEFINE_GUIDNAMED(KSMEDIUMSETID_Standard)
352 /* ===============================================================
353 Clock Properties/Methods/Events
356 #define STATIC_KSPROPSETID_Clock \
357 0xDF12A4C0L, 0xAC17, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
358 DEFINE_GUIDSTRUCT("DF12A4C0-AC17-11CF-A5D6-28DB04C10000", KSPROPSETID_Clock
);
359 #define KSPROPSETID_Clock DEFINE_GUIDNAMED(KSPROPSETID_Clock)
363 KSPROPERTY_CLOCK_TIME
,
364 KSPROPERTY_CLOCK_PHYSICALTIME
,
365 KSPROPERTY_CLOCK_CORRELATEDTIME
,
366 KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME
,
367 KSPROPERTY_CLOCK_RESOLUTION
,
368 KSPROPERTY_CLOCK_STATE
,
370 KSPROPERTY_CLOCK_FUNCTIONTABLE
371 #endif // defined(_NTDDK_)
374 #define STATIC_KSEVENTSETID_Clock \
375 0x364D8E20L, 0x62C7, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
376 DEFINE_GUIDSTRUCT("364D8E20-62C7-11CF-A5D6-28DB04C10000", KSEVENTSETID_Clock
);
377 #define KSEVENTSETID_Clock DEFINE_GUIDNAMED(KSEVENTSETID_Clock)
381 KSEVENT_CLOCK_INTERVAL_MARK
,
382 KSEVENT_CLOCK_POSITION_MARK
383 } KSEVENT_CLOCK_POSITION
;
386 /* ===============================================================
387 Connection Properties/Methods/Events
390 #define STATIC_KSPROPSETID_Connection \
391 0x1D58C920L, 0xAC9B, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
392 DEFINE_GUIDSTRUCT("1D58C920-AC9B-11CF-A5D6-28DB04C10000", KSPROPSETID_Connection
);
393 #define KSPROPSETID_Connection DEFINE_GUIDNAMED(KSPROPSETID_Connection)
398 KSPROPERTY_CONNECTION_STATE
,
399 KSPROPERTY_CONNECTION_PRIORITY
,
400 KSPROPERTY_CONNECTION_DATAFORMAT
,
401 KSPROPERTY_CONNECTION_ALLOCATORFRAMING
,
402 KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT
,
403 KSPROPERTY_CONNECTION_ACQUIREORDERING
,
404 KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX
,
405 KSPROPERTY_CONNECTION_STARTAT
406 } KSPROPERTY_CONNECTION
;
408 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_STATE(GetHandler, SetHandler)\
409 DEFINE_KSPROPERTY_ITEM(\
410 KSPROPERTY_CONNECTION_STATE,\
415 NULL, 0, NULL, NULL, 0)
417 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_PRIORITY(GetHandler, SetHandler)\
418 DEFINE_KSPROPERTY_ITEM(\
419 KSPROPERTY_CONNECTION_PRIORITY,\
424 NULL, 0, NULL, NULL, 0)
426 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_DATAFORMAT(GetHandler, SetHandler)\
427 DEFINE_KSPROPERTY_ITEM(\
428 KSPROPERTY_CONNECTION_DATAFORMAT,\
433 NULL, 0, NULL, NULL, 0)
435 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING(Handler)\
436 DEFINE_KSPROPERTY_ITEM(\
437 KSPROPERTY_CONNECTION_ALLOCATORFRAMING,\
440 sizeof(KSALLOCATOR_FRAMING),\
441 NULL, NULL, 0, NULL, NULL, 0)
443 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING_EX(Handler)\
444 DEFINE_KSPROPERTY_ITEM(\
445 KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,\
449 NULL, NULL, 0, NULL, NULL, 0)
451 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_PROPOSEDATAFORMAT(Handler)\
452 DEFINE_KSPROPERTY_ITEM(\
453 KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT,\
456 sizeof(KSDATAFORMAT),\
458 NULL, 0, NULL, NULL, 0)
460 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ACQUIREORDERING(Handler)\
461 DEFINE_KSPROPERTY_ITEM(\
462 KSPROPERTY_CONNECTION_ACQUIREORDERING,\
466 NULL, NULL, 0, NULL, NULL, 0)
468 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_STARTAT(Handler)\
469 DEFINE_KSPROPERTY_ITEM(\
470 KSPROPERTY_CONNECTION_STARTAT,\
473 sizeof(KSRELATIVEEVENT),\
475 NULL, 0, NULL, NULL, 0)
480 KSEVENT_CONNECTION_POSITIONUPDATE
,
481 KSEVENT_CONNECTION_DATADISCONTINUITY
,
482 KSEVENT_CONNECTION_TIMEDISCONTINUITY
,
483 KSEVENT_CONNECTION_PRIORITY
,
484 KSEVENT_CONNECTION_ENDOFSTREAM
485 } KSEVENT_CONNECTION
;
488 /* ===============================================================
490 Properties/Methods/Events
493 #define STATIC_KSPROPSETID_General\
494 0x1464EDA5L, 0x6A8F, 0x11D1, {0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
495 DEFINE_GUIDSTRUCT("1464EDA5-6A8F-11D1-9AA7-00A0C9223196", KSPROPSETID_General
);
496 #define KSPROPSETID_General DEFINE_GUIDNAMED(KSPROPSETID_General)
501 KSPROPERTY_GENERAL_COMPONENTID
502 } KSPROPERTY_GENERAL
;
505 /* ===============================================================
507 Properties/Methods/Events
510 #define KSPROPSETID_GM \
511 0xAF627536L, 0xE719, 0x11D2, {0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D}
515 KSPROPERTY_GM_GRAPHMANAGER
,
516 KSPROPERTY_GM_TIMESTAMP_CLOCK
,
517 KSPROPERTY_GM_RATEMATCH
,
518 KSPROPERTY_GM_RENDERCLOCK
522 /* ===============================================================
524 Properties/Methods/Events
527 #define STATIC_KSPROPSETID_MediaSeeking\
528 0xEE904F0CL, 0xD09B, 0x11D0, {0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
529 DEFINE_GUIDSTRUCT("EE904F0C-D09B-11D0-ABE9-00A0C9223196", KSPROPSETID_MediaSeeking
);
530 #define KSPROPSETID_MediaSeeking DEFINE_GUIDNAMED(KSPROPSETID_MediaSeeking)
533 KSPROPERTY_MEDIASEEKING_CAPABILITIES
,
534 KSPROPERTY_MEDIASEEKING_FORMATS
,
535 KSPROPERTY_MEDIASEEKING_TIMEFORMAT
,
536 KSPROPERTY_MEDIASEEKING_POSITION
,
537 KSPROPERTY_MEDIASEEKING_STOPPOSITION
,
538 KSPROPERTY_MEDIASEEKING_POSITIONS
,
539 KSPROPERTY_MEDIASEEKING_DURATION
,
540 KSPROPERTY_MEDIASEEKING_AVAILABLE
,
541 KSPROPERTY_MEDIASEEKING_PREROLL
,
542 KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT
543 } KSPROPERTY_MEDIASEEKING
;
546 KS_SEEKING_NoPositioning
,
547 KS_SEEKING_AbsolutePositioning
,
548 KS_SEEKING_RelativePositioning
,
549 KS_SEEKING_IncrementalPositioning
,
550 KS_SEEKING_PositioningBitsMask
= 0x3,
551 KS_SEEKING_SeekToKeyFrame
,
552 KS_SEEKING_ReturnTime
= 0x8
556 KS_SEEKING_CanSeekAbsolute
= 0x1,
557 KS_SEEKING_CanSeekForwards
= 0x2,
558 KS_SEEKING_CanSeekBackwards
= 0x4,
559 KS_SEEKING_CanGetCurrentPos
= 0x8,
560 KS_SEEKING_CanGetStopPos
= 0x10,
561 KS_SEEKING_CanGetDuration
= 0x20,
562 KS_SEEKING_CanPlayBackwards
= 0x40
563 } KS_SEEKING_CAPABILITIES
;
568 KS_SEEKING_FLAGS CurrentFlags
;
569 KS_SEEKING_FLAGS StopFlags
;
570 } KSPROPERTY_POSITIONS
, *PKSPROPERTY_POSITIONS
;
575 } KSPROPERTY_MEDIAAVAILABLE
, *PKSPROPERTY_MEDIAAVAILABLE
;
582 } KSP_TIMEFORMAT
, *PKSP_TIMEFORMAT
;
584 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CAPABILITIES(Handler)\
585 DEFINE_KSPROPERTY_ITEM(\
586 KSPROPERTY_MEDIASEEKING_CAPABILITIES,\
589 sizeof(KS_SEEKING_CAPABILITIES),\
590 NULL, NULL, 0, NULL, NULL, 0)
592 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_FORMATS(Handler)\
593 DEFINE_KSPROPERTY_ITEM(\
594 KSPROPERTY_MEDIASEEKING_FORMATS,\
598 NULL, NULL, 0, NULL, NULL, 0)
600 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_TIMEFORMAT(GetHandler, SetHandler)\
601 DEFINE_KSPROPERTY_ITEM(\
602 KSPROPERTY_MEDIASEEKING_TIMEFORMAT,\
607 NULL, 0, NULL, NULL, 0)
609 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITION(Handler)\
610 DEFINE_KSPROPERTY_ITEM(\
611 KSPROPERTY_MEDIASEEKING_POSITION,\
615 NULL, NULL, 0, NULL, NULL, 0)
617 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_STOPPOSITION(Handler)\
618 DEFINE_KSPROPERTY_ITEM(\
619 KSPROPERTY_MEDIASEEKING_STOPPOSITION,\
623 NULL, NULL, 0, NULL, NULL, 0)
625 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITIONS(Handler)\
626 DEFINE_KSPROPERTY_ITEM(\
627 KSPROPERTY_MEDIASEEKING_POSITIONS,\
630 sizeof(KSPROPERTY_POSITIONS),\
632 NULL, 0, NULL, NULL, 0)
634 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_DURATION(Handler)\
635 DEFINE_KSPROPERTY_ITEM(\
636 KSPROPERTY_MEDIASEEKING_DURATION,\
640 NULL, NULL, 0, NULL, NULL, 0)
642 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_AVAILABLE(Handler)\
643 DEFINE_KSPROPERTY_ITEM(\
644 KSPROPERTY_MEDIASEEKING_AVAILABLE,\
647 sizeof(KSPROPERTY_MEDIAAVAILABLE),\
648 NULL, NULL, 0, NULL, NULL, 0)
650 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_PREROLL(Handler)\
651 DEFINE_KSPROPERTY_ITEM(\
652 KSPROPERTY_MEDIASEEKING_PREROLL,\
656 NULL, NULL, 0, NULL, NULL, 0)
658 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CONVERTTIMEFORMAT(Handler)\
659 DEFINE_KSPROPERTY_ITEM(\
660 KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT,\
662 sizeof(KSP_TIMEFORMAT),\
664 NULL, NULL, 0, NULL, NULL, 0)
666 /* ===============================================================
668 Properties/Methods/Events
671 #define STATIC_KSPROPSETID_Pin\
672 0x8C134960L, 0x51AD, 0x11CF, {0x87, 0x8A, 0x94, 0xF8, 0x01, 0xC1, 0x00, 0x00}
673 DEFINE_GUIDSTRUCT("8C134960-51AD-11CF-878A-94F801C10000", KSPROPSETID_Pin
);
674 #define KSPROPSETID_Pin DEFINE_GUIDNAMED(KSPROPSETID_Pin)
676 #define STATIC_KSNAME_Pin\
677 0x146F1A80L, 0x4791, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
678 DEFINE_GUIDSTRUCT("146F1A80-4791-11D0-A5D6-28DB04C10000", KSNAME_Pin
);
679 #define KSNAME_Pin DEFINE_GUIDNAMED(KSNAME_Pin)
684 KSPROPERTY_PIN_CINSTANCES
,
685 KSPROPERTY_PIN_CTYPES
,
686 KSPROPERTY_PIN_DATAFLOW
,
687 KSPROPERTY_PIN_DATARANGES
,
688 KSPROPERTY_PIN_DATAINTERSECTION
,
689 KSPROPERTY_PIN_INTERFACES
,
690 KSPROPERTY_PIN_MEDIUMS
,
691 KSPROPERTY_PIN_COMMUNICATION
,
692 KSPROPERTY_PIN_GLOBALCINSTANCES
,
693 KSPROPERTY_PIN_NECESSARYINSTANCES
,
694 KSPROPERTY_PIN_PHYSICALCONNECTION
,
695 KSPROPERTY_PIN_CATEGORY
,
697 KSPROPERTY_PIN_CONSTRAINEDDATARANGES
,
698 KSPROPERTY_PIN_PROPOSEDATAFORMAT
706 } KSP_PIN
, *PKSP_PIN
;
708 #define KSINSTANCE_INDETERMINATE ((ULONG)-1)
714 } KSPIN_CINSTANCES
, *PKSPIN_CINSTANCES
;
720 WCHAR SymbolicLinkName
[1];
721 } KSPIN_PHYSICALCONNECTION
, *PKSPIN_PHYSICALCONNECTION
;
724 /* ===============================================================
726 Properties/Methods/Events
729 #define KSPROPSETID_Quality \
730 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
734 KSPROPERTY_QUALITY_REPORT
,
735 KSPROPERTY_QUALITY_ERROR
736 } KSPROPERTY_QUALITY
;
739 /* ===============================================================
741 Properties/Methods/Events
744 #define STATIC_KSPROPSETID_Stream\
745 0x65aaba60L, 0x98ae, 0x11cf, {0xa1, 0x0d, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4}
746 DEFINE_GUIDSTRUCT("65aaba60-98ae-11cf-a10d-0020afd156e4", KSPROPSETID_Stream
);
747 #define KSPROPSETID_Stream DEFINE_GUIDNAMED(KSPROPSETID_Stream)
751 KSPROPERTY_STREAM_ALLOCATOR
,
752 KSPROPERTY_STREAM_QUALITY
,
753 KSPROPERTY_STREAM_DEGRADATION
,
754 KSPROPERTY_STREAM_MASTERCLOCK
,
755 KSPROPERTY_STREAM_TIMEFORMAT
,
756 KSPROPERTY_STREAM_PRESENTATIONTIME
,
757 KSPROPERTY_STREAM_PRESENTATIONEXTENT
,
758 KSPROPERTY_STREAM_FRAMETIME
,
759 KSPROPERTY_STREAM_RATECAPABILITY
,
760 KSPROPERTY_STREAM_RATE
,
761 KSPROPERTY_STREAM_PIPE_ID
764 #define DEFINE_KSPROPERTY_ITEM_STREAM_ALLOCATOR(GetHandler, SetHandler)\
765 DEFINE_KSPROPERTY_ITEM(\
766 KSPROPERTY_STREAM_ALLOCATOR,\
771 NULL, 0, NULL, NULL, 0)
773 #define DEFINE_KSPROPERTY_ITEM_STREAM_QUALITY(Handler)\
774 DEFINE_KSPROPERTY_ITEM(\
775 KSPROPERTY_STREAM_QUALITY,\
778 sizeof(KSQUALITY_MANAGER),\
779 NULL, NULL, 0, NULL, NULL, 0)
781 #define DEFINE_KSPROPERTY_ITEM_STREAM_DEGRADATION(GetHandler, SetHandler)\
782 DEFINE_KSPROPERTY_ITEM(\
783 KSPROPERTY_STREAM_DEGRADATION,\
788 NULL, 0, NULL, NULL, 0)
790 #define DEFINE_KSPROPERTY_ITEM_STREAM_MASTERCLOCK(GetHandler, SetHandler)\
791 DEFINE_KSPROPERTY_ITEM(\
792 KSPROPERTY_STREAM_MASTERCLOCK,\
797 NULL, 0, NULL, NULL, 0)
799 #define DEFINE_KSPROPERTY_ITEM_STREAM_TIMEFORMAT(Handler)\
800 DEFINE_KSPROPERTY_ITEM(\
801 KSPROPERTY_STREAM_TIMEFORMAT,\
805 NULL, NULL, 0, NULL, NULL, 0)
807 #define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONTIME(GetHandler, SetHandler)\
808 DEFINE_KSPROPERTY_ITEM(\
809 KSPROPERTY_STREAM_PRESENTATIONTIME,\
814 NULL, 0, NULL, NULL, 0)
816 #define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONEXTENT(Handler)\
817 DEFINE_KSPROPERTY_ITEM(\
818 KSPROPERTY_STREAM_PRESENTATIONEXTENT,\
822 NULL, NULL, 0, NULL, NULL, 0)
824 #define DEFINE_KSPROPERTY_ITEM_STREAM_FRAMETIME(Handler)\
825 DEFINE_KSPROPERTY_ITEM(\
826 KSPROPERTY_STREAM_FRAMETIME,\
829 sizeof(KSFRAMETIME),\
830 NULL, NULL, 0, NULL, NULL, 0)
832 #define DEFINE_KSPROPERTY_ITEM_STREAM_RATECAPABILITY(Handler)\
833 DEFINE_KSPROPERTY_ITEM(\
834 KSPROPERTY_STREAM_RATECAPABILITY,\
836 sizeof(KSRATE_CAPABILITY),\
838 NULL, NULL, 0, NULL, NULL, 0)
840 #define DEFINE_KSPROPERTY_ITEM_STREAM_RATE(GetHandler, SetHandler)\
841 DEFINE_KSPROPERTY_ITEM(\
842 KSPROPERTY_STREAM_RATE,\
847 NULL, 0, NULL, NULL, 0)
849 #define DEFINE_KSPROPERTY_ITEM_STREAM_PIPE_ID(GetHandler, SetHandler)\
850 DEFINE_KSPROPERTY_ITEM(\
851 KSPROPERTY_STREAM_PIPE_ID,\
856 NULL, 0, NULL, NULL, 0)
858 /* ===============================================================
860 Properties/Methods/Events
863 #define STATIC_KSPROPSETID_StreamAllocator\
864 0xcf6e4342L, 0xec87, 0x11cf, {0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4}
865 DEFINE_GUIDSTRUCT("cf6e4342-ec87-11cf-a130-0020afd156e4", KSPROPSETID_StreamAllocator
);
866 #define KSPROPSETID_StreamAllocator DEFINE_GUIDNAMED(KSPROPSETID_StreamAllocator)
870 KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE
,
871 KSPROPERTY_STREAMALLOCATOR_STATUS
872 } KSPROPERTY_STREAMALLOCATOR
;
874 #define KSMETHODSETID_StreamAllocator \
875 0xcf6e4341L, 0xec87, 0x11cf, {0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4}
879 KSMETHOD_STREAMALLOCATOR_ALLOC
,
880 KSMETHOD_STREAMALLOCATOR_FREE
881 } KSMETHOD_STREAMALLOCATOR
;
884 #define KSEVENTSETID_StreamAllocator
888 KSEVENT_STREAMALLOCATOR_INTERNAL_FREEFRAME
,
889 KSEVENT_STREAMALLOCATOR_FREEFRAME
890 } KSEVENT_STREAMALLOCATOR
;
893 /* ===============================================================
895 Properties/Methods/Events
898 #define KSPROPSETID_StreamInterface \
899 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
903 KSPROPERTY_STREAMINTERFACE_HEADERSIZE
904 } KSPROPERTY_STREAMINTERFACE
;
907 /* ===============================================================
909 Properties/Methods/Events
912 #define STATIC_KSPROPSETID_Topology\
913 0x720D4AC0L, 0x7533, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
914 DEFINE_GUIDSTRUCT("720D4AC0-7533-11D0-A5D6-28DB04C10000", KSPROPSETID_Topology
);
915 #define KSPROPSETID_Topology DEFINE_GUIDNAMED(KSPROPSETID_Topology)
918 KSPROPERTY_TOPOLOGY_CATEGORIES
,
919 KSPROPERTY_TOPOLOGY_NODES
,
920 KSPROPERTY_TOPOLOGY_CONNECTIONS
,
921 KSPROPERTY_TOPOLOGY_NAME
922 } KSPROPERTY_TOPOLOGY
;
924 /* ===============================================================
925 Property Sets for audio drivers - TODO
928 #define STATIC_KSPROPTYPESETID_General \
929 0x97E99BA0L, 0xBDEA, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
930 DEFINE_GUIDSTRUCT("97E99BA0-BDEA-11CF-A5D6-28DB04C10000", KSPROPTYPESETID_General
);
931 #define KSPROPTYPESETID_General DEFINE_GUIDNAMED(KSPROPTYPESETID_General)
934 KSPROPERTY_AC3_ALTERNATE_AUDIO
935 KSPROPERTY_AC3_BIT_STREAM_MODE
936 KSPROPERTY_AC3_DIALOGUE_LEVEL
937 KSPROPERTY_AC3_DOWNMIX
938 KSPROPERTY_AC3_ERROR_CONCEALMENT
939 KSPROPERTY_AC3_LANGUAGE_CODE
940 KSPROPERTY_AC3_ROOM_TYPE
943 #define KSPROPSETID_Acoustic_Echo_Cancel
946 KSPROPERTY_AEC_NOISE_FILL_ENABLE
947 KSPROPERTY_AEC_STATUS
951 KSPROPERTY_AUDIO_3D_INTERFACE
953 KSPROPERTY_AUDIO_ALGORITHM_INSTANCE
954 KSPROPERTY_AUDIO_BASS
955 KSPROPERTY_AUDIO_BASS_BOOST
956 KSPROPERTY_AUDIO_CHANNEL_CONFIG
957 KSPROPERTY_AUDIO_CHORUS_LEVEL
958 KSPROPERTY_AUDIO_COPY_PROTECTION
959 KSPROPERTY_AUDIO_CPU_RESOURCES
960 KSPROPERTY_AUDIO_DELAY
961 KSPROPERTY_AUDIO_DEMUX_DEST
962 KSPROPERTY_AUDIO_DEV_SPECIFIC
963 KSPROPERTY_AUDIO_DYNAMIC_RANGE
964 KSPROPERTY_AUDIO_DYNAMIC_SAMPLING_RATE
965 KSPROPERTY_AUDIO_EQ_BANDS
966 KSPROPERTY_AUDIO_EQ_LEVEL
967 KSPROPERTY_AUDIO_FILTER_STATE
968 KSPROPERTY_AUDIO_LATENCY
969 KSPROPERTY_AUDIO_LOUDNESS
970 KSPROPERTY_AUDIO_MANUFACTURE_GUID
972 KSPROPERTY_AUDIO_MIX_LEVEL_CAPS
973 KSPROPERTY_AUDIO_MIX_LEVEL_TABLE
974 KSPROPERTY_AUDIO_MUTE
975 KSPROPERTY_AUDIO_MUX_SOURCE
976 KSPROPERTY_AUDIO_NUM_EQ_BANDS
977 KSPROPERTY_AUDIO_PEAKMETER
978 KSPROPERTY_AUDIO_POSITION
979 KSPROPERTY_AUDIO_PREFERRED_STATUS
980 KSPROPERTY_AUDIO_PRODUCT_GUID
981 KSPROPERTY_AUDIO_QUALITY
982 KSPROPERTY_AUDIO_REVERB_LEVEL
983 KSPROPERTY_AUDIO_SAMPLING_RATE
984 KSPROPERTY_AUDIO_STEREO_ENHANCE
985 KSPROPERTY_AUDIO_STEREO_SPEAKER_GEOMETRY
986 KSPROPERTY_AUDIO_SURROUND_ENCODE
987 KSPROPERTY_AUDIO_TREBLE
988 KSPROPERTY_AUDIO_VOLUMELEVEL
989 KSPROPERTY_AUDIO_WIDE_MODE
990 KSPROPERTY_AUDIO_WIDENESS
993 #define KSPROPSETID_AudioGfx
995 KSPROPERTY_AUDIOGFX_CAPTURETARGETDEVICEID
996 KSPROPERTY_AUDIOGFX_RENDERTARGETDEVICEID
999 #define KSPROPSETID_DirectSound3DBuffer
1001 KSPROPERTY_DIRECTSOUND3DBUFFER_ALL
1002 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEANGLES
1003 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEORIENTATION
1004 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEOUTSIDEVOLUME
1005 KSPROPERTY_DIRECTSOUND3DBUFFER_MAXDISTANCE
1006 KSPROPERTY_DIRECTSOUND3DBUFFER_MINDISTANCE
1007 KSPROPERTY_DIRECTSOUND3DBUFFER_MODE
1008 KSPROPERTY_DIRECTSOUND3DBUFFER_POSITION
1009 KSPROPERTY_DIRECTSOUND3DBUFFER_VELOCITY
1012 #define KSPROPSETID_DirectSound3DListener
1014 KSPROPERTY_DIRECTSOUND3DLISTENER_ALL
1015 KSPROPERTY_DIRECTSOUND3DLISTENER_ALLOCATION
1016 KSPROPERTY_DIRECTSOUND3DLISTENER_BATCH
1017 KSPROPERTY_DIRECTSOUND3DLISTENER_DISTANCEFACTOR
1018 KSPROPERTY_DIRECTSOUND3DLISTENER_DOPPLERFACTOR
1019 KSPROPERTY_DIRECTSOUND3DLISTENER_ORIENTATION
1020 KSPROPERTY_DIRECTSOUND3DLISTENER_POSITION
1021 KSPROPERTY_DIRECTSOUND3DLISTENER_ROLLOFFFACTOR
1022 KSPROPERTY_DIRECTSOUND3DLISTENER_VELOCITY
1025 #define KSPROPSETID_Hrtf3d
1027 KSPROPERTY_HRTF3D_FILTER_FORMAT
1028 KSPROPERTY_HRTF3D_INITIALIZE
1029 KSPROPERTY_HRTF3D_PARAMS
1032 #define KSPROPSETID_Itd3d
1034 KSPROPERTY_ITD3D_PARAMS
1037 #define KSPROPSETID_TopologyNode
1039 KSPROPERTY_TOPOLOGYNODE_ENABLE
1040 KSPROPERTY_TOPOLOGYNODE_RESET
1044 /* ===============================================================
1048 KSNODETYPE_3D_EFFECTS
1049 KSNODETYPE_ACOUSTIC_ECHO_CANCEL
1056 KSNODETYPE_DEV_SPECIFIC
1058 KSNODETYPE_DMSYNTH_CAPS
1059 KSNODETYPE_DRM_DESCRAMBLE
1060 KSNODETYPE_EQUALIZER
1064 KSNODETYPE_PEAKMETER
1065 KSNODETYPE_PROLOGIC_DECODER
1066 KSNODETYPE_PROLOGIC_ENCODER
1069 KSNODETYPE_STEREO_ENHANCE
1070 KSNODETYPE_STEREO_WIDE
1075 KSNODETYPE_SYNTHESIZER
1081 typedef PVOID KSDEVICE_HEADER
,
1088 /* ===============================================================
1092 #define KSMETHOD_TYPE_NONE 0x00000000
1093 #define KSMETHOD_TYPE_READ 0x00000001
1094 #define KSMETHOD_TYPE_WRITE 0x00000002
1095 #define KSMETHOD_TYPE_MODIFY 0x00000003
1096 #define KSMETHOD_TYPE_SOURCE 0x00000004
1097 #define KSMETHOD_TYPE_SEND 0x00000001
1098 #define KSMETHOD_TYPE_SETSUPPORT 0x00000100
1099 #define KSMETHOD_TYPE_BASICSUPPORT 0x00000200
1102 /* ===============================================================
1106 #define KSPROPERTY_TYPE_GET 0x00000001
1107 #define KSPROPERTY_TYPE_SET 0x00000002
1108 #define KSPROPERTY_TYPE_SETSUPPORT 0x00000100
1109 #define KSPROPERTY_TYPE_BASICSUPPORT 0x00000200
1110 #define KSPROPERTY_TYPE_RELATIONS 0x00000400
1111 #define KSPROPERTY_TYPE_SERIALIZESET 0x00000800
1112 #define KSPROPERTY_TYPE_UNSERIALIZESET 0x00001000
1113 #define KSPROPERTY_TYPE_SERIALIZERAW 0x00002000
1114 #define KSPROPERTY_TYPE_UNSERIALIZERAW 0x00004000
1115 #define KSPROPERTY_TYPE_SERIALIZESIZE 0x00008000
1116 #define KSPROPERTY_TYPE_DEFAULT_VALUES 0x00010000
1119 /* ===============================================================
1120 Topology Methods/Properties
1123 #define KSMETHOD_TYPE_TOPOLOGY 0x10000000
1124 #define KSPROPERTY_TYPE_TOPOLOGY 0x10000000
1127 #define DEFINE_KS_GUID(GA,GB,GC,GD,GE,GF,GG,GH,GI,GJ,GK) \
1128 DEFINE_GUID(??, 0x#GA#L, 0xGB, 0xGC, 0xGD, 0xGE, 0xGF, 0xGG, 0xGH, 0xGI, 0xGJ, 0xGK) \
1129 "GA-GB-GC-GDGE-GFGGGHGIGJGK"
1132 /* ===============================================================
1135 BRIDGE - 0x085AFF00L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1136 CAPTURE - 0x65E8773DL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1137 RENDER - 0x65E8773EL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1138 MIXER - 0xAD809C00L, 0x7B88, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1139 SPLITTER - 0x0A4252A0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1140 DATACOMPRESSOR - 0x1E84C900L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1141 DATADECOMPRESSOR - 0x2721AE20L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1142 DATATRANSFORM - 0x2EB07EA0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1143 COMMUNICATIONSTRANSFORM - 0xCF1DDA2CL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1144 INTERFACETRANSFORM - 0xCF1DDA2DL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1145 MEDIUMTRANSFORM - 0xCF1DDA2EL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1146 FILESYSTEM - 0x760FED5EL, 0x9357, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1147 CLOCK - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1148 PROXY - 0x97EBAACAL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1149 QUALITY - 0x97EBAACBL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1152 /* ===============================================================
1153 KSNAME GUIDs (defined also as KSSTRING_Xxx L"{...}"
1155 Filter - 0x9b365890L, 0x165f, 0x11d0, 0xa1, 0x95, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
1156 Pin - 0x146F1A80L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1157 Clock - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1158 Allocator - 0x642F5D00L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1159 TopologyNode - 0x0621061AL, 0xEE75, 0x11D0, 0xB9, 0x15, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1162 /* ===============================================================
1165 Standard - 0x1A8766A0L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1166 FileIo - 0x8C6F932CL, 0xE771, 0x11D0, 0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1169 /* ===============================================================
1172 Standard - 0x4747B320L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1175 /* ===============================================================
1178 General - 0x1464EDA5L, 0x6A8F, 0x11D1, 0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1179 StreamIo - 0x65D003CAL, 0x1523, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1180 MediaSeeking - 0xEE904F0CL, 0xD09B, 0x11D0, 0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1181 Topology - 0x720D4AC0L, 0x7533, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1182 GM - 0xAF627536L, 0xE719, 0x11D2, 0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D
1183 Quality - 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1184 Connection - 0x1D58C920L, 0xAC9B, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1187 /* ===============================================================
1188 StreamAllocator Sets
1190 Event set - 0x75d95571L, 0x073c, 0x11d0, 0xa1, 0x61, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
1191 Method set - 0xcf6e4341L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
1192 Property set - 0xcf6e4342L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
1195 /* ===============================================================
1196 StreamInterface Sets
1198 Property set - 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
1201 /* ===============================================================
1204 Property set - 0xDF12A4C0L, 0xAC17, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1205 Event sets - 0x364D8E20L, 0x62C7, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1208 /* ===============================================================
1211 Event set - 0x7f4bcbe0L, 0x9ea5, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00
1214 /* ===============================================================
1217 KSTIME_FORMAT_NONE (null guid)
1218 FRAME - 0x7b785570L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1219 BYTE - 0x7b785571L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1220 SAMPLE - 0x7b785572L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1221 FIELD - 0x7b785573L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1222 MEDIA_TIME - 0x7b785574L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1225 /* ===============================================================
1235 #define STATIC_KSDATAFORMAT_SPECIFIER_NONE\
1236 0x0F6417D6L, 0xC318, 0x11D0, {0xA4, 0x3F, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
1237 DEFINE_GUIDSTRUCT("0F6417D6-C318-11D0-A43F-00A0C9223196", KSDATAFORMAT_SPECIFIER_NONE
);
1238 #define KSDATAFORMAT_SPECIFIER_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_NONE)
1241 /* ===============================================================
1244 WILDCARD, DONT_CARE = NULL
1245 SYSTEM - 0x091bb638L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1246 USER - 0x8cb0fc28L, 0x7893, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1247 KERNEL_PAGED - 0xd833f8f8L, 0x7894, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1248 KERNEL_NONPAGED - 0x4a6d5fc4L, 0x7895, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1249 DEVICE_UNKNOWN - 0x091bb639L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1252 /* ===============================================================
1254 (values have been checked)
1259 #define DEFINE_KSPROPERTY_ITEM(PropertyId, GetHandler,\
1263 Values, RelationsCount, Relations, SupportHandler,\
1266 PropertyId, {(PFNKSHANDLER)GetHandler}, MinProperty, MinData,\
1267 {(PFNKSHANDLER)SetHandler},\
1268 (PKSPROPERTY_VALUES)Values, RelationsCount, (PKSPROPERTY)Relations,\
1269 (PFNKSHANDLER)SupportHandler, (ULONG)SerializedSize\
1274 #define DEFINE_KSPROPERTY_ITEM(PropertyId, GetHandler,\
1278 Values, RelationsCount, Relations, SupportHandler,\
1281 PropertyId, (PFNKSHANDLER)GetHandler, MinProperty, MinData,\
1282 (PFNKSHANDLER)SetHandler,\
1283 (PKSPROPERTY_VALUES)Values, RelationsCount, (PKSPROPERTY)Relations,\
1284 (PFNKSHANDLER)SupportHandler, (ULONG)SerializedSize\
1293 KsObjectTypeFilterFactory
,
1304 } KSSTATE
, *PKSSTATE
;
1308 KSTARGET_STATE_DISABLED
,
1309 KSTARGET_STATE_ENABLED
1324 KSEVENTS_FMUTEXUNSAFE
,
1327 } KSEVENTS_LOCKTYPE
;
1331 KSDEGRADE_STANDARD_SIMPLE
,
1332 KSDEGRADE_STANDARD_QUALITY
,
1333 KSDEGRADE_STANDARD_COMPUTATION
,
1334 KSDEGRADE_STANDARD_SKIP
1335 } KSDEGRADE_STANDARD
;
1339 KSPIN_DATAFLOW_IN
= 1,
1341 } KSPIN_DATAFLOW
, *PKSPIN_DATAFLOW
;
1345 KSPIN_COMMUNICATION_NONE
,
1346 KSPIN_COMMUNICATION_SINK
,
1347 KSPIN_COMMUNICATION_SOURCE
,
1348 KSPIN_COMMUNICATION_BOTH
,
1349 KSPIN_COMMUNICATION_BRIDGE
1350 } KSPIN_COMMUNICATION
, *PKSPIN_COMMUNICATION
;
1356 } KSLIST_ENTRY_LOCATION
;
1360 KsStackCopyToNewLocation
,
1361 KsStackReuseCurrentLocation
,
1362 KsStackUseNewLocation
1369 KsAcquireOnlySingleItem
,
1370 KsAcquireAndRemoveOnlySingleItem
1371 } KSIRP_REMOVAL_OPERATION
;
1375 KsInvokeOnSuccess
= 1,
1376 KsInvokeOnError
= 2,
1377 KsInvokeOnCancel
= 4
1378 } KSCOMPLETION_INVOCATION
;
1381 #if defined(_NTDDK_)
1383 typedef NTSTATUS (NTAPI
*PFNKSCONTEXT_DISPATCH
)(
1388 #if defined(_NTDDK_) && !defined(__wtypes_h__)
1418 VT_USERDEFINED
= 29,
1425 VT_STREAMED_OBJECT
= 68,
1426 VT_STORED_OBJECT
= 69,
1427 VT_BLOB_OBJECT
= 70,
1433 VT_RESERVED
= 0x8000,
1434 VT_ILLEGAL
= 0xffff,
1435 VT_ILLEGALMASKED
= 0xfff,
1440 #define STATIC_KSDATAFORMAT_TYPE_WILDCARD STATIC_GUID_NULL
1441 #define KSDATAFORMAT_TYPE_WILDCARD GUID_NULL
1443 #define STATIC_KSDATAFORMAT_SUBTYPE_WILDCARD STATIC_GUID_NULL
1444 #define KSDATAFORMAT_SUBTYPE_WILDCARD GUID_NULL
1446 #define STATIC_KSDATAFORMAT_SPECIFIER_WILDCARD STATIC_GUID_NULL
1447 #define KSDATAFORMAT_SPECIFIER_WILDCARD GUID_NULL
1449 /* ===============================================================
1458 } KS_FRAMING_RANGE
, *PKS_FRAMING_RANGE
;
1462 KS_FRAMING_RANGE Range
;
1463 ULONG InPlaceWeight
;
1464 ULONG NotInPlaceWeight
;
1465 } KS_FRAMING_RANGE_WEIGHTED
, *PKS_FRAMING_RANGE_WEIGHTED
;
1475 ULONG FileAlignment
;
1476 ULONG MemoryTypeWeight
;
1477 KS_FRAMING_RANGE PhysicalRange
;
1478 KS_FRAMING_RANGE_WEIGHTED FramingRange
;
1479 } KS_FRAMING_ITEM
, *PKS_FRAMING_ITEM
;
1483 ULONG RatioNumerator
;
1484 ULONG RatioDenominator
;
1485 ULONG RatioConstantMargin
;
1486 } KS_COMPRESSION
, *PKS_COMPRESSION
;
1489 /* ===============================================================
1493 #define KSPRIORITY_LOW 0x00000001
1494 #define KSPRIORITY_NORMAL 0x40000000
1495 #define KSPRIORITY_HIGH 0x80000000
1496 #define KSPRIORITY_EXCLUSIVE 0xFFFFFFFF
1500 ULONG PriorityClass
;
1501 ULONG PrioritySubClass
;
1502 } KSPRIORITY
, *PKSPRIORITY
;
1505 /* ===============================================================
1507 http://www.osronline.com/DDKx/stream/ks-struct_494j.htm
1509 #if defined(_NTDDK_)
1512 PDRIVER_DISPATCH DeviceIoControl
;
1513 PDRIVER_DISPATCH Read
;
1514 PDRIVER_DISPATCH Write
;
1515 PDRIVER_DISPATCH Flush
;
1516 PDRIVER_DISPATCH Close
;
1517 PDRIVER_DISPATCH QuerySecurity
;
1518 PDRIVER_DISPATCH SetSecurity
;
1519 PFAST_IO_DEVICE_CONTROL FastDeviceIoControl
;
1520 PFAST_IO_READ FastRead
;
1521 PFAST_IO_WRITE FastWrite
;
1522 } KSDISPATCH_TABLE
, *PKSDISPATCH_TABLE
;
1525 #define KSCREATE_ITEM_IRP_STORAGE(Irp) (*(PKSOBJECT_CREATE_ITEM*)&(Irp)->Tail.Overlay.DriverContext[0])
1526 #define KSEVENT_SET_IRP_STORAGE(Irp) (*(const KSEVENT_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1527 #define KSEVENT_ITEM_IRP_STORAGE(Irp) (*(const KSEVENT_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1528 #define KSEVENT_ENTRY_IRP_STORAGE(Irp) (*(PKSEVENT_ENTRY*)&(Irp)->Tail.Overlay.DriverContext[0])
1529 #define KSMETHOD_SET_IRP_STORAGE(Irp) (*(const KSMETHOD_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1530 #define KSMETHOD_ITEM_IRP_STORAGE(Irp) (*(const KSMETHOD_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1531 #define KSMETHOD_TYPE_IRP_STORAGE(Irp) (*(ULONG_PTR*)(&(Irp)->Tail.Overlay.DriverContext[2]))
1532 #define KSQUEUE_SPINLOCK_IRP_STORAGE(Irp) (*(PKSPIN_LOCK*)&(Irp)->Tail.Overlay.DriverContext[1])
1533 #define KSPROPERTY_SET_IRP_STORAGE(Irp) (*(const KSPROPERTY_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1534 #define KSPROPERTY_ITEM_IRP_STORAGE(Irp) (*(const KSPROPERTY_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1535 #define KSPROPERTY_ATTRIBUTES_IRP_STORAGE(Irp) (*(PKSATTRIBUTE_LIST*)&(Irp)->Tail.Overlay.DriverContext[2])
1539 (NTAPI
*PFNREFERENCEDEVICEOBJECT
)(
1545 (NTAPI
*PFNDEREFERENCEDEVICEOBJECT
)(
1551 (NTAPI
*PFNQUERYREFERENCESTRING
)(
1553 IN OUT PWCHAR
*String
1558 INTERFACE Interface
;
1559 PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject
;
1560 PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject
;
1561 PFNQUERYREFERENCESTRING QueryReferenceString
;
1562 } BUS_INTERFACE_REFERENCE
, *PBUS_INTERFACE_REFERENCE
;
1567 ULONG ReferenceCount
;
1568 KSPIN_LOCK AccessLock
;
1569 } KSDPC_ITEM
, *PKSDPC_ITEM
;
1574 LIST_ENTRY BufferList
;
1575 } KSBUFFER_ITEM
, *PKSBUFFER_ITEM
;
1587 } KSCOMPONENTID
, *PKSCOMPONENTID
;
1589 /* ===============================================================
1597 } KSPROPERTY_SERIALHDR
, *PKSPROPERTY_SERIALHDR
;
1601 KSIDENTIFIER PropTypeSet
;
1603 ULONG PropertyLength
;
1604 } KSPROPERTY_SERIAL
, *PKSPROPERTY_SERIAL
;
1613 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1620 ULONG UnsignedMinimum
;
1621 ULONG UnsignedMaximum
;
1622 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1628 } KSPROPERTY_BOUNDS_LONG
, *PKSPROPERTY_BOUNDS_LONG
;
1633 LONGLONG SignedMinimum
;
1634 LONGLONG SignedMaximum
;
1635 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1642 #if defined(_NTDDK_)
1643 ULONGLONG UnsignedMinimum
;
1644 ULONGLONG UnsignedMaximum
;
1646 DWORDLONG UnsignedMinimum
;
1647 DWORDLONG UnsignedMaximum
;
1649 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1654 } KSPROPERTY_BOUNDS_LONGLONG
, *PKSPROPERTY_BOUNDS_LONGLONG
;
1659 ULONG DescriptionSize
;
1660 KSIDENTIFIER PropTypeSet
;
1661 ULONG MembersListCount
;
1663 } KSPROPERTY_DESCRIPTION
, *PKSPROPERTY_DESCRIPTION
;
1671 } KSPROPERTY_MEMBERSHEADER
, *PKSPROPERTY_MEMBERSHEADER
;
1674 KSPROPERTY_MEMBERSHEADER MembersHeader
;
1675 const VOID
* Members
;
1676 } KSPROPERTY_MEMBERSLIST
, *PKSPROPERTY_MEMBERSLIST
;
1678 #define KSPROPERTY_MEMBER_RANGES 0x00000001
1679 #define KSPROPERTY_MEMBER_STEPPEDRANGES 0x00000002
1680 #define KSPROPERTY_MEMBER_VALUES 0x00000003
1682 #define KSPROPERTY_MEMBER_FLAG_DEFAULT 0x00000001
1683 #if (NTDDI_VERSION >= NTDDI_WINXP)
1684 #define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_MULTICHANNEL 0x00000002
1685 #define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_UNIFORM 0x00000004
1690 KSIDENTIFIER PropTypeSet
;
1691 ULONG MembersListCount
;
1692 const KSPROPERTY_MEMBERSLIST
* MembersList
;
1693 } KSPROPERTY_VALUES
, *PKSPROPERTY_VALUES
;
1695 #if defined(_NTDDK_)
1696 typedef NTSTATUS (NTAPI
*PFNKSHANDLER
)(
1698 IN PKSIDENTIFIER Request
,
1706 PFNKSHANDLER GetPropertyHandler
;
1707 BOOLEAN GetSupported
;
1712 PFNKSHANDLER SetPropertyHandler
;
1713 BOOLEAN SetSupported
;
1715 const KSPROPERTY_VALUES
* Values
;
1716 ULONG RelationsCount
;
1717 const KSPROPERTY
* Relations
;
1718 PFNKSHANDLER SupportHandler
;
1719 ULONG SerializedSize
;
1720 } KSPROPERTY_ITEM
, *PKSPROPERTY_ITEM
;
1725 (NTAPI
*PFNKSFASTHANDLER
)(
1726 IN PFILE_OBJECT FileObject
,
1727 IN PKSIDENTIFIER Request
,
1728 IN ULONG RequestLength
,
1730 IN ULONG DataLength
,
1731 OUT PIO_STATUS_BLOCK IoStatus
1737 PFNKSFASTHANDLER GetPropertyHandler
;
1738 BOOLEAN GetSupported
;
1741 PFNKSFASTHANDLER SetPropertyHandler
;
1742 BOOLEAN SetSupported
;
1745 } KSFASTPROPERTY_ITEM
, *PKSFASTPROPERTY_ITEM
;
1750 ULONG PropertiesCount
;
1751 const KSPROPERTY_ITEM
* PropertyItem
;
1753 const KSFASTPROPERTY_ITEM
* FastIoTable
;
1754 } KSPROPERTY_SET
, *PKSPROPERTY_SET
;
1760 ULONG SteppingDelta
;
1762 KSPROPERTY_BOUNDS_LONG Bounds
;
1763 } KSPROPERTY_STEPPING_LONG
, *PKSPROPERTY_STEPPING_LONG
;
1767 #if defined(_NTDDK_)
1768 ULONGLONG SteppingDelta
;
1770 DWORDLONG SteppingDelta
;
1772 KSPROPERTY_BOUNDS_LONGLONG Bounds
;
1773 } KSPROPERTY_STEPPING_LONGLONG
, *PKSPROPERTY_STEPPING_LONGLONG
;
1775 /* ===============================================================
1783 ULONG RequirementsFlags
;
1785 #if defined(_NTDDK_)
1792 ULONG FileAlignment
;
1794 } KSALLOCATOR_FRAMING
, *PKSALLOCATOR_FRAMING
;
1800 KS_COMPRESSION OutputCompression
;
1802 KS_FRAMING_ITEM FramingItem
[1];
1803 } KSALLOCATOR_FRAMING_EX
, *PKSALLOCATOR_FRAMING_EX
;
1805 #define KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER 0x00000001
1806 #define KSALLOCATOR_REQUIREMENTF_SYSTEM_MEMORY 0x00000002
1807 #define KSALLOCATOR_REQUIREMENTF_FRAME_INTEGRITY 0x00000004
1808 #define KSALLOCATOR_REQUIREMENTF_MUST_ALLOCATE 0x00000008
1809 #define KSALLOCATOR_REQUIREMENTF_PREFERENCES_ONLY 0x80000000
1811 #define KSALLOCATOR_OPTIONF_COMPATIBLE 0x00000001
1812 #define KSALLOCATOR_OPTIONF_SYSTEM_MEMORY 0x00000002
1813 #define KSALLOCATOR_OPTIONF_VALID 0x00000003
1815 #define KSALLOCATOR_FLAG_PARTIAL_READ_SUPPORT 0x00000010
1816 #define KSALLOCATOR_FLAG_DEVICE_SPECIFIC 0x00000020
1817 #define KSALLOCATOR_FLAG_CAN_ALLOCATE 0x00000040
1818 #define KSALLOCATOR_FLAG_INSIST_ON_FRAMESIZE_RATIO 0x00000080
1820 /* ===============================================================
1829 } KSQUALITY
, *PKSQUALITY
;
1833 HANDLE QualityManager
;
1835 } KSQUALITY_MANAGER
, *PKSQUALITY_MANAGER
;
1839 LONGLONG PresentationStart
;
1841 KSPIN_INTERFACE Interface
;
1848 KSPROPERTY Property
;
1850 } KSRATE_CAPABILITY
, *PKSRATE_CAPABILITY
;
1854 LONGLONG Granularity
;
1856 } KSRESOLUTION
, *PKSRESOLUTION
;
1860 ULONG NotificationType
;
1864 ULONG_PTR Reserved
[2];
1871 #if defined(_NTDDK_)
1874 KPRIORITY Increment
;
1879 KPRIORITY Increment
;
1884 ULONG ReferenceCount
;
1888 PWORK_QUEUE_ITEM WorkQueueItem
;
1889 WORK_QUEUE_TYPE WorkQueueType
;
1893 PWORK_QUEUE_ITEM WorkQueueItem
;
1894 PKSWORKER KsWorkerObject
;
1900 LONG_PTR Alignment
[2];
1903 } KSEVENTDATA
, *PKSEVENTDATA
;
1905 #define KSEVENTF_EVENT_HANDLE 0x00000001
1906 #define KSEVENTF_SEMAPHORE_HANDLE 0x00000002
1907 #if defined(_NTDDK_)
1908 #define KSEVENTF_EVENT_OBJECT 0x00000004
1909 #define KSEVENTF_SEMAPHORE_OBJECT 0x00000008
1910 #define KSEVENTF_DPC 0x00000010
1911 #define KSEVENTF_WORKITEM 0x00000020
1912 #define KSEVENTF_KSWORKITEM 0x00000080
1916 #define KSEVENT_TYPE_ENABLE 0x00000001
1917 #define KSEVENT_TYPE_ONESHOT 0x00000002
1918 #define KSEVENT_TYPE_ENABLEBUFFERED 0x00000004
1919 #define KSEVENT_TYPE_SETSUPPORT 0x00000100
1920 #define KSEVENT_TYPE_BASICSUPPORT 0x00000200
1921 #define KSEVENT_TYPE_QUERYBUFFER 0x00000400
1923 #define KSEVENT_TYPE_TOPOLOGY 0x10000000
1930 HANDLE ObjectHandle
;
1931 PVOID ObjectPointer
;
1935 KSEVENTDATA EventData
;
1936 } KSRELATIVEEVENT
, *PKSRELATIVEEVENT
;
1938 #define KSRELATIVEEVENT_FLAG_HANDLE 0x00000001
1939 #define KSRELATIVEEVENT_FLAG_POINTER 0x00000002
1941 /* ===============================================================
1947 KSEVENTDATA EventData
;
1949 } KSEVENT_TIME_MARK
, *PKSEVENT_TIME_MARK
;
1952 KSEVENTDATA EventData
;
1955 } KSEVENT_TIME_INTERVAL
, *PKSEVENT_TIME_INTERVAL
;
1960 } KSINTERVAL
, *PKSINTERVAL
;
1974 LONGLONG SystemTime
;
1975 } KSCORRELATED_TIME
, *PKSCORRELATED_TIME
;
1982 } KSFRAMETIME
, *PKSFRAMETIME
;
1985 /* ===============================================================
1989 typedef PVOID PKSDEFAULTCLOCK
;
1994 } KSCLOCK_CREATE
, *PKSCLOCK_CREATE
;
1996 #if defined(_NTDDK_)
2000 (FASTCALL
*PFNKSCLOCK_GETTIME
)(
2001 IN PFILE_OBJECT FileObject
2005 (FASTCALL
*PFNKSCLOCK_CORRELATEDTIME
)(
2006 IN PFILE_OBJECT FileObject
,
2007 OUT PLONGLONG SystemTime
);
2011 PFNKSCLOCK_GETTIME GetTime
;
2012 PFNKSCLOCK_GETTIME GetPhysicalTime
;
2013 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedTime
;
2014 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedPhysicalTime
;
2015 } KSCLOCK_FUNCTIONTABLE
, *PKSCLOCK_FUNCTIONTABLE
;
2018 #define DEFINE_KSPROPERTY_ITEM_CLOCK_TIME(Handler)\
2019 DEFINE_KSPROPERTY_ITEM(\
2020 KSPROPERTY_CLOCK_TIME,\
2022 sizeof(KSPROPERTY),\
2024 NULL, NULL, 0, NULL, NULL, 0)
2026 #define DEFINE_KSPROPERTY_ITEM_CLOCK_PHYSICALTIME(Handler)\
2027 DEFINE_KSPROPERTY_ITEM(\
2028 KSPROPERTY_CLOCK_PHYSICALTIME,\
2030 sizeof(KSPROPERTY),\
2032 NULL, NULL, 0, NULL, NULL, 0)
2034 #define DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDTIME(Handler)\
2035 DEFINE_KSPROPERTY_ITEM(\
2036 KSPROPERTY_CLOCK_CORRELATEDTIME,\
2038 sizeof(KSPROPERTY),\
2039 sizeof(KSCORRELATED_TIME),\
2040 NULL, NULL, 0, NULL, NULL, 0)
2042 #define DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDPHYSICALTIME(Handler)\
2043 DEFINE_KSPROPERTY_ITEM(\
2044 KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME,\
2046 sizeof(KSPROPERTY),\
2047 sizeof(KSCORRELATED_TIME),\
2048 NULL, NULL, 0, NULL, NULL, 0)
2050 #define DEFINE_KSPROPERTY_ITEM_CLOCK_RESOLUTION(Handler)\
2051 DEFINE_KSPROPERTY_ITEM(\
2052 KSPROPERTY_CLOCK_RESOLUTION,\
2054 sizeof(KSPROPERTY),\
2055 sizeof(KSRESOLUTION),\
2056 NULL, NULL, 0, NULL, NULL, 0)
2058 #define DEFINE_KSPROPERTY_ITEM_CLOCK_STATE(Handler)\
2059 DEFINE_KSPROPERTY_ITEM(\
2060 KSPROPERTY_CLOCK_STATE,\
2062 sizeof(KSPROPERTY),\
2064 NULL, NULL, 0, NULL, NULL, 0)
2066 #define DEFINE_KSPROPERTY_ITEM_CLOCK_FUNCTIONTABLE(Handler)\
2067 DEFINE_KSPROPERTY_ITEM(\
2068 KSPROPERTY_CLOCK_FUNCTIONTABLE,\
2070 sizeof(KSPROPERTY),\
2071 sizeof(KSCLOCK_FUNCTIONTABLE),\
2072 NULL, NULL, 0, NULL, NULL, 0)
2074 #define DEFINE_KSPROPERTY_CLOCKSET(ClockSet,\
2075 PropTime, PropPhysicalTime,\
2076 PropCorrelatedTime, PropCorrelatedPhysicalTime,\
2077 PropResolution, PropState, PropFunctionTable)\
2078 DEFINE_KSPROPERTY_TABLE(ClockSet) {\
2079 DEFINE_KSPROPERTY_ITEM_CLOCK_TIME(PropTime),\
2080 DEFINE_KSPROPERTY_ITEM_CLOCK_PHYSICALTIME(PropPhysicalTime),\
2081 DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDTIME(PropCorrelatedTime),\
2082 DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDPHYSICALTIME(PropCorrelatedPhysicalTime),\
2083 DEFINE_KSPROPERTY_ITEM_CLOCK_RESOLUTION(PropResolution),\
2084 DEFINE_KSPROPERTY_ITEM_CLOCK_STATE(PropState),\
2085 DEFINE_KSPROPERTY_ITEM_CLOCK_FUNCTIONTABLE(PropFunctionTable)\
2088 /* ===============================================================
2089 Objects ??? SORT ME!
2092 #define KSCREATE_ITEM_SECURITYCHANGED 0x1
2093 #define KSCREATE_ITEM_WILDCARD 0x2
2094 #define KSCREATE_ITEM_NOPARAMETERS 0x4
2095 #define KSCREATE_ITEM_FREEONSTOP 0x8
2099 PDRIVER_DISPATCH Create
;
2101 UNICODE_STRING ObjectClass
;
2102 PSECURITY_DESCRIPTOR SecurityDescriptor
;
2104 } KSOBJECT_CREATE_ITEM
, *PKSOBJECT_CREATE_ITEM
;
2108 ULONG CreateItemsCount
;
2109 PKSOBJECT_CREATE_ITEM CreateItemsList
;
2110 } KSOBJECT_CREATE
, *PKSOBJECT_CREATE
;
2112 typedef VOID (NTAPI
*PFNKSITEMFREECALLBACK
)(
2113 IN PKSOBJECT_CREATE_ITEM CreateItem
);
2121 } KSMULTIPLE_ITEM
, *PKSMULTIPLE_ITEM
;
2126 PKSEVENTDATA EventData
;
2128 } KSQUERYBUFFER
, *PKSQUERYBUFFER
;
2134 } KSERROR
, *PKSERROR
;
2136 /* ===============================================================
2139 #if defined(_NTDDK_)
2145 PFNKSHANDLER MethodHandler
;
2146 BOOLEAN MethodSupported
;
2150 PFNKSHANDLER SupportHandler
;
2152 } KSMETHOD_ITEM
, *PKSMETHOD_ITEM
;
2156 #define DEFINE_KSMETHOD_ITEM(MethodId, Flags,\
2158 MinMethod, MinData, SupportHandler)\
2160 MethodId, {(PFNKSHANDLER)MethodHandler}, MinMethod, MinData,\
2161 SupportHandler, Flags\
2166 #define DEFINE_KSMETHOD_ITEM(MethodId, Flags,\
2168 MinMethod, MinData, SupportHandler)\
2170 MethodId, (PFNKSHANDLER)MethodHandler, MinMethod, MinData,\
2171 SupportHandler, Flags\
2183 PFNKSFASTHANDLER MethodHandler
;
2184 BOOLEAN MethodSupported
;
2186 } KSFASTMETHOD_ITEM
, *PKSFASTMETHOD_ITEM
;
2188 #define DEFINE_KSFASTMETHOD_ITEM(MethodId, MethodHandler)\
2190 MethodId, (PFNKSFASTHANDLER)MethodHandler\
2198 const KSMETHOD_ITEM
* MethodItem
;
2200 const KSFASTMETHOD_ITEM
*FastIoTable
;
2201 } KSMETHOD_SET
, *PKSMETHOD_SET
;
2204 #define DEFINE_KSMETHOD_SET(Set,\
2218 /* ===============================================================
2224 KSPROPERTY Property
;
2227 } KSP_NODE
, *PKSP_NODE
;
2234 } KSM_NODE
, *PKSM_NODE
;
2241 } KSE_NODE
, *PKSE_NODE
;
2246 } KSNODE_CREATE
, *PKSNODE_CREATE
;
2249 /* ===============================================================
2252 typedef struct _KSEVENT_ENTRY KSEVENT_ENTRY
, *PKSEVENT_ENTRY
;
2254 #if defined(_NTDDK_)
2256 typedef NTSTATUS (NTAPI
*PFNKSADDEVENT
)(
2258 IN PKSEVENTDATA EventData
,
2259 IN
struct _KSEVENT_ENTRY
* EventEntry
);
2263 (NTAPI
*PFNKSREMOVEEVENT
)(
2264 IN PFILE_OBJECT FileObject
,
2265 IN
struct _KSEVENT_ENTRY
* EventEntry
2272 ULONG ExtraEntryData
;
2273 PFNKSADDEVENT AddHandler
;
2274 PFNKSREMOVEEVENT RemoveHandler
;
2275 PFNKSHANDLER SupportHandler
;
2276 } KSEVENT_ITEM
, *PKSEVENT_ITEM
;
2282 const KSEVENT_ITEM
* EventItem
;
2283 } KSEVENT_SET
, *PKSEVENT_SET
;
2285 struct _KSEVENT_ENTRY
2287 LIST_ENTRY ListEntry
;
2290 PKSDPC_ITEM DpcItem
;
2291 PKSBUFFER_ITEM BufferItem
;
2293 PKSEVENTDATA EventData
;
2294 ULONG NotificationType
;
2295 const KSEVENT_SET
* EventSet
;
2296 const KSEVENT_ITEM
* EventItem
;
2297 PFILE_OBJECT FileObject
;
2298 ULONG SemaphoreAdjustment
;
2304 /* ===============================================================
2308 #if defined(_NTDDK_)
2310 typedef struct _KSPIN KSPIN
, *PKSPIN
;
2311 typedef struct _KSSTREAM_POINTER KSSTREAM_POINTER
, *PKSSTREAM_POINTER
;
2312 typedef struct _KSSTREAM_POINTER_OFFSET KSSTREAM_POINTER_OFFSET
, *PKSSTREAM_POINTER_OFFSET
;
2313 typedef struct _KSMAPPING KSMAPPING
, *PKSMAPPING
;
2314 typedef struct _KSPROCESSPIN KSPROCESSPIN
, *PKSPROCESSPIN
;
2316 #define IOCTL_KS_HANDSHAKE CTL_CODE(FILE_DEVICE_KS, 0x007, METHOD_NEITHER, FILE_ANY_ACCESS)
2322 } KSHANDSHAKE
, *PKSHANDSHAKE
;
2326 (NTAPI
*PFNKSPINHANDSHAKE
)(
2334 (NTAPI
*PFNKSPINPOWER
)(
2336 IN DEVICE_POWER_STATE State
2341 (NTAPI
*PFNKSPINFRAMERETURN
)(
2343 IN PVOID Data OPTIONAL
,
2344 IN ULONG Size OPTIONAL
,
2345 IN PMDL Mdl OPTIONAL
,
2346 IN PVOID Context OPTIONAL
,
2352 (NTAPI
*PFNKSPINIRPCOMPLETION
)(
2359 (NTAPI
*PFNKSPINIRP
)(
2372 (NTAPI
*PFNKSPINVOID
)(
2378 (NTAPI
*PFNKSSTREAMPOINTER
)(
2379 IN PKSSTREAM_POINTER StreamPointer
2384 PKSATTRIBUTE
* Attributes
;
2385 } KSATTRIBUTE_LIST
, *PKSATTRIBUTE_LIST
;
2389 (NTAPI
*PFNKSPINSETDATAFORMAT
)(
2391 IN PKSDATAFORMAT OldFormat OPTIONAL
,
2392 IN PKSMULTIPLE_ITEM OldAttributeList OPTIONAL
,
2393 IN
const KSDATARANGE
* DataRange
,
2394 IN
const KSATTRIBUTE_LIST
* AttributeRange OPTIONAL
2399 (NTAPI
*PFNKSPINSETDEVICESTATE
)(
2402 IN KSSTATE FromState
2405 typedef struct _KSCLOCK_DISPATCH KSCLOCK_DISPATCH
, *PKSCLOCK_DISPATCH
;
2406 typedef struct _KSALLOCATOR_DISPATCH KSALLOCATOR_DISPATCH
, *PKSALLOCATOR_DISPATCH
;
2414 PFNKSPINSETDATAFORMAT SetDataFormat
;
2415 PFNKSPINSETDEVICESTATE SetDeviceState
;
2417 PFNKSPINVOID Disconnect
;
2418 const KSCLOCK_DISPATCH
* Clock
;
2419 const KSALLOCATOR_DISPATCH
* Allocator
;
2420 } KSPIN_DISPATCH
, *PKSPIN_DISPATCH
;
2424 (NTAPI
*PFNKSPINSETTIMER
)(
2427 IN LARGE_INTEGER DueTime
,
2433 (NTAPI
*PFNKSPINCANCELTIMER
)(
2440 (FASTCALL
*PFNKSPINCORRELATEDTIME
)(
2442 OUT PLONGLONG SystemTime
2447 (NTAPI
*PFNKSPINRESOLUTION
)(
2449 OUT PKSRESOLUTION Resolution
2452 struct _KSCLOCK_DISPATCH
{
2453 PFNKSPINSETTIMER SetTimer
;
2454 PFNKSPINCANCELTIMER CancelTimer
;
2455 PFNKSPINCORRELATEDTIME CorrelatedTime
;
2456 PFNKSPINRESOLUTION Resolution
;
2461 (NTAPI
*PFNKSPININITIALIZEALLOCATOR
)(
2463 IN PKSALLOCATOR_FRAMING AllocatorFraming
,
2467 typedef PVOID (NTAPI
*PFNKSDELETEALLOCATOR
)(
2470 typedef PVOID (NTAPI
*PFNKSDEFAULTALLOCATE
)(
2473 typedef PVOID (NTAPI
*PFNKSDEFAULTFREE
)(
2477 struct _KSALLOCATOR_DISPATCH
{
2478 PFNKSPININITIALIZEALLOCATOR InitializeAllocator
;
2479 PFNKSDELETEALLOCATOR DeleteAllocator
;
2480 PFNKSDEFAULTALLOCATE Allocate
;
2481 PFNKSDEFAULTFREE Free
;
2486 ULONG PropertySetsCount
;
2487 ULONG PropertyItemSize
;
2488 const KSPROPERTY_SET
* PropertySets
;
2489 ULONG MethodSetsCount
;
2490 ULONG MethodItemSize
;
2491 const KSMETHOD_SET
* MethodSets
;
2492 ULONG EventSetsCount
;
2493 ULONG EventItemSize
;
2494 const KSEVENT_SET
* EventSets
;
2495 #if !defined(_WIN64)
2498 } KSAUTOMATION_TABLE
, *PKSAUTOMATION_TABLE
;
2504 ULONG InterfacesCount
;
2505 const KSPIN_INTERFACE
* Interfaces
;
2507 const KSPIN_MEDIUM
* Mediums
;
2508 ULONG DataRangesCount
;
2509 const PKSDATARANGE
* DataRanges
;
2510 KSPIN_DATAFLOW DataFlow
;
2511 KSPIN_COMMUNICATION Communication
;
2512 const GUID
* Category
;
2517 ULONG ConstrainedDataRangesCount
;
2518 PKSDATARANGE
* ConstrainedDataRanges
;
2521 } KSPIN_DESCRIPTOR
, *PKSPIN_DESCRIPTOR
;
2525 (NTAPI
*PFNKSINTERSECTHANDLER
)(
2528 IN PKSDATARANGE DataRange
,
2529 OUT PVOID Data OPTIONAL
2534 (NTAPI
*PFNKSINTERSECTHANDLEREX
)(
2538 IN PKSDATARANGE DataRange
,
2539 IN PKSDATARANGE MatchingDataRange
,
2540 IN ULONG DataBufferSize
,
2541 OUT PVOID Data OPTIONAL
,
2547 const KSPIN_DISPATCH
* Dispatch
;
2548 const KSAUTOMATION_TABLE
* AutomationTable
;
2549 KSPIN_DESCRIPTOR PinDescriptor
;
2551 ULONG InstancesPossible
;
2552 ULONG InstancesNecessary
;
2553 const KSALLOCATOR_FRAMING_EX
* AllocatorFraming
;
2554 PFNKSINTERSECTHANDLEREX IntersectHandler
;
2555 } KSPIN_DESCRIPTOR_EX
, *PKSPIN_DESCRIPTOR_EX
;
2557 #define KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING 0x00000001
2558 #define KSFILTER_FLAG_CRITICAL_PROCESSING 0x00000002
2559 #define KSFILTER_FLAG_HYPERCRITICAL_PROCESSING 0x00000004
2560 #define KSFILTER_FLAG_RECEIVE_ZERO_LENGTH_SAMPLES 0x00000008
2561 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
2562 #define KSFILTER_FLAG_DENY_USERMODE_ACCESS 0x80000000
2566 #define KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING
2567 #define KSPIN_FLAG_CRITICAL_PROCESSING KSFILTER_FLAG_CRITICAL_PROCESSING
2568 #define KSPIN_FLAG_HYPERCRITICAL_PROCESSING KSFILTER_FLAG_HYPERCRITICAL_PROCESSING
2569 #define KSPIN_FLAG_ASYNCHRONOUS_PROCESSING 0x00000008
2570 #define KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING 0x00000010
2571 #define KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL 0x00000020
2572 #define KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING 0x00000040
2573 #define KSPIN_FLAG_ENFORCE_FIFO 0x00000080
2575 #define KSPIN_FLAG_GENERATE_MAPPINGS 0x00000100
2576 #define KSPIN_FLAG_DISTINCT_TRAILING_EDGE 0x00000200
2578 #define KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY 0x00010000
2579 #define KSPIN_FLAG_SPLITTER 0x00020000
2580 #define KSPIN_FLAG_USE_STANDARD_TRANSPORT 0x00040000
2581 #define KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT 0x00080000
2582 #define KSPIN_FLAG_FIXED_FORMAT 0x00100000
2583 #define KSPIN_FLAG_GENERATE_EOS_EVENTS 0x00200000
2584 #define KSPIN_FLAG_RENDERER (KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY|KSPIN_FLAG_GENERATE_EOS_EVENTS)
2585 #define KSPIN_FLAG_IMPLEMENT_CLOCK 0x00400000
2586 #define KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING 0x00800000
2587 #define KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE 0x01000000
2588 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
2589 #define KSPIN_FLAG_DENY_USERMODE_ACCESS 0x80000000
2594 const KSPIN_DESCRIPTOR_EX
* Descriptor
;
2598 KSPIN_COMMUNICATION Communication
;
2599 BOOLEAN ConnectionIsExternal
;
2600 KSPIN_INTERFACE ConnectionInterface
;
2601 KSPIN_MEDIUM ConnectionMedium
;
2602 KSPRIORITY ConnectionPriority
;
2603 PKSDATAFORMAT ConnectionFormat
;
2604 PKSMULTIPLE_ITEM AttributeList
;
2605 ULONG StreamHeaderSize
;
2606 KSPIN_DATAFLOW DataFlow
;
2607 KSSTATE DeviceState
;
2609 KSSTATE ClientState
;
2612 #define DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(Handler)\
2613 DEFINE_KSPROPERTY_ITEM(\
2614 KSPROPERTY_PIN_CINSTANCES,\
2617 sizeof(KSPIN_CINSTANCES),\
2618 NULL, NULL, 0, NULL, NULL, 0)
2620 #define DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(Handler)\
2621 DEFINE_KSPROPERTY_ITEM(\
2622 KSPROPERTY_PIN_CTYPES,\
2624 sizeof(KSPROPERTY),\
2626 NULL, NULL, 0, NULL, NULL, 0)
2628 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(Handler)\
2629 DEFINE_KSPROPERTY_ITEM(\
2630 KSPROPERTY_PIN_DATAFLOW,\
2633 sizeof(KSPIN_DATAFLOW),\
2634 NULL, NULL, 0, NULL, NULL, 0)
2636 #define DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(Handler)\
2637 DEFINE_KSPROPERTY_ITEM(\
2638 KSPROPERTY_PIN_DATARANGES,\
2642 NULL, NULL, 0, NULL, NULL, 0)
2644 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(Handler)\
2645 DEFINE_KSPROPERTY_ITEM(\
2646 KSPROPERTY_PIN_DATAINTERSECTION,\
2648 sizeof(KSP_PIN) + sizeof(KSMULTIPLE_ITEM),\
2650 NULL, NULL, 0, NULL, NULL, 0)
2652 #define DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(Handler)\
2653 DEFINE_KSPROPERTY_ITEM(\
2654 KSPROPERTY_PIN_INTERFACES,\
2658 NULL, NULL, 0, NULL, NULL, 0)
2660 #define DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(Handler)\
2661 DEFINE_KSPROPERTY_ITEM(\
2662 KSPROPERTY_PIN_MEDIUMS,\
2666 NULL, NULL, 0, NULL, NULL, 0)
2668 #define DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(Handler)\
2669 DEFINE_KSPROPERTY_ITEM(\
2670 KSPROPERTY_PIN_COMMUNICATION,\
2673 sizeof(KSPIN_COMMUNICATION),\
2674 NULL, NULL, 0, NULL, NULL, 0)
2676 #define DEFINE_KSPROPERTY_ITEM_PIN_GLOBALCINSTANCES(Handler)\
2677 DEFINE_KSPROPERTY_ITEM(\
2678 KSPROPERTY_PIN_GLOBALCINSTANCES,\
2681 sizeof(KSPIN_CINSTANCES),\
2682 NULL, NULL, 0, NULL, NULL, 0)
2684 #define DEFINE_KSPROPERTY_ITEM_PIN_NECESSARYINSTANCES(Handler)\
2685 DEFINE_KSPROPERTY_ITEM(\
2686 KSPROPERTY_PIN_NECESSARYINSTANCES,\
2690 NULL, NULL, 0, NULL, NULL, 0)
2692 #define DEFINE_KSPROPERTY_ITEM_PIN_PHYSICALCONNECTION(Handler)\
2693 DEFINE_KSPROPERTY_ITEM(\
2694 KSPROPERTY_PIN_PHYSICALCONNECTION,\
2698 NULL, NULL, 0, NULL, NULL, 0)
2700 #define DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(Handler)\
2701 DEFINE_KSPROPERTY_ITEM(\
2702 KSPROPERTY_PIN_CATEGORY,\
2706 NULL, NULL, 0, NULL, NULL, 0)
2708 #define DEFINE_KSPROPERTY_ITEM_PIN_NAME(Handler)\
2709 DEFINE_KSPROPERTY_ITEM(\
2710 KSPROPERTY_PIN_NAME,\
2714 NULL, NULL, 0, NULL, NULL, 0)
2716 #define DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(Handler)\
2717 DEFINE_KSPROPERTY_ITEM(\
2718 KSPROPERTY_PIN_CONSTRAINEDDATARANGES,\
2722 NULL, NULL, 0, NULL, NULL, 0)
2724 #define DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(Handler)\
2725 DEFINE_KSPROPERTY_ITEM(\
2726 KSPROPERTY_PIN_PROPOSEDATAFORMAT,\
2729 sizeof(KSDATAFORMAT),\
2730 (Handler), NULL, 0, NULL, NULL, 0)
2732 #define DEFINE_KSPROPERTY_PINSET(PinSet,\
2733 PropGeneral, PropInstances, PropIntersection)\
2734 DEFINE_KSPROPERTY_TABLE(PinSet) {\
2735 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
2736 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
2737 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
2738 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
2739 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
2740 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
2741 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
2742 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
2743 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
2744 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral)\
2747 #define DEFINE_KSPROPERTY_PINSETCONSTRAINED(PinSet,\
2748 PropGeneral, PropInstances, PropIntersection)\
2749 DEFINE_KSPROPERTY_TABLE(PinSet) {\
2750 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
2751 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
2752 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
2753 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
2754 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
2755 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
2756 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
2757 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
2758 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
2759 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral),\
2760 DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral)\
2773 #define DEFINE_KSPROPERTY_TABLE(tablename)\
2774 const KSPROPERTY_ITEM tablename[] =
2780 KSPIN_INTERFACE Interface
;
2781 KSPIN_MEDIUM Medium
;
2784 KSPRIORITY Priority
;
2785 } KSPIN_CONNECT
, *PKSPIN_CONNECT
;
2787 /* ===============================================================
2797 } KSTOPOLOGY_CONNECTION
, *PKSTOPOLOGY_CONNECTION
;
2801 ULONG CategoriesCount
;
2802 const GUID
* Categories
;
2803 ULONG TopologyNodesCount
;
2804 const GUID
* TopologyNodes
;
2805 ULONG TopologyConnectionsCount
;
2806 const KSTOPOLOGY_CONNECTION
* TopologyConnections
;
2807 const GUID
* TopologyNodesNames
;
2809 } KSTOPOLOGY
, *PKSTOPOLOGY
;
2812 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler)\
2813 DEFINE_KSPROPERTY_ITEM(\
2814 KSPROPERTY_TOPOLOGY_CATEGORIES,\
2816 sizeof(KSPROPERTY),\
2818 NULL, NULL, 0, NULL, NULL, 0)
2820 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler)\
2821 DEFINE_KSPROPERTY_ITEM(\
2822 KSPROPERTY_TOPOLOGY_NODES,\
2824 sizeof(KSPROPERTY),\
2826 NULL, NULL, 0, NULL, NULL, 0)
2828 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler)\
2829 DEFINE_KSPROPERTY_ITEM(\
2830 KSPROPERTY_TOPOLOGY_CONNECTIONS,\
2832 sizeof(KSPROPERTY),\
2834 NULL, NULL, 0, NULL, NULL, 0)
2836 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\
2837 DEFINE_KSPROPERTY_ITEM(\
2838 KSPROPERTY_TOPOLOGY_NAME,\
2842 NULL, NULL, 0, NULL, NULL, 0)
2844 #define DEFINE_KSPROPERTY_TOPOLOGYSET(TopologySet, Handler)\
2845 DEFINE_KSPROPERTY_TABLE(TopologySet) {\
2846 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler),\
2847 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler),\
2848 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler),\
2849 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\
2852 /* ===============================================================
2857 typedef void* UNKNOWN
;
2859 typedef PVOID (NTAPI
*PFNKSINITIALIZEALLOCATOR
)(
2860 IN PVOID InitialContext
,
2861 IN PKSALLOCATOR_FRAMING AllocatorFraming
,
2862 OUT PVOID
* Context
);
2864 #if defined(_NTDDK_)
2865 typedef NTSTATUS (NTAPI
*PFNKSALLOCATOR
)(
2867 IN ULONG BufferSize
,
2868 IN BOOLEAN InputOperation
);
2870 typedef NTSTATUS (NTAPI
*PFNKINTERSECTHANDLEREX
)(
2874 IN PKSDATARANGE DataRange
,
2875 IN PKSDATARANGE MatchingDataRange
,
2876 IN ULONG DataBufferSize
,
2877 OUT PVOID Data OPTIONAL
,
2878 OUT PULONG DataSize
);
2883 (NTAPI
*PFNALLOCATOR_ALLOCATEFRAME
)(
2884 IN PFILE_OBJECT FileObject
,
2890 (NTAPI
*PFNALLOCATOR_FREEFRAME
)(
2891 IN PFILE_OBJECT FileObject
,
2896 PFNALLOCATOR_ALLOCATEFRAME AllocateFrame
;
2897 PFNALLOCATOR_FREEFRAME FreeFrame
;
2898 } KSSTREAMALLOCATOR_FUNCTIONTABLE
, *PKSSTREAMALLOCATOR_FUNCTIONTABLE
;
2904 KSALLOCATOR_FRAMING Framing
;
2905 ULONG AllocatedFrames
;
2907 } KSSTREAMALLOCATOR_STATUS
, *PKSSTREAMALLOCATOR_STATUS
;
2911 KSALLOCATOR_FRAMING_EX Framing
;
2912 ULONG AllocatedFrames
;
2914 } KSSTREAMALLOCATOR_STATUS_EX
, *PKSSTREAMALLOCATOR_STATUS_EX
;
2919 ULONG TypeSpecificFlags
;
2920 KSTIME PresentationTime
;
2929 } KSSTREAM_HEADER
, *PKSSTREAM_HEADER
;
2931 #define KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT 0x00000001
2932 #define KSSTREAM_HEADER_OPTIONSF_PREROLL 0x00000002
2933 #define KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY 0x00000004
2934 #define KSSTREAM_HEADER_OPTIONSF_TYPECHANGED 0x00000008
2935 #define KSSTREAM_HEADER_OPTIONSF_TIMEVALID 0x00000010
2936 #define KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY 0x00000040
2937 #define KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE 0x00000080
2938 #define KSSTREAM_HEADER_OPTIONSF_DURATIONVALID 0x00000100
2939 #define KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM 0x00000200
2940 #define KSSTREAM_HEADER_OPTIONSF_BUFFEREDTRANSFER 0x00000400
2941 #define KSSTREAM_HEADER_OPTIONSF_VRAM_DATA_TRANSFER 0x00000800
2942 #define KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA 0x80000000
2944 /* ===============================================================
2947 #if defined(_NTDDK_)
2949 typedef struct _KSGATE KSGATE
, *PKSGATE
;
2962 IN PKSGATE Gate OPTIONAL
)
2964 while (Gate
&& (InterlockedIncrement(&Gate
->Count
) == 1))
2966 Gate
= Gate
->NextGate
;
2974 IN PKSGATE Gate OPTIONAL
)
2976 while (Gate
&& (InterlockedDecrement(&Gate
->Count
) == 0))
2978 Gate
= Gate
->NextGate
;
2985 KsGateGetStateUnsafe(
2989 return((BOOLEAN
)(Gate
->Count
> 0));
2995 KsGateCaptureThreshold(
3002 captured
= (BOOLEAN
)(InterlockedCompareExchange(&Gate
->Count
,0,1) == 1);
3006 KsGateTurnInputOff(Gate
->NextGate
);
3017 IN LONG InitialCount
,
3018 IN PKSGATE NextGate OPTIONAL
,
3019 IN BOOLEAN StateToPropagate
3023 Gate
->Count
= InitialCount
;
3024 Gate
->NextGate
= NextGate
;
3028 if (InitialCount
> 0)
3030 if (StateToPropagate
)
3032 KsGateTurnInputOn(NextGate
);
3037 if (!StateToPropagate
)
3039 KsGateTurnInputOff(NextGate
);
3048 KsGateInitializeAnd(
3050 IN PKSGATE NextOrGate OPTIONAL
)
3052 KsGateInitialize(AndGate
,1,NextOrGate
,TRUE
);
3060 IN PKSGATE NextAndGate OPTIONAL
)
3062 KsGateInitialize(OrGate
,0,NextAndGate
,FALSE
);
3068 KsGateAddOnInputToAnd(
3071 UNREFERENCED_PARAMETER (AndGate
);
3077 KsGateAddOffInputToAnd(
3080 KsGateTurnInputOff(AndGate
);
3086 KsGateRemoveOnInputFromAnd(
3089 UNREFERENCED_PARAMETER (AndGate
);
3095 KsGateRemoveOffInputFromAnd(
3098 KsGateTurnInputOn(AndGate
);
3104 KsGateAddOnInputToOr(
3107 KsGateTurnInputOn(OrGate
);
3113 KsGateAddOffInputToOr(
3116 UNREFERENCED_PARAMETER (OrGate
);
3122 KsGateRemoveOnInputFromOr(
3125 KsGateTurnInputOff(OrGate
);
3131 KsGateRemoveOffInputFromOr(
3134 UNREFERENCED_PARAMETER (OrGate
);
3144 if (KsGateGetStateUnsafe(AndGate
))
3146 KsGateRemoveOnInputFromOr(AndGate
->NextGate
);
3150 KsGateRemoveOffInputFromOr(AndGate
->NextGate
);
3161 if (KsGateGetStateUnsafe(OrGate
))
3163 KsGateRemoveOnInputFromAnd(OrGate
->NextGate
);
3167 KsGateRemoveOffInputFromAnd(OrGate
->NextGate
);
3175 PHYSICAL_ADDRESS PhysicalAddress
;
3182 KSSTREAM_POINTER_STATE_UNLOCKED
= 0,
3183 KSSTREAM_POINTER_STATE_LOCKED
3184 } KSSTREAM_POINTER_STATE
;
3186 typedef struct _KSPROCESSPIN_INDEXENTRY KSPROCESSPIN_INDEXENTRY
, *PKSPROCESSPIN_INDEXENTRY
;
3188 struct _KSSTREAM_POINTER_OFFSET
3190 #if defined(_NTDDK_)
3193 PKSMAPPING Mappings
;
3198 #if !defined(_WIN64)
3204 #if defined(_NTDDK_)
3205 struct _KSSTREAM_POINTER
3209 PKSSTREAM_HEADER StreamHeader
;
3210 PKSSTREAM_POINTER_OFFSET Offset
;
3211 KSSTREAM_POINTER_OFFSET OffsetIn
;
3212 KSSTREAM_POINTER_OFFSET OffsetOut
;
3215 struct _KSPROCESSPIN
3218 PKSSTREAM_POINTER StreamPointer
;
3219 PKSPROCESSPIN InPlaceCounterpart
;
3220 PKSPROCESSPIN DelegateBranch
;
3221 PKSPROCESSPIN CopySource
;
3223 ULONG BytesAvailable
;
3229 struct _KSPROCESSPIN_INDEXENTRY
3231 PKSPROCESSPIN
* Pins
;
3236 /* ===============================================================
3242 #if defined(_NTDDK_)
3244 typedef struct _KSFILTER_DISPATCH KSFILTER_DISPATCH
, *PKSFILTER_DISPATCH
;
3245 typedef struct _KSDEVICE KSDEVICE
, *PKSDEVICE
;
3246 typedef struct _KSFILTER KSFILTER
, *PKSFILTER
;
3247 typedef struct _KSNODE_DESCRIPTOR KSNODE_DESCRIPTOR
, *PKSNODE_DESCRIPTOR
;
3248 typedef struct _KSFILTER_DESCRIPTOR KSFILTER_DESCRIPTOR
, *PKSFILTER_DESCRIPTOR
;
3249 typedef struct _KSDEVICE_DESCRIPTOR KSDEVICE_DESCRIPTOR
, *PKSDEVICE_DESCRIPTOR
;
3251 typedef NTSTATUS (NTAPI
*PFNKSDEVICECREATE
)(
3252 IN PKSDEVICE Device
);
3254 typedef NTSTATUS (NTAPI
*PFNKSDEVICEPNPSTART
)(
3255 IN PKSDEVICE Device
,
3257 IN PCM_RESOURCE_LIST TranslatedResourceList OPTIONAL
,
3258 IN PCM_RESOURCE_LIST UntranslatedResourceList OPTIONAL
);
3260 typedef NTSTATUS (NTAPI
*PFNKSDEVICE
)(
3261 IN PKSDEVICE Device
);
3263 typedef NTSTATUS (NTAPI
*PFNKSDEVICEIRP
)(
3264 IN PKSDEVICE Device
,
3267 typedef VOID (NTAPI
*PFNKSDEVICEIRPVOID
)(
3268 IN PKSDEVICE Device
,
3271 typedef NTSTATUS (NTAPI
*PFNKSDEVICEQUERYCAPABILITIES
)(
3272 IN PKSDEVICE Device
,
3274 IN OUT PDEVICE_CAPABILITIES Capabilities
);
3276 typedef NTSTATUS (NTAPI
*PFNKSDEVICEQUERYPOWER
)(
3277 IN PKSDEVICE Device
,
3279 IN DEVICE_POWER_STATE DeviceTo
,
3280 IN DEVICE_POWER_STATE DeviceFrom
,
3281 IN SYSTEM_POWER_STATE SystemTo
,
3282 IN SYSTEM_POWER_STATE SystemFrom
,
3283 IN POWER_ACTION Action
);
3285 typedef VOID (NTAPI
*PFNKSDEVICESETPOWER
)(
3286 IN PKSDEVICE Device
,
3288 IN DEVICE_POWER_STATE To
,
3289 IN DEVICE_POWER_STATE From
);
3291 typedef struct _KSDEVICE_DISPATCH
{
3292 PFNKSDEVICECREATE Add
;
3293 PFNKSDEVICEPNPSTART Start
;
3294 PFNKSDEVICE PostStart
;
3295 PFNKSDEVICEIRP QueryStop
;
3296 PFNKSDEVICEIRPVOID CancelStop
;
3297 PFNKSDEVICEIRPVOID Stop
;
3298 PFNKSDEVICEIRP QueryRemove
;
3299 PFNKSDEVICEIRPVOID CancelRemove
;
3300 PFNKSDEVICEIRPVOID Remove
;
3301 PFNKSDEVICEQUERYCAPABILITIES QueryCapabilities
;
3302 PFNKSDEVICEIRPVOID SurpriseRemoval
;
3303 PFNKSDEVICEQUERYPOWER QueryPower
;
3304 PFNKSDEVICESETPOWER SetPower
;
3305 PFNKSDEVICEIRP QueryInterface
;
3306 }KSDEVICE_DISPATCH
, *PKSDEVICE_DISPATCH
;
3308 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
3309 #define KSDEVICE_DESCRIPTOR_VERSION_2 (0x110)
3310 #define MIN_DEV_VER_FOR_FLAGS (0x110)
3315 const KSDEVICE_DESCRIPTOR
* Descriptor
;
3318 PDEVICE_OBJECT FunctionalDeviceObject
;
3319 PDEVICE_OBJECT PhysicalDeviceObject
;
3320 PDEVICE_OBJECT NextDeviceObject
;
3322 SYSTEM_POWER_STATE SystemPowerState
;
3323 DEVICE_POWER_STATE DevicePowerState
;
3327 /* ===============================================================
3330 #if defined(_NTDDK_)
3333 const KSFILTER_DESCRIPTOR
* Descriptor
;
3340 (NTAPI
*PFNKSFILTERPOWER
)(
3341 IN PKSFILTER Filter
,
3342 IN DEVICE_POWER_STATE State
3345 typedef NTSTATUS (NTAPI
*PFNKSFILTERIRP
)(
3346 IN PKSFILTER Filter
,
3349 typedef NTSTATUS (NTAPI
*PFNKSFILTERPROCESS
)(
3350 IN PKSFILTER Filter
,
3351 IN PKSPROCESSPIN_INDEXENTRY ProcessPinsIndex
);
3353 typedef NTSTATUS (NTAPI
*PFNKSFILTERVOID
)(
3354 IN PKSFILTER Filter
);
3356 struct _KSFILTER_DISPATCH
3358 PFNKSFILTERIRP Create
;
3359 PFNKSFILTERIRP Close
;
3360 PFNKSFILTERPROCESS Process
;
3361 PFNKSFILTERVOID Reset
;
3364 struct _KSNODE_DESCRIPTOR
3366 const KSAUTOMATION_TABLE
* AutomationTable
;
3369 #if !defined(_WIN64)
3374 struct _KSFILTER_DESCRIPTOR
3376 const KSFILTER_DISPATCH
* Dispatch
;
3377 const KSAUTOMATION_TABLE
* AutomationTable
;
3380 const GUID
* ReferenceGuid
;
3381 ULONG PinDescriptorsCount
;
3382 ULONG PinDescriptorSize
;
3383 const KSPIN_DESCRIPTOR_EX
* PinDescriptors
;
3384 ULONG CategoriesCount
;
3385 const GUID
* Categories
;
3386 ULONG NodeDescriptorsCount
;
3387 ULONG NodeDescriptorSize
;
3388 const KSNODE_DESCRIPTOR
* NodeDescriptors
;
3389 ULONG ConnectionsCount
;
3390 const KSTOPOLOGY_CONNECTION
* Connections
;
3391 const KSCOMPONENTID
* ComponentId
;
3394 #define KSFILTER_DESCRIPTOR_VERSION ((ULONG)-1)
3396 struct _KSDEVICE_DESCRIPTOR
3398 const KSDEVICE_DISPATCH
* Dispatch
;
3399 ULONG FilterDescriptorsCount
;
3400 const KSFILTER_DESCRIPTOR
*const* FilterDescriptors
;
3405 struct _KSFILTERFACTORY
{
3406 const KSFILTER_DESCRIPTOR
* FilterDescriptor
;
3411 #define DEFINE_KSFILTER_DESCRIPTOR(descriptor)\
3412 const KSFILTER_DESCRIPTOR descriptor =
3414 #define DEFINE_KSFILTER_PIN_DESCRIPTORS(table)\
3415 SIZEOF_ARRAY(table),\
3419 #define DEFINE_KSFILTER_CATEGORIES(table)\
3420 SIZEOF_ARRAY(table),\
3423 #define DEFINE_KSFILTER_CATEGORY(category)\
3427 #define DEFINE_KSFILTER_CATEGORIES_NULL\
3431 #define DEFINE_KSFILTER_NODE_DESCRIPTORS(table)\
3432 SIZEOF_ARRAY(table),\
3436 #define DEFINE_KSFILTER_NODE_DESCRIPTORS_NULL\
3438 sizeof(KSNODE_DESCRIPTOR),\
3441 #define DEFINE_KSFILTER_CONNECTIONS(table)\
3442 SIZEOF_ARRAY(table),\
3445 #define DEFINE_KSFILTER_DEFAULT_CONNECTIONS\
3450 /* ===============================================================
3451 Minidriver Callbacks
3453 #if defined(_NTDDK_)
3454 typedef NTSTATUS (NTAPI
*KStrMethodHandler
)(
3456 IN PKSIDENTIFIER Request
,
3459 typedef NTSTATUS (NTAPI
*KStrSupportHandler
)(
3461 IN PKSIDENTIFIER Request
,
3465 /* ===============================================================
3468 #if defined(_NTDDK_)
3469 KSDDKAPI NTSTATUS NTAPI
3471 IN HANDLE ConnectionHandle
,
3472 IN PKSALLOCATOR_FRAMING AllocatorFraming
,
3473 OUT PHANDLE AllocatorHandle
);
3475 KSDDKAPI NTSTATUS NTAPI
3476 KsCreateDefaultAllocator(
3479 KSDDKAPI NTSTATUS NTAPI
3480 KsValidateAllocatorCreateRequest(
3482 OUT PKSALLOCATOR_FRAMING
* AllocatorFraming
);
3484 KSDDKAPI NTSTATUS NTAPI
3485 KsCreateDefaultAllocatorEx(
3487 IN PVOID InitializeContext OPTIONAL
,
3488 IN PFNKSDEFAULTALLOCATE DefaultAllocate OPTIONAL
,
3489 IN PFNKSDEFAULTFREE DefaultFree OPTIONAL
,
3490 IN PFNKSINITIALIZEALLOCATOR InitializeAllocator OPTIONAL
,
3491 IN PFNKSDELETEALLOCATOR DeleteAllocator OPTIONAL
);
3493 KSDDKAPI NTSTATUS NTAPI
3494 KsValidateAllocatorFramingEx(
3495 IN PKSALLOCATOR_FRAMING_EX Framing
,
3496 IN ULONG BufferSize
,
3497 IN
const KSALLOCATOR_FRAMING_EX
* PinFraming
);
3500 /* ===============================================================
3503 #if defined(_NTDDK_)
3504 typedef BOOLEAN (NTAPI
*PFNKSSETTIMER
)(
3507 IN LARGE_INTEGER DueTime
,
3510 typedef BOOLEAN (NTAPI
*PFNKSCANCELTIMER
)(
3514 typedef LONGLONG (FASTCALL
*PFNKSCORRELATEDTIME
)(
3516 OUT PLONGLONG SystemTime
);
3518 KSDDKAPI NTSTATUS NTAPI
3520 IN HANDLE ConnectionHandle
,
3521 IN PKSCLOCK_CREATE ClockCreate
,
3522 OUT PHANDLE ClockHandle
);
3524 KSDDKAPI NTSTATUS NTAPI
3525 KsCreateDefaultClock(
3527 IN PKSDEFAULTCLOCK DefaultClock
);
3529 KSDDKAPI NTSTATUS NTAPI
3530 KsAllocateDefaultClock(
3531 OUT PKSDEFAULTCLOCK
* DefaultClock
);
3533 KSDDKAPI NTSTATUS NTAPI
3534 KsAllocateDefaultClockEx(
3535 OUT PKSDEFAULTCLOCK
* DefaultClock
,
3536 IN PVOID Context OPTIONAL
,
3537 IN PFNKSSETTIMER SetTimer OPTIONAL
,
3538 IN PFNKSCANCELTIMER CancelTimer OPTIONAL
,
3539 IN PFNKSCORRELATEDTIME CorrelatedTime OPTIONAL
,
3540 IN
const KSRESOLUTION
* Resolution OPTIONAL
,
3545 IN PKSDEFAULTCLOCK DefaultClock
);
3547 KSDDKAPI NTSTATUS NTAPI
3548 KsValidateClockCreateRequest(
3550 OUT PKSCLOCK_CREATE
* ClockCreate
);
3552 KSDDKAPI KSSTATE NTAPI
3553 KsGetDefaultClockState(
3554 IN PKSDEFAULTCLOCK DefaultClock
);
3557 KsSetDefaultClockState(
3558 IN PKSDEFAULTCLOCK DefaultClock
,
3561 KSDDKAPI LONGLONG NTAPI
3562 KsGetDefaultClockTime(
3563 IN PKSDEFAULTCLOCK DefaultClock
);
3566 KsSetDefaultClockTime(
3567 IN PKSDEFAULTCLOCK DefaultClock
,
3571 /* ===============================================================
3575 /* Method sets - TODO: Make into macros! */
3576 #if defined(_NTDDK_)
3579 KSMETHOD_SET_IRP_STORAGE(
3583 KSMETHOD_ITEM_IRP_STORAGE(
3587 KSMETHOD_TYPE_IRP_STORAGE(
3591 KSDDKAPI NTSTATUS NTAPI
3594 IN ULONG MethodSetsCount
,
3595 IN PKSMETHOD_SET MethodSet
);
3597 KSDDKAPI NTSTATUS NTAPI
3598 KsMethodHandlerWithAllocator(
3600 IN ULONG MethodSetsCount
,
3601 IN PKSMETHOD_SET MethodSet
,
3602 IN PFNKSALLOCATOR Allocator OPTIONAL
,
3603 IN ULONG MethodItemSize OPTIONAL
);
3605 KSDDKAPI BOOLEAN NTAPI
3606 KsFastMethodHandler(
3607 IN PFILE_OBJECT FileObject
,
3608 IN PKSMETHOD UNALIGNED Method
,
3609 IN ULONG MethodLength
,
3610 IN OUT PVOID UNALIGNED Data
,
3611 IN ULONG DataLength
,
3612 OUT PIO_STATUS_BLOCK IoStatus
,
3613 IN ULONG MethodSetsCount
,
3614 IN
const KSMETHOD_SET
* MethodSet
);
3617 /* ===============================================================
3620 #if defined(_NTDDK_)
3621 KSDDKAPI NTSTATUS NTAPI
3624 IN ULONG PropertySetsCount
,
3625 IN
const KSPROPERTY_SET
* PropertySet
);
3627 KSDDKAPI NTSTATUS NTAPI
3628 KsPropertyHandlerWithAllocator(
3630 IN ULONG PropertySetsCount
,
3631 IN PKSPROPERTY_SET PropertySet
,
3632 IN PFNKSALLOCATOR Allocator OPTIONAL
,
3633 IN ULONG PropertyItemSize OPTIONAL
);
3635 KSDDKAPI NTSTATUS NTAPI
3636 KsUnserializeObjectPropertiesFromRegistry(
3637 IN PFILE_OBJECT FileObject
,
3638 IN HANDLE ParentKey OPTIONAL
,
3639 IN PUNICODE_STRING RegistryPath OPTIONAL
);
3641 KSDDKAPI BOOLEAN NTAPI
3642 KsFastPropertyHandler(
3643 IN PFILE_OBJECT FileObject
,
3644 IN PKSPROPERTY UNALIGNED Property
,
3645 IN ULONG PropertyLength
,
3646 IN OUT PVOID UNALIGNED Data
,
3647 IN ULONG DataLength
,
3648 OUT PIO_STATUS_BLOCK IoStatus
,
3649 IN ULONG PropertySetsCount
,
3650 IN
const KSPROPERTY_SET
* PropertySet
);
3653 /* ===============================================================
3657 #if defined(_NTDDK_)
3659 #define KSPROBE_STREAMREAD 0x00000000
3660 #define KSPROBE_STREAMWRITE 0x00000001
3661 #define KSPROBE_ALLOCATEMDL 0x00000010
3662 #define KSPROBE_PROBEANDLOCK 0x00000020
3663 #define KSPROBE_SYSTEMADDRESS 0x00000040
3664 #define KSPROBE_MODIFY 0x00000200
3665 #define KSPROBE_STREAMWRITEMODIFY (KSPROBE_MODIFY | KSPROBE_STREAMWRITE)
3666 #define KSPROBE_ALLOWFORMATCHANGE 0x00000080
3668 #define KSSTREAM_READ KSPROBE_STREAMREAD
3669 #define KSSTREAM_WRITE KSPROBE_STREAMWRITE
3670 #define KSSTREAM_PAGED_DATA 0x00000000
3671 #define KSSTREAM_NONPAGED_DATA 0x00000100
3672 #define KSSTREAM_SYNCHRONOUS 0x00001000
3673 #define KSSTREAM_FAILUREEXCEPTION 0x00002000
3677 (NTAPI
*PFNKSGENERATEEVENTCALLBACK
)(
3679 IN PKSEVENT_ENTRY EventEntry
3682 KSDDKAPI NTSTATUS NTAPI
3684 IN PKSEVENT_ENTRY EntryEvent
);
3689 IN
const GUID
* EventSet OPTIONAL
,
3692 IN PVOID Data OPTIONAL
,
3693 IN PFNKSGENERATEEVENTCALLBACK CallBack OPTIONAL
,
3694 IN PVOID CallBackContext OPTIONAL
3698 KSDDKAPI NTSTATUS NTAPI
3699 KsEnableEventWithAllocator(
3701 IN ULONG EventSetsCount
,
3702 IN PKSEVENT_SET EventSet
,
3703 IN OUT PLIST_ENTRY EventsList OPTIONAL
,
3704 IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL
,
3705 IN PVOID EventsLock OPTIONAL
,
3706 IN PFNKSALLOCATOR Allocator OPTIONAL
,
3707 IN ULONG EventItemSize OPTIONAL
);
3709 KSDDKAPI NTSTATUS NTAPI
3710 KsGenerateDataEvent(
3711 IN PKSEVENT_ENTRY EventEntry
,
3715 KSDDKAPI NTSTATUS NTAPI
3718 IN ULONG EventSetsCount
,
3719 IN KSEVENT_SET
* EventSet
,
3720 IN OUT PLIST_ENTRY EventsList OPTIONAL
,
3721 IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL
,
3722 IN PVOID EventsLock OPTIONAL
);
3726 IN PKSEVENT_ENTRY EventEntry
);
3728 KSDDKAPI NTSTATUS NTAPI
3731 IN OUT PLIST_ENTRY EventsList
,
3732 IN KSEVENTS_LOCKTYPE EventsFlags
,
3733 IN PVOID EventsLock
);
3737 IN PFILE_OBJECT FileObject
,
3738 IN OUT PLIST_ENTRY EventsList
,
3739 IN KSEVENTS_LOCKTYPE EVentsFlags
,
3740 IN PVOID EventsLock
);
3742 /* ===============================================================
3746 KSDDKAPI NTSTATUS NTAPI
3747 KsValidateTopologyNodeCreateRequest(
3749 IN PKSTOPOLOGY Topology
,
3750 OUT PKSNODE_CREATE
* NodeCreate
);
3752 KSDDKAPI NTSTATUS NTAPI
3753 KsCreateTopologyNode(
3754 IN HANDLE ParentHandle
,
3755 IN PKSNODE_CREATE NodeCreate
,
3756 IN ACCESS_MASK DesiredAccess
,
3757 OUT PHANDLE NodeHandle
);
3759 KSDDKAPI NTSTATUS NTAPI
3760 KsTopologyPropertyHandler(
3762 IN PKSPROPERTY Property
,
3764 IN
const KSTOPOLOGY
* Topology
);
3768 /* ===============================================================
3769 Connectivity Functions
3772 KSDDKAPI NTSTATUS NTAPI
3774 IN HANDLE FilterHandle
,
3775 IN PKSPIN_CONNECT Connect
,
3776 IN ACCESS_MASK DesiredAccess
,
3777 OUT PHANDLE ConnectionHandle
);
3779 KSDDKAPI NTSTATUS NTAPI
3780 KsValidateConnectRequest(
3782 IN ULONG DescriptorsCount
,
3783 IN KSPIN_DESCRIPTOR
* Descriptor
,
3784 OUT PKSPIN_CONNECT
* Connect
);
3786 KSDDKAPI NTSTATUS NTAPI
3787 KsPinPropertyHandler(
3789 IN PKSPROPERTY Property
,
3791 IN ULONG DescriptorsCount
,
3792 IN
const KSPIN_DESCRIPTOR
* Descriptor
);
3794 KSDDKAPI NTSTATUS NTAPI
3795 KsPinDataIntersection(
3799 IN ULONG DescriptorsCount
,
3800 IN
const KSPIN_DESCRIPTOR
* Descriptor
,
3801 IN PFNKSINTERSECTHANDLER IntersectHandler
);
3803 KSDDKAPI NTSTATUS NTAPI
3804 KsPinDataIntersectionEx(
3808 IN ULONG DescriptorsCount
,
3809 IN
const KSPIN_DESCRIPTOR
* Descriptor
,
3810 IN ULONG DescriptorSize
,
3811 IN PFNKSINTERSECTHANDLEREX IntersectHandler OPTIONAL
,
3812 IN PVOID HandlerContext OPTIONAL
);
3814 KSDDKAPI PKSFILTER NTAPI
3815 KsPinGetParentFilter(
3819 KSDDKAPI PKSPIN NTAPI
3820 KsPinGetNextSiblingPin(
3825 /* Does this belong here? */
3827 KSDDKAPI NTSTATUS NTAPI
3828 KsHandleSizedListQuery(
3830 IN ULONG DataItemsCount
,
3831 IN ULONG DataItemSize
,
3832 IN
const VOID
* DataItems
);
3835 /* ===============================================================
3836 IRP Helper Functions
3839 typedef NTSTATUS (NTAPI
*PFNKSIRPLISTCALLBACK
)(
3843 KSDDKAPI NTSTATUS NTAPI
3844 KsAcquireResetValue(
3846 OUT KSRESET
* ResetValue
);
3849 KsAddIrpToCancelableQueue(
3850 IN OUT PLIST_ENTRY QueueHead
,
3851 IN PKSPIN_LOCK SpinLock
,
3853 IN KSLIST_ENTRY_LOCATION ListLocation
,
3854 IN PDRIVER_CANCEL DriverCancel OPTIONAL
);
3856 KSDDKAPI NTSTATUS NTAPI
3857 KsAddObjectCreateItemToDeviceHeader(
3858 IN KSDEVICE_HEADER Header
,
3859 IN PDRIVER_DISPATCH Create
,
3861 IN PWCHAR ObjectClass
,
3862 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
3864 KSDDKAPI NTSTATUS NTAPI
3865 KsAddObjectCreateItemToObjectHeader(
3866 IN KSOBJECT_HEADER Header
,
3867 IN PDRIVER_DISPATCH Create
,
3869 IN PWCHAR ObjectClass
,
3870 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
3872 KSDDKAPI NTSTATUS NTAPI
3873 KsAllocateDeviceHeader(
3874 OUT KSDEVICE_HEADER
* Header
,
3875 IN ULONG ItemsCount
,
3876 IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL
);
3878 KSDDKAPI NTSTATUS NTAPI
3879 KsAllocateExtraData(
3882 OUT PVOID
* ExtraBuffer
);
3884 KSDDKAPI NTSTATUS NTAPI
3885 KsAllocateObjectCreateItem(
3886 IN KSDEVICE_HEADER Header
,
3887 IN PKSOBJECT_CREATE_ITEM CreateItem
,
3888 IN BOOLEAN AllocateEntry
,
3889 IN PFNKSITEMFREECALLBACK ItemFreeCallback OPTIONAL
);
3891 KSDDKAPI NTSTATUS NTAPI
3892 KsAllocateObjectHeader(
3893 OUT KSOBJECT_HEADER
*Header
,
3894 IN ULONG ItemsCount
,
3895 IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL
,
3897 IN KSDISPATCH_TABLE
* Table
);
3901 IN OUT PLIST_ENTRY QueueHead
,
3902 IN PKSPIN_LOCK SpinLock
);
3906 IN PDEVICE_OBJECT DeviceObject
,
3909 KSDDKAPI NTSTATUS NTAPI
3910 KsDefaultDeviceIoCompletion(
3911 IN PDEVICE_OBJECT DeviceObject
,
3915 KSDDKAPI ULONG NTAPI
3916 KsDecrementCountedWorker(
3917 IN PKSWORKER Worker);
3920 KSDDKAPI BOOLEAN NTAPI
3921 KsDispatchFastIoDeviceControlFailure(
3922 IN PFILE_OBJECT FileObject
,
3924 IN PVOID InputBuffer OPTIONAL
,
3925 IN ULONG InputBufferLength
,
3926 OUT PVOID OutputBuffer OPTIONAL
,
3927 IN ULONG OutputBufferLength
,
3928 IN ULONG IoControlCode
,
3929 OUT PIO_STATUS_BLOCK IoStatus
,
3930 IN PDEVICE_OBJECT DeviceObject
); /* always return false */
3932 KSDDKAPI BOOLEAN NTAPI
3933 KsDispatchFastReadFailure(
3934 IN PFILE_OBJECT FileObject
,
3935 IN PLARGE_INTEGER FileOffset
,
3940 OUT PIO_STATUS_BLOCK IoStatus
,
3941 IN PDEVICE_OBJECT DeviceObject
); /* always return false */
3943 /* This function does the same as the above */
3944 #define KsDispatchFastWriteFailure KsDispatchFastReadFailure
3946 KSDDKAPI NTSTATUS NTAPI
3947 KsDispatchInvalidDeviceRequest(
3948 IN PDEVICE_OBJECT DeviceObject
,
3951 KSDDKAPI NTSTATUS NTAPI
3953 IN PDEVICE_OBJECT DeviceObject
,
3956 KSDDKAPI NTSTATUS NTAPI
3957 KsDispatchSpecificMethod(
3959 IN PFNKSHANDLER Handler
);
3961 KSDDKAPI NTSTATUS NTAPI
3962 KsDispatchSpecificProperty(
3964 IN PFNKSHANDLER Handler
);
3966 KSDDKAPI NTSTATUS NTAPI
3967 KsForwardAndCatchIrp(
3968 IN PDEVICE_OBJECT DeviceObject
,
3970 IN PFILE_OBJECT FileObject
,
3971 IN KSSTACK_USE StackUse
);
3973 KSDDKAPI NTSTATUS NTAPI
3976 IN PFILE_OBJECT FileObject
,
3977 IN BOOLEAN ReuseStackLocation
);
3981 IN KSDEVICE_HEADER Header
);
3987 KSDDKAPI NTSTATUS NTAPI
3988 KsGetChildCreateParameter(
3990 OUT PVOID
* CreateParameter
);
3992 KSDDKAPI NTSTATUS NTAPI
3993 KsMoveIrpsOnCancelableQueue(
3994 IN OUT PLIST_ENTRY SourceList
,
3995 IN PKSPIN_LOCK SourceLock
,
3996 IN OUT PLIST_ENTRY DestinationList
,
3997 IN PKSPIN_LOCK DestinationLock OPTIONAL
,
3998 IN KSLIST_ENTRY_LOCATION ListLocation
,
3999 IN PFNKSIRPLISTCALLBACK ListCallback
,
4002 KSDDKAPI NTSTATUS NTAPI
4005 IN ULONG ProbeFlags
,
4006 IN ULONG HeaderSize
);
4008 KSDDKAPI NTSTATUS NTAPI
4009 KsQueryInformationFile(
4010 IN PFILE_OBJECT FileObject
,
4011 OUT PVOID FileInformation
,
4013 IN FILE_INFORMATION_CLASS FileInformationClass
);
4015 KSDDKAPI ACCESS_MASK NTAPI
4016 KsQueryObjectAccessMask(
4017 IN KSOBJECT_HEADER Header
);
4019 KSDDKAPI PKSOBJECT_CREATE_ITEM NTAPI
4020 KsQueryObjectCreateItem(
4021 IN KSOBJECT_HEADER Header
);
4023 KSDDKAPI NTSTATUS NTAPI
4025 IN PFILE_OBJECT FileObject
,
4026 IN PKEVENT Event OPTIONAL
,
4027 IN PVOID PortContext OPTIONAL
,
4028 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4031 IN ULONG Key OPTIONAL
,
4032 IN KPROCESSOR_MODE RequestorMode
);
4035 KsReleaseIrpOnCancelableQueue(
4037 IN PDRIVER_CANCEL DriverCancel OPTIONAL
);
4040 KsRemoveIrpFromCancelableQueue(
4041 IN OUT PLIST_ENTRY QueueHead
,
4042 IN PKSPIN_LOCK SpinLock
,
4043 IN KSLIST_ENTRY_LOCATION ListLocation
,
4044 IN KSIRP_REMOVAL_OPERATION RemovalOperation
);
4047 KsRemoveSpecificIrpFromCancelableQueue(
4050 KSDDKAPI NTSTATUS NTAPI
4051 KsSetInformationFile(
4052 IN PFILE_OBJECT FileObject
,
4053 IN PVOID FileInformation
,
4055 IN FILE_INFORMATION_CLASS FileInformationClass
);
4057 KSDDKAPI NTSTATUS NTAPI
4058 KsSetMajorFunctionHandler(
4059 IN PDRIVER_OBJECT DriverObject
,
4060 IN ULONG MajorFunction
);
4062 KSDDKAPI NTSTATUS NTAPI
4064 IN PFILE_OBJECT FileObject
,
4065 IN PKEVENT Event OPTIONAL
,
4066 IN PVOID PortContext OPTIONAL
,
4067 IN PIO_COMPLETION_ROUTINE CompletionRoutine OPTIONAL
,
4068 IN PVOID CompletionContext OPTIONAL
,
4069 IN KSCOMPLETION_INVOCATION CompletionInvocationFlags OPTIONAL
,
4070 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4071 IN OUT PVOID StreamHeaders
,
4074 IN KPROCESSOR_MODE RequestorMode
);
4076 KSDDKAPI NTSTATUS NTAPI
4078 IN PFILE_OBJECT FileObject
,
4079 IN PKEVENT Event OPTIONAL
,
4080 IN PVOID PortContext OPTIONAL
,
4081 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4084 IN ULONG Key OPTIONAL
,
4085 IN KPROCESSOR_MODE RequestorMode
);
4088 KSDDKAPI NTSTATUS NTAPI
4089 KsDefaultForwardIrp(
4090 IN PDEVICE_OBJECT DeviceObject
,
4093 /* ===============================================================
4094 Worker Management Functions
4097 KSDDKAPI NTSTATUS NTAPI
4099 IN WORK_QUEUE_TYPE WorkQueueType
,
4100 OUT PKSWORKER
* Worker
);
4104 IN PKSWORKER Worker
);
4106 KSDDKAPI NTSTATUS NTAPI
4107 KsRegisterCountedWorker(
4108 IN WORK_QUEUE_TYPE WorkQueueType
,
4109 IN PWORK_QUEUE_ITEM CountedWorkItem
,
4110 OUT PKSWORKER
* Worker
);
4112 KSDDKAPI ULONG NTAPI
4113 KsDecrementCountedWorker(
4114 IN PKSWORKER Worker
);
4116 KSDDKAPI ULONG NTAPI
4117 KsIncrementCountedWorker(
4118 IN PKSWORKER Worker
);
4120 KSDDKAPI NTSTATUS NTAPI
4122 IN PKSWORKER Worker
,
4123 IN PWORK_QUEUE_ITEM WorkItem
);
4126 /* ===============================================================
4130 KSDDKAPI NTSTATUS NTAPI
4133 IN POOL_TYPE PoolType
,
4134 IN ULONG_PTR ResourceName
,
4135 IN ULONG ResourceType
,
4136 OUT PVOID
* Resource
,
4137 OUT PULONG ResourceSize
);
4140 KSDDKAPI NTSTATUS NTAPI
4141 KsGetImageNameAndResourceId(
4143 OUT PUNICODE_STRING ImageName,
4144 OUT PULONG_PTR ResourceId,
4145 OUT PULONG ValueType);
4147 KSDDKAPI NTSTATUS NTAPI
4149 IN PDEVICE_OBJECT PhysicalDeviceObject,
4150 IN PUNICODE_STRING ModuleName,
4151 OUT PUNICODE_STRING ImageName,
4152 OUT PULONG_PTR ResourceId,
4153 OUT PULONG ValueType);
4157 /* ===============================================================
4158 Misc. Helper Functions
4161 KSDDKAPI PVOID NTAPI
4166 KSDDKAPI NTSTATUS NTAPI
4168 IN PUNICODE_STRING SymbolicLink
,
4169 IN PKSPIN_MEDIUM Medium
,
4170 IN ULONG PinDirection
);
4172 KSDDKAPI NTSTATUS NTAPI
4173 KsDefaultDispatchPnp(
4174 IN PDEVICE_OBJECT DeviceObject
,
4178 KsSetDevicePnpAndBaseObject(
4179 IN KSDEVICE_HEADER Header
,
4180 IN PDEVICE_OBJECT PnpDeviceObject
,
4181 IN PDEVICE_OBJECT BaseDevice
);
4183 KSDDKAPI NTSTATUS NTAPI
4184 KsDefaultDispatchPower(
4185 IN PDEVICE_OBJECT DeviceObject
,
4190 IN KSOBJECT_HEADER Header
,
4191 IN PFNKSCONTEXT_DISPATCH PowerDispatch OPTIONAL
,
4192 IN PVOID PowerContext OPTIONAL
);
4194 KSDDKAPI NTSTATUS NTAPI
4195 KsReferenceBusObject(
4196 IN KSDEVICE_HEADER Header
);
4199 KsDereferenceBusObject(
4200 IN KSDEVICE_HEADER Header
);
4202 KSDDKAPI NTSTATUS NTAPI
4203 KsFreeObjectCreateItem(
4204 IN KSDEVICE_HEADER Header
,
4205 IN PUNICODE_STRING CreateItem
);
4207 KSDDKAPI NTSTATUS NTAPI
4208 KsFreeObjectCreateItemsByContext(
4209 IN KSDEVICE_HEADER Header
,
4214 IN PDRIVER_OBJECT DriverObject
);
4216 KSDDKAPI PDEVICE_OBJECT NTAPI
4217 KsQueryDevicePnpObject(
4218 IN KSDEVICE_HEADER Header
);
4221 KsRecalculateStackDepth(
4222 IN KSDEVICE_HEADER Header
,
4223 IN BOOLEAN ReuseStackLocation
);
4226 KsSetTargetDeviceObject(
4227 IN KSOBJECT_HEADER Header
,
4228 IN PDEVICE_OBJECT TargetDevice OPTIONAL
);
4232 IN KSOBJECT_HEADER Header
,
4233 IN KSTARGET_STATE TargetState
);
4235 KSDDKAPI NTSTATUS NTAPI
4236 KsSynchronousIoControlDevice(
4237 IN PFILE_OBJECT FileObject
,
4238 IN KPROCESSOR_MODE RequestorMode
,
4242 OUT PVOID OutBuffer
,
4244 OUT PULONG BytesReturned
);
4249 KsFilterGetFirstChildPin(
4250 IN PKSFILTER Filter
,
4257 KsPinGetConnectedPinFileObject(
4263 #if !defined( KS_NO_CREATE_FUNCTIONS )
4269 IN HANDLE ConnectionHandle
,
4270 IN PKSALLOCATOR_FRAMING AllocatorFraming
,
4271 OUT PHANDLE AllocatorHandle
4278 IN HANDLE ConnectionHandle
,
4279 IN PKSCLOCK_CREATE ClockCreate
,
4280 OUT PHANDLE ClockHandle
4287 IN HANDLE FilterHandle
,
4288 IN PKSPIN_CONNECT Connect
,
4289 IN ACCESS_MASK DesiredAccess
,
4290 OUT PHANDLE ConnectionHandle
4296 KsCreateTopologyNode(
4297 IN HANDLE ParentHandle
,
4298 IN PKSNODE_CREATE NodeCreate
,
4299 IN ACCESS_MASK DesiredAccess
,
4300 OUT PHANDLE NodeHandle
4307 /* ===============================================================
4308 AVStream Functions (XP / DirectX 8)
4310 http://www.osronline.com/ddkx/stream/avstream_5q9f.htm
4313 #if defined(_NTDDK_)
4318 KsMergeAutomationTables(
4319 OUT PKSAUTOMATION_TABLE
* AutomationTableAB
,
4320 IN PKSAUTOMATION_TABLE AutomationTableA OPTIONAL
,
4321 IN PKSAUTOMATION_TABLE AutomationTableB OPTIONAL
,
4322 IN KSOBJECT_BAG Bag OPTIONAL
4329 IN PDRIVER_OBJECT DriverObject
,
4330 IN PUNICODE_STRING RegistryPath
,
4331 IN
const KSDEVICE_DESCRIPTOR
*Descriptor OPTIONAL
);
4333 typedef struct _KSFILTERFACTORY KSFILTERFACTORY
, *PKSFILTERFACTORY
; //FIXME
4340 KsInitializeDevice (
4341 IN PDEVICE_OBJECT FunctionalDeviceObject
,
4342 IN PDEVICE_OBJECT PhysicalDeviceObject
,
4343 IN PDEVICE_OBJECT NextDeviceObject
,
4344 IN
const KSDEVICE_DESCRIPTOR
* Descriptor OPTIONAL
);
4347 typedef void (NTAPI
*PFNKSFILTERFACTORYPOWER
)(
4348 IN PKSFILTERFACTORY FilterFactory
,
4349 IN DEVICE_POWER_STATE State
);
4355 IN KSOBJECT_BAG ObjectBag
,
4356 IN OUT PVOID
* PointerToPointerToItem
,
4371 IN PKSDEVICE Device
);
4377 IN PDRIVER_OBJECT DriverObject
,
4378 IN PDEVICE_OBJECT PhysicalDeviceObject
);
4385 IN PKSEVENT_ENTRY EventEntry
);
4390 KsAddItemToObjectBag(
4391 IN KSOBJECT_BAG ObjectBag
,
4393 IN PFNKSFREE Free OPTIONAL
);
4398 KsRemoveItemFromObjectBag(
4399 IN KSOBJECT_BAG ObjectBag
,
4406 KsAllocateObjectBag(
4407 IN PKSDEVICE Device
,
4408 OUT KSOBJECT_BAG
* ObjectBag
);
4414 IN KSOBJECT_BAG ObjectBag
4420 KsCompletePendingRequest(
4426 KsCopyObjectBagItems(
4427 IN KSOBJECT_BAG ObjectBagDestination
,
4428 IN KSOBJECT_BAG ObjectBagSource
);
4434 IN PDRIVER_OBJECT DriverObject
,
4435 IN PDEVICE_OBJECT PhysicalDeviceObject
,
4436 IN
const KSDEVICE_DESCRIPTOR
* Descriptor OPTIONAL
,
4437 IN ULONG ExtensionSize OPTIONAL
,
4438 OUT PKSDEVICE
* Device OPTIONAL
);
4443 KsCreateFilterFactory(
4444 IN PDEVICE_OBJECT DeviceObject
,
4445 IN
const KSFILTER_DESCRIPTOR
* Descriptor
,
4446 IN PWCHAR RefString OPTIONAL
,
4447 IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL
,
4448 IN ULONG CreateItemFlags
,
4449 IN PFNKSFILTERFACTORYPOWER SleepCallback OPTIONAL
,
4450 IN PFNKSFILTERFACTORYPOWER WakeCallback OPTIONAL
,
4451 OUT PKSFILTERFACTORY
*FilterFactory OPTIONAL
);
4456 KsFilterFactorySetDeviceClassesState(
4457 IN PKSFILTERFACTORY FilterFactory
,
4464 KsFilterFactoryUpdateCacheData(
4465 IN PKSFILTERFACTORY FilterFactory
,
4466 IN
const KSFILTER_DESCRIPTOR
*FilterDescriptor OPTIONAL
4486 KsDefaultAddEventHandler(
4488 IN PKSEVENTDATA EventData
,
4489 IN OUT PKSEVENT_ENTRY EventEntry
);
4494 KsDispatchQuerySecurity(
4495 IN PDEVICE_OBJECT DeviceObject
,
4502 KsDispatchSetSecurity(
4503 IN PDEVICE_OBJECT DeviceObject
,
4518 KsFilterGetParentFilterFactory(
4522 return (PKSFILTERFACTORY
) KsGetParent((PVOID
) Filter
);
4528 KsFilterFactoryGetParentDevice(
4529 IN PKSFILTERFACTORY FilterFactory
4532 return (PKSDEVICE
) KsGetParent((PVOID
) FilterFactory
);
4537 #define KsDeleteFilterFactory(FilterFactory) \
4538 KsFreeObjectCreateItemsByContext( \
4539 *(KSDEVICE_HEADER *)( \
4540 KsFilterFactoryGetParentDevice(FilterFactory)->FunctionalDeviceObject-> \
4548 IN PKSDEVICE Device
,
4565 KsDeviceGetFirstChildFilterFactory(
4566 IN PKSDEVICE Device
);
4568 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
4580 KsDeviceGetOuterUnknown(
4581 IN PKSDEVICE Device
)
4583 return KsGetOuterUnknown((PVOID
) Device
);
4589 KsDeviceRegisterAggregatedClientUnknown(
4590 IN PKSDEVICE Device
,
4591 IN PUNKNOWN ClientUnknown
);
4596 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
4598 typedef interface IKsReferenceClock
* PIKSREFERENCECLOCK
;
4601 #define INTERFACE IKsReferenceClock
4602 DECLARE_INTERFACE_(IKsReferenceClock
,IUnknown
)
4604 DEFINE_ABSTRACT_UNKNOWN() // For C
4606 STDMETHOD_(LONGLONG
,GetTime
)(THIS
4608 STDMETHOD_(LONGLONG
,GetPhysicalTime
)(THIS
4610 STDMETHOD_(LONGLONG
,GetCorrelatedTime
)(THIS_
4611 OUT PLONGLONG SystemTime
4613 STDMETHOD_(LONGLONG
,GetCorrelatedPhysicalTime
)(THIS_
4614 OUT PLONGLONG SystemTime
4616 STDMETHOD_(NTSTATUS
, GetResolution
)(THIS_
4617 OUT PKSRESOLUTION Resolution
4619 STDMETHOD_(NTSTATUS
, GetState
)(THIS_
4625 #define INTERFACE IKsControl
4627 DEFINE_GUID(IID_IKsControl
, 0x28F54685L
, 0x06FD, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96);
4629 DECLARE_INTERFACE_(IKsControl
,IUnknown
)
4631 STDMETHOD_(NTSTATUS
, QueryInterface
)( THIS_
4633 PVOID
* Interface
)PURE
;
4635 STDMETHOD_(ULONG
, AddRef
)(THIS
) PURE
;
4637 STDMETHOD_(ULONG
, Release
)(THIS
) PURE
;
4639 STDMETHOD_(NTSTATUS
, KsProperty
)(THIS_
4640 IN PKSPROPERTY Property
,
4641 IN ULONG PropertyLength
,
4642 IN OUT PVOID PropertyData
,
4643 IN ULONG DataLength
,
4644 OUT ULONG
* BytesReturned
4646 STDMETHOD_(NTSTATUS
, KsMethod
)(THIS_
4647 IN PKSMETHOD Method
,
4648 IN ULONG MethodLength
,
4649 IN OUT PVOID MethodData
,
4650 IN ULONG DataLength
,
4651 OUT ULONG
* BytesReturned
4653 STDMETHOD_(NTSTATUS
, KsEvent
)(THIS_
4654 IN PKSEVENT Event OPTIONAL
,
4655 IN ULONG EventLength
,
4656 IN OUT PVOID EventData
,
4657 IN ULONG DataLength
,
4658 OUT ULONG
* BytesReturned
4663 typedef IKsControl
* PIKSCONTROL
;
4670 KsDeviceRegisterAdapterObject(
4671 IN PKSDEVICE Device
,
4672 IN PADAPTER_OBJECT AdapterObject
,
4673 IN ULONG MaxMappingByteCount
,
4674 IN ULONG MappingTableStride
);
4680 IN PKSDEVICE Device
,
4694 #define KsDiscard(object, pointer) \
4695 KsRemoveItemFromObjectBag(object->Bag, pointer, TRUE)
4697 #define KsFilterAcquireControl(Filter) \
4698 KsAcquireControl((PVOID) Filter);
4700 #define KsFilterReleaseControl(Filter) \
4701 KsReleaseControl((PVOID) Filter);
4703 #define KsFilterAddEvent(Filter, EventEntry) \
4704 KsAddEvent(Filter,EventEntry);
4709 KsFilterAcquireProcessingMutex(
4710 IN PKSFILTER Filter
);
4716 KsFilterAddTopologyConnections(
4717 IN PKSFILTER Filter
,
4718 IN ULONG NewConnectionsCount
,
4719 IN
const KSTOPOLOGY_CONNECTION
*const NewTopologyConnections
);
4724 KsFilterAttemptProcessing(
4725 IN PKSFILTER Filter
,
4726 IN BOOLEAN Asynchronous
);
4732 IN PKSFILTER Filter
,
4733 IN
const KSNODE_DESCRIPTOR
*const NodeDescriptor
,
4739 KsFilterCreatePinFactory(
4740 IN PKSFILTER Filter
,
4741 IN
const KSPIN_DESCRIPTOR_EX
*const PinDescriptor
,
4747 KsFilterFactoryGetDevice(
4748 IN PKSFILTERFACTORY FilterFactory
);
4751 #endif /* avstream */