8 This is a basic stubbing of the Kernel Streaming API header. It is
9 very incomplete - a lot of the #defines are not set to any value at all.
11 Some of the structs/funcs may be incorrectly grouped.
13 GUIDs need to be defined properly.
15 AVStream functionality (XP and above, DirectX 8.0 and above) will NOT
16 implemented for a while.
18 Some example code for interaction from usermode:
25 sizeof(KS_SEEKING_CAPABILITIES),
40 #define KSDDKAPI //DECLSPEC_IMPORT /* TODO */
44 #define KSFILTER_NODE ((ULONG)-1)
45 #define KSALL_NODES ((ULONG)-1)
47 #define KSSTRING_Filter L"{9B365890-165F-11D0-A195-0020AFD156E4}"
48 #define KSSTRING_Pin L"{146F1A80-4791-11D0-A5D6-28DB04C10000}"
49 #define KSSTRING_Clock L"{53172480-4791-11D0-A5D6-28DB04C10000}"
50 #define KSSTRING_Allocator L"{642F5D00-4791-11D0-A5D6-28DB04C10000}"
51 #define KSSTRING_AllocatorEx L"{091BB63B-603F-11D1-B067-00A0C9062802}"
52 #define KSSTRING_TopologyNode L"{0621061A-EE75-11D0-B915-00A0C9223196}"
54 #define KSDATAFORMAT_BIT_ATTRIBUTES 1
55 #define KSDATAFORMAT_ATTRIBUTES (1 << KSDATAFORMAT_BIT_ATTRIBUTES)
58 typedef PVOID PKSWORKER
;
62 #define SIZEOF_ARRAY(a) (sizeof(a)/sizeof((a)[0]))
65 /* ===============================================================
66 GUID definition helpers
72 #define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name
74 #define DEFINE_GUIDEX(name) EXTERN_C const GUID name
79 #define STATICGUIDOF(guid) STATIC_##guid
83 #if defined(__cplusplus) && _MSC_VER >= 1100
84 #define DEFINE_GUIDSTRUCT(guid, name) struct __declspec(uuid(guid)) name
85 #define DEFINE_GUIDNAMED(name) __uuidof(struct name)
87 #define DEFINE_GUIDSTRUCT(guid, name) DEFINE_GUIDEX(name)
88 #define DEFINE_GUIDNAMED(name) name
92 #define STATIC_GUID_NULL \
93 0x00000000L, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
94 DEFINE_GUIDSTRUCT("00000000-0000-0000-0000-000000000000", GUID_NULL
);
95 #define GUID_NULL DEFINE_GUIDNAMED(GUID_NULL)
98 #define STATIC_KSNAME_Filter\
99 0x9b365890L, 0x165f, 0x11d0, {0xa1, 0x95, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4}
100 DEFINE_GUIDSTRUCT("9b365890-165f-11d0-a195-0020afd156e4", KSNAME_Filter
);
101 #define KSNAME_Filter DEFINE_GUIDNAMED(KSNAME_Filter)
103 #define STATIC_KSMEMORY_TYPE_KERNEL_PAGED \
104 0xd833f8f8L, 0x7894, 0x11d1, {0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02}
105 DEFINE_GUIDSTRUCT("d833f8f8-7894-11d1-b069-00a0c9062802", KSMEMORY_TYPE_KERNEL_PAGED
);
106 #define KSMEMORY_TYPE_KERNEL_PAGED DEFINE_GUIDNAMED(KSMEMORY_TYPE_KERNEL_PAGED)
108 /* ===============================================================
112 #define IOCTL_KS_DISABLE_EVENT \
119 #define IOCTL_KS_ENABLE_EVENT \
127 #define IOCTL_KS_METHOD \
135 #define IOCTL_KS_PROPERTY \
142 #define IOCTL_KS_WRITE_STREAM \
149 #define IOCTL_KS_READ_STREAM \
156 #define IOCTL_KS_RESET_STATE \
164 /* ===============================================================
168 #define STATIC_KSCATEGORY_BRIDGE \
169 0x085AFF00L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
170 DEFINE_GUIDSTRUCT("085AFF00-62CE-11CF-A5D6-28DB04C10000", KSCATEGORY_BRIDGE
);
171 #define KSCATEGORY_BRIDGE DEFINE_GUIDNAMED(KSCATEGORY_BRIDGE)
173 #define STATIC_KSCATEGORY_CAPTURE \
174 0x65E8773DL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
175 DEFINE_GUIDSTRUCT("65E8773D-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_CAPTURE
);
176 #define KSCATEGORY_CAPTURE DEFINE_GUIDNAMED(KSCATEGORY_CAPTURE)
178 #define STATIC_KSCATEGORY_RENDER \
179 0x65E8773EL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
180 DEFINE_GUIDSTRUCT("65E8773E-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_RENDER
);
181 #define KSCATEGORY_RENDER DEFINE_GUIDNAMED(KSCATEGORY_RENDER)
183 #define STATIC_KSCATEGORY_MIXER \
184 0xAD809C00L, 0x7B88, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
185 DEFINE_GUIDSTRUCT("AD809C00-7B88-11D0-A5D6-28DB04C10000", KSCATEGORY_MIXER
);
186 #define KSCATEGORY_MIXER DEFINE_GUIDNAMED(KSCATEGORY_MIXER)
188 #define STATIC_KSCATEGORY_SPLITTER \
189 0x0A4252A0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
190 DEFINE_GUIDSTRUCT("0A4252A0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_SPLITTER
);
191 #define KSCATEGORY_SPLITTER DEFINE_GUIDNAMED(KSCATEGORY_SPLITTER)
193 #define STATIC_KSCATEGORY_DATACOMPRESSOR \
194 0x1E84C900L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
195 DEFINE_GUIDSTRUCT("1E84C900-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATACOMPRESSOR
);
196 #define KSCATEGORY_DATACOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATACOMPRESSOR)
198 #define STATIC_KSCATEGORY_DATADECOMPRESSOR \
199 0x2721AE20L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
200 DEFINE_GUIDSTRUCT("2721AE20-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATADECOMPRESSOR
);
201 #define KSCATEGORY_DATADECOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATADECOMPRESSOR)
203 #define STATIC_KSCATEGORY_DATATRANSFORM \
204 0x2EB07EA0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
205 DEFINE_GUIDSTRUCT("2EB07EA0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATATRANSFORM
);
206 #define KSCATEGORY_DATATRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_DATATRANSFORM)
208 #define STATIC_KSCATEGORY_COMMUNICATIONSTRANSFORM \
209 0xCF1DDA2CL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
210 DEFINE_GUIDSTRUCT("CF1DDA2C-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_COMMUNICATIONSTRANSFORM
);
211 #define KSCATEGORY_COMMUNICATIONSTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_COMMUNICATIONSTRANSFORM)
213 #define STATIC_KSCATEGORY_INTERFACETRANSFORM \
214 0xCF1DDA2DL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
215 DEFINE_GUIDSTRUCT("CF1DDA2D-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_INTERFACETRANSFORM
);
216 #define KSCATEGORY_INTERFACETRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_INTERFACETRANSFORM)
218 #define STATIC_KSCATEGORY_MEDIUMTRANSFORM \
219 0xCF1DDA2EL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
220 DEFINE_GUIDSTRUCT("CF1DDA2E-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_MEDIUMTRANSFORM
);
221 #define KSCATEGORY_MEDIUMTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_MEDIUMTRANSFORM)
223 #define STATIC_KSCATEGORY_FILESYSTEM \
224 0x760FED5EL, 0x9357, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
225 DEFINE_GUIDSTRUCT("760FED5E-9357-11D0-A3CC-00A0C9223196", KSCATEGORY_FILESYSTEM
);
226 #define KSCATEGORY_FILESYSTEM DEFINE_GUIDNAMED(KSCATEGORY_FILESYSTEM)
228 #define STATIC_KSCATEGORY_CLOCK \
229 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
230 DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000", KSCATEGORY_CLOCK
);
231 #define KSCATEGORY_CLOCK DEFINE_GUIDNAMED(KSCATEGORY_CLOCK)
233 #define STATIC_KSCATEGORY_PROXY \
234 0x97EBAACAL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
235 DEFINE_GUIDSTRUCT("97EBAACA-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_PROXY
);
236 #define KSCATEGORY_PROXY DEFINE_GUIDNAMED(KSCATEGORY_PROXY)
238 #define STATIC_KSCATEGORY_QUALITY \
239 0x97EBAACBL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
240 DEFINE_GUIDSTRUCT("97EBAACB-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_QUALITY
);
241 #define KSCATEGORY_QUALITY DEFINE_GUIDNAMED(KSCATEGORY_QUALITY)
243 /* ===============================================================
252 } KSIDENTIFIER
, *PKSIDENTIFIER
;
254 typedef KSIDENTIFIER KSPROPERTY
, *PKSPROPERTY
;
255 typedef KSIDENTIFIER KSMETHOD
, *PKSMETHOD
;
256 typedef KSIDENTIFIER KSEVENT
, *PKSEVENT
;
258 typedef KSIDENTIFIER KSDEGRADE
, *PKSDEGRADE
;
260 typedef KSIDENTIFIER KSPIN_INTERFACE
, *PKSPIN_INTERFACE
;
261 typedef KSIDENTIFIER KSPIN_MEDIUM
, *PKSPIN_MEDIUM
;
274 } KSDATAFORMAT
, *PKSDATAFORMAT
, KSDATARANGE
, *PKSDATARANGE
;
282 } KSATTRIBUTE
, *PKSATTRIBUTE
;
286 /* ===============================================================
287 Interface Sets - TODO
291 #define KSINTERFACESETID_Media
293 #define KSINTERFACESETID_Standard
294 #define KSINTERFACE_STANDARD_STREAMING
295 #define KSINTERFACE_STANDARD_LOOPED_STREAMING
296 #define KSINTERFACE_STANDARD_CONTROL
299 #define STATIC_KSINTERFACESETID_Standard \
300 0x1A8766A0L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
301 DEFINE_GUIDSTRUCT("1A8766A0-62CE-11CF-A5D6-28DB04C10000", KSINTERFACESETID_Standard
);
302 #define KSINTERFACESETID_Standard DEFINE_GUIDNAMED(KSINTERFACESETID_Standard)
306 KSINTERFACE_STANDARD_STREAMING
,
307 KSINTERFACE_STANDARD_LOOPED_STREAMING
,
308 KSINTERFACE_STANDARD_CONTROL
309 } KSINTERFACE_STANDARD
;
311 #define STATIC_KSINTERFACESETID_FileIo \
312 0x8C6F932CL, 0xE771, 0x11D0, 0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
313 DEFINE_GUIDSTRUCT("8C6F932C-E771-11D0-B8FF-00A0C9223196", KSINTERFACESETID_FileIo
);
314 #define KSINTERFACESETID_FileIo DEFINE_GUIDNAMED(KSINTERFACESETID_FileIo)
319 /* ===============================================================
325 KSINTERFACE_FILEIO_STREAMING
326 } KSINTERFACE_FILEIO
;
328 #define KSMEDIUM_TYPE_ANYINSTANCE 0
330 #define STATIC_KSMEDIUMSETID_Standard \
331 0x4747B320L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
332 DEFINE_GUIDSTRUCT("4747B320-62CE-11CF-A5D6-28DB04C10000", KSMEDIUMSETID_Standard
);
333 #define KSMEDIUMSETID_Standard DEFINE_GUIDNAMED(KSMEDIUMSETID_Standard)
336 /* ===============================================================
337 Clock Properties/Methods/Events
340 #define KSPROPSETID_Clock \
341 0xDF12A4C0L, 0xAC17, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
345 KSPROPERTY_CLOCK_TIME
,
346 KSPROPERTY_CLOCK_PHYSICALTIME
,
347 KSPROPERTY_CORRELATEDTIME
,
348 KSPROPERTY_CORRELATEDPHYSICALTIME
,
349 KSPROPERTY_CLOCK_RESOLUTION
,
350 KSPROPERTY_CLOCK_STATE
,
351 KSPROPERTY_CLOCK_FUNCTIONTABLE
354 #define KSEVENTSETID_Clock \
355 0x364D8E20L, 0x62C7, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
359 KSEVENT_CLOCK_INTERVAL_MARK
,
360 KSEVENT_CLOCK_POSITION_MARK
361 } KSEVENT_CLOCK_POSITION
;
364 /* ===============================================================
365 Connection Properties/Methods/Events
368 #define STATIC_KSPROPSETID_Connection \
369 0x1D58C920L, 0xAC9B, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
370 DEFINE_GUIDSTRUCT("1D58C920-AC9B-11CF-A5D6-28DB04C10000", KSPROPSETID_Connection
);
371 #define KSPROPSETID_Connection DEFINE_GUIDNAMED(KSPROPSETID_Connection)
376 KSPROPERTY_CONNECTION_STATE
,
377 KSPROPERTY_CONNECTION_PRIORITY
,
378 KSPROPERTY_CONNECTION_DATAFORMAT
,
379 KSPROPERTY_CONNECTION_ALLOCATORFRAMING
,
380 KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT
,
381 KSPROPERTY_CONNECTION_ACQUIREORDERING
,
382 KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX
,
383 KSPROPERTY_CONNECTION_STARTAT
384 } KSPROPERTY_CONNECTION
;
386 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_STATE(GetHandler, SetHandler)\
387 DEFINE_KSPROPERTY_ITEM(\
388 KSPROPERTY_CONNECTION_STATE,\
393 NULL, 0, NULL, NULL, 0)
395 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_PRIORITY(GetHandler, SetHandler)\
396 DEFINE_KSPROPERTY_ITEM(\
397 KSPROPERTY_CONNECTION_PRIORITY,\
402 NULL, 0, NULL, NULL, 0)
404 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_DATAFORMAT(GetHandler, SetHandler)\
405 DEFINE_KSPROPERTY_ITEM(\
406 KSPROPERTY_CONNECTION_DATAFORMAT,\
411 NULL, 0, NULL, NULL, 0)
413 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING(Handler)\
414 DEFINE_KSPROPERTY_ITEM(\
415 KSPROPERTY_CONNECTION_ALLOCATORFRAMING,\
418 sizeof(KSALLOCATOR_FRAMING),\
419 NULL, NULL, 0, NULL, NULL, 0)
421 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING_EX(Handler)\
422 DEFINE_KSPROPERTY_ITEM(\
423 KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,\
427 NULL, NULL, 0, NULL, NULL, 0)
429 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_PROPOSEDATAFORMAT(Handler)\
430 DEFINE_KSPROPERTY_ITEM(\
431 KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT,\
434 sizeof(KSDATAFORMAT),\
436 NULL, 0, NULL, NULL, 0)
438 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ACQUIREORDERING(Handler)\
439 DEFINE_KSPROPERTY_ITEM(\
440 KSPROPERTY_CONNECTION_ACQUIREORDERING,\
444 NULL, NULL, 0, NULL, NULL, 0)
446 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_STARTAT(Handler)\
447 DEFINE_KSPROPERTY_ITEM(\
448 KSPROPERTY_CONNECTION_STARTAT,\
451 sizeof(KSRELATIVEEVENT),\
453 NULL, 0, NULL, NULL, 0)
458 KSEVENT_CONNECTION_POSITIONUPDATE
,
459 KSEVENT_CONNECTION_DATADISCONTINUITY
,
460 KSEVENT_CONNECTION_TIMEDISCONTINUITY
,
461 KSEVENT_CONNECTION_PRIORITY
,
462 KSEVENT_CONNECTION_ENDOFSTREAM
463 } KSEVENT_CONNECTION
;
466 /* ===============================================================
468 Properties/Methods/Events
471 #define STATIC_KSPROPSETID_General\
472 0x1464EDA5L, 0x6A8F, 0x11D1, {0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
473 DEFINE_GUIDSTRUCT("1464EDA5-6A8F-11D1-9AA7-00A0C9223196", KSPROPSETID_General
);
474 #define KSPROPSETID_General DEFINE_GUIDNAMED(KSPROPSETID_General)
479 KSPROPERTY_GENERAL_COMPONENTID
480 } KSPROPERTY_GENERAL
;
483 /* ===============================================================
485 Properties/Methods/Events
488 #define KSPROPSETID_GM \
489 0xAF627536L, 0xE719, 0x11D2, 0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D
493 KSPROPERTY_GM_GRAPHMANAGER
,
494 KSPROPERTY_GM_TIMESTAMP_CLOCK
,
495 KSPROPERTY_GM_RATEMATCH
,
496 KSPROPERTY_GM_RENDERCLOCK
500 /* ===============================================================
502 Properties/Methods/Events
505 #define KSPROPSETID_MediaSeeking \
506 0xEE904F0CL, 0xD09B, 0x11D0, 0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
510 KSPROPERTY_MEDIASEEKING_CAPABILITIES
,
511 KSPROPERTY_MEDIASEEKING_FORMATS
,
512 KSPROPERTY_MEDIASEEKING_TIMEFORMAT
,
513 KSPROPERTY_MEDIASEEKING_POSITION
,
514 KSPROPERTY_MEDIASEEKING_STOPPOSITION
,
515 KSPROPERTY_MEDIASEEKING_POSITIONS
,
516 KSPROPERTY_MEDIASEEKING_DURATION
,
517 KSPROPERTY_MEDIASEEKING_AVAILABLE
,
518 KSPROPERTY_MEDIASEEKING_PREROLL
,
519 KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT
520 } KSPROPERTY_MEDIASEEKING
;
523 /* ===============================================================
525 Properties/Methods/Events
528 #define STATIC_KSPROPSETID_Pin\
529 0x8C134960L, 0x51AD, 0x11CF, 0x87, 0x8A, 0x94, 0xF8, 0x01, 0xC1, 0x00, 0x00
530 DEFINE_GUIDSTRUCT("8C134960-51AD-11CF-878A-94F801C10000", KSPROPSETID_Pin
);
531 #define KSPROPSETID_Pin DEFINE_GUIDNAMED(KSPROPSETID_Pin)
533 #define STATIC_KSNAME_Pin\
534 0x146F1A80L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
535 DEFINE_GUIDSTRUCT("146F1A80-4791-11D0-A5D6-28DB04C10000", KSNAME_Pin
);
536 #define KSNAME_Pin DEFINE_GUIDNAMED(KSNAME_Pin)
541 KSPROPERTY_PIN_CINSTANCES
,
542 KSPROPERTY_PIN_CTYPES
,
543 KSPROPERTY_PIN_DATAFLOW
,
544 KSPROPERTY_PIN_DATARANGES
,
545 KSPROPERTY_PIN_DATAINTERSECTION
,
546 KSPROPERTY_PIN_INTERFACES
,
547 KSPROPERTY_PIN_MEDIUMS
,
548 KSPROPERTY_PIN_COMMUNICATION
,
549 KSPROPERTY_PIN_GLOBALCINSTANCES
,
550 KSPROPERTY_PIN_NECESSARYINSTANCES
,
551 KSPROPERTY_PIN_PHYSICALCONNECTION
,
552 KSPROPERTY_PIN_CATEGORY
,
554 KSPROPERTY_PIN_CONSTRAINEDDATARANGES
,
555 KSPROPERTY_PIN_PROPOSEDATAFORMAT
563 } KSP_PIN
, *PKSP_PIN
;
565 #define KSINSTANCE_INDETERMINATE ((ULONG)-1)
571 } KSPIN_CINSTANCES
, *PKSPIN_CINSTANCES
;
577 WCHAR SymbolicLinkName
[1];
578 } KSPIN_PHYSICALCONNECTION
, *PKSPIN_PHYSICALCONNECTION
;
581 /* ===============================================================
583 Properties/Methods/Events
586 #define KSPROPSETID_Quality \
587 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
591 KSPROPERTY_QUALITY_REPORT
,
592 KSPROPERTY_QUALITY_ERROR
593 } KSPROPERTY_QUALITY
;
596 /* ===============================================================
598 Properties/Methods/Events
601 #define KSPROPSETID_Stream \
602 0x65aaba60L, 0x98ae, 0x11cf, 0xa1, 0x0d, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
606 KSPROPERTY_STREAM_ALLOCATOR
,
607 KSPROPERTY_STREAM_QUALITY
,
608 KSPROPERTY_STREAM_DEGRADATION
,
609 KSPROPERTY_STREAM_MASTERCLOCK
,
610 KSPROPERTY_STREAM_TIMEFORMAT
,
611 KSPROPERTY_STREAM_PRESENTATIONTIME
,
612 KSPROPERTY_STREAM_PRESENTATIONEXTENT
,
613 KSPROPERTY_STREAM_FRAMETIME
,
614 KSPROPERTY_STREAM_RATECAPABILITY
,
615 KSPROPERTY_STREAM_RATE
,
616 KSPROPERTY_STREAM_PIPE_ID
620 /* ===============================================================
622 Properties/Methods/Events
625 #define STATIC_KSPROPSETID_StreamAllocator\
626 0xcf6e4342L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
627 DEFINE_GUIDSTRUCT("cf6e4342-ec87-11cf-a130-0020afd156e4", KSPROPSETID_StreamAllocator
);
628 #define KSPROPSETID_StreamAllocator DEFINE_GUIDNAMED(KSPROPSETID_StreamAllocator)
632 KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE
,
633 KSPROPERTY_STREAMALLOCATOR_STATUS
634 } KSPROPERTY_STREAMALLOCATOR
;
636 #define KSMETHODSETID_StreamAllocator \
637 0xcf6e4341L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
641 KSMETHOD_STREAMALLOCATOR_ALLOC
,
642 KSMETHOD_STREAMALLOCATOR_FREE
643 } KSMETHOD_STREAMALLOCATOR
;
646 #define KSEVENTSETID_StreamAllocator
650 KSEVENT_STREAMALLOCATOR_INTERNAL_FREEFRAME
,
651 KSEVENT_STREAMALLOCATOR_FREEFRAME
652 } KSEVENT_STREAMALLOCATOR
;
655 /* ===============================================================
657 Properties/Methods/Events
660 #define KSPROPSETID_StreamInterface \
661 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
665 KSPROPERTY_STREAMINTERFACE_HEADERSIZE
666 } KSPROPERTY_STREAMINTERFACE
;
669 /* ===============================================================
671 Properties/Methods/Events
674 #define STATIC_KSPROPSETID_Topology\
675 0x720D4AC0L, 0x7533, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
676 DEFINE_GUIDSTRUCT("720D4AC0-7533-11D0-A5D6-28DB04C10000", KSPROPSETID_Topology
);
677 #define KSPROPSETID_Topology DEFINE_GUIDNAMED(KSPROPSETID_Topology)
680 KSPROPERTY_TOPOLOGY_CATEGORIES
,
681 KSPROPERTY_TOPOLOGY_NODES
,
682 KSPROPERTY_TOPOLOGY_CONNECTIONS
,
683 KSPROPERTY_TOPOLOGY_NAME
684 } KSPROPERTY_TOPOLOGY
;
686 /* ===============================================================
687 Property Sets for audio drivers - TODO
690 #define STATIC_KSPROPTYPESETID_General \
691 0x97E99BA0L, 0xBDEA, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
692 DEFINE_GUIDSTRUCT("97E99BA0-BDEA-11CF-A5D6-28DB04C10000", KSPROPTYPESETID_General
);
693 #define KSPROPTYPESETID_General DEFINE_GUIDNAMED(KSPROPTYPESETID_General)
696 KSPROPERTY_AC3_ALTERNATE_AUDIO
697 KSPROPERTY_AC3_BIT_STREAM_MODE
698 KSPROPERTY_AC3_DIALOGUE_LEVEL
699 KSPROPERTY_AC3_DOWNMIX
700 KSPROPERTY_AC3_ERROR_CONCEALMENT
701 KSPROPERTY_AC3_LANGUAGE_CODE
702 KSPROPERTY_AC3_ROOM_TYPE
705 #define KSPROPSETID_Acoustic_Echo_Cancel
708 KSPROPERTY_AEC_NOISE_FILL_ENABLE
709 KSPROPERTY_AEC_STATUS
713 KSPROPERTY_AUDIO_3D_INTERFACE
715 KSPROPERTY_AUDIO_ALGORITHM_INSTANCE
716 KSPROPERTY_AUDIO_BASS
717 KSPROPERTY_AUDIO_BASS_BOOST
718 KSPROPERTY_AUDIO_CHANNEL_CONFIG
719 KSPROPERTY_AUDIO_CHORUS_LEVEL
720 KSPROPERTY_AUDIO_COPY_PROTECTION
721 KSPROPERTY_AUDIO_CPU_RESOURCES
722 KSPROPERTY_AUDIO_DELAY
723 KSPROPERTY_AUDIO_DEMUX_DEST
724 KSPROPERTY_AUDIO_DEV_SPECIFIC
725 KSPROPERTY_AUDIO_DYNAMIC_RANGE
726 KSPROPERTY_AUDIO_DYNAMIC_SAMPLING_RATE
727 KSPROPERTY_AUDIO_EQ_BANDS
728 KSPROPERTY_AUDIO_EQ_LEVEL
729 KSPROPERTY_AUDIO_FILTER_STATE
730 KSPROPERTY_AUDIO_LATENCY
731 KSPROPERTY_AUDIO_LOUDNESS
732 KSPROPERTY_AUDIO_MANUFACTURE_GUID
734 KSPROPERTY_AUDIO_MIX_LEVEL_CAPS
735 KSPROPERTY_AUDIO_MIX_LEVEL_TABLE
736 KSPROPERTY_AUDIO_MUTE
737 KSPROPERTY_AUDIO_MUX_SOURCE
738 KSPROPERTY_AUDIO_NUM_EQ_BANDS
739 KSPROPERTY_AUDIO_PEAKMETER
740 KSPROPERTY_AUDIO_POSITION
741 KSPROPERTY_AUDIO_PREFERRED_STATUS
742 KSPROPERTY_AUDIO_PRODUCT_GUID
743 KSPROPERTY_AUDIO_QUALITY
744 KSPROPERTY_AUDIO_REVERB_LEVEL
745 KSPROPERTY_AUDIO_SAMPLING_RATE
746 KSPROPERTY_AUDIO_STEREO_ENHANCE
747 KSPROPERTY_AUDIO_STEREO_SPEAKER_GEOMETRY
748 KSPROPERTY_AUDIO_SURROUND_ENCODE
749 KSPROPERTY_AUDIO_TREBLE
750 KSPROPERTY_AUDIO_VOLUMELEVEL
751 KSPROPERTY_AUDIO_WIDE_MODE
752 KSPROPERTY_AUDIO_WIDENESS
755 #define KSPROPSETID_AudioGfx
757 KSPROPERTY_AUDIOGFX_CAPTURETARGETDEVICEID
758 KSPROPERTY_AUDIOGFX_RENDERTARGETDEVICEID
761 #define KSPROPSETID_DirectSound3DBuffer
763 KSPROPERTY_DIRECTSOUND3DBUFFER_ALL
764 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEANGLES
765 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEORIENTATION
766 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEOUTSIDEVOLUME
767 KSPROPERTY_DIRECTSOUND3DBUFFER_MAXDISTANCE
768 KSPROPERTY_DIRECTSOUND3DBUFFER_MINDISTANCE
769 KSPROPERTY_DIRECTSOUND3DBUFFER_MODE
770 KSPROPERTY_DIRECTSOUND3DBUFFER_POSITION
771 KSPROPERTY_DIRECTSOUND3DBUFFER_VELOCITY
774 #define KSPROPSETID_DirectSound3DListener
776 KSPROPERTY_DIRECTSOUND3DLISTENER_ALL
777 KSPROPERTY_DIRECTSOUND3DLISTENER_ALLOCATION
778 KSPROPERTY_DIRECTSOUND3DLISTENER_BATCH
779 KSPROPERTY_DIRECTSOUND3DLISTENER_DISTANCEFACTOR
780 KSPROPERTY_DIRECTSOUND3DLISTENER_DOPPLERFACTOR
781 KSPROPERTY_DIRECTSOUND3DLISTENER_ORIENTATION
782 KSPROPERTY_DIRECTSOUND3DLISTENER_POSITION
783 KSPROPERTY_DIRECTSOUND3DLISTENER_ROLLOFFFACTOR
784 KSPROPERTY_DIRECTSOUND3DLISTENER_VELOCITY
787 #define KSPROPSETID_DrmAudioStream
789 KSPROPERTY_DRMAUDIOSTREAM_CONTENTID
792 #define KSPROPSETID_Hrtf3d
794 KSPROPERTY_HRTF3D_FILTER_FORMAT
795 KSPROPERTY_HRTF3D_INITIALIZE
796 KSPROPERTY_HRTF3D_PARAMS
799 #define KSPROPSETID_Itd3d
801 KSPROPERTY_ITD3D_PARAMS
804 #define KSPROPSETID_Synth
806 KSPROPERTY_SYNTH_CAPS
807 KSPROPERTY_SYNTH_CHANNELGROUPS
808 KSPROPERTY_SYNTH_LATENCYCLOCK
809 KSPROPERTY_SYNTH_MASTERCLOCK
810 KSPROPERTY_SYNTH_PORTPARAMETERS
811 KSPROPERTY_SYNTH_RUNNINGSTATS
812 KSPROPERTY_SYNTH_VOICEPRIORITY
813 KSPROPERTY_SYNTH_VOLUME
814 KSPROPERTY_SYNTH_VOLUMEBOOST
817 #define KSPROPSETID_Synth_Dls
819 KSPROPERTY_SYNTH_DLS_APPEND
820 KSPROPERTY_SYNTH_DLS_COMPACT
821 KSPROPERTY_SYNTH_DLS_DOWNLOAD
822 KSPROPERTY_SYNTH_DLS_UNLOAD
823 KSPROPERTY_SYNTH_DLS_WAVEFORMAT
826 #define KSPROPSETID_TopologyNode
828 KSPROPERTY_TOPOLOGYNODE_ENABLE
829 KSPROPERTY_TOPOLOGYNODE_RESET
835 /* ===============================================================
836 Event Sets for audio drivers - TODO
838 #define KSEVENTSETID_AudioControlChange
840 KSEVENT_CONTROL_CHANGE
845 /* ===============================================================
849 KSNODETYPE_3D_EFFECTS
850 KSNODETYPE_ACOUSTIC_ECHO_CANCEL
857 KSNODETYPE_DEV_SPECIFIC
859 KSNODETYPE_DMSYNTH_CAPS
860 KSNODETYPE_DRM_DESCRAMBLE
866 KSNODETYPE_PROLOGIC_DECODER
867 KSNODETYPE_PROLOGIC_ENCODER
870 KSNODETYPE_STEREO_ENHANCE
871 KSNODETYPE_STEREO_WIDE
876 KSNODETYPE_SYNTHESIZER
882 typedef PVOID KSDEVICE_HEADER
,
889 /* ===============================================================
893 #define KSMETHOD_TYPE_NONE 0x00000000
894 #define KSMETHOD_TYPE_READ 0x00000001
895 #define KSMETHOD_TYPE_WRITE 0x00000002
896 #define KSMETHOD_TYPE_MODIFY 0x00000003
897 #define KSMETHOD_TYPE_SOURCE 0x00000004
898 #define KSMETHOD_TYPE_SEND 0x00000001
899 #define KSMETHOD_TYPE_SETSUPPORT 0x00000100
900 #define KSMETHOD_TYPE_BASICSUPPORT 0x00000200
903 /* ===============================================================
907 #define KSPROPERTY_TYPE_GET 0x00000001
908 #define KSPROPERTY_TYPE_SET 0x00000002
909 #define KSPROPERTY_TYPE_SETSUPPORT 0x00000100
910 #define KSPROPERTY_TYPE_BASICSUPPORT 0x00000200
911 #define KSPROPERTY_TYPE_RELATIONS 0x00000400
912 #define KSPROPERTY_TYPE_SERIALIZESET 0x00000800
913 #define KSPROPERTY_TYPE_UNSERIALIZESET 0x00001000
914 #define KSPROPERTY_TYPE_SERIALIZERAW 0x00002000
915 #define KSPROPERTY_TYPE_UNSERIALIZERAW 0x00004000
916 #define KSPROPERTY_TYPE_SERIALIZESIZE 0x00008000
917 #define KSPROPERTY_TYPE_DEFAULT_VALUES 0x00010000
920 /* ===============================================================
921 Topology Methods/Properties
924 #define KSMETHOD_TYPE_TOPOLOGY 0x10000000
925 #define KSPROPERTY_TYPE_TOPOLOGY 0x10000000
928 #define DEFINE_KS_GUID(GA,GB,GC,GD,GE,GF,GG,GH,GI,GJ,GK) \
929 DEFINE_GUID(??, 0x#GA#L, 0xGB, 0xGC, 0xGD, 0xGE, 0xGF, 0xGG, 0xGH, 0xGI, 0xGJ, 0xGK) \
930 "GA-GB-GC-GDGE-GFGGGHGIGJGK"
933 /* ===============================================================
936 BRIDGE - 0x085AFF00L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
937 CAPTURE - 0x65E8773DL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
938 RENDER - 0x65E8773EL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
939 MIXER - 0xAD809C00L, 0x7B88, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
940 SPLITTER - 0x0A4252A0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
941 DATACOMPRESSOR - 0x1E84C900L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
942 DATADECOMPRESSOR - 0x2721AE20L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
943 DATATRANSFORM - 0x2EB07EA0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
944 COMMUNICATIONSTRANSFORM - 0xCF1DDA2CL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
945 INTERFACETRANSFORM - 0xCF1DDA2DL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
946 MEDIUMTRANSFORM - 0xCF1DDA2EL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
947 FILESYSTEM - 0x760FED5EL, 0x9357, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
948 CLOCK - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
949 PROXY - 0x97EBAACAL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
950 QUALITY - 0x97EBAACBL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
953 /* ===============================================================
954 KSNAME GUIDs (defined also as KSSTRING_Xxx L"{...}"
956 Filter - 0x9b365890L, 0x165f, 0x11d0, 0xa1, 0x95, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
957 Pin - 0x146F1A80L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
958 Clock - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
959 Allocator - 0x642F5D00L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
960 TopologyNode - 0x0621061AL, 0xEE75, 0x11D0, 0xB9, 0x15, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
963 /* ===============================================================
966 Standard - 0x1A8766A0L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
967 FileIo - 0x8C6F932CL, 0xE771, 0x11D0, 0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
970 /* ===============================================================
973 Standard - 0x4747B320L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
976 /* ===============================================================
979 General - 0x1464EDA5L, 0x6A8F, 0x11D1, 0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
980 StreamIo - 0x65D003CAL, 0x1523, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
981 MediaSeeking - 0xEE904F0CL, 0xD09B, 0x11D0, 0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
982 Topology - 0x720D4AC0L, 0x7533, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
983 GM - 0xAF627536L, 0xE719, 0x11D2, 0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D
984 Quality - 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
985 Connection - 0x1D58C920L, 0xAC9B, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
988 /* ===============================================================
991 Event set - 0x75d95571L, 0x073c, 0x11d0, 0xa1, 0x61, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
992 Method set - 0xcf6e4341L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
993 Property set - 0xcf6e4342L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
996 /* ===============================================================
999 Property set - 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
1002 /* ===============================================================
1005 Property set - 0xDF12A4C0L, 0xAC17, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1006 Event sets - 0x364D8E20L, 0x62C7, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1009 /* ===============================================================
1012 Event set - 0x7f4bcbe0L, 0x9ea5, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00
1015 /* ===============================================================
1018 KSTIME_FORMAT_NONE (null guid)
1019 FRAME - 0x7b785570L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1020 BYTE - 0x7b785571L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1021 SAMPLE - 0x7b785572L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1022 FIELD - 0x7b785573L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1023 MEDIA_TIME - 0x7b785574L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1026 /* ===============================================================
1036 #define STATIC_KSDATAFORMAT_SPECIFIER_NONE\
1037 0x0F6417D6L, 0xC318, 0x11D0, 0xA4, 0x3F, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1038 DEFINE_GUIDSTRUCT("0F6417D6-C318-11D0-A43F-00A0C9223196", KSDATAFORMAT_SPECIFIER_NONE
);
1039 #define KSDATAFORMAT_SPECIFIER_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_NONE)
1042 /* ===============================================================
1045 WILDCARD, DONT_CARE = NULL
1046 SYSTEM - 0x091bb638L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1047 USER - 0x8cb0fc28L, 0x7893, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1048 KERNEL_PAGED - 0xd833f8f8L, 0x7894, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1049 KERNEL_NONPAGED - 0x4a6d5fc4L, 0x7895, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1050 DEVICE_UNKNOWN - 0x091bb639L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1053 /* ===============================================================
1055 (values have been checked)
1060 #define DEFINE_KSPROPERTY_ITEM(PropertyId, GetHandler,\
1064 Values, RelationsCount, Relations, SupportHandler,\
1067 PropertyId, {(PFNKSHANDLER)GetHandler}, MinProperty, MinData,\
1068 {(PFNKSHANDLER)SetHandler},\
1069 (PKSPROPERTY_VALUES)Values, RelationsCount, (PKSPROPERTY)Relations,\
1070 (PFNKSHANDLER)SupportHandler, (ULONG)SerializedSize\
1075 #define DEFINE_KSPROPERTY_ITEM(PropertyId, GetHandler,\
1079 Values, RelationsCount, Relations, SupportHandler,\
1082 PropertyId, (PFNKSHANDLER)GetHandler, MinProperty, MinData,\
1083 (PFNKSHANDLER)SetHandler,\
1084 (PKSPROPERTY_VALUES)Values, RelationsCount, (PKSPROPERTY)Relations,\
1085 (PFNKSHANDLER)SupportHandler, (ULONG)SerializedSize\
1094 KsObjectTypeFilterFactory
,
1105 } KSSTATE
, *PKSSTATE
;
1109 KSTARGET_STATE_DISABLED
,
1110 KSTARGET_STATE_ENABLED
1125 KSEVENTS_FMUTEXUNSAFE
,
1128 } KSEVENTS_LOCKTYPE
;
1132 KSDEGRADE_STANDARD_SIMPLE
,
1133 KSDEGRADE_STANDARD_QUALITY
,
1134 KSDEGRADE_STANDARD_COMPUTATION
,
1135 KSDEGRADE_STANDARD_SKIP
1136 } KSDEGRADE_STANDARD
;
1140 KSPIN_DATAFLOW_IN
= 1,
1142 } KSPIN_DATAFLOW
, *PKSPIN_DATAFLOW
;
1146 KSPIN_COMMUNICATION_NONE
,
1147 KSPIN_COMMUNICATION_SINK
,
1148 KSPIN_COMMUNICATION_SOURCE
,
1149 KSPIN_COMMUNICATION_BOTH
,
1150 KSPIN_COMMUNICATION_BRIDGE
1151 } KSPIN_COMMUNICATION
, *PKSPIN_COMMUNICATION
;
1157 } KSLIST_ENTRY_LOCATION
;
1161 KsStackCopyToNewLocation
,
1162 KsStackReuseCurrentLocation
,
1163 KsStackUseNewLocation
1170 KsAcquireOnlySingleItem
,
1171 KsAcquireAndRemoveOnlySingleItem
1172 } KSIRP_REMOVAL_OPERATION
;
1176 KsInvokeOnSuccess
= 1,
1177 KsInvokeOnError
= 2,
1178 KsInvokeOnCancel
= 4
1179 } KSCOMPLETION_INVOCATION
;
1182 #if defined(_NTDDK_)
1184 typedef NTSTATUS (NTAPI
*PFNKSCONTEXT_DISPATCH
)(
1189 #if defined(_NTDDK_) && !defined(__wtypes_h__)
1219 VT_USERDEFINED
= 29,
1226 VT_STREAMED_OBJECT
= 68,
1227 VT_STORED_OBJECT
= 69,
1228 VT_BLOB_OBJECT
= 70,
1234 VT_RESERVED
= 0x8000,
1235 VT_ILLEGAL
= 0xffff,
1236 VT_ILLEGALMASKED
= 0xfff,
1241 #define STATIC_KSDATAFORMAT_TYPE_WILDCARD STATIC_GUID_NULL
1242 #define KSDATAFORMAT_TYPE_WILDCARD GUID_NULL
1244 #define STATIC_KSDATAFORMAT_SUBTYPE_WILDCARD STATIC_GUID_NULL
1245 #define KSDATAFORMAT_SUBTYPE_WILDCARD GUID_NULL
1247 #define STATIC_KSDATAFORMAT_SPECIFIER_WILDCARD STATIC_GUID_NULL
1248 #define KSDATAFORMAT_SPECIFIER_WILDCARD GUID_NULL
1250 /* ===============================================================
1259 } KS_FRAMING_RANGE
, *PKS_FRAMING_RANGE
;
1263 KS_FRAMING_RANGE Range
;
1264 ULONG InPlaceWeight
;
1265 ULONG NotInPlaceWeight
;
1266 } KS_FRAMING_RANGE_WEIGHTED
, *PKS_FRAMING_RANGE_WEIGHTED
;
1276 ULONG FileAlignment
;
1277 ULONG MemoryTypeWeight
;
1278 KS_FRAMING_RANGE PhysicalRange
;
1279 KS_FRAMING_RANGE_WEIGHTED FramingRange
;
1280 } KS_FRAMING_ITEM
, *PKS_FRAMING_ITEM
;
1284 ULONG RatioNumerator
;
1285 ULONG RatioDenominator
;
1286 ULONG RatioConstantMargin
;
1287 } KS_COMPRESSION
, *PKS_COMPRESSION
;
1290 /* ===============================================================
1294 #define KSPRIORITY_LOW 0x00000001
1295 #define KSPRIORITY_NORMAL 0x40000000
1296 #define KSPRIORITY_HIGH 0x80000000
1297 #define KSPRIORITY_EXCLUSIVE 0xFFFFFFFF
1301 ULONG PriorityClass
;
1302 ULONG PrioritySubClass
;
1303 } KSPRIORITY
, *PKSPRIORITY
;
1306 /* ===============================================================
1308 http://www.osronline.com/DDKx/stream/ks-struct_494j.htm
1310 #if defined(_NTDDK_)
1313 PDRIVER_DISPATCH DeviceIoControl
;
1314 PDRIVER_DISPATCH Read
;
1315 PDRIVER_DISPATCH Write
;
1316 PDRIVER_DISPATCH Flush
;
1317 PDRIVER_DISPATCH Close
;
1318 PDRIVER_DISPATCH QuerySecurity
;
1319 PDRIVER_DISPATCH SetSecurity
;
1320 PFAST_IO_DEVICE_CONTROL FastDeviceIoControl
;
1321 PFAST_IO_READ FastRead
;
1322 PFAST_IO_WRITE FastWrite
;
1323 } KSDISPATCH_TABLE
, *PKSDISPATCH_TABLE
;
1326 #define KSCREATE_ITEM_IRP_STORAGE(Irp) (*(PKSOBJECT_CREATE_ITEM*)&(Irp)->Tail.Overlay.DriverContext[0])
1327 #define KSEVENT_SET_IRP_STORAGE(Irp) (*(const KSEVENT_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1328 #define KSEVENT_ITEM_IRP_STORAGE(Irp) (*(const KSEVENT_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1329 #define KSEVENT_ENTRY_IRP_STORAGE(Irp) (*(PKSEVENT_ENTRY*)&(Irp)->Tail.Overlay.DriverContext[0])
1330 #define KSMETHOD_SET_IRP_STORAGE(Irp) (*(const KSMETHOD_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1331 #define KSMETHOD_ITEM_IRP_STORAGE(Irp) (*(const KSMETHOD_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1332 #define KSMETHOD_TYPE_IRP_STORAGE(Irp) (*(ULONG_PTR*)(&(Irp)->Tail.Overlay.DriverContext[2]))
1333 #define KSQUEUE_SPINLOCK_IRP_STORAGE(Irp) (*(PKSPIN_LOCK*)&(Irp)->Tail.Overlay.DriverContext[1])
1334 #define KSPROPERTY_SET_IRP_STORAGE(Irp) (*(const KSPROPERTY_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1335 #define KSPROPERTY_ITEM_IRP_STORAGE(Irp) (*(const KSPROPERTY_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1336 #define KSPROPERTY_ATTRIBUTES_IRP_STORAGE(Irp) (*(PKSATTRIBUTE_LIST*)&(Irp)->Tail.Overlay.DriverContext[2])
1340 (NTAPI
*PFNREFERENCEDEVICEOBJECT
)(
1346 (NTAPI
*PFNDEREFERENCEDEVICEOBJECT
)(
1352 (NTAPI
*PFNQUERYREFERENCESTRING
)(
1354 IN OUT PWCHAR
*String
1359 INTERFACE Interface
;
1360 PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject
;
1361 PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject
;
1362 PFNQUERYREFERENCESTRING QueryReferenceString
;
1363 } BUS_INTERFACE_REFERENCE
, *PBUS_INTERFACE_REFERENCE
;
1368 ULONG ReferenceCount
;
1369 KSPIN_LOCK AccessLock
;
1370 } KSDPC_ITEM
, *PKSDPC_ITEM
;
1375 LIST_ENTRY BufferList
;
1376 } KSBUFFER_ITEM
, *PKSBUFFER_ITEM
;
1388 } KSCOMPONENTID
, *PKSCOMPONENTID
;
1390 /* ===============================================================
1394 #define KSPROPERTY_MEMBER_RANGES 0x00000001
1395 #define KSPROPERTY_MEMBER_STEPPEDRANGES 0x00000002
1396 #define KSPROPERTY_MEMBER_VALUES 0x00000003
1397 #define KSPROPERTY_MEMBER_FLAG_DEFAULT KSPROPERTY_MEMBER_RANGES
1400 KS_SEEKING_NoPositioning
,
1401 KS_SEEKING_AbsolutePositioning
,
1402 KS_SEEKING_RelativePositioning
,
1403 KS_SEEKING_IncrementalPositioning
,
1404 KS_SEEKING_PositioningBitsMask
= 0x3,
1405 KS_SEEKING_SeekToKeyFrame
,
1406 KS_SEEKING_ReturnTime
= 0x8
1413 KS_SEEKING_FLAGS CurrentFlags
;
1414 KS_SEEKING_FLAGS StopFlags
;
1415 } KSPROPERTY_POSITIONS
, *PKSPROPERTY_POSITIONS
;
1421 } KSPROPERTY_SERIALHDR
, *PKSPROPERTY_SERIALHDR
;
1425 KSIDENTIFIER PropTypeSet
;
1427 ULONG PropertyLength
;
1428 } KSPROPERTY_SERIAL
, *PKSPROPERTY_SERIAL
;
1437 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1444 ULONG UnsignedMinimum
;
1445 ULONG UnsignedMaximum
;
1446 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1452 } KSPROPERTY_BOUNDS_LONG
, *PKSPROPERTY_BOUNDS_LONG
;
1457 LONGLONG SignedMinimum
;
1458 LONGLONG SignedMaximum
;
1459 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1466 #if defined(_NTDDK_)
1467 ULONGLONG UnsignedMinimum
;
1468 ULONGLONG UnsignedMaximum
;
1470 DWORDLONG UnsignedMinimum
;
1471 DWORDLONG UnsignedMaximum
;
1473 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1478 } KSPROPERTY_BOUNDS_LONGLONG
, *PKSPROPERTY_BOUNDS_LONGLONG
;
1483 ULONG DescriptionSize
;
1484 KSIDENTIFIER PropTypeSet
;
1485 ULONG MembersListCount
;
1487 } KSPROPERTY_DESCRIPTION
, *PKSPROPERTY_DESCRIPTION
;
1493 } KSPROPERTY_MEDIAAVAILABLE
, *PKSPROPERTY_MEDIAAVAILABLE
;
1502 } KSPROPERTY_MEMBERSHEADER
, *PKSPROPERTY_MEMBERSHEADER
;
1505 KSPROPERTY_MEMBERSHEADER MembersHeader
;
1506 const VOID
* Members
;
1507 } KSPROPERTY_MEMBERSLIST
, *PKSPROPERTY_MEMBERSLIST
;
1510 KSIDENTIFIER PropTypeSet
;
1511 ULONG MembersListCount
;
1512 const KSPROPERTY_MEMBERSLIST
* MembersList
;
1513 } KSPROPERTY_VALUES
, *PKSPROPERTY_VALUES
;
1515 #if defined(_NTDDK_)
1516 typedef NTSTATUS (NTAPI
*PFNKSHANDLER
)(
1518 IN PKSIDENTIFIER Request
,
1526 PFNKSHANDLER GetPropertyHandler
;
1527 BOOLEAN GetSupported
;
1532 PFNKSHANDLER SetPropertyHandler
;
1533 BOOLEAN SetSupported
;
1535 const KSPROPERTY_VALUES
* Values
;
1536 ULONG RelationsCount
;
1537 const KSPROPERTY
* Relations
;
1538 PFNKSHANDLER SupportHandler
;
1539 ULONG SerializedSize
;
1540 } KSPROPERTY_ITEM
, *PKSPROPERTY_ITEM
;
1545 (NTAPI
*PFNKSFASTHANDLER
)(
1546 IN PFILE_OBJECT FileObject
,
1547 IN PKSIDENTIFIER Request
,
1548 IN ULONG RequestLength
,
1550 IN ULONG DataLength
,
1551 OUT PIO_STATUS_BLOCK IoStatus
1557 PFNKSFASTHANDLER GetPropertyHandler
;
1558 BOOLEAN GetSupported
;
1561 PFNKSFASTHANDLER SetPropertyHandler
;
1562 BOOLEAN SetSupported
;
1565 } KSFASTPROPERTY_ITEM
, *PKSFASTPROPERTY_ITEM
;
1570 ULONG PropertiesCount
;
1571 const KSPROPERTY_ITEM
* PropertyItem
;
1573 const KSFASTPROPERTY_ITEM
* FastIoTable
;
1574 } KSPROPERTY_SET
, *PKSPROPERTY_SET
;
1580 ULONG SteppingDelta
;
1582 KSPROPERTY_BOUNDS_LONG Bounds
;
1583 } KSPROPERTY_STEPPING_LONG
, *PKSPROPERTY_STEPPING_LONG
;
1587 #if defined(_NTDDK_)
1588 ULONGLONG SteppingDelta
;
1590 DWORDLONG SteppingDelta
;
1592 KSPROPERTY_BOUNDS_LONGLONG Bounds
;
1593 } KSPROPERTY_STEPPING_LONGLONG
, *PKSPROPERTY_STEPPING_LONGLONG
;
1595 /* ===============================================================
1603 ULONG RequirementsFlags
;
1605 #if defined(_NTDDK_)
1612 ULONG FileAlignment
;
1614 } KSALLOCATOR_FRAMING
, *PKSALLOCATOR_FRAMING
;
1620 KS_COMPRESSION OutputCompression
;
1622 KS_FRAMING_ITEM FramingItem
[1];
1623 } KSALLOCATOR_FRAMING_EX
, *PKSALLOCATOR_FRAMING_EX
;
1625 #define KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER 0x00000001
1626 #define KSALLOCATOR_REQUIREMENTF_SYSTEM_MEMORY 0x00000002
1627 #define KSALLOCATOR_REQUIREMENTF_FRAME_INTEGRITY 0x00000004
1628 #define KSALLOCATOR_REQUIREMENTF_MUST_ALLOCATE 0x00000008
1629 #define KSALLOCATOR_REQUIREMENTF_PREFERENCES_ONLY 0x80000000
1631 #define KSALLOCATOR_OPTIONF_COMPATIBLE 0x00000001
1632 #define KSALLOCATOR_OPTIONF_SYSTEM_MEMORY 0x00000002
1633 #define KSALLOCATOR_OPTIONF_VALID 0x00000003
1635 #define KSALLOCATOR_FLAG_PARTIAL_READ_SUPPORT 0x00000010
1636 #define KSALLOCATOR_FLAG_DEVICE_SPECIFIC 0x00000020
1637 #define KSALLOCATOR_FLAG_CAN_ALLOCATE 0x00000040
1638 #define KSALLOCATOR_FLAG_INSIST_ON_FRAMESIZE_RATIO 0x00000080
1640 /* ===============================================================
1649 } KSQUALITY
, *PKSQUALITY
;
1653 HANDLE QualityManager
;
1655 } KSQUALITY_MANAGER
, *PKSQUALITY_MANAGER
;
1659 LONGLONG PresentationStart
;
1661 KSPIN_INTERFACE Interface
;
1668 KSPROPERTY Property
;
1670 } KSRATE_CAPABILITY
, *PKSRATE_CAPABILITY
;
1674 LONGLONG Granularity
;
1676 } KSRESOLUTION
, *PKSRESOLUTION
;
1680 ULONG NotificationType
;
1684 ULONG_PTR Reserved
[2];
1691 #if defined(_NTDDK_)
1694 KPRIORITY Increment
;
1699 KPRIORITY Increment
;
1704 ULONG ReferenceCount
;
1708 PWORK_QUEUE_ITEM WorkQueueItem
;
1709 WORK_QUEUE_TYPE WorkQueueType
;
1713 PWORK_QUEUE_ITEM WorkQueueItem
;
1714 PKSWORKER KsWorkerObject
;
1720 LONG_PTR Alignment
[2];
1723 } KSEVENTDATA
, *PKSEVENTDATA
;
1725 #define KSEVENTF_EVENT_HANDLE 0x00000001
1726 #define KSEVENTF_SEMAPHORE_HANDLE 0x00000002
1727 #if defined(_NTDDK_)
1728 #define KSEVENTF_EVENT_OBJECT 0x00000004
1729 #define KSEVENTF_SEMAPHORE_OBJECT 0x00000008
1730 #define KSEVENTF_DPC 0x00000010
1731 #define KSEVENTF_WORKITEM 0x00000020
1732 #define KSEVENTF_KSWORKITEM 0x00000080
1736 #define KSEVENT_TYPE_ENABLE 0x00000001
1737 #define KSEVENT_TYPE_ONESHOT 0x00000002
1738 #define KSEVENT_TYPE_ENABLEBUFFERED 0x00000004
1739 #define KSEVENT_TYPE_SETSUPPORT 0x00000100
1740 #define KSEVENT_TYPE_BASICSUPPORT 0x00000200
1741 #define KSEVENT_TYPE_QUERYBUFFER 0x00000400
1743 #define KSEVENT_TYPE_TOPOLOGY 0x10000000
1750 HANDLE ObjectHandle
;
1751 PVOID ObjectPointer
;
1755 KSEVENTDATA EventData
;
1756 } KSRELATIVEEVENT
, *PKSRELATIVEEVENT
;
1759 /* ===============================================================
1773 LONGLONG SystemTime
;
1774 } KSCORRELATED_TIME
, *PKSCORRELATED_TIME
;
1778 KSPROPERTY Property
;
1782 } KSP_TIMEFORMAT
, *PKSP_TIMEFORMAT
;
1788 } KSINTERVAL
, *PKSINTERVAL
;
1795 } KSFRAMETIME
, *PKSFRAMETIME
;
1798 /* ===============================================================
1802 typedef PVOID PKSDEFAULTCLOCK
;
1807 } KSCLOCK_CREATE
, *PKSCLOCK_CREATE
;
1809 #if defined(_NTDDK_)
1813 (FASTCALL
*PFNKSCLOCK_GETTIME
)(
1814 IN PFILE_OBJECT FileObject
1818 (FASTCALL
*PFNKSCLOCK_CORRELATEDTIME
)(
1819 IN PFILE_OBJECT FileObject
,
1820 OUT PLONGLONG SystemTime
);
1824 PFNKSCLOCK_GETTIME GetTime
;
1825 PFNKSCLOCK_GETTIME GetPhysicalTime
;
1826 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedTime
;
1827 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedPhysicalTime
;
1828 } KSCLOCK_FUNCTIONTABLE
, *PKSCLOCK_FUNCTIONTABLE
;
1831 /* ===============================================================
1832 Objects ??? SORT ME!
1835 #define KSCREATE_ITEM_SECURITYCHANGED 0x1
1836 #define KSCREATE_ITEM_WILDCARD 0x2
1837 #define KSCREATE_ITEM_NOPARAMETERS 0x4
1838 #define KSCREATE_ITEM_FREEONSTOP 0x8
1842 PDRIVER_DISPATCH Create
;
1844 UNICODE_STRING ObjectClass
;
1845 PSECURITY_DESCRIPTOR SecurityDescriptor
;
1847 } KSOBJECT_CREATE_ITEM
, *PKSOBJECT_CREATE_ITEM
;
1851 ULONG CreateItemsCount
;
1852 PKSOBJECT_CREATE_ITEM CreateItemsList
;
1853 } KSOBJECT_CREATE
, *PKSOBJECT_CREATE
;
1855 typedef VOID (NTAPI
*PFNKSITEMFREECALLBACK
)(
1856 IN PKSOBJECT_CREATE_ITEM CreateItem
);
1864 } KSMULTIPLE_ITEM
, *PKSMULTIPLE_ITEM
;
1869 PKSEVENTDATA EventData
;
1871 } KSQUERYBUFFER
, *PKSQUERYBUFFER
;
1877 } KSERROR
, *PKSERROR
;
1879 /* ===============================================================
1882 #if defined(_NTDDK_)
1888 PFNKSHANDLER MethodHandler
;
1889 BOOLEAN MethodSupported
;
1893 PFNKSHANDLER SupportHandler
;
1895 } KSMETHOD_ITEM
, *PKSMETHOD_ITEM
;
1899 #define DEFINE_KSMETHOD_ITEM(MethodId, Flags,\
1901 MinMethod, MinData, SupportHandler)\
1903 MethodId, {(PFNKSHANDLER)MethodHandler}, MinMethod, MinData,\
1904 SupportHandler, Flags\
1909 #define DEFINE_KSMETHOD_ITEM(MethodId, Flags,\
1911 MinMethod, MinData, SupportHandler)\
1913 MethodId, (PFNKSHANDLER)MethodHandler, MinMethod, MinData,\
1914 SupportHandler, Flags\
1926 PFNKSFASTHANDLER MethodHandler
;
1927 BOOLEAN MethodSupported
;
1929 } KSFASTMETHOD_ITEM
, *PKSFASTMETHOD_ITEM
;
1931 #define DEFINE_KSFASTMETHOD_ITEM(MethodId, MethodHandler)\
1933 MethodId, (PFNKSFASTHANDLER)MethodHandler\
1941 const KSMETHOD_ITEM
* MethodItem
;
1943 const KSFASTMETHOD_ITEM
*FastIoTable
;
1944 } KSMETHOD_SET
, *PKSMETHOD_SET
;
1947 #define DEFINE_KSMETHOD_SET(Set,\
1961 /* ===============================================================
1967 KSPROPERTY Property
;
1970 } KSP_NODE
, *PKSP_NODE
;
1977 } KSM_NODE
, *PKSM_NODE
;
1984 } KSE_NODE
, *PKSE_NODE
;
1989 } KSNODE_CREATE
, *PKSNODE_CREATE
;
1992 /* ===============================================================
1995 typedef struct _KSEVENT_ENTRY KSEVENT_ENTRY
, *PKSEVENT_ENTRY
;
1997 #if defined(_NTDDK_)
2000 KSEVENTDATA EventData
;
2002 } KSEVENT_TIME_MARK
, *PKSEVENT_TIME_MARK
;
2006 KSEVENTDATA EventData
;
2009 } KSEVENT_TIME_INTERVAL
, *PKSEVENT_TIME_INTERVAL
;
2011 typedef NTSTATUS (NTAPI
*PFNKSADDEVENT
)(
2013 IN PKSEVENTDATA EventData
,
2014 IN
struct _KSEVENT_ENTRY
* EventEntry
);
2018 (NTAPI
*PFNKSREMOVEEVENT
)(
2019 IN PFILE_OBJECT FileObject
,
2020 IN
struct _KSEVENT_ENTRY
* EventEntry
2027 ULONG ExtraEntryData
;
2028 PFNKSADDEVENT AddHandler
;
2029 PFNKSREMOVEEVENT RemoveHandler
;
2030 PFNKSHANDLER SupportHandler
;
2031 } KSEVENT_ITEM
, *PKSEVENT_ITEM
;
2037 const KSEVENT_ITEM
* EventItem
;
2038 } KSEVENT_SET
, *PKSEVENT_SET
;
2040 struct _KSEVENT_ENTRY
2042 LIST_ENTRY ListEntry
;
2045 PKSDPC_ITEM DpcItem
;
2046 PKSBUFFER_ITEM BufferItem
;
2048 PKSEVENTDATA EventData
;
2049 ULONG NotificationType
;
2050 const KSEVENT_SET
* EventSet
;
2051 const KSEVENT_ITEM
* EventItem
;
2052 PFILE_OBJECT FileObject
;
2053 ULONG SemaphoreAdjustment
;
2059 /* ===============================================================
2063 #if defined(_NTDDK_)
2065 typedef struct _KSPIN KSPIN
, *PKSPIN
;
2066 typedef struct _KSSTREAM_POINTER KSSTREAM_POINTER
, *PKSSTREAM_POINTER
;
2067 typedef struct _KSSTREAM_POINTER_OFFSET KSSTREAM_POINTER_OFFSET
, *PKSSTREAM_POINTER_OFFSET
;
2068 typedef struct _KSMAPPING KSMAPPING
, *PKSMAPPING
;
2069 typedef struct _KSPROCESSPIN KSPROCESSPIN
, *PKSPROCESSPIN
;
2071 #define IOCTL_KS_HANDSHAKE CTL_CODE(FILE_DEVICE_KS, 0x007, METHOD_NEITHER, FILE_ANY_ACCESS)
2077 } KSHANDSHAKE
, *PKSHANDSHAKE
;
2081 (NTAPI
*PFNKSPINHANDSHAKE
)(
2089 (NTAPI
*PFNKSPINPOWER
)(
2091 IN DEVICE_POWER_STATE State
2096 (NTAPI
*PFNKSPINFRAMERETURN
)(
2098 IN PVOID Data OPTIONAL
,
2099 IN ULONG Size OPTIONAL
,
2100 IN PMDL Mdl OPTIONAL
,
2101 IN PVOID Context OPTIONAL
,
2107 (NTAPI
*PFNKSPINIRPCOMPLETION
)(
2114 (NTAPI
*PFNKSPINIRP
)(
2127 (NTAPI
*PFNKSPINVOID
)(
2133 (NTAPI
*PFNKSSTREAMPOINTER
)(
2134 IN PKSSTREAM_POINTER StreamPointer
2139 PKSATTRIBUTE
* Attributes
;
2140 } KSATTRIBUTE_LIST
, *PKSATTRIBUTE_LIST
;
2144 (NTAPI
*PFNKSPINSETDATAFORMAT
)(
2146 IN PKSDATAFORMAT OldFormat OPTIONAL
,
2147 IN PKSMULTIPLE_ITEM OldAttributeList OPTIONAL
,
2148 IN
const KSDATARANGE
* DataRange
,
2149 IN
const KSATTRIBUTE_LIST
* AttributeRange OPTIONAL
2154 (NTAPI
*PFNKSPINSETDEVICESTATE
)(
2157 IN KSSTATE FromState
2160 typedef struct _KSCLOCK_DISPATCH KSCLOCK_DISPATCH
, *PKSCLOCK_DISPATCH
;
2161 typedef struct _KSALLOCATOR_DISPATCH KSALLOCATOR_DISPATCH
, *PKSALLOCATOR_DISPATCH
;
2169 PFNKSPINSETDATAFORMAT SetDataFormat
;
2170 PFNKSPINSETDEVICESTATE SetDeviceState
;
2172 PFNKSPINVOID Disconnect
;
2173 const KSCLOCK_DISPATCH
* Clock
;
2174 const KSALLOCATOR_DISPATCH
* Allocator
;
2175 } KSPIN_DISPATCH
, *PKSPIN_DISPATCH
;
2179 (NTAPI
*PFNKSPINSETTIMER
)(
2182 IN LARGE_INTEGER DueTime
,
2188 (NTAPI
*PFNKSPINCANCELTIMER
)(
2195 (FASTCALL
*PFNKSPINCORRELATEDTIME
)(
2197 OUT PLONGLONG SystemTime
2202 (NTAPI
*PFNKSPINRESOLUTION
)(
2204 OUT PKSRESOLUTION Resolution
2207 struct _KSCLOCK_DISPATCH
{
2208 PFNKSPINSETTIMER SetTimer
;
2209 PFNKSPINCANCELTIMER CancelTimer
;
2210 PFNKSPINCORRELATEDTIME CorrelatedTime
;
2211 PFNKSPINRESOLUTION Resolution
;
2216 (NTAPI
*PFNKSPININITIALIZEALLOCATOR
)(
2218 IN PKSALLOCATOR_FRAMING AllocatorFraming
,
2222 typedef PVOID (NTAPI
*PFNKSDELETEALLOCATOR
)(
2225 typedef PVOID (NTAPI
*PFNKSDEFAULTALLOCATE
)(
2228 typedef PVOID (NTAPI
*PFNKSDEFAULTFREE
)(
2232 struct _KSALLOCATOR_DISPATCH
{
2233 PFNKSPININITIALIZEALLOCATOR InitializeAllocator
;
2234 PFNKSDELETEALLOCATOR DeleteAllocator
;
2235 PFNKSDEFAULTALLOCATE Allocate
;
2236 PFNKSDEFAULTFREE Free
;
2241 ULONG PropertySetsCount
;
2242 ULONG PropertyItemSize
;
2243 const KSPROPERTY_SET
* PropertySets
;
2244 ULONG MethodSetsCount
;
2245 ULONG MethodItemSize
;
2246 const KSMETHOD_SET
* MethodSets
;
2247 ULONG EventSetsCount
;
2248 ULONG EventItemSize
;
2249 const KSEVENT_SET
* EventSets
;
2250 #if !defined(_WIN64)
2253 } KSAUTOMATION_TABLE
, *PKSAUTOMATION_TABLE
;
2259 ULONG InterfacesCount
;
2260 const KSPIN_INTERFACE
* Interfaces
;
2262 const KSPIN_MEDIUM
* Mediums
;
2263 ULONG DataRangesCount
;
2264 const PKSDATARANGE
* DataRanges
;
2265 KSPIN_DATAFLOW DataFlow
;
2266 KSPIN_COMMUNICATION Communication
;
2267 const GUID
* Category
;
2272 ULONG ConstrainedDataRangesCount
;
2273 PKSDATARANGE
* ConstrainedDataRanges
;
2276 } KSPIN_DESCRIPTOR
, *PKSPIN_DESCRIPTOR
;
2280 (NTAPI
*PFNKSINTERSECTHANDLER
)(
2283 IN PKSDATARANGE DataRange
,
2284 OUT PVOID Data OPTIONAL
2289 (NTAPI
*PFNKSINTERSECTHANDLEREX
)(
2293 IN PKSDATARANGE DataRange
,
2294 IN PKSDATARANGE MatchingDataRange
,
2295 IN ULONG DataBufferSize
,
2296 OUT PVOID Data OPTIONAL
,
2302 const KSPIN_DISPATCH
* Dispatch
;
2303 const KSAUTOMATION_TABLE
* AutomationTable
;
2304 KSPIN_DESCRIPTOR PinDescriptor
;
2306 ULONG InstancesPossible
;
2307 ULONG InstancesNecessary
;
2308 const KSALLOCATOR_FRAMING_EX
* AllocatorFraming
;
2309 PFNKSINTERSECTHANDLEREX IntersectHandler
;
2310 } KSPIN_DESCRIPTOR_EX
, *PKSPIN_DESCRIPTOR_EX
;
2312 #define KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING 0x00000001
2313 #define KSFILTER_FLAG_CRITICAL_PROCESSING 0x00000002
2314 #define KSFILTER_FLAG_HYPERCRITICAL_PROCESSING 0x00000004
2315 #define KSFILTER_FLAG_RECEIVE_ZERO_LENGTH_SAMPLES 0x00000008
2316 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
2317 #define KSFILTER_FLAG_DENY_USERMODE_ACCESS 0x80000000
2321 #define KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING
2322 #define KSPIN_FLAG_CRITICAL_PROCESSING KSFILTER_FLAG_CRITICAL_PROCESSING
2323 #define KSPIN_FLAG_HYPERCRITICAL_PROCESSING KSFILTER_FLAG_HYPERCRITICAL_PROCESSING
2324 #define KSPIN_FLAG_ASYNCHRONOUS_PROCESSING 0x00000008
2325 #define KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING 0x00000010
2326 #define KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL 0x00000020
2327 #define KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING 0x00000040
2328 #define KSPIN_FLAG_ENFORCE_FIFO 0x00000080
2330 #define KSPIN_FLAG_GENERATE_MAPPINGS 0x00000100
2331 #define KSPIN_FLAG_DISTINCT_TRAILING_EDGE 0x00000200
2333 #define KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY 0x00010000
2334 #define KSPIN_FLAG_SPLITTER 0x00020000
2335 #define KSPIN_FLAG_USE_STANDARD_TRANSPORT 0x00040000
2336 #define KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT 0x00080000
2337 #define KSPIN_FLAG_FIXED_FORMAT 0x00100000
2338 #define KSPIN_FLAG_GENERATE_EOS_EVENTS 0x00200000
2339 #define KSPIN_FLAG_RENDERER (KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY|KSPIN_FLAG_GENERATE_EOS_EVENTS)
2340 #define KSPIN_FLAG_IMPLEMENT_CLOCK 0x00400000
2341 #define KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING 0x00800000
2342 #define KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE 0x01000000
2343 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
2344 #define KSPIN_FLAG_DENY_USERMODE_ACCESS 0x80000000
2349 const KSPIN_DESCRIPTOR_EX
* Descriptor
;
2353 KSPIN_COMMUNICATION Communication
;
2354 BOOLEAN ConnectionIsExternal
;
2355 KSPIN_INTERFACE ConnectionInterface
;
2356 KSPIN_MEDIUM ConnectionMedium
;
2357 KSPRIORITY ConnectionPriority
;
2358 PKSDATAFORMAT ConnectionFormat
;
2359 PKSMULTIPLE_ITEM AttributeList
;
2360 ULONG StreamHeaderSize
;
2361 KSPIN_DATAFLOW DataFlow
;
2362 KSSTATE DeviceState
;
2364 KSSTATE ClientState
;
2367 #define DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(Handler)\
2368 DEFINE_KSPROPERTY_ITEM(\
2369 KSPROPERTY_PIN_CINSTANCES,\
2372 sizeof(KSPIN_CINSTANCES),\
2373 NULL, NULL, 0, NULL, NULL, 0)
2375 #define DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(Handler)\
2376 DEFINE_KSPROPERTY_ITEM(\
2377 KSPROPERTY_PIN_CTYPES,\
2379 sizeof(KSPROPERTY),\
2381 NULL, NULL, 0, NULL, NULL, 0)
2383 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(Handler)\
2384 DEFINE_KSPROPERTY_ITEM(\
2385 KSPROPERTY_PIN_DATAFLOW,\
2388 sizeof(KSPIN_DATAFLOW),\
2389 NULL, NULL, 0, NULL, NULL, 0)
2391 #define DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(Handler)\
2392 DEFINE_KSPROPERTY_ITEM(\
2393 KSPROPERTY_PIN_DATARANGES,\
2397 NULL, NULL, 0, NULL, NULL, 0)
2399 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(Handler)\
2400 DEFINE_KSPROPERTY_ITEM(\
2401 KSPROPERTY_PIN_DATAINTERSECTION,\
2403 sizeof(KSP_PIN) + sizeof(KSMULTIPLE_ITEM),\
2405 NULL, NULL, 0, NULL, NULL, 0)
2407 #define DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(Handler)\
2408 DEFINE_KSPROPERTY_ITEM(\
2409 KSPROPERTY_PIN_INTERFACES,\
2413 NULL, NULL, 0, NULL, NULL, 0)
2415 #define DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(Handler)\
2416 DEFINE_KSPROPERTY_ITEM(\
2417 KSPROPERTY_PIN_MEDIUMS,\
2421 NULL, NULL, 0, NULL, NULL, 0)
2423 #define DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(Handler)\
2424 DEFINE_KSPROPERTY_ITEM(\
2425 KSPROPERTY_PIN_COMMUNICATION,\
2428 sizeof(KSPIN_COMMUNICATION),\
2429 NULL, NULL, 0, NULL, NULL, 0)
2431 #define DEFINE_KSPROPERTY_ITEM_PIN_GLOBALCINSTANCES(Handler)\
2432 DEFINE_KSPROPERTY_ITEM(\
2433 KSPROPERTY_PIN_GLOBALCINSTANCES,\
2436 sizeof(KSPIN_CINSTANCES),\
2437 NULL, NULL, 0, NULL, NULL, 0)
2439 #define DEFINE_KSPROPERTY_ITEM_PIN_NECESSARYINSTANCES(Handler)\
2440 DEFINE_KSPROPERTY_ITEM(\
2441 KSPROPERTY_PIN_NECESSARYINSTANCES,\
2445 NULL, NULL, 0, NULL, NULL, 0)
2447 #define DEFINE_KSPROPERTY_ITEM_PIN_PHYSICALCONNECTION(Handler)\
2448 DEFINE_KSPROPERTY_ITEM(\
2449 KSPROPERTY_PIN_PHYSICALCONNECTION,\
2453 NULL, NULL, 0, NULL, NULL, 0)
2455 #define DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(Handler)\
2456 DEFINE_KSPROPERTY_ITEM(\
2457 KSPROPERTY_PIN_CATEGORY,\
2461 NULL, NULL, 0, NULL, NULL, 0)
2463 #define DEFINE_KSPROPERTY_ITEM_PIN_NAME(Handler)\
2464 DEFINE_KSPROPERTY_ITEM(\
2465 KSPROPERTY_PIN_NAME,\
2469 NULL, NULL, 0, NULL, NULL, 0)
2471 #define DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(Handler)\
2472 DEFINE_KSPROPERTY_ITEM(\
2473 KSPROPERTY_PIN_CONSTRAINEDDATARANGES,\
2477 NULL, NULL, 0, NULL, NULL, 0)
2479 #define DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(Handler)\
2480 DEFINE_KSPROPERTY_ITEM(\
2481 KSPROPERTY_PIN_PROPOSEDATAFORMAT,\
2484 sizeof(KSDATAFORMAT),\
2485 (Handler), NULL, 0, NULL, NULL, 0)
2487 #define DEFINE_KSPROPERTY_PINSET(PinSet,\
2488 PropGeneral, PropInstances, PropIntersection)\
2489 DEFINE_KSPROPERTY_TABLE(PinSet) {\
2490 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
2491 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
2492 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
2493 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
2494 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
2495 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
2496 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
2497 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
2498 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
2499 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral)\
2502 #define DEFINE_KSPROPERTY_PINSETCONSTRAINED(PinSet,\
2503 PropGeneral, PropInstances, PropIntersection)\
2504 DEFINE_KSPROPERTY_TABLE(PinSet) {\
2505 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
2506 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
2507 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
2508 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
2509 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
2510 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
2511 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
2512 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
2513 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
2514 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral),\
2515 DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral)\
2528 #define DEFINE_KSPROPERTY_TABLE(tablename)\
2529 const KSPROPERTY_ITEM tablename[] =
2535 KSPIN_INTERFACE Interface
;
2536 KSPIN_MEDIUM Medium
;
2539 KSPRIORITY Priority
;
2540 } KSPIN_CONNECT
, *PKSPIN_CONNECT
;
2542 /* ===============================================================
2552 } KSTOPOLOGY_CONNECTION
, *PKSTOPOLOGY_CONNECTION
;
2556 ULONG CategoriesCount
;
2557 const GUID
* Categories
;
2558 ULONG TopologyNodesCount
;
2559 const GUID
* TopologyNodes
;
2560 ULONG TopologyConnectionsCount
;
2561 const KSTOPOLOGY_CONNECTION
* TopologyConnections
;
2562 const GUID
* TopologyNodesNames
;
2564 } KSTOPOLOGY
, *PKSTOPOLOGY
;
2567 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler)\
2568 DEFINE_KSPROPERTY_ITEM(\
2569 KSPROPERTY_TOPOLOGY_CATEGORIES,\
2571 sizeof(KSPROPERTY),\
2573 NULL, NULL, 0, NULL, NULL, 0)
2575 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler)\
2576 DEFINE_KSPROPERTY_ITEM(\
2577 KSPROPERTY_TOPOLOGY_NODES,\
2579 sizeof(KSPROPERTY),\
2581 NULL, NULL, 0, NULL, NULL, 0)
2583 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler)\
2584 DEFINE_KSPROPERTY_ITEM(\
2585 KSPROPERTY_TOPOLOGY_CONNECTIONS,\
2587 sizeof(KSPROPERTY),\
2589 NULL, NULL, 0, NULL, NULL, 0)
2591 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\
2592 DEFINE_KSPROPERTY_ITEM(\
2593 KSPROPERTY_TOPOLOGY_NAME,\
2597 NULL, NULL, 0, NULL, NULL, 0)
2599 #define DEFINE_KSPROPERTY_TOPOLOGYSET(TopologySet, Handler)\
2600 DEFINE_KSPROPERTY_TABLE(TopologySet) {\
2601 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler),\
2602 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler),\
2603 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler),\
2604 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\
2607 /* ===============================================================
2612 typedef void* UNKNOWN
;
2614 typedef PVOID (NTAPI
*PFNKSINITIALIZEALLOCATOR
)(
2615 IN PVOID InitialContext
,
2616 IN PKSALLOCATOR_FRAMING AllocatorFraming
,
2617 OUT PVOID
* Context
);
2619 #if defined(_NTDDK_)
2620 typedef NTSTATUS (NTAPI
*PFNKSALLOCATOR
)(
2622 IN ULONG BufferSize
,
2623 IN BOOLEAN InputOperation
);
2625 typedef NTSTATUS (NTAPI
*PFNKINTERSECTHANDLEREX
)(
2629 IN PKSDATARANGE DataRange
,
2630 IN PKSDATARANGE MatchingDataRange
,
2631 IN ULONG DataBufferSize
,
2632 OUT PVOID Data OPTIONAL
,
2633 OUT PULONG DataSize
);
2638 (NTAPI
*PFNALLOCATOR_ALLOCATEFRAME
)(
2639 IN PFILE_OBJECT FileObject
,
2645 (NTAPI
*PFNALLOCATOR_FREEFRAME
)(
2646 IN PFILE_OBJECT FileObject
,
2651 PFNALLOCATOR_ALLOCATEFRAME AllocateFrame
;
2652 PFNALLOCATOR_FREEFRAME FreeFrame
;
2653 } KSSTREAMALLOCATOR_FUNCTIONTABLE
, *PKSSTREAMALLOCATOR_FUNCTIONTABLE
;
2659 KSALLOCATOR_FRAMING Framing
;
2660 ULONG AllocatedFrames
;
2662 } KSSTREAMALLOCATOR_STATUS
, *PKSSTREAMALLOCATOR_STATUS
;
2666 KSALLOCATOR_FRAMING_EX Framing
;
2667 ULONG AllocatedFrames
;
2669 } KSSTREAMALLOCATOR_STATUS_EX
, *PKSSTREAMALLOCATOR_STATUS_EX
;
2674 ULONG TypeSpecificFlags
;
2675 KSTIME PresentationTime
;
2684 } KSSTREAM_HEADER
, *PKSSTREAM_HEADER
;
2686 #define KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT 0x00000001
2687 #define KSSTREAM_HEADER_OPTIONSF_PREROLL 0x00000002
2688 #define KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY 0x00000004
2689 #define KSSTREAM_HEADER_OPTIONSF_TYPECHANGED 0x00000008
2690 #define KSSTREAM_HEADER_OPTIONSF_TIMEVALID 0x00000010
2691 #define KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY 0x00000040
2692 #define KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE 0x00000080
2693 #define KSSTREAM_HEADER_OPTIONSF_DURATIONVALID 0x00000100
2694 #define KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM 0x00000200
2695 #define KSSTREAM_HEADER_OPTIONSF_BUFFEREDTRANSFER 0x00000400
2696 #define KSSTREAM_HEADER_OPTIONSF_VRAM_DATA_TRANSFER 0x00000800
2697 #define KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA 0x80000000
2699 /* ===============================================================
2702 #if defined(_NTDDK_)
2704 PHYSICAL_ADDRESS PhysicalAddress
;
2711 KSSTREAM_POINTER_STATE_UNLOCKED
= 0,
2712 KSSTREAM_POINTER_STATE_LOCKED
2713 } KSSTREAM_POINTER_STATE
;
2715 typedef struct _KSGATE KSGATE
, *PKSGATE
;
2716 typedef struct _KSPROCESSPIN_INDEXENTRY KSPROCESSPIN_INDEXENTRY
, *PKSPROCESSPIN_INDEXENTRY
;
2723 struct _KSSTREAM_POINTER_OFFSET
2725 #if defined(_NTDDK_)
2728 PKSMAPPING Mappings
;
2733 #if !defined(_WIN64)
2739 #if defined(_NTDDK_)
2740 struct _KSSTREAM_POINTER
2744 PKSSTREAM_HEADER StreamHeader
;
2745 PKSSTREAM_POINTER_OFFSET Offset
;
2746 KSSTREAM_POINTER_OFFSET OffsetIn
;
2747 KSSTREAM_POINTER_OFFSET OffsetOut
;
2750 struct _KSPROCESSPIN
2753 PKSSTREAM_POINTER StreamPointer
;
2754 PKSPROCESSPIN InPlaceCounterpart
;
2755 PKSPROCESSPIN DelegateBranch
;
2756 PKSPROCESSPIN CopySource
;
2758 ULONG BytesAvailable
;
2764 struct _KSPROCESSPIN_INDEXENTRY
2766 PKSPROCESSPIN
* Pins
;
2771 /* ===============================================================
2777 #if defined(_NTDDK_)
2779 typedef struct _KSFILTER_DISPATCH KSFILTER_DISPATCH
, *PKSFILTER_DISPATCH
;
2780 typedef struct _KSDEVICE KSDEVICE
, *PKSDEVICE
;
2781 typedef struct _KSFILTER KSFILTER
, *PKSFILTER
;
2782 typedef struct _KSNODE_DESCRIPTOR KSNODE_DESCRIPTOR
, *PKSNODE_DESCRIPTOR
;
2783 typedef struct _KSFILTER_DESCRIPTOR KSFILTER_DESCRIPTOR
, *PKSFILTER_DESCRIPTOR
;
2784 typedef struct _KSDEVICE_DESCRIPTOR KSDEVICE_DESCRIPTOR
, *PKSDEVICE_DESCRIPTOR
;
2786 typedef NTSTATUS (NTAPI
*PFNKSDEVICECREATE
)(
2787 IN PKSDEVICE Device
);
2789 typedef NTSTATUS (NTAPI
*PFNKSDEVICEPNPSTART
)(
2790 IN PKSDEVICE Device
,
2792 IN PCM_RESOURCE_LIST TranslatedResourceList OPTIONAL
,
2793 IN PCM_RESOURCE_LIST UntranslatedResourceList OPTIONAL
);
2795 typedef NTSTATUS (NTAPI
*PFNKSDEVICE
)(
2796 IN PKSDEVICE Device
);
2798 typedef NTSTATUS (NTAPI
*PFNKSDEVICEIRP
)(
2799 IN PKSDEVICE Device
,
2802 typedef VOID (NTAPI
*PFNKSDEVICEIRPVOID
)(
2803 IN PKSDEVICE Device
,
2806 typedef NTSTATUS (NTAPI
*PFNKSDEVICEQUERYCAPABILITIES
)(
2807 IN PKSDEVICE Device
,
2809 IN OUT PDEVICE_CAPABILITIES Capabilities
);
2811 typedef NTSTATUS (NTAPI
*PFNKSDEVICEQUERYPOWER
)(
2812 IN PKSDEVICE Device
,
2814 IN DEVICE_POWER_STATE DeviceTo
,
2815 IN DEVICE_POWER_STATE DeviceFrom
,
2816 IN SYSTEM_POWER_STATE SystemTo
,
2817 IN SYSTEM_POWER_STATE SystemFrom
,
2818 IN POWER_ACTION Action
);
2820 typedef VOID (NTAPI
*PFNKSDEVICESETPOWER
)(
2821 IN PKSDEVICE Device
,
2823 IN DEVICE_POWER_STATE To
,
2824 IN DEVICE_POWER_STATE From
);
2826 typedef struct _KSDEVICE_DISPATCH
{
2827 PFNKSDEVICECREATE Add
;
2828 PFNKSDEVICEPNPSTART Start
;
2829 PFNKSDEVICE PostStart
;
2830 PFNKSDEVICEIRP QueryStop
;
2831 PFNKSDEVICEIRPVOID CancelStop
;
2832 PFNKSDEVICEIRPVOID Stop
;
2833 PFNKSDEVICEIRP QueryRemove
;
2834 PFNKSDEVICEIRPVOID CancelRemove
;
2835 PFNKSDEVICEIRPVOID Remove
;
2836 PFNKSDEVICEQUERYCAPABILITIES QueryCapabilities
;
2837 PFNKSDEVICEIRPVOID SurpriseRemoval
;
2838 PFNKSDEVICEQUERYPOWER QueryPower
;
2839 PFNKSDEVICESETPOWER SetPower
;
2840 PFNKSDEVICEIRP QueryInterface
;
2841 }KSDEVICE_DISPATCH
, *PKSDEVICE_DISPATCH
;
2843 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
2844 #define KSDEVICE_DESCRIPTOR_VERSION_2 (0x110)
2845 #define MIN_DEV_VER_FOR_FLAGS (0x110)
2850 const KSDEVICE_DESCRIPTOR
* Descriptor
;
2853 PDEVICE_OBJECT FunctionalDeviceObject
;
2854 PDEVICE_OBJECT PhysicalDeviceObject
;
2855 PDEVICE_OBJECT NextDeviceObject
;
2857 SYSTEM_POWER_STATE SystemPowerState
;
2858 DEVICE_POWER_STATE DevicePowerState
;
2862 /* ===============================================================
2865 #if defined(_NTDDK_)
2868 const KSFILTER_DESCRIPTOR
* Descriptor
;
2875 (NTAPI
*PFNKSFILTERPOWER
)(
2876 IN PKSFILTER Filter
,
2877 IN DEVICE_POWER_STATE State
2880 typedef NTSTATUS (NTAPI
*PFNKSFILTERIRP
)(
2881 IN PKSFILTER Filter
,
2884 typedef NTSTATUS (NTAPI
*PFNKSFILTERPROCESS
)(
2885 IN PKSFILTER Filter
,
2886 IN PKSPROCESSPIN_INDEXENTRY ProcessPinsIndex
);
2888 typedef NTSTATUS (NTAPI
*PFNKSFILTERVOID
)(
2889 IN PKSFILTER Filter
);
2891 struct _KSFILTER_DISPATCH
2893 PFNKSFILTERIRP Create
;
2894 PFNKSFILTERIRP Close
;
2895 PFNKSFILTERPROCESS Process
;
2896 PFNKSFILTERVOID Reset
;
2899 struct _KSNODE_DESCRIPTOR
2901 const KSAUTOMATION_TABLE
* AutomationTable
;
2906 struct _KSFILTER_DESCRIPTOR
2908 const KSFILTER_DISPATCH
* Dispatch
;
2909 const KSAUTOMATION_TABLE
* AutomationTable
;
2912 const GUID
* ReferenceGuid
;
2913 ULONG PinDescriptorsCount
;
2914 ULONG PinDescriptorSize
;
2915 const KSPIN_DESCRIPTOR_EX
* PinDescriptors
;
2916 ULONG CategoriesCount
;
2917 const GUID
* Categories
;
2918 ULONG NodeDescriptorsCount
;
2919 ULONG NodeDescriptorSize
;
2920 const KSNODE_DESCRIPTOR
* NodeDescriptors
;
2921 ULONG ConnectionsCount
;
2922 const KSTOPOLOGY_CONNECTION
* Connections
;
2923 const KSCOMPONENTID
* ComponentId
;
2926 #define KSFILTER_DESCRIPTOR_VERSION ((ULONG)-1)
2928 struct _KSDEVICE_DESCRIPTOR
2930 const KSDEVICE_DISPATCH
* Dispatch
;
2931 ULONG FilterDescriptorsCount
;
2932 const KSFILTER_DESCRIPTOR
*const* FilterDescriptors
;
2937 struct _KSFILTERFACTORY
{
2938 const KSFILTER_DESCRIPTOR
* FilterDescriptor
;
2943 #define DEFINE_KSFILTER_DESCRIPTOR(descriptor)\
2944 const KSFILTER_DESCRIPTOR descriptor =
2946 #define DEFINE_KSFILTER_PIN_DESCRIPTORS(table)\
2947 SIZEOF_ARRAY(table),\
2951 #define DEFINE_KSFILTER_CATEGORIES(table)\
2952 SIZEOF_ARRAY(table),\
2955 #define DEFINE_KSFILTER_CATEGORY(category)\
2959 #define DEFINE_KSFILTER_CATEGORIES_NULL\
2963 #define DEFINE_KSFILTER_NODE_DESCRIPTORS(table)\
2964 SIZEOF_ARRAY(table),\
2968 #define DEFINE_KSFILTER_NODE_DESCRIPTORS_NULL\
2970 sizeof(KSNODE_DESCRIPTOR),\
2973 #define DEFINE_KSFILTER_CONNECTIONS(table)\
2974 SIZEOF_ARRAY(table),\
2977 #define DEFINE_KSFILTER_DEFAULT_CONNECTIONS\
2982 /* ===============================================================
2983 Minidriver Callbacks
2985 #if defined(_NTDDK_)
2986 typedef NTSTATUS (NTAPI
*KStrMethodHandler
)(
2988 IN PKSIDENTIFIER Request
,
2991 typedef NTSTATUS (NTAPI
*KStrSupportHandler
)(
2993 IN PKSIDENTIFIER Request
,
2997 /* ===============================================================
3000 #if defined(_NTDDK_)
3001 KSDDKAPI NTSTATUS NTAPI
3003 IN HANDLE ConnectionHandle
,
3004 IN PKSALLOCATOR_FRAMING AllocatorFraming
,
3005 OUT PHANDLE AllocatorHandle
);
3007 KSDDKAPI NTSTATUS NTAPI
3008 KsCreateDefaultAllocator(
3011 KSDDKAPI NTSTATUS NTAPI
3012 KsValidateAllocatorCreateRequest(
3014 OUT PKSALLOCATOR_FRAMING
* AllocatorFraming
);
3016 KSDDKAPI NTSTATUS NTAPI
3017 KsCreateDefaultAllocatorEx(
3019 IN PVOID InitializeContext OPTIONAL
,
3020 IN PFNKSDEFAULTALLOCATE DefaultAllocate OPTIONAL
,
3021 IN PFNKSDEFAULTFREE DefaultFree OPTIONAL
,
3022 IN PFNKSINITIALIZEALLOCATOR InitializeAllocator OPTIONAL
,
3023 IN PFNKSDELETEALLOCATOR DeleteAllocator OPTIONAL
);
3025 KSDDKAPI NTSTATUS NTAPI
3026 KsValidateAllocatorFramingEx(
3027 IN PKSALLOCATOR_FRAMING_EX Framing
,
3028 IN ULONG BufferSize
,
3029 IN
const KSALLOCATOR_FRAMING_EX
* PinFraming
);
3032 /* ===============================================================
3035 #if defined(_NTDDK_)
3036 typedef BOOLEAN (NTAPI
*PFNKSSETTIMER
)(
3039 IN LARGE_INTEGER DueTime
,
3042 typedef BOOLEAN (NTAPI
*PFNKSCANCELTIMER
)(
3046 typedef LONGLONG (FASTCALL
*PFNKSCORRELATEDTIME
)(
3048 OUT PLONGLONG SystemTime
);
3050 KSDDKAPI NTSTATUS NTAPI
3052 IN HANDLE ConnectionHandle
,
3053 IN PKSCLOCK_CREATE ClockCreate
,
3054 OUT PHANDLE ClockHandle
);
3056 KSDDKAPI NTSTATUS NTAPI
3057 KsCreateDefaultClock(
3059 IN PKSDEFAULTCLOCK DefaultClock
);
3061 KSDDKAPI NTSTATUS NTAPI
3062 KsAllocateDefaultClock(
3063 OUT PKSDEFAULTCLOCK
* DefaultClock
);
3065 KSDDKAPI NTSTATUS NTAPI
3066 KsAllocateDefaultClockEx(
3067 OUT PKSDEFAULTCLOCK
* DefaultClock
,
3068 IN PVOID Context OPTIONAL
,
3069 IN PFNKSSETTIMER SetTimer OPTIONAL
,
3070 IN PFNKSCANCELTIMER CancelTimer OPTIONAL
,
3071 IN PFNKSCORRELATEDTIME CorrelatedTime OPTIONAL
,
3072 IN
const KSRESOLUTION
* Resolution OPTIONAL
,
3077 IN PKSDEFAULTCLOCK DefaultClock
);
3079 KSDDKAPI NTSTATUS NTAPI
3080 KsValidateClockCreateRequest(
3082 OUT PKSCLOCK_CREATE
* ClockCreate
);
3084 KSDDKAPI KSSTATE NTAPI
3085 KsGetDefaultClockState(
3086 IN PKSDEFAULTCLOCK DefaultClock
);
3089 KsSetDefaultClockState(
3090 IN PKSDEFAULTCLOCK DefaultClock
,
3093 KSDDKAPI LONGLONG NTAPI
3094 KsGetDefaultClockTime(
3095 IN PKSDEFAULTCLOCK DefaultClock
);
3098 KsSetDefaultClockTime(
3099 IN PKSDEFAULTCLOCK DefaultClock
,
3103 /* ===============================================================
3107 /* Method sets - TODO: Make into macros! */
3108 #if defined(_NTDDK_)
3111 KSMETHOD_SET_IRP_STORAGE(
3115 KSMETHOD_ITEM_IRP_STORAGE(
3119 KSMETHOD_TYPE_IRP_STORAGE(
3123 KSDDKAPI NTSTATUS NTAPI
3126 IN ULONG MethodSetsCount
,
3127 IN PKSMETHOD_SET MethodSet
);
3129 KSDDKAPI NTSTATUS NTAPI
3130 KsMethodHandlerWithAllocator(
3132 IN ULONG MethodSetsCount
,
3133 IN PKSMETHOD_SET MethodSet
,
3134 IN PFNKSALLOCATOR Allocator OPTIONAL
,
3135 IN ULONG MethodItemSize OPTIONAL
);
3137 KSDDKAPI BOOLEAN NTAPI
3138 KsFastMethodHandler(
3139 IN PFILE_OBJECT FileObject
,
3140 IN PKSMETHOD UNALIGNED Method
,
3141 IN ULONG MethodLength
,
3142 IN OUT PVOID UNALIGNED Data
,
3143 IN ULONG DataLength
,
3144 OUT PIO_STATUS_BLOCK IoStatus
,
3145 IN ULONG MethodSetsCount
,
3146 IN
const KSMETHOD_SET
* MethodSet
);
3149 /* ===============================================================
3152 #if defined(_NTDDK_)
3153 KSDDKAPI NTSTATUS NTAPI
3156 IN ULONG PropertySetsCount
,
3157 IN
const KSPROPERTY_SET
* PropertySet
);
3159 KSDDKAPI NTSTATUS NTAPI
3160 KsPropertyHandlerWithAllocator(
3162 IN ULONG PropertySetsCount
,
3163 IN PKSPROPERTY_SET PropertySet
,
3164 IN PFNKSALLOCATOR Allocator OPTIONAL
,
3165 IN ULONG PropertyItemSize OPTIONAL
);
3167 KSDDKAPI NTSTATUS NTAPI
3168 KsUnserializeObjectPropertiesFromRegistry(
3169 IN PFILE_OBJECT FileObject
,
3170 IN HANDLE ParentKey OPTIONAL
,
3171 IN PUNICODE_STRING RegistryPath OPTIONAL
);
3173 KSDDKAPI BOOLEAN NTAPI
3174 KsFastPropertyHandler(
3175 IN PFILE_OBJECT FileObject
,
3176 IN PKSPROPERTY UNALIGNED Property
,
3177 IN ULONG PropertyLength
,
3178 IN OUT PVOID UNALIGNED Data
,
3179 IN ULONG DataLength
,
3180 OUT PIO_STATUS_BLOCK IoStatus
,
3181 IN ULONG PropertySetsCount
,
3182 IN
const KSPROPERTY_SET
* PropertySet
);
3185 /* ===============================================================
3189 #if defined(_NTDDK_)
3191 #define KSPROBE_STREAMREAD 0x00000000
3192 #define KSPROBE_STREAMWRITE 0x00000001
3193 #define KSPROBE_ALLOCATEMDL 0x00000010
3194 #define KSPROBE_PROBEANDLOCK 0x00000020
3195 #define KSPROBE_SYSTEMADDRESS 0x00000040
3196 #define KSPROBE_MODIFY 0x00000200
3197 #define KSPROBE_STREAMWRITEMODIFY (KSPROBE_MODIFY | KSPROBE_STREAMWRITE)
3198 #define KSPROBE_ALLOWFORMATCHANGE 0x00000080
3200 #define KSSTREAM_READ KSPROBE_STREAMREAD
3201 #define KSSTREAM_WRITE KSPROBE_STREAMWRITE
3202 #define KSSTREAM_PAGED_DATA 0x00000000
3203 #define KSSTREAM_NONPAGED_DATA 0x00000100
3204 #define KSSTREAM_SYNCHRONOUS 0x00001000
3205 #define KSSTREAM_FAILUREEXCEPTION 0x00002000
3209 (NTAPI
*PFNKSGENERATEEVENTCALLBACK
)(
3211 IN PKSEVENT_ENTRY EventEntry
3214 KSDDKAPI NTSTATUS NTAPI
3216 IN PKSEVENT_ENTRY EntryEvent
);
3221 IN
const GUID
* EventSet OPTIONAL
,
3224 IN PVOID Data OPTIONAL
,
3225 IN PFNKSGENERATEEVENTCALLBACK CallBack OPTIONAL
,
3226 IN PVOID CallBackContext OPTIONAL
3230 KSDDKAPI NTSTATUS NTAPI
3231 KsEnableEventWithAllocator(
3233 IN ULONG EventSetsCount
,
3234 IN PKSEVENT_SET EventSet
,
3235 IN OUT PLIST_ENTRY EventsList OPTIONAL
,
3236 IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL
,
3237 IN PVOID EventsLock OPTIONAL
,
3238 IN PFNKSALLOCATOR Allocator OPTIONAL
,
3239 IN ULONG EventItemSize OPTIONAL
);
3241 KSDDKAPI NTSTATUS NTAPI
3242 KsGenerateDataEvent(
3243 IN PKSEVENT_ENTRY EventEntry
,
3247 KSDDKAPI NTSTATUS NTAPI
3250 IN ULONG EventSetsCount
,
3251 IN KSEVENT_SET
* EventSet
,
3252 IN OUT PLIST_ENTRY EventsList OPTIONAL
,
3253 IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL
,
3254 IN PVOID EventsLock OPTIONAL
);
3258 IN PKSEVENT_ENTRY EventEntry
);
3260 KSDDKAPI NTSTATUS NTAPI
3263 IN OUT PLIST_ENTRY EventsList
,
3264 IN KSEVENTS_LOCKTYPE EventsFlags
,
3265 IN PVOID EventsLock
);
3269 IN PFILE_OBJECT FileObject
,
3270 IN OUT PLIST_ENTRY EventsList
,
3271 IN KSEVENTS_LOCKTYPE EVentsFlags
,
3272 IN PVOID EventsLock
);
3274 /* ===============================================================
3278 KSDDKAPI NTSTATUS NTAPI
3279 KsValidateTopologyNodeCreateRequest(
3281 IN PKSTOPOLOGY Topology
,
3282 OUT PKSNODE_CREATE
* NodeCreate
);
3284 KSDDKAPI NTSTATUS NTAPI
3285 KsCreateTopologyNode(
3286 IN HANDLE ParentHandle
,
3287 IN PKSNODE_CREATE NodeCreate
,
3288 IN ACCESS_MASK DesiredAccess
,
3289 OUT PHANDLE NodeHandle
);
3291 KSDDKAPI NTSTATUS NTAPI
3292 KsTopologyPropertyHandler(
3294 IN PKSPROPERTY Property
,
3296 IN
const KSTOPOLOGY
* Topology
);
3300 /* ===============================================================
3301 Connectivity Functions
3304 KSDDKAPI NTSTATUS NTAPI
3306 IN HANDLE FilterHandle
,
3307 IN PKSPIN_CONNECT Connect
,
3308 IN ACCESS_MASK DesiredAccess
,
3309 OUT PHANDLE ConnectionHandle
);
3311 KSDDKAPI NTSTATUS NTAPI
3312 KsValidateConnectRequest(
3314 IN ULONG DescriptorsCount
,
3315 IN KSPIN_DESCRIPTOR
* Descriptor
,
3316 OUT PKSPIN_CONNECT
* Connect
);
3318 KSDDKAPI NTSTATUS NTAPI
3319 KsPinPropertyHandler(
3321 IN PKSPROPERTY Property
,
3323 IN ULONG DescriptorsCount
,
3324 IN
const KSPIN_DESCRIPTOR
* Descriptor
);
3326 KSDDKAPI NTSTATUS NTAPI
3327 KsPinDataIntersection(
3331 IN ULONG DescriptorsCount
,
3332 IN
const KSPIN_DESCRIPTOR
* Descriptor
,
3333 IN PFNKSINTERSECTHANDLER IntersectHandler
);
3335 KSDDKAPI NTSTATUS NTAPI
3336 KsPinDataIntersectionEx(
3340 IN ULONG DescriptorsCount
,
3341 IN
const KSPIN_DESCRIPTOR
* Descriptor
,
3342 IN ULONG DescriptorSize
,
3343 IN PFNKSINTERSECTHANDLEREX IntersectHandler OPTIONAL
,
3344 IN PVOID HandlerContext OPTIONAL
);
3346 KSDDKAPI PKSFILTER NTAPI
3347 KsPinGetParentFilter(
3351 KSDDKAPI PKSPIN NTAPI
3352 KsPinGetNextSiblingPin(
3357 /* Does this belong here? */
3359 KSDDKAPI NTSTATUS NTAPI
3360 KsHandleSizedListQuery(
3362 IN ULONG DataItemsCount
,
3363 IN ULONG DataItemSize
,
3364 IN
const VOID
* DataItems
);
3367 /* ===============================================================
3368 IRP Helper Functions
3371 typedef NTSTATUS (NTAPI
*PFNKSIRPLISTCALLBACK
)(
3375 KSDDKAPI NTSTATUS NTAPI
3376 KsAcquireResetValue(
3378 OUT KSRESET
* ResetValue
);
3381 KsAddIrpToCancelableQueue(
3382 IN OUT PLIST_ENTRY QueueHead
,
3383 IN PKSPIN_LOCK SpinLock
,
3385 IN KSLIST_ENTRY_LOCATION ListLocation
,
3386 IN PDRIVER_CANCEL DriverCancel OPTIONAL
);
3388 KSDDKAPI NTSTATUS NTAPI
3389 KsAddObjectCreateItemToDeviceHeader(
3390 IN KSDEVICE_HEADER Header
,
3391 IN PDRIVER_DISPATCH Create
,
3393 IN PWCHAR ObjectClass
,
3394 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
3396 KSDDKAPI NTSTATUS NTAPI
3397 KsAddObjectCreateItemToObjectHeader(
3398 IN KSOBJECT_HEADER Header
,
3399 IN PDRIVER_DISPATCH Create
,
3401 IN PWCHAR ObjectClass
,
3402 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
3404 KSDDKAPI NTSTATUS NTAPI
3405 KsAllocateDeviceHeader(
3406 OUT KSDEVICE_HEADER
* Header
,
3407 IN ULONG ItemsCount
,
3408 IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL
);
3410 KSDDKAPI NTSTATUS NTAPI
3411 KsAllocateExtraData(
3414 OUT PVOID
* ExtraBuffer
);
3416 KSDDKAPI NTSTATUS NTAPI
3417 KsAllocateObjectCreateItem(
3418 IN KSDEVICE_HEADER Header
,
3419 IN PKSOBJECT_CREATE_ITEM CreateItem
,
3420 IN BOOLEAN AllocateEntry
,
3421 IN PFNKSITEMFREECALLBACK ItemFreeCallback OPTIONAL
);
3423 KSDDKAPI NTSTATUS NTAPI
3424 KsAllocateObjectHeader(
3425 OUT KSOBJECT_HEADER
*Header
,
3426 IN ULONG ItemsCount
,
3427 IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL
,
3429 IN KSDISPATCH_TABLE
* Table
);
3433 IN OUT PLIST_ENTRY QueueHead
,
3434 IN PKSPIN_LOCK SpinLock
);
3438 IN PDEVICE_OBJECT DeviceObject
,
3441 KSDDKAPI NTSTATUS NTAPI
3442 KsDefaultDeviceIoCompletion(
3443 IN PDEVICE_OBJECT DeviceObject
,
3447 KSDDKAPI ULONG NTAPI
3448 KsDecrementCountedWorker(
3449 IN PKSWORKER Worker);
3452 KSDDKAPI BOOLEAN NTAPI
3453 KsDispatchFastIoDeviceControlFailure(
3454 IN PFILE_OBJECT FileObject
,
3456 IN PVOID InputBuffer OPTIONAL
,
3457 IN ULONG InputBufferLength
,
3458 OUT PVOID OutputBuffer OPTIONAL
,
3459 IN ULONG OutputBufferLength
,
3460 IN ULONG IoControlCode
,
3461 OUT PIO_STATUS_BLOCK IoStatus
,
3462 IN PDEVICE_OBJECT DeviceObject
); /* always return false */
3464 KSDDKAPI BOOLEAN NTAPI
3465 KsDispatchFastReadFailure(
3466 IN PFILE_OBJECT FileObject
,
3467 IN PLARGE_INTEGER FileOffset
,
3472 OUT PIO_STATUS_BLOCK IoStatus
,
3473 IN PDEVICE_OBJECT DeviceObject
); /* always return false */
3475 /* This function does the same as the above */
3476 #define KsDispatchFastWriteFailure KsDispatchFastReadFailure
3478 KSDDKAPI NTSTATUS NTAPI
3479 KsDispatchInvalidDeviceRequest(
3480 IN PDEVICE_OBJECT DeviceObject
,
3483 KSDDKAPI NTSTATUS NTAPI
3485 IN PDEVICE_OBJECT DeviceObject
,
3488 KSDDKAPI NTSTATUS NTAPI
3489 KsDispatchSpecificMethod(
3491 IN PFNKSHANDLER Handler
);
3493 KSDDKAPI NTSTATUS NTAPI
3494 KsDispatchSpecificProperty(
3496 IN PFNKSHANDLER Handler
);
3498 KSDDKAPI NTSTATUS NTAPI
3499 KsForwardAndCatchIrp(
3500 IN PDEVICE_OBJECT DeviceObject
,
3502 IN PFILE_OBJECT FileObject
,
3503 IN KSSTACK_USE StackUse
);
3505 KSDDKAPI NTSTATUS NTAPI
3508 IN PFILE_OBJECT FileObject
,
3509 IN BOOLEAN ReuseStackLocation
);
3513 IN KSDEVICE_HEADER Header
);
3519 KSDDKAPI NTSTATUS NTAPI
3520 KsGetChildCreateParameter(
3522 OUT PVOID
* CreateParameter
);
3524 KSDDKAPI NTSTATUS NTAPI
3525 KsMoveIrpsOnCancelableQueue(
3526 IN OUT PLIST_ENTRY SourceList
,
3527 IN PKSPIN_LOCK SourceLock
,
3528 IN OUT PLIST_ENTRY DestinationList
,
3529 IN PKSPIN_LOCK DestinationLock OPTIONAL
,
3530 IN KSLIST_ENTRY_LOCATION ListLocation
,
3531 IN PFNKSIRPLISTCALLBACK ListCallback
,
3534 KSDDKAPI NTSTATUS NTAPI
3537 IN ULONG ProbeFlags
,
3538 IN ULONG HeaderSize
);
3540 KSDDKAPI NTSTATUS NTAPI
3541 KsQueryInformationFile(
3542 IN PFILE_OBJECT FileObject
,
3543 OUT PVOID FileInformation
,
3545 IN FILE_INFORMATION_CLASS FileInformationClass
);
3547 KSDDKAPI ACCESS_MASK NTAPI
3548 KsQueryObjectAccessMask(
3549 IN KSOBJECT_HEADER Header
);
3551 KSDDKAPI PKSOBJECT_CREATE_ITEM NTAPI
3552 KsQueryObjectCreateItem(
3553 IN KSOBJECT_HEADER Header
);
3555 KSDDKAPI NTSTATUS NTAPI
3557 IN PFILE_OBJECT FileObject
,
3558 IN PKEVENT Event OPTIONAL
,
3559 IN PVOID PortContext OPTIONAL
,
3560 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3563 IN ULONG Key OPTIONAL
,
3564 IN KPROCESSOR_MODE RequestorMode
);
3567 KsReleaseIrpOnCancelableQueue(
3569 IN PDRIVER_CANCEL DriverCancel OPTIONAL
);
3572 KsRemoveIrpFromCancelableQueue(
3573 IN OUT PLIST_ENTRY QueueHead
,
3574 IN PKSPIN_LOCK SpinLock
,
3575 IN KSLIST_ENTRY_LOCATION ListLocation
,
3576 IN KSIRP_REMOVAL_OPERATION RemovalOperation
);
3579 KsRemoveSpecificIrpFromCancelableQueue(
3582 KSDDKAPI NTSTATUS NTAPI
3583 KsSetInformationFile(
3584 IN PFILE_OBJECT FileObject
,
3585 IN PVOID FileInformation
,
3587 IN FILE_INFORMATION_CLASS FileInformationClass
);
3589 KSDDKAPI NTSTATUS NTAPI
3590 KsSetMajorFunctionHandler(
3591 IN PDRIVER_OBJECT DriverObject
,
3592 IN ULONG MajorFunction
);
3594 KSDDKAPI NTSTATUS NTAPI
3596 IN PFILE_OBJECT FileObject
,
3597 IN PKEVENT Event OPTIONAL
,
3598 IN PVOID PortContext OPTIONAL
,
3599 IN PIO_COMPLETION_ROUTINE CompletionRoutine OPTIONAL
,
3600 IN PVOID CompletionContext OPTIONAL
,
3601 IN KSCOMPLETION_INVOCATION CompletionInvocationFlags OPTIONAL
,
3602 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3603 IN OUT PVOID StreamHeaders
,
3606 IN KPROCESSOR_MODE RequestorMode
);
3608 KSDDKAPI NTSTATUS NTAPI
3610 IN PFILE_OBJECT FileObject
,
3611 IN PKEVENT Event OPTIONAL
,
3612 IN PVOID PortContext OPTIONAL
,
3613 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3616 IN ULONG Key OPTIONAL
,
3617 IN KPROCESSOR_MODE RequestorMode
);
3620 KSDDKAPI NTSTATUS NTAPI
3621 KsDefaultForwardIrp(
3622 IN PDEVICE_OBJECT DeviceObject
,
3625 /* ===============================================================
3626 Worker Management Functions
3629 KSDDKAPI NTSTATUS NTAPI
3631 IN WORK_QUEUE_TYPE WorkQueueType
,
3632 OUT PKSWORKER
* Worker
);
3636 IN PKSWORKER Worker
);
3638 KSDDKAPI NTSTATUS NTAPI
3639 KsRegisterCountedWorker(
3640 IN WORK_QUEUE_TYPE WorkQueueType
,
3641 IN PWORK_QUEUE_ITEM CountedWorkItem
,
3642 OUT PKSWORKER
* Worker
);
3644 KSDDKAPI ULONG NTAPI
3645 KsDecrementCountedWorker(
3646 IN PKSWORKER Worker
);
3648 KSDDKAPI ULONG NTAPI
3649 KsIncrementCountedWorker(
3650 IN PKSWORKER Worker
);
3652 KSDDKAPI NTSTATUS NTAPI
3654 IN PKSWORKER Worker
,
3655 IN PWORK_QUEUE_ITEM WorkItem
);
3658 /* ===============================================================
3662 KSDDKAPI NTSTATUS NTAPI
3665 IN POOL_TYPE PoolType
,
3666 IN ULONG_PTR ResourceName
,
3667 IN ULONG ResourceType
,
3668 OUT PVOID
* Resource
,
3669 OUT PULONG ResourceSize
);
3672 KSDDKAPI NTSTATUS NTAPI
3673 KsGetImageNameAndResourceId(
3675 OUT PUNICODE_STRING ImageName,
3676 OUT PULONG_PTR ResourceId,
3677 OUT PULONG ValueType);
3679 KSDDKAPI NTSTATUS NTAPI
3681 IN PDEVICE_OBJECT PhysicalDeviceObject,
3682 IN PUNICODE_STRING ModuleName,
3683 OUT PUNICODE_STRING ImageName,
3684 OUT PULONG_PTR ResourceId,
3685 OUT PULONG ValueType);
3689 /* ===============================================================
3690 Misc. Helper Functions
3693 KSDDKAPI PVOID NTAPI
3698 KSDDKAPI NTSTATUS NTAPI
3700 IN PUNICODE_STRING SymbolicLink
,
3701 IN PKSPIN_MEDIUM Medium
,
3702 IN ULONG PinDirection
);
3704 KSDDKAPI NTSTATUS NTAPI
3705 KsDefaultDispatchPnp(
3706 IN PDEVICE_OBJECT DeviceObject
,
3710 KsSetDevicePnpAndBaseObject(
3711 IN KSDEVICE_HEADER Header
,
3712 IN PDEVICE_OBJECT PnpDeviceObject
,
3713 IN PDEVICE_OBJECT BaseDevice
);
3715 KSDDKAPI NTSTATUS NTAPI
3716 KsDefaultDispatchPower(
3717 IN PDEVICE_OBJECT DeviceObject
,
3722 IN KSOBJECT_HEADER Header
,
3723 IN PFNKSCONTEXT_DISPATCH PowerDispatch OPTIONAL
,
3724 IN PVOID PowerContext OPTIONAL
);
3726 KSDDKAPI NTSTATUS NTAPI
3727 KsReferenceBusObject(
3728 IN KSDEVICE_HEADER Header
);
3731 KsDereferenceBusObject(
3732 IN KSDEVICE_HEADER Header
);
3734 KSDDKAPI NTSTATUS NTAPI
3735 KsFreeObjectCreateItem(
3736 IN KSDEVICE_HEADER Header
,
3737 IN PUNICODE_STRING CreateItem
);
3739 KSDDKAPI NTSTATUS NTAPI
3740 KsFreeObjectCreateItemsByContext(
3741 IN KSDEVICE_HEADER Header
,
3746 IN PDRIVER_OBJECT DriverObject
);
3748 KSDDKAPI PDEVICE_OBJECT NTAPI
3749 KsQueryDevicePnpObject(
3750 IN KSDEVICE_HEADER Header
);
3753 KsRecalculateStackDepth(
3754 IN KSDEVICE_HEADER Header
,
3755 IN BOOLEAN ReuseStackLocation
);
3758 KsSetTargetDeviceObject(
3759 IN KSOBJECT_HEADER Header
,
3760 IN PDEVICE_OBJECT TargetDevice OPTIONAL
);
3764 IN KSOBJECT_HEADER Header
,
3765 IN KSTARGET_STATE TargetState
);
3767 KSDDKAPI NTSTATUS NTAPI
3768 KsSynchronousIoControlDevice(
3769 IN PFILE_OBJECT FileObject
,
3770 IN KPROCESSOR_MODE RequestorMode
,
3774 OUT PVOID OutBuffer
,
3776 OUT PULONG BytesReturned
);
3781 KsFilterGetFirstChildPin(
3782 IN PKSFILTER Filter
,
3789 KsPinGetConnectedPinFileObject(
3799 IN HANDLE FilterHandle
,
3800 IN PKSPIN_CONNECT Connect
,
3801 IN ACCESS_MASK DesiredAccess
,
3802 OUT PHANDLE ConnectionHandle
3808 /* ===============================================================
3809 AVStream Functions (XP / DirectX 8)
3811 http://www.osronline.com/ddkx/stream/avstream_5q9f.htm
3814 #if defined(_NTDDK_)
3819 KsMergeAutomationTables(
3820 OUT PKSAUTOMATION_TABLE
* AutomationTableAB
,
3821 IN PKSAUTOMATION_TABLE AutomationTableA OPTIONAL
,
3822 IN PKSAUTOMATION_TABLE AutomationTableB OPTIONAL
,
3823 IN KSOBJECT_BAG Bag OPTIONAL
3830 IN PDRIVER_OBJECT DriverObject
,
3831 IN PUNICODE_STRING RegistryPath
,
3832 IN
const KSDEVICE_DESCRIPTOR
*Descriptor OPTIONAL
);
3834 typedef struct _KSFILTERFACTORY KSFILTERFACTORY
, *PKSFILTERFACTORY
; //FIXME
3841 KsInitializeDevice (
3842 IN PDEVICE_OBJECT FunctionalDeviceObject
,
3843 IN PDEVICE_OBJECT PhysicalDeviceObject
,
3844 IN PDEVICE_OBJECT NextDeviceObject
,
3845 IN
const KSDEVICE_DESCRIPTOR
* Descriptor OPTIONAL
);
3848 typedef void (NTAPI
*PFNKSFILTERFACTORYPOWER
)(
3849 IN PKSFILTERFACTORY FilterFactory
,
3850 IN DEVICE_POWER_STATE State
);
3856 IN KSOBJECT_BAG ObjectBag
,
3857 IN OUT PVOID
* PointerToPointerToItem
,
3872 IN PKSDEVICE Device
);
3878 IN PDRIVER_OBJECT DriverObject
,
3879 IN PDEVICE_OBJECT PhysicalDeviceObject
);
3886 IN PKSEVENT_ENTRY EventEntry
);
3891 KsAddItemToObjectBag(
3892 IN KSOBJECT_BAG ObjectBag
,
3894 IN PFNKSFREE Free OPTIONAL
);
3899 KsRemoveItemFromObjectBag(