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) __uidof(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 /* ===============================================================
102 #define IOCTL_KS_DISABLE_EVENT \
109 #define IOCTL_KS_ENABLE_EVENT \
117 #define IOCTL_KS_METHOD \
125 #define IOCTL_KS_PROPERTY \
132 #define IOCTL_KS_WRITE_STREAM \
139 #define IOCTL_KS_READ_STREAM \
146 #define IOCTL_KS_RESET_STATE \
154 /* ===============================================================
158 #define STATIC_KSCATEGORY_BRIDGE \
159 0x085AFF00L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
160 DEFINE_GUIDSTRUCT("085AFF00-62CE-11CF-A5D6-28DB04C10000", KSCATEGORY_BRIDGE
);
161 #define KSCATEGORY_BRIDGE DEFINE_GUIDNAMED(KSCATEGORY_BRIDGE)
163 #define STATIC_KSCATEGORY_CAPTURE \
164 0x65E8773DL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
165 DEFINE_GUIDSTRUCT("65E8773D-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_CAPTURE
);
166 #define KSCATEGORY_CAPTURE DEFINE_GUIDNAMED(KSCATEGORY_CAPTURE)
168 #define STATIC_KSCATEGORY_RENDER \
169 0x65E8773EL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
170 DEFINE_GUIDSTRUCT("65E8773E-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_RENDER
);
171 #define KSCATEGORY_RENDER DEFINE_GUIDNAMED(KSCATEGORY_RENDER)
173 #define STATIC_KSCATEGORY_MIXER \
174 0xAD809C00L, 0x7B88, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
175 DEFINE_GUIDSTRUCT("AD809C00-7B88-11D0-A5D6-28DB04C10000", KSCATEGORY_MIXER
);
176 #define KSCATEGORY_MIXER DEFINE_GUIDNAMED(KSCATEGORY_MIXER)
178 #define STATIC_KSCATEGORY_SPLITTER \
179 0x0A4252A0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
180 DEFINE_GUIDSTRUCT("0A4252A0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_SPLITTER
);
181 #define KSCATEGORY_SPLITTER DEFINE_GUIDNAMED(KSCATEGORY_SPLITTER)
183 #define STATIC_KSCATEGORY_DATACOMPRESSOR \
184 0x1E84C900L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
185 DEFINE_GUIDSTRUCT("1E84C900-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATACOMPRESSOR
);
186 #define KSCATEGORY_DATACOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATACOMPRESSOR)
188 #define STATIC_KSCATEGORY_DATADECOMPRESSOR \
189 0x2721AE20L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
190 DEFINE_GUIDSTRUCT("2721AE20-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATADECOMPRESSOR
);
191 #define KSCATEGORY_DATADECOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATADECOMPRESSOR)
193 #define STATIC_KSCATEGORY_DATATRANSFORM \
194 0x2EB07EA0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
195 DEFINE_GUIDSTRUCT("2EB07EA0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATATRANSFORM
);
196 #define KSCATEGORY_DATATRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_DATATRANSFORM)
198 #define STATIC_KSCATEGORY_COMMUNICATIONSTRANSFORM \
199 0xCF1DDA2CL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
200 DEFINE_GUIDSTRUCT("CF1DDA2C-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_COMMUNICATIONSTRANSFORM
);
201 #define KSCATEGORY_COMMUNICATIONSTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_COMMUNICATIONSTRANSFORM)
203 #define STATIC_KSCATEGORY_INTERFACETRANSFORM \
204 0xCF1DDA2DL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
205 DEFINE_GUIDSTRUCT("CF1DDA2D-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_INTERFACETRANSFORM
);
206 #define KSCATEGORY_INTERFACETRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_INTERFACETRANSFORM)
208 #define STATIC_KSCATEGORY_MEDIUMTRANSFORM \
209 0xCF1DDA2EL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
210 DEFINE_GUIDSTRUCT("CF1DDA2E-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_MEDIUMTRANSFORM
);
211 #define KSCATEGORY_MEDIUMTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_MEDIUMTRANSFORM)
213 #define STATIC_KSCATEGORY_FILESYSTEM \
214 0x760FED5EL, 0x9357, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
215 DEFINE_GUIDSTRUCT("760FED5E-9357-11D0-A3CC-00A0C9223196", KSCATEGORY_FILESYSTEM
);
216 #define KSCATEGORY_FILESYSTEM DEFINE_GUIDNAMED(KSCATEGORY_FILESYSTEM)
218 #define STATIC_KSCATEGORY_CLOCK \
219 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
220 DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000", KSCATEGORY_CLOCK
);
221 #define KSCATEGORY_CLOCK DEFINE_GUIDNAMED(KSCATEGORY_CLOCK)
223 #define STATIC_KSCATEGORY_PROXY \
224 0x97EBAACAL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
225 DEFINE_GUIDSTRUCT("97EBAACA-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_PROXY
);
226 #define KSCATEGORY_PROXY DEFINE_GUIDNAMED(KSCATEGORY_PROXY)
228 #define STATIC_KSCATEGORY_QUALITY \
229 0x97EBAACBL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
230 DEFINE_GUIDSTRUCT("97EBAACB-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_QUALITY
);
231 #define KSCATEGORY_QUALITY DEFINE_GUIDNAMED(KSCATEGORY_QUALITY)
233 /* ===============================================================
242 } KSIDENTIFIER
, *PKSIDENTIFIER
;
244 typedef KSIDENTIFIER KSPROPERTY
, *PKSPROPERTY
;
245 typedef KSIDENTIFIER KSMETHOD
, *PKSMETHOD
;
246 typedef KSIDENTIFIER KSEVENT
, *PKSEVENT
;
248 typedef KSIDENTIFIER KSDEGRADE
, *PKSDEGRADE
;
250 typedef KSIDENTIFIER KSPIN_INTERFACE
, *PKSPIN_INTERFACE
;
251 typedef KSIDENTIFIER KSPIN_MEDIUM
, *PKSPIN_MEDIUM
;
264 } KSDATAFORMAT
, *PKSDATAFORMAT
, KSDATARANGE
, *PKSDATARANGE
;
272 } KSATTRIBUTE
, *PKSATTRIBUTE
;
276 /* ===============================================================
277 Interface Sets - TODO
281 #define KSINTERFACESETID_Media
283 #define KSINTERFACESETID_Standard
284 #define KSINTERFACE_STANDARD_STREAMING
285 #define KSINTERFACE_STANDARD_LOOPED_STREAMING
286 #define KSINTERFACE_STANDARD_CONTROL
289 #define STATIC_KSINTERFACESETID_Standard \
290 0x1A8766A0L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
291 DEFINE_GUIDSTRUCT("1A8766A0-62CE-11CF-A5D6-28DB04C10000", KSINTERFACESETID_Standard
);
292 #define KSINTERFACESETID_Standard DEFINE_GUIDNAMED(KSINTERFACESETID_Standard)
296 KSINTERFACE_STANDARD_STREAMING
,
297 KSINTERFACE_STANDARD_LOOPED_STREAMING
,
298 KSINTERFACE_STANDARD_CONTROL
299 } KSINTERFACE_STANDARD
;
301 #define STATIC_KSINTERFACESETID_FileIo \
302 0x8C6F932CL, 0xE771, 0x11D0, 0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
303 DEFINE_GUIDSTRUCT("8C6F932C-E771-11D0-B8FF-00A0C9223196", KSINTERFACESETID_FileIo
);
304 #define KSINTERFACESETID_FileIo DEFINE_GUIDNAMED(KSINTERFACESETID_FileIo)
307 /* ===============================================================
313 KSINTERFACE_FILEIO_STREAMING
314 } KSINTERFACE_FILEIO
;
316 #define KSMEDIUM_TYPE_ANYINSTANCE 0
318 #define STATIC_KSMEDIUMSETID_Standard \
319 0x4747B320L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
320 DEFINE_GUIDSTRUCT("4747B320-62CE-11CF-A5D6-28DB04C10000", KSMEDIUMSETID_Standard
);
321 #define KSMEDIUMSETID_Standard DEFINE_GUIDNAMED(KSMEDIUMSETID_Standard)
324 /* ===============================================================
325 Clock Properties/Methods/Events
328 #define KSPROPSETID_Clock \
329 0xDF12A4C0L, 0xAC17, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
333 KSPROPERTY_CLOCK_TIME
,
334 KSPROPERTY_CLOCK_PHYSICALTIME
,
335 KSPROPERTY_CORRELATEDTIME
,
336 KSPROPERTY_CORRELATEDPHYSICALTIME
,
337 KSPROPERTY_CLOCK_RESOLUTION
,
338 KSPROPERTY_CLOCK_STATE
,
339 KSPROPERTY_CLOCK_FUNCTIONTABLE
342 #define KSEVENTSETID_Clock \
343 0x364D8E20L, 0x62C7, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
347 KSEVENT_CLOCK_INTERVAL_MARK
,
348 KSEVENT_CLOCK_POSITION_MARK
349 } KSEVENT_CLOCK_POSITION
;
352 /* ===============================================================
353 Connection Properties/Methods/Events
356 #define STATIC_KSPROPSETID_Connection \
357 0x1D58C920L, 0xAC9B, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
358 DEFINE_GUIDSTRUCT("1D58C920-AC9B-11CF-A5D6-28DB04C10000", KSPROPSETID_Connection
);
359 #define KSPROPSETID_Connection DEFINE_GUIDNAMED(KSPROPSETID_Connection)
364 KSPROPERTY_CONNECTION_STATE
,
365 KSPROPERTY_CONNECTION_PRIORITY
,
366 KSPROPERTY_CONNECTION_DATAFORMAT
,
367 KSPROPERTY_CONNECTION_ALLOCATORFRAMING
,
368 KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT
,
369 KSPROPERTY_CONNECTION_ACQUIREORDERING
,
370 KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX
,
371 KSPROPERTY_CONNECTION_STARTAT
372 } KSPROPERTY_CONNECTION
;
374 #define KSEVENTSETID_Connection \
375 0x7f4bcbe0L, 0x9ea5, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00
379 KSEVENT_CONNECTION_POSITIONUPDATE
,
380 KSEVENT_CONNECTION_DATADISCONTINUITY
,
381 KSEVENT_CONNECTION_TIMEDISCONTINUITY
,
382 KSEVENT_CONNECTION_PRIORITY
,
383 KSEVENT_CONNECTION_ENDOFSTREAM
384 } KSEVENT_CONNECTION
;
387 /* ===============================================================
389 Properties/Methods/Events
392 #define STATIC_KSPROPSETID_General\
393 0x1464EDA5L, 0x6A8F, 0x11D1, {0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
394 DEFINE_GUIDSTRUCT("1464EDA5-6A8F-11D1-9AA7-00A0C9223196", KSPROPSETID_General
);
395 #define KSPROPSETID_General DEFINE_GUIDNAMED(KSPROPSETID_General)
400 KSPROPERTY_GENERAL_COMPONENTID
401 } KSPROPERTY_GENERAL
;
404 /* ===============================================================
406 Properties/Methods/Events
409 #define KSPROPSETID_GM \
410 0xAF627536L, 0xE719, 0x11D2, 0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D
414 KSPROPERTY_GM_GRAPHMANAGER
,
415 KSPROPERTY_GM_TIMESTAMP_CLOCK
,
416 KSPROPERTY_GM_RATEMATCH
,
417 KSPROPERTY_GM_RENDERCLOCK
421 /* ===============================================================
423 Properties/Methods/Events
426 #define KSPROPSETID_MediaSeeking \
427 0xEE904F0CL, 0xD09B, 0x11D0, 0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
431 KSPROPERTY_MEDIASEEKING_CAPABILITIES
,
432 KSPROPERTY_MEDIASEEKING_FORMATS
,
433 KSPROPERTY_MEDIASEEKING_TIMEFORMAT
,
434 KSPROPERTY_MEDIASEEKING_POSITION
,
435 KSPROPERTY_MEDIASEEKING_STOPPOSITION
,
436 KSPROPERTY_MEDIASEEKING_POSITIONS
,
437 KSPROPERTY_MEDIASEEKING_DURATION
,
438 KSPROPERTY_MEDIASEEKING_AVAILABLE
,
439 KSPROPERTY_MEDIASEEKING_PREROLL
,
440 KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT
441 } KSPROPERTY_MEDIASEEKING
;
444 /* ===============================================================
446 Properties/Methods/Events
449 #define STATIC_KSPROPSETID_Pin\
450 0x8C134960L, 0x51AD, 0x11CF, 0x87, 0x8A, 0x94, 0xF8, 0x01, 0xC1, 0x00, 0x00
451 DEFINE_GUIDSTRUCT("8C134960-51AD-11CF-878A-94F801C10000", KSPROPSETID_Pin
);
452 #define KSPROPSETID_Pin DEFINE_GUIDNAMED(KSPROPSETID_Pin)
454 #define STATIC_KSNAME_Pin\
455 0x146F1A80L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
456 DEFINE_GUIDSTRUCT("146F1A80-4791-11D0-A5D6-28DB04C10000", KSNAME_Pin
);
457 #define KSNAME_Pin DEFINE_GUIDNAMED(KSNAME_Pin)
462 KSPROPERTY_PIN_CINSTANCES
,
463 KSPROPERTY_PIN_CTYPES
,
464 KSPROPERTY_PIN_DATAFLOW
,
465 KSPROPERTY_PIN_DATARANGES
,
466 KSPROPERTY_PIN_DATAINTERSECTION
,
467 KSPROPERTY_PIN_INTERFACES
,
468 KSPROPERTY_PIN_MEDIUMS
,
469 KSPROPERTY_PIN_COMMUNICATION
,
470 KSPROPERTY_PIN_GLOBALCINSTANCES
,
471 KSPROPERTY_PIN_NECESSARYINSTANCES
,
472 KSPROPERTY_PIN_PHYSICALCONNECTION
,
473 KSPROPERTY_PIN_CATEGORY
,
475 KSPROPERTY_PIN_CONSTRAINEDDATARANGES
,
476 KSPROPERTY_PIN_PROPOSEDATAFORMAT
484 } KSP_PIN
, *PKSP_PIN
;
486 #define KSINSTANCE_INDETERMINATE ((ULONG)-1)
492 } KSPIN_CINSTANCES
, *PKSPIN_CINSTANCES
;
498 WCHAR SymbolicLinkName
[1];
499 } KSPIN_PHYSICALCONNECTION
, *PKSPIN_PHYSICALCONNECTION
;
502 /* ===============================================================
504 Properties/Methods/Events
507 #define KSPROPSETID_Quality \
508 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
512 KSPROPERTY_QUALITY_REPORT
,
513 KSPROPERTY_QUALITY_ERROR
514 } KSPROPERTY_QUALITY
;
517 /* ===============================================================
519 Properties/Methods/Events
522 #define KSPROPSETID_Stream \
523 0x65aaba60L, 0x98ae, 0x11cf, 0xa1, 0x0d, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
527 KSPROPERTY_STREAM_ALLOCATOR
,
528 KSPROPERTY_STREAM_QUALITY
,
529 KSPROPERTY_STREAM_DEGRADATION
,
530 KSPROPERTY_STREAM_MASTERCLOCK
,
531 KSPROPERTY_STREAM_TIMEFORMAT
,
532 KSPROPERTY_STREAM_PRESENTATIONTIME
,
533 KSPROPERTY_STREAM_PRESENTATIONEXTENT
,
534 KSPROPERTY_STREAM_FRAMETIME
,
535 KSPROPERTY_STREAM_RATECAPABILITY
,
536 KSPROPERTY_STREAM_RATE
,
537 KSPROPERTY_STREAM_PIPE_ID
541 /* ===============================================================
543 Properties/Methods/Events
546 #define STATIC_KSPROPSETID_StreamAllocator\
547 0xcf6e4342L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
548 DEFINE_GUIDSTRUCT("cf6e4342-ec87-11cf-a130-0020afd156e4", KSPROPSETID_StreamAllocator
);
549 #define KSPROPSETID_StreamAllocator DEFINE_GUIDNAMED(KSPROPSETID_StreamAllocator)
553 KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE
,
554 KSPROPERTY_STREAMALLOCATOR_STATUS
555 } KSPROPERTY_STREAMALLOCATOR
;
557 #define KSMETHODSETID_StreamAllocator \
558 0xcf6e4341L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
562 KSMETHOD_STREAMALLOCATOR_ALLOC
,
563 KSMETHOD_STREAMALLOCATOR_FREE
564 } KSMETHOD_STREAMALLOCATOR
;
567 #define KSEVENTSETID_StreamAllocator
571 KSEVENT_STREAMALLOCATOR_INTERNAL_FREEFRAME
,
572 KSEVENT_STREAMALLOCATOR_FREEFRAME
573 } KSEVENT_STREAMALLOCATOR
;
576 /* ===============================================================
578 Properties/Methods/Events
581 #define KSPROPSETID_StreamInterface \
582 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
586 KSPROPERTY_STREAMINTERFACE_HEADERSIZE
587 } KSPROPERTY_STREAMINTERFACE
;
590 /* ===============================================================
592 Properties/Methods/Events
595 #define STATIC_KSPROPSETID_Topology\
596 0x720D4AC0L, 0x7533, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
597 DEFINE_GUIDSTRUCT("720D4AC0-7533-11D0-A5D6-28DB04C10000", KSPROPSETID_Topology
);
598 #define KSPROPSETID_Topology DEFINE_GUIDNAMED(KSPROPSETID_Topology)
602 KSPROPERTY_TOPOLOGY_CATEGORIES
,
603 KSPROPERTY_TOPOLOGY_CONNECTIONS
,
604 KSPROPERTY_TOPOLOGY_NAME
,
605 KSPROPERTY_TOPOLOGY_NODES
606 } KSPROPERTY_TOPOLOGY
;
610 /* ===============================================================
611 Property Sets for audio drivers - TODO
614 #define STATIC_KSPROPTYPESETID_General \
615 0x97E99BA0L, 0xBDEA, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
616 DEFINE_GUIDSTRUCT("97E99BA0-BDEA-11CF-A5D6-28DB04C10000", KSPROPTYPESETID_General
);
617 #define KSPROPTYPESETID_General DEFINE_GUIDNAMED(KSPROPTYPESETID_General)
620 KSPROPERTY_AC3_ALTERNATE_AUDIO
621 KSPROPERTY_AC3_BIT_STREAM_MODE
622 KSPROPERTY_AC3_DIALOGUE_LEVEL
623 KSPROPERTY_AC3_DOWNMIX
624 KSPROPERTY_AC3_ERROR_CONCEALMENT
625 KSPROPERTY_AC3_LANGUAGE_CODE
626 KSPROPERTY_AC3_ROOM_TYPE
629 #define KSPROPSETID_Acoustic_Echo_Cancel
632 KSPROPERTY_AEC_NOISE_FILL_ENABLE
633 KSPROPERTY_AEC_STATUS
637 KSPROPERTY_AUDIO_3D_INTERFACE
639 KSPROPERTY_AUDIO_ALGORITHM_INSTANCE
640 KSPROPERTY_AUDIO_BASS
641 KSPROPERTY_AUDIO_BASS_BOOST
642 KSPROPERTY_AUDIO_CHANNEL_CONFIG
643 KSPROPERTY_AUDIO_CHORUS_LEVEL
644 KSPROPERTY_AUDIO_COPY_PROTECTION
645 KSPROPERTY_AUDIO_CPU_RESOURCES
646 KSPROPERTY_AUDIO_DELAY
647 KSPROPERTY_AUDIO_DEMUX_DEST
648 KSPROPERTY_AUDIO_DEV_SPECIFIC
649 KSPROPERTY_AUDIO_DYNAMIC_RANGE
650 KSPROPERTY_AUDIO_DYNAMIC_SAMPLING_RATE
651 KSPROPERTY_AUDIO_EQ_BANDS
652 KSPROPERTY_AUDIO_EQ_LEVEL
653 KSPROPERTY_AUDIO_FILTER_STATE
654 KSPROPERTY_AUDIO_LATENCY
655 KSPROPERTY_AUDIO_LOUDNESS
656 KSPROPERTY_AUDIO_MANUFACTURE_GUID
658 KSPROPERTY_AUDIO_MIX_LEVEL_CAPS
659 KSPROPERTY_AUDIO_MIX_LEVEL_TABLE
660 KSPROPERTY_AUDIO_MUTE
661 KSPROPERTY_AUDIO_MUX_SOURCE
662 KSPROPERTY_AUDIO_NUM_EQ_BANDS
663 KSPROPERTY_AUDIO_PEAKMETER
664 KSPROPERTY_AUDIO_POSITION
665 KSPROPERTY_AUDIO_PREFERRED_STATUS
666 KSPROPERTY_AUDIO_PRODUCT_GUID
667 KSPROPERTY_AUDIO_QUALITY
668 KSPROPERTY_AUDIO_REVERB_LEVEL
669 KSPROPERTY_AUDIO_SAMPLING_RATE
670 KSPROPERTY_AUDIO_STEREO_ENHANCE
671 KSPROPERTY_AUDIO_STEREO_SPEAKER_GEOMETRY
672 KSPROPERTY_AUDIO_SURROUND_ENCODE
673 KSPROPERTY_AUDIO_TREBLE
674 KSPROPERTY_AUDIO_VOLUMELEVEL
675 KSPROPERTY_AUDIO_WIDE_MODE
676 KSPROPERTY_AUDIO_WIDENESS
679 #define KSPROPSETID_AudioGfx
681 KSPROPERTY_AUDIOGFX_CAPTURETARGETDEVICEID
682 KSPROPERTY_AUDIOGFX_RENDERTARGETDEVICEID
685 #define KSPROPSETID_DirectSound3DBuffer
687 KSPROPERTY_DIRECTSOUND3DBUFFER_ALL
688 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEANGLES
689 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEORIENTATION
690 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEOUTSIDEVOLUME
691 KSPROPERTY_DIRECTSOUND3DBUFFER_MAXDISTANCE
692 KSPROPERTY_DIRECTSOUND3DBUFFER_MINDISTANCE
693 KSPROPERTY_DIRECTSOUND3DBUFFER_MODE
694 KSPROPERTY_DIRECTSOUND3DBUFFER_POSITION
695 KSPROPERTY_DIRECTSOUND3DBUFFER_VELOCITY
698 #define KSPROPSETID_DirectSound3DListener
700 KSPROPERTY_DIRECTSOUND3DLISTENER_ALL
701 KSPROPERTY_DIRECTSOUND3DLISTENER_ALLOCATION
702 KSPROPERTY_DIRECTSOUND3DLISTENER_BATCH
703 KSPROPERTY_DIRECTSOUND3DLISTENER_DISTANCEFACTOR
704 KSPROPERTY_DIRECTSOUND3DLISTENER_DOPPLERFACTOR
705 KSPROPERTY_DIRECTSOUND3DLISTENER_ORIENTATION
706 KSPROPERTY_DIRECTSOUND3DLISTENER_POSITION
707 KSPROPERTY_DIRECTSOUND3DLISTENER_ROLLOFFFACTOR
708 KSPROPERTY_DIRECTSOUND3DLISTENER_VELOCITY
711 #define KSPROPSETID_DrmAudioStream
713 KSPROPERTY_DRMAUDIOSTREAM_CONTENTID
716 #define KSPROPSETID_Hrtf3d
718 KSPROPERTY_HRTF3D_FILTER_FORMAT
719 KSPROPERTY_HRTF3D_INITIALIZE
720 KSPROPERTY_HRTF3D_PARAMS
723 #define KSPROPSETID_Itd3d
725 KSPROPERTY_ITD3D_PARAMS
728 #define KSPROPSETID_Synth
730 KSPROPERTY_SYNTH_CAPS
731 KSPROPERTY_SYNTH_CHANNELGROUPS
732 KSPROPERTY_SYNTH_LATENCYCLOCK
733 KSPROPERTY_SYNTH_MASTERCLOCK
734 KSPROPERTY_SYNTH_PORTPARAMETERS
735 KSPROPERTY_SYNTH_RUNNINGSTATS
736 KSPROPERTY_SYNTH_VOICEPRIORITY
737 KSPROPERTY_SYNTH_VOLUME
738 KSPROPERTY_SYNTH_VOLUMEBOOST
741 #define KSPROPSETID_Synth_Dls
743 KSPROPERTY_SYNTH_DLS_APPEND
744 KSPROPERTY_SYNTH_DLS_COMPACT
745 KSPROPERTY_SYNTH_DLS_DOWNLOAD
746 KSPROPERTY_SYNTH_DLS_UNLOAD
747 KSPROPERTY_SYNTH_DLS_WAVEFORMAT
750 #define KSPROPSETID_TopologyNode
752 KSPROPERTY_TOPOLOGYNODE_ENABLE
753 KSPROPERTY_TOPOLOGYNODE_RESET
759 /* ===============================================================
760 Event Sets for audio drivers - TODO
762 #define KSEVENTSETID_AudioControlChange
764 KSEVENT_CONTROL_CHANGE
769 /* ===============================================================
773 KSNODETYPE_3D_EFFECTS
774 KSNODETYPE_ACOUSTIC_ECHO_CANCEL
781 KSNODETYPE_DEV_SPECIFIC
783 KSNODETYPE_DMSYNTH_CAPS
784 KSNODETYPE_DRM_DESCRAMBLE
790 KSNODETYPE_PROLOGIC_DECODER
791 KSNODETYPE_PROLOGIC_ENCODER
794 KSNODETYPE_STEREO_ENHANCE
795 KSNODETYPE_STEREO_WIDE
800 KSNODETYPE_SYNTHESIZER
806 typedef PVOID KSDEVICE_HEADER
,
813 /* ===============================================================
817 #define KSMETHOD_TYPE_NONE 0x00000000
818 #define KSMETHOD_TYPE_READ 0x00000001
819 #define KSMETHOD_TYPE_WRITE 0x00000002
820 #define KSMETHOD_TYPE_MODIFY 0x00000003
821 #define KSMETHOD_TYPE_SOURCE 0x00000004
822 #define KSMETHOD_TYPE_SEND 0x00000001
823 #define KSMETHOD_TYPE_SETSUPPORT 0x00000100
824 #define KSMETHOD_TYPE_BASICSUPPORT 0x00000200
827 /* ===============================================================
831 #define KSPROPERTY_TYPE_GET 0x00000001
832 #define KSPROPERTY_TYPE_SET 0x00000002
833 #define KSPROPERTY_TYPE_SETSUPPORT 0x00000100
834 #define KSPROPERTY_TYPE_BASICSUPPORT 0x00000200
835 #define KSPROPERTY_TYPE_RELATIONS 0x00000400
836 #define KSPROPERTY_TYPE_SERIALIZESET 0x00000800
837 #define KSPROPERTY_TYPE_UNSERIALIZESET 0x00001000
838 #define KSPROPERTY_TYPE_SERIALIZERAW 0x00002000
839 #define KSPROPERTY_TYPE_UNSERIALIZERAW 0x00004000
840 #define KSPROPERTY_TYPE_SERIALIZESIZE 0x00008000
841 #define KSPROPERTY_TYPE_DEFAULT_VALUES 0x00010000
844 /* ===============================================================
845 Topology Methods/Properties
848 #define KSMETHOD_TYPE_TOPOLOGY 0x10000000
849 #define KSPROPERTY_TYPE_TOPOLOGY 0x10000000
852 #define DEFINE_KS_GUID(GA,GB,GC,GD,GE,GF,GG,GH,GI,GJ,GK) \
853 DEFINE_GUID(??, 0x#GA#L, 0xGB, 0xGC, 0xGD, 0xGE, 0xGF, 0xGG, 0xGH, 0xGI, 0xGJ, 0xGK) \
854 "GA-GB-GC-GDGE-GFGGGHGIGJGK"
857 /* ===============================================================
860 BRIDGE - 0x085AFF00L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
861 CAPTURE - 0x65E8773DL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
862 RENDER - 0x65E8773EL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
863 MIXER - 0xAD809C00L, 0x7B88, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
864 SPLITTER - 0x0A4252A0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
865 DATACOMPRESSOR - 0x1E84C900L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
866 DATADECOMPRESSOR - 0x2721AE20L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
867 DATATRANSFORM - 0x2EB07EA0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
868 COMMUNICATIONSTRANSFORM - 0xCF1DDA2CL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
869 INTERFACETRANSFORM - 0xCF1DDA2DL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
870 MEDIUMTRANSFORM - 0xCF1DDA2EL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
871 FILESYSTEM - 0x760FED5EL, 0x9357, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
872 CLOCK - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
873 PROXY - 0x97EBAACAL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
874 QUALITY - 0x97EBAACBL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
877 /* ===============================================================
878 KSNAME GUIDs (defined also as KSSTRING_Xxx L"{...}"
880 Filter - 0x9b365890L, 0x165f, 0x11d0, 0xa1, 0x95, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
881 Pin - 0x146F1A80L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
882 Clock - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
883 Allocator - 0x642F5D00L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
884 TopologyNode - 0x0621061AL, 0xEE75, 0x11D0, 0xB9, 0x15, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
887 /* ===============================================================
890 Standard - 0x1A8766A0L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
891 FileIo - 0x8C6F932CL, 0xE771, 0x11D0, 0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
894 /* ===============================================================
897 Standard - 0x4747B320L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
900 /* ===============================================================
903 General - 0x1464EDA5L, 0x6A8F, 0x11D1, 0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
904 StreamIo - 0x65D003CAL, 0x1523, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
905 MediaSeeking - 0xEE904F0CL, 0xD09B, 0x11D0, 0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
906 Topology - 0x720D4AC0L, 0x7533, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
907 GM - 0xAF627536L, 0xE719, 0x11D2, 0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D
908 Quality - 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
909 Connection - 0x1D58C920L, 0xAC9B, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
912 /* ===============================================================
915 Event set - 0x75d95571L, 0x073c, 0x11d0, 0xa1, 0x61, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
916 Method set - 0xcf6e4341L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
917 Property set - 0xcf6e4342L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
920 /* ===============================================================
923 Property set - 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
926 /* ===============================================================
929 Property set - 0xDF12A4C0L, 0xAC17, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
930 Event sets - 0x364D8E20L, 0x62C7, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
933 /* ===============================================================
936 Event set - 0x7f4bcbe0L, 0x9ea5, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00
939 /* ===============================================================
942 KSTIME_FORMAT_NONE (null guid)
943 FRAME - 0x7b785570L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
944 BYTE - 0x7b785571L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
945 SAMPLE - 0x7b785572L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
946 FIELD - 0x7b785573L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
947 MEDIA_TIME - 0x7b785574L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
950 /* ===============================================================
960 #define STATIC_KSDATAFORMAT_SPECIFIER_NONE\
961 0x0F6417D6L, 0xC318, 0x11D0, 0xA4, 0x3F, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
962 DEFINE_GUIDSTRUCT("0F6417D6-C318-11D0-A43F-00A0C9223196", KSDATAFORMAT_SPECIFIER_NONE
);
963 #define KSDATAFORMAT_SPECIFIER_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_NONE)
966 /* ===============================================================
969 WILDCARD, DONT_CARE = NULL
970 SYSTEM - 0x091bb638L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
971 USER - 0x8cb0fc28L, 0x7893, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
972 KERNEL_PAGED - 0xd833f8f8L, 0x7894, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
973 KERNEL_NONPAGED - 0x4a6d5fc4L, 0x7895, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
974 DEVICE_UNKNOWN - 0x091bb639L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
977 /* ===============================================================
979 (values have been checked)
984 #define DEFINE_KSPROPERTY_ITEM(PropertyId, GetHandler,\
988 Values, RelationsCount, Relations, SupportHandler,\
991 PropertyId, {(PFNKSHANDLER)GetHandler}, MinProperty, MinData,\
992 {(PFNKSHANDLER)SetHandler},\
993 (PKSPROPERTY_VALUES)Values, RelationsCount, (PKSPROPERTY)Relations,\
994 (PFNKSHANDLER)SupportHandler, (ULONG)SerializedSize\
999 #define DEFINE_KSPROPERTY_ITEM(PropertyId, GetHandler,\
1003 Values, RelationsCount, Relations, SupportHandler,\
1006 PropertyId, (PFNKSHANDLER)GetHandler, MinProperty, MinData,\
1007 (PFNKSHANDLER)SetHandler,\
1008 (PKSPROPERTY_VALUES)Values, RelationsCount, (PKSPROPERTY)Relations,\
1009 (PFNKSHANDLER)SupportHandler, (ULONG)SerializedSize\
1018 KsObjectTypeFilterFactory
,
1029 } KSSTATE
, *PKSSTATE
;
1033 KSTARGET_STATE_DISABLED
,
1034 KSTARGET_STATE_ENABLED
1049 KSEVENTS_FMUTEXUNSAFE
,
1052 } KSEVENTS_LOCKTYPE
;
1056 KSDEGRADE_STANDARD_SIMPLE
,
1057 KSDEGRADE_STANDARD_QUALITY
,
1058 KSDEGRADE_STANDARD_COMPUTATION
,
1059 KSDEGRADE_STANDARD_SKIP
1060 } KSDEGRADE_STANDARD
;
1064 KSPIN_DATAFLOW_IN
= 1,
1070 KSPIN_COMMUNICATION_NONE
,
1071 KSPIN_COMMUNICATION_SINK
,
1072 KSPIN_COMMUNICATION_SOURCE
,
1073 KSPIN_COMMUNICATION_BOTH
,
1074 KSPIN_COMMUNICATION_BRIDGE
1075 } KSPIN_COMMUNICATION
;
1081 } KSLIST_ENTRY_LOCATION
;
1085 KsStackCopyToNewLocation
,
1086 KsStackReuseCurrentLocation
,
1087 KsStackUseNewLocation
1094 KsAcquireOnlySingleItem
,
1095 KsAcquireAndRemoveOnlySingleItem
1096 } KSIRP_REMOVAL_OPERATION
;
1100 KsInvokeOnSuccess
= 1,
1101 KsInvokeOnError
= 2,
1102 KsInvokeOnCancel
= 4
1103 } KSCOMPLETION_INVOCATION
;
1106 #if defined(_NTDDK_)
1108 typedef NTSTATUS (NTAPI
*PFNKSCONTEXT_DISPATCH
)(
1113 #if defined(_NTDDK_) && !defined(__wtypes_h__)
1143 VT_USERDEFINED
= 29,
1150 VT_STREAMED_OBJECT
= 68,
1151 VT_STORED_OBJECT
= 69,
1152 VT_BLOB_OBJECT
= 70,
1158 VT_RESERVED
= 0x8000,
1159 VT_ILLEGAL
= 0xffff,
1160 VT_ILLEGALMASKED
= 0xfff,
1165 #define STATIC_KSDATAFORMAT_TYPE_WILDCARD STATIC_GUID_NULL
1166 #define KSDATAFORMAT_TYPE_WILDCARD GUID_NULL
1168 #define STATIC_KSDATAFORMAT_SUBTYPE_WILDCARD STATIC_GUID_NULL
1169 #define KSDATAFORMAT_SUBTYPE_WILDCARD GUID_NULL
1171 #define STATIC_KSDATAFORMAT_SPECIFIER_WILDCARD STATIC_GUID_NULL
1172 #define KSDATAFORMAT_SPECIFIER_WILDCARD GUID_NULL
1174 /* ===============================================================
1183 } KS_FRAMING_RANGE
, *PKS_FRAMING_RANGE
;
1187 KS_FRAMING_RANGE Range
;
1188 ULONG InPlaceWeight
;
1189 ULONG NotInPlaceWeight
;
1190 } KS_FRAMING_RANGE_WEIGHTED
, *PKS_FRAMING_RANGE_WEIGHTED
;
1200 ULONG FileAlignment
;
1201 ULONG MemoryTypeWeight
;
1202 KS_FRAMING_RANGE PhysicalRange
;
1203 KS_FRAMING_RANGE_WEIGHTED FramingRange
;
1204 } KS_FRAMING_ITEM
, *PKS_FRAMING_ITEM
;
1208 ULONG RatioNumerator
;
1209 ULONG RatioDenominator
;
1210 ULONG RatioConstantMargin
;
1211 } KS_COMPRESSION
, *PKS_COMPRESSION
;
1214 /* ===============================================================
1218 #define KSPRIORITY_LOW 0x00000001
1219 #define KSPRIORITY_NORMAL 0x40000000
1220 #define KSPRIORITY_HIGH 0x80000000
1221 #define KSPRIORITY_EXCLUSIVE 0xFFFFFFFF
1225 ULONG PriorityClass
;
1226 ULONG PrioritySubClass
;
1227 } KSPRIORITY
, *PKSPRIORITY
;
1230 /* ===============================================================
1232 http://www.osronline.com/DDKx/stream/ks-struct_494j.htm
1234 #if defined(_NTDDK_)
1237 PDRIVER_DISPATCH DeviceIoControl
;
1238 PDRIVER_DISPATCH Read
;
1239 PDRIVER_DISPATCH Write
;
1240 PDRIVER_DISPATCH Flush
;
1241 PDRIVER_DISPATCH Close
;
1242 PDRIVER_DISPATCH QuerySecurity
;
1243 PDRIVER_DISPATCH SetSecurity
;
1244 PFAST_IO_DEVICE_CONTROL FastDeviceIoControl
;
1245 PFAST_IO_READ FastRead
;
1246 PFAST_IO_WRITE FastWrite
;
1247 } KSDISPATCH_TABLE
, *PKSDISPATCH_TABLE
;
1250 #define KSCREATE_ITEM_IRP_STORAGE(Irp) (*(PKSOBJECT_CREATE_ITEM*)&(Irp)->Tail.Overlay.DriverContext[0])
1251 #define KSEVENT_SET_IRP_STORAGE(Irp) (*(const KSEVENT_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1252 #define KSEVENT_ITEM_IRP_STORAGE(Irp) (*(const KSEVENT_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1253 #define KSEVENT_ENTRY_IRP_STORAGE(Irp) (*(PKSEVENT_ENTRY*)&(Irp)->Tail.Overlay.DriverContext[0])
1254 #define KSMETHOD_SET_IRP_STORAGE(Irp) (*(const KSMETHOD_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1255 #define KSMETHOD_ITEM_IRP_STORAGE(Irp) (*(const KSMETHOD_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1256 #define KSMETHOD_TYPE_IRP_STORAGE(Irp) (*(ULONG_PTR*)(&(Irp)->Tail.Overlay.DriverContext[2]))
1257 #define KSQUEUE_SPINLOCK_IRP_STORAGE(Irp) (*(PKSPIN_LOCK*)&(Irp)->Tail.Overlay.DriverContext[1])
1258 #define KSPROPERTY_SET_IRP_STORAGE(Irp) (*(const KSPROPERTY_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1259 #define KSPROPERTY_ITEM_IRP_STORAGE(Irp) (*(const KSPROPERTY_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1260 #define KSPROPERTY_ATTRIBUTES_IRP_STORAGE(Irp) (*(PKSATTRIBUTE_LIST*)&(Irp)->Tail.Overlay.DriverContext[2])
1264 (NTAPI
*PFNREFERENCEDEVICEOBJECT
)(
1270 (NTAPI
*PFNDEREFERENCEDEVICEOBJECT
)(
1276 (NTAPI
*PFNQUERYREFERENCESTRING
)(
1278 IN OUT PWCHAR
*String
1283 INTERFACE Interface
;
1284 PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject
;
1285 PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject
;
1286 PFNQUERYREFERENCESTRING QueryReferenceString
;
1287 } BUS_INTERFACE_REFERENCE
, *PBUS_INTERFACE_REFERENCE
;
1292 ULONG ReferenceCount
;
1293 KSPIN_LOCK AccessLock
;
1294 } KSDPC_ITEM
, *PKSDPC_ITEM
;
1299 LIST_ENTRY BufferList
;
1300 } KSBUFFER_ITEM
, *PKSBUFFER_ITEM
;
1312 } KSCOMPONENTID
, *PKSCOMPONENTID
;
1314 /* ===============================================================
1318 #define KSPROPERTY_MEMBER_RANGES 0x00000001
1319 #define KSPROPERTY_MEMBER_STEPPEDRANGES 0x00000002
1320 #define KSPROPERTY_MEMBER_VALUES 0x00000003
1321 #define KSPROPERTY_MEMBER_FLAG_DEFAULT KSPROPERTY_MEMBER_RANGES
1324 KS_SEEKING_NoPositioning
,
1325 KS_SEEKING_AbsolutePositioning
,
1326 KS_SEEKING_RelativePositioning
,
1327 KS_SEEKING_IncrementalPositioning
,
1328 KS_SEEKING_PositioningBitsMask
= 0x3,
1329 KS_SEEKING_SeekToKeyFrame
,
1330 KS_SEEKING_ReturnTime
= 0x8
1337 KS_SEEKING_FLAGS CurrentFlags
;
1338 KS_SEEKING_FLAGS StopFlags
;
1339 } KSPROPERTY_POSITIONS
, *PKSPROPERTY_POSITIONS
;
1345 } KSPROPERTY_SERIALHDR
, *PKSPROPERTY_SERIALHDR
;
1349 KSIDENTIFIER PropTypeSet
;
1351 ULONG PropertyLength
;
1352 } KSPROPERTY_SERIAL
, *PKSPROPERTY_SERIAL
;
1361 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1368 ULONG UnsignedMinimum
;
1369 ULONG UnsignedMaximum
;
1370 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1376 } KSPROPERTY_BOUNDS_LONG
, *PKSPROPERTY_BOUNDS_LONG
;
1381 LONGLONG SignedMinimum
;
1382 LONGLONG SignedMaximum
;
1383 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1390 #if defined(_NTDDK_)
1391 ULONGLONG UnsignedMinimum
;
1392 ULONGLONG UnsignedMaximum
;
1394 DWORDLONG UnsignedMinimum
;
1395 DWORDLONG UnsignedMaximum
;
1397 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1402 } KSPROPERTY_BOUNDS_LONGLONG
, *PKSPROPERTY_BOUNDS_LONGLONG
;
1407 ULONG DescriptionSize
;
1408 KSIDENTIFIER PropTypeSet
;
1409 ULONG MembersListCount
;
1411 } KSPROPERTY_DESCRIPTION
, *PKSPROPERTY_DESCRIPTION
;
1417 } KSPROPERTY_MEDIAAVAILABLE
, *PKSPROPERTY_MEDIAAVAILABLE
;
1426 } KSPROPERTY_MEMBERSHEADER
, *PKSPROPERTY_MEMBERSHEADER
;
1429 KSPROPERTY_MEMBERSHEADER MembersHeader
;
1430 const VOID
* Members
;
1431 } KSPROPERTY_MEMBERSLIST
, *PKSPROPERTY_MEMBERSLIST
;
1434 KSIDENTIFIER PropTypeSet
;
1435 ULONG MembersListCount
;
1436 const KSPROPERTY_MEMBERSLIST
* MembersList
;
1437 } KSPROPERTY_VALUES
, *PKSPROPERTY_VALUES
;
1439 #if defined(_NTDDK_)
1440 typedef NTSTATUS (NTAPI
*PFNKSHANDLER
)(
1442 IN PKSIDENTIFIER Request
,
1450 PFNKSHANDLER GetPropertyHandler
;
1451 BOOLEAN GetSupported
;
1456 PFNKSHANDLER SetPropertyHandler
;
1457 BOOLEAN SetSupported
;
1459 const KSPROPERTY_VALUES
* Values
;
1460 ULONG RelationsCount
;
1461 const KSPROPERTY
* Relations
;
1462 PFNKSHANDLER SupportHandler
;
1463 ULONG SerializedSize
;
1464 } KSPROPERTY_ITEM
, *PKSPROPERTY_ITEM
;
1469 (NTAPI
*PFNKSFASTHANDLER
)(
1470 IN PFILE_OBJECT FileObject
,
1471 IN PKSIDENTIFIER Request
,
1472 IN ULONG RequestLength
,
1474 IN ULONG DataLength
,
1475 OUT PIO_STATUS_BLOCK IoStatus
1481 PFNKSFASTHANDLER GetPropertyHandler
;
1482 BOOLEAN GetSupported
;
1485 PFNKSFASTHANDLER SetPropertyHandler
;
1486 BOOLEAN SetSupported
;
1489 } KSFASTPROPERTY_ITEM
, *PKSFASTPROPERTY_ITEM
;
1494 ULONG PropertiesCount
;
1495 const KSPROPERTY_ITEM
* PropertyItem
;
1497 const KSFASTPROPERTY_ITEM
* FastIoTable
;
1498 } KSPROPERTY_SET
, *PKSPROPERTY_SET
;
1504 ULONG SteppingDelta
;
1506 KSPROPERTY_BOUNDS_LONG Bounds
;
1507 } KSPROPERTY_STEPPING_LONG
, *PKSPROPERTY_STEPPING_LONG
;
1511 #if defined(_NTDDK_)
1512 ULONGLONG SteppingDelta
;
1514 DWORDLONG SteppingDelta
;
1516 KSPROPERTY_BOUNDS_LONGLONG Bounds
;
1517 } KSPROPERTY_STEPPING_LONGLONG
, *PKSPROPERTY_STEPPING_LONGLONG
;
1519 /* ===============================================================
1527 ULONG RequirementsFlags
;
1529 #if defined(_NTDDK_)
1536 ULONG FileAlignment
;
1538 } KSALLOCATOR_FRAMING
, *PKSALLOCATOR_FRAMING
;
1544 KS_COMPRESSION OutputCompression
;
1546 KS_FRAMING_ITEM FramingItem
[1];
1547 } KSALLOCATOR_FRAMING_EX
, *PKSALLOCATOR_FRAMING_EX
;
1549 #define KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER 0x00000001
1550 #define KSALLOCATOR_REQUIREMENTF_SYSTEM_MEMORY 0x00000002
1551 #define KSALLOCATOR_REQUIREMENTF_FRAME_INTEGRITY 0x00000004
1552 #define KSALLOCATOR_REQUIREMENTF_MUST_ALLOCATE 0x00000008
1553 #define KSALLOCATOR_REQUIREMENTF_PREFERENCES_ONLY 0x80000000
1555 #define KSALLOCATOR_OPTIONF_COMPATIBLE 0x00000001
1556 #define KSALLOCATOR_OPTIONF_SYSTEM_MEMORY 0x00000002
1557 #define KSALLOCATOR_OPTIONF_VALID 0x00000003
1559 #define KSALLOCATOR_FLAG_PARTIAL_READ_SUPPORT 0x00000010
1560 #define KSALLOCATOR_FLAG_DEVICE_SPECIFIC 0x00000020
1561 #define KSALLOCATOR_FLAG_CAN_ALLOCATE 0x00000040
1562 #define KSALLOCATOR_FLAG_INSIST_ON_FRAMESIZE_RATIO 0x00000080
1564 /* ===============================================================
1573 } KSQUALITY
, *PKSQUALITY
;
1577 HANDLE QualityManager
;
1579 } KSQUALITY_MANAGER
, *PKSQUALITY_MANAGER
;
1583 LONGLONG PresentationStart
;
1585 KSPIN_INTERFACE Interface
;
1592 KSPROPERTY Property
;
1594 } KSRATE_CAPABILITY
, *PKSRATE_CAPABILITY
;
1598 LONGLONG Granularity
;
1600 } KSRESOLUTION
, *PKSRESOLUTION
;
1604 ULONG NotificationType
;
1608 ULONG_PTR Reserved
[2];
1615 #if defined(_NTDDK_)
1618 KPRIORITY Increment
;
1623 KPRIORITY Increment
;
1628 ULONG ReferenceCount
;
1632 PWORK_QUEUE_ITEM WorkQueueItem
;
1633 WORK_QUEUE_TYPE WorkQueueType
;
1637 PWORK_QUEUE_ITEM WorkQueueItem
;
1638 PKSWORKER KsWorkerObject
;
1644 LONG_PTR Alignment
[2];
1647 } KSEVENTDATA
, *PKSEVENTDATA
;
1654 HANDLE ObjectHandle
;
1655 PVOID ObjectPointer
;
1659 KSEVENTDATA EventData
;
1660 } KSRELATIVEEVENT
, *PKSRELATIVEEVENT
;
1663 /* ===============================================================
1677 LONGLONG SystemTime
;
1678 } KSCORRELATED_TIME
, *PKSCORRELATED_TIME
;
1682 KSPROPERTY Property
;
1686 } KSP_TIMEFORMAT
, *PKSP_TIMEFORMAT
;
1692 } KSINTERVAL
, *PKSINTERVAL
;
1699 } KSFRAMETIME
, *PKSFRAMETIME
;
1702 /* ===============================================================
1706 typedef PVOID PKSDEFAULTCLOCK
;
1711 } KSCLOCK_CREATE
, *PKSCLOCK_CREATE
;
1713 #if defined(_NTDDK_)
1717 (FASTCALL
*PFNKSCLOCK_GETTIME
)(
1718 IN PFILE_OBJECT FileObject
1722 (FASTCALL
*PFNKSCLOCK_CORRELATEDTIME
)(
1723 IN PFILE_OBJECT FileObject
,
1724 OUT PLONGLONG SystemTime
);
1728 PFNKSCLOCK_GETTIME GetTime
;
1729 PFNKSCLOCK_GETTIME GetPhysicalTime
;
1730 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedTime
;
1731 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedPhysicalTime
;
1732 } KSCLOCK_FUNCTIONTABLE
, *PKSCLOCK_FUNCTIONTABLE
;
1735 /* ===============================================================
1736 Objects ??? SORT ME!
1739 #define KSCREATE_ITEM_SECURITYCHANGED 0x1
1740 #define KSCREATE_ITEM_WILDCARD 0x2
1741 #define KSCREATE_ITEM_NOPARAMETERS 0x4
1742 #define KSCREATE_ITEM_FREEONSTOP 0x8
1746 PDRIVER_DISPATCH Create
;
1748 UNICODE_STRING ObjectClass
;
1749 PSECURITY_DESCRIPTOR SecurityDescriptor
;
1751 } KSOBJECT_CREATE_ITEM
, *PKSOBJECT_CREATE_ITEM
;
1755 ULONG CreateItemsCount
;
1756 PKSOBJECT_CREATE_ITEM CreateItemsList
;
1757 } KSOBJECT_CREATE
, *PKSOBJECT_CREATE
;
1759 typedef VOID (NTAPI
*PFNKSITEMFREECALLBACK
)(
1760 IN PKSOBJECT_CREATE_ITEM CreateItem
);
1768 } KSMULTIPLE_ITEM
, *PKSMULTIPLE_ITEM
;
1773 PKSEVENTDATA EventData
;
1775 } KSQUERYBUFFER
, *PKSQUERYBUFFER
;
1781 } KSERROR
, *PKSERROR
;
1783 /* ===============================================================
1786 #if defined(_NTDDK_)
1792 PFNKSHANDLER MethodHandler
;
1793 BOOLEAN MethodSupported
;
1797 PFNKSHANDLER SupportHandler
;
1799 } KSMETHOD_ITEM
, *PKSMETHOD_ITEM
;
1806 PFNKSFASTHANDLER MethodHandler
;
1807 BOOLEAN MethodSupported
;
1809 } KSFASTMETHOD_ITEM
, *PKSFASTMETHOD_ITEM
;
1815 const KSMETHOD_ITEM
* MethodItem
;
1817 const KSFASTMETHOD_ITEM
*FastIoTable
;
1818 } KSMETHOD_SET
, *PKSMETHOD_SET
;
1821 /* ===============================================================
1827 KSPROPERTY Property
;
1830 } KSP_NODE
, *PKSP_NODE
;
1837 } KSM_NODE
, *PKSM_NODE
;
1844 } KSE_NODE
, *PKSE_NODE
;
1849 } KSNODE_CREATE
, *PKSNODE_CREATE
;
1852 /* ===============================================================
1855 typedef struct _KSEVENT_ENTRY KSEVENT_ENTRY
, *PKSEVENT_ENTRY
;
1857 #if defined(_NTDDK_)
1860 KSEVENTDATA EventData
;
1862 } KSEVENT_TIME_MARK
, *PKSEVENT_TIME_MARK
;
1866 KSEVENTDATA EventData
;
1869 } KSEVENT_TIME_INTERVAL
, *PKSEVENT_TIME_INTERVAL
;
1871 typedef NTSTATUS (NTAPI
*PFNKSADDEVENT
)(
1873 IN PKSEVENTDATA EventData
,
1874 IN
struct _KSEVENT_ENTRY
* EventEntry
);
1878 (NTAPI
*PFNKSREMOVEEVENT
)(
1879 IN PFILE_OBJECT FileObject
,
1880 IN
struct _KSEVENT_ENTRY
* EventEntry
1887 ULONG ExtraEntryData
;
1888 PFNKSADDEVENT AddHandler
;
1889 PFNKSREMOVEEVENT RemoveHandler
;
1890 PFNKSHANDLER SupportHandler
;
1891 } KSEVENT_ITEM
, *PKSEVENT_ITEM
;
1897 const KSEVENT_ITEM
* EventItem
;
1898 } KSEVENT_SET
, *PKSEVENT_SET
;
1900 struct _KSEVENT_ENTRY
1902 LIST_ENTRY ListEntry
;
1905 PKSDPC_ITEM DpcItem
;
1906 PKSBUFFER_ITEM BufferItem
;
1908 PKSEVENTDATA EventData
;
1909 ULONG NotificationType
;
1910 const KSEVENT_SET
* EventSet
;
1911 const KSEVENT_ITEM
* EventItem
;
1912 PFILE_OBJECT FileObject
;
1913 ULONG SemaphoreAdjustment
;
1919 /* ===============================================================
1923 #if defined(_NTDDK_)
1925 typedef struct _KSPIN KSPIN
, *PKSPIN
;
1926 typedef struct _KSSTREAM_POINTER KSSTREAM_POINTER
, *PKSSTREAM_POINTER
;
1927 typedef struct _KSSTREAM_POINTER_OFFSET KSSTREAM_POINTER_OFFSET
, *PKSSTREAM_POINTER_OFFSET
;
1928 typedef struct _KSMAPPING KSMAPPING
, *PKSMAPPING
;
1929 typedef struct _KSPROCESSPIN KSPROCESSPIN
, *PKSPROCESSPIN
;
1931 #define IOCTL_KS_HANDSHAKE CTL_CODE(FILE_DEVICE_KS, 0x007, METHOD_NEITHER, FILE_ANY_ACCESS)
1937 } KSHANDSHAKE
, *PKSHANDSHAKE
;
1941 (NTAPI
*PFNKSPINHANDSHAKE
)(
1949 (NTAPI
*PFNKSPINPOWER
)(
1951 IN DEVICE_POWER_STATE State
1956 (NTAPI
*PFNKSPINFRAMERETURN
)(
1958 IN PVOID Data OPTIONAL
,
1959 IN ULONG Size OPTIONAL
,
1960 IN PMDL Mdl OPTIONAL
,
1961 IN PVOID Context OPTIONAL
,
1967 (NTAPI
*PFNKSPINIRPCOMPLETION
)(
1974 (NTAPI
*PFNKSPINIRP
)(
1987 (NTAPI
*PFNKSPINVOID
)(
1993 (NTAPI
*PFNKSSTREAMPOINTER
)(
1994 IN PKSSTREAM_POINTER StreamPointer
1999 PKSATTRIBUTE
* Attributes
;
2000 } KSATTRIBUTE_LIST
, *PKSATTRIBUTE_LIST
;
2004 (NTAPI
*PFNKSPINSETDATAFORMAT
)(
2006 IN PKSDATAFORMAT OldFormat OPTIONAL
,
2007 IN PKSMULTIPLE_ITEM OldAttributeList OPTIONAL
,
2008 IN
const KSDATARANGE
* DataRange
,
2009 IN
const KSATTRIBUTE_LIST
* AttributeRange OPTIONAL
2014 (NTAPI
*PFNKSPINSETDEVICESTATE
)(
2017 IN KSSTATE FromState
2020 typedef struct _KSCLOCK_DISPATCH KSCLOCK_DISPATCH
, *PKSCLOCK_DISPATCH
;
2021 typedef struct _KSALLOCATOR_DISPATCH KSALLOCATOR_DISPATCH
, *PKSALLOCATOR_DISPATCH
;
2029 PFNKSPINSETDATAFORMAT SetDataFormat
;
2030 PFNKSPINSETDEVICESTATE SetDeviceState
;
2032 PFNKSPINVOID Disconnect
;
2033 const KSCLOCK_DISPATCH
* Clock
;
2034 const KSALLOCATOR_DISPATCH
* Allocator
;
2035 } KSPIN_DISPATCH
, *PKSPIN_DISPATCH
;
2039 (NTAPI
*PFNKSPINSETTIMER
)(
2042 IN LARGE_INTEGER DueTime
,
2048 (NTAPI
*PFNKSPINCANCELTIMER
)(
2055 (FASTCALL
*PFNKSPINCORRELATEDTIME
)(
2057 OUT PLONGLONG SystemTime
2062 (NTAPI
*PFNKSPINRESOLUTION
)(
2064 OUT PKSRESOLUTION Resolution
2067 struct _KSCLOCK_DISPATCH
{
2068 PFNKSPINSETTIMER SetTimer
;
2069 PFNKSPINCANCELTIMER CancelTimer
;
2070 PFNKSPINCORRELATEDTIME CorrelatedTime
;
2071 PFNKSPINRESOLUTION Resolution
;
2076 (NTAPI
*PFNKSPININITIALIZEALLOCATOR
)(
2078 IN PKSALLOCATOR_FRAMING AllocatorFraming
,
2082 typedef PVOID (NTAPI
*PFNKSDELETEALLOCATOR
)(
2085 typedef PVOID (NTAPI
*PFNKSDEFAULTALLOCATE
)(
2088 typedef PVOID (NTAPI
*PFNKSDEFAULTFREE
)(
2092 struct _KSALLOCATOR_DISPATCH
{
2093 PFNKSPININITIALIZEALLOCATOR InitializeAllocator
;
2094 PFNKSDELETEALLOCATOR DeleteAllocator
;
2095 PFNKSDEFAULTALLOCATE Allocate
;
2096 PFNKSDEFAULTFREE Free
;
2101 ULONG PropertySetsCount
;
2102 ULONG PropertyItemSize
;
2103 const KSPROPERTY_SET
* PropertySets
;
2104 ULONG MethodSetsCount
;
2105 ULONG MethodItemSize
;
2106 const KSMETHOD_SET
* MethodSets
;
2107 ULONG EventSetsCount
;
2108 ULONG EventItemSize
;
2109 const KSEVENT_SET
* EventSets
;
2110 #if !defined(_WIN64)
2113 } KSAUTOMATION_TABLE
, *PKSAUTOMATION_TABLE
;
2119 ULONG InterfacesCount
;
2120 const KSPIN_INTERFACE
* Interfaces
;
2122 const KSPIN_MEDIUM
* Mediums
;
2123 ULONG DataRangesCount
;
2124 const PKSDATARANGE
* DataRanges
;
2125 KSPIN_DATAFLOW DataFlow
;
2126 KSPIN_COMMUNICATION Communication
;
2127 const GUID
* Category
;
2132 ULONG ConstrainedDataRangesCount
;
2133 PKSDATARANGE
* ConstrainedDataRanges
;
2136 } KSPIN_DESCRIPTOR
, *PKSPIN_DESCRIPTOR
;
2140 (NTAPI
*PFNKSINTERSECTHANDLER
)(
2143 IN PKSDATARANGE DataRange
,
2144 OUT PVOID Data OPTIONAL
2149 (NTAPI
*PFNKSINTERSECTHANDLEREX
)(
2153 IN PKSDATARANGE DataRange
,
2154 IN PKSDATARANGE MatchingDataRange
,
2155 IN ULONG DataBufferSize
,
2156 OUT PVOID Data OPTIONAL
,
2162 const KSPIN_DISPATCH
* Dispatch
;
2163 const KSAUTOMATION_TABLE
* AutomationTable
;
2164 KSPIN_DESCRIPTOR PinDescriptor
;
2166 ULONG InstancesPossible
;
2167 ULONG InstancesNecessary
;
2168 const KSALLOCATOR_FRAMING_EX
* AllocatorFraming
;
2169 PFNKSINTERSECTHANDLEREX IntersectHandler
;
2170 } KSPIN_DESCRIPTOR_EX
, *PKSPIN_DESCRIPTOR_EX
;
2173 #define KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING
2174 #define KSPIN_FLAG_CRITICAL_PROCESSING
2175 #define KSPIN_FLAG_HYPERCRITICAL_PROCESSING
2176 #define KSPIN_FLAG_ASYNCHRONOUS_PROCESSING
2177 #define KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING
2178 #define KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL
2179 #define KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING
2180 #define KSPIN_FLAG_ENFORCE_FIFO
2181 #define KSPIN_FLAG_GENERATE_MAPPINGS
2182 #define KSPIN_FLAG_DISTINCT_TRAILING_EDGE
2183 #define KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY
2184 #define KSPIN_FLAG_SPLITTER
2185 #define KSPIN_FLAG_USE_STANDARD_TRANSPORT
2186 #define KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT
2187 #define KSPIN_FLAG_FIXED_FORMAT
2188 #define KSPIN_FLAG_GENERATE_EOS_EVENTS
2189 #define KSPIN_FLAG_RENDERER
2190 #define KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING
2191 #define KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE
2192 #define KSPIN_FLAG_DENY_USERMODE_ACCESS
2193 #define KSPIN_FLAG_IMPLEMENT_CLOCK
2197 const KSPIN_DESCRIPTOR_EX
* Descriptor
;
2201 KSPIN_COMMUNICATION Communication
;
2202 BOOLEAN ConnectionIsExternal
;
2203 KSPIN_INTERFACE ConnectionInterface
;
2204 KSPIN_MEDIUM ConnectionMedium
;
2205 KSPRIORITY ConnectionPriority
;
2206 PKSDATAFORMAT ConnectionFormat
;
2207 PKSMULTIPLE_ITEM AttributeList
;
2208 ULONG StreamHeaderSize
;
2209 KSPIN_DATAFLOW DataFlow
;
2210 KSSTATE DeviceState
;
2212 KSSTATE ClientState
;
2215 #define DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(Handler)\
2216 DEFINE_KSPROPERTY_ITEM(\
2217 KSPROPERTY_PIN_CINSTANCES,\
2220 sizeof(KSPIN_CINSTANCES),\
2221 NULL, NULL, 0, NULL, NULL, 0)
2223 #define DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(Handler)\
2224 DEFINE_KSPROPERTY_ITEM(\
2225 KSPROPERTY_PIN_CTYPES,\
2227 sizeof(KSPROPERTY),\
2229 NULL, NULL, 0, NULL, NULL, 0)
2231 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(Handler)\
2232 DEFINE_KSPROPERTY_ITEM(\
2233 KSPROPERTY_PIN_DATAFLOW,\
2236 sizeof(KSPIN_DATAFLOW),\
2237 NULL, NULL, 0, NULL, NULL, 0)
2239 #define DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(Handler)\
2240 DEFINE_KSPROPERTY_ITEM(\
2241 KSPROPERTY_PIN_DATARANGES,\
2245 NULL, NULL, 0, NULL, NULL, 0)
2247 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(Handler)\
2248 DEFINE_KSPROPERTY_ITEM(\
2249 KSPROPERTY_PIN_DATAINTERSECTION,\
2251 sizeof(KSP_PIN) + sizeof(KSMULTIPLE_ITEM),\
2253 NULL, NULL, 0, NULL, NULL, 0)
2255 #define DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(Handler)\
2256 DEFINE_KSPROPERTY_ITEM(\
2257 KSPROPERTY_PIN_INTERFACES,\
2261 NULL, NULL, 0, NULL, NULL, 0)
2263 #define DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(Handler)\
2264 DEFINE_KSPROPERTY_ITEM(\
2265 KSPROPERTY_PIN_MEDIUMS,\
2269 NULL, NULL, 0, NULL, NULL, 0)
2271 #define DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(Handler)\
2272 DEFINE_KSPROPERTY_ITEM(\
2273 KSPROPERTY_PIN_COMMUNICATION,\
2276 sizeof(KSPIN_COMMUNICATION),\
2277 NULL, NULL, 0, NULL, NULL, 0)
2279 #define DEFINE_KSPROPERTY_ITEM_PIN_GLOBALCINSTANCES(Handler)\
2280 DEFINE_KSPROPERTY_ITEM(\
2281 KSPROPERTY_PIN_GLOBALCINSTANCES,\
2284 sizeof(KSPIN_CINSTANCES),\
2285 NULL, NULL, 0, NULL, NULL, 0)
2287 #define DEFINE_KSPROPERTY_ITEM_PIN_NECESSARYINSTANCES(Handler)\
2288 DEFINE_KSPROPERTY_ITEM(\
2289 KSPROPERTY_PIN_NECESSARYINSTANCES,\
2293 NULL, NULL, 0, NULL, NULL, 0)
2295 #define DEFINE_KSPROPERTY_ITEM_PIN_PHYSICALCONNECTION(Handler)\
2296 DEFINE_KSPROPERTY_ITEM(\
2297 KSPROPERTY_PIN_PHYSICALCONNECTION,\
2301 NULL, NULL, 0, NULL, NULL, 0)
2303 #define DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(Handler)\
2304 DEFINE_KSPROPERTY_ITEM(\
2305 KSPROPERTY_PIN_CATEGORY,\
2309 NULL, NULL, 0, NULL, NULL, 0)
2311 #define DEFINE_KSPROPERTY_ITEM_PIN_NAME(Handler)\
2312 DEFINE_KSPROPERTY_ITEM(\
2313 KSPROPERTY_PIN_NAME,\
2317 NULL, NULL, 0, NULL, NULL, 0)
2319 #define DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(Handler)\
2320 DEFINE_KSPROPERTY_ITEM(\
2321 KSPROPERTY_PIN_CONSTRAINEDDATARANGES,\
2325 NULL, NULL, 0, NULL, NULL, 0)
2327 #define DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(Handler)\
2328 DEFINE_KSPROPERTY_ITEM(\
2329 KSPROPERTY_PIN_PROPOSEDATAFORMAT,\
2332 sizeof(KSDATAFORMAT),\
2333 (Handler), NULL, 0, NULL, NULL, 0)
2335 #define DEFINE_KSPROPERTY_PINSET(PinSet,\
2336 PropGeneral, PropInstances, PropIntersection)\
2337 DEFINE_KSPROPERTY_TABLE(PinSet) {\
2338 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
2339 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
2340 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
2341 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
2342 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
2343 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
2344 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
2345 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
2346 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
2347 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral)\
2350 #define DEFINE_KSPROPERTY_PINSETCONSTRAINED(PinSet,\
2351 PropGeneral, PropInstances, PropIntersection)\
2352 DEFINE_KSPROPERTY_TABLE(PinSet) {\
2353 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
2354 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
2355 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
2356 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
2357 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
2358 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
2359 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
2360 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
2361 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
2362 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral),\
2363 DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral)\
2376 #define DEFINE_KSPROPERTY_TABLE(tablename)\
2377 const KSPROPERTY_ITEM tablename[] =
2383 KSPIN_INTERFACE Interface
;
2384 KSPIN_MEDIUM Medium
;
2387 KSPRIORITY Priority
;
2388 } KSPIN_CONNECT
, *PKSPIN_CONNECT
;
2390 /* ===============================================================
2400 } KSTOPOLOGY_CONNECTION
, *PKSTOPOLOGY_CONNECTION
;
2404 ULONG CategoriesCount
;
2405 const GUID
* Categories
;
2406 ULONG TopologyNodesCount
;
2407 const GUID
* TopologyNodes
;
2408 ULONG TopologyConnectionsCount
;
2409 const KSTOPOLOGY_CONNECTION
* TopologyConnections
;
2410 const GUID
* TopologyNodesNames
;
2412 } KSTOPOLOGY
, *PKSTOPOLOGY
;
2415 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler)\
2416 DEFINE_KSPROPERTY_ITEM(\
2417 KSPROPERTY_TOPOLOGY_CATEGORIES,\
2419 sizeof(KSPROPERTY),\
2421 NULL, NULL, 0, NULL, NULL, 0)
2423 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler)\
2424 DEFINE_KSPROPERTY_ITEM(\
2425 KSPROPERTY_TOPOLOGY_NODES,\
2427 sizeof(KSPROPERTY),\
2429 NULL, NULL, 0, NULL, NULL, 0)
2431 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler)\
2432 DEFINE_KSPROPERTY_ITEM(\
2433 KSPROPERTY_TOPOLOGY_CONNECTIONS,\
2435 sizeof(KSPROPERTY),\
2437 NULL, NULL, 0, NULL, NULL, 0)
2439 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\
2440 DEFINE_KSPROPERTY_ITEM(\
2441 KSPROPERTY_TOPOLOGY_NAME,\
2445 NULL, NULL, 0, NULL, NULL, 0)
2447 #define DEFINE_KSPROPERTY_TOPOLOGYSET(TopologySet, Handler)\
2448 DEFINE_KSPROPERTY_TABLE(TopologySet) {\
2449 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler),\
2450 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler),\
2451 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler),\
2452 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\
2455 /* ===============================================================
2460 typedef void* UNKNOWN
;
2462 typedef PVOID (NTAPI
*PFNKSINITIALIZEALLOCATOR
)(
2463 IN PVOID InitialContext
,
2464 IN PKSALLOCATOR_FRAMING AllocatorFraming
,
2465 OUT PVOID
* Context
);
2467 #if defined(_NTDDK_)
2468 typedef NTSTATUS (NTAPI
*PFNKSALLOCATOR
)(
2470 IN ULONG BufferSize
,
2471 IN BOOLEAN InputOperation
);
2473 typedef NTSTATUS (NTAPI
*PFNKINTERSECTHANDLEREX
)(
2477 IN PKSDATARANGE DataRange
,
2478 IN PKSDATARANGE MatchingDataRange
,
2479 IN ULONG DataBufferSize
,
2480 OUT PVOID Data OPTIONAL
,
2481 OUT PULONG DataSize
);
2486 (NTAPI
*PFNALLOCATOR_ALLOCATEFRAME
)(
2487 IN PFILE_OBJECT FileObject
,
2493 (NTAPI
*PFNALLOCATOR_FREEFRAME
)(
2494 IN PFILE_OBJECT FileObject
,
2499 PFNALLOCATOR_ALLOCATEFRAME AllocateFrame
;
2500 PFNALLOCATOR_FREEFRAME FreeFrame
;
2501 } KSSTREAMALLOCATOR_FUNCTIONTABLE
, *PKSSTREAMALLOCATOR_FUNCTIONTABLE
;
2507 KSALLOCATOR_FRAMING Framing
;
2508 ULONG AllocatedFrames
;
2510 } KSSTREAMALLOCATOR_STATUS
, *PKSSTREAMALLOCATOR_STATUS
;
2514 KSALLOCATOR_FRAMING_EX Framing
;
2515 ULONG AllocatedFrames
;
2517 } KSSTREAMALLOCATOR_STATUS_EX
, *PKSSTREAMALLOCATOR_STATUS_EX
;
2522 ULONG TypeSpecificFlags
;
2523 KSTIME PresentationTime
;
2529 } KSSTREAM_HEADER
, *PKSSTREAM_HEADER
;
2533 /* ===============================================================
2536 #if defined(_NTDDK_)
2538 PHYSICAL_ADDRESS PhysicalAddress
;
2545 KSSTREAM_POINTER_STATE_UNLOCKED
= 0,
2546 KSSTREAM_POINTER_STATE_LOCKED
2547 } KSSTREAM_POINTER_STATE
;
2549 typedef struct _KSGATE KSGATE
, *PKSGATE
;
2550 typedef struct _KSPROCESSPIN_INDEXENTRY KSPROCESSPIN_INDEXENTRY
, *PKSPROCESSPIN_INDEXENTRY
;
2557 struct _KSSTREAM_POINTER_OFFSET
2559 #if defined(_NTDDK_)
2562 PKSMAPPING Mappings
;
2567 #if !defined(_WIN64)
2573 #if defined(_NTDDK_)
2574 struct _KSSTREAM_POINTER
2578 PKSSTREAM_HEADER StreamHeader
;
2579 PKSSTREAM_POINTER_OFFSET Offset
;
2580 KSSTREAM_POINTER_OFFSET OffsetIn
;
2581 KSSTREAM_POINTER_OFFSET OffsetOut
;
2584 struct _KSPROCESSPIN
2587 PKSSTREAM_POINTER StreamPointer
;
2588 PKSPROCESSPIN InPlaceCounterpart
;
2589 PKSPROCESSPIN DelegateBranch
;
2590 PKSPROCESSPIN CopySource
;
2592 ULONG BytesAvailable
;
2598 struct _KSPROCESSPIN_INDEXENTRY
2600 PKSPROCESSPIN
* Pins
;
2605 /* ===============================================================
2611 #if defined(_NTDDK_)
2613 typedef struct _KSFILTER_DISPATCH KSFILTER_DISPATCH
, *PKSFILTER_DISPATCH
;
2614 typedef struct _KSDEVICE KSDEVICE
, *PKSDEVICE
;
2615 typedef struct _KSFILTER KSFILTER
, *PKSFILTER
;
2616 typedef struct _KSNODE_DESCRIPTOR KSNODE_DESCRIPTOR
, *PKSNODE_DESCRIPTOR
;
2617 typedef struct _KSFILTER_DESCRIPTOR KSFILTER_DESCRIPTOR
, *PKSFILTER_DESCRIPTOR
;
2618 typedef struct _KSDEVICE_DESCRIPTOR KSDEVICE_DESCRIPTOR
, *PKSDEVICE_DESCRIPTOR
;
2620 typedef NTSTATUS (NTAPI
*PFNKSDEVICECREATE
)(
2621 IN PKSDEVICE Device
);
2623 typedef NTSTATUS (NTAPI
*PFNKSDEVICEPNPSTART
)(
2624 IN PKSDEVICE Device
,
2626 IN PCM_RESOURCE_LIST TranslatedResourceList OPTIONAL
,
2627 IN PCM_RESOURCE_LIST UntranslatedResourceList OPTIONAL
);
2629 typedef NTSTATUS (NTAPI
*PFNKSDEVICE
)(
2630 IN PKSDEVICE Device
);
2632 typedef NTSTATUS (NTAPI
*PFNKSDEVICEIRP
)(
2633 IN PKSDEVICE Device
,
2636 typedef VOID (NTAPI
*PFNKSDEVICEIRPVOID
)(
2637 IN PKSDEVICE Device
,
2640 typedef NTSTATUS (NTAPI
*PFNKSDEVICEQUERYCAPABILITIES
)(
2641 IN PKSDEVICE Device
,
2643 IN OUT PDEVICE_CAPABILITIES Capabilities
);
2645 typedef NTSTATUS (NTAPI
*PFNKSDEVICEQUERYPOWER
)(
2646 IN PKSDEVICE Device
,
2648 IN DEVICE_POWER_STATE DeviceTo
,
2649 IN DEVICE_POWER_STATE DeviceFrom
,
2650 IN SYSTEM_POWER_STATE SystemTo
,
2651 IN SYSTEM_POWER_STATE SystemFrom
,
2652 IN POWER_ACTION Action
);
2654 typedef VOID (NTAPI
*PFNKSDEVICESETPOWER
)(
2655 IN PKSDEVICE Device
,
2657 IN DEVICE_POWER_STATE To
,
2658 IN DEVICE_POWER_STATE From
);
2660 typedef struct _KSDEVICE_DISPATCH
{
2661 PFNKSDEVICECREATE Add
;
2662 PFNKSDEVICEPNPSTART Start
;
2663 PFNKSDEVICE PostStart
;
2664 PFNKSDEVICEIRP QueryStop
;
2665 PFNKSDEVICEIRPVOID CancelStop
;
2666 PFNKSDEVICEIRPVOID Stop
;
2667 PFNKSDEVICEIRP QueryRemove
;
2668 PFNKSDEVICEIRPVOID CancelRemove
;
2669 PFNKSDEVICEIRPVOID Remove
;
2670 PFNKSDEVICEQUERYCAPABILITIES QueryCapabilities
;
2671 PFNKSDEVICEIRPVOID SurpriseRemoval
;
2672 PFNKSDEVICEQUERYPOWER QueryPower
;
2673 PFNKSDEVICESETPOWER SetPower
;
2674 PFNKSDEVICEIRP QueryInterface
;
2675 }KSDEVICE_DISPATCH
, *PKSDEVICE_DISPATCH
;
2677 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
2678 #define KSDEVICE_DESCRIPTOR_VERSION_2 (0x110)
2679 #define MIN_DEV_VER_FOR_FLAGS (0x110)
2684 const KSDEVICE_DESCRIPTOR
* Descriptor
;
2687 PDEVICE_OBJECT FunctionalDeviceObject
;
2688 PDEVICE_OBJECT PhysicalDeviceObject
;
2689 PDEVICE_OBJECT NextDeviceObject
;
2691 SYSTEM_POWER_STATE SystemPowerState
;
2692 DEVICE_POWER_STATE DevicePowerState
;
2696 /* ===============================================================
2699 #if defined(_NTDDK_)
2702 const KSFILTER_DESCRIPTOR
* Descriptor
;
2709 (NTAPI
*PFNKSFILTERPOWER
)(
2710 IN PKSFILTER Filter
,
2711 IN DEVICE_POWER_STATE State
2714 typedef NTSTATUS (NTAPI
*PFNKSFILTERIRP
)(
2715 IN PKSFILTER Filter
,
2718 typedef NTSTATUS (NTAPI
*PFNKSFILTERPROCESS
)(
2719 IN PKSFILTER Filter
,
2720 IN PKSPROCESSPIN_INDEXENTRY ProcessPinsIndex
);
2722 typedef NTSTATUS (NTAPI
*PFNKSFILTERVOID
)(
2723 IN PKSFILTER Filter
);
2725 struct _KSFILTER_DISPATCH
2727 PFNKSFILTERIRP Create
;
2728 PFNKSFILTERIRP Close
;
2729 PFNKSFILTERPROCESS Process
;
2730 PFNKSFILTERVOID Reset
;
2733 struct _KSNODE_DESCRIPTOR
2735 const KSAUTOMATION_TABLE
* AutomationTable
;
2740 struct _KSFILTER_DESCRIPTOR
2742 const KSFILTER_DISPATCH
* Dispatch
;
2743 const KSAUTOMATION_TABLE
* AutomationTable
;
2746 const GUID
* ReferenceGuid
;
2747 ULONG PinDescriptorsCount
;
2748 ULONG PinDescriptorSize
;
2749 const KSPIN_DESCRIPTOR_EX
* PinDescriptors
;
2750 ULONG CategoriesCount
;
2751 const GUID
* Categories
;
2752 ULONG NodeDescriptorsCount
;
2753 ULONG NodeDescriptorSize
;
2754 const KSNODE_DESCRIPTOR
* NodeDescriptors
;
2755 ULONG ConnectionsCount
;
2756 const KSTOPOLOGY_CONNECTION
* Connections
;
2757 const KSCOMPONENTID
* ComponentId
;
2760 struct _KSDEVICE_DESCRIPTOR
2762 const KSDEVICE_DISPATCH
* Dispatch
;
2763 ULONG FilterDescriptorsCount
;
2764 const KSFILTER_DESCRIPTOR
*const* FilterDescriptors
;
2769 struct _KSFILTERFACTORY
{
2770 const KSFILTER_DESCRIPTOR
* FilterDescriptor
;
2776 /* ===============================================================
2777 Minidriver Callbacks
2779 #if defined(_NTDDK_)
2780 typedef NTSTATUS (NTAPI
*KStrMethodHandler
)(
2782 IN PKSIDENTIFIER Request
,
2785 typedef NTSTATUS (NTAPI
*KStrSupportHandler
)(
2787 IN PKSIDENTIFIER Request
,
2791 /* ===============================================================
2794 #if defined(_NTDDK_)
2795 KSDDKAPI NTSTATUS NTAPI
2797 IN HANDLE ConnectionHandle
,
2798 IN PKSALLOCATOR_FRAMING AllocatorFraming
,
2799 OUT PHANDLE AllocatorHandle
);
2801 KSDDKAPI NTSTATUS NTAPI
2802 KsCreateDefaultAllocator(
2805 KSDDKAPI NTSTATUS NTAPI
2806 KsValidateAllocatorCreateRequest(
2808 OUT PKSALLOCATOR_FRAMING
* AllocatorFraming
);
2810 KSDDKAPI NTSTATUS NTAPI
2811 KsCreateDefaultAllocatorEx(
2813 IN PVOID InitializeContext OPTIONAL
,
2814 IN PFNKSDEFAULTALLOCATE DefaultAllocate OPTIONAL
,
2815 IN PFNKSDEFAULTFREE DefaultFree OPTIONAL
,
2816 IN PFNKSINITIALIZEALLOCATOR InitializeAllocator OPTIONAL
,
2817 IN PFNKSDELETEALLOCATOR DeleteAllocator OPTIONAL
);
2819 KSDDKAPI NTSTATUS NTAPI
2820 KsValidateAllocatorFramingEx(
2821 IN PKSALLOCATOR_FRAMING_EX Framing
,
2822 IN ULONG BufferSize
,
2823 IN
const KSALLOCATOR_FRAMING_EX
* PinFraming
);
2826 /* ===============================================================
2829 #if defined(_NTDDK_)
2830 typedef BOOLEAN (NTAPI
*PFNKSSETTIMER
)(
2833 IN LARGE_INTEGER DueTime
,
2836 typedef BOOLEAN (NTAPI
*PFNKSCANCELTIMER
)(
2840 typedef LONGLONG (FASTCALL
*PFNKSCORRELATEDTIME
)(
2842 OUT PLONGLONG SystemTime
);
2844 KSDDKAPI NTSTATUS NTAPI
2846 IN HANDLE ConnectionHandle
,
2847 IN PKSCLOCK_CREATE ClockCreate
,
2848 OUT PHANDLE ClockHandle
);
2850 KSDDKAPI NTSTATUS NTAPI
2851 KsCreateDefaultClock(
2853 IN PKSDEFAULTCLOCK DefaultClock
);
2855 KSDDKAPI NTSTATUS NTAPI
2856 KsAllocateDefaultClock(
2857 OUT PKSDEFAULTCLOCK
* DefaultClock
);
2859 KSDDKAPI NTSTATUS NTAPI
2860 KsAllocateDefaultClockEx(
2861 OUT PKSDEFAULTCLOCK
* DefaultClock
,
2862 IN PVOID Context OPTIONAL
,
2863 IN PFNKSSETTIMER SetTimer OPTIONAL
,
2864 IN PFNKSCANCELTIMER CancelTimer OPTIONAL
,
2865 IN PFNKSCORRELATEDTIME CorrelatedTime OPTIONAL
,
2866 IN
const KSRESOLUTION
* Resolution OPTIONAL
,
2871 IN PKSDEFAULTCLOCK DefaultClock
);
2873 KSDDKAPI NTSTATUS NTAPI
2874 KsValidateClockCreateRequest(
2876 OUT PKSCLOCK_CREATE
* ClockCreate
);
2878 KSDDKAPI KSSTATE NTAPI
2879 KsGetDefaultClockState(
2880 IN PKSDEFAULTCLOCK DefaultClock
);
2883 KsSetDefaultClockState(
2884 IN PKSDEFAULTCLOCK DefaultClock
,
2887 KSDDKAPI LONGLONG NTAPI
2888 KsGetDefaultClockTime(
2889 IN PKSDEFAULTCLOCK DefaultClock
);
2892 KsSetDefaultClockTime(
2893 IN PKSDEFAULTCLOCK DefaultClock
,
2897 /* ===============================================================
2901 /* Method sets - TODO: Make into macros! */
2902 #if defined(_NTDDK_)
2905 KSMETHOD_SET_IRP_STORAGE(
2909 KSMETHOD_ITEM_IRP_STORAGE(
2913 KSMETHOD_TYPE_IRP_STORAGE(
2917 KSDDKAPI NTSTATUS NTAPI
2920 IN ULONG MethodSetsCount
,
2921 IN PKSMETHOD_SET MethodSet
);
2923 KSDDKAPI NTSTATUS NTAPI
2924 KsMethodHandlerWithAllocator(
2926 IN ULONG MethodSetsCount
,
2927 IN PKSMETHOD_SET MethodSet
,
2928 IN PFNKSALLOCATOR Allocator OPTIONAL
,
2929 IN ULONG MethodItemSize OPTIONAL
);
2931 KSDDKAPI BOOLEAN NTAPI
2932 KsFastMethodHandler(
2933 IN PFILE_OBJECT FileObject
,
2934 IN PKSMETHOD UNALIGNED Method
,
2935 IN ULONG MethodLength
,
2936 IN OUT PVOID UNALIGNED Data
,
2937 IN ULONG DataLength
,
2938 OUT PIO_STATUS_BLOCK IoStatus
,
2939 IN ULONG MethodSetsCount
,
2940 IN
const KSMETHOD_SET
* MethodSet
);
2943 /* ===============================================================
2946 #if defined(_NTDDK_)
2947 KSDDKAPI NTSTATUS NTAPI
2950 IN ULONG PropertySetsCount
,
2951 IN
const KSPROPERTY_SET
* PropertySet
);
2953 KSDDKAPI NTSTATUS NTAPI
2954 KsPropertyHandlerWithAllocator(
2956 IN ULONG PropertySetsCount
,
2957 IN PKSPROPERTY_SET PropertySet
,
2958 IN PFNKSALLOCATOR Allocator OPTIONAL
,
2959 IN ULONG PropertyItemSize OPTIONAL
);
2961 KSDDKAPI NTSTATUS NTAPI
2962 KsUnserializeObjectPropertiesFromRegistry(
2963 IN PFILE_OBJECT FileObject
,
2964 IN HANDLE ParentKey OPTIONAL
,
2965 IN PUNICODE_STRING RegistryPath OPTIONAL
);
2967 KSDDKAPI BOOLEAN NTAPI
2968 KsFastPropertyHandler(
2969 IN PFILE_OBJECT FileObject
,
2970 IN PKSPROPERTY UNALIGNED Property
,
2971 IN ULONG PropertyLength
,
2972 IN OUT PVOID UNALIGNED Data
,
2973 IN ULONG DataLength
,
2974 OUT PIO_STATUS_BLOCK IoStatus
,
2975 IN ULONG PropertySetsCount
,
2976 IN
const KSPROPERTY_SET
* PropertySet
);
2979 /* ===============================================================
2982 #if defined(_NTDDK_)
2984 #define KSPROBE_STREAMREAD 0x00000000
2985 #define KSPROBE_STREAMWRITE 0x00000001
2986 #define KSPROBE_ALLOCATEMDL 0x00000010
2987 #define KSPROBE_PROBEANDLOCK 0x00000020
2988 #define KSPROBE_SYSTEMADDRESS 0x00000040
2989 #define KSPROBE_MODIFY 0x00000200
2990 #define KSPROBE_STREAMWRITEMODIFY (KSPROBE_MODIFY | KSPROBE_STREAMWRITE)
2991 #define KSPROBE_ALLOWFORMATCHANGE 0x00000080
2993 #define KSSTREAM_READ KSPROBE_STREAMREAD
2994 #define KSSTREAM_WRITE KSPROBE_STREAMWRITE
2995 #define KSSTREAM_PAGED_DATA 0x00000000
2996 #define KSSTREAM_NONPAGED_DATA 0x00000100
2997 #define KSSTREAM_SYNCHRONOUS 0x00001000
2998 #define KSSTREAM_FAILUREEXCEPTION 0x00002000
3002 (NTAPI
*PFNKSGENERATEEVENTCALLBACK
)(
3004 IN PKSEVENT_ENTRY EventEntry
3007 KSDDKAPI NTSTATUS NTAPI
3009 IN PKSEVENT_ENTRY EntryEvent
);
3014 IN
const GUID
* EventSet OPTIONAL
,
3017 IN PVOID Data OPTIONAL
,
3018 IN PFNKSGENERATEEVENTCALLBACK CallBack OPTIONAL
,
3019 IN PVOID CallBackContext OPTIONAL
3023 KSDDKAPI NTSTATUS NTAPI
3024 KsEnableEventWithAllocator(
3026 IN ULONG EventSetsCount
,
3027 IN PKSEVENT_SET EventSet
,
3028 IN OUT PLIST_ENTRY EventsList OPTIONAL
,
3029 IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL
,
3030 IN PVOID EventsLock OPTIONAL
,
3031 IN PFNKSALLOCATOR Allocator OPTIONAL
,
3032 IN ULONG EventItemSize OPTIONAL
);
3034 KSDDKAPI NTSTATUS NTAPI
3035 KsGenerateDataEvent(
3036 IN PKSEVENT_ENTRY EventEntry
,
3040 KSDDKAPI NTSTATUS NTAPI
3043 IN ULONG EventSetsCount
,
3044 IN KSEVENT_SET
* EventSet
,
3045 IN OUT PLIST_ENTRY EventsList OPTIONAL
,
3046 IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL
,
3047 IN PVOID EventsLock OPTIONAL
);
3051 IN PKSEVENT_ENTRY EventEntry
);
3053 KSDDKAPI NTSTATUS NTAPI
3056 IN OUT PLIST_ENTRY EventsList
,
3057 IN KSEVENTS_LOCKTYPE EventsFlags
,
3058 IN PVOID EventsLock
);
3062 IN PFILE_OBJECT FileObject
,
3063 IN OUT PLIST_ENTRY EventsList
,
3064 IN KSEVENTS_LOCKTYPE EVentsFlags
,
3065 IN PVOID EventsLock
);
3067 /* ===============================================================
3071 KSDDKAPI NTSTATUS NTAPI
3072 KsValidateTopologyNodeCreateRequest(
3074 IN PKSTOPOLOGY Topology
,
3075 OUT PKSNODE_CREATE
* NodeCreate
);
3077 KSDDKAPI NTSTATUS NTAPI
3078 KsCreateTopologyNode(
3079 IN HANDLE ParentHandle
,
3080 IN PKSNODE_CREATE NodeCreate
,
3081 IN ACCESS_MASK DesiredAccess
,
3082 OUT PHANDLE NodeHandle
);
3084 KSDDKAPI NTSTATUS NTAPI
3085 KsTopologyPropertyHandler(
3087 IN PKSPROPERTY Property
,
3089 IN
const KSTOPOLOGY
* Topology
);
3093 /* ===============================================================
3094 Connectivity Functions
3097 KSDDKAPI NTSTATUS NTAPI
3099 IN HANDLE FilterHandle
,
3100 IN PKSPIN_CONNECT Connect
,
3101 IN ACCESS_MASK DesiredAccess
,
3102 OUT PHANDLE ConnectionHandle
);
3104 KSDDKAPI NTSTATUS NTAPI
3105 KsValidateConnectRequest(
3107 IN ULONG DescriptorsCount
,
3108 IN KSPIN_DESCRIPTOR
* Descriptor
,
3109 OUT PKSPIN_CONNECT
* Connect
);
3111 KSDDKAPI NTSTATUS NTAPI
3112 KsPinPropertyHandler(
3114 IN PKSPROPERTY Property
,
3116 IN ULONG DescriptorsCount
,
3117 IN
const KSPIN_DESCRIPTOR
* Descriptor
);
3119 KSDDKAPI NTSTATUS NTAPI
3120 KsPinDataIntersection(
3124 IN ULONG DescriptorsCount
,
3125 IN
const KSPIN_DESCRIPTOR
* Descriptor
,
3126 IN PFNKSINTERSECTHANDLER IntersectHandler
);
3128 KSDDKAPI NTSTATUS NTAPI
3129 KsPinDataIntersectionEx(
3133 IN ULONG DescriptorsCount
,
3134 IN
const KSPIN_DESCRIPTOR
* Descriptor
,
3135 IN ULONG DescriptorSize
,
3136 IN PFNKSINTERSECTHANDLEREX IntersectHandler OPTIONAL
,
3137 IN PVOID HandlerContext OPTIONAL
);
3139 KSDDKAPI PKSFILTER NTAPI
3140 KsPinGetParentFilter(
3145 /* Does this belong here? */
3147 KSDDKAPI NTSTATUS NTAPI
3148 KsHandleSizedListQuery(
3150 IN ULONG DataItemsCount
,
3151 IN ULONG DataItemSize
,
3152 IN
const VOID
* DataItems
);
3155 /* ===============================================================
3156 IRP Helper Functions
3159 typedef NTSTATUS (NTAPI
*PFNKSIRPLISTCALLBACK
)(
3163 KSDDKAPI NTSTATUS NTAPI
3164 KsAcquireResetValue(
3166 OUT KSRESET
* ResetValue
);
3169 KsAddIrpToCancelableQueue(
3170 IN OUT PLIST_ENTRY QueueHead
,
3171 IN PKSPIN_LOCK SpinLock
,
3173 IN KSLIST_ENTRY_LOCATION ListLocation
,
3174 IN PDRIVER_CANCEL DriverCancel OPTIONAL
);
3176 KSDDKAPI NTSTATUS NTAPI
3177 KsAddObjectCreateItemToDeviceHeader(
3178 IN KSDEVICE_HEADER Header
,
3179 IN PDRIVER_DISPATCH Create
,
3181 IN PWCHAR ObjectClass
,
3182 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
3184 KSDDKAPI NTSTATUS NTAPI
3185 KsAddObjectCreateItemToObjectHeader(
3186 IN KSOBJECT_HEADER Header
,
3187 IN PDRIVER_DISPATCH Create
,
3189 IN PWCHAR ObjectClass
,
3190 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
3192 KSDDKAPI NTSTATUS NTAPI
3193 KsAllocateDeviceHeader(
3194 OUT KSDEVICE_HEADER
* Header
,
3195 IN ULONG ItemsCount
,
3196 IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL
);
3198 KSDDKAPI NTSTATUS NTAPI
3199 KsAllocateExtraData(
3202 OUT PVOID
* ExtraBuffer
);
3204 KSDDKAPI NTSTATUS NTAPI
3205 KsAllocateObjectCreateItem(
3206 IN KSDEVICE_HEADER Header
,
3207 IN PKSOBJECT_CREATE_ITEM CreateItem
,
3208 IN BOOLEAN AllocateEntry
,
3209 IN PFNKSITEMFREECALLBACK ItemFreeCallback OPTIONAL
);
3211 KSDDKAPI NTSTATUS NTAPI
3212 KsAllocateObjectHeader(
3213 OUT KSOBJECT_HEADER
*Header
,
3214 IN ULONG ItemsCount
,
3215 IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL
,
3217 IN KSDISPATCH_TABLE
* Table
);
3221 IN OUT PLIST_ENTRY QueueHead
,
3222 IN PKSPIN_LOCK SpinLock
);
3226 IN PDEVICE_OBJECT DeviceObject
,
3229 KSDDKAPI NTSTATUS NTAPI
3230 KsDefaultDeviceIoCompletion(
3231 IN PDEVICE_OBJECT DeviceObject
,
3235 KSDDKAPI ULONG NTAPI
3236 KsDecrementCountedWorker(
3237 IN PKSWORKER Worker);
3240 KSDDKAPI BOOLEAN NTAPI
3241 KsDispatchFastIoDeviceControlFailure(
3242 IN PFILE_OBJECT FileObject
,
3244 IN PVOID InputBuffer OPTIONAL
,
3245 IN ULONG InputBufferLength
,
3246 OUT PVOID OutputBuffer OPTIONAL
,
3247 IN ULONG OutputBufferLength
,
3248 IN ULONG IoControlCode
,
3249 OUT PIO_STATUS_BLOCK IoStatus
,
3250 IN PDEVICE_OBJECT DeviceObject
); /* always return false */
3252 KSDDKAPI BOOLEAN NTAPI
3253 KsDispatchFastReadFailure(
3254 IN PFILE_OBJECT FileObject
,
3255 IN PLARGE_INTEGER FileOffset
,
3260 OUT PIO_STATUS_BLOCK IoStatus
,
3261 IN PDEVICE_OBJECT DeviceObject
); /* always return false */
3263 /* This function does the same as the above */
3264 #define KsDispatchFastWriteFailure KsDispatchFastReadFailure
3266 KSDDKAPI NTSTATUS NTAPI
3267 KsDispatchInvalidDeviceRequest(
3268 IN PDEVICE_OBJECT DeviceObject
,
3271 KSDDKAPI NTSTATUS NTAPI
3273 IN PDEVICE_OBJECT DeviceObject
,
3276 KSDDKAPI NTSTATUS NTAPI
3277 KsDispatchSpecificMethod(
3279 IN PFNKSHANDLER Handler
);
3281 KSDDKAPI NTSTATUS NTAPI
3282 KsDispatchSpecificProperty(
3284 IN PFNKSHANDLER Handler
);
3286 KSDDKAPI NTSTATUS NTAPI
3287 KsForwardAndCatchIrp(
3288 IN PDEVICE_OBJECT DeviceObject
,
3290 IN PFILE_OBJECT FileObject
,
3291 IN KSSTACK_USE StackUse
);
3293 KSDDKAPI NTSTATUS NTAPI
3296 IN PFILE_OBJECT FileObject
,
3297 IN BOOLEAN ReuseStackLocation
);
3301 IN KSDEVICE_HEADER Header
);
3307 KSDDKAPI NTSTATUS NTAPI
3308 KsGetChildCreateParameter(
3310 OUT PVOID
* CreateParameter
);
3312 KSDDKAPI NTSTATUS NTAPI
3313 KsMoveIrpsOnCancelableQueue(
3314 IN OUT PLIST_ENTRY SourceList
,
3315 IN PKSPIN_LOCK SourceLock
,
3316 IN OUT PLIST_ENTRY DestinationList
,
3317 IN PKSPIN_LOCK DestinationLock OPTIONAL
,
3318 IN KSLIST_ENTRY_LOCATION ListLocation
,
3319 IN PFNKSIRPLISTCALLBACK ListCallback
,
3322 KSDDKAPI NTSTATUS NTAPI
3325 IN ULONG ProbeFlags
,
3326 IN ULONG HeaderSize
);
3328 KSDDKAPI NTSTATUS NTAPI
3329 KsQueryInformationFile(
3330 IN PFILE_OBJECT FileObject
,
3331 OUT PVOID FileInformation
,
3333 IN FILE_INFORMATION_CLASS FileInformationClass
);
3335 KSDDKAPI ACCESS_MASK NTAPI
3336 KsQueryObjectAccessMask(
3337 IN KSOBJECT_HEADER Header
);
3339 KSDDKAPI PKSOBJECT_CREATE_ITEM NTAPI
3340 KsQueryObjectCreateItem(
3341 IN KSOBJECT_HEADER Header
);
3343 KSDDKAPI NTSTATUS NTAPI
3345 IN PFILE_OBJECT FileObject
,
3346 IN PKEVENT Event OPTIONAL
,
3347 IN PVOID PortContext OPTIONAL
,
3348 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3351 IN ULONG Key OPTIONAL
,
3352 IN KPROCESSOR_MODE RequestorMode
);
3355 KsReleaseIrpOnCancelableQueue(
3357 IN PDRIVER_CANCEL DriverCancel OPTIONAL
);
3360 KsRemoveIrpFromCancelableQueue(
3361 IN OUT PLIST_ENTRY QueueHead
,
3362 IN PKSPIN_LOCK SpinLock
,
3363 IN KSLIST_ENTRY_LOCATION ListLocation
,
3364 IN KSIRP_REMOVAL_OPERATION RemovalOperation
);
3367 KsRemoveSpecificIrpFromCancelableQueue(
3370 KSDDKAPI NTSTATUS NTAPI
3371 KsSetInformationFile(
3372 IN PFILE_OBJECT FileObject
,
3373 IN PVOID FileInformation
,
3375 IN FILE_INFORMATION_CLASS FileInformationClass
);
3377 KSDDKAPI NTSTATUS NTAPI
3378 KsSetMajorFunctionHandler(
3379 IN PDRIVER_OBJECT DriverObject
,
3380 IN ULONG MajorFunction
);
3382 KSDDKAPI NTSTATUS NTAPI
3384 IN PFILE_OBJECT FileObject
,
3385 IN PKEVENT Event OPTIONAL
,
3386 IN PVOID PortContext OPTIONAL
,
3387 IN PIO_COMPLETION_ROUTINE CompletionRoutine OPTIONAL
,
3388 IN PVOID CompletionContext OPTIONAL
,
3389 IN KSCOMPLETION_INVOCATION CompletionInvocationFlags OPTIONAL
,
3390 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3391 IN OUT PVOID StreamHeaders
,
3394 IN KPROCESSOR_MODE RequestorMode
);
3396 KSDDKAPI NTSTATUS NTAPI
3398 IN PFILE_OBJECT FileObject
,
3399 IN PKEVENT Event OPTIONAL
,
3400 IN PVOID PortContext OPTIONAL
,
3401 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3404 IN ULONG Key OPTIONAL
,
3405 IN KPROCESSOR_MODE RequestorMode
);
3408 KSDDKAPI NTSTATUS NTAPI
3409 KsDefaultForwardIrp(
3410 IN PDEVICE_OBJECT DeviceObject
,
3413 /* ===============================================================
3414 Worker Management Functions
3417 KSDDKAPI NTSTATUS NTAPI
3419 IN WORK_QUEUE_TYPE WorkQueueType
,
3420 OUT PKSWORKER
* Worker
);
3424 IN PKSWORKER Worker
);
3426 KSDDKAPI NTSTATUS NTAPI
3427 KsRegisterCountedWorker(
3428 IN WORK_QUEUE_TYPE WorkQueueType
,
3429 IN PWORK_QUEUE_ITEM CountedWorkItem
,
3430 OUT PKSWORKER
* Worker
);
3432 KSDDKAPI ULONG NTAPI
3433 KsDecrementCountedWorker(
3434 IN PKSWORKER Worker
);
3436 KSDDKAPI ULONG NTAPI
3437 KsIncrementCountedWorker(
3438 IN PKSWORKER Worker
);
3440 KSDDKAPI NTSTATUS NTAPI
3442 IN PKSWORKER Worker
,
3443 IN PWORK_QUEUE_ITEM WorkItem
);
3446 /* ===============================================================
3450 KSDDKAPI NTSTATUS NTAPI
3453 IN POOL_TYPE PoolType
,
3454 IN ULONG_PTR ResourceName
,
3455 IN ULONG ResourceType
,
3456 OUT PVOID
* Resource
,
3457 OUT PULONG ResourceSize
);
3460 KSDDKAPI NTSTATUS NTAPI
3461 KsGetImageNameAndResourceId(
3463 OUT PUNICODE_STRING ImageName,
3464 OUT PULONG_PTR ResourceId,
3465 OUT PULONG ValueType);
3467 KSDDKAPI NTSTATUS NTAPI
3469 IN PDEVICE_OBJECT PhysicalDeviceObject,
3470 IN PUNICODE_STRING ModuleName,
3471 OUT PUNICODE_STRING ImageName,
3472 OUT PULONG_PTR ResourceId,
3473 OUT PULONG ValueType);
3477 /* ===============================================================
3478 Misc. Helper Functions
3481 KSDDKAPI PVOID NTAPI
3486 KSDDKAPI NTSTATUS NTAPI
3488 IN PUNICODE_STRING SymbolicLink
,
3489 IN PKSPIN_MEDIUM Medium
,
3490 IN ULONG PinDirection
);
3492 KSDDKAPI NTSTATUS NTAPI
3493 KsDefaultDispatchPnp(
3494 IN PDEVICE_OBJECT DeviceObject
,
3498 KsSetDevicePnpAndBaseObject(
3499 IN KSDEVICE_HEADER Header
,
3500 IN PDEVICE_OBJECT PnpDeviceObject
,
3501 IN PDEVICE_OBJECT BaseDevice
);
3503 KSDDKAPI NTSTATUS NTAPI
3504 KsDefaultDispatchPower(
3505 IN PDEVICE_OBJECT DeviceObject
,
3510 IN KSOBJECT_HEADER Header
,
3511 IN PFNKSCONTEXT_DISPATCH PowerDispatch OPTIONAL
,
3512 IN PVOID PowerContext OPTIONAL
);
3514 KSDDKAPI NTSTATUS NTAPI
3515 KsReferenceBusObject(
3516 IN KSDEVICE_HEADER Header
);
3519 KsDereferenceBusObject(
3520 IN KSDEVICE_HEADER Header
);
3522 KSDDKAPI NTSTATUS NTAPI
3523 KsFreeObjectCreateItem(
3524 IN KSDEVICE_HEADER Header
,
3525 IN PUNICODE_STRING CreateItem
);
3527 KSDDKAPI NTSTATUS NTAPI
3528 KsFreeObjectCreateItemsByContext(
3529 IN KSDEVICE_HEADER Header
,
3534 IN PDRIVER_OBJECT DriverObject
);
3536 KSDDKAPI PDEVICE_OBJECT NTAPI
3537 KsQueryDevicePnpObject(
3538 IN KSDEVICE_HEADER Header
);
3541 KsRecalculateStackDepth(
3542 IN KSDEVICE_HEADER Header
,
3543 IN BOOLEAN ReuseStackLocation
);
3546 KsSetTargetDeviceObject(
3547 IN KSOBJECT_HEADER Header
,
3548 IN PDEVICE_OBJECT TargetDevice OPTIONAL
);
3552 IN KSOBJECT_HEADER Header
,
3553 IN KSTARGET_STATE TargetState
);
3555 KSDDKAPI NTSTATUS NTAPI
3556 KsSynchronousIoControlDevice(
3557 IN PFILE_OBJECT FileObject
,
3558 IN KPROCESSOR_MODE RequestorMode
,
3562 OUT PVOID OutBuffer
,
3564 OUT PULONG BytesReturned
);
3568 /* ===============================================================
3569 AVStream Functions (XP / DirectX 8)
3571 http://www.osronline.com/ddkx/stream/avstream_5q9f.htm
3574 #if defined(_NTDDK_)
3579 IN PDRIVER_OBJECT DriverObject
,
3580 IN PUNICODE_STRING RegistryPath
,
3581 IN
const KSDEVICE_DESCRIPTOR
*Descriptor OPTIONAL
);
3583 typedef struct _KSFILTERFACTORY KSFILTERFACTORY
, *PKSFILTERFACTORY
; //FIXME
3590 KsInitializeDevice (
3591 IN PDEVICE_OBJECT FunctionalDeviceObject
,
3592 IN PDEVICE_OBJECT PhysicalDeviceObject
,
3593 IN PDEVICE_OBJECT NextDeviceObject
,
3594 IN
const KSDEVICE_DESCRIPTOR
* Descriptor OPTIONAL
);
3597 typedef void (NTAPI
*PFNKSFILTERFACTORYPOWER
)(
3598 IN PKSFILTERFACTORY FilterFactory
,
3599 IN DEVICE_POWER_STATE State
);
3605 IN KSOBJECT_BAG ObjectBag
,
3606 IN OUT PVOID
* PointerToPointerToItem
,
3621 IN PKSDEVICE Device
);
3627 IN PDRIVER_OBJECT DriverObject
,
3628 IN PDEVICE_OBJECT PhysicalDeviceObject
);
3635 IN PKSEVENT_ENTRY EventEntry
);
3640 KsAddItemToObjectBag(
3641 IN KSOBJECT_BAG ObjectBag
,
3643 IN PFNKSFREE Free OPTIONAL
);
3648 KsRemoveItemFromObjectBag(
3649 IN KSOBJECT_BAG ObjectBag
,
3656 KsAllocateObjectBag(
3657 IN PKSDEVICE Device
,
3658 OUT KSOBJECT_BAG
* ObjectBag
);
3664 IN KSOBJECT_BAG ObjectBag
3670 KsCompletePendingRequest(
3676 KsCopyObjectBagItems(
3677 IN KSOBJECT_BAG ObjectBagDestination
,
3678 IN KSOBJECT_BAG ObjectBagSource
);
3684 IN PDRIVER_OBJECT DriverObject
,
3685 IN PDEVICE_OBJECT PhysicalDeviceObject
,
3686 IN
const KSDEVICE_DESCRIPTOR
* Descriptor OPTIONAL
,
3687 IN ULONG ExtensionSize OPTIONAL
,
3688 OUT PKSDEVICE
* Device OPTIONAL
);
3693 KsCreateFilterFactory(
3694 IN PDEVICE_OBJECT DeviceObject
,
3695 IN
const KSFILTER_DESCRIPTOR
* Descriptor
,
3696 IN PWCHAR RefString OPTIONAL
,
3697 IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL
,
3698 IN ULONG CreateItemFlags
,
3699 IN PFNKSFILTERFACTORYPOWER SleepCallback OPTIONAL
,
3700 IN PFNKSFILTERFACTORYPOWER WakeCallback OPTIONAL
,
3701 OUT PKSFILTERFACTORY
*FilterFactory OPTIONAL
);
3706 KsFilterFactoryUpdateCacheData(
3707 IN PKSFILTERFACTORY FilterFactory
,
3708 IN
const KSFILTER_DESCRIPTOR
*FilterDescriptor OPTIONAL
3728 KsDefaultAddEventHandler(
3730 IN PKSEVENTDATA EventData
,
3731 IN OUT PKSEVENT_ENTRY EventEntry
);
3736 KsDispatchQuerySecurity(
3737 IN PDEVICE_OBJECT DeviceObject
,
3744 KsDispatchSetSecurity(
3745 IN PDEVICE_OBJECT DeviceObject
,
3760 KsFilterGetParentFilterFactory(
3764 return (PKSFILTERFACTORY
) KsGetParent((PVOID
) Filter
);
3770 KsFilterFactoryGetParentDevice(
3771 IN PKSFILTERFACTORY FilterFactory
3774 return (PKSDEVICE
) KsGetParent((PVOID
) FilterFactory
);
3779 #define KsDeleteFilterFactory(FilterFactory) \
3780 KsFreeObjectCreateItemsByContext( \
3781 *(KSDEVICE_HEADER *)( \
3782 KsFilterFactoryGetParentDevice(FilterFactory)->FunctionalDeviceObject-> \
3790 IN PKSDEVICE Device
,
3807 KsDeviceGetFirstChildFilterFactory(
3808 IN PKSDEVICE Device
);
3810 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
3822 KsDeviceGetOuterUnknown(
3823 IN PKSDEVICE Device
)
3825 return KsGetOuterUnknown((PVOID
) Device
);
3831 KsDeviceRegisterAggregatedClientUnknown(
3832 IN PKSDEVICE Device
,
3833 IN PUNKNOWN ClientUnknown
);
3838 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
3840 typedef interface IKsReferenceClock
* PIKSREFERENCECLOCK
;
3843 #define INTERFACE IKsReferenceClock
3844 DECLARE_INTERFACE_(IKsReferenceClock
,IUnknown
)
3846 DEFINE_ABSTRACT_UNKNOWN() // For C
3848 STDMETHOD_(LONGLONG
,GetTime
)(THIS
3850 STDMETHOD_(LONGLONG
,GetPhysicalTime
)(THIS
3852 STDMETHOD_(LONGLONG
,GetCorrelatedTime
)(THIS_
3853 OUT PLONGLONG SystemTime
3855 STDMETHOD_(LONGLONG
,GetCorrelatedPhysicalTime
)(THIS_
3856 OUT PLONGLONG SystemTime
3858 STDMETHOD_(NTSTATUS
, GetResolution
)(THIS_
3859 OUT PKSRESOLUTION Resolution
3861 STDMETHOD_(NTSTATUS
, GetState
)(THIS_
3867 #define INTERFACE IKsControl
3869 DEFINE_GUID(IID_IKsControl
, 0x28F54685L
, 0x06FD, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96);
3871 DECLARE_INTERFACE_(IKsControl
,IUnknown
)
3873 STDMETHOD_(NTSTATUS
, QueryInterface
)( THIS_
3875 PVOID
* Interface
)PURE
;
3877 STDMETHOD_(ULONG
, AddRef
)(THIS
) PURE
;
3879 STDMETHOD_(ULONG
, Release
)(THIS
) PURE
;
3881 STDMETHOD_(NTSTATUS
, KsProperty
)(THIS_
3882 IN PKSPROPERTY Property
,
3883 IN ULONG PropertyLength
,
3884 IN OUT PVOID PropertyData
,
3885 IN ULONG DataLength
,
3886 OUT ULONG
* BytesReturned
3888 STDMETHOD_(NTSTATUS
, KsMethod
)(THIS_
3889 IN PKSMETHOD Method
,
3890 IN ULONG MethodLength
,
3891 IN OUT PVOID MethodData
,
3892 IN ULONG DataLength
,
3893 OUT ULONG
* BytesReturned
3895 STDMETHOD_(NTSTATUS
, KsEvent
)(THIS_
3896 IN PKSEVENT Event OPTIONAL
,
3897 IN ULONG EventLength
,
3898 IN OUT PVOID EventData
,
3899 IN ULONG DataLength
,
3900 OUT ULONG
* BytesReturned
3905 typedef IKsControl
* PIKSCONTROL
;
3912 KsDeviceRegisterAdapterObject(
3913 IN PKSDEVICE Device
,
3914 IN PADAPTER_OBJECT AdapterObject
,
3915 IN ULONG MaxMappingByteCount
,
3916 IN ULONG MappingTableStride
);
3922 IN PKSDEVICE Device
,
3929 #define KsDiscard(object, pointer) \
3930 KsRemoveItemFromObjectBag(object->Bag, pointer, TRUE)
3932 #define KsFilterAcquireControl(Filter) \
3933 KsAcquireControl((PVOID) Filter);
3935 #define KsFilterAddEvent(Filter, EventEntry) \
3936 KsAddEvent(Filter,EventEntry);
3941 KsFilterAcquireProcessingMutex(
3942 IN PKSFILTER Filter
);
3948 KsFilterAddTopologyConnections(
3949 IN PKSFILTER Filter
,
3950 IN ULONG NewConnectionsCount
,
3951 IN
const KSTOPOLOGY_CONNECTION
*const NewTopologyConnections
);
3956 KsFilterAttemptProcessing(
3957 IN PKSFILTER Filter
,
3958 IN BOOLEAN Asynchronous
);
3964 IN PKSFILTER Filter
,
3965 IN
const KSNODE_DESCRIPTOR
*const NodeDescriptor
,
3971 KsFilterCreatePinFactory(
3972 IN PKSFILTER Filter
,
3973 IN
const KSPIN_DESCRIPTOR_EX
*const PinDescriptor
,
3979 KsFilterFactoryGetDevice(
3980 IN PKSFILTERFACTORY FilterFactory
);
3983 #endif /* avstream */