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),
36 #pragma GCC system_header
44 Not sure if this is correct but it causes problems if not included. Can't
45 seem to compile without this...
52 #define KSDDKAPI DECLSPEC_IMPORT
59 typedef PVOID PKSWORKER
;
61 /* ===============================================================
62 GUID definition helpers
67 /* CDECL is used here in MS DDK but does this really work?? */
68 #define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name
72 #define STATICGUIDOF(guid) STATIC_##guid
76 #if defined(__cplusplus) && _MSC_VER >= 1100
77 #define DEFINE_GUIDSTRUCT(guid, name) struct __declspec(uuid(guid)) name
78 #define DEFINE_GUIDNAMED(name) __uidof(struct name)
80 #define DEFINE_GUIDSTRUCT(guid, name) DEFINE_GUIDEX(name)
81 #define DEFINE_GUIDNAMED(name) name
85 #define STATIC_GUID_NULL \
86 0x00000000L, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
87 DEFINE_GUIDSTRUCT("00000000-0000-0000-0000-000000000000", GUID_NULL
);
88 #define GUID_NULL DEFINE_GUIDNAMED(GUID_NULL)
91 /* ===============================================================
95 #define IOCTL_KS_DISABLE_EVENT \
102 #define IOCTL_KS_ENABLE_EVENT \
109 #define IOCTL_KS_METHOD \
116 #define IOCTL_KS_PROPERTY \
123 #define IOCTL_KS_WRITE_STREAM \
130 #define IOCTL_KS_READ_STREAM \
137 #define IOCTL_KS_RESET_STATE \
145 /* ===============================================================
149 #define STATIC_KSCATEGORY_BRIDGE \
150 0x085AFF00L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
151 DEFINE_GUIDSTRUCT("085AFF00-62CE-11CF-A5D6-28DB04C10000", KSCATEGORY_BRIDGE
);
152 #define KSCATEGORY_BRIDGE DEFINE_GUIDNAMED(KSCATEGORY_BRIDGE)
154 #define STATIC_KSCATEGORY_CAPTURE \
155 0x65E8773DL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
156 DEFINE_GUIDSTRUCT("65E8773D-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_CAPTURE
);
157 #define KSCATEGORY_CAPTURE DEFINE_GUIDNAMED(KSCATEGORY_CAPTURE)
159 #define STATIC_KSCATEGORY_RENDER \
160 0x65E8773EL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
161 DEFINE_GUIDSTRUCT("65E8773E-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_RENDER
);
162 #define KSCATEGORY_RENDER DEFINE_GUIDNAMED(KSCATEGORY_RENDER)
164 #define STATIC_KSCATEGORY_MIXER \
165 0xAD809C00L, 0x7B88, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
166 DEFINE_GUIDSTRUCT("AD809C00-7B88-11D0-A5D6-28DB04C10000", KSCATEGORY_MIXER
);
167 #define KSCATEGORY_MIXER DEFINE_GUIDNAMED(KSCATEGORY_MIXER)
169 #define STATIC_KSCATEGORY_SPLITTER \
170 0x0A4252A0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
171 DEFINE_GUIDSTRUCT("0A4252A0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_SPLITTER
);
172 #define KSCATEGORY_SPLITTER DEFINE_GUIDNAMED(KSCATEGORY_SPLITTER)
174 #define STATIC_KSCATEGORY_DATACOMPRESSOR \
175 0x1E84C900L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
176 DEFINE_GUIDSTRUCT("1E84C900-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATACOMPRESSOR
);
177 #define KSCATEGORY_DATACOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATACOMPRESSOR)
179 #define STATIC_KSCATEGORY_DATADECOMPRESSOR \
180 0x2721AE20L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
181 DEFINE_GUIDSTRUCT("2721AE20-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATADECOMPRESSOR
);
182 #define KSCATEGORY_DATADECOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATADECOMPRESSOR)
184 #define STATIC_KSCATEGORY_DATATRANSFORM \
185 0x2EB07EA0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
186 DEFINE_GUIDSTRUCT("2EB07EA0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATATRANSFORM
);
187 #define KSCATEGORY_DATATRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_DATATRANSFORM)
189 #define STATIC_KSCATEGORY_COMMUNICATIONSTRANSFORM \
190 0xCF1DDA2CL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
191 DEFINE_GUIDSTRUCT("CF1DDA2C-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_COMMUNICATIONSTRANSFORM
);
192 #define KSCATEGORY_COMMUNICATIONSTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_COMMUNICATIONSTRANSFORM)
194 #define STATIC_KSCATEGORY_INTERFACETRANSFORM \
195 0xCF1DDA2DL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
196 DEFINE_GUIDSTRUCT("CF1DDA2D-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_INTERFACETRANSFORM
);
197 #define KSCATEGORY_INTERFACETRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_INTERFACETRANSFORM)
199 #define STATIC_KSCATEGORY_MEDIUMTRANSFORM \
200 0xCF1DDA2EL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
201 DEFINE_GUIDSTRUCT("CF1DDA2E-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_MEDIUMTRANSFORM
);
202 #define KSCATEGORY_MEDIUMTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_MEDIUMTRANSFORM)
204 #define STATIC_KSCATEGORY_FILESYSTEM \
205 0x760FED5EL, 0x9357, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
206 DEFINE_GUIDSTRUCT("760FED5E-9357-11D0-A3CC-00A0C9223196", KSCATEGORY_FILESYSTEM
);
207 #define KSCATEGORY_FILESYSTEM DEFINE_GUIDNAMED(KSCATEGORY_FILESYSTEM)
209 #define STATIC_KSCATEGORY_CLOCK \
210 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
211 DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000", KSCATEGORY_CLOCK
);
212 #define KSCATEGORY_CLOCK DEFINE_GUIDNAMED(KSCATEGORY_CLOCK)
214 #define STATIC_KSCATEGORY_PROXY \
215 0x97EBAACAL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
216 DEFINE_GUIDSTRUCT("97EBAACA-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_PROXY
);
217 #define KSCATEGORY_PROXY DEFINE_GUIDNAMED(KSCATEGORY_PROXY)
219 #define STATIC_KSCATEGORY_QUALITY \
220 0x97EBAACBL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
221 DEFINE_GUIDSTRUCT("97EBAACB-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_QUALITY
);
222 #define KSCATEGORY_QUALITY DEFINE_GUIDNAMED(KSCATEGORY_QUALITY)
225 /* ===============================================================
226 Clock Properties/Methods/Events
229 #define KSPROPSETID_Clock \
230 0xDF12A4C0L, 0xAC17, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
234 KSPROPERTY_CLOCK_TIME
,
235 KSPROPERTY_CLOCK_PHYSICALTIME
,
236 KSPROPERTY_CORRELATEDTIME
,
237 KSPROPERTY_CORRELATEDPHYSICALTIME
,
238 KSPROPERTY_CLOCK_RESOLUTION
,
239 KSPROPERTY_CLOCK_STATE
,
240 KSPROPERTY_CLOCK_FUNCTIONTABLE
243 #define KSEVENTSETID_Clock \
244 0x364D8E20L, 0x62C7, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
248 KSEVENT_CLOCK_INTERVAL_MARK
,
249 KSEVENT_CLOCK_POSITION_MARK
250 } KSEVENT_CLOCK_POSITION
;
253 /* ===============================================================
254 Connection Properties/Methods/Events
257 #define KSPROPSETID_Connection \
258 0x1D58C920L, 0xAC9B, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
262 KSPROPERTY_CONNECTION_STATE
,
263 KSPROPERTY_CONNECTION_PRIORITY
,
264 KSPROPERTY_CONNECTION_DATAFORMAT
,
265 KSPROPERTY_CONNECTION_ALLOCATORFRAMING
,
266 KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT
,
267 KSPROPERTY_CONNECTION_ACQUIREORDERING
,
268 KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX
,
269 KSPROPERTY_CONNECTION_STARTAT
270 } KSPROPERTY_CONNECTION
;
272 #define KSEVENTSETID_Connection \
273 0x7f4bcbe0L, 0x9ea5, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00
277 KSEVENT_CONNECTION_POSITIONUPDATE
,
278 KSEVENT_CONNECTION_DATADISCONTINUITY
,
279 KSEVENT_CONNECTION_TIMEDISCONTINUITY
,
280 KSEVENT_CONNECTION_PRIORITY
,
281 KSEVENT_CONNECTION_ENDOFSTREAM
282 } KSEVENT_CONNECTION
;
285 /* ===============================================================
287 Properties/Methods/Events
290 #define KSPROPSETID_General \
291 0x1464EDA5L, 0x6A8F, 0x11D1, 0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
295 KSPROPERTY_GENERAL_COMPONENTID
296 } KSPROPERTY_GENERAL
;
299 /* ===============================================================
301 Properties/Methods/Events
304 #define KSPROPSETID_GM \
305 0xAF627536L, 0xE719, 0x11D2, 0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D
309 KSPROPERTY_GM_GRAPHMANAGER
,
310 KSPROPERTY_GM_TIMESTAMP_CLOCK
,
311 KSPROPERTY_GM_RATEMATCH
,
312 KSPROPERTY_GM_RENDERCLOCK
316 /* ===============================================================
318 Properties/Methods/Events
321 #define KSPROPSETID_MediaSeeking \
322 0xEE904F0CL, 0xD09B, 0x11D0, 0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
326 KSPROPERTY_MEDIASEEKING_CAPABILITIES
,
327 KSPROPERTY_MEDIASEEKING_FORMATS
,
328 KSPROPERTY_MEDIASEEKING_TIMEFORMAT
,
329 KSPROPERTY_MEDIASEEKING_POSITION
,
330 KSPROPERTY_MEDIASEEKING_STOPPOSITION
,
331 KSPROPERTY_MEDIASEEKING_POSITIONS
,
332 KSPROPERTY_MEDIASEEKING_DURATION
,
333 KSPROPERTY_MEDIASEEKING_AVAILABLE
,
334 KSPROPERTY_MEDIASEEKING_PREROLL
,
335 KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT
336 } KSPROPERTY_MEDIASEEKING
;
339 /* ===============================================================
341 Properties/Methods/Events
344 #define KSPROPSETID_Pin \
345 0x8C134960L, 0x51AD, 0x11CF, 0x87, 0x8A, 0x94, 0xF8, 0x01, 0xC1, 0x00, 0x00
349 KSPROPERTY_PIN_CINSTANCES
,
350 KSPROPERTY_PIN_CTYPES
,
351 KSPROPERTY_PIN_DATAFLOW
,
352 KSPROPERTY_PIN_DATARANGES
,
353 KSPROPERTY_PIN_DATAINTERSECTION
,
354 KSPROPERTY_PIN_INTERFACES
,
355 KSPROPERTY_PIN_MEDIUMS
,
356 KSPROPERTY_PIN_COMMUNICATION
,
357 KSPROPERTY_PIN_GLOBALCINSTANCES
,
358 KSPROPERTY_PIN_NECESSARYINSTANCES
,
359 KSPROPERTY_PIN_PHYSICALCONNECTION
,
360 KSPROPERTY_PIN_CATEGORY
,
362 KSPROPERTY_PIN_CONSTRAINEDDATARANGES
,
363 KSPROPERTY_PIN_PROPOSEDATAFORMAT
367 /* ===============================================================
369 Properties/Methods/Events
372 #define KSPROPSETID_Quality \
373 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
377 KSPROPERTY_QUALITY_REPORT
,
378 KSPROPERTY_QUALITY_ERROR
379 } KSPROPERTY_QUALITY
;
382 /* ===============================================================
384 Properties/Methods/Events
387 #define KSPROPSETID_Stream \
388 0x65aaba60L, 0x98ae, 0x11cf, 0xa1, 0x0d, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
392 KSPROPERTY_STREAM_ALLOCATOR
,
393 KSPROPERTY_STREAM_QUALITY
,
394 KSPROPERTY_STREAM_DEGRADATION
,
395 KSPROPERTY_STREAM_MASTERCLOCK
,
396 KSPROPERTY_STREAM_TIMEFORMAT
,
397 KSPROPERTY_STREAM_PRESENTATIONTIME
,
398 KSPROPERTY_STREAM_PRESENTATIONEXTENT
,
399 KSPROPERTY_STREAM_FRAMETIME
,
400 KSPROPERTY_STREAM_RATECAPABILITY
,
401 KSPROPERTY_STREAM_RATE
,
402 KSPROPERTY_STREAM_PIPE_ID
406 /* ===============================================================
408 Properties/Methods/Events
411 #define KSPROPSETID_StreamAllocator \
412 0xcf6e4342L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
416 KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE
,
417 KSPROPERTY_STREAMALLOCATOR_STATUS
418 } KSPROPERTY_STREAMALLOCATOR
;
420 #define KSMETHODSETID_StreamAllocator \
421 0xcf6e4341L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
425 KSMETHOD_STREAMALLOCATOR_ALLOC
,
426 KSMETHOD_STREAMALLOCATOR_FREE
427 } KSMETHOD_STREAMALLOCATOR
;
430 #define KSEVENTSETID_StreamAllocator
434 KSEVENT_STREAMALLOCATOR_INTERNAL_FREEFRAME
,
435 KSEVENT_STREAMALLOCATOR_FREEFRAME
436 } KSEVENT_STREAMALLOCATOR
;
439 /* ===============================================================
441 Properties/Methods/Events
444 #define KSPROPSETID_StreamInterface \
445 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
449 KSPROPERTY_STREAMINTERFACE_HEADERSIZE
450 } KSPROPERTY_STREAMINTERFACE
;
453 /* ===============================================================
455 Properties/Methods/Events
458 #define KSPROPSETID_Topology \
459 0x720D4AC0L, 0x7533, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
463 KSPROPERTY_TOPOLOGY_CATEGORIES
,
464 KSPROPERTY_TOPOLOGY_CONNECTIONS
,
465 KSPROPERTY_TOPOLOGY_NAME
,
466 KSPROPERTY_TOPOLOGY_NODES
467 } KSPROPERTY_TOPOLOGY
;
471 /* ===============================================================
472 Property Sets for audio drivers - TODO
475 #define KSPROPSETID_AC3
477 KSPROPERTY_AC3_ALTERNATE_AUDIO
478 KSPROPERTY_AC3_BIT_STREAM_MODE
479 KSPROPERTY_AC3_DIALOGUE_LEVEL
480 KSPROPERTY_AC3_DOWNMIX
481 KSPROPERTY_AC3_ERROR_CONCEALMENT
482 KSPROPERTY_AC3_LANGUAGE_CODE
483 KSPROPERTY_AC3_ROOM_TYPE
486 #define KSPROPSETID_Acoustic_Echo_Cancel
489 KSPROPERTY_AEC_NOISE_FILL_ENABLE
490 KSPROPERTY_AEC_STATUS
493 #define KSPROPSETID_Audio
495 KSPROPERTY_AUDIO_3D_INTERFACE
497 KSPROPERTY_AUDIO_ALGORITHM_INSTANCE
498 KSPROPERTY_AUDIO_BASS
499 KSPROPERTY_AUDIO_BASS_BOOST
500 KSPROPERTY_AUDIO_CHANNEL_CONFIG
501 KSPROPERTY_AUDIO_CHORUS_LEVEL
502 KSPROPERTY_AUDIO_COPY_PROTECTION
503 KSPROPERTY_AUDIO_CPU_RESOURCES
504 KSPROPERTY_AUDIO_DELAY
505 KSPROPERTY_AUDIO_DEMUX_DEST
506 KSPROPERTY_AUDIO_DEV_SPECIFIC
507 KSPROPERTY_AUDIO_DYNAMIC_RANGE
508 KSPROPERTY_AUDIO_DYNAMIC_SAMPLING_RATE
509 KSPROPERTY_AUDIO_EQ_BANDS
510 KSPROPERTY_AUDIO_EQ_LEVEL
511 KSPROPERTY_AUDIO_FILTER_STATE
512 KSPROPERTY_AUDIO_LATENCY
513 KSPROPERTY_AUDIO_LOUDNESS
514 KSPROPERTY_AUDIO_MANUFACTURE_GUID
516 KSPROPERTY_AUDIO_MIX_LEVEL_CAPS
517 KSPROPERTY_AUDIO_MIX_LEVEL_TABLE
518 KSPROPERTY_AUDIO_MUTE
519 KSPROPERTY_AUDIO_MUX_SOURCE
520 KSPROPERTY_AUDIO_NUM_EQ_BANDS
521 KSPROPERTY_AUDIO_PEAKMETER
522 KSPROPERTY_AUDIO_POSITION
523 KSPROPERTY_AUDIO_PREFERRED_STATUS
524 KSPROPERTY_AUDIO_PRODUCT_GUID
525 KSPROPERTY_AUDIO_QUALITY
526 KSPROPERTY_AUDIO_REVERB_LEVEL
527 KSPROPERTY_AUDIO_SAMPLING_RATE
528 KSPROPERTY_AUDIO_STEREO_ENHANCE
529 KSPROPERTY_AUDIO_STEREO_SPEAKER_GEOMETRY
530 KSPROPERTY_AUDIO_SURROUND_ENCODE
531 KSPROPERTY_AUDIO_TREBLE
532 KSPROPERTY_AUDIO_VOLUMELEVEL
533 KSPROPERTY_AUDIO_WIDE_MODE
534 KSPROPERTY_AUDIO_WIDENESS
537 #define KSPROPSETID_AudioGfx
539 KSPROPERTY_AUDIOGFX_CAPTURETARGETDEVICEID
540 KSPROPERTY_AUDIOGFX_RENDERTARGETDEVICEID
543 #define KSPROPSETID_DirectSound3DBuffer
545 KSPROPERTY_DIRECTSOUND3DBUFFER_ALL
546 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEANGLES
547 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEORIENTATION
548 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEOUTSIDEVOLUME
549 KSPROPERTY_DIRECTSOUND3DBUFFER_MAXDISTANCE
550 KSPROPERTY_DIRECTSOUND3DBUFFER_MINDISTANCE
551 KSPROPERTY_DIRECTSOUND3DBUFFER_MODE
552 KSPROPERTY_DIRECTSOUND3DBUFFER_POSITION
553 KSPROPERTY_DIRECTSOUND3DBUFFER_VELOCITY
556 #define KSPROPSETID_DirectSound3DListener
558 KSPROPERTY_DIRECTSOUND3DLISTENER_ALL
559 KSPROPERTY_DIRECTSOUND3DLISTENER_ALLOCATION
560 KSPROPERTY_DIRECTSOUND3DLISTENER_BATCH
561 KSPROPERTY_DIRECTSOUND3DLISTENER_DISTANCEFACTOR
562 KSPROPERTY_DIRECTSOUND3DLISTENER_DOPPLERFACTOR
563 KSPROPERTY_DIRECTSOUND3DLISTENER_ORIENTATION
564 KSPROPERTY_DIRECTSOUND3DLISTENER_POSITION
565 KSPROPERTY_DIRECTSOUND3DLISTENER_ROLLOFFFACTOR
566 KSPROPERTY_DIRECTSOUND3DLISTENER_VELOCITY
569 #define KSPROPSETID_DrmAudioStream
571 KSPROPERTY_DRMAUDIOSTREAM_CONTENTID
574 #define KSPROPSETID_Hrtf3d
576 KSPROPERTY_HRTF3D_FILTER_FORMAT
577 KSPROPERTY_HRTF3D_INITIALIZE
578 KSPROPERTY_HRTF3D_PARAMS
581 #define KSPROPSETID_Itd3d
583 KSPROPERTY_ITD3D_PARAMS
586 #define KSPROPSETID_Synth
588 KSPROPERTY_SYNTH_CAPS
589 KSPROPERTY_SYNTH_CHANNELGROUPS
590 KSPROPERTY_SYNTH_LATENCYCLOCK
591 KSPROPERTY_SYNTH_MASTERCLOCK
592 KSPROPERTY_SYNTH_PORTPARAMETERS
593 KSPROPERTY_SYNTH_RUNNINGSTATS
594 KSPROPERTY_SYNTH_VOICEPRIORITY
595 KSPROPERTY_SYNTH_VOLUME
596 KSPROPERTY_SYNTH_VOLUMEBOOST
599 #define KSPROPSETID_Synth_Dls
601 KSPROPERTY_SYNTH_DLS_APPEND
602 KSPROPERTY_SYNTH_DLS_COMPACT
603 KSPROPERTY_SYNTH_DLS_DOWNLOAD
604 KSPROPERTY_SYNTH_DLS_UNLOAD
605 KSPROPERTY_SYNTH_DLS_WAVEFORMAT
608 #define KSPROPSETID_Sysaudio
610 KSPROPERTY_SYSAUDIO_COMPONENT_ID
611 KSPROPERTY_SYSAUDIO_CREATE_VIRTUAL_SOURCE
612 KSPROPERTY_SYSAUDIO_DEVICE_COUNT
613 KSPROPERTY_SYSAUDIO_DEVICE_FRIENDLY_NAME
614 KSPROPERTY_SYSAUDIO_DEVICE_INSTANCE
615 KSPROPERTY_SYSAUDIO_DEVICE_INTERFACE_NAME
616 KSPROPERTY_SYSAUDIO_INSTANCE_INFO
617 KSPROPERTY_SYSAUDIO_SELECT_GRAPH
620 #define KSPROPSETID_Sysaudio_Pin
622 KSPROPERTY_SYSAUDIO_ATTACH_VIRTUAL_SOURCE
625 #define KSPROPSETID_TopologyNode
627 KSPROPERTY_TOPOLOGYNODE_ENABLE
628 KSPROPERTY_TOPOLOGYNODE_RESET
632 /* ===============================================================
633 Interface Sets - TODO
636 #define KSINTERFACESETID_Media
638 #define KSINTERFACESETID_Standard
639 #define KSINTERFACE_STANDARD_STREAMING
640 #define KSINTERFACE_STANDARD_LOOPED_STREAMING
641 #define KSINTERFACE_STANDARD_CONTROL
644 /* ===============================================================
645 Event Sets for audio drivers - TODO
647 #define KSEVENTSETID_AudioControlChange
649 KSEVENT_CONTROL_CHANGE
654 /* ===============================================================
658 KSNODETYPE_3D_EFFECTS
659 KSNODETYPE_ACOUSTIC_ECHO_CANCEL
666 KSNODETYPE_DEV_SPECIFIC
668 KSNODETYPE_DMSYNTH_CAPS
669 KSNODETYPE_DRM_DESCRAMBLE
675 KSNODETYPE_PROLOGIC_DECODER
676 KSNODETYPE_PROLOGIC_ENCODER
679 KSNODETYPE_STEREO_ENHANCE
680 KSNODETYPE_STEREO_WIDE
685 KSNODETYPE_SYNTHESIZER
691 typedef PVOID KSDEVICE_HEADER
,
698 /* ===============================================================
702 #define KSMETHOD_TYPE_NONE 0x00000000
703 #define KSMETHOD_TYPE_READ 0x00000001
704 #define KSMETHOD_TYPE_WRITE 0x00000002
705 #define KSMETHOD_TYPE_MODIFY 0x00000003
706 #define KSMETHOD_TYPE_SOURCE 0x00000004
707 #define KSMETHOD_TYPE_SEND 0x00000001
708 #define KSMETHOD_TYPE_SETSUPPORT 0x00000100
709 #define KSMETHOD_TYPE_BASICSUPPORT 0x00000200
712 /* ===============================================================
716 #define KSPROPERTY_TYPE_GET 0x00000001
717 #define KSPROPERTY_TYPE_SET 0x00000002
718 #define KSPROPERTY_TYPE_SETSUPPORT 0x00000100
719 #define KSPROPERTY_TYPE_BASICSUPPORT 0x00000200
720 #define KSPROPERTY_TYPE_RELATIONS 0x00000400
721 #define KSPROPERTY_TYPE_SERIALIZESET 0x00000800
722 #define KSPROPERTY_TYPE_UNSERIALIZESET 0x00001000
723 #define KSPROPERTY_TYPE_SERIALIZERAW 0x00002000
724 #define KSPROPERTY_TYPE_UNSERIALIZERAW 0x00004000
725 #define KSPROPERTY_TYPE_SERIALIZESIZE 0x00008000
726 #define KSPROPERTY_TYPE_DEFAULT_VALUES 0x00010000
729 /* ===============================================================
730 Topology Methods/Properties
733 #define KSMETHOD_TYPE_TOPOLOGY 0x10000000
734 #define KSPROPERTY_TYPE_TOPOLOGY 0x10000000
737 #define DEFINE_KS_GUID(GA,GB,GC,GD,GE,GF,GG,GH,GI,GJ,GK) \
738 DEFINE_GUID(??, 0x#GA#L, 0xGB, 0xGC, 0xGD, 0xGE, 0xGF, 0xGG, 0xGH, 0xGI, 0xGJ, 0xGK) \
739 "GA-GB-GC-GDGE-GFGGGHGIGJGK"
742 /* ===============================================================
745 BRIDGE - 0x085AFF00L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
746 CAPTURE - 0x65E8773DL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
747 RENDER - 0x65E8773EL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
748 MIXER - 0xAD809C00L, 0x7B88, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
749 SPLITTER - 0x0A4252A0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
750 DATACOMPRESSOR - 0x1E84C900L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
751 DATADECOMPRESSOR - 0x2721AE20L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
752 DATATRANSFORM - 0x2EB07EA0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
753 COMMUNICATIONSTRANSFORM - 0xCF1DDA2CL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
754 INTERFACETRANSFORM - 0xCF1DDA2DL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
755 MEDIUMTRANSFORM - 0xCF1DDA2EL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
756 FILESYSTEM - 0x760FED5EL, 0x9357, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
757 CLOCK - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
758 PROXY - 0x97EBAACAL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
759 QUALITY - 0x97EBAACBL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
762 /* ===============================================================
763 KSNAME GUIDs (defined also as KSSTRING_Xxx L"{...}"
765 Filter - 0x9b365890L, 0x165f, 0x11d0, 0xa1, 0x95, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
766 Pin - 0x146F1A80L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
767 Clock - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
768 Allocator - 0x642F5D00L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
769 TopologyNode - 0x0621061AL, 0xEE75, 0x11D0, 0xB9, 0x15, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
772 /* ===============================================================
775 Standard - 0x1A8766A0L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
776 FileIo - 0x8C6F932CL, 0xE771, 0x11D0, 0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
779 /* ===============================================================
782 Standard - 0x4747B320L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
785 /* ===============================================================
788 General - 0x1464EDA5L, 0x6A8F, 0x11D1, 0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
789 StreamIo - 0x65D003CAL, 0x1523, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
790 MediaSeeking - 0xEE904F0CL, 0xD09B, 0x11D0, 0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
791 Topology - 0x720D4AC0L, 0x7533, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
792 GM - 0xAF627536L, 0xE719, 0x11D2, 0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D
793 Quality - 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
794 Connection - 0x1D58C920L, 0xAC9B, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
797 /* ===============================================================
800 Event set - 0x75d95571L, 0x073c, 0x11d0, 0xa1, 0x61, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
801 Method set - 0xcf6e4341L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
802 Property set - 0xcf6e4342L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
805 /* ===============================================================
808 Property set - 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
811 /* ===============================================================
814 Property set - 0xDF12A4C0L, 0xAC17, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
815 Event sets - 0x364D8E20L, 0x62C7, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
818 /* ===============================================================
821 Event set - 0x7f4bcbe0L, 0x9ea5, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00
824 /* ===============================================================
827 KSTIME_FORMAT_NONE (null guid)
828 FRAME - 0x7b785570L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
829 BYTE - 0x7b785571L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
830 SAMPLE - 0x7b785572L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
831 FIELD - 0x7b785573L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
832 MEDIA_TIME - 0x7b785574L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
835 /* ===============================================================
845 /* ===============================================================
848 WILDCARD, DONT_CARE = NULL
849 SYSTEM - 0x091bb638L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
850 USER - 0x8cb0fc28L, 0x7893, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
851 KERNEL_PAGED - 0xd833f8f8L, 0x7894, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
852 KERNEL_NONPAGED - 0x4a6d5fc4L, 0x7895, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
853 DEVICE_UNKNOWN - 0x091bb639L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
856 /* ===============================================================
858 (values have been checked)
864 KsObjectTypeFilterFactory
,
879 KSTARGET_STATE_DISABLED
,
880 KSTARGET_STATE_ENABLED
895 KSEVENTS_FMUTEXUNSAFE
,
902 KSDEGRADE_STANDARD_SIMPLE
,
903 KSDEGRADE_STANDARD_QUALITY
,
904 KSDEGRADE_STANDARD_COMPUTATION
,
905 KSDEGRADE_STANDARD_SKIP
906 } KSDEGRADE_STANDARD
;
910 KSPIN_DATAFLOW_IN
= 1,
916 KSPIN_COMMUNICATION_NONE
,
917 KSPIN_COMMUNICATION_SINK
,
918 KSPIN_COMMUNICATION_SOURCE
,
919 KSPIN_COMMUNICATION_BOTH
,
920 KSPIN_COMMUNICATION_BRIDGE
921 } KSPIN_COMMUNICATION
;
927 } KSLIST_ENTRY_LOCATION
;
931 KsStackCopyToNewLocation
,
932 KsStackReuseCurrentLocation
,
933 KsStackUseNewLocation
940 KsAcquireOnlySingleItem
,
941 KsAcquireAndRemoveOnlySingleItem
942 } KSIRP_REMOVAL_OPERATION
;
946 KsInvokeOnSuccess
= 1,
949 } KSCOMPLETION_INVOCATION
;
954 typedef NTSTATUS (*PFNKSCONTEXT_DISPATCH
)(
959 /* ===============================================================
965 } KS_FRAMING_ITEM
, *PKS_FRAMING_ITEM
;
969 } KS_FRAMING_RANGE
, *PKS_FRAMING_RANGE
;
974 } KS_FRAMING_RANGE_WEIGHTED
, *PKS_FRAMING_RANGE_WEIGHTED
;
979 } KS_COMPRESSION
, *PKS_COMPRESSION
;
982 /* ===============================================================
991 } KSIDENTIFIER
, *PKSIDENTIFIER
;
993 typedef KSIDENTIFIER KSPROPERTY
, *PKSPROPERTY
;
994 typedef KSIDENTIFIER KSMETHOD
, *PKSMETHOD
;
995 typedef KSIDENTIFIER KSEVENT
, *PKSEVENT
;
997 typedef KSIDENTIFIER KSDEGRADE
, *PKSDEGRADE
;
999 typedef KSIDENTIFIER KSPIN_INTERFACE
, *PKSPIN_INTERFACE
;
1000 typedef KSIDENTIFIER KSPIN_MEDIUM
, *PKSPIN_MEDIUM
;
1004 } KSDATARANGE
, *PKSDATARANGE
;
1008 } KSDATAFORMAT
, *PKSDATAFORMAT
;
1012 } KSATTRIBUTE
, *PKSATTRIBUTE
;
1015 /* ===============================================================
1019 #define KSPRIORITY_LOW 0x00000001
1020 #define KSPRIORITY_NORMAL 0x40000000
1021 #define KSPRIORITY_HIGH 0x80000000
1022 #define KSPRIORITY_EXCLUSIVE 0xFFFFFFFF
1026 ULONG PriorityClass
;
1027 ULONG PrioritySubClass
;
1028 } KSPRIORITY
, *PKSPRIORITY
;
1031 /* ===============================================================
1033 http://www.osronline.com/DDKx/stream/ks-struct_494j.htm
1038 PDRIVER_DISPATCH DeviceIoControl
;
1039 PDRIVER_DISPATCH Read
;
1040 PDRIVER_DISPATCH Write
;
1041 PDRIVER_DISPATCH Flush
;
1042 PDRIVER_DISPATCH Close
;
1043 PDRIVER_DISPATCH QuerySecurity
;
1044 PDRIVER_DISPATCH SetSecurity
;
1045 PFAST_IO_DEVICE_CONTROL FastDeviceIoControl
;
1046 PFAST_IO_READ FastRead
;
1047 PFAST_IO_WRITE FastWrite
;
1048 } KSDISPATCH_TABLE
, *PKSDISPATCH_TABLE
;
1052 } BUS_INTERFACE_REFERENCE
, *PBUS_INTERFACE_REFERENCE
;
1056 } KSCOMPONENTID
, *PKSCOMPONENTID
;
1060 } KSBUFFER_ITEM
, *PKSBUFFER_ITEM
;
1062 /* ===============================================================
1066 #define KSPROPERTY_MEMBER_RANGES 0x00000001
1067 #define KSPROPERTY_MEMBER_STEPPEDRANGES 0x00000002
1068 #define KSPROPERTY_MEMBER_VALUES 0x00000003
1069 #define KSPROPERTY_MEMBER_FLAG_DEFAULT KSPROPERTY_MEMBER_RANGES
1073 } KSPROPERTY_BOUNDS_LONG
, *PKSPROPERTY_BOUNDS_LONG
;
1077 } KSPROPERTY_BOUNDS_LONGLONG
, *PKSPROPERTY_BOUNDS_LONGLONG
;
1081 } KSPROPERTY_DESCRIPTION
, *PKSPROPERTY_DESCRIPTION
;
1085 } KSPROPERTY_ITEM
, *PKSPROPERTY_ITEM
;
1089 } KSPROPERTY_MEDIAAVAILABLE
, *PKSPROPERTY_MEDIAAVAILABLE
;
1093 } KSPROPERTY_MEMBERSHEADER
, *PKSPROPERTY_MEMBERSHEADER
;
1097 } KSPROPERTY_MEMBERSLIST
, *PKSPROPERTY_MEMBERSLIST
;
1101 } KSPROPERTY_POSITIONS
, *PKSPROPERTY_POSITIONS
;
1105 } KSPROPERTY_SERIAL
, *PKSPROPERTY_SERIAL
;
1109 } KSPROPERTY_SERIALHDR
, *PKSPROPERTY_SERIALHDR
;
1113 } KSPROPERTY_SET
, *PKSPROPERTY_SET
;
1117 } KSPROPERTY_STEPPING_LONG
, *PKSPROPERTY_STEPPING_LONG
;
1121 } KSPROPERTY_STEPPING_LONGLONG
, *PKSPROPERTY_STEPPING_LONGLONG
;
1125 } KSPROPERTY_VALUES
, *PKSPROPERTY_VALUES
;
1128 /* ===============================================================
1134 } KSALLOCATOR_FRAMING
, *PKSALLOCATOR_FRAMING
;
1138 } KSALLOCATOR_FRAMING_EX
, *PKSALLOCATOR_FRAMING_EX
;
1141 /* ===============================================================
1147 } KSQUALITY
, *PKSQUALITY
;
1151 HANDLE QualityManager
;
1153 } KSQUALITY_MANAGER
, *PKSQUALITY_MANAGER
;
1161 } KSRATE_CAPABILITY
, *PKSRATE_CAPABILITY
;
1165 LONGLONG Granularity
;
1167 } KSRESOLUTION
, *PKSRESOLUTION
;
1171 } KSRELATIVEEVENT
, *PKSRELATIVEEVENT
;
1174 /* ===============================================================
1187 } KSCORRELATED_TIME
, *PKSCORRELATED_TIME
;
1191 KSPROPERTY Property
;
1195 } KSP_TIMEFORMAT
, *PKSP_TIMEFORMAT
;
1199 } KSINTERVAL
, *PKSINTERVAL
;
1203 } KSFRAMETIME
, *PKSFRAMETIME
;
1206 /* ===============================================================
1212 } KSCLOCK
, *PKSCLOCK
, *PKSDEFAULTCLOCK
; /* OK ? */
1216 } KSCLOCK_CREATE
, *PKSCLOCK_CREATE
;
1220 } KSCLOCK_FUNCTIONTABLE
, *PKSCLOCK_FUNCTIONTABLE
;
1223 /* ===============================================================
1224 Objects ??? SORT ME!
1229 } KSOBJECT_CREATE
, *PKSOBJECT_CREATE
;
1233 } KSOBJECT_CREATE_ITEM
, *PKSOBJECT_CREATE_ITEM
;
1235 typedef VOID (*PFNKSITEMFREECALLBACK
)(
1236 IN PKSOBJECT_CREATE_ITEM CreateItem
);
1240 } KSMULTIPLE_ITEM
, *PKSMULTIPLE_ITEM
;
1244 } KSQUERYBUFFER
, *PKSQUERYBUFFER
;
1248 } KSERROR
, *PKSERROR
;
1252 } KSDPC_ITEM
, *PKSDPC_ITEM
;
1255 /* ===============================================================
1261 } KSMETHOD_SET
, *PKSMETHOD_SET
;
1265 } KSMETHOD_ITEM
, *PKSMETHOD_ITEM
;
1269 } KSFASTMETHOD_ITEM
, *PKSFASTMETHOD_ITEM
;
1272 /* ===============================================================
1278 } KSP_NODE
, *PKSP_NODE
;
1285 } KSM_NODE
, *PKSM_NODE
;
1289 } KSE_NODE
, *PKSE_NODE
;
1293 } KSNODE_CREATE
, *PKSNODE_CREATE
;
1296 /* ===============================================================
1302 } KSFASTPROPERTY_ITEM
, *PKSFASTPROPERTY_ITEM
;
1305 /* ===============================================================
1311 } KSEVENT_TIME_MARK
, *PKSEVENT_TIME_MARK
;
1315 } KSEVENT_TIME_INTERVAL
, *PKSEVENT_TIME_INTERVAL
;
1319 } KSEVENT_SET
, *PKSEVENT_SET
;
1323 } KSEVENT_ITEM
, *PKSEVENT_ITEM
;
1325 typedef struct _KSEVENT_ENTRY
1327 } KSEVENT_ENTRY
, *PKSEVENT_ENTRY
;
1331 } KSEVENTDATA
, *PKSEVENTDATA
;
1334 /* ===============================================================
1340 } KSPIN_DISPATCH
, *PKSPIN_DISPATCH
;
1344 } KSAUTOMATION_TABLE
, *PKSAUTOMATION_TABLE
;
1348 } KSPIN_DESCRIPTOR
, *PKSPIN_DESCRIPTOR
;
1351 /* This is just to shut the compiler up so DON'T USE IT! */
1352 typedef void (*PFNKSINTERSECTHANDLER
)(void);
1353 typedef void (*PFNKSINTERSECTHANDLEREX
)(void);
1357 const KSPIN_DISPATCH
* Dispatch
;
1358 const KSAUTOMATION_TABLE
* AutomationTable
;
1359 KSPIN_DESCRIPTOR PinDescriptor
;
1361 ULONG InstancesPossible
;
1362 ULONG InstancesNecessary
;
1363 const KSALLOCATOR_FRAMING_EX
* AllocatorFraming
;
1364 PFNKSINTERSECTHANDLEREX IntersectHandler
;
1365 } KSPIN_DESCRIPTOR_EX
, *PKSPIN_DESCRIPTOR_EX
;
1368 #define KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING
1369 #define KSPIN_FLAG_CRITICAL_PROCESSING
1370 #define KSPIN_FLAG_HYPERCRITICAL_PROCESSING
1371 #define KSPIN_FLAG_ASYNCHRONOUS_PROCESSING
1372 #define KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING
1373 #define KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL
1374 #define KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING
1375 #define KSPIN_FLAG_ENFORCE_FIFO
1376 #define KSPIN_FLAG_GENERATE_MAPPINGS
1377 #define KSPIN_FLAG_DISTINCT_TRAILING_EDGE
1378 #define KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY
1379 #define KSPIN_FLAG_SPLITTER
1380 #define KSPIN_FLAG_USE_STANDARD_TRANSPORT
1381 #define KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT
1382 #define KSPIN_FLAG_FIXED_FORMAT
1383 #define KSPIN_FLAG_GENERATE_EOS_EVENTS
1384 #define KSPIN_FLAG_RENDERER
1385 #define KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING
1386 #define KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE
1387 #define KSPIN_FLAG_DENY_USERMODE_ACCESS
1388 #define KSPIN_FLAG_IMPLEMENT_CLOCK
1392 const KSPIN_DESCRIPTOR_EX
* Descriptor
;
1396 KSPIN_COMMUNICATION Communication
;
1397 BOOLEAN ConnectionIsExternal
;
1398 KSPIN_INTERFACE ConnectionInterface
;
1399 KSPIN_MEDIUM ConnectionMedium
;
1400 KSPRIORITY ConnectionPriority
;
1401 PKSDATAFORMAT ConnectionFormat
;
1402 PKSMULTIPLE_ITEM AttributeList
;
1403 ULONG StreamHeaderSize
;
1404 KSPIN_DATAFLOW DataFlow
;
1405 KSSTATE DeviceState
;
1407 KSSTATE ClientState
;
1412 KSPIN_INTERFACE Interface
;
1413 KSPIN_MEDIUM Medium
;
1416 KSPRIORITY Priority
;
1417 } KSPIN_CONNECT
, *PKSPIN_CONNECT
;
1421 } KSP_PIN
, *PKSP_PIN
;
1425 } KSPIN_PHYSICALCONNECTION
, *PKSPIN_PHYSICALCONNECTION
;
1428 /* ===============================================================
1438 } KSTOPOLOGY_CONNECTION
, *PKSTOPOLOGY_CONNECTION
;
1442 ULONG CategoriesCount
;
1443 const GUID
* Categories
;
1444 ULONG TopologyNodesCount
;
1445 const GUID
* TopologyNodes
;
1446 ULONG TopologyConnectionsCount
;
1447 const KSTOPOLOGY_CONNECTION
* TopologyConnections
;
1448 const GUID
* TopologyNodesNames
;
1450 } KSTOPOLOGY
, *PKSTOPOLOGY
;
1453 /* ===============================================================
1458 typedef void* UNKNOWN
;
1460 typedef PVOID (*PFNKSDEFAULTALLOCATE
)(
1463 typedef PVOID (*PFNKSDEFAULTFREE
)(
1467 typedef PVOID (*PFNKSINITIALIZEALLOCATOR
)(
1468 IN PVOID InitialContext
,
1469 IN PKSALLOCATOR_FRAMING AllocatorFraming
,
1470 OUT PVOID
* Context
);
1472 typedef PVOID (*PFNKSDELETEALLOCATOR
)(
1476 typedef NTSTATUS (*PFNKSALLOCATOR
)(
1478 IN ULONG BufferSize
,
1479 IN BOOL InputOperation
);
1481 typedef NTSTATUS (*PFNKSHANDLER
)(
1483 IN PKSIDENTIFIER Request
,
1486 typedef BOOLEAN (*PFNKSFASTHANDLER
)(
1487 IN PFILE_OBJECT FileObject
,
1488 IN PKSIDENTIFIER UNALIGNED Request
,
1489 IN ULONG RequestLength
,
1490 IN OUT PVOID UNALIGNED Data
,
1491 IN ULONG DataLength
,
1492 OUT PIO_STATUS_BLOCK IoStatus
);
1494 typedef NTSTATUS (*PFNKSADDEVENT
)(
1496 IN PKSEVENTDATA EventData
,
1497 IN
struct _KSEVENT_ENTRY
* EventEntry
);
1499 typedef NTSTATUS (*PFNKINTERSECTHANDLEREX
)(
1503 IN PKSDATARANGE DataRange
,
1504 IN PKSDATARANGE MatchingDataRange
,
1505 IN ULONG DataBufferSize
,
1506 OUT PVOID Data OPTIONAL
,
1507 OUT PULONG DataSize
);
1509 typedef UNKNOWN PFNALLOCATORE_ALLOCATEFRAME
;
1510 typedef UNKNOWN PFNALLOCATOR_FREEFRAME
;
1515 PFNALLOCATOR_ALLOCATEFRAME AllocateFrame;
1516 PFNALLOCATOR_FREEFRAME FreeFrame;
1522 KSALLOCATOR_FRAMING Framing
;
1523 ULONG AllocatedFrames
;
1525 } KSSTREAMALLOCATOR_STATUS
, *PKSSTREAMALLOCATOR_STATUS
;
1529 KSALLOCATOR_FRAMING_EX Framing
;
1530 ULONG AllocatedFrames
;
1532 } KSSTREAMALLOCATOR_STATUS_EX
, *PKSSTREAMALLOCATOR_STATUS_EX
;
1537 ULONG TypeSpecificFlags
;
1538 KSTIME PresentationTime
;
1544 } KSSTREAM_HEADER
, *PKSSTREAM_HEADER
;
1548 /* ===============================================================
1555 } KSPROCESSPIN
, *PKSPROCESSPIN
;
1559 PKSPROCESSPIN
* Pins
;
1561 } KSPROCESSPIN_INDEXENTRY
, *PKSPROCESSPIN_INDEXENTRY
;
1564 /* ===============================================================
1567 #if defined(_NTDDK_)
1571 } KSDEVICE
, *PKSDEVICE
;
1573 typedef NTSTATUS (*PFNKSDEVICECREATE
)(
1574 IN PKSDEVICE Device
);
1576 typedef NTSTATUS (*PFNKSDEVICEPNPSTART
)(
1577 IN PKSDEVICE Device
,
1579 IN PCM_RESOURCE_LIST TranslatedResourceList OPTIONAL
,
1580 IN PCM_RESOURCE_LIST UntranslatedResourceList OPTIONAL
);
1582 typedef NTSTATUS (*PFNKSDEVICE
)(
1583 IN PKSDEVICE Device
);
1585 typedef NTSTATUS (*PFNKSDEVICEIRP
)(
1586 IN PKSDEVICE Device
,
1589 typedef VOID (*PFNKSDEVICEIRPVOID
)(
1590 IN PKSDEVICE Device
,
1593 typedef NTSTATUS (*PFNKSDEVICEQUERYCAPABILITIES
)(
1594 IN PKSDEVICE Device
,
1596 IN OUT PDEVICE_CAPABILITIES Capabilities
);
1598 typedef NTSTATUS (*PFNKSDEVICEQUERYPOWER
)(
1599 IN PKSDEVICE Device
,
1601 IN DEVICE_POWER_STATE DeviceTo
,
1602 IN DEVICE_POWER_STATE DeviceFrom
,
1603 IN SYSTEM_POWER_STATE SystemTo
,
1604 IN SYSTEM_POWER_STATE SystemFrom
,
1605 IN POWER_ACTION Action
);
1607 typedef VOID (*PFNKSDEVICESETPOWER
)(
1608 IN PKSDEVICE Device
,
1610 IN DEVICE_POWER_STATE To
,
1611 IN DEVICE_POWER_STATE From
);
1613 typedef struct _KSDEVICE_DISPATCH
1615 PFNKSDEVICECREATE Add
;
1616 PFNKSDEVICEPNPSTART Start
;
1617 PFNKSDEVICE PostStart
;
1618 PFNKSDEVICEIRP QueryStop
;
1619 PFNKSDEVICEIRPVOID CancelStop
;
1620 PFNKSDEVICEIRPVOID Stop
;
1621 PFNKSDEVICEIRP QueryRemove
;
1622 PFNKSDEVICEIRPVOID CancelRemove
;
1623 PFNKSDEVICEIRPVOID Remove
;
1624 PFNKSDEVICEQUERYCAPABILITIES QueryCapabilities
;
1625 PFNKSDEVICEIRPVOID SurpriseRemoval
;
1626 PFNKSDEVICEQUERYPOWER Querypower
;
1627 PFNKSDEVICESETPOWER SetPower
;
1628 } KSDEVICE_DISPATCH
, *PKSDEVICE_DISPATCH
;
1631 /* ===============================================================
1634 #if defined(_NTDDK_)
1637 } KSFILTER
, *PKSFILTER
;
1639 typedef NTSTATUS (*PFNKSFILTERIRP
)(
1640 IN PKSFILTER Filter
,
1643 typedef NTSTATUS (*PFNKSFILTERPROCESS
)(
1644 IN PKSFILTER FIlter
,
1645 IN PKSPROCESSPIN_INDEXENTRY ProcessPinsIndex
);
1647 typedef NTSTATUS (*PFNKSFILTERVOID
)(
1648 IN PKSFILTER Filter
);
1650 typedef struct _KSFILTER_DISPATCH
1652 PFNKSFILTERIRP Create
;
1653 PFNKSFILTERIRP Close
;
1654 PFNKSFILTERPROCESS Process
;
1655 PFNKSFILTERVOID Reset
;
1656 } KSFILTER_DISPATCH
, *PKSFILTER_DISPATCH
;
1659 const KSAUTOMATION_TABLE
* AutomationTable
;
1662 } KSNODE_DESCRIPTOR
, *PKSNODE_DESCRIPTOR
;
1665 const KSFILTER_DISPATCH
* Dispatch
;
1666 const KSAUTOMATION_TABLE
* AutomationTable
;
1669 const GUID
* ReferenceGuid
;
1670 ULONG PinDescriptorsCount
;
1671 ULONG PinDescriptorSize
;
1672 const KSPIN_DESCRIPTOR_EX
* PinDescriptors
;
1673 ULONG CategoriesCount
;
1674 const GUID
* Categories
;
1675 ULONG NodeDescriptorsCount
;
1676 ULONG NodeDescriptorSize
;
1677 const KSNODE_DESCRIPTOR
* NodeDescriptors
;
1678 ULONG ConnectionsCount
;
1679 const KSTOPOLOGY_CONNECTION
* Connections
;
1680 const KSCOMPONENTID
* ComponentId
;
1681 } KSFILTER_DESCRIPTOR
, *PKSFILTER_DESCRIPTOR
;
1685 const KSDEVICE_DISPATCH
* Dispatch
;
1686 ULONG FilterDescriptorsCount
;
1687 const KSFILTER_DESCRIPTOR
*const* FilterDescriptors
;
1688 } KSDEVICE_DESCRIPTOR
, *PKSDEVICE_DESCRIPTOR
;
1690 /* ===============================================================
1691 Minidriver Callbacks
1693 #if defined(_NTDDK_)
1694 typedef NTSTATUS (*KStrMethodHandler
)(
1696 IN PKSIDENTIFIER Request
,
1699 typedef NTSTATUS (*KStrSupportHandler
)(
1701 IN PKSIDENTIFIER Request
,
1705 /* ===============================================================
1708 #if defined(_NTDDK_)
1709 KSDDKAPI NTSTATUS NTAPI
1711 IN HANDLE ConnectionHandle
,
1712 IN PKSALLOCATOR_FRAMING AllocatorFraming
,
1713 OUT PHANDLE AllocatorHandle
);
1715 KSDDKAPI NTSTATUS NTAPI
1716 KsCreateDefaultAllocator(
1719 KSDDKAPI NTSTATUS NTAPI
1720 KsValidateAllocatorCreateRequest(
1722 OUT PKSALLOCATOR_FRAMING
* AllocatorFraming
);
1724 KSDDKAPI NTSTATUS NTAPI
1725 KsCreateDefaultAllocatorEx(
1727 IN PVOID InitializeContext OPTIONAL
,
1728 IN PFNKSDEFAULTALLOCATE DefaultAllocate OPTIONAL
,
1729 IN PFNKSDEFAULTFREE DefaultFree OPTIONAL
,
1730 IN PFNKSINITIALIZEALLOCATOR InitializeAllocator OPTIONAL
,
1731 IN PFNKSDELETEALLOCATOR DeleteAllocator OPTIONAL
);
1733 KSDDKAPI NTSTATUS NTAPI
1734 KsValidateAllocatorFramingEx(
1735 IN PKSALLOCATOR_FRAMING_EX Framing
,
1736 IN ULONG BufferSize
,
1737 IN
const KSALLOCATOR_FRAMING_EX
* PinFraming
);
1740 /* ===============================================================
1743 #if defined(_NTDDK_)
1744 typedef BOOLEAN (*PFNKSSETTIMER
)(
1747 IN LARGE_INTEGER DueTime
,
1750 typedef BOOLEAN (*PFNKSCANCELTIMER
)(
1754 typedef LONGLONG (FASTCALL
*PFNKSCORRELATEDTIME
)(
1756 OUT PLONGLONG SystemTime
);
1758 KSDDKAPI NTSTATUS NTAPI
1760 IN HANDLE ConnectionHandle
,
1761 IN PKSCLOCK_CREATE ClockCreate
,
1762 OUT PHANDLE ClockHandle
);
1764 KSDDKAPI NTSTATUS NTAPI
1765 KsCreateDefaultClock(
1767 IN PKSDEFAULTCLOCK DefaultClock
);
1769 KSDDKAPI NTSTATUS NTAPI
1770 KsAllocateDefaultClock(
1771 OUT PKSDEFAULTCLOCK
* DefaultClock
);
1773 KSDDKAPI NTSTATUS NTAPI
1774 KsAllocateDefaultClockEx(
1775 OUT PKSDEFAULTCLOCK
* DefaultClock
,
1776 IN PVOID Context OPTIONAL
,
1777 IN PFNKSSETTIMER SetTimer OPTIONAL
,
1778 IN PFNKSCANCELTIMER CancelTimer OPTIONAL
,
1779 IN PFNKSCORRELATEDTIME CorrelatedTime OPTIONAL
,
1780 IN
const KSRESOLUTION
* Resolution OPTIONAL
,
1785 IN PKSDEFAULTCLOCK DefaultClock
);
1787 KSDDKAPI NTSTATUS NTAPI
1788 KsValidateClockCreateRequest(
1790 OUT PKSCLOCK_CREATE
* ClockCreate
);
1792 KSDDKAPI KSSTATE NTAPI
1793 KsGetDefaultClockState(
1794 IN PKSDEFAULTCLOCK DefaultClock
);
1797 KsSetDefaultClockState(
1798 IN PKSDEFAULTCLOCK DefaultClock
,
1801 KSDDKAPI LONGLONG NTAPI
1802 KsGetDefaultClockTime(
1803 IN PKSDEFAULTCLOCK DefaultClock
);
1806 KsSetDefaultClockTime(
1807 IN PKSDEFAULTCLOCK DefaultClock
,
1811 /* ===============================================================
1815 /* Method sets - TODO: Make into macros! */
1816 #if defined(_NTDDK_)
1819 KSMETHOD_SET_IRP_STORAGE(
1823 KSMETHOD_ITEM_IRP_STORAGE(
1827 KSMETHOD_TYPE_IRP_STORAGE(
1831 KSDDKAPI NTSTATUS NTAPI
1834 IN ULONG MethodSetsCount
,
1835 IN PKSMETHOD_SET MethodSet
);
1837 KSDDKAPI NTSTATUS NTAPI
1838 KsMethodHandlerWithAllocator(
1840 IN ULONG MethodSetsCount
,
1841 IN PKSMETHOD_SET MethodSet
,
1842 IN PFNKSALLOCATOR Allocator OPTIONAL
,
1843 IN ULONG MethodItemSize OPTIONAL
);
1845 KSDDKAPI BOOLEAN NTAPI
1846 KsFastMethodHandler(
1847 IN PFILE_OBJECT FileObject
,
1848 IN PKSMETHOD UNALIGNED Method
,
1849 IN ULONG MethodLength
,
1850 IN OUT PVOID UNALIGNED Data
,
1851 IN ULONG DataLength
,
1852 OUT PIO_STATUS_BLOCK IoStatus
,
1853 IN ULONG MethodSetsCount
,
1854 IN
const KSMETHOD_SET
* MethodSet
);
1857 /* ===============================================================
1860 #if defined(_NTDDK_)
1861 KSDDKAPI NTSTATUS NTAPI
1864 IN ULONG PropertySetsCount
,
1865 IN
const KSPROPERTY_SET
* PropertySet
);
1867 KSDDKAPI NTSTATUS NTAPI
1868 KsPropertyHandlerWithAllocator(
1870 IN ULONG PropertySetsCount
,
1871 IN PKSPROPERTY_SET PropertySet
,
1872 IN PFNKSALLOCATOR Allocator OPTIONAL
,
1873 IN ULONG PropertyItemSize OPTIONAL
);
1875 KSDDKAPI NTSTATUS NTAPI
1876 KsUnserializeObjectPropertiesFromRegistry(
1877 IN PFILE_OBJECT FileObject
,
1878 IN HANDLE ParentKey OPTIONAL
,
1879 IN PUNICODE_STRING RegistryPath OPTIONAL
);
1881 KSDDKAPI BOOLEAN NTAPI
1882 KsFastPropertyHandler(
1883 IN PFILE_OBJECT FileObject
,
1884 IN PKSPROPERTY UNALIGNED Property
,
1885 IN ULONG PropertyLength
,
1886 IN OUT PVOID UNALIGNED Data
,
1887 IN ULONG DataLength
,
1888 OUT PIO_STATUS_BLOCK IoStatus
,
1889 IN ULONG PropertySetsCount
,
1890 IN
const KSPROPERTY_SET
* PropertySet
);
1893 /* ===============================================================
1896 #if defined(_NTDDK_)
1897 KSDDKAPI NTSTATUS NTAPI
1899 IN PKSEVENT_ENTRY EntryEvent
);
1901 KSDDKAPI NTSTATUS NTAPI
1902 KsEnableEventWithAllocator(
1904 IN ULONG EventSetsCount
,
1905 IN PKSEVENT_SET EventSet
,
1906 IN OUT PLIST_ENTRY EventsList OPTIONAL
,
1907 IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL
,
1908 IN PVOID EventsLock OPTIONAL
,
1909 IN PFNKSALLOCATOR Allocator OPTIONAL
,
1910 IN ULONG EventItemSize OPTIONAL
);
1912 KSDDKAPI NTSTATUS NTAPI
1913 KsGenerateDataEvent(
1914 IN PKSEVENT_ENTRY EventEntry
,
1918 KSDDKAPI NTSTATUS NTAPI
1921 IN ULONG EventSetsCount
,
1922 IN KSEVENT_SET
* EventSet
,
1923 IN OUT PLIST_ENTRY EventsList OPTIONAL
,
1924 IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL
,
1925 IN PVOID EventsLock OPTIONAL
);
1929 IN PKSEVENT_ENTRY EventEntry
);
1931 KSDDKAPI NTSTATUS NTAPI
1934 IN OUT PLIST_ENTRY EventsList
,
1935 IN KSEVENTS_LOCKTYPE EventsFlags
,
1936 IN PVOID EventsLock
);
1940 IN PFILE_OBJECT FileObject
,
1941 IN OUT PLIST_ENTRY EventsList
,
1942 IN KSEVENTS_LOCKTYPE EVentsFlags
,
1943 IN PVOID EventsLock
);
1946 /* ===============================================================
1950 KSDDKAPI NTSTATUS NTAPI
1951 KsValidateTopologyNodeCreateRequest(
1953 IN PKSTOPOLOGY Topology
,
1954 OUT PKSNODE_CREATE
* NodeCreate
);
1956 KSDDKAPI NTSTATUS NTAPI
1957 KsCreateTopologyNode(
1958 IN HANDLE ParentHandle
,
1959 IN PKSNODE_CREATE NodeCreate
,
1960 IN ACCESS_MASK DesiredAccess
,
1961 OUT PHANDLE NodeHandle
);
1963 KSDDKAPI NTSTATUS NTAPI
1964 KsTopologyPropertyHandler(
1966 IN PKSPROPERTY Property
,
1968 IN
const KSTOPOLOGY
* Topology
);
1972 /* ===============================================================
1973 Connectivity Functions
1976 KSDDKAPI NTSTATUS NTAPI
1978 IN HANDLE FilterHandle
,
1979 IN PKSPIN_CONNECT Connect
,
1980 IN ACCESS_MASK DesiredAccess
,
1981 OUT PHANDLE ConnectionHandle
);
1983 KSDDKAPI NTSTATUS NTAPI
1984 KsValidateConnectRequest(
1986 IN ULONG DescriptorsCount
,
1987 IN KSPIN_DESCRIPTOR
* Descriptor
,
1988 OUT PKSPIN_CONNECT
* Connect
);
1990 KSDDKAPI NTSTATUS NTAPI
1991 KsPinPropertyHandler(
1993 IN PKSPROPERTY Property
,
1995 IN ULONG DescriptorsCount
,
1996 IN
const KSPIN_DESCRIPTOR
* Descriptor
);
1998 KSDDKAPI NTSTATUS NTAPI
1999 KsPinDataIntersection(
2003 IN ULONG DescriptorsCount
,
2004 IN
const KSPIN_DESCRIPTOR
* Descriptor
,
2005 IN PFNKSINTERSECTHANDLER IntersectHandler
);
2007 KSDDKAPI NTSTATUS NTAPI
2008 KsPinDataIntersectionEx(
2012 IN ULONG DescriptorsCount
,
2013 IN
const KSPIN_DESCRIPTOR
* Descriptor
,
2014 IN ULONG DescriptorSize
,
2015 IN PFNKSINTERSECTHANDLEREX IntersectHandler OPTIONAL
,
2016 IN PVOID HandlerContext OPTIONAL
);
2018 /* Does this belong here? */
2020 KSDDKAPI NTSTATUS NTAPI
2021 KsHandleSizedListQuery(
2023 IN ULONG DataItemsCount
,
2024 IN ULONG DataItemSize
,
2025 IN
const VOID
* DataItems
);
2028 /* ===============================================================
2029 IRP Helper Functions
2032 typedef NTSTATUS (*PFNKSIRPLISTCALLBACK
)(
2036 KSDDKAPI NTSTATUS NTAPI
2037 KsAcquireResetValue(
2039 OUT KSRESET
* ResetValue
);
2042 KsAddIrpToCancelableQueue(
2043 IN OUT PLIST_ENTRY QueueHead
,
2044 IN PKSPIN_LOCK SpinLock
,
2046 IN KSLIST_ENTRY_LOCATION ListLocation
,
2047 IN PDRIVER_CANCEL DriverCancel OPTIONAL
);
2049 KSDDKAPI NTSTATUS NTAPI
2050 KsAddObjectCreateItemToDeviceHeader(
2051 IN KSDEVICE_HEADER Header
,
2052 IN PDRIVER_DISPATCH Create
,
2054 IN PWCHAR ObjectClass
,
2055 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
2057 KSDDKAPI NTSTATUS NTAPI
2058 KsAddObjectCreateItemToObjectHeader(
2059 IN KSOBJECT_HEADER Header
,
2060 IN PDRIVER_DISPATCH Create
,
2062 IN PWCHAR ObjectClass
,
2063 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
2065 KSDDKAPI NTSTATUS NTAPI
2066 KsAllocateDeviceHeader(
2067 OUT KSDEVICE_HEADER
* Header
,
2068 IN ULONG ItemsCount
,
2069 IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL
);
2071 KSDDKAPI NTSTATUS NTAPI
2072 KsAllocateExtraData(
2075 OUT PVOID
* ExtraBuffer
);
2077 KSDDKAPI NTSTATUS NTAPI
2078 KsAllocateObjectCreateItem(
2079 IN KSDEVICE_HEADER Header
,
2080 IN PKSOBJECT_CREATE_ITEM CreateItem
,
2081 IN BOOL AllocateEntry
,
2082 IN PFNKSITEMFREECALLBACK ItemFreeCallback OPTIONAL
);
2084 KSDDKAPI NTSTATUS NTAPI
2085 KsAllocateObjectHeader(
2087 IN ULONG ItemsCount
,
2088 IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL
,
2090 IN KSDISPATCH_TABLE
* Table
);
2094 IN OUT PLIST_ENTRY QueueHead
,
2095 IN PKSPIN_LOCK SpinLock
);
2099 IN PDEVICE_OBJECT DeviceObject
,
2102 KSDDKAPI NTSTATUS NTAPI
2103 KsDefaultDeviceIoCompletion(
2104 IN PDEVICE_OBJECT DeviceObject
,
2108 KSDDKAPI ULONG NTAPI
2109 KsDecrementCountedWorker(
2110 IN PKSWORKER Worker);
2113 KSDDKAPI BOOLEAN NTAPI
2114 KsDispatchFastIoDeviceControlFailure(
2115 IN PFILE_OBJECT FileObject
,
2117 IN PVOID InputBuffer OPTIONAL
,
2118 IN ULONG InputBufferLength
,
2119 OUT PVOID OutputBuffer OPTIONAL
,
2120 IN ULONG OutputBufferLength
,
2121 IN ULONG IoControlCode
,
2122 OUT PIO_STATUS_BLOCK IoStatus
,
2123 IN PDEVICE_OBJECT DeviceObject
); /* always return false */
2125 KSDDKAPI BOOLEAN NTAPI
2126 KsDispatchFastReadFailure(
2127 IN PFILE_OBJECT FileObject
,
2128 IN PLARGE_INTEGER FileOffset
,
2133 OUT PIO_STATUS_BLOCK IoStatus
,
2134 IN PDEVICE_OBJECT DeviceObject
); /* always return false */
2136 /* This function does the same as the above */
2137 #define KsDispatchFastWriteFailure KsDispatchFastReadFailure
2139 KSDDKAPI NTSTATUS NTAPI
2140 KsDispatchInvalidDeviceRequest(
2141 IN PDEVICE_OBJECT DeviceObject
,
2144 KSDDKAPI NTSTATUS NTAPI
2146 IN PDEVICE_OBJECT DeviceObject
,
2149 KSDDKAPI NTSTATUS NTAPI
2150 KsDispatchSpecificMethod(
2152 IN PFNKSHANDLER Handler
);
2154 KSDDKAPI NTSTATUS NTAPI
2155 KsDispatchSpecificProperty(
2157 IN PFNKSHANDLER Handler
);
2159 KSDDKAPI NTSTATUS NTAPI
2160 KsForwardAndCatchIrp(
2161 IN PDEVICE_OBJECT DeviceObject
,
2163 IN PFILE_OBJECT FileObject
,
2164 IN KSSTACK_USE StackUse
);
2166 KSDDKAPI NTSTATUS NTAPI
2169 IN PFILE_OBJECT FileObject
,
2170 IN BOOLEAN ReuseStackLocation
);
2174 IN KSDEVICE_HEADER Header
);
2180 KSDDKAPI NTSTATUS NTAPI
2181 KsGetChildCreateParameter(
2183 OUT PVOID
* CreateParameter
);
2185 KSDDKAPI NTSTATUS NTAPI
2186 KsMoveIrpsOnCancelableQueue(
2187 IN OUT PLIST_ENTRY SourceList
,
2188 IN PKSPIN_LOCK SourceLock
,
2189 IN OUT PLIST_ENTRY DestinationList
,
2190 IN PKSPIN_LOCK DestinationLock OPTIONAL
,
2191 IN KSLIST_ENTRY_LOCATION ListLocation
,
2192 IN PFNKSIRPLISTCALLBACK ListCallback
,
2195 KSDDKAPI NTSTATUS NTAPI
2198 IN ULONG ProbeFlags
,
2199 IN ULONG HeaderSize
);
2201 KSDDKAPI NTSTATUS NTAPI
2202 KsQueryInformationFile(
2203 IN PFILE_OBJECT FileObject
,
2204 OUT PVOID FileInformation
,
2206 IN FILE_INFORMATION_CLASS FileInformationClass
);
2208 KSDDKAPI ACCESS_MASK NTAPI
2209 KsQueryObjectAccessMask(
2210 IN KSOBJECT_HEADER Header
);
2212 KSDDKAPI PKSOBJECT_CREATE_ITEM NTAPI
2213 KsQueryObjectCreateItem(
2214 IN KSOBJECT_HEADER Header
);
2216 KSDDKAPI NTSTATUS NTAPI
2218 IN PFILE_OBJECT FileObject
,
2219 IN PKEVENT Event OPTIONAL
,
2220 IN PVOID PortContext OPTIONAL
,
2221 OUT PIO_STATUS_BLOCK IoStatusBlock
,
2224 IN ULONG Key OPTIONAL
,
2225 IN KPROCESSOR_MODE RequestorMode
);
2228 KsReleaseIrpOnCancelableQueue(
2230 IN PDRIVER_CANCEL DriverCancel OPTIONAL
);
2233 KsRemoveIrpFromCancelableQueue(
2234 IN OUT PLIST_ENTRY QueueHead
,
2235 IN PKSPIN_LOCK SpinLock
,
2236 IN KSLIST_ENTRY_LOCATION ListLocation
,
2237 IN KSIRP_REMOVAL_OPERATION RemovalOperation
);
2240 KsRemoveSpecificIrpFromCancelableQueue(
2243 KSDDKAPI NTSTATUS NTAPI
2244 KsSetInformationFile(
2245 IN PFILE_OBJECT FileObject
,
2246 IN PVOID FileInformation
,
2248 IN FILE_INFORMATION_CLASS FileInformationClass
);
2250 KSDDKAPI NTSTATUS NTAPI
2251 KsSetMajorFunctionHandler(
2252 IN PDRIVER_OBJECT DriverObject
,
2253 IN ULONG MajorFunction
);
2255 KSDDKAPI NTSTATUS NTAPI
2257 IN PFILE_OBJECT FileObject
,
2258 IN PKEVENT Event OPTIONAL
,
2259 IN PVOID PortContext OPTIONAL
,
2260 IN PIO_COMPLETION_ROUTINE CompletionRoutine OPTIONAL
,
2261 IN PVOID CompletionContext OPTIONAL
,
2262 IN KSCOMPLETION_INVOCATION CompletionInvocationFlags OPTIONAL
,
2263 OUT PIO_STATUS_BLOCK IoStatusBlock
,
2264 IN OUT PVOID StreamHeaders
,
2267 IN KPROCESSOR_MODE RequestorMode
);
2269 KSDDKAPI NTSTATUS NTAPI
2271 IN PFILE_OBJECT FileObject
,
2272 IN PKEVENT Event OPTIONAL
,
2273 IN PVOID PortContext OPTIONAL
,
2274 OUT PIO_STATUS_BLOCK IoStatusBlock
,
2277 IN ULONG Key OPTIONAL
,
2278 IN KPROCESSOR_MODE RequestorMode
);
2281 /* ===============================================================
2282 Worker Management Functions
2285 KSDDKAPI NTSTATUS NTAPI
2287 IN WORK_QUEUE_TYPE WorkQueueType
,
2288 OUT PKSWORKER
* Worker
);
2292 IN PKSWORKER Worker
);
2294 KSDDKAPI NTSTATUS NTAPI
2295 KsRegisterCountedWorker(
2296 IN WORK_QUEUE_TYPE WorkQueueType
,
2297 IN PWORK_QUEUE_ITEM CountedWorkItem
,
2298 OUT PKSWORKER
* Worker
);
2300 KSDDKAPI ULONG NTAPI
2301 KsDecrementCountedWorker(
2302 IN PKSWORKER Worker
);
2304 KSDDKAPI ULONG NTAPI
2305 KsIncrementCountedWorker(
2306 IN PKSWORKER Worker
);
2308 KSDDKAPI NTSTATUS NTAPI
2310 IN PKSWORKER Worker
,
2311 IN PWORK_QUEUE_ITEM WorkItem
);
2314 /* ===============================================================
2318 KSDDKAPI NTSTATUS NTAPI
2321 IN POOL_TYPE PoolType
,
2322 IN ULONG_PTR ResourceName
,
2323 IN ULONG ResourceType
,
2324 OUT PVOID
* Resource
,
2325 OUT PULONG ResourceSize
);
2328 KSDDKAPI NTSTATUS NTAPI
2329 KsGetImageNameAndResourceId(
2331 OUT PUNICODE_STRING ImageName,
2332 OUT PULONG_PTR ResourceId,
2333 OUT PULONG ValueType);
2335 KSDDKAPI NTSTATUS NTAPI
2337 IN PDEVICE_OBJECT PhysicalDeviceObject,
2338 IN PUNICODE_STRING ModuleName,
2339 OUT PUNICODE_STRING ImageName,
2340 OUT PULONG_PTR ResourceId,
2341 OUT PULONG ValueType);
2345 /* ===============================================================
2346 Misc. Helper Functions
2349 KSDDKAPI NTSTATUS NTAPI
2351 IN PUNICODE_STRING SymbolicLink
,
2352 IN PKSPIN_MEDIUM Medium
,
2353 IN DWORD PinDirection
);
2355 KSDDKAPI NTSTATUS NTAPI
2356 KsDefaultDispatchPnp(
2357 IN PDEVICE_OBJECT DeviceObject
,
2361 KsSetDevicePnpAndBaseObject(
2362 IN KSDEVICE_HEADER Header
,
2363 IN PDEVICE_OBJECT PnpDeviceObject
,
2364 IN PDEVICE_OBJECT BaseDevice
);
2366 KSDDKAPI NTSTATUS NTAPI
2367 KsDefaultDispatchPower(
2368 IN PDEVICE_OBJECT DeviceObject
,
2373 IN KSOBJECT_HEADER Header
,
2374 IN PFNKSCONTEXT_DISPATCH PowerDispatch OPTIONAL
,
2375 IN PVOID PowerContext OPTIONAL
);
2377 KSDDKAPI NTSTATUS NTAPI
2378 KsReferenceBusObject(
2379 IN KSDEVICE_HEADER Header
);
2382 KsDereferenceBusObject(
2383 IN KSDEVICE_HEADER Header
);
2385 KSDDKAPI NTSTATUS NTAPI
2386 KsFreeObjectCreateItem(
2387 IN KSDEVICE_HEADER Header
,
2388 IN PUNICODE_STRING CreateItem
);
2390 KSDDKAPI NTSTATUS NTAPI
2391 KsFreeObjectCreateItemsByContext(
2392 IN KSDEVICE_HEADER Header
,
2397 IN PDRIVER_OBJECT DriverObject
);
2399 KSDDKAPI PDEVICE_OBJECT NTAPI
2400 KsQueryDevicePnpObject(
2401 IN KSDEVICE_HEADER Header
);
2404 KsRecalculateStackDepth(
2405 IN KSDEVICE_HEADER Header
,
2406 IN BOOLEAN ReuseStackLocation
);
2409 KsSetTargetDeviceObject(
2410 IN KSOBJECT_HEADER Header
,
2411 IN PDEVICE_OBJECT TargetDevice OPTIONAL
);
2415 IN KSOBJECT_HEADER Header
,
2416 IN KSTARGET_STATE TargetState
);
2418 KSDDKAPI NTSTATUS NTAPI
2419 KsSynchronousIoControlDevice(
2420 IN PFILE_OBJECT FileObject
,
2421 IN KPROCESSOR_MODE RequestorMode
,
2425 OUT PVOID OutBuffer
,
2427 OUT PULONG BytesReturned
);
2430 /* ===============================================================
2431 AVStream Functions (XP / DirectX 8)
2433 http://www.osronline.com/ddkx/stream/avstream_5q9f.htm
2436 #if defined(_NTDDK_)
2437 KSDDKAPI NTSTATUS NTAPI
2439 IN PDRIVER_OBJECT DriverObject
,
2440 IN PUNICODE_STRING RegistryPath
,
2441 IN
const KSDEVICE_DESCRIPTOR
*Descriptor OPTIONAL
);
2445 typedef void (*PFNKSFILTERFACTORYPOWER
)(
2446 IN PKSFILTERFACTORY FilterFactory
,
2447 IN DEVICE_POWER_STATE State
);
2449 KSDDKAPI NTSTATUS NTAPI
2451 IN KSOBJECT_BAG ObjectBag
,
2452 IN OUT PVOID
* PointerToPointerToItem
,
2465 IN PKSDEVICE Device
)
2471 IN PDRIVER_OBJECT DriverObject
,
2472 IN PDEVICE_OBJECT PhysicalDeviceObject
)
2479 IN PKSEVENT_ENTRY EventEntry
)
2484 KsAddItemToObjectBag(
2485 IN KSOBJECT_BAG ObjectBag
,
2487 IN PFNKSFREE Free OPTIONAL
)
2492 KsAllocateObjectBag(
2493 IN PKSDEVICE Device
,
2494 OUT KSOBJECT_BAG
* ObjectBag
)
2499 KsCompletePendingRequest(
2505 KsCopyObjectBagItems(
2506 IN KSOBJECT_BAG ObjectBagDestination
,
2507 IN KSOBJECT_BAG ObjectBagSource
)
2513 IN PDRIVER_OBJECT DriverObject
,
2514 IN PDEVICE_OBJECT PhysicalDeviceObject
,
2515 IN
const KSDEVICE_DESCRIPTOR
* Descriptor OPTIONAL
,
2516 IN ULONG ExtensionSize OPTIONAL
,
2517 OUT PKSDEVICE
* Device OPTIONAL
)
2522 KsCreateFilterFactory(
2523 IN PDEVICE_OBJECT DeviceObject
,
2524 IN
const KSFILTER_DESCRIPTOR
* Descriptor
,
2525 IN PWCHAR RefString OPTIONAL
,
2526 IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL
,
2527 IN ULONG CreateItemFlags
,
2528 IN PFNKSFILTERFACTORYPOWER SleepCallback OPTIONAL
,
2529 IN PFNKSFILTERFACTORYPOWER WakeCallback OPTIONAL
,
2530 OUT PKFSFILTERFACTORY FilterFactory OPTIONAL
)
2535 KsDefaultAddEventHandler(
2537 IN PKSEVENTDATA EventData
,
2538 IN OUT PKSEVENT_ENTRY EventEntry
)
2543 KsDeleteFilterFactory(
2544 IN PKSFILTERFACTORY FilterFactory
)
2550 IN PKSDEVICE Device
,
2559 KsDeviceGetFirstChildFilterFactory(
2560 IN PKSDEVICE Device
)
2565 KsDeviceGetOuterUnknown(
2566 IN PKSDEVICE Device
)
2571 KsDeviceRegisterAdapterObject(
2572 IN PKSDEVICE Device
,
2573 IN PADAPTER_OBJECT AdapterObject
,
2574 IN ULONG MaxMappingByteCount
,
2575 IN ULONG MappingTableStride
)
2579 KSDDKAPI PUNKNOWN NTAPI
2580 KsDeviceRegisterAggregatedClientUnknown(
2581 IN PKSDEVICE Device
,
2582 IN PUNKNOWN ClientUnknown
);
2586 IN PKSDEVICE Device
,
2594 #define KsDiscard(object, pointer) \
2595 KsRemoveItemFromObjectBag(object->Bag, pointer, TRUE)
2598 KsFilterAcquireControl(
2599 IN PKSFILTER Filter
)
2604 KsFilterAcquireProcessingMutex(
2605 IN PKSFILTER Filter
);
2609 IN PKSFILTER Filter
,
2610 IN PKSEVENT_ENTRY EventEntry
)
2614 KSDDKAPI NTSTATUS NTAPI
2615 KsFilterAddTopologyConnections(
2616 IN PKSFILTER Filter
,
2617 IN ULONG NewConnectionsCount
,
2618 IN
const KSTOPOLOGY_CONNECTION
* NewTopologyConnections
);
2621 KsFilterAttemptProcessing(
2622 IN PKSFILTER Filter
,
2623 IN BOOLEAN Asynchronous
);
2625 KSDDKAPI NTSTATUS NTAPI
2627 IN PKSFILTER Filter
,
2628 IN
const KSNODE_DESCRIPTOR
* NodeDescriptor
,
2631 KSDDKAPI NTSTATUS NTAPI
2632 KsFilterCreatePinFactory(
2633 IN PKSFILTER Filter
,
2634 IN
const KSPIN_DESCRIPTOR_EX
* PinDescriptor
,
2638 KsFilterFactoryGetDevice(
2639 IN PKSFILTERFACTORY FilterFactory
);
2642 #endif /* avstream */