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)
317 /* ===============================================================
323 KSINTERFACE_FILEIO_STREAMING
324 } KSINTERFACE_FILEIO
;
326 #define KSMEDIUM_TYPE_ANYINSTANCE 0
328 #define STATIC_KSMEDIUMSETID_Standard \
329 0x4747B320L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
330 DEFINE_GUIDSTRUCT("4747B320-62CE-11CF-A5D6-28DB04C10000", KSMEDIUMSETID_Standard
);
331 #define KSMEDIUMSETID_Standard DEFINE_GUIDNAMED(KSMEDIUMSETID_Standard)
334 /* ===============================================================
335 Clock Properties/Methods/Events
338 #define KSPROPSETID_Clock \
339 0xDF12A4C0L, 0xAC17, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
343 KSPROPERTY_CLOCK_TIME
,
344 KSPROPERTY_CLOCK_PHYSICALTIME
,
345 KSPROPERTY_CORRELATEDTIME
,
346 KSPROPERTY_CORRELATEDPHYSICALTIME
,
347 KSPROPERTY_CLOCK_RESOLUTION
,
348 KSPROPERTY_CLOCK_STATE
,
349 KSPROPERTY_CLOCK_FUNCTIONTABLE
352 #define KSEVENTSETID_Clock \
353 0x364D8E20L, 0x62C7, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
357 KSEVENT_CLOCK_INTERVAL_MARK
,
358 KSEVENT_CLOCK_POSITION_MARK
359 } KSEVENT_CLOCK_POSITION
;
362 /* ===============================================================
363 Connection Properties/Methods/Events
366 #define STATIC_KSPROPSETID_Connection \
367 0x1D58C920L, 0xAC9B, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
368 DEFINE_GUIDSTRUCT("1D58C920-AC9B-11CF-A5D6-28DB04C10000", KSPROPSETID_Connection
);
369 #define KSPROPSETID_Connection DEFINE_GUIDNAMED(KSPROPSETID_Connection)
374 KSPROPERTY_CONNECTION_STATE
,
375 KSPROPERTY_CONNECTION_PRIORITY
,
376 KSPROPERTY_CONNECTION_DATAFORMAT
,
377 KSPROPERTY_CONNECTION_ALLOCATORFRAMING
,
378 KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT
,
379 KSPROPERTY_CONNECTION_ACQUIREORDERING
,
380 KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX
,
381 KSPROPERTY_CONNECTION_STARTAT
382 } KSPROPERTY_CONNECTION
;
384 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_STATE(GetHandler, SetHandler)\
385 DEFINE_KSPROPERTY_ITEM(\
386 KSPROPERTY_CONNECTION_STATE,\
391 NULL, 0, NULL, NULL, 0)
393 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_PRIORITY(GetHandler, SetHandler)\
394 DEFINE_KSPROPERTY_ITEM(\
395 KSPROPERTY_CONNECTION_PRIORITY,\
400 NULL, 0, NULL, NULL, 0)
402 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_DATAFORMAT(GetHandler, SetHandler)\
403 DEFINE_KSPROPERTY_ITEM(\
404 KSPROPERTY_CONNECTION_DATAFORMAT,\
409 NULL, 0, NULL, NULL, 0)
411 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING(Handler)\
412 DEFINE_KSPROPERTY_ITEM(\
413 KSPROPERTY_CONNECTION_ALLOCATORFRAMING,\
416 sizeof(KSALLOCATOR_FRAMING),\
417 NULL, NULL, 0, NULL, NULL, 0)
419 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING_EX(Handler)\
420 DEFINE_KSPROPERTY_ITEM(\
421 KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,\
425 NULL, NULL, 0, NULL, NULL, 0)
427 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_PROPOSEDATAFORMAT(Handler)\
428 DEFINE_KSPROPERTY_ITEM(\
429 KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT,\
432 sizeof(KSDATAFORMAT),\
434 NULL, 0, NULL, NULL, 0)
436 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ACQUIREORDERING(Handler)\
437 DEFINE_KSPROPERTY_ITEM(\
438 KSPROPERTY_CONNECTION_ACQUIREORDERING,\
442 NULL, NULL, 0, NULL, NULL, 0)
444 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_STARTAT(Handler)\
445 DEFINE_KSPROPERTY_ITEM(\
446 KSPROPERTY_CONNECTION_STARTAT,\
449 sizeof(KSRELATIVEEVENT),\
451 NULL, 0, NULL, NULL, 0)
454 #define KSEVENTSETID_Connection \
455 0x7f4bcbe0L, 0x9ea5, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00
459 KSEVENT_CONNECTION_POSITIONUPDATE
,
460 KSEVENT_CONNECTION_DATADISCONTINUITY
,
461 KSEVENT_CONNECTION_TIMEDISCONTINUITY
,
462 KSEVENT_CONNECTION_PRIORITY
,
463 KSEVENT_CONNECTION_ENDOFSTREAM
464 } KSEVENT_CONNECTION
;
467 /* ===============================================================
469 Properties/Methods/Events
472 #define STATIC_KSPROPSETID_General\
473 0x1464EDA5L, 0x6A8F, 0x11D1, {0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
474 DEFINE_GUIDSTRUCT("1464EDA5-6A8F-11D1-9AA7-00A0C9223196", KSPROPSETID_General
);
475 #define KSPROPSETID_General DEFINE_GUIDNAMED(KSPROPSETID_General)
480 KSPROPERTY_GENERAL_COMPONENTID
481 } KSPROPERTY_GENERAL
;
484 /* ===============================================================
486 Properties/Methods/Events
489 #define KSPROPSETID_GM \
490 0xAF627536L, 0xE719, 0x11D2, 0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D
494 KSPROPERTY_GM_GRAPHMANAGER
,
495 KSPROPERTY_GM_TIMESTAMP_CLOCK
,
496 KSPROPERTY_GM_RATEMATCH
,
497 KSPROPERTY_GM_RENDERCLOCK
501 /* ===============================================================
503 Properties/Methods/Events
506 #define KSPROPSETID_MediaSeeking \
507 0xEE904F0CL, 0xD09B, 0x11D0, 0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
511 KSPROPERTY_MEDIASEEKING_CAPABILITIES
,
512 KSPROPERTY_MEDIASEEKING_FORMATS
,
513 KSPROPERTY_MEDIASEEKING_TIMEFORMAT
,
514 KSPROPERTY_MEDIASEEKING_POSITION
,
515 KSPROPERTY_MEDIASEEKING_STOPPOSITION
,
516 KSPROPERTY_MEDIASEEKING_POSITIONS
,
517 KSPROPERTY_MEDIASEEKING_DURATION
,
518 KSPROPERTY_MEDIASEEKING_AVAILABLE
,
519 KSPROPERTY_MEDIASEEKING_PREROLL
,
520 KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT
521 } KSPROPERTY_MEDIASEEKING
;
524 /* ===============================================================
526 Properties/Methods/Events
529 #define STATIC_KSPROPSETID_Pin\
530 0x8C134960L, 0x51AD, 0x11CF, 0x87, 0x8A, 0x94, 0xF8, 0x01, 0xC1, 0x00, 0x00
531 DEFINE_GUIDSTRUCT("8C134960-51AD-11CF-878A-94F801C10000", KSPROPSETID_Pin
);
532 #define KSPROPSETID_Pin DEFINE_GUIDNAMED(KSPROPSETID_Pin)
534 #define STATIC_KSNAME_Pin\
535 0x146F1A80L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
536 DEFINE_GUIDSTRUCT("146F1A80-4791-11D0-A5D6-28DB04C10000", KSNAME_Pin
);
537 #define KSNAME_Pin DEFINE_GUIDNAMED(KSNAME_Pin)
542 KSPROPERTY_PIN_CINSTANCES
,
543 KSPROPERTY_PIN_CTYPES
,
544 KSPROPERTY_PIN_DATAFLOW
,
545 KSPROPERTY_PIN_DATARANGES
,
546 KSPROPERTY_PIN_DATAINTERSECTION
,
547 KSPROPERTY_PIN_INTERFACES
,
548 KSPROPERTY_PIN_MEDIUMS
,
549 KSPROPERTY_PIN_COMMUNICATION
,
550 KSPROPERTY_PIN_GLOBALCINSTANCES
,
551 KSPROPERTY_PIN_NECESSARYINSTANCES
,
552 KSPROPERTY_PIN_PHYSICALCONNECTION
,
553 KSPROPERTY_PIN_CATEGORY
,
555 KSPROPERTY_PIN_CONSTRAINEDDATARANGES
,
556 KSPROPERTY_PIN_PROPOSEDATAFORMAT
564 } KSP_PIN
, *PKSP_PIN
;
566 #define KSINSTANCE_INDETERMINATE ((ULONG)-1)
572 } KSPIN_CINSTANCES
, *PKSPIN_CINSTANCES
;
578 WCHAR SymbolicLinkName
[1];
579 } KSPIN_PHYSICALCONNECTION
, *PKSPIN_PHYSICALCONNECTION
;
582 /* ===============================================================
584 Properties/Methods/Events
587 #define KSPROPSETID_Quality \
588 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
592 KSPROPERTY_QUALITY_REPORT
,
593 KSPROPERTY_QUALITY_ERROR
594 } KSPROPERTY_QUALITY
;
597 /* ===============================================================
599 Properties/Methods/Events
602 #define KSPROPSETID_Stream \
603 0x65aaba60L, 0x98ae, 0x11cf, 0xa1, 0x0d, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
607 KSPROPERTY_STREAM_ALLOCATOR
,
608 KSPROPERTY_STREAM_QUALITY
,
609 KSPROPERTY_STREAM_DEGRADATION
,
610 KSPROPERTY_STREAM_MASTERCLOCK
,
611 KSPROPERTY_STREAM_TIMEFORMAT
,
612 KSPROPERTY_STREAM_PRESENTATIONTIME
,
613 KSPROPERTY_STREAM_PRESENTATIONEXTENT
,
614 KSPROPERTY_STREAM_FRAMETIME
,
615 KSPROPERTY_STREAM_RATECAPABILITY
,
616 KSPROPERTY_STREAM_RATE
,
617 KSPROPERTY_STREAM_PIPE_ID
621 /* ===============================================================
623 Properties/Methods/Events
626 #define STATIC_KSPROPSETID_StreamAllocator\
627 0xcf6e4342L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
628 DEFINE_GUIDSTRUCT("cf6e4342-ec87-11cf-a130-0020afd156e4", KSPROPSETID_StreamAllocator
);
629 #define KSPROPSETID_StreamAllocator DEFINE_GUIDNAMED(KSPROPSETID_StreamAllocator)
633 KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE
,
634 KSPROPERTY_STREAMALLOCATOR_STATUS
635 } KSPROPERTY_STREAMALLOCATOR
;
637 #define KSMETHODSETID_StreamAllocator \
638 0xcf6e4341L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
642 KSMETHOD_STREAMALLOCATOR_ALLOC
,
643 KSMETHOD_STREAMALLOCATOR_FREE
644 } KSMETHOD_STREAMALLOCATOR
;
647 #define KSEVENTSETID_StreamAllocator
651 KSEVENT_STREAMALLOCATOR_INTERNAL_FREEFRAME
,
652 KSEVENT_STREAMALLOCATOR_FREEFRAME
653 } KSEVENT_STREAMALLOCATOR
;
656 /* ===============================================================
658 Properties/Methods/Events
661 #define KSPROPSETID_StreamInterface \
662 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
666 KSPROPERTY_STREAMINTERFACE_HEADERSIZE
667 } KSPROPERTY_STREAMINTERFACE
;
670 /* ===============================================================
672 Properties/Methods/Events
675 #define STATIC_KSPROPSETID_Topology\
676 0x720D4AC0L, 0x7533, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
677 DEFINE_GUIDSTRUCT("720D4AC0-7533-11D0-A5D6-28DB04C10000", KSPROPSETID_Topology
);
678 #define KSPROPSETID_Topology DEFINE_GUIDNAMED(KSPROPSETID_Topology)
681 KSPROPERTY_TOPOLOGY_CATEGORIES
,
682 KSPROPERTY_TOPOLOGY_NODES
,
683 KSPROPERTY_TOPOLOGY_CONNECTIONS
,
684 KSPROPERTY_TOPOLOGY_NAME
685 } KSPROPERTY_TOPOLOGY
;
687 /* ===============================================================
688 Property Sets for audio drivers - TODO
691 #define STATIC_KSPROPTYPESETID_General \
692 0x97E99BA0L, 0xBDEA, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
693 DEFINE_GUIDSTRUCT("97E99BA0-BDEA-11CF-A5D6-28DB04C10000", KSPROPTYPESETID_General
);
694 #define KSPROPTYPESETID_General DEFINE_GUIDNAMED(KSPROPTYPESETID_General)
697 KSPROPERTY_AC3_ALTERNATE_AUDIO
698 KSPROPERTY_AC3_BIT_STREAM_MODE
699 KSPROPERTY_AC3_DIALOGUE_LEVEL
700 KSPROPERTY_AC3_DOWNMIX
701 KSPROPERTY_AC3_ERROR_CONCEALMENT
702 KSPROPERTY_AC3_LANGUAGE_CODE
703 KSPROPERTY_AC3_ROOM_TYPE
706 #define KSPROPSETID_Acoustic_Echo_Cancel
709 KSPROPERTY_AEC_NOISE_FILL_ENABLE
710 KSPROPERTY_AEC_STATUS
714 KSPROPERTY_AUDIO_3D_INTERFACE
716 KSPROPERTY_AUDIO_ALGORITHM_INSTANCE
717 KSPROPERTY_AUDIO_BASS
718 KSPROPERTY_AUDIO_BASS_BOOST
719 KSPROPERTY_AUDIO_CHANNEL_CONFIG
720 KSPROPERTY_AUDIO_CHORUS_LEVEL
721 KSPROPERTY_AUDIO_COPY_PROTECTION
722 KSPROPERTY_AUDIO_CPU_RESOURCES
723 KSPROPERTY_AUDIO_DELAY
724 KSPROPERTY_AUDIO_DEMUX_DEST
725 KSPROPERTY_AUDIO_DEV_SPECIFIC
726 KSPROPERTY_AUDIO_DYNAMIC_RANGE
727 KSPROPERTY_AUDIO_DYNAMIC_SAMPLING_RATE
728 KSPROPERTY_AUDIO_EQ_BANDS
729 KSPROPERTY_AUDIO_EQ_LEVEL
730 KSPROPERTY_AUDIO_FILTER_STATE
731 KSPROPERTY_AUDIO_LATENCY
732 KSPROPERTY_AUDIO_LOUDNESS
733 KSPROPERTY_AUDIO_MANUFACTURE_GUID
735 KSPROPERTY_AUDIO_MIX_LEVEL_CAPS
736 KSPROPERTY_AUDIO_MIX_LEVEL_TABLE
737 KSPROPERTY_AUDIO_MUTE
738 KSPROPERTY_AUDIO_MUX_SOURCE
739 KSPROPERTY_AUDIO_NUM_EQ_BANDS
740 KSPROPERTY_AUDIO_PEAKMETER
741 KSPROPERTY_AUDIO_POSITION
742 KSPROPERTY_AUDIO_PREFERRED_STATUS
743 KSPROPERTY_AUDIO_PRODUCT_GUID
744 KSPROPERTY_AUDIO_QUALITY
745 KSPROPERTY_AUDIO_REVERB_LEVEL
746 KSPROPERTY_AUDIO_SAMPLING_RATE
747 KSPROPERTY_AUDIO_STEREO_ENHANCE
748 KSPROPERTY_AUDIO_STEREO_SPEAKER_GEOMETRY
749 KSPROPERTY_AUDIO_SURROUND_ENCODE
750 KSPROPERTY_AUDIO_TREBLE
751 KSPROPERTY_AUDIO_VOLUMELEVEL
752 KSPROPERTY_AUDIO_WIDE_MODE
753 KSPROPERTY_AUDIO_WIDENESS
756 #define KSPROPSETID_AudioGfx
758 KSPROPERTY_AUDIOGFX_CAPTURETARGETDEVICEID
759 KSPROPERTY_AUDIOGFX_RENDERTARGETDEVICEID
762 #define KSPROPSETID_DirectSound3DBuffer
764 KSPROPERTY_DIRECTSOUND3DBUFFER_ALL
765 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEANGLES
766 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEORIENTATION
767 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEOUTSIDEVOLUME
768 KSPROPERTY_DIRECTSOUND3DBUFFER_MAXDISTANCE
769 KSPROPERTY_DIRECTSOUND3DBUFFER_MINDISTANCE
770 KSPROPERTY_DIRECTSOUND3DBUFFER_MODE
771 KSPROPERTY_DIRECTSOUND3DBUFFER_POSITION
772 KSPROPERTY_DIRECTSOUND3DBUFFER_VELOCITY
775 #define KSPROPSETID_DirectSound3DListener
777 KSPROPERTY_DIRECTSOUND3DLISTENER_ALL
778 KSPROPERTY_DIRECTSOUND3DLISTENER_ALLOCATION
779 KSPROPERTY_DIRECTSOUND3DLISTENER_BATCH
780 KSPROPERTY_DIRECTSOUND3DLISTENER_DISTANCEFACTOR
781 KSPROPERTY_DIRECTSOUND3DLISTENER_DOPPLERFACTOR
782 KSPROPERTY_DIRECTSOUND3DLISTENER_ORIENTATION
783 KSPROPERTY_DIRECTSOUND3DLISTENER_POSITION
784 KSPROPERTY_DIRECTSOUND3DLISTENER_ROLLOFFFACTOR
785 KSPROPERTY_DIRECTSOUND3DLISTENER_VELOCITY
788 #define KSPROPSETID_DrmAudioStream
790 KSPROPERTY_DRMAUDIOSTREAM_CONTENTID
793 #define KSPROPSETID_Hrtf3d
795 KSPROPERTY_HRTF3D_FILTER_FORMAT
796 KSPROPERTY_HRTF3D_INITIALIZE
797 KSPROPERTY_HRTF3D_PARAMS
800 #define KSPROPSETID_Itd3d
802 KSPROPERTY_ITD3D_PARAMS
805 #define KSPROPSETID_Synth
807 KSPROPERTY_SYNTH_CAPS
808 KSPROPERTY_SYNTH_CHANNELGROUPS
809 KSPROPERTY_SYNTH_LATENCYCLOCK
810 KSPROPERTY_SYNTH_MASTERCLOCK
811 KSPROPERTY_SYNTH_PORTPARAMETERS
812 KSPROPERTY_SYNTH_RUNNINGSTATS
813 KSPROPERTY_SYNTH_VOICEPRIORITY
814 KSPROPERTY_SYNTH_VOLUME
815 KSPROPERTY_SYNTH_VOLUMEBOOST
818 #define KSPROPSETID_Synth_Dls
820 KSPROPERTY_SYNTH_DLS_APPEND
821 KSPROPERTY_SYNTH_DLS_COMPACT
822 KSPROPERTY_SYNTH_DLS_DOWNLOAD
823 KSPROPERTY_SYNTH_DLS_UNLOAD
824 KSPROPERTY_SYNTH_DLS_WAVEFORMAT
827 #define KSPROPSETID_TopologyNode
829 KSPROPERTY_TOPOLOGYNODE_ENABLE
830 KSPROPERTY_TOPOLOGYNODE_RESET
836 /* ===============================================================
837 Event Sets for audio drivers - TODO
839 #define KSEVENTSETID_AudioControlChange
841 KSEVENT_CONTROL_CHANGE
846 /* ===============================================================
850 KSNODETYPE_3D_EFFECTS
851 KSNODETYPE_ACOUSTIC_ECHO_CANCEL
858 KSNODETYPE_DEV_SPECIFIC
860 KSNODETYPE_DMSYNTH_CAPS
861 KSNODETYPE_DRM_DESCRAMBLE
867 KSNODETYPE_PROLOGIC_DECODER
868 KSNODETYPE_PROLOGIC_ENCODER
871 KSNODETYPE_STEREO_ENHANCE
872 KSNODETYPE_STEREO_WIDE
877 KSNODETYPE_SYNTHESIZER
883 typedef PVOID KSDEVICE_HEADER
,
890 /* ===============================================================
894 #define KSMETHOD_TYPE_NONE 0x00000000
895 #define KSMETHOD_TYPE_READ 0x00000001
896 #define KSMETHOD_TYPE_WRITE 0x00000002
897 #define KSMETHOD_TYPE_MODIFY 0x00000003
898 #define KSMETHOD_TYPE_SOURCE 0x00000004
899 #define KSMETHOD_TYPE_SEND 0x00000001
900 #define KSMETHOD_TYPE_SETSUPPORT 0x00000100
901 #define KSMETHOD_TYPE_BASICSUPPORT 0x00000200
904 /* ===============================================================
908 #define KSPROPERTY_TYPE_GET 0x00000001
909 #define KSPROPERTY_TYPE_SET 0x00000002
910 #define KSPROPERTY_TYPE_SETSUPPORT 0x00000100
911 #define KSPROPERTY_TYPE_BASICSUPPORT 0x00000200
912 #define KSPROPERTY_TYPE_RELATIONS 0x00000400
913 #define KSPROPERTY_TYPE_SERIALIZESET 0x00000800
914 #define KSPROPERTY_TYPE_UNSERIALIZESET 0x00001000
915 #define KSPROPERTY_TYPE_SERIALIZERAW 0x00002000
916 #define KSPROPERTY_TYPE_UNSERIALIZERAW 0x00004000
917 #define KSPROPERTY_TYPE_SERIALIZESIZE 0x00008000
918 #define KSPROPERTY_TYPE_DEFAULT_VALUES 0x00010000
921 /* ===============================================================
922 Topology Methods/Properties
925 #define KSMETHOD_TYPE_TOPOLOGY 0x10000000
926 #define KSPROPERTY_TYPE_TOPOLOGY 0x10000000
929 #define DEFINE_KS_GUID(GA,GB,GC,GD,GE,GF,GG,GH,GI,GJ,GK) \
930 DEFINE_GUID(??, 0x#GA#L, 0xGB, 0xGC, 0xGD, 0xGE, 0xGF, 0xGG, 0xGH, 0xGI, 0xGJ, 0xGK) \
931 "GA-GB-GC-GDGE-GFGGGHGIGJGK"
934 /* ===============================================================
937 BRIDGE - 0x085AFF00L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
938 CAPTURE - 0x65E8773DL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
939 RENDER - 0x65E8773EL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
940 MIXER - 0xAD809C00L, 0x7B88, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
941 SPLITTER - 0x0A4252A0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
942 DATACOMPRESSOR - 0x1E84C900L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
943 DATADECOMPRESSOR - 0x2721AE20L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
944 DATATRANSFORM - 0x2EB07EA0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
945 COMMUNICATIONSTRANSFORM - 0xCF1DDA2CL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
946 INTERFACETRANSFORM - 0xCF1DDA2DL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
947 MEDIUMTRANSFORM - 0xCF1DDA2EL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
948 FILESYSTEM - 0x760FED5EL, 0x9357, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
949 CLOCK - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
950 PROXY - 0x97EBAACAL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
951 QUALITY - 0x97EBAACBL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
954 /* ===============================================================
955 KSNAME GUIDs (defined also as KSSTRING_Xxx L"{...}"
957 Filter - 0x9b365890L, 0x165f, 0x11d0, 0xa1, 0x95, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
958 Pin - 0x146F1A80L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
959 Clock - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
960 Allocator - 0x642F5D00L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
961 TopologyNode - 0x0621061AL, 0xEE75, 0x11D0, 0xB9, 0x15, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
964 /* ===============================================================
967 Standard - 0x1A8766A0L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
968 FileIo - 0x8C6F932CL, 0xE771, 0x11D0, 0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
971 /* ===============================================================
974 Standard - 0x4747B320L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
977 /* ===============================================================
980 General - 0x1464EDA5L, 0x6A8F, 0x11D1, 0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
981 StreamIo - 0x65D003CAL, 0x1523, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
982 MediaSeeking - 0xEE904F0CL, 0xD09B, 0x11D0, 0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
983 Topology - 0x720D4AC0L, 0x7533, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
984 GM - 0xAF627536L, 0xE719, 0x11D2, 0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D
985 Quality - 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
986 Connection - 0x1D58C920L, 0xAC9B, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
989 /* ===============================================================
992 Event set - 0x75d95571L, 0x073c, 0x11d0, 0xa1, 0x61, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
993 Method set - 0xcf6e4341L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
994 Property set - 0xcf6e4342L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
997 /* ===============================================================
1000 Property set - 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
1003 /* ===============================================================
1006 Property set - 0xDF12A4C0L, 0xAC17, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1007 Event sets - 0x364D8E20L, 0x62C7, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1010 /* ===============================================================
1013 Event set - 0x7f4bcbe0L, 0x9ea5, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00
1016 /* ===============================================================
1019 KSTIME_FORMAT_NONE (null guid)
1020 FRAME - 0x7b785570L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1021 BYTE - 0x7b785571L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1022 SAMPLE - 0x7b785572L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1023 FIELD - 0x7b785573L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1024 MEDIA_TIME - 0x7b785574L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
1027 /* ===============================================================
1037 #define STATIC_KSDATAFORMAT_SPECIFIER_NONE\
1038 0x0F6417D6L, 0xC318, 0x11D0, 0xA4, 0x3F, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1039 DEFINE_GUIDSTRUCT("0F6417D6-C318-11D0-A43F-00A0C9223196", KSDATAFORMAT_SPECIFIER_NONE
);
1040 #define KSDATAFORMAT_SPECIFIER_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_NONE)
1043 /* ===============================================================
1046 WILDCARD, DONT_CARE = NULL
1047 SYSTEM - 0x091bb638L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1048 USER - 0x8cb0fc28L, 0x7893, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1049 KERNEL_PAGED - 0xd833f8f8L, 0x7894, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1050 KERNEL_NONPAGED - 0x4a6d5fc4L, 0x7895, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1051 DEVICE_UNKNOWN - 0x091bb639L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
1054 /* ===============================================================
1056 (values have been checked)
1061 #define DEFINE_KSPROPERTY_ITEM(PropertyId, GetHandler,\
1065 Values, RelationsCount, Relations, SupportHandler,\
1068 PropertyId, {(PFNKSHANDLER)GetHandler}, MinProperty, MinData,\
1069 {(PFNKSHANDLER)SetHandler},\
1070 (PKSPROPERTY_VALUES)Values, RelationsCount, (PKSPROPERTY)Relations,\
1071 (PFNKSHANDLER)SupportHandler, (ULONG)SerializedSize\
1076 #define DEFINE_KSPROPERTY_ITEM(PropertyId, GetHandler,\
1080 Values, RelationsCount, Relations, SupportHandler,\
1083 PropertyId, (PFNKSHANDLER)GetHandler, MinProperty, MinData,\
1084 (PFNKSHANDLER)SetHandler,\
1085 (PKSPROPERTY_VALUES)Values, RelationsCount, (PKSPROPERTY)Relations,\
1086 (PFNKSHANDLER)SupportHandler, (ULONG)SerializedSize\
1095 KsObjectTypeFilterFactory
,
1106 } KSSTATE
, *PKSSTATE
;
1110 KSTARGET_STATE_DISABLED
,
1111 KSTARGET_STATE_ENABLED
1126 KSEVENTS_FMUTEXUNSAFE
,
1129 } KSEVENTS_LOCKTYPE
;
1133 KSDEGRADE_STANDARD_SIMPLE
,
1134 KSDEGRADE_STANDARD_QUALITY
,
1135 KSDEGRADE_STANDARD_COMPUTATION
,
1136 KSDEGRADE_STANDARD_SKIP
1137 } KSDEGRADE_STANDARD
;
1141 KSPIN_DATAFLOW_IN
= 1,
1143 } KSPIN_DATAFLOW
, *PKSPIN_DATAFLOW
;
1147 KSPIN_COMMUNICATION_NONE
,
1148 KSPIN_COMMUNICATION_SINK
,
1149 KSPIN_COMMUNICATION_SOURCE
,
1150 KSPIN_COMMUNICATION_BOTH
,
1151 KSPIN_COMMUNICATION_BRIDGE
1152 } KSPIN_COMMUNICATION
, *PKSPIN_COMMUNICATION
;
1158 } KSLIST_ENTRY_LOCATION
;
1162 KsStackCopyToNewLocation
,
1163 KsStackReuseCurrentLocation
,
1164 KsStackUseNewLocation
1171 KsAcquireOnlySingleItem
,
1172 KsAcquireAndRemoveOnlySingleItem
1173 } KSIRP_REMOVAL_OPERATION
;
1177 KsInvokeOnSuccess
= 1,
1178 KsInvokeOnError
= 2,
1179 KsInvokeOnCancel
= 4
1180 } KSCOMPLETION_INVOCATION
;
1183 #if defined(_NTDDK_)
1185 typedef NTSTATUS (NTAPI
*PFNKSCONTEXT_DISPATCH
)(
1190 #if defined(_NTDDK_) && !defined(__wtypes_h__)
1220 VT_USERDEFINED
= 29,
1227 VT_STREAMED_OBJECT
= 68,
1228 VT_STORED_OBJECT
= 69,
1229 VT_BLOB_OBJECT
= 70,
1235 VT_RESERVED
= 0x8000,
1236 VT_ILLEGAL
= 0xffff,
1237 VT_ILLEGALMASKED
= 0xfff,
1242 #define STATIC_KSDATAFORMAT_TYPE_WILDCARD STATIC_GUID_NULL
1243 #define KSDATAFORMAT_TYPE_WILDCARD GUID_NULL
1245 #define STATIC_KSDATAFORMAT_SUBTYPE_WILDCARD STATIC_GUID_NULL
1246 #define KSDATAFORMAT_SUBTYPE_WILDCARD GUID_NULL
1248 #define STATIC_KSDATAFORMAT_SPECIFIER_WILDCARD STATIC_GUID_NULL
1249 #define KSDATAFORMAT_SPECIFIER_WILDCARD GUID_NULL
1251 /* ===============================================================
1260 } KS_FRAMING_RANGE
, *PKS_FRAMING_RANGE
;
1264 KS_FRAMING_RANGE Range
;
1265 ULONG InPlaceWeight
;
1266 ULONG NotInPlaceWeight
;
1267 } KS_FRAMING_RANGE_WEIGHTED
, *PKS_FRAMING_RANGE_WEIGHTED
;
1277 ULONG FileAlignment
;
1278 ULONG MemoryTypeWeight
;
1279 KS_FRAMING_RANGE PhysicalRange
;
1280 KS_FRAMING_RANGE_WEIGHTED FramingRange
;
1281 } KS_FRAMING_ITEM
, *PKS_FRAMING_ITEM
;
1285 ULONG RatioNumerator
;
1286 ULONG RatioDenominator
;
1287 ULONG RatioConstantMargin
;
1288 } KS_COMPRESSION
, *PKS_COMPRESSION
;
1291 /* ===============================================================
1295 #define KSPRIORITY_LOW 0x00000001
1296 #define KSPRIORITY_NORMAL 0x40000000
1297 #define KSPRIORITY_HIGH 0x80000000
1298 #define KSPRIORITY_EXCLUSIVE 0xFFFFFFFF
1302 ULONG PriorityClass
;
1303 ULONG PrioritySubClass
;
1304 } KSPRIORITY
, *PKSPRIORITY
;
1307 /* ===============================================================
1309 http://www.osronline.com/DDKx/stream/ks-struct_494j.htm
1311 #if defined(_NTDDK_)
1314 PDRIVER_DISPATCH DeviceIoControl
;
1315 PDRIVER_DISPATCH Read
;
1316 PDRIVER_DISPATCH Write
;
1317 PDRIVER_DISPATCH Flush
;
1318 PDRIVER_DISPATCH Close
;
1319 PDRIVER_DISPATCH QuerySecurity
;
1320 PDRIVER_DISPATCH SetSecurity
;
1321 PFAST_IO_DEVICE_CONTROL FastDeviceIoControl
;
1322 PFAST_IO_READ FastRead
;
1323 PFAST_IO_WRITE FastWrite
;
1324 } KSDISPATCH_TABLE
, *PKSDISPATCH_TABLE
;
1327 #define KSCREATE_ITEM_IRP_STORAGE(Irp) (*(PKSOBJECT_CREATE_ITEM*)&(Irp)->Tail.Overlay.DriverContext[0])
1328 #define KSEVENT_SET_IRP_STORAGE(Irp) (*(const KSEVENT_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1329 #define KSEVENT_ITEM_IRP_STORAGE(Irp) (*(const KSEVENT_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1330 #define KSEVENT_ENTRY_IRP_STORAGE(Irp) (*(PKSEVENT_ENTRY*)&(Irp)->Tail.Overlay.DriverContext[0])
1331 #define KSMETHOD_SET_IRP_STORAGE(Irp) (*(const KSMETHOD_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1332 #define KSMETHOD_ITEM_IRP_STORAGE(Irp) (*(const KSMETHOD_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1333 #define KSMETHOD_TYPE_IRP_STORAGE(Irp) (*(ULONG_PTR*)(&(Irp)->Tail.Overlay.DriverContext[2]))
1334 #define KSQUEUE_SPINLOCK_IRP_STORAGE(Irp) (*(PKSPIN_LOCK*)&(Irp)->Tail.Overlay.DriverContext[1])
1335 #define KSPROPERTY_SET_IRP_STORAGE(Irp) (*(const KSPROPERTY_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1336 #define KSPROPERTY_ITEM_IRP_STORAGE(Irp) (*(const KSPROPERTY_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1337 #define KSPROPERTY_ATTRIBUTES_IRP_STORAGE(Irp) (*(PKSATTRIBUTE_LIST*)&(Irp)->Tail.Overlay.DriverContext[2])
1341 (NTAPI
*PFNREFERENCEDEVICEOBJECT
)(
1347 (NTAPI
*PFNDEREFERENCEDEVICEOBJECT
)(
1353 (NTAPI
*PFNQUERYREFERENCESTRING
)(
1355 IN OUT PWCHAR
*String
1360 INTERFACE Interface
;
1361 PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject
;
1362 PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject
;
1363 PFNQUERYREFERENCESTRING QueryReferenceString
;
1364 } BUS_INTERFACE_REFERENCE
, *PBUS_INTERFACE_REFERENCE
;
1369 ULONG ReferenceCount
;
1370 KSPIN_LOCK AccessLock
;
1371 } KSDPC_ITEM
, *PKSDPC_ITEM
;
1376 LIST_ENTRY BufferList
;
1377 } KSBUFFER_ITEM
, *PKSBUFFER_ITEM
;
1389 } KSCOMPONENTID
, *PKSCOMPONENTID
;
1391 /* ===============================================================
1395 #define KSPROPERTY_MEMBER_RANGES 0x00000001
1396 #define KSPROPERTY_MEMBER_STEPPEDRANGES 0x00000002
1397 #define KSPROPERTY_MEMBER_VALUES 0x00000003
1398 #define KSPROPERTY_MEMBER_FLAG_DEFAULT KSPROPERTY_MEMBER_RANGES
1401 KS_SEEKING_NoPositioning
,
1402 KS_SEEKING_AbsolutePositioning
,
1403 KS_SEEKING_RelativePositioning
,
1404 KS_SEEKING_IncrementalPositioning
,
1405 KS_SEEKING_PositioningBitsMask
= 0x3,
1406 KS_SEEKING_SeekToKeyFrame
,
1407 KS_SEEKING_ReturnTime
= 0x8
1414 KS_SEEKING_FLAGS CurrentFlags
;
1415 KS_SEEKING_FLAGS StopFlags
;
1416 } KSPROPERTY_POSITIONS
, *PKSPROPERTY_POSITIONS
;
1422 } KSPROPERTY_SERIALHDR
, *PKSPROPERTY_SERIALHDR
;
1426 KSIDENTIFIER PropTypeSet
;
1428 ULONG PropertyLength
;
1429 } KSPROPERTY_SERIAL
, *PKSPROPERTY_SERIAL
;
1438 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1445 ULONG UnsignedMinimum
;
1446 ULONG UnsignedMaximum
;
1447 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1453 } KSPROPERTY_BOUNDS_LONG
, *PKSPROPERTY_BOUNDS_LONG
;
1458 LONGLONG SignedMinimum
;
1459 LONGLONG SignedMaximum
;
1460 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1467 #if defined(_NTDDK_)
1468 ULONGLONG UnsignedMinimum
;
1469 ULONGLONG UnsignedMaximum
;
1471 DWORDLONG UnsignedMinimum
;
1472 DWORDLONG UnsignedMaximum
;
1474 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1479 } KSPROPERTY_BOUNDS_LONGLONG
, *PKSPROPERTY_BOUNDS_LONGLONG
;
1484 ULONG DescriptionSize
;
1485 KSIDENTIFIER PropTypeSet
;
1486 ULONG MembersListCount
;
1488 } KSPROPERTY_DESCRIPTION
, *PKSPROPERTY_DESCRIPTION
;
1494 } KSPROPERTY_MEDIAAVAILABLE
, *PKSPROPERTY_MEDIAAVAILABLE
;
1503 } KSPROPERTY_MEMBERSHEADER
, *PKSPROPERTY_MEMBERSHEADER
;
1506 KSPROPERTY_MEMBERSHEADER MembersHeader
;
1507 const VOID
* Members
;
1508 } KSPROPERTY_MEMBERSLIST
, *PKSPROPERTY_MEMBERSLIST
;
1511 KSIDENTIFIER PropTypeSet
;
1512 ULONG MembersListCount
;
1513 const KSPROPERTY_MEMBERSLIST
* MembersList
;
1514 } KSPROPERTY_VALUES
, *PKSPROPERTY_VALUES
;
1516 #if defined(_NTDDK_)
1517 typedef NTSTATUS (NTAPI
*PFNKSHANDLER
)(
1519 IN PKSIDENTIFIER Request
,
1527 PFNKSHANDLER GetPropertyHandler
;
1528 BOOLEAN GetSupported
;
1533 PFNKSHANDLER SetPropertyHandler
;
1534 BOOLEAN SetSupported
;
1536 const KSPROPERTY_VALUES
* Values
;
1537 ULONG RelationsCount
;
1538 const KSPROPERTY
* Relations
;
1539 PFNKSHANDLER SupportHandler
;
1540 ULONG SerializedSize
;
1541 } KSPROPERTY_ITEM
, *PKSPROPERTY_ITEM
;
1546 (NTAPI
*PFNKSFASTHANDLER
)(
1547 IN PFILE_OBJECT FileObject
,
1548 IN PKSIDENTIFIER Request
,
1549 IN ULONG RequestLength
,
1551 IN ULONG DataLength
,
1552 OUT PIO_STATUS_BLOCK IoStatus
1558 PFNKSFASTHANDLER GetPropertyHandler
;
1559 BOOLEAN GetSupported
;
1562 PFNKSFASTHANDLER SetPropertyHandler
;
1563 BOOLEAN SetSupported
;
1566 } KSFASTPROPERTY_ITEM
, *PKSFASTPROPERTY_ITEM
;
1571 ULONG PropertiesCount
;
1572 const KSPROPERTY_ITEM
* PropertyItem
;
1574 const KSFASTPROPERTY_ITEM
* FastIoTable
;
1575 } KSPROPERTY_SET
, *PKSPROPERTY_SET
;
1581 ULONG SteppingDelta
;
1583 KSPROPERTY_BOUNDS_LONG Bounds
;
1584 } KSPROPERTY_STEPPING_LONG
, *PKSPROPERTY_STEPPING_LONG
;
1588 #if defined(_NTDDK_)
1589 ULONGLONG SteppingDelta
;
1591 DWORDLONG SteppingDelta
;
1593 KSPROPERTY_BOUNDS_LONGLONG Bounds
;
1594 } KSPROPERTY_STEPPING_LONGLONG
, *PKSPROPERTY_STEPPING_LONGLONG
;
1596 /* ===============================================================
1604 ULONG RequirementsFlags
;
1606 #if defined(_NTDDK_)
1613 ULONG FileAlignment
;
1615 } KSALLOCATOR_FRAMING
, *PKSALLOCATOR_FRAMING
;
1621 KS_COMPRESSION OutputCompression
;
1623 KS_FRAMING_ITEM FramingItem
[1];
1624 } KSALLOCATOR_FRAMING_EX
, *PKSALLOCATOR_FRAMING_EX
;
1626 #define KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER 0x00000001
1627 #define KSALLOCATOR_REQUIREMENTF_SYSTEM_MEMORY 0x00000002
1628 #define KSALLOCATOR_REQUIREMENTF_FRAME_INTEGRITY 0x00000004
1629 #define KSALLOCATOR_REQUIREMENTF_MUST_ALLOCATE 0x00000008
1630 #define KSALLOCATOR_REQUIREMENTF_PREFERENCES_ONLY 0x80000000
1632 #define KSALLOCATOR_OPTIONF_COMPATIBLE 0x00000001
1633 #define KSALLOCATOR_OPTIONF_SYSTEM_MEMORY 0x00000002
1634 #define KSALLOCATOR_OPTIONF_VALID 0x00000003
1636 #define KSALLOCATOR_FLAG_PARTIAL_READ_SUPPORT 0x00000010
1637 #define KSALLOCATOR_FLAG_DEVICE_SPECIFIC 0x00000020
1638 #define KSALLOCATOR_FLAG_CAN_ALLOCATE 0x00000040
1639 #define KSALLOCATOR_FLAG_INSIST_ON_FRAMESIZE_RATIO 0x00000080
1641 /* ===============================================================
1650 } KSQUALITY
, *PKSQUALITY
;
1654 HANDLE QualityManager
;
1656 } KSQUALITY_MANAGER
, *PKSQUALITY_MANAGER
;
1660 LONGLONG PresentationStart
;
1662 KSPIN_INTERFACE Interface
;
1669 KSPROPERTY Property
;
1671 } KSRATE_CAPABILITY
, *PKSRATE_CAPABILITY
;
1675 LONGLONG Granularity
;
1677 } KSRESOLUTION
, *PKSRESOLUTION
;
1681 ULONG NotificationType
;
1685 ULONG_PTR Reserved
[2];
1692 #if defined(_NTDDK_)
1695 KPRIORITY Increment
;
1700 KPRIORITY Increment
;
1705 ULONG ReferenceCount
;
1709 PWORK_QUEUE_ITEM WorkQueueItem
;
1710 WORK_QUEUE_TYPE WorkQueueType
;
1714 PWORK_QUEUE_ITEM WorkQueueItem
;
1715 PKSWORKER KsWorkerObject
;
1721 LONG_PTR Alignment
[2];
1724 } KSEVENTDATA
, *PKSEVENTDATA
;
1731 HANDLE ObjectHandle
;
1732 PVOID ObjectPointer
;
1736 KSEVENTDATA EventData
;
1737 } KSRELATIVEEVENT
, *PKSRELATIVEEVENT
;
1740 /* ===============================================================
1754 LONGLONG SystemTime
;
1755 } KSCORRELATED_TIME
, *PKSCORRELATED_TIME
;
1759 KSPROPERTY Property
;
1763 } KSP_TIMEFORMAT
, *PKSP_TIMEFORMAT
;
1769 } KSINTERVAL
, *PKSINTERVAL
;
1776 } KSFRAMETIME
, *PKSFRAMETIME
;
1779 /* ===============================================================
1783 typedef PVOID PKSDEFAULTCLOCK
;
1788 } KSCLOCK_CREATE
, *PKSCLOCK_CREATE
;
1790 #if defined(_NTDDK_)
1794 (FASTCALL
*PFNKSCLOCK_GETTIME
)(
1795 IN PFILE_OBJECT FileObject
1799 (FASTCALL
*PFNKSCLOCK_CORRELATEDTIME
)(
1800 IN PFILE_OBJECT FileObject
,
1801 OUT PLONGLONG SystemTime
);
1805 PFNKSCLOCK_GETTIME GetTime
;
1806 PFNKSCLOCK_GETTIME GetPhysicalTime
;
1807 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedTime
;
1808 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedPhysicalTime
;
1809 } KSCLOCK_FUNCTIONTABLE
, *PKSCLOCK_FUNCTIONTABLE
;
1812 /* ===============================================================
1813 Objects ??? SORT ME!
1816 #define KSCREATE_ITEM_SECURITYCHANGED 0x1
1817 #define KSCREATE_ITEM_WILDCARD 0x2
1818 #define KSCREATE_ITEM_NOPARAMETERS 0x4
1819 #define KSCREATE_ITEM_FREEONSTOP 0x8
1823 PDRIVER_DISPATCH Create
;
1825 UNICODE_STRING ObjectClass
;
1826 PSECURITY_DESCRIPTOR SecurityDescriptor
;
1828 } KSOBJECT_CREATE_ITEM
, *PKSOBJECT_CREATE_ITEM
;
1832 ULONG CreateItemsCount
;
1833 PKSOBJECT_CREATE_ITEM CreateItemsList
;
1834 } KSOBJECT_CREATE
, *PKSOBJECT_CREATE
;
1836 typedef VOID (NTAPI
*PFNKSITEMFREECALLBACK
)(
1837 IN PKSOBJECT_CREATE_ITEM CreateItem
);
1845 } KSMULTIPLE_ITEM
, *PKSMULTIPLE_ITEM
;
1850 PKSEVENTDATA EventData
;
1852 } KSQUERYBUFFER
, *PKSQUERYBUFFER
;
1858 } KSERROR
, *PKSERROR
;
1860 /* ===============================================================
1863 #if defined(_NTDDK_)
1869 PFNKSHANDLER MethodHandler
;
1870 BOOLEAN MethodSupported
;
1874 PFNKSHANDLER SupportHandler
;
1876 } KSMETHOD_ITEM
, *PKSMETHOD_ITEM
;
1880 #define DEFINE_KSMETHOD_ITEM(MethodId, Flags,\
1882 MinMethod, MinData, SupportHandler)\
1884 MethodId, {(PFNKSHANDLER)MethodHandler}, MinMethod, MinData,\
1885 SupportHandler, Flags\
1890 #define DEFINE_KSMETHOD_ITEM(MethodId, Flags,\
1892 MinMethod, MinData, SupportHandler)\
1894 MethodId, (PFNKSHANDLER)MethodHandler, MinMethod, MinData,\
1895 SupportHandler, Flags\
1907 PFNKSFASTHANDLER MethodHandler
;
1908 BOOLEAN MethodSupported
;
1910 } KSFASTMETHOD_ITEM
, *PKSFASTMETHOD_ITEM
;
1912 #define DEFINE_KSFASTMETHOD_ITEM(MethodId, MethodHandler)\
1914 MethodId, (PFNKSFASTHANDLER)MethodHandler\
1922 const KSMETHOD_ITEM
* MethodItem
;
1924 const KSFASTMETHOD_ITEM
*FastIoTable
;
1925 } KSMETHOD_SET
, *PKSMETHOD_SET
;
1928 #define DEFINE_KSMETHOD_SET(Set,\
1942 /* ===============================================================
1948 KSPROPERTY Property
;
1951 } KSP_NODE
, *PKSP_NODE
;
1958 } KSM_NODE
, *PKSM_NODE
;
1965 } KSE_NODE
, *PKSE_NODE
;
1970 } KSNODE_CREATE
, *PKSNODE_CREATE
;
1973 /* ===============================================================
1976 typedef struct _KSEVENT_ENTRY KSEVENT_ENTRY
, *PKSEVENT_ENTRY
;
1978 #if defined(_NTDDK_)
1981 KSEVENTDATA EventData
;
1983 } KSEVENT_TIME_MARK
, *PKSEVENT_TIME_MARK
;
1987 KSEVENTDATA EventData
;
1990 } KSEVENT_TIME_INTERVAL
, *PKSEVENT_TIME_INTERVAL
;
1992 typedef NTSTATUS (NTAPI
*PFNKSADDEVENT
)(
1994 IN PKSEVENTDATA EventData
,
1995 IN
struct _KSEVENT_ENTRY
* EventEntry
);
1999 (NTAPI
*PFNKSREMOVEEVENT
)(
2000 IN PFILE_OBJECT FileObject
,
2001 IN
struct _KSEVENT_ENTRY
* EventEntry
2008 ULONG ExtraEntryData
;
2009 PFNKSADDEVENT AddHandler
;
2010 PFNKSREMOVEEVENT RemoveHandler
;
2011 PFNKSHANDLER SupportHandler
;
2012 } KSEVENT_ITEM
, *PKSEVENT_ITEM
;
2018 const KSEVENT_ITEM
* EventItem
;
2019 } KSEVENT_SET
, *PKSEVENT_SET
;
2021 struct _KSEVENT_ENTRY
2023 LIST_ENTRY ListEntry
;
2026 PKSDPC_ITEM DpcItem
;
2027 PKSBUFFER_ITEM BufferItem
;
2029 PKSEVENTDATA EventData
;
2030 ULONG NotificationType
;
2031 const KSEVENT_SET
* EventSet
;
2032 const KSEVENT_ITEM
* EventItem
;
2033 PFILE_OBJECT FileObject
;
2034 ULONG SemaphoreAdjustment
;
2040 /* ===============================================================
2044 #if defined(_NTDDK_)
2046 typedef struct _KSPIN KSPIN
, *PKSPIN
;
2047 typedef struct _KSSTREAM_POINTER KSSTREAM_POINTER
, *PKSSTREAM_POINTER
;
2048 typedef struct _KSSTREAM_POINTER_OFFSET KSSTREAM_POINTER_OFFSET
, *PKSSTREAM_POINTER_OFFSET
;
2049 typedef struct _KSMAPPING KSMAPPING
, *PKSMAPPING
;
2050 typedef struct _KSPROCESSPIN KSPROCESSPIN
, *PKSPROCESSPIN
;
2052 #define IOCTL_KS_HANDSHAKE CTL_CODE(FILE_DEVICE_KS, 0x007, METHOD_NEITHER, FILE_ANY_ACCESS)
2058 } KSHANDSHAKE
, *PKSHANDSHAKE
;
2062 (NTAPI
*PFNKSPINHANDSHAKE
)(
2070 (NTAPI
*PFNKSPINPOWER
)(
2072 IN DEVICE_POWER_STATE State
2077 (NTAPI
*PFNKSPINFRAMERETURN
)(
2079 IN PVOID Data OPTIONAL
,
2080 IN ULONG Size OPTIONAL
,
2081 IN PMDL Mdl OPTIONAL
,
2082 IN PVOID Context OPTIONAL
,
2088 (NTAPI
*PFNKSPINIRPCOMPLETION
)(
2095 (NTAPI
*PFNKSPINIRP
)(
2108 (NTAPI
*PFNKSPINVOID
)(
2114 (NTAPI
*PFNKSSTREAMPOINTER
)(
2115 IN PKSSTREAM_POINTER StreamPointer
2120 PKSATTRIBUTE
* Attributes
;
2121 } KSATTRIBUTE_LIST
, *PKSATTRIBUTE_LIST
;
2125 (NTAPI
*PFNKSPINSETDATAFORMAT
)(
2127 IN PKSDATAFORMAT OldFormat OPTIONAL
,
2128 IN PKSMULTIPLE_ITEM OldAttributeList OPTIONAL
,
2129 IN
const KSDATARANGE
* DataRange
,
2130 IN
const KSATTRIBUTE_LIST
* AttributeRange OPTIONAL
2135 (NTAPI
*PFNKSPINSETDEVICESTATE
)(
2138 IN KSSTATE FromState
2141 typedef struct _KSCLOCK_DISPATCH KSCLOCK_DISPATCH
, *PKSCLOCK_DISPATCH
;
2142 typedef struct _KSALLOCATOR_DISPATCH KSALLOCATOR_DISPATCH
, *PKSALLOCATOR_DISPATCH
;
2150 PFNKSPINSETDATAFORMAT SetDataFormat
;
2151 PFNKSPINSETDEVICESTATE SetDeviceState
;
2153 PFNKSPINVOID Disconnect
;
2154 const KSCLOCK_DISPATCH
* Clock
;
2155 const KSALLOCATOR_DISPATCH
* Allocator
;
2156 } KSPIN_DISPATCH
, *PKSPIN_DISPATCH
;
2160 (NTAPI
*PFNKSPINSETTIMER
)(
2163 IN LARGE_INTEGER DueTime
,
2169 (NTAPI
*PFNKSPINCANCELTIMER
)(
2176 (FASTCALL
*PFNKSPINCORRELATEDTIME
)(
2178 OUT PLONGLONG SystemTime
2183 (NTAPI
*PFNKSPINRESOLUTION
)(
2185 OUT PKSRESOLUTION Resolution
2188 struct _KSCLOCK_DISPATCH
{
2189 PFNKSPINSETTIMER SetTimer
;
2190 PFNKSPINCANCELTIMER CancelTimer
;
2191 PFNKSPINCORRELATEDTIME CorrelatedTime
;
2192 PFNKSPINRESOLUTION Resolution
;
2197 (NTAPI
*PFNKSPININITIALIZEALLOCATOR
)(
2199 IN PKSALLOCATOR_FRAMING AllocatorFraming
,
2203 typedef PVOID (NTAPI
*PFNKSDELETEALLOCATOR
)(
2206 typedef PVOID (NTAPI
*PFNKSDEFAULTALLOCATE
)(
2209 typedef PVOID (NTAPI
*PFNKSDEFAULTFREE
)(
2213 struct _KSALLOCATOR_DISPATCH
{
2214 PFNKSPININITIALIZEALLOCATOR InitializeAllocator
;
2215 PFNKSDELETEALLOCATOR DeleteAllocator
;
2216 PFNKSDEFAULTALLOCATE Allocate
;
2217 PFNKSDEFAULTFREE Free
;
2222 ULONG PropertySetsCount
;
2223 ULONG PropertyItemSize
;
2224 const KSPROPERTY_SET
* PropertySets
;
2225 ULONG MethodSetsCount
;
2226 ULONG MethodItemSize
;
2227 const KSMETHOD_SET
* MethodSets
;
2228 ULONG EventSetsCount
;
2229 ULONG EventItemSize
;
2230 const KSEVENT_SET
* EventSets
;
2231 #if !defined(_WIN64)
2234 } KSAUTOMATION_TABLE
, *PKSAUTOMATION_TABLE
;
2240 ULONG InterfacesCount
;
2241 const KSPIN_INTERFACE
* Interfaces
;
2243 const KSPIN_MEDIUM
* Mediums
;
2244 ULONG DataRangesCount
;
2245 const PKSDATARANGE
* DataRanges
;
2246 KSPIN_DATAFLOW DataFlow
;
2247 KSPIN_COMMUNICATION Communication
;
2248 const GUID
* Category
;
2253 ULONG ConstrainedDataRangesCount
;
2254 PKSDATARANGE
* ConstrainedDataRanges
;
2257 } KSPIN_DESCRIPTOR
, *PKSPIN_DESCRIPTOR
;
2261 (NTAPI
*PFNKSINTERSECTHANDLER
)(
2264 IN PKSDATARANGE DataRange
,
2265 OUT PVOID Data OPTIONAL
2270 (NTAPI
*PFNKSINTERSECTHANDLEREX
)(
2274 IN PKSDATARANGE DataRange
,
2275 IN PKSDATARANGE MatchingDataRange
,
2276 IN ULONG DataBufferSize
,
2277 OUT PVOID Data OPTIONAL
,
2283 const KSPIN_DISPATCH
* Dispatch
;
2284 const KSAUTOMATION_TABLE
* AutomationTable
;
2285 KSPIN_DESCRIPTOR PinDescriptor
;
2287 ULONG InstancesPossible
;
2288 ULONG InstancesNecessary
;
2289 const KSALLOCATOR_FRAMING_EX
* AllocatorFraming
;
2290 PFNKSINTERSECTHANDLEREX IntersectHandler
;
2291 } KSPIN_DESCRIPTOR_EX
, *PKSPIN_DESCRIPTOR_EX
;
2293 #define KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING 0x00000001
2294 #define KSFILTER_FLAG_CRITICAL_PROCESSING 0x00000002
2295 #define KSFILTER_FLAG_HYPERCRITICAL_PROCESSING 0x00000004
2296 #define KSFILTER_FLAG_RECEIVE_ZERO_LENGTH_SAMPLES 0x00000008
2297 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
2298 #define KSFILTER_FLAG_DENY_USERMODE_ACCESS 0x80000000
2302 #define KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING
2303 #define KSPIN_FLAG_CRITICAL_PROCESSING KSFILTER_FLAG_CRITICAL_PROCESSING
2304 #define KSPIN_FLAG_HYPERCRITICAL_PROCESSING KSFILTER_FLAG_HYPERCRITICAL_PROCESSING
2305 #define KSPIN_FLAG_ASYNCHRONOUS_PROCESSING 0x00000008
2306 #define KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING 0x00000010
2307 #define KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL 0x00000020
2308 #define KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING 0x00000040
2309 #define KSPIN_FLAG_ENFORCE_FIFO 0x00000080
2311 #define KSPIN_FLAG_GENERATE_MAPPINGS 0x00000100
2312 #define KSPIN_FLAG_DISTINCT_TRAILING_EDGE 0x00000200
2314 #define KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY 0x00010000
2315 #define KSPIN_FLAG_SPLITTER 0x00020000
2316 #define KSPIN_FLAG_USE_STANDARD_TRANSPORT 0x00040000
2317 #define KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT 0x00080000
2318 #define KSPIN_FLAG_FIXED_FORMAT 0x00100000
2319 #define KSPIN_FLAG_GENERATE_EOS_EVENTS 0x00200000
2320 #define KSPIN_FLAG_RENDERER (KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY|KSPIN_FLAG_GENERATE_EOS_EVENTS)
2321 #define KSPIN_FLAG_IMPLEMENT_CLOCK 0x00400000
2322 #define KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING 0x00800000
2323 #define KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE 0x01000000
2324 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
2325 #define KSPIN_FLAG_DENY_USERMODE_ACCESS 0x80000000
2330 const KSPIN_DESCRIPTOR_EX
* Descriptor
;
2334 KSPIN_COMMUNICATION Communication
;
2335 BOOLEAN ConnectionIsExternal
;
2336 KSPIN_INTERFACE ConnectionInterface
;
2337 KSPIN_MEDIUM ConnectionMedium
;
2338 KSPRIORITY ConnectionPriority
;
2339 PKSDATAFORMAT ConnectionFormat
;
2340 PKSMULTIPLE_ITEM AttributeList
;
2341 ULONG StreamHeaderSize
;
2342 KSPIN_DATAFLOW DataFlow
;
2343 KSSTATE DeviceState
;
2345 KSSTATE ClientState
;
2348 #define DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(Handler)\
2349 DEFINE_KSPROPERTY_ITEM(\
2350 KSPROPERTY_PIN_CINSTANCES,\
2353 sizeof(KSPIN_CINSTANCES),\
2354 NULL, NULL, 0, NULL, NULL, 0)
2356 #define DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(Handler)\
2357 DEFINE_KSPROPERTY_ITEM(\
2358 KSPROPERTY_PIN_CTYPES,\
2360 sizeof(KSPROPERTY),\
2362 NULL, NULL, 0, NULL, NULL, 0)
2364 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(Handler)\
2365 DEFINE_KSPROPERTY_ITEM(\
2366 KSPROPERTY_PIN_DATAFLOW,\
2369 sizeof(KSPIN_DATAFLOW),\
2370 NULL, NULL, 0, NULL, NULL, 0)
2372 #define DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(Handler)\
2373 DEFINE_KSPROPERTY_ITEM(\
2374 KSPROPERTY_PIN_DATARANGES,\
2378 NULL, NULL, 0, NULL, NULL, 0)
2380 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(Handler)\
2381 DEFINE_KSPROPERTY_ITEM(\
2382 KSPROPERTY_PIN_DATAINTERSECTION,\
2384 sizeof(KSP_PIN) + sizeof(KSMULTIPLE_ITEM),\
2386 NULL, NULL, 0, NULL, NULL, 0)
2388 #define DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(Handler)\
2389 DEFINE_KSPROPERTY_ITEM(\
2390 KSPROPERTY_PIN_INTERFACES,\
2394 NULL, NULL, 0, NULL, NULL, 0)
2396 #define DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(Handler)\
2397 DEFINE_KSPROPERTY_ITEM(\
2398 KSPROPERTY_PIN_MEDIUMS,\
2402 NULL, NULL, 0, NULL, NULL, 0)
2404 #define DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(Handler)\
2405 DEFINE_KSPROPERTY_ITEM(\
2406 KSPROPERTY_PIN_COMMUNICATION,\
2409 sizeof(KSPIN_COMMUNICATION),\
2410 NULL, NULL, 0, NULL, NULL, 0)
2412 #define DEFINE_KSPROPERTY_ITEM_PIN_GLOBALCINSTANCES(Handler)\
2413 DEFINE_KSPROPERTY_ITEM(\
2414 KSPROPERTY_PIN_GLOBALCINSTANCES,\
2417 sizeof(KSPIN_CINSTANCES),\
2418 NULL, NULL, 0, NULL, NULL, 0)
2420 #define DEFINE_KSPROPERTY_ITEM_PIN_NECESSARYINSTANCES(Handler)\
2421 DEFINE_KSPROPERTY_ITEM(\
2422 KSPROPERTY_PIN_NECESSARYINSTANCES,\
2426 NULL, NULL, 0, NULL, NULL, 0)
2428 #define DEFINE_KSPROPERTY_ITEM_PIN_PHYSICALCONNECTION(Handler)\
2429 DEFINE_KSPROPERTY_ITEM(\
2430 KSPROPERTY_PIN_PHYSICALCONNECTION,\
2434 NULL, NULL, 0, NULL, NULL, 0)
2436 #define DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(Handler)\
2437 DEFINE_KSPROPERTY_ITEM(\
2438 KSPROPERTY_PIN_CATEGORY,\
2442 NULL, NULL, 0, NULL, NULL, 0)
2444 #define DEFINE_KSPROPERTY_ITEM_PIN_NAME(Handler)\
2445 DEFINE_KSPROPERTY_ITEM(\
2446 KSPROPERTY_PIN_NAME,\
2450 NULL, NULL, 0, NULL, NULL, 0)
2452 #define DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(Handler)\
2453 DEFINE_KSPROPERTY_ITEM(\
2454 KSPROPERTY_PIN_CONSTRAINEDDATARANGES,\
2458 NULL, NULL, 0, NULL, NULL, 0)
2460 #define DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(Handler)\
2461 DEFINE_KSPROPERTY_ITEM(\
2462 KSPROPERTY_PIN_PROPOSEDATAFORMAT,\
2465 sizeof(KSDATAFORMAT),\
2466 (Handler), NULL, 0, NULL, NULL, 0)
2468 #define DEFINE_KSPROPERTY_PINSET(PinSet,\
2469 PropGeneral, PropInstances, PropIntersection)\
2470 DEFINE_KSPROPERTY_TABLE(PinSet) {\
2471 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
2472 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
2473 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
2474 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
2475 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
2476 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
2477 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
2478 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
2479 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
2480 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral)\
2483 #define DEFINE_KSPROPERTY_PINSETCONSTRAINED(PinSet,\
2484 PropGeneral, PropInstances, PropIntersection)\
2485 DEFINE_KSPROPERTY_TABLE(PinSet) {\
2486 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
2487 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
2488 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
2489 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
2490 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
2491 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
2492 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
2493 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
2494 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
2495 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral),\
2496 DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral)\
2509 #define DEFINE_KSPROPERTY_TABLE(tablename)\
2510 const KSPROPERTY_ITEM tablename[] =
2516 KSPIN_INTERFACE Interface
;
2517 KSPIN_MEDIUM Medium
;
2520 KSPRIORITY Priority
;
2521 } KSPIN_CONNECT
, *PKSPIN_CONNECT
;
2523 /* ===============================================================
2533 } KSTOPOLOGY_CONNECTION
, *PKSTOPOLOGY_CONNECTION
;
2537 ULONG CategoriesCount
;
2538 const GUID
* Categories
;
2539 ULONG TopologyNodesCount
;
2540 const GUID
* TopologyNodes
;
2541 ULONG TopologyConnectionsCount
;
2542 const KSTOPOLOGY_CONNECTION
* TopologyConnections
;
2543 const GUID
* TopologyNodesNames
;
2545 } KSTOPOLOGY
, *PKSTOPOLOGY
;
2548 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler)\
2549 DEFINE_KSPROPERTY_ITEM(\
2550 KSPROPERTY_TOPOLOGY_CATEGORIES,\
2552 sizeof(KSPROPERTY),\
2554 NULL, NULL, 0, NULL, NULL, 0)
2556 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler)\
2557 DEFINE_KSPROPERTY_ITEM(\
2558 KSPROPERTY_TOPOLOGY_NODES,\
2560 sizeof(KSPROPERTY),\
2562 NULL, NULL, 0, NULL, NULL, 0)
2564 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler)\
2565 DEFINE_KSPROPERTY_ITEM(\
2566 KSPROPERTY_TOPOLOGY_CONNECTIONS,\
2568 sizeof(KSPROPERTY),\
2570 NULL, NULL, 0, NULL, NULL, 0)
2572 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\
2573 DEFINE_KSPROPERTY_ITEM(\
2574 KSPROPERTY_TOPOLOGY_NAME,\
2578 NULL, NULL, 0, NULL, NULL, 0)
2580 #define DEFINE_KSPROPERTY_TOPOLOGYSET(TopologySet, Handler)\
2581 DEFINE_KSPROPERTY_TABLE(TopologySet) {\
2582 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler),\
2583 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler),\
2584 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler),\
2585 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\
2588 /* ===============================================================
2593 typedef void* UNKNOWN
;
2595 typedef PVOID (NTAPI
*PFNKSINITIALIZEALLOCATOR
)(
2596 IN PVOID InitialContext
,
2597 IN PKSALLOCATOR_FRAMING AllocatorFraming
,
2598 OUT PVOID
* Context
);
2600 #if defined(_NTDDK_)
2601 typedef NTSTATUS (NTAPI
*PFNKSALLOCATOR
)(
2603 IN ULONG BufferSize
,
2604 IN BOOLEAN InputOperation
);
2606 typedef NTSTATUS (NTAPI
*PFNKINTERSECTHANDLEREX
)(
2610 IN PKSDATARANGE DataRange
,
2611 IN PKSDATARANGE MatchingDataRange
,
2612 IN ULONG DataBufferSize
,
2613 OUT PVOID Data OPTIONAL
,
2614 OUT PULONG DataSize
);
2619 (NTAPI
*PFNALLOCATOR_ALLOCATEFRAME
)(
2620 IN PFILE_OBJECT FileObject
,
2626 (NTAPI
*PFNALLOCATOR_FREEFRAME
)(
2627 IN PFILE_OBJECT FileObject
,
2632 PFNALLOCATOR_ALLOCATEFRAME AllocateFrame
;
2633 PFNALLOCATOR_FREEFRAME FreeFrame
;
2634 } KSSTREAMALLOCATOR_FUNCTIONTABLE
, *PKSSTREAMALLOCATOR_FUNCTIONTABLE
;
2640 KSALLOCATOR_FRAMING Framing
;
2641 ULONG AllocatedFrames
;
2643 } KSSTREAMALLOCATOR_STATUS
, *PKSSTREAMALLOCATOR_STATUS
;
2647 KSALLOCATOR_FRAMING_EX Framing
;
2648 ULONG AllocatedFrames
;
2650 } KSSTREAMALLOCATOR_STATUS_EX
, *PKSSTREAMALLOCATOR_STATUS_EX
;
2655 ULONG TypeSpecificFlags
;
2656 KSTIME PresentationTime
;
2665 } KSSTREAM_HEADER
, *PKSSTREAM_HEADER
;
2667 #define KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT 0x00000001
2668 #define KSSTREAM_HEADER_OPTIONSF_PREROLL 0x00000002
2669 #define KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY 0x00000004
2670 #define KSSTREAM_HEADER_OPTIONSF_TYPECHANGED 0x00000008
2671 #define KSSTREAM_HEADER_OPTIONSF_TIMEVALID 0x00000010
2672 #define KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY 0x00000040
2673 #define KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE 0x00000080
2674 #define KSSTREAM_HEADER_OPTIONSF_DURATIONVALID 0x00000100
2675 #define KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM 0x00000200
2676 #define KSSTREAM_HEADER_OPTIONSF_BUFFEREDTRANSFER 0x00000400
2677 #define KSSTREAM_HEADER_OPTIONSF_VRAM_DATA_TRANSFER 0x00000800
2678 #define KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA 0x80000000
2680 /* ===============================================================
2683 #if defined(_NTDDK_)
2685 PHYSICAL_ADDRESS PhysicalAddress
;
2692 KSSTREAM_POINTER_STATE_UNLOCKED
= 0,
2693 KSSTREAM_POINTER_STATE_LOCKED
2694 } KSSTREAM_POINTER_STATE
;
2696 typedef struct _KSGATE KSGATE
, *PKSGATE
;
2697 typedef struct _KSPROCESSPIN_INDEXENTRY KSPROCESSPIN_INDEXENTRY
, *PKSPROCESSPIN_INDEXENTRY
;
2704 struct _KSSTREAM_POINTER_OFFSET
2706 #if defined(_NTDDK_)
2709 PKSMAPPING Mappings
;
2714 #if !defined(_WIN64)
2720 #if defined(_NTDDK_)
2721 struct _KSSTREAM_POINTER
2725 PKSSTREAM_HEADER StreamHeader
;
2726 PKSSTREAM_POINTER_OFFSET Offset
;
2727 KSSTREAM_POINTER_OFFSET OffsetIn
;
2728 KSSTREAM_POINTER_OFFSET OffsetOut
;
2731 struct _KSPROCESSPIN
2734 PKSSTREAM_POINTER StreamPointer
;
2735 PKSPROCESSPIN InPlaceCounterpart
;
2736 PKSPROCESSPIN DelegateBranch
;
2737 PKSPROCESSPIN CopySource
;
2739 ULONG BytesAvailable
;
2745 struct _KSPROCESSPIN_INDEXENTRY
2747 PKSPROCESSPIN
* Pins
;
2752 /* ===============================================================
2758 #if defined(_NTDDK_)
2760 typedef struct _KSFILTER_DISPATCH KSFILTER_DISPATCH
, *PKSFILTER_DISPATCH
;
2761 typedef struct _KSDEVICE KSDEVICE
, *PKSDEVICE
;
2762 typedef struct _KSFILTER KSFILTER
, *PKSFILTER
;
2763 typedef struct _KSNODE_DESCRIPTOR KSNODE_DESCRIPTOR
, *PKSNODE_DESCRIPTOR
;
2764 typedef struct _KSFILTER_DESCRIPTOR KSFILTER_DESCRIPTOR
, *PKSFILTER_DESCRIPTOR
;
2765 typedef struct _KSDEVICE_DESCRIPTOR KSDEVICE_DESCRIPTOR
, *PKSDEVICE_DESCRIPTOR
;
2767 typedef NTSTATUS (NTAPI
*PFNKSDEVICECREATE
)(
2768 IN PKSDEVICE Device
);
2770 typedef NTSTATUS (NTAPI
*PFNKSDEVICEPNPSTART
)(
2771 IN PKSDEVICE Device
,
2773 IN PCM_RESOURCE_LIST TranslatedResourceList OPTIONAL
,
2774 IN PCM_RESOURCE_LIST UntranslatedResourceList OPTIONAL
);
2776 typedef NTSTATUS (NTAPI
*PFNKSDEVICE
)(
2777 IN PKSDEVICE Device
);
2779 typedef NTSTATUS (NTAPI
*PFNKSDEVICEIRP
)(
2780 IN PKSDEVICE Device
,
2783 typedef VOID (NTAPI
*PFNKSDEVICEIRPVOID
)(
2784 IN PKSDEVICE Device
,
2787 typedef NTSTATUS (NTAPI
*PFNKSDEVICEQUERYCAPABILITIES
)(
2788 IN PKSDEVICE Device
,
2790 IN OUT PDEVICE_CAPABILITIES Capabilities
);
2792 typedef NTSTATUS (NTAPI
*PFNKSDEVICEQUERYPOWER
)(
2793 IN PKSDEVICE Device
,
2795 IN DEVICE_POWER_STATE DeviceTo
,
2796 IN DEVICE_POWER_STATE DeviceFrom
,
2797 IN SYSTEM_POWER_STATE SystemTo
,
2798 IN SYSTEM_POWER_STATE SystemFrom
,
2799 IN POWER_ACTION Action
);
2801 typedef VOID (NTAPI
*PFNKSDEVICESETPOWER
)(
2802 IN PKSDEVICE Device
,
2804 IN DEVICE_POWER_STATE To
,
2805 IN DEVICE_POWER_STATE From
);
2807 typedef struct _KSDEVICE_DISPATCH
{
2808 PFNKSDEVICECREATE Add
;
2809 PFNKSDEVICEPNPSTART Start
;
2810 PFNKSDEVICE PostStart
;
2811 PFNKSDEVICEIRP QueryStop
;
2812 PFNKSDEVICEIRPVOID CancelStop
;
2813 PFNKSDEVICEIRPVOID Stop
;
2814 PFNKSDEVICEIRP QueryRemove
;
2815 PFNKSDEVICEIRPVOID CancelRemove
;
2816 PFNKSDEVICEIRPVOID Remove
;
2817 PFNKSDEVICEQUERYCAPABILITIES QueryCapabilities
;
2818 PFNKSDEVICEIRPVOID SurpriseRemoval
;
2819 PFNKSDEVICEQUERYPOWER QueryPower
;
2820 PFNKSDEVICESETPOWER SetPower
;
2821 PFNKSDEVICEIRP QueryInterface
;
2822 }KSDEVICE_DISPATCH
, *PKSDEVICE_DISPATCH
;
2824 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
2825 #define KSDEVICE_DESCRIPTOR_VERSION_2 (0x110)
2826 #define MIN_DEV_VER_FOR_FLAGS (0x110)
2831 const KSDEVICE_DESCRIPTOR
* Descriptor
;
2834 PDEVICE_OBJECT FunctionalDeviceObject
;
2835 PDEVICE_OBJECT PhysicalDeviceObject
;
2836 PDEVICE_OBJECT NextDeviceObject
;
2838 SYSTEM_POWER_STATE SystemPowerState
;
2839 DEVICE_POWER_STATE DevicePowerState
;
2843 /* ===============================================================
2846 #if defined(_NTDDK_)
2849 const KSFILTER_DESCRIPTOR
* Descriptor
;
2856 (NTAPI
*PFNKSFILTERPOWER
)(
2857 IN PKSFILTER Filter
,
2858 IN DEVICE_POWER_STATE State
2861 typedef NTSTATUS (NTAPI
*PFNKSFILTERIRP
)(
2862 IN PKSFILTER Filter
,
2865 typedef NTSTATUS (NTAPI
*PFNKSFILTERPROCESS
)(
2866 IN PKSFILTER Filter
,
2867 IN PKSPROCESSPIN_INDEXENTRY ProcessPinsIndex
);
2869 typedef NTSTATUS (NTAPI
*PFNKSFILTERVOID
)(
2870 IN PKSFILTER Filter
);
2872 struct _KSFILTER_DISPATCH
2874 PFNKSFILTERIRP Create
;
2875 PFNKSFILTERIRP Close
;
2876 PFNKSFILTERPROCESS Process
;
2877 PFNKSFILTERVOID Reset
;
2880 struct _KSNODE_DESCRIPTOR
2882 const KSAUTOMATION_TABLE
* AutomationTable
;
2887 struct _KSFILTER_DESCRIPTOR
2889 const KSFILTER_DISPATCH
* Dispatch
;
2890 const KSAUTOMATION_TABLE
* AutomationTable
;
2893 const GUID
* ReferenceGuid
;
2894 ULONG PinDescriptorsCount
;
2895 ULONG PinDescriptorSize
;
2896 const KSPIN_DESCRIPTOR_EX
* PinDescriptors
;
2897 ULONG CategoriesCount
;
2898 const GUID
* Categories
;
2899 ULONG NodeDescriptorsCount
;
2900 ULONG NodeDescriptorSize
;
2901 const KSNODE_DESCRIPTOR
* NodeDescriptors
;
2902 ULONG ConnectionsCount
;
2903 const KSTOPOLOGY_CONNECTION
* Connections
;
2904 const KSCOMPONENTID
* ComponentId
;
2907 #define KSFILTER_DESCRIPTOR_VERSION ((ULONG)-1)
2909 struct _KSDEVICE_DESCRIPTOR
2911 const KSDEVICE_DISPATCH
* Dispatch
;
2912 ULONG FilterDescriptorsCount
;
2913 const KSFILTER_DESCRIPTOR
*const* FilterDescriptors
;
2918 struct _KSFILTERFACTORY
{
2919 const KSFILTER_DESCRIPTOR
* FilterDescriptor
;
2924 #define DEFINE_KSFILTER_DESCRIPTOR(descriptor)\
2925 const KSFILTER_DESCRIPTOR descriptor =
2927 #define DEFINE_KSFILTER_PIN_DESCRIPTORS(table)\
2928 SIZEOF_ARRAY(table),\
2932 #define DEFINE_KSFILTER_CATEGORIES(table)\
2933 SIZEOF_ARRAY(table),\
2936 #define DEFINE_KSFILTER_CATEGORY(category)\
2940 #define DEFINE_KSFILTER_CATEGORIES_NULL\
2944 #define DEFINE_KSFILTER_NODE_DESCRIPTORS(table)\
2945 SIZEOF_ARRAY(table),\
2949 #define DEFINE_KSFILTER_NODE_DESCRIPTORS_NULL\
2951 sizeof(KSNODE_DESCRIPTOR),\
2954 #define DEFINE_KSFILTER_CONNECTIONS(table)\
2955 SIZEOF_ARRAY(table),\
2958 #define DEFINE_KSFILTER_DEFAULT_CONNECTIONS\
2963 /* ===============================================================
2964 Minidriver Callbacks
2966 #if defined(_NTDDK_)
2967 typedef NTSTATUS (NTAPI
*KStrMethodHandler
)(
2969 IN PKSIDENTIFIER Request
,
2972 typedef NTSTATUS (NTAPI
*KStrSupportHandler
)(
2974 IN PKSIDENTIFIER Request
,
2978 /* ===============================================================
2981 #if defined(_NTDDK_)
2982 KSDDKAPI NTSTATUS NTAPI
2984 IN HANDLE ConnectionHandle
,
2985 IN PKSALLOCATOR_FRAMING AllocatorFraming
,
2986 OUT PHANDLE AllocatorHandle
);
2988 KSDDKAPI NTSTATUS NTAPI
2989 KsCreateDefaultAllocator(
2992 KSDDKAPI NTSTATUS NTAPI
2993 KsValidateAllocatorCreateRequest(
2995 OUT PKSALLOCATOR_FRAMING
* AllocatorFraming
);
2997 KSDDKAPI NTSTATUS NTAPI
2998 KsCreateDefaultAllocatorEx(
3000 IN PVOID InitializeContext OPTIONAL
,
3001 IN PFNKSDEFAULTALLOCATE DefaultAllocate OPTIONAL
,
3002 IN PFNKSDEFAULTFREE DefaultFree OPTIONAL
,
3003 IN PFNKSINITIALIZEALLOCATOR InitializeAllocator OPTIONAL
,
3004 IN PFNKSDELETEALLOCATOR DeleteAllocator OPTIONAL
);
3006 KSDDKAPI NTSTATUS NTAPI
3007 KsValidateAllocatorFramingEx(
3008 IN PKSALLOCATOR_FRAMING_EX Framing
,
3009 IN ULONG BufferSize
,
3010 IN
const KSALLOCATOR_FRAMING_EX
* PinFraming
);
3013 /* ===============================================================
3016 #if defined(_NTDDK_)
3017 typedef BOOLEAN (NTAPI
*PFNKSSETTIMER
)(
3020 IN LARGE_INTEGER DueTime
,
3023 typedef BOOLEAN (NTAPI
*PFNKSCANCELTIMER
)(
3027 typedef LONGLONG (FASTCALL
*PFNKSCORRELATEDTIME
)(
3029 OUT PLONGLONG SystemTime
);
3031 KSDDKAPI NTSTATUS NTAPI
3033 IN HANDLE ConnectionHandle
,
3034 IN PKSCLOCK_CREATE ClockCreate
,
3035 OUT PHANDLE ClockHandle
);
3037 KSDDKAPI NTSTATUS NTAPI
3038 KsCreateDefaultClock(
3040 IN PKSDEFAULTCLOCK DefaultClock
);
3042 KSDDKAPI NTSTATUS NTAPI
3043 KsAllocateDefaultClock(
3044 OUT PKSDEFAULTCLOCK
* DefaultClock
);
3046 KSDDKAPI NTSTATUS NTAPI
3047 KsAllocateDefaultClockEx(
3048 OUT PKSDEFAULTCLOCK
* DefaultClock
,
3049 IN PVOID Context OPTIONAL
,
3050 IN PFNKSSETTIMER SetTimer OPTIONAL
,
3051 IN PFNKSCANCELTIMER CancelTimer OPTIONAL
,
3052 IN PFNKSCORRELATEDTIME CorrelatedTime OPTIONAL
,
3053 IN
const KSRESOLUTION
* Resolution OPTIONAL
,
3058 IN PKSDEFAULTCLOCK DefaultClock
);
3060 KSDDKAPI NTSTATUS NTAPI
3061 KsValidateClockCreateRequest(
3063 OUT PKSCLOCK_CREATE
* ClockCreate
);
3065 KSDDKAPI KSSTATE NTAPI
3066 KsGetDefaultClockState(
3067 IN PKSDEFAULTCLOCK DefaultClock
);
3070 KsSetDefaultClockState(
3071 IN PKSDEFAULTCLOCK DefaultClock
,
3074 KSDDKAPI LONGLONG NTAPI
3075 KsGetDefaultClockTime(
3076 IN PKSDEFAULTCLOCK DefaultClock
);
3079 KsSetDefaultClockTime(
3080 IN PKSDEFAULTCLOCK DefaultClock
,
3084 /* ===============================================================
3088 /* Method sets - TODO: Make into macros! */
3089 #if defined(_NTDDK_)
3092 KSMETHOD_SET_IRP_STORAGE(
3096 KSMETHOD_ITEM_IRP_STORAGE(
3100 KSMETHOD_TYPE_IRP_STORAGE(
3104 KSDDKAPI NTSTATUS NTAPI
3107 IN ULONG MethodSetsCount
,
3108 IN PKSMETHOD_SET MethodSet
);
3110 KSDDKAPI NTSTATUS NTAPI
3111 KsMethodHandlerWithAllocator(
3113 IN ULONG MethodSetsCount
,
3114 IN PKSMETHOD_SET MethodSet
,
3115 IN PFNKSALLOCATOR Allocator OPTIONAL
,
3116 IN ULONG MethodItemSize OPTIONAL
);
3118 KSDDKAPI BOOLEAN NTAPI
3119 KsFastMethodHandler(
3120 IN PFILE_OBJECT FileObject
,
3121 IN PKSMETHOD UNALIGNED Method
,
3122 IN ULONG MethodLength
,
3123 IN OUT PVOID UNALIGNED Data
,
3124 IN ULONG DataLength
,
3125 OUT PIO_STATUS_BLOCK IoStatus
,
3126 IN ULONG MethodSetsCount
,
3127 IN
const KSMETHOD_SET
* MethodSet
);
3130 /* ===============================================================
3133 #if defined(_NTDDK_)
3134 KSDDKAPI NTSTATUS NTAPI
3137 IN ULONG PropertySetsCount
,
3138 IN
const KSPROPERTY_SET
* PropertySet
);
3140 KSDDKAPI NTSTATUS NTAPI
3141 KsPropertyHandlerWithAllocator(
3143 IN ULONG PropertySetsCount
,
3144 IN PKSPROPERTY_SET PropertySet
,
3145 IN PFNKSALLOCATOR Allocator OPTIONAL
,
3146 IN ULONG PropertyItemSize OPTIONAL
);
3148 KSDDKAPI NTSTATUS NTAPI
3149 KsUnserializeObjectPropertiesFromRegistry(
3150 IN PFILE_OBJECT FileObject
,
3151 IN HANDLE ParentKey OPTIONAL
,
3152 IN PUNICODE_STRING RegistryPath OPTIONAL
);
3154 KSDDKAPI BOOLEAN NTAPI
3155 KsFastPropertyHandler(
3156 IN PFILE_OBJECT FileObject
,
3157 IN PKSPROPERTY UNALIGNED Property
,
3158 IN ULONG PropertyLength
,
3159 IN OUT PVOID UNALIGNED Data
,
3160 IN ULONG DataLength
,
3161 OUT PIO_STATUS_BLOCK IoStatus
,
3162 IN ULONG PropertySetsCount
,
3163 IN
const KSPROPERTY_SET
* PropertySet
);
3166 /* ===============================================================
3170 #if defined(_NTDDK_)
3172 #define KSPROBE_STREAMREAD 0x00000000
3173 #define KSPROBE_STREAMWRITE 0x00000001
3174 #define KSPROBE_ALLOCATEMDL 0x00000010
3175 #define KSPROBE_PROBEANDLOCK 0x00000020
3176 #define KSPROBE_SYSTEMADDRESS 0x00000040
3177 #define KSPROBE_MODIFY 0x00000200
3178 #define KSPROBE_STREAMWRITEMODIFY (KSPROBE_MODIFY | KSPROBE_STREAMWRITE)
3179 #define KSPROBE_ALLOWFORMATCHANGE 0x00000080
3181 #define KSSTREAM_READ KSPROBE_STREAMREAD
3182 #define KSSTREAM_WRITE KSPROBE_STREAMWRITE
3183 #define KSSTREAM_PAGED_DATA 0x00000000
3184 #define KSSTREAM_NONPAGED_DATA 0x00000100
3185 #define KSSTREAM_SYNCHRONOUS 0x00001000
3186 #define KSSTREAM_FAILUREEXCEPTION 0x00002000
3190 (NTAPI
*PFNKSGENERATEEVENTCALLBACK
)(
3192 IN PKSEVENT_ENTRY EventEntry
3195 KSDDKAPI NTSTATUS NTAPI
3197 IN PKSEVENT_ENTRY EntryEvent
);
3202 IN
const GUID
* EventSet OPTIONAL
,
3205 IN PVOID Data OPTIONAL
,
3206 IN PFNKSGENERATEEVENTCALLBACK CallBack OPTIONAL
,
3207 IN PVOID CallBackContext OPTIONAL
3211 KSDDKAPI NTSTATUS NTAPI
3212 KsEnableEventWithAllocator(
3214 IN ULONG EventSetsCount
,
3215 IN PKSEVENT_SET EventSet
,
3216 IN OUT PLIST_ENTRY EventsList OPTIONAL
,
3217 IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL
,
3218 IN PVOID EventsLock OPTIONAL
,
3219 IN PFNKSALLOCATOR Allocator OPTIONAL
,
3220 IN ULONG EventItemSize OPTIONAL
);
3222 KSDDKAPI NTSTATUS NTAPI
3223 KsGenerateDataEvent(
3224 IN PKSEVENT_ENTRY EventEntry
,
3228 KSDDKAPI NTSTATUS NTAPI
3231 IN ULONG EventSetsCount
,
3232 IN KSEVENT_SET
* EventSet
,
3233 IN OUT PLIST_ENTRY EventsList OPTIONAL
,
3234 IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL
,
3235 IN PVOID EventsLock OPTIONAL
);
3239 IN PKSEVENT_ENTRY EventEntry
);
3241 KSDDKAPI NTSTATUS NTAPI
3244 IN OUT PLIST_ENTRY EventsList
,
3245 IN KSEVENTS_LOCKTYPE EventsFlags
,
3246 IN PVOID EventsLock
);
3250 IN PFILE_OBJECT FileObject
,
3251 IN OUT PLIST_ENTRY EventsList
,
3252 IN KSEVENTS_LOCKTYPE EVentsFlags
,
3253 IN PVOID EventsLock
);
3255 /* ===============================================================
3259 KSDDKAPI NTSTATUS NTAPI
3260 KsValidateTopologyNodeCreateRequest(
3262 IN PKSTOPOLOGY Topology
,
3263 OUT PKSNODE_CREATE
* NodeCreate
);
3265 KSDDKAPI NTSTATUS NTAPI
3266 KsCreateTopologyNode(
3267 IN HANDLE ParentHandle
,
3268 IN PKSNODE_CREATE NodeCreate
,
3269 IN ACCESS_MASK DesiredAccess
,
3270 OUT PHANDLE NodeHandle
);
3272 KSDDKAPI NTSTATUS NTAPI
3273 KsTopologyPropertyHandler(
3275 IN PKSPROPERTY Property
,
3277 IN
const KSTOPOLOGY
* Topology
);
3281 /* ===============================================================
3282 Connectivity Functions
3285 KSDDKAPI NTSTATUS NTAPI
3287 IN HANDLE FilterHandle
,
3288 IN PKSPIN_CONNECT Connect
,
3289 IN ACCESS_MASK DesiredAccess
,
3290 OUT PHANDLE ConnectionHandle
);
3292 KSDDKAPI NTSTATUS NTAPI
3293 KsValidateConnectRequest(
3295 IN ULONG DescriptorsCount
,
3296 IN KSPIN_DESCRIPTOR
* Descriptor
,
3297 OUT PKSPIN_CONNECT
* Connect
);
3299 KSDDKAPI NTSTATUS NTAPI
3300 KsPinPropertyHandler(
3302 IN PKSPROPERTY Property
,
3304 IN ULONG DescriptorsCount
,
3305 IN
const KSPIN_DESCRIPTOR
* Descriptor
);
3307 KSDDKAPI NTSTATUS NTAPI
3308 KsPinDataIntersection(
3312 IN ULONG DescriptorsCount
,
3313 IN
const KSPIN_DESCRIPTOR
* Descriptor
,
3314 IN PFNKSINTERSECTHANDLER IntersectHandler
);
3316 KSDDKAPI NTSTATUS NTAPI
3317 KsPinDataIntersectionEx(
3321 IN ULONG DescriptorsCount
,
3322 IN
const KSPIN_DESCRIPTOR
* Descriptor
,
3323 IN ULONG DescriptorSize
,
3324 IN PFNKSINTERSECTHANDLEREX IntersectHandler OPTIONAL
,
3325 IN PVOID HandlerContext OPTIONAL
);
3327 KSDDKAPI PKSFILTER NTAPI
3328 KsPinGetParentFilter(
3332 KSDDKAPI PKSPIN NTAPI
3333 KsPinGetNextSiblingPin(
3338 /* Does this belong here? */
3340 KSDDKAPI NTSTATUS NTAPI
3341 KsHandleSizedListQuery(
3343 IN ULONG DataItemsCount
,
3344 IN ULONG DataItemSize
,
3345 IN
const VOID
* DataItems
);
3348 /* ===============================================================
3349 IRP Helper Functions
3352 typedef NTSTATUS (NTAPI
*PFNKSIRPLISTCALLBACK
)(
3356 KSDDKAPI NTSTATUS NTAPI
3357 KsAcquireResetValue(
3359 OUT KSRESET
* ResetValue
);
3362 KsAddIrpToCancelableQueue(
3363 IN OUT PLIST_ENTRY QueueHead
,
3364 IN PKSPIN_LOCK SpinLock
,
3366 IN KSLIST_ENTRY_LOCATION ListLocation
,
3367 IN PDRIVER_CANCEL DriverCancel OPTIONAL
);
3369 KSDDKAPI NTSTATUS NTAPI
3370 KsAddObjectCreateItemToDeviceHeader(
3371 IN KSDEVICE_HEADER Header
,
3372 IN PDRIVER_DISPATCH Create
,
3374 IN PWCHAR ObjectClass
,
3375 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
3377 KSDDKAPI NTSTATUS NTAPI
3378 KsAddObjectCreateItemToObjectHeader(
3379 IN KSOBJECT_HEADER Header
,
3380 IN PDRIVER_DISPATCH Create
,
3382 IN PWCHAR ObjectClass
,
3383 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
3385 KSDDKAPI NTSTATUS NTAPI
3386 KsAllocateDeviceHeader(
3387 OUT KSDEVICE_HEADER
* Header
,
3388 IN ULONG ItemsCount
,
3389 IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL
);
3391 KSDDKAPI NTSTATUS NTAPI
3392 KsAllocateExtraData(
3395 OUT PVOID
* ExtraBuffer
);
3397 KSDDKAPI NTSTATUS NTAPI
3398 KsAllocateObjectCreateItem(
3399 IN KSDEVICE_HEADER Header
,
3400 IN PKSOBJECT_CREATE_ITEM CreateItem
,
3401 IN BOOLEAN AllocateEntry
,
3402 IN PFNKSITEMFREECALLBACK ItemFreeCallback OPTIONAL
);
3404 KSDDKAPI NTSTATUS NTAPI
3405 KsAllocateObjectHeader(
3406 OUT KSOBJECT_HEADER
*Header
,
3407 IN ULONG ItemsCount
,
3408 IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL
,
3410 IN KSDISPATCH_TABLE
* Table
);
3414 IN OUT PLIST_ENTRY QueueHead
,
3415 IN PKSPIN_LOCK SpinLock
);
3419 IN PDEVICE_OBJECT DeviceObject
,
3422 KSDDKAPI NTSTATUS NTAPI
3423 KsDefaultDeviceIoCompletion(
3424 IN PDEVICE_OBJECT DeviceObject
,
3428 KSDDKAPI ULONG NTAPI
3429 KsDecrementCountedWorker(
3430 IN PKSWORKER Worker);
3433 KSDDKAPI BOOLEAN NTAPI
3434 KsDispatchFastIoDeviceControlFailure(
3435 IN PFILE_OBJECT FileObject
,
3437 IN PVOID InputBuffer OPTIONAL
,
3438 IN ULONG InputBufferLength
,
3439 OUT PVOID OutputBuffer OPTIONAL
,
3440 IN ULONG OutputBufferLength
,
3441 IN ULONG IoControlCode
,
3442 OUT PIO_STATUS_BLOCK IoStatus
,
3443 IN PDEVICE_OBJECT DeviceObject
); /* always return false */
3445 KSDDKAPI BOOLEAN NTAPI
3446 KsDispatchFastReadFailure(
3447 IN PFILE_OBJECT FileObject
,
3448 IN PLARGE_INTEGER FileOffset
,
3453 OUT PIO_STATUS_BLOCK IoStatus
,
3454 IN PDEVICE_OBJECT DeviceObject
); /* always return false */
3456 /* This function does the same as the above */
3457 #define KsDispatchFastWriteFailure KsDispatchFastReadFailure
3459 KSDDKAPI NTSTATUS NTAPI
3460 KsDispatchInvalidDeviceRequest(
3461 IN PDEVICE_OBJECT DeviceObject
,
3464 KSDDKAPI NTSTATUS NTAPI
3466 IN PDEVICE_OBJECT DeviceObject
,
3469 KSDDKAPI NTSTATUS NTAPI
3470 KsDispatchSpecificMethod(
3472 IN PFNKSHANDLER Handler
);
3474 KSDDKAPI NTSTATUS NTAPI
3475 KsDispatchSpecificProperty(
3477 IN PFNKSHANDLER Handler
);
3479 KSDDKAPI NTSTATUS NTAPI
3480 KsForwardAndCatchIrp(
3481 IN PDEVICE_OBJECT DeviceObject
,
3483 IN PFILE_OBJECT FileObject
,
3484 IN KSSTACK_USE StackUse
);
3486 KSDDKAPI NTSTATUS NTAPI
3489 IN PFILE_OBJECT FileObject
,
3490 IN BOOLEAN ReuseStackLocation
);
3494 IN KSDEVICE_HEADER Header
);
3500 KSDDKAPI NTSTATUS NTAPI
3501 KsGetChildCreateParameter(
3503 OUT PVOID
* CreateParameter
);
3505 KSDDKAPI NTSTATUS NTAPI
3506 KsMoveIrpsOnCancelableQueue(
3507 IN OUT PLIST_ENTRY SourceList
,
3508 IN PKSPIN_LOCK SourceLock
,
3509 IN OUT PLIST_ENTRY DestinationList
,
3510 IN PKSPIN_LOCK DestinationLock OPTIONAL
,
3511 IN KSLIST_ENTRY_LOCATION ListLocation
,
3512 IN PFNKSIRPLISTCALLBACK ListCallback
,
3515 KSDDKAPI NTSTATUS NTAPI
3518 IN ULONG ProbeFlags
,
3519 IN ULONG HeaderSize
);
3521 KSDDKAPI NTSTATUS NTAPI
3522 KsQueryInformationFile(
3523 IN PFILE_OBJECT FileObject
,
3524 OUT PVOID FileInformation
,
3526 IN FILE_INFORMATION_CLASS FileInformationClass
);
3528 KSDDKAPI ACCESS_MASK NTAPI
3529 KsQueryObjectAccessMask(
3530 IN KSOBJECT_HEADER Header
);
3532 KSDDKAPI PKSOBJECT_CREATE_ITEM NTAPI
3533 KsQueryObjectCreateItem(
3534 IN KSOBJECT_HEADER Header
);
3536 KSDDKAPI NTSTATUS NTAPI
3538 IN PFILE_OBJECT FileObject
,
3539 IN PKEVENT Event OPTIONAL
,
3540 IN PVOID PortContext OPTIONAL
,
3541 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3544 IN ULONG Key OPTIONAL
,
3545 IN KPROCESSOR_MODE RequestorMode
);
3548 KsReleaseIrpOnCancelableQueue(
3550 IN PDRIVER_CANCEL DriverCancel OPTIONAL
);
3553 KsRemoveIrpFromCancelableQueue(
3554 IN OUT PLIST_ENTRY QueueHead
,
3555 IN PKSPIN_LOCK SpinLock
,
3556 IN KSLIST_ENTRY_LOCATION ListLocation
,
3557 IN KSIRP_REMOVAL_OPERATION RemovalOperation
);
3560 KsRemoveSpecificIrpFromCancelableQueue(
3563 KSDDKAPI NTSTATUS NTAPI
3564 KsSetInformationFile(
3565 IN PFILE_OBJECT FileObject
,
3566 IN PVOID FileInformation
,
3568 IN FILE_INFORMATION_CLASS FileInformationClass
);
3570 KSDDKAPI NTSTATUS NTAPI
3571 KsSetMajorFunctionHandler(
3572 IN PDRIVER_OBJECT DriverObject
,
3573 IN ULONG MajorFunction
);
3575 KSDDKAPI NTSTATUS NTAPI
3577 IN PFILE_OBJECT FileObject
,
3578 IN PKEVENT Event OPTIONAL
,
3579 IN PVOID PortContext OPTIONAL
,
3580 IN PIO_COMPLETION_ROUTINE CompletionRoutine OPTIONAL
,
3581 IN PVOID CompletionContext OPTIONAL
,
3582 IN KSCOMPLETION_INVOCATION CompletionInvocationFlags OPTIONAL
,
3583 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3584 IN OUT PVOID StreamHeaders
,
3587 IN KPROCESSOR_MODE RequestorMode
);
3589 KSDDKAPI NTSTATUS NTAPI
3591 IN PFILE_OBJECT FileObject
,
3592 IN PKEVENT Event OPTIONAL
,
3593 IN PVOID PortContext OPTIONAL
,
3594 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3597 IN ULONG Key OPTIONAL
,
3598 IN KPROCESSOR_MODE RequestorMode
);
3601 KSDDKAPI NTSTATUS NTAPI
3602 KsDefaultForwardIrp(
3603 IN PDEVICE_OBJECT DeviceObject
,
3606 /* ===============================================================
3607 Worker Management Functions
3610 KSDDKAPI NTSTATUS NTAPI
3612 IN WORK_QUEUE_TYPE WorkQueueType
,
3613 OUT PKSWORKER
* Worker
);
3617 IN PKSWORKER Worker
);
3619 KSDDKAPI NTSTATUS NTAPI
3620 KsRegisterCountedWorker(
3621 IN WORK_QUEUE_TYPE WorkQueueType
,
3622 IN PWORK_QUEUE_ITEM CountedWorkItem
,
3623 OUT PKSWORKER
* Worker
);
3625 KSDDKAPI ULONG NTAPI
3626 KsDecrementCountedWorker(
3627 IN PKSWORKER Worker
);
3629 KSDDKAPI ULONG NTAPI
3630 KsIncrementCountedWorker(
3631 IN PKSWORKER Worker
);
3633 KSDDKAPI NTSTATUS NTAPI
3635 IN PKSWORKER Worker
,
3636 IN PWORK_QUEUE_ITEM WorkItem
);
3639 /* ===============================================================
3643 KSDDKAPI NTSTATUS NTAPI
3646 IN POOL_TYPE PoolType
,
3647 IN ULONG_PTR ResourceName
,
3648 IN ULONG ResourceType
,
3649 OUT PVOID
* Resource
,
3650 OUT PULONG ResourceSize
);
3653 KSDDKAPI NTSTATUS NTAPI
3654 KsGetImageNameAndResourceId(
3656 OUT PUNICODE_STRING ImageName,
3657 OUT PULONG_PTR ResourceId,
3658 OUT PULONG ValueType);
3660 KSDDKAPI NTSTATUS NTAPI
3662 IN PDEVICE_OBJECT PhysicalDeviceObject,
3663 IN PUNICODE_STRING ModuleName,
3664 OUT PUNICODE_STRING ImageName,
3665 OUT PULONG_PTR ResourceId,
3666 OUT PULONG ValueType);
3670 /* ===============================================================
3671 Misc. Helper Functions
3674 KSDDKAPI PVOID NTAPI
3679 KSDDKAPI NTSTATUS NTAPI
3681 IN PUNICODE_STRING SymbolicLink
,
3682 IN PKSPIN_MEDIUM Medium
,
3683 IN ULONG PinDirection
);
3685 KSDDKAPI NTSTATUS NTAPI
3686 KsDefaultDispatchPnp(
3687 IN PDEVICE_OBJECT DeviceObject
,
3691 KsSetDevicePnpAndBaseObject(
3692 IN KSDEVICE_HEADER Header
,
3693 IN PDEVICE_OBJECT PnpDeviceObject
,
3694 IN PDEVICE_OBJECT BaseDevice
);
3696 KSDDKAPI NTSTATUS NTAPI
3697 KsDefaultDispatchPower(
3698 IN PDEVICE_OBJECT DeviceObject
,
3703 IN KSOBJECT_HEADER Header
,
3704 IN PFNKSCONTEXT_DISPATCH PowerDispatch OPTIONAL
,
3705 IN PVOID PowerContext OPTIONAL
);
3707 KSDDKAPI NTSTATUS NTAPI
3708 KsReferenceBusObject(
3709 IN KSDEVICE_HEADER Header
);
3712 KsDereferenceBusObject(
3713 IN KSDEVICE_HEADER Header
);
3715 KSDDKAPI NTSTATUS NTAPI
3716 KsFreeObjectCreateItem(
3717 IN KSDEVICE_HEADER Header
,
3718 IN PUNICODE_STRING CreateItem
);
3720 KSDDKAPI NTSTATUS NTAPI
3721 KsFreeObjectCreateItemsByContext(
3722 IN KSDEVICE_HEADER Header
,
3727 IN PDRIVER_OBJECT DriverObject
);
3729 KSDDKAPI PDEVICE_OBJECT NTAPI
3730 KsQueryDevicePnpObject(
3731 IN KSDEVICE_HEADER Header
);
3734 KsRecalculateStackDepth(
3735 IN KSDEVICE_HEADER Header
,
3736 IN BOOLEAN ReuseStackLocation
);
3739 KsSetTargetDeviceObject(
3740 IN KSOBJECT_HEADER Header
,
3741 IN PDEVICE_OBJECT TargetDevice OPTIONAL
);
3745 IN KSOBJECT_HEADER Header
,
3746 IN KSTARGET_STATE TargetState
);
3748 KSDDKAPI NTSTATUS NTAPI
3749 KsSynchronousIoControlDevice(
3750 IN PFILE_OBJECT FileObject
,
3751 IN KPROCESSOR_MODE RequestorMode
,
3755 OUT PVOID OutBuffer
,
3757 OUT PULONG BytesReturned
);
3762 KsFilterGetFirstChildPin(
3763 IN PKSFILTER Filter
,
3770 KsPinGetConnectedPinFileObject(
3780 IN HANDLE FilterHandle
,
3781 IN PKSPIN_CONNECT Connect
,
3782 IN ACCESS_MASK DesiredAccess
,
3783 OUT PHANDLE ConnectionHandle
3789 /* ===============================================================
3790 AVStream Functions (XP / DirectX 8)
3792 http://www.osronline.com/ddkx/stream/avstream_5q9f.htm
3795 #if defined(_NTDDK_)
3800 KsMergeAutomationTables(
3801 OUT PKSAUTOMATION_TABLE
* AutomationTableAB
,
3802 IN PKSAUTOMATION_TABLE AutomationTableA OPTIONAL
,
3803 IN PKSAUTOMATION_TABLE AutomationTableB OPTIONAL
,
3804 IN KSOBJECT_BAG Bag OPTIONAL
3811 IN PDRIVER_OBJECT DriverObject
,
3812 IN PUNICODE_STRING RegistryPath
,
3813 IN
const KSDEVICE_DESCRIPTOR
*Descriptor OPTIONAL
);
3815 typedef struct _KSFILTERFACTORY KSFILTERFACTORY
, *PKSFILTERFACTORY
; //FIXME
3822 KsInitializeDevice (
3823 IN PDEVICE_OBJECT FunctionalDeviceObject
,
3824 IN PDEVICE_OBJECT PhysicalDeviceObject
,
3825 IN PDEVICE_OBJECT NextDeviceObject
,
3826 IN
const KSDEVICE_DESCRIPTOR
* Descriptor OPTIONAL
);
3829 typedef void (NTAPI
*PFNKSFILTERFACTORYPOWER
)(
3830 IN PKSFILTERFACTORY FilterFactory
,
3831 IN DEVICE_POWER_STATE State
);
3837 IN KSOBJECT_BAG ObjectBag
,
3838 IN OUT PVOID
* PointerToPointerToItem
,
3853 IN PKSDEVICE Device
);
3859 IN PDRIVER_OBJECT DriverObject
,
3860 IN PDEVICE_OBJECT PhysicalDeviceObject
);
3867 IN PKSEVENT_ENTRY EventEntry
);
3872 KsAddItemToObjectBag(
3873 IN KSOBJECT_BAG ObjectBag
,
3875 IN PFNKSFREE Free OPTIONAL
);
3880 KsRemoveItemFromObjectBag(
3881 IN KSOBJECT_BAG ObjectBag
,
3888 KsAllocateObjectBag(
3889 IN PKSDEVICE Device
,
3890 OUT KSOBJECT_BAG
* ObjectBag
);
3896 IN KSOBJECT_BAG ObjectBag
3902 KsCompletePendingRequest(
3908 KsCopyObjectBagItems(
3909 IN KSOBJECT_BAG ObjectBagDestination
,
3910 IN KSOBJECT_BAG ObjectBagSource
);
3916 IN PDRIVER_OBJECT DriverObject
,
3917 IN PDEVICE_OBJECT PhysicalDeviceObject
,
3918 IN
const KSDEVICE_DESCRIPTOR
* Descriptor OPTIONAL
,
3919 IN ULONG ExtensionSize OPTIONAL
,
3920 OUT PKSDEVICE
* Device OPTIONAL
);
3925 KsCreateFilterFactory(
3926 IN PDEVICE_OBJECT DeviceObject
,
3927 IN
const KSFILTER_DESCRIPTOR
* Descriptor
,
3928 IN PWCHAR RefString OPTIONAL
,
3929 IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL
,
3930 IN ULONG CreateItemFlags
,
3931 IN PFNKSFILTERFACTORYPOWER SleepCallback OPTIONAL
,
3932 IN PFNKSFILTERFACTORYPOWER WakeCallback OPTIONAL
,
3933 OUT PKSFILTERFACTORY
*FilterFactory OPTIONAL
);
3938 KsFilterFactoryUpdateCacheData(
3939 IN PKSFILTERFACTORY FilterFactory
,
3940 IN
const KSFILTER_DESCRIPTOR
*FilterDescriptor OPTIONAL
3960 KsDefaultAddEventHandler(
3962 IN PKSEVENTDATA EventData
,
3963 IN OUT PKSEVENT_ENTRY EventEntry
);
3968 KsDispatchQuerySecurity(
3969 IN PDEVICE_OBJECT DeviceObject
,
3976 KsDispatchSetSecurity(
3977 IN PDEVICE_OBJECT DeviceObject
,
3992 KsFilterGetParentFilterFactory(
3996 return (PKSFILTERFACTORY
) KsGetParent((PVOID
) Filter
);
4002 KsFilterFactoryGetParentDevice(
4003 IN PKSFILTERFACTORY FilterFactory
4006 return (PKSDEVICE
) KsGetParent((PVOID
) FilterFactory
);
4011 #define KsDeleteFilterFactory(FilterFactory) \
4012 KsFreeObjectCreateItemsByContext( \
4013 *(KSDEVICE_HEADER *)( \
4014 KsFilterFactoryGetParentDevice(FilterFactory)->FunctionalDeviceObject-> \
4022 IN PKSDEVICE Device
,
4039 KsDeviceGetFirstChildFilterFactory(
4040 IN PKSDEVICE Device
);
4042 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
4054 KsDeviceGetOuterUnknown(
4055 IN PKSDEVICE Device
)
4057 return KsGetOuterUnknown((PVOID
) Device
);
4063 KsDeviceRegisterAggregatedClientUnknown(
4064 IN PKSDEVICE Device
,
4065 IN PUNKNOWN ClientUnknown
);
4070 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
4072 typedef interface IKsReferenceClock
* PIKSREFERENCECLOCK
;
4075 #define INTERFACE IKsReferenceClock
4076 DECLARE_INTERFACE_(IKsReferenceClock
,IUnknown
)
4078 DEFINE_ABSTRACT_UNKNOWN() // For C
4080 STDMETHOD_(LONGLONG
,GetTime
)(THIS
4082 STDMETHOD_(LONGLONG
,GetPhysicalTime
)(THIS
4084 STDMETHOD_(LONGLONG
,GetCorrelatedTime
)(THIS_
4085 OUT PLONGLONG SystemTime
4087 STDMETHOD_(LONGLONG
,GetCorrelatedPhysicalTime
)(THIS_
4088 OUT PLONGLONG SystemTime
4090 STDMETHOD_(NTSTATUS
, GetResolution
)(THIS_
4091 OUT PKSRESOLUTION Resolution
4093 STDMETHOD_(NTSTATUS
, GetState
)(THIS_
4099 #define INTERFACE IKsControl
4101 DEFINE_GUID(IID_IKsControl
, 0x28F54685L
, 0x06FD, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96);
4103 DECLARE_INTERFACE_(IKsControl
,IUnknown
)
4105 STDMETHOD_(NTSTATUS
, QueryInterface
)( THIS_
4107 PVOID
* Interface
)PURE
;
4109 STDMETHOD_(ULONG
, AddRef
)(THIS
) PURE
;
4111 STDMETHOD_(ULONG
, Release
)(THIS
) PURE
;
4113 STDMETHOD_(NTSTATUS
, KsProperty
)(THIS_
4114 IN PKSPROPERTY Property
,
4115 IN ULONG PropertyLength
,
4116 IN OUT PVOID PropertyData
,
4117 IN ULONG DataLength
,
4118 OUT ULONG
* BytesReturned
4120 STDMETHOD_(NTSTATUS
, KsMethod
)(THIS_
4121 IN PKSMETHOD Method
,
4122 IN ULONG MethodLength
,
4123 IN OUT PVOID MethodData
,
4124 IN ULONG DataLength
,
4125 OUT ULONG
* BytesReturned
4127 STDMETHOD_(NTSTATUS
, KsEvent
)(THIS_
4128 IN PKSEVENT Event OPTIONAL
,
4129 IN ULONG EventLength
,
4130 IN OUT PVOID EventData
,
4131 IN ULONG DataLength
,
4132 OUT ULONG
* BytesReturned
4137 typedef IKsControl
* PIKSCONTROL
;
4144 KsDeviceRegisterAdapterObject(
4145 IN PKSDEVICE Device
,
4146 IN PADAPTER_OBJECT AdapterObject
,
4147 IN ULONG MaxMappingByteCount
,
4148 IN ULONG MappingTableStride
);
4154 IN PKSDEVICE Device
,
4168 #define KsDiscard(object, pointer) \
4169 KsRemoveItemFromObjectBag(object->Bag, pointer, TRUE)
4171 #define KsFilterAcquireControl(Filter) \
4172 KsAcquireControl((PVOID) Filter);
4174 #define KsFilterReleaseControl(Filter) \
4175 KsReleaseControl((PVOID) Filter);
4177 #define KsFilterAddEvent(Filter, EventEntry) \
4178 KsAddEvent(Filter,EventEntry);
4183 KsFilterAcquireProcessingMutex(
4184 IN PKSFILTER Filter
);
4190 KsFilterAddTopologyConnections(
4191 IN PKSFILTER Filter
,
4192 IN ULONG NewConnectionsCount
,
4193 IN
const KSTOPOLOGY_CONNECTION
*const NewTopologyConnections
);
4198 KsFilterAttemptProcessing(
4199 IN PKSFILTER Filter
,
4200 IN BOOLEAN Asynchronous
);
4206 IN PKSFILTER Filter
,
4207 IN
const KSNODE_DESCRIPTOR
*const NodeDescriptor
,
4213 KsFilterCreatePinFactory(
4214 IN PKSFILTER Filter
,
4215 IN
const KSPIN_DESCRIPTOR_EX
*const PinDescriptor
,
4221 KsFilterFactoryGetDevice(
4222 IN PKSFILTERFACTORY FilterFactory
);
4225 #endif /* avstream */