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 */
46 #define KSSTRING_Filter L"{9B365890-165F-11D0-A195-0020AFD156E4}"
47 #define KSSTRING_Pin L"{146F1A80-4791-11D0-A5D6-28DB04C10000}"
48 #define KSSTRING_Clock L"{53172480-4791-11D0-A5D6-28DB04C10000}"
49 #define KSSTRING_Allocator L"{642F5D00-4791-11D0-A5D6-28DB04C10000}"
50 #define KSSTRING_AllocatorEx L"{091BB63B-603F-11D1-B067-00A0C9062802}"
51 #define KSSTRING_TopologyNode L"{0621061A-EE75-11D0-B915-00A0C9223196}"
53 #define KSDATAFORMAT_BIT_ATTRIBUTES 1
54 #define KSDATAFORMAT_ATTRIBUTES (1 << KSDATAFORMAT_BIT_ATTRIBUTES)
57 typedef PVOID PKSWORKER
;
61 #define SIZEOF_ARRAY(a) (sizeof(a)/sizeof((a)[0]))
64 /* ===============================================================
65 GUID definition helpers
71 #define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name
73 #define DEFINE_GUIDEX(name) EXTERN_C const GUID name
78 #define STATICGUIDOF(guid) STATIC_##guid
82 #if defined(__cplusplus) && _MSC_VER >= 1100
83 #define DEFINE_GUIDSTRUCT(guid, name) struct __declspec(uuid(guid)) name
84 #define DEFINE_GUIDNAMED(name) __uidof(struct name)
86 #define DEFINE_GUIDSTRUCT(guid, name) DEFINE_GUIDEX(name)
87 #define DEFINE_GUIDNAMED(name) name
91 #define STATIC_GUID_NULL \
92 0x00000000L, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
93 DEFINE_GUIDSTRUCT("00000000-0000-0000-0000-000000000000", GUID_NULL
);
94 #define GUID_NULL DEFINE_GUIDNAMED(GUID_NULL)
97 /* ===============================================================
101 #define IOCTL_KS_DISABLE_EVENT \
108 #define IOCTL_KS_ENABLE_EVENT \
116 #define IOCTL_KS_METHOD \
124 #define IOCTL_KS_PROPERTY \
131 #define IOCTL_KS_WRITE_STREAM \
138 #define IOCTL_KS_READ_STREAM \
145 #define IOCTL_KS_RESET_STATE \
153 /* ===============================================================
157 #define STATIC_KSCATEGORY_BRIDGE \
158 0x085AFF00L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
159 DEFINE_GUIDSTRUCT("085AFF00-62CE-11CF-A5D6-28DB04C10000", KSCATEGORY_BRIDGE
);
160 #define KSCATEGORY_BRIDGE DEFINE_GUIDNAMED(KSCATEGORY_BRIDGE)
162 #define STATIC_KSCATEGORY_CAPTURE \
163 0x65E8773DL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
164 DEFINE_GUIDSTRUCT("65E8773D-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_CAPTURE
);
165 #define KSCATEGORY_CAPTURE DEFINE_GUIDNAMED(KSCATEGORY_CAPTURE)
167 #define STATIC_KSCATEGORY_RENDER \
168 0x65E8773EL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
169 DEFINE_GUIDSTRUCT("65E8773E-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_RENDER
);
170 #define KSCATEGORY_RENDER DEFINE_GUIDNAMED(KSCATEGORY_RENDER)
172 #define STATIC_KSCATEGORY_MIXER \
173 0xAD809C00L, 0x7B88, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
174 DEFINE_GUIDSTRUCT("AD809C00-7B88-11D0-A5D6-28DB04C10000", KSCATEGORY_MIXER
);
175 #define KSCATEGORY_MIXER DEFINE_GUIDNAMED(KSCATEGORY_MIXER)
177 #define STATIC_KSCATEGORY_SPLITTER \
178 0x0A4252A0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
179 DEFINE_GUIDSTRUCT("0A4252A0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_SPLITTER
);
180 #define KSCATEGORY_SPLITTER DEFINE_GUIDNAMED(KSCATEGORY_SPLITTER)
182 #define STATIC_KSCATEGORY_DATACOMPRESSOR \
183 0x1E84C900L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
184 DEFINE_GUIDSTRUCT("1E84C900-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATACOMPRESSOR
);
185 #define KSCATEGORY_DATACOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATACOMPRESSOR)
187 #define STATIC_KSCATEGORY_DATADECOMPRESSOR \
188 0x2721AE20L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
189 DEFINE_GUIDSTRUCT("2721AE20-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATADECOMPRESSOR
);
190 #define KSCATEGORY_DATADECOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATADECOMPRESSOR)
192 #define STATIC_KSCATEGORY_DATATRANSFORM \
193 0x2EB07EA0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
194 DEFINE_GUIDSTRUCT("2EB07EA0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATATRANSFORM
);
195 #define KSCATEGORY_DATATRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_DATATRANSFORM)
197 #define STATIC_KSCATEGORY_COMMUNICATIONSTRANSFORM \
198 0xCF1DDA2CL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
199 DEFINE_GUIDSTRUCT("CF1DDA2C-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_COMMUNICATIONSTRANSFORM
);
200 #define KSCATEGORY_COMMUNICATIONSTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_COMMUNICATIONSTRANSFORM)
202 #define STATIC_KSCATEGORY_INTERFACETRANSFORM \
203 0xCF1DDA2DL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
204 DEFINE_GUIDSTRUCT("CF1DDA2D-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_INTERFACETRANSFORM
);
205 #define KSCATEGORY_INTERFACETRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_INTERFACETRANSFORM)
207 #define STATIC_KSCATEGORY_MEDIUMTRANSFORM \
208 0xCF1DDA2EL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
209 DEFINE_GUIDSTRUCT("CF1DDA2E-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_MEDIUMTRANSFORM
);
210 #define KSCATEGORY_MEDIUMTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_MEDIUMTRANSFORM)
212 #define STATIC_KSCATEGORY_FILESYSTEM \
213 0x760FED5EL, 0x9357, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
214 DEFINE_GUIDSTRUCT("760FED5E-9357-11D0-A3CC-00A0C9223196", KSCATEGORY_FILESYSTEM
);
215 #define KSCATEGORY_FILESYSTEM DEFINE_GUIDNAMED(KSCATEGORY_FILESYSTEM)
217 #define STATIC_KSCATEGORY_CLOCK \
218 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
219 DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000", KSCATEGORY_CLOCK
);
220 #define KSCATEGORY_CLOCK DEFINE_GUIDNAMED(KSCATEGORY_CLOCK)
222 #define STATIC_KSCATEGORY_PROXY \
223 0x97EBAACAL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
224 DEFINE_GUIDSTRUCT("97EBAACA-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_PROXY
);
225 #define KSCATEGORY_PROXY DEFINE_GUIDNAMED(KSCATEGORY_PROXY)
227 #define STATIC_KSCATEGORY_QUALITY \
228 0x97EBAACBL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
229 DEFINE_GUIDSTRUCT("97EBAACB-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_QUALITY
);
230 #define KSCATEGORY_QUALITY DEFINE_GUIDNAMED(KSCATEGORY_QUALITY)
232 /* ===============================================================
241 } KSIDENTIFIER
, *PKSIDENTIFIER
;
243 typedef KSIDENTIFIER KSPROPERTY
, *PKSPROPERTY
;
244 typedef KSIDENTIFIER KSMETHOD
, *PKSMETHOD
;
245 typedef KSIDENTIFIER KSEVENT
, *PKSEVENT
;
247 typedef KSIDENTIFIER KSDEGRADE
, *PKSDEGRADE
;
249 typedef KSIDENTIFIER KSPIN_INTERFACE
, *PKSPIN_INTERFACE
;
250 typedef KSIDENTIFIER KSPIN_MEDIUM
, *PKSPIN_MEDIUM
;
263 } KSDATAFORMAT
, *PKSDATAFORMAT
, KSDATARANGE
, *PKSDATARANGE
;
271 } KSATTRIBUTE
, *PKSATTRIBUTE
;
275 /* ===============================================================
276 Interface Sets - TODO
280 #define KSINTERFACESETID_Media
282 #define KSINTERFACESETID_Standard
283 #define KSINTERFACE_STANDARD_STREAMING
284 #define KSINTERFACE_STANDARD_LOOPED_STREAMING
285 #define KSINTERFACE_STANDARD_CONTROL
288 #define STATIC_KSINTERFACESETID_Standard \
289 0x1A8766A0L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
290 DEFINE_GUIDSTRUCT("1A8766A0-62CE-11CF-A5D6-28DB04C10000", KSINTERFACESETID_Standard
);
291 #define KSINTERFACESETID_Standard DEFINE_GUIDNAMED(KSINTERFACESETID_Standard)
295 KSINTERFACE_STANDARD_STREAMING
,
296 KSINTERFACE_STANDARD_LOOPED_STREAMING
,
297 KSINTERFACE_STANDARD_CONTROL
298 } KSINTERFACE_STANDARD
;
300 #define STATIC_KSINTERFACESETID_FileIo \
301 0x8C6F932CL, 0xE771, 0x11D0, 0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
302 DEFINE_GUIDSTRUCT("8C6F932C-E771-11D0-B8FF-00A0C9223196", KSINTERFACESETID_FileIo
);
303 #define KSINTERFACESETID_FileIo DEFINE_GUIDNAMED(KSINTERFACESETID_FileIo)
306 /* ===============================================================
312 KSINTERFACE_FILEIO_STREAMING
313 } KSINTERFACE_FILEIO
;
315 #define KSMEDIUM_TYPE_ANYINSTANCE 0
317 #define STATIC_KSMEDIUMSETID_Standard \
318 0x4747B320L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
319 DEFINE_GUIDSTRUCT("4747B320-62CE-11CF-A5D6-28DB04C10000", KSMEDIUMSETID_Standard
);
320 #define KSMEDIUMSETID_Standard DEFINE_GUIDNAMED(KSMEDIUMSETID_Standard)
323 /* ===============================================================
324 Clock Properties/Methods/Events
327 #define KSPROPSETID_Clock \
328 0xDF12A4C0L, 0xAC17, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
332 KSPROPERTY_CLOCK_TIME
,
333 KSPROPERTY_CLOCK_PHYSICALTIME
,
334 KSPROPERTY_CORRELATEDTIME
,
335 KSPROPERTY_CORRELATEDPHYSICALTIME
,
336 KSPROPERTY_CLOCK_RESOLUTION
,
337 KSPROPERTY_CLOCK_STATE
,
338 KSPROPERTY_CLOCK_FUNCTIONTABLE
341 #define KSEVENTSETID_Clock \
342 0x364D8E20L, 0x62C7, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
346 KSEVENT_CLOCK_INTERVAL_MARK
,
347 KSEVENT_CLOCK_POSITION_MARK
348 } KSEVENT_CLOCK_POSITION
;
351 /* ===============================================================
352 Connection Properties/Methods/Events
355 #define STATIC_KSPROPSETID_Connection \
356 0x1D58C920L, 0xAC9B, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
357 DEFINE_GUIDSTRUCT("1D58C920-AC9B-11CF-A5D6-28DB04C10000", KSPROPSETID_Connection
);
358 #define KSPROPSETID_Connection DEFINE_GUIDNAMED(KSPROPSETID_Connection)
363 KSPROPERTY_CONNECTION_STATE
,
364 KSPROPERTY_CONNECTION_PRIORITY
,
365 KSPROPERTY_CONNECTION_DATAFORMAT
,
366 KSPROPERTY_CONNECTION_ALLOCATORFRAMING
,
367 KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT
,
368 KSPROPERTY_CONNECTION_ACQUIREORDERING
,
369 KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX
,
370 KSPROPERTY_CONNECTION_STARTAT
371 } KSPROPERTY_CONNECTION
;
373 #define KSEVENTSETID_Connection \
374 0x7f4bcbe0L, 0x9ea5, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00
378 KSEVENT_CONNECTION_POSITIONUPDATE
,
379 KSEVENT_CONNECTION_DATADISCONTINUITY
,
380 KSEVENT_CONNECTION_TIMEDISCONTINUITY
,
381 KSEVENT_CONNECTION_PRIORITY
,
382 KSEVENT_CONNECTION_ENDOFSTREAM
383 } KSEVENT_CONNECTION
;
386 /* ===============================================================
388 Properties/Methods/Events
391 #define STATIC_KSPROPSETID_General\
392 0x1464EDA5L, 0x6A8F, 0x11D1, {0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
393 DEFINE_GUIDSTRUCT("1464EDA5-6A8F-11D1-9AA7-00A0C9223196", KSPROPSETID_General
);
394 #define KSPROPSETID_General DEFINE_GUIDNAMED(KSPROPSETID_General)
399 KSPROPERTY_GENERAL_COMPONENTID
400 } KSPROPERTY_GENERAL
;
403 /* ===============================================================
405 Properties/Methods/Events
408 #define KSPROPSETID_GM \
409 0xAF627536L, 0xE719, 0x11D2, 0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D
413 KSPROPERTY_GM_GRAPHMANAGER
,
414 KSPROPERTY_GM_TIMESTAMP_CLOCK
,
415 KSPROPERTY_GM_RATEMATCH
,
416 KSPROPERTY_GM_RENDERCLOCK
420 /* ===============================================================
422 Properties/Methods/Events
425 #define KSPROPSETID_MediaSeeking \
426 0xEE904F0CL, 0xD09B, 0x11D0, 0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
430 KSPROPERTY_MEDIASEEKING_CAPABILITIES
,
431 KSPROPERTY_MEDIASEEKING_FORMATS
,
432 KSPROPERTY_MEDIASEEKING_TIMEFORMAT
,
433 KSPROPERTY_MEDIASEEKING_POSITION
,
434 KSPROPERTY_MEDIASEEKING_STOPPOSITION
,
435 KSPROPERTY_MEDIASEEKING_POSITIONS
,
436 KSPROPERTY_MEDIASEEKING_DURATION
,
437 KSPROPERTY_MEDIASEEKING_AVAILABLE
,
438 KSPROPERTY_MEDIASEEKING_PREROLL
,
439 KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT
440 } KSPROPERTY_MEDIASEEKING
;
443 /* ===============================================================
445 Properties/Methods/Events
448 #define STATIC_KSPROPSETID_Pin\
449 0x8C134960L, 0x51AD, 0x11CF, 0x87, 0x8A, 0x94, 0xF8, 0x01, 0xC1, 0x00, 0x00
450 DEFINE_GUIDSTRUCT("8C134960-51AD-11CF-878A-94F801C10000", KSPROPSETID_Pin
);
451 #define KSPROPSETID_Pin DEFINE_GUIDNAMED(KSPROPSETID_Pin)
453 #define STATIC_KSNAME_Pin\
454 0x146F1A80L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
455 DEFINE_GUIDSTRUCT("146F1A80-4791-11D0-A5D6-28DB04C10000", KSNAME_Pin
);
456 #define KSNAME_Pin DEFINE_GUIDNAMED(KSNAME_Pin)
461 KSPROPERTY_PIN_CINSTANCES
,
462 KSPROPERTY_PIN_CTYPES
,
463 KSPROPERTY_PIN_DATAFLOW
,
464 KSPROPERTY_PIN_DATARANGES
,
465 KSPROPERTY_PIN_DATAINTERSECTION
,
466 KSPROPERTY_PIN_INTERFACES
,
467 KSPROPERTY_PIN_MEDIUMS
,
468 KSPROPERTY_PIN_COMMUNICATION
,
469 KSPROPERTY_PIN_GLOBALCINSTANCES
,
470 KSPROPERTY_PIN_NECESSARYINSTANCES
,
471 KSPROPERTY_PIN_PHYSICALCONNECTION
,
472 KSPROPERTY_PIN_CATEGORY
,
474 KSPROPERTY_PIN_CONSTRAINEDDATARANGES
,
475 KSPROPERTY_PIN_PROPOSEDATAFORMAT
483 } KSP_PIN
, *PKSP_PIN
;
485 #define KSINSTANCE_INDETERMINATE ((ULONG)-1)
491 } KSPIN_CINSTANCES
, *PKSPIN_CINSTANCES
;
497 WCHAR SymbolicLinkName
[1];
498 } KSPIN_PHYSICALCONNECTION
, *PKSPIN_PHYSICALCONNECTION
;
501 /* ===============================================================
503 Properties/Methods/Events
506 #define KSPROPSETID_Quality \
507 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
511 KSPROPERTY_QUALITY_REPORT
,
512 KSPROPERTY_QUALITY_ERROR
513 } KSPROPERTY_QUALITY
;
516 /* ===============================================================
518 Properties/Methods/Events
521 #define KSPROPSETID_Stream \
522 0x65aaba60L, 0x98ae, 0x11cf, 0xa1, 0x0d, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
526 KSPROPERTY_STREAM_ALLOCATOR
,
527 KSPROPERTY_STREAM_QUALITY
,
528 KSPROPERTY_STREAM_DEGRADATION
,
529 KSPROPERTY_STREAM_MASTERCLOCK
,
530 KSPROPERTY_STREAM_TIMEFORMAT
,
531 KSPROPERTY_STREAM_PRESENTATIONTIME
,
532 KSPROPERTY_STREAM_PRESENTATIONEXTENT
,
533 KSPROPERTY_STREAM_FRAMETIME
,
534 KSPROPERTY_STREAM_RATECAPABILITY
,
535 KSPROPERTY_STREAM_RATE
,
536 KSPROPERTY_STREAM_PIPE_ID
540 /* ===============================================================
542 Properties/Methods/Events
545 #define STATIC_KSPROPSETID_StreamAllocator\
546 0xcf6e4342L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
547 DEFINE_GUIDSTRUCT("cf6e4342-ec87-11cf-a130-0020afd156e4", KSPROPSETID_StreamAllocator
);
548 #define KSPROPSETID_StreamAllocator DEFINE_GUIDNAMED(KSPROPSETID_StreamAllocator)
552 KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE
,
553 KSPROPERTY_STREAMALLOCATOR_STATUS
554 } KSPROPERTY_STREAMALLOCATOR
;
556 #define KSMETHODSETID_StreamAllocator \
557 0xcf6e4341L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
561 KSMETHOD_STREAMALLOCATOR_ALLOC
,
562 KSMETHOD_STREAMALLOCATOR_FREE
563 } KSMETHOD_STREAMALLOCATOR
;
566 #define KSEVENTSETID_StreamAllocator
570 KSEVENT_STREAMALLOCATOR_INTERNAL_FREEFRAME
,
571 KSEVENT_STREAMALLOCATOR_FREEFRAME
572 } KSEVENT_STREAMALLOCATOR
;
575 /* ===============================================================
577 Properties/Methods/Events
580 #define KSPROPSETID_StreamInterface \
581 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
585 KSPROPERTY_STREAMINTERFACE_HEADERSIZE
586 } KSPROPERTY_STREAMINTERFACE
;
589 /* ===============================================================
591 Properties/Methods/Events
594 #define STATIC_KSPROPSETID_Topology\
595 0x720D4AC0L, 0x7533, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
596 DEFINE_GUIDSTRUCT("720D4AC0-7533-11D0-A5D6-28DB04C10000", KSPROPSETID_Topology
);
597 #define KSPROPSETID_Topology DEFINE_GUIDNAMED(KSPROPSETID_Topology)
601 KSPROPERTY_TOPOLOGY_CATEGORIES
,
602 KSPROPERTY_TOPOLOGY_CONNECTIONS
,
603 KSPROPERTY_TOPOLOGY_NAME
,
604 KSPROPERTY_TOPOLOGY_NODES
605 } KSPROPERTY_TOPOLOGY
;
609 /* ===============================================================
610 Property Sets for audio drivers - TODO
613 #define STATIC_KSPROPTYPESETID_General \
614 0x97E99BA0L, 0xBDEA, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
615 DEFINE_GUIDSTRUCT("97E99BA0-BDEA-11CF-A5D6-28DB04C10000", KSPROPTYPESETID_General
);
616 #define KSPROPTYPESETID_General DEFINE_GUIDNAMED(KSPROPTYPESETID_General)
619 KSPROPERTY_AC3_ALTERNATE_AUDIO
620 KSPROPERTY_AC3_BIT_STREAM_MODE
621 KSPROPERTY_AC3_DIALOGUE_LEVEL
622 KSPROPERTY_AC3_DOWNMIX
623 KSPROPERTY_AC3_ERROR_CONCEALMENT
624 KSPROPERTY_AC3_LANGUAGE_CODE
625 KSPROPERTY_AC3_ROOM_TYPE
628 #define KSPROPSETID_Acoustic_Echo_Cancel
631 KSPROPERTY_AEC_NOISE_FILL_ENABLE
632 KSPROPERTY_AEC_STATUS
636 KSPROPERTY_AUDIO_3D_INTERFACE
638 KSPROPERTY_AUDIO_ALGORITHM_INSTANCE
639 KSPROPERTY_AUDIO_BASS
640 KSPROPERTY_AUDIO_BASS_BOOST
641 KSPROPERTY_AUDIO_CHANNEL_CONFIG
642 KSPROPERTY_AUDIO_CHORUS_LEVEL
643 KSPROPERTY_AUDIO_COPY_PROTECTION
644 KSPROPERTY_AUDIO_CPU_RESOURCES
645 KSPROPERTY_AUDIO_DELAY
646 KSPROPERTY_AUDIO_DEMUX_DEST
647 KSPROPERTY_AUDIO_DEV_SPECIFIC
648 KSPROPERTY_AUDIO_DYNAMIC_RANGE
649 KSPROPERTY_AUDIO_DYNAMIC_SAMPLING_RATE
650 KSPROPERTY_AUDIO_EQ_BANDS
651 KSPROPERTY_AUDIO_EQ_LEVEL
652 KSPROPERTY_AUDIO_FILTER_STATE
653 KSPROPERTY_AUDIO_LATENCY
654 KSPROPERTY_AUDIO_LOUDNESS
655 KSPROPERTY_AUDIO_MANUFACTURE_GUID
657 KSPROPERTY_AUDIO_MIX_LEVEL_CAPS
658 KSPROPERTY_AUDIO_MIX_LEVEL_TABLE
659 KSPROPERTY_AUDIO_MUTE
660 KSPROPERTY_AUDIO_MUX_SOURCE
661 KSPROPERTY_AUDIO_NUM_EQ_BANDS
662 KSPROPERTY_AUDIO_PEAKMETER
663 KSPROPERTY_AUDIO_POSITION
664 KSPROPERTY_AUDIO_PREFERRED_STATUS
665 KSPROPERTY_AUDIO_PRODUCT_GUID
666 KSPROPERTY_AUDIO_QUALITY
667 KSPROPERTY_AUDIO_REVERB_LEVEL
668 KSPROPERTY_AUDIO_SAMPLING_RATE
669 KSPROPERTY_AUDIO_STEREO_ENHANCE
670 KSPROPERTY_AUDIO_STEREO_SPEAKER_GEOMETRY
671 KSPROPERTY_AUDIO_SURROUND_ENCODE
672 KSPROPERTY_AUDIO_TREBLE
673 KSPROPERTY_AUDIO_VOLUMELEVEL
674 KSPROPERTY_AUDIO_WIDE_MODE
675 KSPROPERTY_AUDIO_WIDENESS
678 #define KSPROPSETID_AudioGfx
680 KSPROPERTY_AUDIOGFX_CAPTURETARGETDEVICEID
681 KSPROPERTY_AUDIOGFX_RENDERTARGETDEVICEID
684 #define KSPROPSETID_DirectSound3DBuffer
686 KSPROPERTY_DIRECTSOUND3DBUFFER_ALL
687 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEANGLES
688 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEORIENTATION
689 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEOUTSIDEVOLUME
690 KSPROPERTY_DIRECTSOUND3DBUFFER_MAXDISTANCE
691 KSPROPERTY_DIRECTSOUND3DBUFFER_MINDISTANCE
692 KSPROPERTY_DIRECTSOUND3DBUFFER_MODE
693 KSPROPERTY_DIRECTSOUND3DBUFFER_POSITION
694 KSPROPERTY_DIRECTSOUND3DBUFFER_VELOCITY
697 #define KSPROPSETID_DirectSound3DListener
699 KSPROPERTY_DIRECTSOUND3DLISTENER_ALL
700 KSPROPERTY_DIRECTSOUND3DLISTENER_ALLOCATION
701 KSPROPERTY_DIRECTSOUND3DLISTENER_BATCH
702 KSPROPERTY_DIRECTSOUND3DLISTENER_DISTANCEFACTOR
703 KSPROPERTY_DIRECTSOUND3DLISTENER_DOPPLERFACTOR
704 KSPROPERTY_DIRECTSOUND3DLISTENER_ORIENTATION
705 KSPROPERTY_DIRECTSOUND3DLISTENER_POSITION
706 KSPROPERTY_DIRECTSOUND3DLISTENER_ROLLOFFFACTOR
707 KSPROPERTY_DIRECTSOUND3DLISTENER_VELOCITY
710 #define KSPROPSETID_DrmAudioStream
712 KSPROPERTY_DRMAUDIOSTREAM_CONTENTID
715 #define KSPROPSETID_Hrtf3d
717 KSPROPERTY_HRTF3D_FILTER_FORMAT
718 KSPROPERTY_HRTF3D_INITIALIZE
719 KSPROPERTY_HRTF3D_PARAMS
722 #define KSPROPSETID_Itd3d
724 KSPROPERTY_ITD3D_PARAMS
727 #define KSPROPSETID_Synth
729 KSPROPERTY_SYNTH_CAPS
730 KSPROPERTY_SYNTH_CHANNELGROUPS
731 KSPROPERTY_SYNTH_LATENCYCLOCK
732 KSPROPERTY_SYNTH_MASTERCLOCK
733 KSPROPERTY_SYNTH_PORTPARAMETERS
734 KSPROPERTY_SYNTH_RUNNINGSTATS
735 KSPROPERTY_SYNTH_VOICEPRIORITY
736 KSPROPERTY_SYNTH_VOLUME
737 KSPROPERTY_SYNTH_VOLUMEBOOST
740 #define KSPROPSETID_Synth_Dls
742 KSPROPERTY_SYNTH_DLS_APPEND
743 KSPROPERTY_SYNTH_DLS_COMPACT
744 KSPROPERTY_SYNTH_DLS_DOWNLOAD
745 KSPROPERTY_SYNTH_DLS_UNLOAD
746 KSPROPERTY_SYNTH_DLS_WAVEFORMAT
749 #define KSPROPSETID_TopologyNode
751 KSPROPERTY_TOPOLOGYNODE_ENABLE
752 KSPROPERTY_TOPOLOGYNODE_RESET
758 /* ===============================================================
759 Event Sets for audio drivers - TODO
761 #define KSEVENTSETID_AudioControlChange
763 KSEVENT_CONTROL_CHANGE
768 /* ===============================================================
772 KSNODETYPE_3D_EFFECTS
773 KSNODETYPE_ACOUSTIC_ECHO_CANCEL
780 KSNODETYPE_DEV_SPECIFIC
782 KSNODETYPE_DMSYNTH_CAPS
783 KSNODETYPE_DRM_DESCRAMBLE
789 KSNODETYPE_PROLOGIC_DECODER
790 KSNODETYPE_PROLOGIC_ENCODER
793 KSNODETYPE_STEREO_ENHANCE
794 KSNODETYPE_STEREO_WIDE
799 KSNODETYPE_SYNTHESIZER
805 typedef PVOID KSDEVICE_HEADER
,
812 /* ===============================================================
816 #define KSMETHOD_TYPE_NONE 0x00000000
817 #define KSMETHOD_TYPE_READ 0x00000001
818 #define KSMETHOD_TYPE_WRITE 0x00000002
819 #define KSMETHOD_TYPE_MODIFY 0x00000003
820 #define KSMETHOD_TYPE_SOURCE 0x00000004
821 #define KSMETHOD_TYPE_SEND 0x00000001
822 #define KSMETHOD_TYPE_SETSUPPORT 0x00000100
823 #define KSMETHOD_TYPE_BASICSUPPORT 0x00000200
826 /* ===============================================================
830 #define KSPROPERTY_TYPE_GET 0x00000001
831 #define KSPROPERTY_TYPE_SET 0x00000002
832 #define KSPROPERTY_TYPE_SETSUPPORT 0x00000100
833 #define KSPROPERTY_TYPE_BASICSUPPORT 0x00000200
834 #define KSPROPERTY_TYPE_RELATIONS 0x00000400
835 #define KSPROPERTY_TYPE_SERIALIZESET 0x00000800
836 #define KSPROPERTY_TYPE_UNSERIALIZESET 0x00001000
837 #define KSPROPERTY_TYPE_SERIALIZERAW 0x00002000
838 #define KSPROPERTY_TYPE_UNSERIALIZERAW 0x00004000
839 #define KSPROPERTY_TYPE_SERIALIZESIZE 0x00008000
840 #define KSPROPERTY_TYPE_DEFAULT_VALUES 0x00010000
843 /* ===============================================================
844 Topology Methods/Properties
847 #define KSMETHOD_TYPE_TOPOLOGY 0x10000000
848 #define KSPROPERTY_TYPE_TOPOLOGY 0x10000000
851 #define DEFINE_KS_GUID(GA,GB,GC,GD,GE,GF,GG,GH,GI,GJ,GK) \
852 DEFINE_GUID(??, 0x#GA#L, 0xGB, 0xGC, 0xGD, 0xGE, 0xGF, 0xGG, 0xGH, 0xGI, 0xGJ, 0xGK) \
853 "GA-GB-GC-GDGE-GFGGGHGIGJGK"
856 /* ===============================================================
859 BRIDGE - 0x085AFF00L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
860 CAPTURE - 0x65E8773DL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
861 RENDER - 0x65E8773EL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
862 MIXER - 0xAD809C00L, 0x7B88, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
863 SPLITTER - 0x0A4252A0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
864 DATACOMPRESSOR - 0x1E84C900L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
865 DATADECOMPRESSOR - 0x2721AE20L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
866 DATATRANSFORM - 0x2EB07EA0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
867 COMMUNICATIONSTRANSFORM - 0xCF1DDA2CL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
868 INTERFACETRANSFORM - 0xCF1DDA2DL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
869 MEDIUMTRANSFORM - 0xCF1DDA2EL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
870 FILESYSTEM - 0x760FED5EL, 0x9357, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
871 CLOCK - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
872 PROXY - 0x97EBAACAL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
873 QUALITY - 0x97EBAACBL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
876 /* ===============================================================
877 KSNAME GUIDs (defined also as KSSTRING_Xxx L"{...}"
879 Filter - 0x9b365890L, 0x165f, 0x11d0, 0xa1, 0x95, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
880 Pin - 0x146F1A80L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
881 Clock - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
882 Allocator - 0x642F5D00L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
883 TopologyNode - 0x0621061AL, 0xEE75, 0x11D0, 0xB9, 0x15, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
886 /* ===============================================================
889 Standard - 0x1A8766A0L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
890 FileIo - 0x8C6F932CL, 0xE771, 0x11D0, 0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
893 /* ===============================================================
896 Standard - 0x4747B320L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
899 /* ===============================================================
902 General - 0x1464EDA5L, 0x6A8F, 0x11D1, 0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
903 StreamIo - 0x65D003CAL, 0x1523, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
904 MediaSeeking - 0xEE904F0CL, 0xD09B, 0x11D0, 0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
905 Topology - 0x720D4AC0L, 0x7533, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
906 GM - 0xAF627536L, 0xE719, 0x11D2, 0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D
907 Quality - 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
908 Connection - 0x1D58C920L, 0xAC9B, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
911 /* ===============================================================
914 Event set - 0x75d95571L, 0x073c, 0x11d0, 0xa1, 0x61, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
915 Method set - 0xcf6e4341L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
916 Property set - 0xcf6e4342L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
919 /* ===============================================================
922 Property set - 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
925 /* ===============================================================
928 Property set - 0xDF12A4C0L, 0xAC17, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
929 Event sets - 0x364D8E20L, 0x62C7, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
932 /* ===============================================================
935 Event set - 0x7f4bcbe0L, 0x9ea5, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00
938 /* ===============================================================
941 KSTIME_FORMAT_NONE (null guid)
942 FRAME - 0x7b785570L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
943 BYTE - 0x7b785571L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
944 SAMPLE - 0x7b785572L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
945 FIELD - 0x7b785573L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
946 MEDIA_TIME - 0x7b785574L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
949 /* ===============================================================
959 #define STATIC_KSDATAFORMAT_SPECIFIER_NONE\
960 0x0F6417D6L, 0xC318, 0x11D0, 0xA4, 0x3F, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
961 DEFINE_GUIDSTRUCT("0F6417D6-C318-11D0-A43F-00A0C9223196", KSDATAFORMAT_SPECIFIER_NONE
);
962 #define KSDATAFORMAT_SPECIFIER_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_NONE)
965 /* ===============================================================
968 WILDCARD, DONT_CARE = NULL
969 SYSTEM - 0x091bb638L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
970 USER - 0x8cb0fc28L, 0x7893, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
971 KERNEL_PAGED - 0xd833f8f8L, 0x7894, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
972 KERNEL_NONPAGED - 0x4a6d5fc4L, 0x7895, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
973 DEVICE_UNKNOWN - 0x091bb639L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
976 /* ===============================================================
978 (values have been checked)
983 #define DEFINE_KSPROPERTY_ITEM(PropertyId, GetHandler,\
987 Values, RelationsCount, Relations, SupportHandler,\
990 PropertyId, {(PFNKSHANDLER)GetHandler}, MinProperty, MinData,\
991 {(PFNKSHANDLER)SetHandler},\
992 (PKSPROPERTY_VALUES)Values, RelationsCount, (PKSPROPERTY)Relations,\
993 (PFNKSHANDLER)SupportHandler, (ULONG)SerializedSize\
998 #define DEFINE_KSPROPERTY_ITEM(PropertyId, GetHandler,\
1002 Values, RelationsCount, Relations, SupportHandler,\
1005 PropertyId, (PFNKSHANDLER)GetHandler, MinProperty, MinData,\
1006 (PFNKSHANDLER)SetHandler,\
1007 (PKSPROPERTY_VALUES)Values, RelationsCount, (PKSPROPERTY)Relations,\
1008 (PFNKSHANDLER)SupportHandler, (ULONG)SerializedSize\
1017 KsObjectTypeFilterFactory
,
1028 } KSSTATE
, *PKSSTATE
;
1032 KSTARGET_STATE_DISABLED
,
1033 KSTARGET_STATE_ENABLED
1048 KSEVENTS_FMUTEXUNSAFE
,
1051 } KSEVENTS_LOCKTYPE
;
1055 KSDEGRADE_STANDARD_SIMPLE
,
1056 KSDEGRADE_STANDARD_QUALITY
,
1057 KSDEGRADE_STANDARD_COMPUTATION
,
1058 KSDEGRADE_STANDARD_SKIP
1059 } KSDEGRADE_STANDARD
;
1063 KSPIN_DATAFLOW_IN
= 1,
1069 KSPIN_COMMUNICATION_NONE
,
1070 KSPIN_COMMUNICATION_SINK
,
1071 KSPIN_COMMUNICATION_SOURCE
,
1072 KSPIN_COMMUNICATION_BOTH
,
1073 KSPIN_COMMUNICATION_BRIDGE
1074 } KSPIN_COMMUNICATION
;
1080 } KSLIST_ENTRY_LOCATION
;
1084 KsStackCopyToNewLocation
,
1085 KsStackReuseCurrentLocation
,
1086 KsStackUseNewLocation
1093 KsAcquireOnlySingleItem
,
1094 KsAcquireAndRemoveOnlySingleItem
1095 } KSIRP_REMOVAL_OPERATION
;
1099 KsInvokeOnSuccess
= 1,
1100 KsInvokeOnError
= 2,
1101 KsInvokeOnCancel
= 4
1102 } KSCOMPLETION_INVOCATION
;
1105 #if defined(_NTDDK_)
1107 typedef NTSTATUS NTAPI
NTAPI (*PFNKSCONTEXT_DISPATCH
)(
1112 #if defined(_NTDDK_) && !defined(__wtypes_h__)
1142 VT_USERDEFINED
= 29,
1149 VT_STREAMED_OBJECT
= 68,
1150 VT_STORED_OBJECT
= 69,
1151 VT_BLOB_OBJECT
= 70,
1157 VT_RESERVED
= 0x8000,
1158 VT_ILLEGAL
= 0xffff,
1159 VT_ILLEGALMASKED
= 0xfff,
1164 #define STATIC_KSDATAFORMAT_TYPE_WILDCARD STATIC_GUID_NULL
1165 #define KSDATAFORMAT_TYPE_WILDCARD GUID_NULL
1167 #define STATIC_KSDATAFORMAT_SUBTYPE_WILDCARD STATIC_GUID_NULL
1168 #define KSDATAFORMAT_SUBTYPE_WILDCARD GUID_NULL
1170 #define STATIC_KSDATAFORMAT_SPECIFIER_WILDCARD STATIC_GUID_NULL
1171 #define KSDATAFORMAT_SPECIFIER_WILDCARD GUID_NULL
1173 /* ===============================================================
1182 } KS_FRAMING_RANGE
, *PKS_FRAMING_RANGE
;
1186 KS_FRAMING_RANGE Range
;
1187 ULONG InPlaceWeight
;
1188 ULONG NotInPlaceWeight
;
1189 } KS_FRAMING_RANGE_WEIGHTED
, *PKS_FRAMING_RANGE_WEIGHTED
;
1199 ULONG FileAlignment
;
1200 ULONG MemoryTypeWeight
;
1201 KS_FRAMING_RANGE PhysicalRange
;
1202 KS_FRAMING_RANGE_WEIGHTED FramingRange
;
1203 } KS_FRAMING_ITEM
, *PKS_FRAMING_ITEM
;
1207 ULONG RatioNumerator
;
1208 ULONG RatioDenominator
;
1209 ULONG RatioConstantMargin
;
1210 } KS_COMPRESSION
, *PKS_COMPRESSION
;
1213 /* ===============================================================
1217 #define KSPRIORITY_LOW 0x00000001
1218 #define KSPRIORITY_NORMAL 0x40000000
1219 #define KSPRIORITY_HIGH 0x80000000
1220 #define KSPRIORITY_EXCLUSIVE 0xFFFFFFFF
1224 ULONG PriorityClass
;
1225 ULONG PrioritySubClass
;
1226 } KSPRIORITY
, *PKSPRIORITY
;
1229 /* ===============================================================
1231 http://www.osronline.com/DDKx/stream/ks-struct_494j.htm
1233 #if defined(_NTDDK_)
1236 PDRIVER_DISPATCH DeviceIoControl
;
1237 PDRIVER_DISPATCH Read
;
1238 PDRIVER_DISPATCH Write
;
1239 PDRIVER_DISPATCH Flush
;
1240 PDRIVER_DISPATCH Close
;
1241 PDRIVER_DISPATCH QuerySecurity
;
1242 PDRIVER_DISPATCH SetSecurity
;
1243 PFAST_IO_DEVICE_CONTROL FastDeviceIoControl
;
1244 PFAST_IO_READ FastRead
;
1245 PFAST_IO_WRITE FastWrite
;
1246 } KSDISPATCH_TABLE
, *PKSDISPATCH_TABLE
;
1249 #define KSCREATE_ITEM_IRP_STORAGE(Irp) (*(PKSOBJECT_CREATE_ITEM*)&(Irp)->Tail.Overlay.DriverContext[0])
1250 #define KSEVENT_SET_IRP_STORAGE(Irp) (*(const KSEVENT_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1251 #define KSEVENT_ITEM_IRP_STORAGE(Irp) (*(const KSEVENT_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1252 #define KSEVENT_ENTRY_IRP_STORAGE(Irp) (*(PKSEVENT_ENTRY*)&(Irp)->Tail.Overlay.DriverContext[0])
1253 #define KSMETHOD_SET_IRP_STORAGE(Irp) (*(const KSMETHOD_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1254 #define KSMETHOD_ITEM_IRP_STORAGE(Irp) (*(const KSMETHOD_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1255 #define KSMETHOD_TYPE_IRP_STORAGE(Irp) (*(ULONG_PTR*)(&(Irp)->Tail.Overlay.DriverContext[2]))
1256 #define KSQUEUE_SPINLOCK_IRP_STORAGE(Irp) (*(PKSPIN_LOCK*)&(Irp)->Tail.Overlay.DriverContext[1])
1257 #define KSPROPERTY_SET_IRP_STORAGE(Irp) (*(const KSPROPERTY_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1258 #define KSPROPERTY_ITEM_IRP_STORAGE(Irp) (*(const KSPROPERTY_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1259 #define KSPROPERTY_ATTRIBUTES_IRP_STORAGE(Irp) (*(PKSATTRIBUTE_LIST*)&(Irp)->Tail.Overlay.DriverContext[2])
1264 (*PFNREFERENCEDEVICEOBJECT
)(
1271 (*PFNDEREFERENCEDEVICEOBJECT
)(
1277 (*PFNQUERYREFERENCESTRING
)(
1279 IN OUT PWCHAR
*String
1284 INTERFACE Interface
;
1285 PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject
;
1286 PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject
;
1287 PFNQUERYREFERENCESTRING QueryReferenceString
;
1288 } BUS_INTERFACE_REFERENCE
, *PBUS_INTERFACE_REFERENCE
;
1293 ULONG ReferenceCount
;
1294 KSPIN_LOCK AccessLock
;
1295 } KSDPC_ITEM
, *PKSDPC_ITEM
;
1300 LIST_ENTRY BufferList
;
1301 } KSBUFFER_ITEM
, *PKSBUFFER_ITEM
;
1313 } KSCOMPONENTID
, *PKSCOMPONENTID
;
1315 /* ===============================================================
1319 #define KSPROPERTY_MEMBER_RANGES 0x00000001
1320 #define KSPROPERTY_MEMBER_STEPPEDRANGES 0x00000002
1321 #define KSPROPERTY_MEMBER_VALUES 0x00000003
1322 #define KSPROPERTY_MEMBER_FLAG_DEFAULT KSPROPERTY_MEMBER_RANGES
1325 KS_SEEKING_NoPositioning
,
1326 KS_SEEKING_AbsolutePositioning
,
1327 KS_SEEKING_RelativePositioning
,
1328 KS_SEEKING_IncrementalPositioning
,
1329 KS_SEEKING_PositioningBitsMask
= 0x3,
1330 KS_SEEKING_SeekToKeyFrame
,
1331 KS_SEEKING_ReturnTime
= 0x8
1338 KS_SEEKING_FLAGS CurrentFlags
;
1339 KS_SEEKING_FLAGS StopFlags
;
1340 } KSPROPERTY_POSITIONS
, *PKSPROPERTY_POSITIONS
;
1346 } KSPROPERTY_SERIALHDR
, *PKSPROPERTY_SERIALHDR
;
1350 KSIDENTIFIER PropTypeSet
;
1352 ULONG PropertyLength
;
1353 } KSPROPERTY_SERIAL
, *PKSPROPERTY_SERIAL
;
1362 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1369 ULONG UnsignedMinimum
;
1370 ULONG UnsignedMaximum
;
1371 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1377 } KSPROPERTY_BOUNDS_LONG
, *PKSPROPERTY_BOUNDS_LONG
;
1382 LONGLONG SignedMinimum
;
1383 LONGLONG SignedMaximum
;
1384 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1391 #if defined(_NTDDK_)
1392 ULONGLONG UnsignedMinimum
;
1393 ULONGLONG UnsignedMaximum
;
1395 DWORDLONG UnsignedMinimum
;
1396 DWORDLONG UnsignedMaximum
;
1398 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1403 } KSPROPERTY_BOUNDS_LONGLONG
, *PKSPROPERTY_BOUNDS_LONGLONG
;
1408 ULONG DescriptionSize
;
1409 KSIDENTIFIER PropTypeSet
;
1410 ULONG MembersListCount
;
1412 } KSPROPERTY_DESCRIPTION
, *PKSPROPERTY_DESCRIPTION
;
1418 } KSPROPERTY_MEDIAAVAILABLE
, *PKSPROPERTY_MEDIAAVAILABLE
;
1427 } KSPROPERTY_MEMBERSHEADER
, *PKSPROPERTY_MEMBERSHEADER
;
1430 KSPROPERTY_MEMBERSHEADER MembersHeader
;
1431 const VOID
* Members
;
1432 } KSPROPERTY_MEMBERSLIST
, *PKSPROPERTY_MEMBERSLIST
;
1435 KSIDENTIFIER PropTypeSet
;
1436 ULONG MembersListCount
;
1437 const KSPROPERTY_MEMBERSLIST
* MembersList
;
1438 } KSPROPERTY_VALUES
, *PKSPROPERTY_VALUES
;
1440 #if defined(_NTDDK_)
1441 typedef NTSTATUS
NTAPI(*PFNKSHANDLER
)(
1443 IN PKSIDENTIFIER Request
,
1451 PFNKSHANDLER GetPropertyHandler
;
1452 BOOLEAN GetSupported
;
1457 PFNKSHANDLER SetPropertyHandler
;
1458 BOOLEAN SetSupported
;
1460 const KSPROPERTY_VALUES
* Values
;
1461 ULONG RelationsCount
;
1462 const KSPROPERTY
* Relations
;
1463 PFNKSHANDLER SupportHandler
;
1464 ULONG SerializedSize
;
1465 } KSPROPERTY_ITEM
, *PKSPROPERTY_ITEM
;
1471 (*PFNKSFASTHANDLER
)(
1472 IN PFILE_OBJECT FileObject
,
1473 IN PKSIDENTIFIER Request
,
1474 IN ULONG RequestLength
,
1476 IN ULONG DataLength
,
1477 OUT PIO_STATUS_BLOCK IoStatus
1483 PFNKSFASTHANDLER GetPropertyHandler
;
1484 BOOLEAN GetSupported
;
1487 PFNKSFASTHANDLER SetPropertyHandler
;
1488 BOOLEAN SetSupported
;
1491 } KSFASTPROPERTY_ITEM
, *PKSFASTPROPERTY_ITEM
;
1496 ULONG PropertiesCount
;
1497 const KSPROPERTY_ITEM
* PropertyItem
;
1499 const KSFASTPROPERTY_ITEM
* FastIoTable
;
1500 } KSPROPERTY_SET
, *PKSPROPERTY_SET
;
1506 ULONG SteppingDelta
;
1508 KSPROPERTY_BOUNDS_LONG Bounds
;
1509 } KSPROPERTY_STEPPING_LONG
, *PKSPROPERTY_STEPPING_LONG
;
1513 #if defined(_NTDDK_)
1514 ULONGLONG SteppingDelta
;
1516 DWORDLONG SteppingDelta
;
1518 KSPROPERTY_BOUNDS_LONGLONG Bounds
;
1519 } KSPROPERTY_STEPPING_LONGLONG
, *PKSPROPERTY_STEPPING_LONGLONG
;
1521 /* ===============================================================
1529 ULONG RequirementsFlags
;
1531 #if defined(_NTDDK_)
1538 ULONG FileAlignment
;
1540 } KSALLOCATOR_FRAMING
, *PKSALLOCATOR_FRAMING
;
1546 KS_COMPRESSION OutputCompression
;
1548 KS_FRAMING_ITEM FramingItem
[1];
1549 } KSALLOCATOR_FRAMING_EX
, *PKSALLOCATOR_FRAMING_EX
;
1551 #define KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER 0x00000001
1552 #define KSALLOCATOR_REQUIREMENTF_SYSTEM_MEMORY 0x00000002
1553 #define KSALLOCATOR_REQUIREMENTF_FRAME_INTEGRITY 0x00000004
1554 #define KSALLOCATOR_REQUIREMENTF_MUST_ALLOCATE 0x00000008
1555 #define KSALLOCATOR_REQUIREMENTF_PREFERENCES_ONLY 0x80000000
1557 #define KSALLOCATOR_OPTIONF_COMPATIBLE 0x00000001
1558 #define KSALLOCATOR_OPTIONF_SYSTEM_MEMORY 0x00000002
1559 #define KSALLOCATOR_OPTIONF_VALID 0x00000003
1561 #define KSALLOCATOR_FLAG_PARTIAL_READ_SUPPORT 0x00000010
1562 #define KSALLOCATOR_FLAG_DEVICE_SPECIFIC 0x00000020
1563 #define KSALLOCATOR_FLAG_CAN_ALLOCATE 0x00000040
1564 #define KSALLOCATOR_FLAG_INSIST_ON_FRAMESIZE_RATIO 0x00000080
1566 /* ===============================================================
1575 } KSQUALITY
, *PKSQUALITY
;
1579 HANDLE QualityManager
;
1581 } KSQUALITY_MANAGER
, *PKSQUALITY_MANAGER
;
1585 LONGLONG PresentationStart
;
1587 KSPIN_INTERFACE Interface
;
1594 KSPROPERTY Property
;
1596 } KSRATE_CAPABILITY
, *PKSRATE_CAPABILITY
;
1600 LONGLONG Granularity
;
1602 } KSRESOLUTION
, *PKSRESOLUTION
;
1606 ULONG NotificationType
;
1610 ULONG_PTR Reserved
[2];
1617 #if defined(_NTDDK_)
1620 KPRIORITY Increment
;
1625 KPRIORITY Increment
;
1630 ULONG ReferenceCount
;
1634 PWORK_QUEUE_ITEM WorkQueueItem
;
1635 WORK_QUEUE_TYPE WorkQueueType
;
1639 PWORK_QUEUE_ITEM WorkQueueItem
;
1640 PKSWORKER KsWorkerObject
;
1646 LONG_PTR Alignment
[2];
1649 } KSEVENTDATA
, *PKSEVENTDATA
;
1656 HANDLE ObjectHandle
;
1657 PVOID ObjectPointer
;
1661 KSEVENTDATA EventData
;
1662 } KSRELATIVEEVENT
, *PKSRELATIVEEVENT
;
1665 /* ===============================================================
1679 LONGLONG SystemTime
;
1680 } KSCORRELATED_TIME
, *PKSCORRELATED_TIME
;
1684 KSPROPERTY Property
;
1688 } KSP_TIMEFORMAT
, *PKSP_TIMEFORMAT
;
1694 } KSINTERVAL
, *PKSINTERVAL
;
1701 } KSFRAMETIME
, *PKSFRAMETIME
;
1704 /* ===============================================================
1708 typedef PVOID PKSDEFAULTCLOCK
;
1713 } KSCLOCK_CREATE
, *PKSCLOCK_CREATE
;
1715 #if defined(_NTDDK_)
1719 (FASTCALL
*PFNKSCLOCK_GETTIME
)(
1720 IN PFILE_OBJECT FileObject
1724 (FASTCALL
*PFNKSCLOCK_CORRELATEDTIME
)(
1725 IN PFILE_OBJECT FileObject
,
1726 OUT PLONGLONG SystemTime
);
1730 PFNKSCLOCK_GETTIME GetTime
;
1731 PFNKSCLOCK_GETTIME GetPhysicalTime
;
1732 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedTime
;
1733 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedPhysicalTime
;
1734 } KSCLOCK_FUNCTIONTABLE
, *PKSCLOCK_FUNCTIONTABLE
;
1737 /* ===============================================================
1738 Objects ??? SORT ME!
1741 #define KSCREATE_ITEM_SECURITYCHANGED 0x1
1742 #define KSCREATE_ITEM_WILDCARD 0x2
1743 #define KSCREATE_ITEM_NOPARAMETERS 0x4
1744 #define KSCREATE_ITEM_FREEONSTOP 0x8
1748 PDRIVER_DISPATCH Create
;
1750 UNICODE_STRING ObjectClass
;
1751 PSECURITY_DESCRIPTOR SecurityDescriptor
;
1753 } KSOBJECT_CREATE_ITEM
, *PKSOBJECT_CREATE_ITEM
;
1757 ULONG CreateItemsCount
;
1758 PKSOBJECT_CREATE_ITEM CreateItemsList
;
1759 } KSOBJECT_CREATE
, *PKSOBJECT_CREATE
;
1761 typedef VOID (NTAPI
*PFNKSITEMFREECALLBACK
)(
1762 IN PKSOBJECT_CREATE_ITEM CreateItem
);
1770 } KSMULTIPLE_ITEM
, *PKSMULTIPLE_ITEM
;
1775 PKSEVENTDATA EventData
;
1777 } KSQUERYBUFFER
, *PKSQUERYBUFFER
;
1783 } KSERROR
, *PKSERROR
;
1785 /* ===============================================================
1788 #if defined(_NTDDK_)
1794 PFNKSHANDLER MethodHandler
;
1795 BOOLEAN MethodSupported
;
1799 PFNKSHANDLER SupportHandler
;
1801 } KSMETHOD_ITEM
, *PKSMETHOD_ITEM
;
1808 PFNKSFASTHANDLER MethodHandler
;
1809 BOOLEAN MethodSupported
;
1811 } KSFASTMETHOD_ITEM
, *PKSFASTMETHOD_ITEM
;
1817 const KSMETHOD_ITEM
* MethodItem
;
1819 const KSFASTMETHOD_ITEM
*FastIoTable
;
1820 } KSMETHOD_SET
, *PKSMETHOD_SET
;
1823 /* ===============================================================
1829 KSPROPERTY Property
;
1832 } KSP_NODE
, *PKSP_NODE
;
1839 } KSM_NODE
, *PKSM_NODE
;
1846 } KSE_NODE
, *PKSE_NODE
;
1851 } KSNODE_CREATE
, *PKSNODE_CREATE
;
1854 /* ===============================================================
1857 typedef struct _KSEVENT_ENTRY KSEVENT_ENTRY
, *PKSEVENT_ENTRY
;
1859 #if defined(_NTDDK_)
1862 KSEVENTDATA EventData
;
1864 } KSEVENT_TIME_MARK
, *PKSEVENT_TIME_MARK
;
1868 KSEVENTDATA EventData
;
1871 } KSEVENT_TIME_INTERVAL
, *PKSEVENT_TIME_INTERVAL
;
1873 typedef NTSTATUS
NTAPI (*PFNKSADDEVENT
)(
1875 IN PKSEVENTDATA EventData
,
1876 IN
struct _KSEVENT_ENTRY
* EventEntry
);
1881 (*PFNKSREMOVEEVENT
)(
1882 IN PFILE_OBJECT FileObject
,
1883 IN
struct _KSEVENT_ENTRY
* EventEntry
1890 ULONG ExtraEntryData
;
1891 PFNKSADDEVENT AddHandler
;
1892 PFNKSREMOVEEVENT RemoveHandler
;
1893 PFNKSHANDLER SupportHandler
;
1894 } KSEVENT_ITEM
, *PKSEVENT_ITEM
;
1900 const KSEVENT_ITEM
* EventItem
;
1901 } KSEVENT_SET
, *PKSEVENT_SET
;
1903 struct _KSEVENT_ENTRY
1905 LIST_ENTRY ListEntry
;
1908 PKSDPC_ITEM DpcItem
;
1909 PKSBUFFER_ITEM BufferItem
;
1911 PKSEVENTDATA EventData
;
1912 ULONG NotificationType
;
1913 const KSEVENT_SET
* EventSet
;
1914 const KSEVENT_ITEM
* EventItem
;
1915 PFILE_OBJECT FileObject
;
1916 ULONG SemaphoreAdjustment
;
1922 /* ===============================================================
1926 #if defined(_NTDDK_)
1928 typedef struct _KSPIN KSPIN
, *PKSPIN
;
1929 typedef struct _KSSTREAM_POINTER KSSTREAM_POINTER
, *PKSSTREAM_POINTER
;
1930 typedef struct _KSSTREAM_POINTER_OFFSET KSSTREAM_POINTER_OFFSET
, *PKSSTREAM_POINTER_OFFSET
;
1931 typedef struct _KSMAPPING KSMAPPING
, *PKSMAPPING
;
1932 typedef struct _KSPROCESSPIN KSPROCESSPIN
, *PKSPROCESSPIN
;
1934 #define IOCTL_KS_HANDSHAKE CTL_CODE(FILE_DEVICE_KS, 0x007, METHOD_NEITHER, FILE_ANY_ACCESS)
1940 } KSHANDSHAKE
, *PKSHANDSHAKE
;
1945 (*PFNKSPINHANDSHAKE
)(
1956 IN DEVICE_POWER_STATE State
1962 (*PFNKSPINFRAMERETURN
)(
1964 IN PVOID Data OPTIONAL
,
1965 IN ULONG Size OPTIONAL
,
1966 IN PMDL Mdl OPTIONAL
,
1967 IN PVOID Context OPTIONAL
,
1974 (*PFNKSPINIRPCOMPLETION
)(
2004 (*PFNKSSTREAMPOINTER
)(
2005 IN PKSSTREAM_POINTER StreamPointer
2010 PKSATTRIBUTE
* Attributes
;
2011 } KSATTRIBUTE_LIST
, *PKSATTRIBUTE_LIST
;
2016 (*PFNKSPINSETDATAFORMAT
)(
2018 IN PKSDATAFORMAT OldFormat OPTIONAL
,
2019 IN PKSMULTIPLE_ITEM OldAttributeList OPTIONAL
,
2020 IN
const KSDATARANGE
* DataRange
,
2021 IN
const KSATTRIBUTE_LIST
* AttributeRange OPTIONAL
2027 (*PFNKSPINSETDEVICESTATE
)(
2030 IN KSSTATE FromState
2033 typedef struct _KSCLOCK_DISPATCH KSCLOCK_DISPATCH
, *PKSCLOCK_DISPATCH
;
2034 typedef struct _KSALLOCATOR_DISPATCH KSALLOCATOR_DISPATCH
, *PKSALLOCATOR_DISPATCH
;
2042 PFNKSPINSETDATAFORMAT SetDataFormat
;
2043 PFNKSPINSETDEVICESTATE SetDeviceState
;
2045 PFNKSPINVOID Disconnect
;
2046 const KSCLOCK_DISPATCH
* Clock
;
2047 const KSALLOCATOR_DISPATCH
* Allocator
;
2048 } KSPIN_DISPATCH
, *PKSPIN_DISPATCH
;
2052 NTAPI (*PFNKSPINSETTIMER
)(
2055 IN LARGE_INTEGER DueTime
,
2061 NTAPI (*PFNKSPINCANCELTIMER
)(
2068 (FASTCALL
*PFNKSPINCORRELATEDTIME
)(
2070 OUT PLONGLONG SystemTime
2075 NTAPI (*PFNKSPINRESOLUTION
)(
2077 OUT PKSRESOLUTION Resolution
2080 struct _KSCLOCK_DISPATCH
{
2081 PFNKSPINSETTIMER SetTimer
;
2082 PFNKSPINCANCELTIMER CancelTimer
;
2083 PFNKSPINCORRELATEDTIME CorrelatedTime
;
2084 PFNKSPINRESOLUTION Resolution
;
2089 NTAPI (*PFNKSPININITIALIZEALLOCATOR
)(
2091 IN PKSALLOCATOR_FRAMING AllocatorFraming
,
2095 typedef PVOID
NTAPI (*PFNKSDELETEALLOCATOR
)(
2098 typedef PVOID
NTAPI (*PFNKSDEFAULTALLOCATE
)(
2101 typedef PVOID
NTAPI (*PFNKSDEFAULTFREE
)(
2105 struct _KSALLOCATOR_DISPATCH
{
2106 PFNKSPININITIALIZEALLOCATOR InitializeAllocator
;
2107 PFNKSDELETEALLOCATOR DeleteAllocator
;
2108 PFNKSDEFAULTALLOCATE Allocate
;
2109 PFNKSDEFAULTFREE Free
;
2114 ULONG PropertySetsCount
;
2115 ULONG PropertyItemSize
;
2116 const KSPROPERTY_SET
* PropertySets
;
2117 ULONG MethodSetsCount
;
2118 ULONG MethodItemSize
;
2119 const KSMETHOD_SET
* MethodSets
;
2120 ULONG EventSetsCount
;
2121 ULONG EventItemSize
;
2122 const KSEVENT_SET
* EventSets
;
2123 #if !defined(_WIN64)
2126 } KSAUTOMATION_TABLE
, *PKSAUTOMATION_TABLE
;
2132 ULONG InterfacesCount
;
2133 const KSPIN_INTERFACE
* Interfaces
;
2135 const KSPIN_MEDIUM
* Mediums
;
2136 ULONG DataRangesCount
;
2137 const PKSDATARANGE
* DataRanges
;
2138 KSPIN_DATAFLOW DataFlow
;
2139 KSPIN_COMMUNICATION Communication
;
2140 const GUID
* Category
;
2145 ULONG ConstrainedDataRangesCount
;
2146 PKSDATARANGE
* ConstrainedDataRanges
;
2149 } KSPIN_DESCRIPTOR
, *PKSPIN_DESCRIPTOR
;
2153 NTAPI (*PFNKSINTERSECTHANDLER
)(
2156 IN PKSDATARANGE DataRange
,
2157 OUT PVOID Data OPTIONAL
2162 NTAPI (*PFNKSINTERSECTHANDLEREX
)(
2166 IN PKSDATARANGE DataRange
,
2167 IN PKSDATARANGE MatchingDataRange
,
2168 IN ULONG DataBufferSize
,
2169 OUT PVOID Data OPTIONAL
,
2175 const KSPIN_DISPATCH
* Dispatch
;
2176 const KSAUTOMATION_TABLE
* AutomationTable
;
2177 KSPIN_DESCRIPTOR PinDescriptor
;
2179 ULONG InstancesPossible
;
2180 ULONG InstancesNecessary
;
2181 const KSALLOCATOR_FRAMING_EX
* AllocatorFraming
;
2182 PFNKSINTERSECTHANDLEREX IntersectHandler
;
2183 } KSPIN_DESCRIPTOR_EX
, *PKSPIN_DESCRIPTOR_EX
;
2186 #define KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING
2187 #define KSPIN_FLAG_CRITICAL_PROCESSING
2188 #define KSPIN_FLAG_HYPERCRITICAL_PROCESSING
2189 #define KSPIN_FLAG_ASYNCHRONOUS_PROCESSING
2190 #define KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING
2191 #define KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL
2192 #define KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING
2193 #define KSPIN_FLAG_ENFORCE_FIFO
2194 #define KSPIN_FLAG_GENERATE_MAPPINGS
2195 #define KSPIN_FLAG_DISTINCT_TRAILING_EDGE
2196 #define KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY
2197 #define KSPIN_FLAG_SPLITTER
2198 #define KSPIN_FLAG_USE_STANDARD_TRANSPORT
2199 #define KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT
2200 #define KSPIN_FLAG_FIXED_FORMAT
2201 #define KSPIN_FLAG_GENERATE_EOS_EVENTS
2202 #define KSPIN_FLAG_RENDERER
2203 #define KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING
2204 #define KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE
2205 #define KSPIN_FLAG_DENY_USERMODE_ACCESS
2206 #define KSPIN_FLAG_IMPLEMENT_CLOCK
2210 const KSPIN_DESCRIPTOR_EX
* Descriptor
;
2214 KSPIN_COMMUNICATION Communication
;
2215 BOOLEAN ConnectionIsExternal
;
2216 KSPIN_INTERFACE ConnectionInterface
;
2217 KSPIN_MEDIUM ConnectionMedium
;
2218 KSPRIORITY ConnectionPriority
;
2219 PKSDATAFORMAT ConnectionFormat
;
2220 PKSMULTIPLE_ITEM AttributeList
;
2221 ULONG StreamHeaderSize
;
2222 KSPIN_DATAFLOW DataFlow
;
2223 KSSTATE DeviceState
;
2225 KSSTATE ClientState
;
2228 #define DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(Handler)\
2229 DEFINE_KSPROPERTY_ITEM(\
2230 KSPROPERTY_PIN_CINSTANCES,\
2233 sizeof(KSPIN_CINSTANCES),\
2234 NULL, NULL, 0, NULL, NULL, 0)
2236 #define DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(Handler)\
2237 DEFINE_KSPROPERTY_ITEM(\
2238 KSPROPERTY_PIN_CTYPES,\
2240 sizeof(KSPROPERTY),\
2242 NULL, NULL, 0, NULL, NULL, 0)
2244 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(Handler)\
2245 DEFINE_KSPROPERTY_ITEM(\
2246 KSPROPERTY_PIN_DATAFLOW,\
2249 sizeof(KSPIN_DATAFLOW),\
2250 NULL, NULL, 0, NULL, NULL, 0)
2252 #define DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(Handler)\
2253 DEFINE_KSPROPERTY_ITEM(\
2254 KSPROPERTY_PIN_DATARANGES,\
2258 NULL, NULL, 0, NULL, NULL, 0)
2260 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(Handler)\
2261 DEFINE_KSPROPERTY_ITEM(\
2262 KSPROPERTY_PIN_DATAINTERSECTION,\
2264 sizeof(KSP_PIN) + sizeof(KSMULTIPLE_ITEM),\
2266 NULL, NULL, 0, NULL, NULL, 0)
2268 #define DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(Handler)\
2269 DEFINE_KSPROPERTY_ITEM(\
2270 KSPROPERTY_PIN_INTERFACES,\
2274 NULL, NULL, 0, NULL, NULL, 0)
2276 #define DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(Handler)\
2277 DEFINE_KSPROPERTY_ITEM(\
2278 KSPROPERTY_PIN_MEDIUMS,\
2282 NULL, NULL, 0, NULL, NULL, 0)
2284 #define DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(Handler)\
2285 DEFINE_KSPROPERTY_ITEM(\
2286 KSPROPERTY_PIN_COMMUNICATION,\
2289 sizeof(KSPIN_COMMUNICATION),\
2290 NULL, NULL, 0, NULL, NULL, 0)
2292 #define DEFINE_KSPROPERTY_ITEM_PIN_GLOBALCINSTANCES(Handler)\
2293 DEFINE_KSPROPERTY_ITEM(\
2294 KSPROPERTY_PIN_GLOBALCINSTANCES,\
2297 sizeof(KSPIN_CINSTANCES),\
2298 NULL, NULL, 0, NULL, NULL, 0)
2300 #define DEFINE_KSPROPERTY_ITEM_PIN_NECESSARYINSTANCES(Handler)\
2301 DEFINE_KSPROPERTY_ITEM(\
2302 KSPROPERTY_PIN_NECESSARYINSTANCES,\
2306 NULL, NULL, 0, NULL, NULL, 0)
2308 #define DEFINE_KSPROPERTY_ITEM_PIN_PHYSICALCONNECTION(Handler)\
2309 DEFINE_KSPROPERTY_ITEM(\
2310 KSPROPERTY_PIN_PHYSICALCONNECTION,\
2314 NULL, NULL, 0, NULL, NULL, 0)
2316 #define DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(Handler)\
2317 DEFINE_KSPROPERTY_ITEM(\
2318 KSPROPERTY_PIN_CATEGORY,\
2322 NULL, NULL, 0, NULL, NULL, 0)
2324 #define DEFINE_KSPROPERTY_ITEM_PIN_NAME(Handler)\
2325 DEFINE_KSPROPERTY_ITEM(\
2326 KSPROPERTY_PIN_NAME,\
2330 NULL, NULL, 0, NULL, NULL, 0)
2332 #define DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(Handler)\
2333 DEFINE_KSPROPERTY_ITEM(\
2334 KSPROPERTY_PIN_CONSTRAINEDDATARANGES,\
2338 NULL, NULL, 0, NULL, NULL, 0)
2340 #define DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(Handler)\
2341 DEFINE_KSPROPERTY_ITEM(\
2342 KSPROPERTY_PIN_PROPOSEDATAFORMAT,\
2345 sizeof(KSDATAFORMAT),\
2346 (Handler), NULL, 0, NULL, NULL, 0)
2348 #define DEFINE_KSPROPERTY_PINSET(PinSet,\
2349 PropGeneral, PropInstances, PropIntersection)\
2350 DEFINE_KSPROPERTY_TABLE(PinSet) {\
2351 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
2352 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
2353 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
2354 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
2355 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
2356 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
2357 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
2358 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
2359 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
2360 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral)\
2363 #define DEFINE_KSPROPERTY_PINSETCONSTRAINED(PinSet,\
2364 PropGeneral, PropInstances, PropIntersection)\
2365 DEFINE_KSPROPERTY_TABLE(PinSet) {\
2366 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
2367 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
2368 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
2369 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
2370 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
2371 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
2372 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
2373 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
2374 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
2375 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral),\
2376 DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral)\
2389 #define DEFINE_KSPROPERTY_TABLE(tablename)\
2390 const KSPROPERTY_ITEM tablename[] =
2396 KSPIN_INTERFACE Interface
;
2397 KSPIN_MEDIUM Medium
;
2400 KSPRIORITY Priority
;
2401 } KSPIN_CONNECT
, *PKSPIN_CONNECT
;
2403 /* ===============================================================
2413 } KSTOPOLOGY_CONNECTION
, *PKSTOPOLOGY_CONNECTION
;
2417 ULONG CategoriesCount
;
2418 const GUID
* Categories
;
2419 ULONG TopologyNodesCount
;
2420 const GUID
* TopologyNodes
;
2421 ULONG TopologyConnectionsCount
;
2422 const KSTOPOLOGY_CONNECTION
* TopologyConnections
;
2423 const GUID
* TopologyNodesNames
;
2425 } KSTOPOLOGY
, *PKSTOPOLOGY
;
2428 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler)\
2429 DEFINE_KSPROPERTY_ITEM(\
2430 KSPROPERTY_TOPOLOGY_CATEGORIES,\
2432 sizeof(KSPROPERTY),\
2434 NULL, NULL, 0, NULL, NULL, 0)
2436 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler)\
2437 DEFINE_KSPROPERTY_ITEM(\
2438 KSPROPERTY_TOPOLOGY_NODES,\
2440 sizeof(KSPROPERTY),\
2442 NULL, NULL, 0, NULL, NULL, 0)
2444 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler)\
2445 DEFINE_KSPROPERTY_ITEM(\
2446 KSPROPERTY_TOPOLOGY_CONNECTIONS,\
2448 sizeof(KSPROPERTY),\
2450 NULL, NULL, 0, NULL, NULL, 0)
2452 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\
2453 DEFINE_KSPROPERTY_ITEM(\
2454 KSPROPERTY_TOPOLOGY_NAME,\
2458 NULL, NULL, 0, NULL, NULL, 0)
2460 #define DEFINE_KSPROPERTY_TOPOLOGYSET(TopologySet, Handler)\
2461 DEFINE_KSPROPERTY_TABLE(TopologySet) {\
2462 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler),\
2463 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler),\
2464 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler),\
2465 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\
2468 /* ===============================================================
2473 typedef void* UNKNOWN
;
2475 typedef PVOID
NTAPI(*PFNKSINITIALIZEALLOCATOR
)(
2476 IN PVOID InitialContext
,
2477 IN PKSALLOCATOR_FRAMING AllocatorFraming
,
2478 OUT PVOID
* Context
);
2480 #if defined(_NTDDK_)
2481 typedef NTSTATUS
NTAPI (*PFNKSALLOCATOR
)(
2483 IN ULONG BufferSize
,
2484 IN BOOLEAN InputOperation
);
2486 typedef NTSTATUS
NTAPI (*PFNKINTERSECTHANDLEREX
)(
2490 IN PKSDATARANGE DataRange
,
2491 IN PKSDATARANGE MatchingDataRange
,
2492 IN ULONG DataBufferSize
,
2493 OUT PVOID Data OPTIONAL
,
2494 OUT PULONG DataSize
);
2500 NTAPI (*PFNALLOCATOR_ALLOCATEFRAME
)(
2501 IN PFILE_OBJECT FileObject
,
2508 NTAPI (*PFNALLOCATOR_FREEFRAME
)(
2509 IN PFILE_OBJECT FileObject
,
2514 PFNALLOCATOR_ALLOCATEFRAME AllocateFrame
;
2515 PFNALLOCATOR_FREEFRAME FreeFrame
;
2516 } KSSTREAMALLOCATOR_FUNCTIONTABLE
, *PKSSTREAMALLOCATOR_FUNCTIONTABLE
;
2522 KSALLOCATOR_FRAMING Framing
;
2523 ULONG AllocatedFrames
;
2525 } KSSTREAMALLOCATOR_STATUS
, *PKSSTREAMALLOCATOR_STATUS
;
2529 KSALLOCATOR_FRAMING_EX Framing
;
2530 ULONG AllocatedFrames
;
2532 } KSSTREAMALLOCATOR_STATUS_EX
, *PKSSTREAMALLOCATOR_STATUS_EX
;
2537 ULONG TypeSpecificFlags
;
2538 KSTIME PresentationTime
;
2544 } KSSTREAM_HEADER
, *PKSSTREAM_HEADER
;
2548 /* ===============================================================
2551 #if defined(_NTDDK_)
2553 PHYSICAL_ADDRESS PhysicalAddress
;
2560 KSSTREAM_POINTER_STATE_UNLOCKED
= 0,
2561 KSSTREAM_POINTER_STATE_LOCKED
2562 } KSSTREAM_POINTER_STATE
;
2564 typedef struct _KSGATE KSGATE
, *PKSGATE
;
2565 typedef struct _KSPROCESSPIN_INDEXENTRY KSPROCESSPIN_INDEXENTRY
, *PKSPROCESSPIN_INDEXENTRY
;
2572 struct _KSSTREAM_POINTER_OFFSET
2574 #if defined(_NTDDK_)
2577 PKSMAPPING Mappings
;
2582 #if !defined(_WIN64)
2588 #if defined(_NTDDK_)
2589 struct _KSSTREAM_POINTER
2593 PKSSTREAM_HEADER StreamHeader
;
2594 PKSSTREAM_POINTER_OFFSET Offset
;
2595 KSSTREAM_POINTER_OFFSET OffsetIn
;
2596 KSSTREAM_POINTER_OFFSET OffsetOut
;
2599 struct _KSPROCESSPIN
2602 PKSSTREAM_POINTER StreamPointer
;
2603 PKSPROCESSPIN InPlaceCounterpart
;
2604 PKSPROCESSPIN DelegateBranch
;
2605 PKSPROCESSPIN CopySource
;
2607 ULONG BytesAvailable
;
2613 struct _KSPROCESSPIN_INDEXENTRY
2615 PKSPROCESSPIN
* Pins
;
2620 /* ===============================================================
2626 #if defined(_NTDDK_)
2628 typedef struct _KSFILTER_DISPATCH KSFILTER_DISPATCH
, *PKSFILTER_DISPATCH
;
2629 typedef struct _KSDEVICE KSDEVICE
, *PKSDEVICE
;
2630 typedef struct _KSFILTER KSFILTER
, *PKSFILTER
;
2631 typedef struct _KSNODE_DESCRIPTOR KSNODE_DESCRIPTOR
, *PKSNODE_DESCRIPTOR
;
2632 typedef struct _KSFILTER_DESCRIPTOR KSFILTER_DESCRIPTOR
, *PKSFILTER_DESCRIPTOR
;
2633 typedef struct _KSDEVICE_DESCRIPTOR KSDEVICE_DESCRIPTOR
, *PKSDEVICE_DESCRIPTOR
;
2635 typedef NTSTATUS
NTAPI (*PFNKSDEVICECREATE
)(
2636 IN PKSDEVICE Device
);
2638 typedef NTSTATUS
NTAPI (*PFNKSDEVICEPNPSTART
)(
2639 IN PKSDEVICE Device
,
2641 IN PCM_RESOURCE_LIST TranslatedResourceList OPTIONAL
,
2642 IN PCM_RESOURCE_LIST UntranslatedResourceList OPTIONAL
);
2644 typedef NTSTATUS
NTAPI (*PFNKSDEVICE
)(
2645 IN PKSDEVICE Device
);
2647 typedef NTSTATUS
NTAPI (*PFNKSDEVICEIRP
)(
2648 IN PKSDEVICE Device
,
2651 typedef VOID
NTAPI (*PFNKSDEVICEIRPVOID
)(
2652 IN PKSDEVICE Device
,
2655 typedef NTSTATUS
NTAPI (*PFNKSDEVICEQUERYCAPABILITIES
)(
2656 IN PKSDEVICE Device
,
2658 IN OUT PDEVICE_CAPABILITIES Capabilities
);
2660 typedef NTSTATUS
NTAPI (*PFNKSDEVICEQUERYPOWER
)(
2661 IN PKSDEVICE Device
,
2663 IN DEVICE_POWER_STATE DeviceTo
,
2664 IN DEVICE_POWER_STATE DeviceFrom
,
2665 IN SYSTEM_POWER_STATE SystemTo
,
2666 IN SYSTEM_POWER_STATE SystemFrom
,
2667 IN POWER_ACTION Action
);
2669 typedef VOID
NTAPI (*PFNKSDEVICESETPOWER
)(
2670 IN PKSDEVICE Device
,
2672 IN DEVICE_POWER_STATE To
,
2673 IN DEVICE_POWER_STATE From
);
2675 typedef struct _KSDEVICE_DISPATCH
{
2676 PFNKSDEVICECREATE Add
;
2677 PFNKSDEVICEPNPSTART Start
;
2678 PFNKSDEVICE PostStart
;
2679 PFNKSDEVICEIRP QueryStop
;
2680 PFNKSDEVICEIRPVOID CancelStop
;
2681 PFNKSDEVICEIRPVOID Stop
;
2682 PFNKSDEVICEIRP QueryRemove
;
2683 PFNKSDEVICEIRPVOID CancelRemove
;
2684 PFNKSDEVICEIRPVOID Remove
;
2685 PFNKSDEVICEQUERYCAPABILITIES QueryCapabilities
;
2686 PFNKSDEVICEIRPVOID SurpriseRemoval
;
2687 PFNKSDEVICEQUERYPOWER QueryPower
;
2688 PFNKSDEVICESETPOWER SetPower
;
2689 PFNKSDEVICEIRP QueryInterface
;
2690 }KSDEVICE_DISPATCH
, *PKSDEVICE_DISPATCH
;
2692 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
2693 #define KSDEVICE_DESCRIPTOR_VERSION_2 (0x110)
2694 #define MIN_DEV_VER_FOR_FLAGS (0x110)
2699 const KSDEVICE_DESCRIPTOR
* Descriptor
;
2702 PDEVICE_OBJECT FunctionalDeviceObject
;
2703 PDEVICE_OBJECT PhysicalDeviceObject
;
2704 PDEVICE_OBJECT NextDeviceObject
;
2706 SYSTEM_POWER_STATE SystemPowerState
;
2707 DEVICE_POWER_STATE DevicePowerState
;
2711 /* ===============================================================
2714 #if defined(_NTDDK_)
2717 const KSFILTER_DESCRIPTOR
* Descriptor
;
2724 NTAPI (*PFNKSFILTERPOWER
)(
2725 IN PKSFILTER Filter
,
2726 IN DEVICE_POWER_STATE State
2729 typedef NTSTATUS
NTAPI (*PFNKSFILTERIRP
)(
2730 IN PKSFILTER Filter
,
2733 typedef NTSTATUS
NTAPI (*PFNKSFILTERPROCESS
)(
2734 IN PKSFILTER Filter
,
2735 IN PKSPROCESSPIN_INDEXENTRY ProcessPinsIndex
);
2737 typedef NTSTATUS
NTAPI (*PFNKSFILTERVOID
)(
2738 IN PKSFILTER Filter
);
2740 struct _KSFILTER_DISPATCH
2742 PFNKSFILTERIRP Create
;
2743 PFNKSFILTERIRP Close
;
2744 PFNKSFILTERPROCESS Process
;
2745 PFNKSFILTERVOID Reset
;
2748 struct _KSNODE_DESCRIPTOR
2750 const KSAUTOMATION_TABLE
* AutomationTable
;
2755 struct _KSFILTER_DESCRIPTOR
2757 const KSFILTER_DISPATCH
* Dispatch
;
2758 const KSAUTOMATION_TABLE
* AutomationTable
;
2761 const GUID
* ReferenceGuid
;
2762 ULONG PinDescriptorsCount
;
2763 ULONG PinDescriptorSize
;
2764 const KSPIN_DESCRIPTOR_EX
* PinDescriptors
;
2765 ULONG CategoriesCount
;
2766 const GUID
* Categories
;
2767 ULONG NodeDescriptorsCount
;
2768 ULONG NodeDescriptorSize
;
2769 const KSNODE_DESCRIPTOR
* NodeDescriptors
;
2770 ULONG ConnectionsCount
;
2771 const KSTOPOLOGY_CONNECTION
* Connections
;
2772 const KSCOMPONENTID
* ComponentId
;
2775 struct _KSDEVICE_DESCRIPTOR
2777 const KSDEVICE_DISPATCH
* Dispatch
;
2778 ULONG FilterDescriptorsCount
;
2779 const KSFILTER_DESCRIPTOR
*const* FilterDescriptors
;
2784 struct _KSFILTERFACTORY
{
2785 const KSFILTER_DESCRIPTOR
* FilterDescriptor
;
2791 /* ===============================================================
2792 Minidriver Callbacks
2794 #if defined(_NTDDK_)
2795 typedef NTSTATUS
NTAPI (*KStrMethodHandler
)(
2797 IN PKSIDENTIFIER Request
,
2800 typedef NTSTATUS
NTAPI (*KStrSupportHandler
)(
2802 IN PKSIDENTIFIER Request
,
2806 /* ===============================================================
2809 #if defined(_NTDDK_)
2810 KSDDKAPI NTSTATUS NTAPI
2812 IN HANDLE ConnectionHandle
,
2813 IN PKSALLOCATOR_FRAMING AllocatorFraming
,
2814 OUT PHANDLE AllocatorHandle
);
2816 KSDDKAPI NTSTATUS NTAPI
2817 KsCreateDefaultAllocator(
2820 KSDDKAPI NTSTATUS NTAPI
2821 KsValidateAllocatorCreateRequest(
2823 OUT PKSALLOCATOR_FRAMING
* AllocatorFraming
);
2825 KSDDKAPI NTSTATUS NTAPI
2826 KsCreateDefaultAllocatorEx(
2828 IN PVOID InitializeContext OPTIONAL
,
2829 IN PFNKSDEFAULTALLOCATE DefaultAllocate OPTIONAL
,
2830 IN PFNKSDEFAULTFREE DefaultFree OPTIONAL
,
2831 IN PFNKSINITIALIZEALLOCATOR InitializeAllocator OPTIONAL
,
2832 IN PFNKSDELETEALLOCATOR DeleteAllocator OPTIONAL
);
2834 KSDDKAPI NTSTATUS NTAPI
2835 KsValidateAllocatorFramingEx(
2836 IN PKSALLOCATOR_FRAMING_EX Framing
,
2837 IN ULONG BufferSize
,
2838 IN
const KSALLOCATOR_FRAMING_EX
* PinFraming
);
2841 /* ===============================================================
2844 #if defined(_NTDDK_)
2845 typedef BOOLEAN
NTAPI (*PFNKSSETTIMER
)(
2848 IN LARGE_INTEGER DueTime
,
2851 typedef BOOLEAN
NTAPI (*PFNKSCANCELTIMER
)(
2855 typedef LONGLONG (FASTCALL
*PFNKSCORRELATEDTIME
)(
2857 OUT PLONGLONG SystemTime
);
2859 KSDDKAPI NTSTATUS NTAPI
2861 IN HANDLE ConnectionHandle
,
2862 IN PKSCLOCK_CREATE ClockCreate
,
2863 OUT PHANDLE ClockHandle
);
2865 KSDDKAPI NTSTATUS NTAPI
2866 KsCreateDefaultClock(
2868 IN PKSDEFAULTCLOCK DefaultClock
);
2870 KSDDKAPI NTSTATUS NTAPI
2871 KsAllocateDefaultClock(
2872 OUT PKSDEFAULTCLOCK
* DefaultClock
);
2874 KSDDKAPI NTSTATUS NTAPI
2875 KsAllocateDefaultClockEx(
2876 OUT PKSDEFAULTCLOCK
* DefaultClock
,
2877 IN PVOID Context OPTIONAL
,
2878 IN PFNKSSETTIMER SetTimer OPTIONAL
,
2879 IN PFNKSCANCELTIMER CancelTimer OPTIONAL
,
2880 IN PFNKSCORRELATEDTIME CorrelatedTime OPTIONAL
,
2881 IN
const KSRESOLUTION
* Resolution OPTIONAL
,
2886 IN PKSDEFAULTCLOCK DefaultClock
);
2888 KSDDKAPI NTSTATUS NTAPI
2889 KsValidateClockCreateRequest(
2891 OUT PKSCLOCK_CREATE
* ClockCreate
);
2893 KSDDKAPI KSSTATE NTAPI
2894 KsGetDefaultClockState(
2895 IN PKSDEFAULTCLOCK DefaultClock
);
2898 KsSetDefaultClockState(
2899 IN PKSDEFAULTCLOCK DefaultClock
,
2902 KSDDKAPI LONGLONG NTAPI
2903 KsGetDefaultClockTime(
2904 IN PKSDEFAULTCLOCK DefaultClock
);
2907 KsSetDefaultClockTime(
2908 IN PKSDEFAULTCLOCK DefaultClock
,
2912 /* ===============================================================
2916 /* Method sets - TODO: Make into macros! */
2917 #if defined(_NTDDK_)
2920 KSMETHOD_SET_IRP_STORAGE(
2924 KSMETHOD_ITEM_IRP_STORAGE(
2928 KSMETHOD_TYPE_IRP_STORAGE(
2932 KSDDKAPI NTSTATUS NTAPI
2935 IN ULONG MethodSetsCount
,
2936 IN PKSMETHOD_SET MethodSet
);
2938 KSDDKAPI NTSTATUS NTAPI
2939 KsMethodHandlerWithAllocator(
2941 IN ULONG MethodSetsCount
,
2942 IN PKSMETHOD_SET MethodSet
,
2943 IN PFNKSALLOCATOR Allocator OPTIONAL
,
2944 IN ULONG MethodItemSize OPTIONAL
);
2946 KSDDKAPI BOOLEAN NTAPI
2947 KsFastMethodHandler(
2948 IN PFILE_OBJECT FileObject
,
2949 IN PKSMETHOD UNALIGNED Method
,
2950 IN ULONG MethodLength
,
2951 IN OUT PVOID UNALIGNED Data
,
2952 IN ULONG DataLength
,
2953 OUT PIO_STATUS_BLOCK IoStatus
,
2954 IN ULONG MethodSetsCount
,
2955 IN
const KSMETHOD_SET
* MethodSet
);
2958 /* ===============================================================
2961 #if defined(_NTDDK_)
2962 KSDDKAPI NTSTATUS NTAPI
2965 IN ULONG PropertySetsCount
,
2966 IN
const KSPROPERTY_SET
* PropertySet
);
2968 KSDDKAPI NTSTATUS NTAPI
2969 KsPropertyHandlerWithAllocator(
2971 IN ULONG PropertySetsCount
,
2972 IN PKSPROPERTY_SET PropertySet
,
2973 IN PFNKSALLOCATOR Allocator OPTIONAL
,
2974 IN ULONG PropertyItemSize OPTIONAL
);
2976 KSDDKAPI NTSTATUS NTAPI
2977 KsUnserializeObjectPropertiesFromRegistry(
2978 IN PFILE_OBJECT FileObject
,
2979 IN HANDLE ParentKey OPTIONAL
,
2980 IN PUNICODE_STRING RegistryPath OPTIONAL
);
2982 KSDDKAPI BOOLEAN NTAPI
2983 KsFastPropertyHandler(
2984 IN PFILE_OBJECT FileObject
,
2985 IN PKSPROPERTY UNALIGNED Property
,
2986 IN ULONG PropertyLength
,
2987 IN OUT PVOID UNALIGNED Data
,
2988 IN ULONG DataLength
,
2989 OUT PIO_STATUS_BLOCK IoStatus
,
2990 IN ULONG PropertySetsCount
,
2991 IN
const KSPROPERTY_SET
* PropertySet
);
2994 /* ===============================================================
2997 #if defined(_NTDDK_)
2999 #define KSPROBE_STREAMREAD 0x00000000
3000 #define KSPROBE_STREAMWRITE 0x00000001
3001 #define KSPROBE_ALLOCATEMDL 0x00000010
3002 #define KSPROBE_PROBEANDLOCK 0x00000020
3003 #define KSPROBE_SYSTEMADDRESS 0x00000040
3004 #define KSPROBE_MODIFY 0x00000200
3005 #define KSPROBE_STREAMWRITEMODIFY (KSPROBE_MODIFY | KSPROBE_STREAMWRITE)
3006 #define KSPROBE_ALLOWFORMATCHANGE 0x00000080
3008 #define KSSTREAM_READ KSPROBE_STREAMREAD
3009 #define KSSTREAM_WRITE KSPROBE_STREAMWRITE
3010 #define KSSTREAM_PAGED_DATA 0x00000000
3011 #define KSSTREAM_NONPAGED_DATA 0x00000100
3012 #define KSSTREAM_SYNCHRONOUS 0x00001000
3013 #define KSSTREAM_FAILUREEXCEPTION 0x00002000
3017 NTAPI (*PFNKSGENERATEEVENTCALLBACK
)(
3019 IN PKSEVENT_ENTRY EventEntry
3022 KSDDKAPI NTSTATUS NTAPI
3024 IN PKSEVENT_ENTRY EntryEvent
);
3029 IN
const GUID
* EventSet OPTIONAL
,
3032 IN PVOID Data OPTIONAL
,
3033 IN PFNKSGENERATEEVENTCALLBACK CallBack OPTIONAL
,
3034 IN PVOID CallBackContext OPTIONAL
3038 KSDDKAPI NTSTATUS NTAPI
3039 KsEnableEventWithAllocator(
3041 IN ULONG EventSetsCount
,
3042 IN PKSEVENT_SET EventSet
,
3043 IN OUT PLIST_ENTRY EventsList OPTIONAL
,
3044 IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL
,
3045 IN PVOID EventsLock OPTIONAL
,
3046 IN PFNKSALLOCATOR Allocator OPTIONAL
,
3047 IN ULONG EventItemSize OPTIONAL
);
3049 KSDDKAPI NTSTATUS NTAPI
3050 KsGenerateDataEvent(
3051 IN PKSEVENT_ENTRY EventEntry
,
3055 KSDDKAPI NTSTATUS NTAPI
3058 IN ULONG EventSetsCount
,
3059 IN KSEVENT_SET
* EventSet
,
3060 IN OUT PLIST_ENTRY EventsList OPTIONAL
,
3061 IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL
,
3062 IN PVOID EventsLock OPTIONAL
);
3066 IN PKSEVENT_ENTRY EventEntry
);
3068 KSDDKAPI NTSTATUS NTAPI
3071 IN OUT PLIST_ENTRY EventsList
,
3072 IN KSEVENTS_LOCKTYPE EventsFlags
,
3073 IN PVOID EventsLock
);
3077 IN PFILE_OBJECT FileObject
,
3078 IN OUT PLIST_ENTRY EventsList
,
3079 IN KSEVENTS_LOCKTYPE EVentsFlags
,
3080 IN PVOID EventsLock
);
3082 /* ===============================================================
3086 KSDDKAPI NTSTATUS NTAPI
3087 KsValidateTopologyNodeCreateRequest(
3089 IN PKSTOPOLOGY Topology
,
3090 OUT PKSNODE_CREATE
* NodeCreate
);
3092 KSDDKAPI NTSTATUS NTAPI
3093 KsCreateTopologyNode(
3094 IN HANDLE ParentHandle
,
3095 IN PKSNODE_CREATE NodeCreate
,
3096 IN ACCESS_MASK DesiredAccess
,
3097 OUT PHANDLE NodeHandle
);
3099 KSDDKAPI NTSTATUS NTAPI
3100 KsTopologyPropertyHandler(
3102 IN PKSPROPERTY Property
,
3104 IN
const KSTOPOLOGY
* Topology
);
3108 /* ===============================================================
3109 Connectivity Functions
3112 KSDDKAPI NTSTATUS NTAPI
3114 IN HANDLE FilterHandle
,
3115 IN PKSPIN_CONNECT Connect
,
3116 IN ACCESS_MASK DesiredAccess
,
3117 OUT PHANDLE ConnectionHandle
);
3119 KSDDKAPI NTSTATUS NTAPI
3120 KsValidateConnectRequest(
3122 IN ULONG DescriptorsCount
,
3123 IN KSPIN_DESCRIPTOR
* Descriptor
,
3124 OUT PKSPIN_CONNECT
* Connect
);
3126 KSDDKAPI NTSTATUS NTAPI
3127 KsPinPropertyHandler(
3129 IN PKSPROPERTY Property
,
3131 IN ULONG DescriptorsCount
,
3132 IN
const KSPIN_DESCRIPTOR
* Descriptor
);
3134 KSDDKAPI NTSTATUS NTAPI
3135 KsPinDataIntersection(
3139 IN ULONG DescriptorsCount
,
3140 IN
const KSPIN_DESCRIPTOR
* Descriptor
,
3141 IN PFNKSINTERSECTHANDLER IntersectHandler
);
3143 KSDDKAPI NTSTATUS NTAPI
3144 KsPinDataIntersectionEx(
3148 IN ULONG DescriptorsCount
,
3149 IN
const KSPIN_DESCRIPTOR
* Descriptor
,
3150 IN ULONG DescriptorSize
,
3151 IN PFNKSINTERSECTHANDLEREX IntersectHandler OPTIONAL
,
3152 IN PVOID HandlerContext OPTIONAL
);
3154 /* Does this belong here? */
3156 KSDDKAPI NTSTATUS NTAPI
3157 KsHandleSizedListQuery(
3159 IN ULONG DataItemsCount
,
3160 IN ULONG DataItemSize
,
3161 IN
const VOID
* DataItems
);
3164 /* ===============================================================
3165 IRP Helper Functions
3168 typedef NTSTATUS
NTAPI (*PFNKSIRPLISTCALLBACK
)(
3172 KSDDKAPI NTSTATUS NTAPI
3173 KsAcquireResetValue(
3175 OUT KSRESET
* ResetValue
);
3178 KsAddIrpToCancelableQueue(
3179 IN OUT PLIST_ENTRY QueueHead
,
3180 IN PKSPIN_LOCK SpinLock
,
3182 IN KSLIST_ENTRY_LOCATION ListLocation
,
3183 IN PDRIVER_CANCEL DriverCancel OPTIONAL
);
3185 KSDDKAPI NTSTATUS NTAPI
3186 KsAddObjectCreateItemToDeviceHeader(
3187 IN KSDEVICE_HEADER Header
,
3188 IN PDRIVER_DISPATCH Create
,
3190 IN PWCHAR ObjectClass
,
3191 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
3193 KSDDKAPI NTSTATUS NTAPI
3194 KsAddObjectCreateItemToObjectHeader(
3195 IN KSOBJECT_HEADER Header
,
3196 IN PDRIVER_DISPATCH Create
,
3198 IN PWCHAR ObjectClass
,
3199 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
3201 KSDDKAPI NTSTATUS NTAPI
3202 KsAllocateDeviceHeader(
3203 OUT KSDEVICE_HEADER
* Header
,
3204 IN ULONG ItemsCount
,
3205 IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL
);
3207 KSDDKAPI NTSTATUS NTAPI
3208 KsAllocateExtraData(
3211 OUT PVOID
* ExtraBuffer
);
3213 KSDDKAPI NTSTATUS NTAPI
3214 KsAllocateObjectCreateItem(
3215 IN KSDEVICE_HEADER Header
,
3216 IN PKSOBJECT_CREATE_ITEM CreateItem
,
3217 IN BOOLEAN AllocateEntry
,
3218 IN PFNKSITEMFREECALLBACK ItemFreeCallback OPTIONAL
);
3220 KSDDKAPI NTSTATUS NTAPI
3221 KsAllocateObjectHeader(
3222 OUT KSOBJECT_HEADER
*Header
,
3223 IN ULONG ItemsCount
,
3224 IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL
,
3226 IN KSDISPATCH_TABLE
* Table
);
3230 IN OUT PLIST_ENTRY QueueHead
,
3231 IN PKSPIN_LOCK SpinLock
);
3235 IN PDEVICE_OBJECT DeviceObject
,
3238 KSDDKAPI NTSTATUS NTAPI
3239 KsDefaultDeviceIoCompletion(
3240 IN PDEVICE_OBJECT DeviceObject
,
3244 KSDDKAPI ULONG NTAPI
3245 KsDecrementCountedWorker(
3246 IN PKSWORKER Worker);
3249 KSDDKAPI BOOLEAN NTAPI
3250 KsDispatchFastIoDeviceControlFailure(
3251 IN PFILE_OBJECT FileObject
,
3253 IN PVOID InputBuffer OPTIONAL
,
3254 IN ULONG InputBufferLength
,
3255 OUT PVOID OutputBuffer OPTIONAL
,
3256 IN ULONG OutputBufferLength
,
3257 IN ULONG IoControlCode
,
3258 OUT PIO_STATUS_BLOCK IoStatus
,
3259 IN PDEVICE_OBJECT DeviceObject
); /* always return false */
3261 KSDDKAPI BOOLEAN NTAPI
3262 KsDispatchFastReadFailure(
3263 IN PFILE_OBJECT FileObject
,
3264 IN PLARGE_INTEGER FileOffset
,
3269 OUT PIO_STATUS_BLOCK IoStatus
,
3270 IN PDEVICE_OBJECT DeviceObject
); /* always return false */
3272 /* This function does the same as the above */
3273 #define KsDispatchFastWriteFailure KsDispatchFastReadFailure
3275 KSDDKAPI NTSTATUS NTAPI
3276 KsDispatchInvalidDeviceRequest(
3277 IN PDEVICE_OBJECT DeviceObject
,
3280 KSDDKAPI NTSTATUS NTAPI
3282 IN PDEVICE_OBJECT DeviceObject
,
3285 KSDDKAPI NTSTATUS NTAPI
3286 KsDispatchSpecificMethod(
3288 IN PFNKSHANDLER Handler
);
3290 KSDDKAPI NTSTATUS NTAPI
3291 KsDispatchSpecificProperty(
3293 IN PFNKSHANDLER Handler
);
3295 KSDDKAPI NTSTATUS NTAPI
3296 KsForwardAndCatchIrp(
3297 IN PDEVICE_OBJECT DeviceObject
,
3299 IN PFILE_OBJECT FileObject
,
3300 IN KSSTACK_USE StackUse
);
3302 KSDDKAPI NTSTATUS NTAPI
3305 IN PFILE_OBJECT FileObject
,
3306 IN BOOLEAN ReuseStackLocation
);
3310 IN KSDEVICE_HEADER Header
);
3316 KSDDKAPI NTSTATUS NTAPI
3317 KsGetChildCreateParameter(
3319 OUT PVOID
* CreateParameter
);
3321 KSDDKAPI NTSTATUS NTAPI
3322 KsMoveIrpsOnCancelableQueue(
3323 IN OUT PLIST_ENTRY SourceList
,
3324 IN PKSPIN_LOCK SourceLock
,
3325 IN OUT PLIST_ENTRY DestinationList
,
3326 IN PKSPIN_LOCK DestinationLock OPTIONAL
,
3327 IN KSLIST_ENTRY_LOCATION ListLocation
,
3328 IN PFNKSIRPLISTCALLBACK ListCallback
,
3331 KSDDKAPI NTSTATUS NTAPI
3334 IN ULONG ProbeFlags
,
3335 IN ULONG HeaderSize
);
3337 KSDDKAPI NTSTATUS NTAPI
3338 KsQueryInformationFile(
3339 IN PFILE_OBJECT FileObject
,
3340 OUT PVOID FileInformation
,
3342 IN FILE_INFORMATION_CLASS FileInformationClass
);
3344 KSDDKAPI ACCESS_MASK NTAPI
3345 KsQueryObjectAccessMask(
3346 IN KSOBJECT_HEADER Header
);
3348 KSDDKAPI PKSOBJECT_CREATE_ITEM NTAPI
3349 KsQueryObjectCreateItem(
3350 IN KSOBJECT_HEADER Header
);
3352 KSDDKAPI NTSTATUS NTAPI
3354 IN PFILE_OBJECT FileObject
,
3355 IN PKEVENT Event OPTIONAL
,
3356 IN PVOID PortContext OPTIONAL
,
3357 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3360 IN ULONG Key OPTIONAL
,
3361 IN KPROCESSOR_MODE RequestorMode
);
3364 KsReleaseIrpOnCancelableQueue(
3366 IN PDRIVER_CANCEL DriverCancel OPTIONAL
);
3369 KsRemoveIrpFromCancelableQueue(
3370 IN OUT PLIST_ENTRY QueueHead
,
3371 IN PKSPIN_LOCK SpinLock
,
3372 IN KSLIST_ENTRY_LOCATION ListLocation
,
3373 IN KSIRP_REMOVAL_OPERATION RemovalOperation
);
3376 KsRemoveSpecificIrpFromCancelableQueue(
3379 KSDDKAPI NTSTATUS NTAPI
3380 KsSetInformationFile(
3381 IN PFILE_OBJECT FileObject
,
3382 IN PVOID FileInformation
,
3384 IN FILE_INFORMATION_CLASS FileInformationClass
);
3386 KSDDKAPI NTSTATUS NTAPI
3387 KsSetMajorFunctionHandler(
3388 IN PDRIVER_OBJECT DriverObject
,
3389 IN ULONG MajorFunction
);
3391 KSDDKAPI NTSTATUS NTAPI
3393 IN PFILE_OBJECT FileObject
,
3394 IN PKEVENT Event OPTIONAL
,
3395 IN PVOID PortContext OPTIONAL
,
3396 IN PIO_COMPLETION_ROUTINE CompletionRoutine OPTIONAL
,
3397 IN PVOID CompletionContext OPTIONAL
,
3398 IN KSCOMPLETION_INVOCATION CompletionInvocationFlags OPTIONAL
,
3399 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3400 IN OUT PVOID StreamHeaders
,
3403 IN KPROCESSOR_MODE RequestorMode
);
3405 KSDDKAPI NTSTATUS NTAPI
3407 IN PFILE_OBJECT FileObject
,
3408 IN PKEVENT Event OPTIONAL
,
3409 IN PVOID PortContext OPTIONAL
,
3410 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3413 IN ULONG Key OPTIONAL
,
3414 IN KPROCESSOR_MODE RequestorMode
);
3417 KSDDKAPI NTSTATUS NTAPI
3418 KsDefaultForwardIrp(
3419 IN PDEVICE_OBJECT DeviceObject
,
3422 /* ===============================================================
3423 Worker Management Functions
3426 KSDDKAPI NTSTATUS NTAPI
3428 IN WORK_QUEUE_TYPE WorkQueueType
,
3429 OUT PKSWORKER
* Worker
);
3433 IN PKSWORKER Worker
);
3435 KSDDKAPI NTSTATUS NTAPI
3436 KsRegisterCountedWorker(
3437 IN WORK_QUEUE_TYPE WorkQueueType
,
3438 IN PWORK_QUEUE_ITEM CountedWorkItem
,
3439 OUT PKSWORKER
* Worker
);
3441 KSDDKAPI ULONG NTAPI
3442 KsDecrementCountedWorker(
3443 IN PKSWORKER Worker
);
3445 KSDDKAPI ULONG NTAPI
3446 KsIncrementCountedWorker(
3447 IN PKSWORKER Worker
);
3449 KSDDKAPI NTSTATUS NTAPI
3451 IN PKSWORKER Worker
,
3452 IN PWORK_QUEUE_ITEM WorkItem
);
3455 /* ===============================================================
3459 KSDDKAPI NTSTATUS NTAPI
3462 IN POOL_TYPE PoolType
,
3463 IN ULONG_PTR ResourceName
,
3464 IN ULONG ResourceType
,
3465 OUT PVOID
* Resource
,
3466 OUT PULONG ResourceSize
);
3469 KSDDKAPI NTSTATUS NTAPI
3470 KsGetImageNameAndResourceId(
3472 OUT PUNICODE_STRING ImageName,
3473 OUT PULONG_PTR ResourceId,
3474 OUT PULONG ValueType);
3476 KSDDKAPI NTSTATUS NTAPI
3478 IN PDEVICE_OBJECT PhysicalDeviceObject,
3479 IN PUNICODE_STRING ModuleName,
3480 OUT PUNICODE_STRING ImageName,
3481 OUT PULONG_PTR ResourceId,
3482 OUT PULONG ValueType);
3486 /* ===============================================================
3487 Misc. Helper Functions
3490 KSDDKAPI NTSTATUS NTAPI
3492 IN PUNICODE_STRING SymbolicLink
,
3493 IN PKSPIN_MEDIUM Medium
,
3494 IN ULONG PinDirection
);
3496 KSDDKAPI NTSTATUS NTAPI
3497 KsDefaultDispatchPnp(
3498 IN PDEVICE_OBJECT DeviceObject
,
3502 KsSetDevicePnpAndBaseObject(
3503 IN KSDEVICE_HEADER Header
,
3504 IN PDEVICE_OBJECT PnpDeviceObject
,
3505 IN PDEVICE_OBJECT BaseDevice
);
3507 KSDDKAPI NTSTATUS NTAPI
3508 KsDefaultDispatchPower(
3509 IN PDEVICE_OBJECT DeviceObject
,
3514 IN KSOBJECT_HEADER Header
,
3515 IN PFNKSCONTEXT_DISPATCH PowerDispatch OPTIONAL
,
3516 IN PVOID PowerContext OPTIONAL
);
3518 KSDDKAPI NTSTATUS NTAPI
3519 KsReferenceBusObject(
3520 IN KSDEVICE_HEADER Header
);
3523 KsDereferenceBusObject(
3524 IN KSDEVICE_HEADER Header
);
3526 KSDDKAPI NTSTATUS NTAPI
3527 KsFreeObjectCreateItem(
3528 IN KSDEVICE_HEADER Header
,
3529 IN PUNICODE_STRING CreateItem
);
3531 KSDDKAPI NTSTATUS NTAPI
3532 KsFreeObjectCreateItemsByContext(
3533 IN KSDEVICE_HEADER Header
,
3538 IN PDRIVER_OBJECT DriverObject
);
3540 KSDDKAPI PDEVICE_OBJECT NTAPI
3541 KsQueryDevicePnpObject(
3542 IN KSDEVICE_HEADER Header
);
3545 KsRecalculateStackDepth(
3546 IN KSDEVICE_HEADER Header
,
3547 IN BOOLEAN ReuseStackLocation
);
3550 KsSetTargetDeviceObject(
3551 IN KSOBJECT_HEADER Header
,
3552 IN PDEVICE_OBJECT TargetDevice OPTIONAL
);
3556 IN KSOBJECT_HEADER Header
,
3557 IN KSTARGET_STATE TargetState
);
3559 KSDDKAPI NTSTATUS NTAPI
3560 KsSynchronousIoControlDevice(
3561 IN PFILE_OBJECT FileObject
,
3562 IN KPROCESSOR_MODE RequestorMode
,
3566 OUT PVOID OutBuffer
,
3568 OUT PULONG BytesReturned
);
3572 /* ===============================================================
3573 AVStream Functions (XP / DirectX 8)
3575 http://www.osronline.com/ddkx/stream/avstream_5q9f.htm
3578 #if defined(_NTDDK_)
3583 IN PDRIVER_OBJECT DriverObject
,
3584 IN PUNICODE_STRING RegistryPath
,
3585 IN
const KSDEVICE_DESCRIPTOR
*Descriptor OPTIONAL
);
3587 typedef struct _KSFILTERFACTORY KSFILTERFACTORY
, *PKSFILTERFACTORY
; //FIXME
3594 KsInitializeDevice (
3595 IN PDEVICE_OBJECT FunctionalDeviceObject
,
3596 IN PDEVICE_OBJECT PhysicalDeviceObject
,
3597 IN PDEVICE_OBJECT NextDeviceObject
,
3598 IN
const KSDEVICE_DESCRIPTOR
* Descriptor OPTIONAL
);
3601 typedef void NTAPI (*PFNKSFILTERFACTORYPOWER
)(
3602 IN PKSFILTERFACTORY FilterFactory
,
3603 IN DEVICE_POWER_STATE State
);
3609 IN KSOBJECT_BAG ObjectBag
,
3610 IN OUT PVOID
* PointerToPointerToItem
,
3625 IN PKSDEVICE Device
);
3631 IN PDRIVER_OBJECT DriverObject
,
3632 IN PDEVICE_OBJECT PhysicalDeviceObject
);
3639 IN PKSEVENT_ENTRY EventEntry
);
3644 KsAddItemToObjectBag(
3645 IN KSOBJECT_BAG ObjectBag
,
3647 IN PFNKSFREE Free OPTIONAL
);
3652 KsAllocateObjectBag(
3653 IN PKSDEVICE Device
,
3654 OUT KSOBJECT_BAG
* ObjectBag
);
3659 KsCompletePendingRequest(
3665 KsCopyObjectBagItems(
3666 IN KSOBJECT_BAG ObjectBagDestination
,
3667 IN KSOBJECT_BAG ObjectBagSource
);
3673 IN PDRIVER_OBJECT DriverObject
,
3674 IN PDEVICE_OBJECT PhysicalDeviceObject
,
3675 IN
const KSDEVICE_DESCRIPTOR
* Descriptor OPTIONAL
,
3676 IN ULONG ExtensionSize OPTIONAL
,
3677 OUT PKSDEVICE
* Device OPTIONAL
);
3682 KsCreateFilterFactory(
3683 IN PDEVICE_OBJECT DeviceObject
,
3684 IN
const KSFILTER_DESCRIPTOR
* Descriptor
,
3685 IN PWCHAR RefString OPTIONAL
,
3686 IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL
,
3687 IN ULONG CreateItemFlags
,
3688 IN PFNKSFILTERFACTORYPOWER SleepCallback OPTIONAL
,
3689 IN PFNKSFILTERFACTORYPOWER WakeCallback OPTIONAL
,
3690 OUT PKSFILTERFACTORY
*FilterFactory OPTIONAL
);
3695 KsDefaultAddEventHandler(
3697 IN PKSEVENTDATA EventData
,
3698 IN OUT PKSEVENT_ENTRY EventEntry
);
3703 KsDispatchQuerySecurity(
3704 IN PDEVICE_OBJECT DeviceObject
,
3711 KsDispatchSetSecurity(
3712 IN PDEVICE_OBJECT DeviceObject
,
3718 #define KsDeleteFilterFactory(FilterFactory) \
3719 KsFreeObjectCreateItemsByContext( \
3720 *(KSDEVICE_HEADER *)( \
3721 KsFilterFactoryGetParentDevice(FilterFactory)->FunctionalDeviceObject-> \
3729 IN PKSDEVICE Device
,
3746 KsDeviceGetFirstChildFilterFactory(
3747 IN PKSDEVICE Device
);
3749 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
3761 KsDeviceGetOuterUnknown(
3762 IN PKSDEVICE Device
)
3764 return KsGetOuterUnknown((PVOID
) Device
);
3770 KsDeviceRegisterAggregatedClientUnknown(
3771 IN PKSDEVICE Device
,
3772 IN PUNKNOWN ClientUnknown
);
3777 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
3779 typedef interface IKsReferenceClock
* PIKSREFERENCECLOCK
;
3782 #define INTERFACE IKsReferenceClock
3783 DECLARE_INTERFACE_(IKsReferenceClock
,IUnknown
)
3785 DEFINE_ABSTRACT_UNKNOWN() // For C
3787 STDMETHOD_(LONGLONG
,GetTime
)(THIS
3789 STDMETHOD_(LONGLONG
,GetPhysicalTime
)(THIS
3791 STDMETHOD_(LONGLONG
,GetCorrelatedTime
)(THIS_
3792 OUT PLONGLONG SystemTime
3794 STDMETHOD_(LONGLONG
,GetCorrelatedPhysicalTime
)(THIS_
3795 OUT PLONGLONG SystemTime
3797 STDMETHOD_(NTSTATUS
, GetResolution
)(THIS_
3798 OUT PKSRESOLUTION Resolution
3800 STDMETHOD_(NTSTATUS
, GetState
)(THIS_
3806 #define INTERFACE IKsControl
3808 DEFINE_GUID(IID_IKsControl
, 0x28F54685L
, 0x06FD, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96);
3810 DECLARE_INTERFACE_(IKsControl
,IUnknown
)
3812 STDMETHOD_(NTSTATUS
, QueryInterface
)( THIS_
3814 PVOID
* Interface
)PURE
;
3816 STDMETHOD_(ULONG
, AddRef
)(THIS
) PURE
;
3818 STDMETHOD_(ULONG
, Release
)(THIS
) PURE
;
3820 STDMETHOD_(NTSTATUS
, KsProperty
)(THIS_
3821 IN PKSPROPERTY Property
,
3822 IN ULONG PropertyLength
,
3823 IN OUT PVOID PropertyData
,
3824 IN ULONG DataLength
,
3825 OUT ULONG
* BytesReturned
3827 STDMETHOD_(NTSTATUS
, KsMethod
)(THIS_
3828 IN PKSMETHOD Method
,
3829 IN ULONG MethodLength
,
3830 IN OUT PVOID MethodData
,
3831 IN ULONG DataLength
,
3832 OUT ULONG
* BytesReturned
3834 STDMETHOD_(NTSTATUS
, KsEvent
)(THIS_
3835 IN PKSEVENT Event OPTIONAL
,
3836 IN ULONG EventLength
,
3837 IN OUT PVOID EventData
,
3838 IN ULONG DataLength
,
3839 OUT ULONG
* BytesReturned
3844 typedef IKsControl
* PIKSCONTROL
;
3851 KsDeviceRegisterAdapterObject(
3852 IN PKSDEVICE Device
,
3853 IN PADAPTER_OBJECT AdapterObject
,
3854 IN ULONG MaxMappingByteCount
,
3855 IN ULONG MappingTableStride
);
3861 IN PKSDEVICE Device
,
3868 #define KsDiscard(object, pointer) \
3869 KsRemoveItemFromObjectBag(object->Bag, pointer, TRUE)
3871 #define KsFilterAcquireControl(Filter) \
3872 KsAcquireControl((PVOID) Filter);
3874 #define KsFilterAddEvent(Filter, EventEntry) \
3875 KsAddEvent(Filter,EventEntry);
3880 KsFilterAcquireProcessingMutex(
3881 IN PKSFILTER Filter
);
3886 KsFilterAddTopologyConnections(
3887 IN PKSFILTER Filter
,
3888 IN ULONG NewConnectionsCount
,
3889 IN
const KSTOPOLOGY_CONNECTION
* NewTopologyConnections
);
3894 KsFilterAttemptProcessing(
3895 IN PKSFILTER Filter
,
3896 IN BOOLEAN Asynchronous
);
3902 IN PKSFILTER Filter
,
3903 IN
const KSNODE_DESCRIPTOR
* NodeDescriptor
,
3909 KsFilterCreatePinFactory(
3910 IN PKSFILTER Filter
,
3911 IN
const KSPIN_DESCRIPTOR_EX
* PinDescriptor
,
3917 KsFilterFactoryGetDevice(
3918 IN PKSFILTERFACTORY FilterFactory
);
3921 #endif /* avstream */