8 This is a basic stubbing of the Kernel Streaming API header. It is
9 very incomplete - a lot of the #defines are not set to any value at all.
11 Some of the structs/funcs may be incorrectly grouped.
13 GUIDs need to be defined properly.
15 AVStream functionality (XP and above, DirectX 8.0 and above) will NOT
16 implemented for a while.
18 Some example code for interaction from usermode:
25 sizeof(KS_SEEKING_CAPABILITIES),
40 #define KSDDKAPI //DECLSPEC_IMPORT /* TODO */
44 #define KSFILTER_NODE ((ULONG)-1)
45 #define KSALL_NODES ((ULONG)-1)
47 #define KSSTRING_Filter L"{9B365890-165F-11D0-A195-0020AFD156E4}"
48 #define KSSTRING_Pin L"{146F1A80-4791-11D0-A5D6-28DB04C10000}"
49 #define KSSTRING_Clock L"{53172480-4791-11D0-A5D6-28DB04C10000}"
50 #define KSSTRING_Allocator L"{642F5D00-4791-11D0-A5D6-28DB04C10000}"
51 #define KSSTRING_AllocatorEx L"{091BB63B-603F-11D1-B067-00A0C9062802}"
52 #define KSSTRING_TopologyNode L"{0621061A-EE75-11D0-B915-00A0C9223196}"
54 #define KSDATAFORMAT_BIT_ATTRIBUTES 1
55 #define KSDATAFORMAT_ATTRIBUTES (1 << KSDATAFORMAT_BIT_ATTRIBUTES)
58 typedef PVOID PKSWORKER
;
62 #define SIZEOF_ARRAY(a) (sizeof(a)/sizeof((a)[0]))
65 /* ===============================================================
66 GUID definition helpers
72 #define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name
74 #define DEFINE_GUIDEX(name) EXTERN_C const GUID name
79 #define STATICGUIDOF(guid) STATIC_##guid
83 #if defined(__cplusplus) && _MSC_VER >= 1100
84 #define DEFINE_GUIDSTRUCT(guid, name) struct __declspec(uuid(guid)) name
85 #define DEFINE_GUIDNAMED(name) __uidof(struct name)
87 #define DEFINE_GUIDSTRUCT(guid, name) DEFINE_GUIDEX(name)
88 #define DEFINE_GUIDNAMED(name) name
92 #define STATIC_GUID_NULL \
93 0x00000000L, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
94 DEFINE_GUIDSTRUCT("00000000-0000-0000-0000-000000000000", GUID_NULL
);
95 #define GUID_NULL DEFINE_GUIDNAMED(GUID_NULL)
98 #define STATIC_KSNAME_Filter\
99 0x9b365890L, 0x165f, 0x11d0, {0xa1, 0x95, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4}
100 DEFINE_GUIDSTRUCT("9b365890-165f-11d0-a195-0020afd156e4", KSNAME_Filter
);
101 #define KSNAME_Filter DEFINE_GUIDNAMED(KSNAME_Filter)
103 #define STATIC_KSMEMORY_TYPE_KERNEL_PAGED \
104 0xd833f8f8L, 0x7894, 0x11d1, {0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02}
105 DEFINE_GUIDSTRUCT("d833f8f8-7894-11d1-b069-00a0c9062802", KSMEMORY_TYPE_KERNEL_PAGED
);
106 #define KSMEMORY_TYPE_KERNEL_PAGED DEFINE_GUIDNAMED(KSMEMORY_TYPE_KERNEL_PAGED)
108 /* ===============================================================
112 #define IOCTL_KS_DISABLE_EVENT \
119 #define IOCTL_KS_ENABLE_EVENT \
127 #define IOCTL_KS_METHOD \
135 #define IOCTL_KS_PROPERTY \
142 #define IOCTL_KS_WRITE_STREAM \
149 #define IOCTL_KS_READ_STREAM \
156 #define IOCTL_KS_RESET_STATE \
164 /* ===============================================================
168 #define STATIC_KSCATEGORY_BRIDGE \
169 0x085AFF00L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
170 DEFINE_GUIDSTRUCT("085AFF00-62CE-11CF-A5D6-28DB04C10000", KSCATEGORY_BRIDGE
);
171 #define KSCATEGORY_BRIDGE DEFINE_GUIDNAMED(KSCATEGORY_BRIDGE)
173 #define STATIC_KSCATEGORY_CAPTURE \
174 0x65E8773DL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
175 DEFINE_GUIDSTRUCT("65E8773D-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_CAPTURE
);
176 #define KSCATEGORY_CAPTURE DEFINE_GUIDNAMED(KSCATEGORY_CAPTURE)
178 #define STATIC_KSCATEGORY_RENDER \
179 0x65E8773EL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
180 DEFINE_GUIDSTRUCT("65E8773E-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_RENDER
);
181 #define KSCATEGORY_RENDER DEFINE_GUIDNAMED(KSCATEGORY_RENDER)
183 #define STATIC_KSCATEGORY_MIXER \
184 0xAD809C00L, 0x7B88, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
185 DEFINE_GUIDSTRUCT("AD809C00-7B88-11D0-A5D6-28DB04C10000", KSCATEGORY_MIXER
);
186 #define KSCATEGORY_MIXER DEFINE_GUIDNAMED(KSCATEGORY_MIXER)
188 #define STATIC_KSCATEGORY_SPLITTER \
189 0x0A4252A0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
190 DEFINE_GUIDSTRUCT("0A4252A0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_SPLITTER
);
191 #define KSCATEGORY_SPLITTER DEFINE_GUIDNAMED(KSCATEGORY_SPLITTER)
193 #define STATIC_KSCATEGORY_DATACOMPRESSOR \
194 0x1E84C900L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
195 DEFINE_GUIDSTRUCT("1E84C900-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATACOMPRESSOR
);
196 #define KSCATEGORY_DATACOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATACOMPRESSOR)
198 #define STATIC_KSCATEGORY_DATADECOMPRESSOR \
199 0x2721AE20L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
200 DEFINE_GUIDSTRUCT("2721AE20-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATADECOMPRESSOR
);
201 #define KSCATEGORY_DATADECOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATADECOMPRESSOR)
203 #define STATIC_KSCATEGORY_DATATRANSFORM \
204 0x2EB07EA0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
205 DEFINE_GUIDSTRUCT("2EB07EA0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATATRANSFORM
);
206 #define KSCATEGORY_DATATRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_DATATRANSFORM)
208 #define STATIC_KSCATEGORY_COMMUNICATIONSTRANSFORM \
209 0xCF1DDA2CL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
210 DEFINE_GUIDSTRUCT("CF1DDA2C-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_COMMUNICATIONSTRANSFORM
);
211 #define KSCATEGORY_COMMUNICATIONSTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_COMMUNICATIONSTRANSFORM)
213 #define STATIC_KSCATEGORY_INTERFACETRANSFORM \
214 0xCF1DDA2DL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
215 DEFINE_GUIDSTRUCT("CF1DDA2D-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_INTERFACETRANSFORM
);
216 #define KSCATEGORY_INTERFACETRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_INTERFACETRANSFORM)
218 #define STATIC_KSCATEGORY_MEDIUMTRANSFORM \
219 0xCF1DDA2EL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
220 DEFINE_GUIDSTRUCT("CF1DDA2E-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_MEDIUMTRANSFORM
);
221 #define KSCATEGORY_MEDIUMTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_MEDIUMTRANSFORM)
223 #define STATIC_KSCATEGORY_FILESYSTEM \
224 0x760FED5EL, 0x9357, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
225 DEFINE_GUIDSTRUCT("760FED5E-9357-11D0-A3CC-00A0C9223196", KSCATEGORY_FILESYSTEM
);
226 #define KSCATEGORY_FILESYSTEM DEFINE_GUIDNAMED(KSCATEGORY_FILESYSTEM)
228 #define STATIC_KSCATEGORY_CLOCK \
229 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
230 DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000", KSCATEGORY_CLOCK
);
231 #define KSCATEGORY_CLOCK DEFINE_GUIDNAMED(KSCATEGORY_CLOCK)
233 #define STATIC_KSCATEGORY_PROXY \
234 0x97EBAACAL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
235 DEFINE_GUIDSTRUCT("97EBAACA-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_PROXY
);
236 #define KSCATEGORY_PROXY DEFINE_GUIDNAMED(KSCATEGORY_PROXY)
238 #define STATIC_KSCATEGORY_QUALITY \
239 0x97EBAACBL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
240 DEFINE_GUIDSTRUCT("97EBAACB-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_QUALITY
);
241 #define KSCATEGORY_QUALITY DEFINE_GUIDNAMED(KSCATEGORY_QUALITY)
243 /* ===============================================================
252 } KSIDENTIFIER
, *PKSIDENTIFIER
;
254 typedef KSIDENTIFIER KSPROPERTY
, *PKSPROPERTY
;
255 typedef KSIDENTIFIER KSMETHOD
, *PKSMETHOD
;
256 typedef KSIDENTIFIER KSEVENT
, *PKSEVENT
;
258 typedef KSIDENTIFIER KSDEGRADE
, *PKSDEGRADE
;
260 typedef KSIDENTIFIER KSPIN_INTERFACE
, *PKSPIN_INTERFACE
;
261 typedef KSIDENTIFIER KSPIN_MEDIUM
, *PKSPIN_MEDIUM
;
274 } KSDATAFORMAT
, *PKSDATAFORMAT
, KSDATARANGE
, *PKSDATARANGE
;
282 } KSATTRIBUTE
, *PKSATTRIBUTE
;
286 /* ===============================================================
287 Interface Sets - TODO
291 #define KSINTERFACESETID_Media
293 #define KSINTERFACESETID_Standard
294 #define KSINTERFACE_STANDARD_STREAMING
295 #define KSINTERFACE_STANDARD_LOOPED_STREAMING
296 #define KSINTERFACE_STANDARD_CONTROL
299 #define STATIC_KSINTERFACESETID_Standard \
300 0x1A8766A0L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
301 DEFINE_GUIDSTRUCT("1A8766A0-62CE-11CF-A5D6-28DB04C10000", KSINTERFACESETID_Standard
);
302 #define KSINTERFACESETID_Standard DEFINE_GUIDNAMED(KSINTERFACESETID_Standard)
306 KSINTERFACE_STANDARD_STREAMING
,
307 KSINTERFACE_STANDARD_LOOPED_STREAMING
,
308 KSINTERFACE_STANDARD_CONTROL
309 } KSINTERFACE_STANDARD
;
311 #define STATIC_KSINTERFACESETID_FileIo \
312 0x8C6F932CL, 0xE771, 0x11D0, 0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
313 DEFINE_GUIDSTRUCT("8C6F932C-E771-11D0-B8FF-00A0C9223196", KSINTERFACESETID_FileIo
);
314 #define KSINTERFACESETID_FileIo DEFINE_GUIDNAMED(KSINTERFACESETID_FileIo)
317 /* ===============================================================
323 KSINTERFACE_FILEIO_STREAMING
324 } KSINTERFACE_FILEIO
;
326 #define KSMEDIUM_TYPE_ANYINSTANCE 0
328 #define STATIC_KSMEDIUMSETID_Standard \
329 0x4747B320L, 0x62CE, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
330 DEFINE_GUIDSTRUCT("4747B320-62CE-11CF-A5D6-28DB04C10000", KSMEDIUMSETID_Standard
);
331 #define KSMEDIUMSETID_Standard DEFINE_GUIDNAMED(KSMEDIUMSETID_Standard)
334 /* ===============================================================
335 Clock Properties/Methods/Events
338 #define KSPROPSETID_Clock \
339 0xDF12A4C0L, 0xAC17, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
343 KSPROPERTY_CLOCK_TIME
,
344 KSPROPERTY_CLOCK_PHYSICALTIME
,
345 KSPROPERTY_CORRELATEDTIME
,
346 KSPROPERTY_CORRELATEDPHYSICALTIME
,
347 KSPROPERTY_CLOCK_RESOLUTION
,
348 KSPROPERTY_CLOCK_STATE
,
349 KSPROPERTY_CLOCK_FUNCTIONTABLE
352 #define KSEVENTSETID_Clock \
353 0x364D8E20L, 0x62C7, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
357 KSEVENT_CLOCK_INTERVAL_MARK
,
358 KSEVENT_CLOCK_POSITION_MARK
359 } KSEVENT_CLOCK_POSITION
;
362 /* ===============================================================
363 Connection Properties/Methods/Events
366 #define STATIC_KSPROPSETID_Connection \
367 0x1D58C920L, 0xAC9B, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
368 DEFINE_GUIDSTRUCT("1D58C920-AC9B-11CF-A5D6-28DB04C10000", KSPROPSETID_Connection
);
369 #define KSPROPSETID_Connection DEFINE_GUIDNAMED(KSPROPSETID_Connection)
374 KSPROPERTY_CONNECTION_STATE
,
375 KSPROPERTY_CONNECTION_PRIORITY
,
376 KSPROPERTY_CONNECTION_DATAFORMAT
,
377 KSPROPERTY_CONNECTION_ALLOCATORFRAMING
,
378 KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT
,
379 KSPROPERTY_CONNECTION_ACQUIREORDERING
,
380 KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX
,
381 KSPROPERTY_CONNECTION_STARTAT
382 } KSPROPERTY_CONNECTION
;
384 #define KSEVENTSETID_Connection \
385 0x7f4bcbe0L, 0x9ea5, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00
389 KSEVENT_CONNECTION_POSITIONUPDATE
,
390 KSEVENT_CONNECTION_DATADISCONTINUITY
,
391 KSEVENT_CONNECTION_TIMEDISCONTINUITY
,
392 KSEVENT_CONNECTION_PRIORITY
,
393 KSEVENT_CONNECTION_ENDOFSTREAM
394 } KSEVENT_CONNECTION
;
397 /* ===============================================================
399 Properties/Methods/Events
402 #define STATIC_KSPROPSETID_General\
403 0x1464EDA5L, 0x6A8F, 0x11D1, {0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
404 DEFINE_GUIDSTRUCT("1464EDA5-6A8F-11D1-9AA7-00A0C9223196", KSPROPSETID_General
);
405 #define KSPROPSETID_General DEFINE_GUIDNAMED(KSPROPSETID_General)
410 KSPROPERTY_GENERAL_COMPONENTID
411 } KSPROPERTY_GENERAL
;
414 /* ===============================================================
416 Properties/Methods/Events
419 #define KSPROPSETID_GM \
420 0xAF627536L, 0xE719, 0x11D2, 0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D
424 KSPROPERTY_GM_GRAPHMANAGER
,
425 KSPROPERTY_GM_TIMESTAMP_CLOCK
,
426 KSPROPERTY_GM_RATEMATCH
,
427 KSPROPERTY_GM_RENDERCLOCK
431 /* ===============================================================
433 Properties/Methods/Events
436 #define KSPROPSETID_MediaSeeking \
437 0xEE904F0CL, 0xD09B, 0x11D0, 0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
441 KSPROPERTY_MEDIASEEKING_CAPABILITIES
,
442 KSPROPERTY_MEDIASEEKING_FORMATS
,
443 KSPROPERTY_MEDIASEEKING_TIMEFORMAT
,
444 KSPROPERTY_MEDIASEEKING_POSITION
,
445 KSPROPERTY_MEDIASEEKING_STOPPOSITION
,
446 KSPROPERTY_MEDIASEEKING_POSITIONS
,
447 KSPROPERTY_MEDIASEEKING_DURATION
,
448 KSPROPERTY_MEDIASEEKING_AVAILABLE
,
449 KSPROPERTY_MEDIASEEKING_PREROLL
,
450 KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT
451 } KSPROPERTY_MEDIASEEKING
;
454 /* ===============================================================
456 Properties/Methods/Events
459 #define STATIC_KSPROPSETID_Pin\
460 0x8C134960L, 0x51AD, 0x11CF, 0x87, 0x8A, 0x94, 0xF8, 0x01, 0xC1, 0x00, 0x00
461 DEFINE_GUIDSTRUCT("8C134960-51AD-11CF-878A-94F801C10000", KSPROPSETID_Pin
);
462 #define KSPROPSETID_Pin DEFINE_GUIDNAMED(KSPROPSETID_Pin)
464 #define STATIC_KSNAME_Pin\
465 0x146F1A80L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
466 DEFINE_GUIDSTRUCT("146F1A80-4791-11D0-A5D6-28DB04C10000", KSNAME_Pin
);
467 #define KSNAME_Pin DEFINE_GUIDNAMED(KSNAME_Pin)
472 KSPROPERTY_PIN_CINSTANCES
,
473 KSPROPERTY_PIN_CTYPES
,
474 KSPROPERTY_PIN_DATAFLOW
,
475 KSPROPERTY_PIN_DATARANGES
,
476 KSPROPERTY_PIN_DATAINTERSECTION
,
477 KSPROPERTY_PIN_INTERFACES
,
478 KSPROPERTY_PIN_MEDIUMS
,
479 KSPROPERTY_PIN_COMMUNICATION
,
480 KSPROPERTY_PIN_GLOBALCINSTANCES
,
481 KSPROPERTY_PIN_NECESSARYINSTANCES
,
482 KSPROPERTY_PIN_PHYSICALCONNECTION
,
483 KSPROPERTY_PIN_CATEGORY
,
485 KSPROPERTY_PIN_CONSTRAINEDDATARANGES
,
486 KSPROPERTY_PIN_PROPOSEDATAFORMAT
494 } KSP_PIN
, *PKSP_PIN
;
496 #define KSINSTANCE_INDETERMINATE ((ULONG)-1)
502 } KSPIN_CINSTANCES
, *PKSPIN_CINSTANCES
;
508 WCHAR SymbolicLinkName
[1];
509 } KSPIN_PHYSICALCONNECTION
, *PKSPIN_PHYSICALCONNECTION
;
512 /* ===============================================================
514 Properties/Methods/Events
517 #define KSPROPSETID_Quality \
518 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
522 KSPROPERTY_QUALITY_REPORT
,
523 KSPROPERTY_QUALITY_ERROR
524 } KSPROPERTY_QUALITY
;
527 /* ===============================================================
529 Properties/Methods/Events
532 #define KSPROPSETID_Stream \
533 0x65aaba60L, 0x98ae, 0x11cf, 0xa1, 0x0d, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
537 KSPROPERTY_STREAM_ALLOCATOR
,
538 KSPROPERTY_STREAM_QUALITY
,
539 KSPROPERTY_STREAM_DEGRADATION
,
540 KSPROPERTY_STREAM_MASTERCLOCK
,
541 KSPROPERTY_STREAM_TIMEFORMAT
,
542 KSPROPERTY_STREAM_PRESENTATIONTIME
,
543 KSPROPERTY_STREAM_PRESENTATIONEXTENT
,
544 KSPROPERTY_STREAM_FRAMETIME
,
545 KSPROPERTY_STREAM_RATECAPABILITY
,
546 KSPROPERTY_STREAM_RATE
,
547 KSPROPERTY_STREAM_PIPE_ID
551 /* ===============================================================
553 Properties/Methods/Events
556 #define STATIC_KSPROPSETID_StreamAllocator\
557 0xcf6e4342L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
558 DEFINE_GUIDSTRUCT("cf6e4342-ec87-11cf-a130-0020afd156e4", KSPROPSETID_StreamAllocator
);
559 #define KSPROPSETID_StreamAllocator DEFINE_GUIDNAMED(KSPROPSETID_StreamAllocator)
563 KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE
,
564 KSPROPERTY_STREAMALLOCATOR_STATUS
565 } KSPROPERTY_STREAMALLOCATOR
;
567 #define KSMETHODSETID_StreamAllocator \
568 0xcf6e4341L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
572 KSMETHOD_STREAMALLOCATOR_ALLOC
,
573 KSMETHOD_STREAMALLOCATOR_FREE
574 } KSMETHOD_STREAMALLOCATOR
;
577 #define KSEVENTSETID_StreamAllocator
581 KSEVENT_STREAMALLOCATOR_INTERNAL_FREEFRAME
,
582 KSEVENT_STREAMALLOCATOR_FREEFRAME
583 } KSEVENT_STREAMALLOCATOR
;
586 /* ===============================================================
588 Properties/Methods/Events
591 #define KSPROPSETID_StreamInterface \
592 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
596 KSPROPERTY_STREAMINTERFACE_HEADERSIZE
597 } KSPROPERTY_STREAMINTERFACE
;
600 /* ===============================================================
602 Properties/Methods/Events
605 #define STATIC_KSPROPSETID_Topology\
606 0x720D4AC0L, 0x7533, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
607 DEFINE_GUIDSTRUCT("720D4AC0-7533-11D0-A5D6-28DB04C10000", KSPROPSETID_Topology
);
608 #define KSPROPSETID_Topology DEFINE_GUIDNAMED(KSPROPSETID_Topology)
612 KSPROPERTY_TOPOLOGY_CATEGORIES
,
613 KSPROPERTY_TOPOLOGY_CONNECTIONS
,
614 KSPROPERTY_TOPOLOGY_NAME
,
615 KSPROPERTY_TOPOLOGY_NODES
616 } KSPROPERTY_TOPOLOGY
;
620 /* ===============================================================
621 Property Sets for audio drivers - TODO
624 #define STATIC_KSPROPTYPESETID_General \
625 0x97E99BA0L, 0xBDEA, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
626 DEFINE_GUIDSTRUCT("97E99BA0-BDEA-11CF-A5D6-28DB04C10000", KSPROPTYPESETID_General
);
627 #define KSPROPTYPESETID_General DEFINE_GUIDNAMED(KSPROPTYPESETID_General)
630 KSPROPERTY_AC3_ALTERNATE_AUDIO
631 KSPROPERTY_AC3_BIT_STREAM_MODE
632 KSPROPERTY_AC3_DIALOGUE_LEVEL
633 KSPROPERTY_AC3_DOWNMIX
634 KSPROPERTY_AC3_ERROR_CONCEALMENT
635 KSPROPERTY_AC3_LANGUAGE_CODE
636 KSPROPERTY_AC3_ROOM_TYPE
639 #define KSPROPSETID_Acoustic_Echo_Cancel
642 KSPROPERTY_AEC_NOISE_FILL_ENABLE
643 KSPROPERTY_AEC_STATUS
647 KSPROPERTY_AUDIO_3D_INTERFACE
649 KSPROPERTY_AUDIO_ALGORITHM_INSTANCE
650 KSPROPERTY_AUDIO_BASS
651 KSPROPERTY_AUDIO_BASS_BOOST
652 KSPROPERTY_AUDIO_CHANNEL_CONFIG
653 KSPROPERTY_AUDIO_CHORUS_LEVEL
654 KSPROPERTY_AUDIO_COPY_PROTECTION
655 KSPROPERTY_AUDIO_CPU_RESOURCES
656 KSPROPERTY_AUDIO_DELAY
657 KSPROPERTY_AUDIO_DEMUX_DEST
658 KSPROPERTY_AUDIO_DEV_SPECIFIC
659 KSPROPERTY_AUDIO_DYNAMIC_RANGE
660 KSPROPERTY_AUDIO_DYNAMIC_SAMPLING_RATE
661 KSPROPERTY_AUDIO_EQ_BANDS
662 KSPROPERTY_AUDIO_EQ_LEVEL
663 KSPROPERTY_AUDIO_FILTER_STATE
664 KSPROPERTY_AUDIO_LATENCY
665 KSPROPERTY_AUDIO_LOUDNESS
666 KSPROPERTY_AUDIO_MANUFACTURE_GUID
668 KSPROPERTY_AUDIO_MIX_LEVEL_CAPS
669 KSPROPERTY_AUDIO_MIX_LEVEL_TABLE
670 KSPROPERTY_AUDIO_MUTE
671 KSPROPERTY_AUDIO_MUX_SOURCE
672 KSPROPERTY_AUDIO_NUM_EQ_BANDS
673 KSPROPERTY_AUDIO_PEAKMETER
674 KSPROPERTY_AUDIO_POSITION
675 KSPROPERTY_AUDIO_PREFERRED_STATUS
676 KSPROPERTY_AUDIO_PRODUCT_GUID
677 KSPROPERTY_AUDIO_QUALITY
678 KSPROPERTY_AUDIO_REVERB_LEVEL
679 KSPROPERTY_AUDIO_SAMPLING_RATE
680 KSPROPERTY_AUDIO_STEREO_ENHANCE
681 KSPROPERTY_AUDIO_STEREO_SPEAKER_GEOMETRY
682 KSPROPERTY_AUDIO_SURROUND_ENCODE
683 KSPROPERTY_AUDIO_TREBLE
684 KSPROPERTY_AUDIO_VOLUMELEVEL
685 KSPROPERTY_AUDIO_WIDE_MODE
686 KSPROPERTY_AUDIO_WIDENESS
689 #define KSPROPSETID_AudioGfx
691 KSPROPERTY_AUDIOGFX_CAPTURETARGETDEVICEID
692 KSPROPERTY_AUDIOGFX_RENDERTARGETDEVICEID
695 #define KSPROPSETID_DirectSound3DBuffer
697 KSPROPERTY_DIRECTSOUND3DBUFFER_ALL
698 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEANGLES
699 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEORIENTATION
700 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEOUTSIDEVOLUME
701 KSPROPERTY_DIRECTSOUND3DBUFFER_MAXDISTANCE
702 KSPROPERTY_DIRECTSOUND3DBUFFER_MINDISTANCE
703 KSPROPERTY_DIRECTSOUND3DBUFFER_MODE
704 KSPROPERTY_DIRECTSOUND3DBUFFER_POSITION
705 KSPROPERTY_DIRECTSOUND3DBUFFER_VELOCITY
708 #define KSPROPSETID_DirectSound3DListener
710 KSPROPERTY_DIRECTSOUND3DLISTENER_ALL
711 KSPROPERTY_DIRECTSOUND3DLISTENER_ALLOCATION
712 KSPROPERTY_DIRECTSOUND3DLISTENER_BATCH
713 KSPROPERTY_DIRECTSOUND3DLISTENER_DISTANCEFACTOR
714 KSPROPERTY_DIRECTSOUND3DLISTENER_DOPPLERFACTOR
715 KSPROPERTY_DIRECTSOUND3DLISTENER_ORIENTATION
716 KSPROPERTY_DIRECTSOUND3DLISTENER_POSITION
717 KSPROPERTY_DIRECTSOUND3DLISTENER_ROLLOFFFACTOR
718 KSPROPERTY_DIRECTSOUND3DLISTENER_VELOCITY
721 #define KSPROPSETID_DrmAudioStream
723 KSPROPERTY_DRMAUDIOSTREAM_CONTENTID
726 #define KSPROPSETID_Hrtf3d
728 KSPROPERTY_HRTF3D_FILTER_FORMAT
729 KSPROPERTY_HRTF3D_INITIALIZE
730 KSPROPERTY_HRTF3D_PARAMS
733 #define KSPROPSETID_Itd3d
735 KSPROPERTY_ITD3D_PARAMS
738 #define KSPROPSETID_Synth
740 KSPROPERTY_SYNTH_CAPS
741 KSPROPERTY_SYNTH_CHANNELGROUPS
742 KSPROPERTY_SYNTH_LATENCYCLOCK
743 KSPROPERTY_SYNTH_MASTERCLOCK
744 KSPROPERTY_SYNTH_PORTPARAMETERS
745 KSPROPERTY_SYNTH_RUNNINGSTATS
746 KSPROPERTY_SYNTH_VOICEPRIORITY
747 KSPROPERTY_SYNTH_VOLUME
748 KSPROPERTY_SYNTH_VOLUMEBOOST
751 #define KSPROPSETID_Synth_Dls
753 KSPROPERTY_SYNTH_DLS_APPEND
754 KSPROPERTY_SYNTH_DLS_COMPACT
755 KSPROPERTY_SYNTH_DLS_DOWNLOAD
756 KSPROPERTY_SYNTH_DLS_UNLOAD
757 KSPROPERTY_SYNTH_DLS_WAVEFORMAT
760 #define KSPROPSETID_TopologyNode
762 KSPROPERTY_TOPOLOGYNODE_ENABLE
763 KSPROPERTY_TOPOLOGYNODE_RESET
769 /* ===============================================================
770 Event Sets for audio drivers - TODO
772 #define KSEVENTSETID_AudioControlChange
774 KSEVENT_CONTROL_CHANGE
779 /* ===============================================================
783 KSNODETYPE_3D_EFFECTS
784 KSNODETYPE_ACOUSTIC_ECHO_CANCEL
791 KSNODETYPE_DEV_SPECIFIC
793 KSNODETYPE_DMSYNTH_CAPS
794 KSNODETYPE_DRM_DESCRAMBLE
800 KSNODETYPE_PROLOGIC_DECODER
801 KSNODETYPE_PROLOGIC_ENCODER
804 KSNODETYPE_STEREO_ENHANCE
805 KSNODETYPE_STEREO_WIDE
810 KSNODETYPE_SYNTHESIZER
816 typedef PVOID KSDEVICE_HEADER
,
823 /* ===============================================================
827 #define KSMETHOD_TYPE_NONE 0x00000000
828 #define KSMETHOD_TYPE_READ 0x00000001
829 #define KSMETHOD_TYPE_WRITE 0x00000002
830 #define KSMETHOD_TYPE_MODIFY 0x00000003
831 #define KSMETHOD_TYPE_SOURCE 0x00000004
832 #define KSMETHOD_TYPE_SEND 0x00000001
833 #define KSMETHOD_TYPE_SETSUPPORT 0x00000100
834 #define KSMETHOD_TYPE_BASICSUPPORT 0x00000200
837 /* ===============================================================
841 #define KSPROPERTY_TYPE_GET 0x00000001
842 #define KSPROPERTY_TYPE_SET 0x00000002
843 #define KSPROPERTY_TYPE_SETSUPPORT 0x00000100
844 #define KSPROPERTY_TYPE_BASICSUPPORT 0x00000200
845 #define KSPROPERTY_TYPE_RELATIONS 0x00000400
846 #define KSPROPERTY_TYPE_SERIALIZESET 0x00000800
847 #define KSPROPERTY_TYPE_UNSERIALIZESET 0x00001000
848 #define KSPROPERTY_TYPE_SERIALIZERAW 0x00002000
849 #define KSPROPERTY_TYPE_UNSERIALIZERAW 0x00004000
850 #define KSPROPERTY_TYPE_SERIALIZESIZE 0x00008000
851 #define KSPROPERTY_TYPE_DEFAULT_VALUES 0x00010000
854 /* ===============================================================
855 Topology Methods/Properties
858 #define KSMETHOD_TYPE_TOPOLOGY 0x10000000
859 #define KSPROPERTY_TYPE_TOPOLOGY 0x10000000
862 #define DEFINE_KS_GUID(GA,GB,GC,GD,GE,GF,GG,GH,GI,GJ,GK) \
863 DEFINE_GUID(??, 0x#GA#L, 0xGB, 0xGC, 0xGD, 0xGE, 0xGF, 0xGG, 0xGH, 0xGI, 0xGJ, 0xGK) \
864 "GA-GB-GC-GDGE-GFGGGHGIGJGK"
867 /* ===============================================================
870 BRIDGE - 0x085AFF00L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
871 CAPTURE - 0x65E8773DL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
872 RENDER - 0x65E8773EL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
873 MIXER - 0xAD809C00L, 0x7B88, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
874 SPLITTER - 0x0A4252A0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
875 DATACOMPRESSOR - 0x1E84C900L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
876 DATADECOMPRESSOR - 0x2721AE20L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
877 DATATRANSFORM - 0x2EB07EA0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
878 COMMUNICATIONSTRANSFORM - 0xCF1DDA2CL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
879 INTERFACETRANSFORM - 0xCF1DDA2DL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
880 MEDIUMTRANSFORM - 0xCF1DDA2EL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
881 FILESYSTEM - 0x760FED5EL, 0x9357, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
882 CLOCK - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
883 PROXY - 0x97EBAACAL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
884 QUALITY - 0x97EBAACBL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
887 /* ===============================================================
888 KSNAME GUIDs (defined also as KSSTRING_Xxx L"{...}"
890 Filter - 0x9b365890L, 0x165f, 0x11d0, 0xa1, 0x95, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
891 Pin - 0x146F1A80L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
892 Clock - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
893 Allocator - 0x642F5D00L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
894 TopologyNode - 0x0621061AL, 0xEE75, 0x11D0, 0xB9, 0x15, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
897 /* ===============================================================
900 Standard - 0x1A8766A0L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
901 FileIo - 0x8C6F932CL, 0xE771, 0x11D0, 0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
904 /* ===============================================================
907 Standard - 0x4747B320L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
910 /* ===============================================================
913 General - 0x1464EDA5L, 0x6A8F, 0x11D1, 0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
914 StreamIo - 0x65D003CAL, 0x1523, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
915 MediaSeeking - 0xEE904F0CL, 0xD09B, 0x11D0, 0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
916 Topology - 0x720D4AC0L, 0x7533, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
917 GM - 0xAF627536L, 0xE719, 0x11D2, 0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D
918 Quality - 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
919 Connection - 0x1D58C920L, 0xAC9B, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
922 /* ===============================================================
925 Event set - 0x75d95571L, 0x073c, 0x11d0, 0xa1, 0x61, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
926 Method set - 0xcf6e4341L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
927 Property set - 0xcf6e4342L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
930 /* ===============================================================
933 Property set - 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
936 /* ===============================================================
939 Property set - 0xDF12A4C0L, 0xAC17, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
940 Event sets - 0x364D8E20L, 0x62C7, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
943 /* ===============================================================
946 Event set - 0x7f4bcbe0L, 0x9ea5, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00
949 /* ===============================================================
952 KSTIME_FORMAT_NONE (null guid)
953 FRAME - 0x7b785570L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
954 BYTE - 0x7b785571L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
955 SAMPLE - 0x7b785572L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
956 FIELD - 0x7b785573L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
957 MEDIA_TIME - 0x7b785574L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
960 /* ===============================================================
970 #define STATIC_KSDATAFORMAT_SPECIFIER_NONE\
971 0x0F6417D6L, 0xC318, 0x11D0, 0xA4, 0x3F, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
972 DEFINE_GUIDSTRUCT("0F6417D6-C318-11D0-A43F-00A0C9223196", KSDATAFORMAT_SPECIFIER_NONE
);
973 #define KSDATAFORMAT_SPECIFIER_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_NONE)
976 /* ===============================================================
979 WILDCARD, DONT_CARE = NULL
980 SYSTEM - 0x091bb638L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
981 USER - 0x8cb0fc28L, 0x7893, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
982 KERNEL_PAGED - 0xd833f8f8L, 0x7894, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
983 KERNEL_NONPAGED - 0x4a6d5fc4L, 0x7895, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
984 DEVICE_UNKNOWN - 0x091bb639L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
987 /* ===============================================================
989 (values have been checked)
994 #define DEFINE_KSPROPERTY_ITEM(PropertyId, GetHandler,\
998 Values, RelationsCount, Relations, SupportHandler,\
1001 PropertyId, {(PFNKSHANDLER)GetHandler}, MinProperty, MinData,\
1002 {(PFNKSHANDLER)SetHandler},\
1003 (PKSPROPERTY_VALUES)Values, RelationsCount, (PKSPROPERTY)Relations,\
1004 (PFNKSHANDLER)SupportHandler, (ULONG)SerializedSize\
1009 #define DEFINE_KSPROPERTY_ITEM(PropertyId, GetHandler,\
1013 Values, RelationsCount, Relations, SupportHandler,\
1016 PropertyId, (PFNKSHANDLER)GetHandler, MinProperty, MinData,\
1017 (PFNKSHANDLER)SetHandler,\
1018 (PKSPROPERTY_VALUES)Values, RelationsCount, (PKSPROPERTY)Relations,\
1019 (PFNKSHANDLER)SupportHandler, (ULONG)SerializedSize\
1028 KsObjectTypeFilterFactory
,
1039 } KSSTATE
, *PKSSTATE
;
1043 KSTARGET_STATE_DISABLED
,
1044 KSTARGET_STATE_ENABLED
1059 KSEVENTS_FMUTEXUNSAFE
,
1062 } KSEVENTS_LOCKTYPE
;
1066 KSDEGRADE_STANDARD_SIMPLE
,
1067 KSDEGRADE_STANDARD_QUALITY
,
1068 KSDEGRADE_STANDARD_COMPUTATION
,
1069 KSDEGRADE_STANDARD_SKIP
1070 } KSDEGRADE_STANDARD
;
1074 KSPIN_DATAFLOW_IN
= 1,
1080 KSPIN_COMMUNICATION_NONE
,
1081 KSPIN_COMMUNICATION_SINK
,
1082 KSPIN_COMMUNICATION_SOURCE
,
1083 KSPIN_COMMUNICATION_BOTH
,
1084 KSPIN_COMMUNICATION_BRIDGE
1085 } KSPIN_COMMUNICATION
;
1091 } KSLIST_ENTRY_LOCATION
;
1095 KsStackCopyToNewLocation
,
1096 KsStackReuseCurrentLocation
,
1097 KsStackUseNewLocation
1104 KsAcquireOnlySingleItem
,
1105 KsAcquireAndRemoveOnlySingleItem
1106 } KSIRP_REMOVAL_OPERATION
;
1110 KsInvokeOnSuccess
= 1,
1111 KsInvokeOnError
= 2,
1112 KsInvokeOnCancel
= 4
1113 } KSCOMPLETION_INVOCATION
;
1116 #if defined(_NTDDK_)
1118 typedef NTSTATUS (NTAPI
*PFNKSCONTEXT_DISPATCH
)(
1123 #if defined(_NTDDK_) && !defined(__wtypes_h__)
1153 VT_USERDEFINED
= 29,
1160 VT_STREAMED_OBJECT
= 68,
1161 VT_STORED_OBJECT
= 69,
1162 VT_BLOB_OBJECT
= 70,
1168 VT_RESERVED
= 0x8000,
1169 VT_ILLEGAL
= 0xffff,
1170 VT_ILLEGALMASKED
= 0xfff,
1175 #define STATIC_KSDATAFORMAT_TYPE_WILDCARD STATIC_GUID_NULL
1176 #define KSDATAFORMAT_TYPE_WILDCARD GUID_NULL
1178 #define STATIC_KSDATAFORMAT_SUBTYPE_WILDCARD STATIC_GUID_NULL
1179 #define KSDATAFORMAT_SUBTYPE_WILDCARD GUID_NULL
1181 #define STATIC_KSDATAFORMAT_SPECIFIER_WILDCARD STATIC_GUID_NULL
1182 #define KSDATAFORMAT_SPECIFIER_WILDCARD GUID_NULL
1184 /* ===============================================================
1193 } KS_FRAMING_RANGE
, *PKS_FRAMING_RANGE
;
1197 KS_FRAMING_RANGE Range
;
1198 ULONG InPlaceWeight
;
1199 ULONG NotInPlaceWeight
;
1200 } KS_FRAMING_RANGE_WEIGHTED
, *PKS_FRAMING_RANGE_WEIGHTED
;
1210 ULONG FileAlignment
;
1211 ULONG MemoryTypeWeight
;
1212 KS_FRAMING_RANGE PhysicalRange
;
1213 KS_FRAMING_RANGE_WEIGHTED FramingRange
;
1214 } KS_FRAMING_ITEM
, *PKS_FRAMING_ITEM
;
1218 ULONG RatioNumerator
;
1219 ULONG RatioDenominator
;
1220 ULONG RatioConstantMargin
;
1221 } KS_COMPRESSION
, *PKS_COMPRESSION
;
1224 /* ===============================================================
1228 #define KSPRIORITY_LOW 0x00000001
1229 #define KSPRIORITY_NORMAL 0x40000000
1230 #define KSPRIORITY_HIGH 0x80000000
1231 #define KSPRIORITY_EXCLUSIVE 0xFFFFFFFF
1235 ULONG PriorityClass
;
1236 ULONG PrioritySubClass
;
1237 } KSPRIORITY
, *PKSPRIORITY
;
1240 /* ===============================================================
1242 http://www.osronline.com/DDKx/stream/ks-struct_494j.htm
1244 #if defined(_NTDDK_)
1247 PDRIVER_DISPATCH DeviceIoControl
;
1248 PDRIVER_DISPATCH Read
;
1249 PDRIVER_DISPATCH Write
;
1250 PDRIVER_DISPATCH Flush
;
1251 PDRIVER_DISPATCH Close
;
1252 PDRIVER_DISPATCH QuerySecurity
;
1253 PDRIVER_DISPATCH SetSecurity
;
1254 PFAST_IO_DEVICE_CONTROL FastDeviceIoControl
;
1255 PFAST_IO_READ FastRead
;
1256 PFAST_IO_WRITE FastWrite
;
1257 } KSDISPATCH_TABLE
, *PKSDISPATCH_TABLE
;
1260 #define KSCREATE_ITEM_IRP_STORAGE(Irp) (*(PKSOBJECT_CREATE_ITEM*)&(Irp)->Tail.Overlay.DriverContext[0])
1261 #define KSEVENT_SET_IRP_STORAGE(Irp) (*(const KSEVENT_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1262 #define KSEVENT_ITEM_IRP_STORAGE(Irp) (*(const KSEVENT_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1263 #define KSEVENT_ENTRY_IRP_STORAGE(Irp) (*(PKSEVENT_ENTRY*)&(Irp)->Tail.Overlay.DriverContext[0])
1264 #define KSMETHOD_SET_IRP_STORAGE(Irp) (*(const KSMETHOD_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1265 #define KSMETHOD_ITEM_IRP_STORAGE(Irp) (*(const KSMETHOD_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1266 #define KSMETHOD_TYPE_IRP_STORAGE(Irp) (*(ULONG_PTR*)(&(Irp)->Tail.Overlay.DriverContext[2]))
1267 #define KSQUEUE_SPINLOCK_IRP_STORAGE(Irp) (*(PKSPIN_LOCK*)&(Irp)->Tail.Overlay.DriverContext[1])
1268 #define KSPROPERTY_SET_IRP_STORAGE(Irp) (*(const KSPROPERTY_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1269 #define KSPROPERTY_ITEM_IRP_STORAGE(Irp) (*(const KSPROPERTY_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1270 #define KSPROPERTY_ATTRIBUTES_IRP_STORAGE(Irp) (*(PKSATTRIBUTE_LIST*)&(Irp)->Tail.Overlay.DriverContext[2])
1274 (NTAPI
*PFNREFERENCEDEVICEOBJECT
)(
1280 (NTAPI
*PFNDEREFERENCEDEVICEOBJECT
)(
1286 (NTAPI
*PFNQUERYREFERENCESTRING
)(
1288 IN OUT PWCHAR
*String
1293 INTERFACE Interface
;
1294 PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject
;
1295 PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject
;
1296 PFNQUERYREFERENCESTRING QueryReferenceString
;
1297 } BUS_INTERFACE_REFERENCE
, *PBUS_INTERFACE_REFERENCE
;
1302 ULONG ReferenceCount
;
1303 KSPIN_LOCK AccessLock
;
1304 } KSDPC_ITEM
, *PKSDPC_ITEM
;
1309 LIST_ENTRY BufferList
;
1310 } KSBUFFER_ITEM
, *PKSBUFFER_ITEM
;
1322 } KSCOMPONENTID
, *PKSCOMPONENTID
;
1324 /* ===============================================================
1328 #define KSPROPERTY_MEMBER_RANGES 0x00000001
1329 #define KSPROPERTY_MEMBER_STEPPEDRANGES 0x00000002
1330 #define KSPROPERTY_MEMBER_VALUES 0x00000003
1331 #define KSPROPERTY_MEMBER_FLAG_DEFAULT KSPROPERTY_MEMBER_RANGES
1334 KS_SEEKING_NoPositioning
,
1335 KS_SEEKING_AbsolutePositioning
,
1336 KS_SEEKING_RelativePositioning
,
1337 KS_SEEKING_IncrementalPositioning
,
1338 KS_SEEKING_PositioningBitsMask
= 0x3,
1339 KS_SEEKING_SeekToKeyFrame
,
1340 KS_SEEKING_ReturnTime
= 0x8
1347 KS_SEEKING_FLAGS CurrentFlags
;
1348 KS_SEEKING_FLAGS StopFlags
;
1349 } KSPROPERTY_POSITIONS
, *PKSPROPERTY_POSITIONS
;
1355 } KSPROPERTY_SERIALHDR
, *PKSPROPERTY_SERIALHDR
;
1359 KSIDENTIFIER PropTypeSet
;
1361 ULONG PropertyLength
;
1362 } KSPROPERTY_SERIAL
, *PKSPROPERTY_SERIAL
;
1371 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1378 ULONG UnsignedMinimum
;
1379 ULONG UnsignedMaximum
;
1380 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1386 } KSPROPERTY_BOUNDS_LONG
, *PKSPROPERTY_BOUNDS_LONG
;
1391 LONGLONG SignedMinimum
;
1392 LONGLONG SignedMaximum
;
1393 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1400 #if defined(_NTDDK_)
1401 ULONGLONG UnsignedMinimum
;
1402 ULONGLONG UnsignedMaximum
;
1404 DWORDLONG UnsignedMinimum
;
1405 DWORDLONG UnsignedMaximum
;
1407 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1412 } KSPROPERTY_BOUNDS_LONGLONG
, *PKSPROPERTY_BOUNDS_LONGLONG
;
1417 ULONG DescriptionSize
;
1418 KSIDENTIFIER PropTypeSet
;
1419 ULONG MembersListCount
;
1421 } KSPROPERTY_DESCRIPTION
, *PKSPROPERTY_DESCRIPTION
;
1427 } KSPROPERTY_MEDIAAVAILABLE
, *PKSPROPERTY_MEDIAAVAILABLE
;
1436 } KSPROPERTY_MEMBERSHEADER
, *PKSPROPERTY_MEMBERSHEADER
;
1439 KSPROPERTY_MEMBERSHEADER MembersHeader
;
1440 const VOID
* Members
;
1441 } KSPROPERTY_MEMBERSLIST
, *PKSPROPERTY_MEMBERSLIST
;
1444 KSIDENTIFIER PropTypeSet
;
1445 ULONG MembersListCount
;
1446 const KSPROPERTY_MEMBERSLIST
* MembersList
;
1447 } KSPROPERTY_VALUES
, *PKSPROPERTY_VALUES
;
1449 #if defined(_NTDDK_)
1450 typedef NTSTATUS (NTAPI
*PFNKSHANDLER
)(
1452 IN PKSIDENTIFIER Request
,
1460 PFNKSHANDLER GetPropertyHandler
;
1461 BOOLEAN GetSupported
;
1466 PFNKSHANDLER SetPropertyHandler
;
1467 BOOLEAN SetSupported
;
1469 const KSPROPERTY_VALUES
* Values
;
1470 ULONG RelationsCount
;
1471 const KSPROPERTY
* Relations
;
1472 PFNKSHANDLER SupportHandler
;
1473 ULONG SerializedSize
;
1474 } KSPROPERTY_ITEM
, *PKSPROPERTY_ITEM
;
1479 (NTAPI
*PFNKSFASTHANDLER
)(
1480 IN PFILE_OBJECT FileObject
,
1481 IN PKSIDENTIFIER Request
,
1482 IN ULONG RequestLength
,
1484 IN ULONG DataLength
,
1485 OUT PIO_STATUS_BLOCK IoStatus
1491 PFNKSFASTHANDLER GetPropertyHandler
;
1492 BOOLEAN GetSupported
;
1495 PFNKSFASTHANDLER SetPropertyHandler
;
1496 BOOLEAN SetSupported
;
1499 } KSFASTPROPERTY_ITEM
, *PKSFASTPROPERTY_ITEM
;
1504 ULONG PropertiesCount
;
1505 const KSPROPERTY_ITEM
* PropertyItem
;
1507 const KSFASTPROPERTY_ITEM
* FastIoTable
;
1508 } KSPROPERTY_SET
, *PKSPROPERTY_SET
;
1514 ULONG SteppingDelta
;
1516 KSPROPERTY_BOUNDS_LONG Bounds
;
1517 } KSPROPERTY_STEPPING_LONG
, *PKSPROPERTY_STEPPING_LONG
;
1521 #if defined(_NTDDK_)
1522 ULONGLONG SteppingDelta
;
1524 DWORDLONG SteppingDelta
;
1526 KSPROPERTY_BOUNDS_LONGLONG Bounds
;
1527 } KSPROPERTY_STEPPING_LONGLONG
, *PKSPROPERTY_STEPPING_LONGLONG
;
1529 /* ===============================================================
1537 ULONG RequirementsFlags
;
1539 #if defined(_NTDDK_)
1546 ULONG FileAlignment
;
1548 } KSALLOCATOR_FRAMING
, *PKSALLOCATOR_FRAMING
;
1554 KS_COMPRESSION OutputCompression
;
1556 KS_FRAMING_ITEM FramingItem
[1];
1557 } KSALLOCATOR_FRAMING_EX
, *PKSALLOCATOR_FRAMING_EX
;
1559 #define KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER 0x00000001
1560 #define KSALLOCATOR_REQUIREMENTF_SYSTEM_MEMORY 0x00000002
1561 #define KSALLOCATOR_REQUIREMENTF_FRAME_INTEGRITY 0x00000004
1562 #define KSALLOCATOR_REQUIREMENTF_MUST_ALLOCATE 0x00000008
1563 #define KSALLOCATOR_REQUIREMENTF_PREFERENCES_ONLY 0x80000000
1565 #define KSALLOCATOR_OPTIONF_COMPATIBLE 0x00000001
1566 #define KSALLOCATOR_OPTIONF_SYSTEM_MEMORY 0x00000002
1567 #define KSALLOCATOR_OPTIONF_VALID 0x00000003
1569 #define KSALLOCATOR_FLAG_PARTIAL_READ_SUPPORT 0x00000010
1570 #define KSALLOCATOR_FLAG_DEVICE_SPECIFIC 0x00000020
1571 #define KSALLOCATOR_FLAG_CAN_ALLOCATE 0x00000040
1572 #define KSALLOCATOR_FLAG_INSIST_ON_FRAMESIZE_RATIO 0x00000080
1574 /* ===============================================================
1583 } KSQUALITY
, *PKSQUALITY
;
1587 HANDLE QualityManager
;
1589 } KSQUALITY_MANAGER
, *PKSQUALITY_MANAGER
;
1593 LONGLONG PresentationStart
;
1595 KSPIN_INTERFACE Interface
;
1602 KSPROPERTY Property
;
1604 } KSRATE_CAPABILITY
, *PKSRATE_CAPABILITY
;
1608 LONGLONG Granularity
;
1610 } KSRESOLUTION
, *PKSRESOLUTION
;
1614 ULONG NotificationType
;
1618 ULONG_PTR Reserved
[2];
1625 #if defined(_NTDDK_)
1628 KPRIORITY Increment
;
1633 KPRIORITY Increment
;
1638 ULONG ReferenceCount
;
1642 PWORK_QUEUE_ITEM WorkQueueItem
;
1643 WORK_QUEUE_TYPE WorkQueueType
;
1647 PWORK_QUEUE_ITEM WorkQueueItem
;
1648 PKSWORKER KsWorkerObject
;
1654 LONG_PTR Alignment
[2];
1657 } KSEVENTDATA
, *PKSEVENTDATA
;
1664 HANDLE ObjectHandle
;
1665 PVOID ObjectPointer
;
1669 KSEVENTDATA EventData
;
1670 } KSRELATIVEEVENT
, *PKSRELATIVEEVENT
;
1673 /* ===============================================================
1687 LONGLONG SystemTime
;
1688 } KSCORRELATED_TIME
, *PKSCORRELATED_TIME
;
1692 KSPROPERTY Property
;
1696 } KSP_TIMEFORMAT
, *PKSP_TIMEFORMAT
;
1702 } KSINTERVAL
, *PKSINTERVAL
;
1709 } KSFRAMETIME
, *PKSFRAMETIME
;
1712 /* ===============================================================
1716 typedef PVOID PKSDEFAULTCLOCK
;
1721 } KSCLOCK_CREATE
, *PKSCLOCK_CREATE
;
1723 #if defined(_NTDDK_)
1727 (FASTCALL
*PFNKSCLOCK_GETTIME
)(
1728 IN PFILE_OBJECT FileObject
1732 (FASTCALL
*PFNKSCLOCK_CORRELATEDTIME
)(
1733 IN PFILE_OBJECT FileObject
,
1734 OUT PLONGLONG SystemTime
);
1738 PFNKSCLOCK_GETTIME GetTime
;
1739 PFNKSCLOCK_GETTIME GetPhysicalTime
;
1740 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedTime
;
1741 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedPhysicalTime
;
1742 } KSCLOCK_FUNCTIONTABLE
, *PKSCLOCK_FUNCTIONTABLE
;
1745 /* ===============================================================
1746 Objects ??? SORT ME!
1749 #define KSCREATE_ITEM_SECURITYCHANGED 0x1
1750 #define KSCREATE_ITEM_WILDCARD 0x2
1751 #define KSCREATE_ITEM_NOPARAMETERS 0x4
1752 #define KSCREATE_ITEM_FREEONSTOP 0x8
1756 PDRIVER_DISPATCH Create
;
1758 UNICODE_STRING ObjectClass
;
1759 PSECURITY_DESCRIPTOR SecurityDescriptor
;
1761 } KSOBJECT_CREATE_ITEM
, *PKSOBJECT_CREATE_ITEM
;
1765 ULONG CreateItemsCount
;
1766 PKSOBJECT_CREATE_ITEM CreateItemsList
;
1767 } KSOBJECT_CREATE
, *PKSOBJECT_CREATE
;
1769 typedef VOID (NTAPI
*PFNKSITEMFREECALLBACK
)(
1770 IN PKSOBJECT_CREATE_ITEM CreateItem
);
1778 } KSMULTIPLE_ITEM
, *PKSMULTIPLE_ITEM
;
1783 PKSEVENTDATA EventData
;
1785 } KSQUERYBUFFER
, *PKSQUERYBUFFER
;
1791 } KSERROR
, *PKSERROR
;
1793 /* ===============================================================
1796 #if defined(_NTDDK_)
1802 PFNKSHANDLER MethodHandler
;
1803 BOOLEAN MethodSupported
;
1807 PFNKSHANDLER SupportHandler
;
1809 } KSMETHOD_ITEM
, *PKSMETHOD_ITEM
;
1813 #define DEFINE_KSMETHOD_ITEM(MethodId, Flags,\
1815 MinMethod, MinData, SupportHandler)\
1817 MethodId, {(PFNKSHANDLER)MethodHandler}, MinMethod, MinData,\
1818 SupportHandler, Flags\
1823 #define DEFINE_KSMETHOD_ITEM(MethodId, Flags,\
1825 MinMethod, MinData, SupportHandler)\
1827 MethodId, (PFNKSHANDLER)MethodHandler, MinMethod, MinData,\
1828 SupportHandler, Flags\
1840 PFNKSFASTHANDLER MethodHandler
;
1841 BOOLEAN MethodSupported
;
1843 } KSFASTMETHOD_ITEM
, *PKSFASTMETHOD_ITEM
;
1845 #define DEFINE_KSFASTMETHOD_ITEM(MethodId, MethodHandler)\
1847 MethodId, (PFNKSFASTHANDLER)MethodHandler\
1855 const KSMETHOD_ITEM
* MethodItem
;
1857 const KSFASTMETHOD_ITEM
*FastIoTable
;
1858 } KSMETHOD_SET
, *PKSMETHOD_SET
;
1861 #define DEFINE_KSMETHOD_SET(Set,\
1875 /* ===============================================================
1881 KSPROPERTY Property
;
1884 } KSP_NODE
, *PKSP_NODE
;
1891 } KSM_NODE
, *PKSM_NODE
;
1898 } KSE_NODE
, *PKSE_NODE
;
1903 } KSNODE_CREATE
, *PKSNODE_CREATE
;
1906 /* ===============================================================
1909 typedef struct _KSEVENT_ENTRY KSEVENT_ENTRY
, *PKSEVENT_ENTRY
;
1911 #if defined(_NTDDK_)
1914 KSEVENTDATA EventData
;
1916 } KSEVENT_TIME_MARK
, *PKSEVENT_TIME_MARK
;
1920 KSEVENTDATA EventData
;
1923 } KSEVENT_TIME_INTERVAL
, *PKSEVENT_TIME_INTERVAL
;
1925 typedef NTSTATUS (NTAPI
*PFNKSADDEVENT
)(
1927 IN PKSEVENTDATA EventData
,
1928 IN
struct _KSEVENT_ENTRY
* EventEntry
);
1932 (NTAPI
*PFNKSREMOVEEVENT
)(
1933 IN PFILE_OBJECT FileObject
,
1934 IN
struct _KSEVENT_ENTRY
* EventEntry
1941 ULONG ExtraEntryData
;
1942 PFNKSADDEVENT AddHandler
;
1943 PFNKSREMOVEEVENT RemoveHandler
;
1944 PFNKSHANDLER SupportHandler
;
1945 } KSEVENT_ITEM
, *PKSEVENT_ITEM
;
1951 const KSEVENT_ITEM
* EventItem
;
1952 } KSEVENT_SET
, *PKSEVENT_SET
;
1954 struct _KSEVENT_ENTRY
1956 LIST_ENTRY ListEntry
;
1959 PKSDPC_ITEM DpcItem
;
1960 PKSBUFFER_ITEM BufferItem
;
1962 PKSEVENTDATA EventData
;
1963 ULONG NotificationType
;
1964 const KSEVENT_SET
* EventSet
;
1965 const KSEVENT_ITEM
* EventItem
;
1966 PFILE_OBJECT FileObject
;
1967 ULONG SemaphoreAdjustment
;
1973 /* ===============================================================
1977 #if defined(_NTDDK_)
1979 typedef struct _KSPIN KSPIN
, *PKSPIN
;
1980 typedef struct _KSSTREAM_POINTER KSSTREAM_POINTER
, *PKSSTREAM_POINTER
;
1981 typedef struct _KSSTREAM_POINTER_OFFSET KSSTREAM_POINTER_OFFSET
, *PKSSTREAM_POINTER_OFFSET
;
1982 typedef struct _KSMAPPING KSMAPPING
, *PKSMAPPING
;
1983 typedef struct _KSPROCESSPIN KSPROCESSPIN
, *PKSPROCESSPIN
;
1985 #define IOCTL_KS_HANDSHAKE CTL_CODE(FILE_DEVICE_KS, 0x007, METHOD_NEITHER, FILE_ANY_ACCESS)
1991 } KSHANDSHAKE
, *PKSHANDSHAKE
;
1995 (NTAPI
*PFNKSPINHANDSHAKE
)(
2003 (NTAPI
*PFNKSPINPOWER
)(
2005 IN DEVICE_POWER_STATE State
2010 (NTAPI
*PFNKSPINFRAMERETURN
)(
2012 IN PVOID Data OPTIONAL
,
2013 IN ULONG Size OPTIONAL
,
2014 IN PMDL Mdl OPTIONAL
,
2015 IN PVOID Context OPTIONAL
,
2021 (NTAPI
*PFNKSPINIRPCOMPLETION
)(
2028 (NTAPI
*PFNKSPINIRP
)(
2041 (NTAPI
*PFNKSPINVOID
)(
2047 (NTAPI
*PFNKSSTREAMPOINTER
)(
2048 IN PKSSTREAM_POINTER StreamPointer
2053 PKSATTRIBUTE
* Attributes
;
2054 } KSATTRIBUTE_LIST
, *PKSATTRIBUTE_LIST
;
2058 (NTAPI
*PFNKSPINSETDATAFORMAT
)(
2060 IN PKSDATAFORMAT OldFormat OPTIONAL
,
2061 IN PKSMULTIPLE_ITEM OldAttributeList OPTIONAL
,
2062 IN
const KSDATARANGE
* DataRange
,
2063 IN
const KSATTRIBUTE_LIST
* AttributeRange OPTIONAL
2068 (NTAPI
*PFNKSPINSETDEVICESTATE
)(
2071 IN KSSTATE FromState
2074 typedef struct _KSCLOCK_DISPATCH KSCLOCK_DISPATCH
, *PKSCLOCK_DISPATCH
;
2075 typedef struct _KSALLOCATOR_DISPATCH KSALLOCATOR_DISPATCH
, *PKSALLOCATOR_DISPATCH
;
2083 PFNKSPINSETDATAFORMAT SetDataFormat
;
2084 PFNKSPINSETDEVICESTATE SetDeviceState
;
2086 PFNKSPINVOID Disconnect
;
2087 const KSCLOCK_DISPATCH
* Clock
;
2088 const KSALLOCATOR_DISPATCH
* Allocator
;
2089 } KSPIN_DISPATCH
, *PKSPIN_DISPATCH
;
2093 (NTAPI
*PFNKSPINSETTIMER
)(
2096 IN LARGE_INTEGER DueTime
,
2102 (NTAPI
*PFNKSPINCANCELTIMER
)(
2109 (FASTCALL
*PFNKSPINCORRELATEDTIME
)(
2111 OUT PLONGLONG SystemTime
2116 (NTAPI
*PFNKSPINRESOLUTION
)(
2118 OUT PKSRESOLUTION Resolution
2121 struct _KSCLOCK_DISPATCH
{
2122 PFNKSPINSETTIMER SetTimer
;
2123 PFNKSPINCANCELTIMER CancelTimer
;
2124 PFNKSPINCORRELATEDTIME CorrelatedTime
;
2125 PFNKSPINRESOLUTION Resolution
;
2130 (NTAPI
*PFNKSPININITIALIZEALLOCATOR
)(
2132 IN PKSALLOCATOR_FRAMING AllocatorFraming
,
2136 typedef PVOID (NTAPI
*PFNKSDELETEALLOCATOR
)(
2139 typedef PVOID (NTAPI
*PFNKSDEFAULTALLOCATE
)(
2142 typedef PVOID (NTAPI
*PFNKSDEFAULTFREE
)(
2146 struct _KSALLOCATOR_DISPATCH
{
2147 PFNKSPININITIALIZEALLOCATOR InitializeAllocator
;
2148 PFNKSDELETEALLOCATOR DeleteAllocator
;
2149 PFNKSDEFAULTALLOCATE Allocate
;
2150 PFNKSDEFAULTFREE Free
;
2155 ULONG PropertySetsCount
;
2156 ULONG PropertyItemSize
;
2157 const KSPROPERTY_SET
* PropertySets
;
2158 ULONG MethodSetsCount
;
2159 ULONG MethodItemSize
;
2160 const KSMETHOD_SET
* MethodSets
;
2161 ULONG EventSetsCount
;
2162 ULONG EventItemSize
;
2163 const KSEVENT_SET
* EventSets
;
2164 #if !defined(_WIN64)
2167 } KSAUTOMATION_TABLE
, *PKSAUTOMATION_TABLE
;
2173 ULONG InterfacesCount
;
2174 const KSPIN_INTERFACE
* Interfaces
;
2176 const KSPIN_MEDIUM
* Mediums
;
2177 ULONG DataRangesCount
;
2178 const PKSDATARANGE
* DataRanges
;
2179 KSPIN_DATAFLOW DataFlow
;
2180 KSPIN_COMMUNICATION Communication
;
2181 const GUID
* Category
;
2186 ULONG ConstrainedDataRangesCount
;
2187 PKSDATARANGE
* ConstrainedDataRanges
;
2190 } KSPIN_DESCRIPTOR
, *PKSPIN_DESCRIPTOR
;
2194 (NTAPI
*PFNKSINTERSECTHANDLER
)(
2197 IN PKSDATARANGE DataRange
,
2198 OUT PVOID Data OPTIONAL
2203 (NTAPI
*PFNKSINTERSECTHANDLEREX
)(
2207 IN PKSDATARANGE DataRange
,
2208 IN PKSDATARANGE MatchingDataRange
,
2209 IN ULONG DataBufferSize
,
2210 OUT PVOID Data OPTIONAL
,
2216 const KSPIN_DISPATCH
* Dispatch
;
2217 const KSAUTOMATION_TABLE
* AutomationTable
;
2218 KSPIN_DESCRIPTOR PinDescriptor
;
2220 ULONG InstancesPossible
;
2221 ULONG InstancesNecessary
;
2222 const KSALLOCATOR_FRAMING_EX
* AllocatorFraming
;
2223 PFNKSINTERSECTHANDLEREX IntersectHandler
;
2224 } KSPIN_DESCRIPTOR_EX
, *PKSPIN_DESCRIPTOR_EX
;
2226 #define KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING 0x00000001
2227 #define KSFILTER_FLAG_CRITICAL_PROCESSING 0x00000002
2228 #define KSFILTER_FLAG_HYPERCRITICAL_PROCESSING 0x00000004
2229 #define KSFILTER_FLAG_RECEIVE_ZERO_LENGTH_SAMPLES 0x00000008
2230 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
2231 #define KSFILTER_FLAG_DENY_USERMODE_ACCESS 0x80000000
2235 #define KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING
2236 #define KSPIN_FLAG_CRITICAL_PROCESSING KSFILTER_FLAG_CRITICAL_PROCESSING
2237 #define KSPIN_FLAG_HYPERCRITICAL_PROCESSING KSFILTER_FLAG_HYPERCRITICAL_PROCESSING
2238 #define KSPIN_FLAG_ASYNCHRONOUS_PROCESSING 0x00000008
2239 #define KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING 0x00000010
2240 #define KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL 0x00000020
2241 #define KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING 0x00000040
2242 #define KSPIN_FLAG_ENFORCE_FIFO 0x00000080
2244 #define KSPIN_FLAG_GENERATE_MAPPINGS 0x00000100
2245 #define KSPIN_FLAG_DISTINCT_TRAILING_EDGE 0x00000200
2247 #define KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY 0x00010000
2248 #define KSPIN_FLAG_SPLITTER 0x00020000
2249 #define KSPIN_FLAG_USE_STANDARD_TRANSPORT 0x00040000
2250 #define KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT 0x00080000
2251 #define KSPIN_FLAG_FIXED_FORMAT 0x00100000
2252 #define KSPIN_FLAG_GENERATE_EOS_EVENTS 0x00200000
2253 #define KSPIN_FLAG_RENDERER (KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY|KSPIN_FLAG_GENERATE_EOS_EVENTS)
2254 #define KSPIN_FLAG_IMPLEMENT_CLOCK 0x00400000
2255 #define KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING 0x00800000
2256 #define KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE 0x01000000
2257 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
2258 #define KSPIN_FLAG_DENY_USERMODE_ACCESS 0x80000000
2263 const KSPIN_DESCRIPTOR_EX
* Descriptor
;
2267 KSPIN_COMMUNICATION Communication
;
2268 BOOLEAN ConnectionIsExternal
;
2269 KSPIN_INTERFACE ConnectionInterface
;
2270 KSPIN_MEDIUM ConnectionMedium
;
2271 KSPRIORITY ConnectionPriority
;
2272 PKSDATAFORMAT ConnectionFormat
;
2273 PKSMULTIPLE_ITEM AttributeList
;
2274 ULONG StreamHeaderSize
;
2275 KSPIN_DATAFLOW DataFlow
;
2276 KSSTATE DeviceState
;
2278 KSSTATE ClientState
;
2281 #define DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(Handler)\
2282 DEFINE_KSPROPERTY_ITEM(\
2283 KSPROPERTY_PIN_CINSTANCES,\
2286 sizeof(KSPIN_CINSTANCES),\
2287 NULL, NULL, 0, NULL, NULL, 0)
2289 #define DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(Handler)\
2290 DEFINE_KSPROPERTY_ITEM(\
2291 KSPROPERTY_PIN_CTYPES,\
2293 sizeof(KSPROPERTY),\
2295 NULL, NULL, 0, NULL, NULL, 0)
2297 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(Handler)\
2298 DEFINE_KSPROPERTY_ITEM(\
2299 KSPROPERTY_PIN_DATAFLOW,\
2302 sizeof(KSPIN_DATAFLOW),\
2303 NULL, NULL, 0, NULL, NULL, 0)
2305 #define DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(Handler)\
2306 DEFINE_KSPROPERTY_ITEM(\
2307 KSPROPERTY_PIN_DATARANGES,\
2311 NULL, NULL, 0, NULL, NULL, 0)
2313 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(Handler)\
2314 DEFINE_KSPROPERTY_ITEM(\
2315 KSPROPERTY_PIN_DATAINTERSECTION,\
2317 sizeof(KSP_PIN) + sizeof(KSMULTIPLE_ITEM),\
2319 NULL, NULL, 0, NULL, NULL, 0)
2321 #define DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(Handler)\
2322 DEFINE_KSPROPERTY_ITEM(\
2323 KSPROPERTY_PIN_INTERFACES,\
2327 NULL, NULL, 0, NULL, NULL, 0)
2329 #define DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(Handler)\
2330 DEFINE_KSPROPERTY_ITEM(\
2331 KSPROPERTY_PIN_MEDIUMS,\
2335 NULL, NULL, 0, NULL, NULL, 0)
2337 #define DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(Handler)\
2338 DEFINE_KSPROPERTY_ITEM(\
2339 KSPROPERTY_PIN_COMMUNICATION,\
2342 sizeof(KSPIN_COMMUNICATION),\
2343 NULL, NULL, 0, NULL, NULL, 0)
2345 #define DEFINE_KSPROPERTY_ITEM_PIN_GLOBALCINSTANCES(Handler)\
2346 DEFINE_KSPROPERTY_ITEM(\
2347 KSPROPERTY_PIN_GLOBALCINSTANCES,\
2350 sizeof(KSPIN_CINSTANCES),\
2351 NULL, NULL, 0, NULL, NULL, 0)
2353 #define DEFINE_KSPROPERTY_ITEM_PIN_NECESSARYINSTANCES(Handler)\
2354 DEFINE_KSPROPERTY_ITEM(\
2355 KSPROPERTY_PIN_NECESSARYINSTANCES,\
2359 NULL, NULL, 0, NULL, NULL, 0)
2361 #define DEFINE_KSPROPERTY_ITEM_PIN_PHYSICALCONNECTION(Handler)\
2362 DEFINE_KSPROPERTY_ITEM(\
2363 KSPROPERTY_PIN_PHYSICALCONNECTION,\
2367 NULL, NULL, 0, NULL, NULL, 0)
2369 #define DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(Handler)\
2370 DEFINE_KSPROPERTY_ITEM(\
2371 KSPROPERTY_PIN_CATEGORY,\
2375 NULL, NULL, 0, NULL, NULL, 0)
2377 #define DEFINE_KSPROPERTY_ITEM_PIN_NAME(Handler)\
2378 DEFINE_KSPROPERTY_ITEM(\
2379 KSPROPERTY_PIN_NAME,\
2383 NULL, NULL, 0, NULL, NULL, 0)
2385 #define DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(Handler)\
2386 DEFINE_KSPROPERTY_ITEM(\
2387 KSPROPERTY_PIN_CONSTRAINEDDATARANGES,\
2391 NULL, NULL, 0, NULL, NULL, 0)
2393 #define DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(Handler)\
2394 DEFINE_KSPROPERTY_ITEM(\
2395 KSPROPERTY_PIN_PROPOSEDATAFORMAT,\
2398 sizeof(KSDATAFORMAT),\
2399 (Handler), NULL, 0, NULL, NULL, 0)
2401 #define DEFINE_KSPROPERTY_PINSET(PinSet,\
2402 PropGeneral, PropInstances, PropIntersection)\
2403 DEFINE_KSPROPERTY_TABLE(PinSet) {\
2404 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
2405 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
2406 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
2407 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
2408 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
2409 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
2410 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
2411 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
2412 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
2413 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral)\
2416 #define DEFINE_KSPROPERTY_PINSETCONSTRAINED(PinSet,\
2417 PropGeneral, PropInstances, PropIntersection)\
2418 DEFINE_KSPROPERTY_TABLE(PinSet) {\
2419 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
2420 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
2421 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
2422 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
2423 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
2424 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
2425 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
2426 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
2427 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
2428 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral),\
2429 DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral)\
2442 #define DEFINE_KSPROPERTY_TABLE(tablename)\
2443 const KSPROPERTY_ITEM tablename[] =
2449 KSPIN_INTERFACE Interface
;
2450 KSPIN_MEDIUM Medium
;
2453 KSPRIORITY Priority
;
2454 } KSPIN_CONNECT
, *PKSPIN_CONNECT
;
2456 /* ===============================================================
2466 } KSTOPOLOGY_CONNECTION
, *PKSTOPOLOGY_CONNECTION
;
2470 ULONG CategoriesCount
;
2471 const GUID
* Categories
;
2472 ULONG TopologyNodesCount
;
2473 const GUID
* TopologyNodes
;
2474 ULONG TopologyConnectionsCount
;
2475 const KSTOPOLOGY_CONNECTION
* TopologyConnections
;
2476 const GUID
* TopologyNodesNames
;
2478 } KSTOPOLOGY
, *PKSTOPOLOGY
;
2481 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler)\
2482 DEFINE_KSPROPERTY_ITEM(\
2483 KSPROPERTY_TOPOLOGY_CATEGORIES,\
2485 sizeof(KSPROPERTY),\
2487 NULL, NULL, 0, NULL, NULL, 0)
2489 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler)\
2490 DEFINE_KSPROPERTY_ITEM(\
2491 KSPROPERTY_TOPOLOGY_NODES,\
2493 sizeof(KSPROPERTY),\
2495 NULL, NULL, 0, NULL, NULL, 0)
2497 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler)\
2498 DEFINE_KSPROPERTY_ITEM(\
2499 KSPROPERTY_TOPOLOGY_CONNECTIONS,\
2501 sizeof(KSPROPERTY),\
2503 NULL, NULL, 0, NULL, NULL, 0)
2505 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\
2506 DEFINE_KSPROPERTY_ITEM(\
2507 KSPROPERTY_TOPOLOGY_NAME,\
2511 NULL, NULL, 0, NULL, NULL, 0)
2513 #define DEFINE_KSPROPERTY_TOPOLOGYSET(TopologySet, Handler)\
2514 DEFINE_KSPROPERTY_TABLE(TopologySet) {\
2515 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler),\
2516 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler),\
2517 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler),\
2518 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\
2521 /* ===============================================================
2526 typedef void* UNKNOWN
;
2528 typedef PVOID (NTAPI
*PFNKSINITIALIZEALLOCATOR
)(
2529 IN PVOID InitialContext
,
2530 IN PKSALLOCATOR_FRAMING AllocatorFraming
,
2531 OUT PVOID
* Context
);
2533 #if defined(_NTDDK_)
2534 typedef NTSTATUS (NTAPI
*PFNKSALLOCATOR
)(
2536 IN ULONG BufferSize
,
2537 IN BOOLEAN InputOperation
);
2539 typedef NTSTATUS (NTAPI
*PFNKINTERSECTHANDLEREX
)(
2543 IN PKSDATARANGE DataRange
,
2544 IN PKSDATARANGE MatchingDataRange
,
2545 IN ULONG DataBufferSize
,
2546 OUT PVOID Data OPTIONAL
,
2547 OUT PULONG DataSize
);
2552 (NTAPI
*PFNALLOCATOR_ALLOCATEFRAME
)(
2553 IN PFILE_OBJECT FileObject
,
2559 (NTAPI
*PFNALLOCATOR_FREEFRAME
)(
2560 IN PFILE_OBJECT FileObject
,
2565 PFNALLOCATOR_ALLOCATEFRAME AllocateFrame
;
2566 PFNALLOCATOR_FREEFRAME FreeFrame
;
2567 } KSSTREAMALLOCATOR_FUNCTIONTABLE
, *PKSSTREAMALLOCATOR_FUNCTIONTABLE
;
2573 KSALLOCATOR_FRAMING Framing
;
2574 ULONG AllocatedFrames
;
2576 } KSSTREAMALLOCATOR_STATUS
, *PKSSTREAMALLOCATOR_STATUS
;
2580 KSALLOCATOR_FRAMING_EX Framing
;
2581 ULONG AllocatedFrames
;
2583 } KSSTREAMALLOCATOR_STATUS_EX
, *PKSSTREAMALLOCATOR_STATUS_EX
;
2588 ULONG TypeSpecificFlags
;
2589 KSTIME PresentationTime
;
2598 } KSSTREAM_HEADER
, *PKSSTREAM_HEADER
;
2600 #define KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT 0x00000001
2601 #define KSSTREAM_HEADER_OPTIONSF_PREROLL 0x00000002
2602 #define KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY 0x00000004
2603 #define KSSTREAM_HEADER_OPTIONSF_TYPECHANGED 0x00000008
2604 #define KSSTREAM_HEADER_OPTIONSF_TIMEVALID 0x00000010
2605 #define KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY 0x00000040
2606 #define KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE 0x00000080
2607 #define KSSTREAM_HEADER_OPTIONSF_DURATIONVALID 0x00000100
2608 #define KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM 0x00000200
2609 #define KSSTREAM_HEADER_OPTIONSF_BUFFEREDTRANSFER 0x00000400
2610 #define KSSTREAM_HEADER_OPTIONSF_VRAM_DATA_TRANSFER 0x00000800
2611 #define KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA 0x80000000
2613 /* ===============================================================
2616 #if defined(_NTDDK_)
2618 PHYSICAL_ADDRESS PhysicalAddress
;
2625 KSSTREAM_POINTER_STATE_UNLOCKED
= 0,
2626 KSSTREAM_POINTER_STATE_LOCKED
2627 } KSSTREAM_POINTER_STATE
;
2629 typedef struct _KSGATE KSGATE
, *PKSGATE
;
2630 typedef struct _KSPROCESSPIN_INDEXENTRY KSPROCESSPIN_INDEXENTRY
, *PKSPROCESSPIN_INDEXENTRY
;
2637 struct _KSSTREAM_POINTER_OFFSET
2639 #if defined(_NTDDK_)
2642 PKSMAPPING Mappings
;
2647 #if !defined(_WIN64)
2653 #if defined(_NTDDK_)
2654 struct _KSSTREAM_POINTER
2658 PKSSTREAM_HEADER StreamHeader
;
2659 PKSSTREAM_POINTER_OFFSET Offset
;
2660 KSSTREAM_POINTER_OFFSET OffsetIn
;
2661 KSSTREAM_POINTER_OFFSET OffsetOut
;
2664 struct _KSPROCESSPIN
2667 PKSSTREAM_POINTER StreamPointer
;
2668 PKSPROCESSPIN InPlaceCounterpart
;
2669 PKSPROCESSPIN DelegateBranch
;
2670 PKSPROCESSPIN CopySource
;
2672 ULONG BytesAvailable
;
2678 struct _KSPROCESSPIN_INDEXENTRY
2680 PKSPROCESSPIN
* Pins
;
2685 /* ===============================================================
2691 #if defined(_NTDDK_)
2693 typedef struct _KSFILTER_DISPATCH KSFILTER_DISPATCH
, *PKSFILTER_DISPATCH
;
2694 typedef struct _KSDEVICE KSDEVICE
, *PKSDEVICE
;
2695 typedef struct _KSFILTER KSFILTER
, *PKSFILTER
;
2696 typedef struct _KSNODE_DESCRIPTOR KSNODE_DESCRIPTOR
, *PKSNODE_DESCRIPTOR
;
2697 typedef struct _KSFILTER_DESCRIPTOR KSFILTER_DESCRIPTOR
, *PKSFILTER_DESCRIPTOR
;
2698 typedef struct _KSDEVICE_DESCRIPTOR KSDEVICE_DESCRIPTOR
, *PKSDEVICE_DESCRIPTOR
;
2700 typedef NTSTATUS (NTAPI
*PFNKSDEVICECREATE
)(
2701 IN PKSDEVICE Device
);
2703 typedef NTSTATUS (NTAPI
*PFNKSDEVICEPNPSTART
)(
2704 IN PKSDEVICE Device
,
2706 IN PCM_RESOURCE_LIST TranslatedResourceList OPTIONAL
,
2707 IN PCM_RESOURCE_LIST UntranslatedResourceList OPTIONAL
);
2709 typedef NTSTATUS (NTAPI
*PFNKSDEVICE
)(
2710 IN PKSDEVICE Device
);
2712 typedef NTSTATUS (NTAPI
*PFNKSDEVICEIRP
)(
2713 IN PKSDEVICE Device
,
2716 typedef VOID (NTAPI
*PFNKSDEVICEIRPVOID
)(
2717 IN PKSDEVICE Device
,
2720 typedef NTSTATUS (NTAPI
*PFNKSDEVICEQUERYCAPABILITIES
)(
2721 IN PKSDEVICE Device
,
2723 IN OUT PDEVICE_CAPABILITIES Capabilities
);
2725 typedef NTSTATUS (NTAPI
*PFNKSDEVICEQUERYPOWER
)(
2726 IN PKSDEVICE Device
,
2728 IN DEVICE_POWER_STATE DeviceTo
,
2729 IN DEVICE_POWER_STATE DeviceFrom
,
2730 IN SYSTEM_POWER_STATE SystemTo
,
2731 IN SYSTEM_POWER_STATE SystemFrom
,
2732 IN POWER_ACTION Action
);
2734 typedef VOID (NTAPI
*PFNKSDEVICESETPOWER
)(
2735 IN PKSDEVICE Device
,
2737 IN DEVICE_POWER_STATE To
,
2738 IN DEVICE_POWER_STATE From
);
2740 typedef struct _KSDEVICE_DISPATCH
{
2741 PFNKSDEVICECREATE Add
;
2742 PFNKSDEVICEPNPSTART Start
;
2743 PFNKSDEVICE PostStart
;
2744 PFNKSDEVICEIRP QueryStop
;
2745 PFNKSDEVICEIRPVOID CancelStop
;
2746 PFNKSDEVICEIRPVOID Stop
;
2747 PFNKSDEVICEIRP QueryRemove
;
2748 PFNKSDEVICEIRPVOID CancelRemove
;
2749 PFNKSDEVICEIRPVOID Remove
;
2750 PFNKSDEVICEQUERYCAPABILITIES QueryCapabilities
;
2751 PFNKSDEVICEIRPVOID SurpriseRemoval
;
2752 PFNKSDEVICEQUERYPOWER QueryPower
;
2753 PFNKSDEVICESETPOWER SetPower
;
2754 PFNKSDEVICEIRP QueryInterface
;
2755 }KSDEVICE_DISPATCH
, *PKSDEVICE_DISPATCH
;
2757 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
2758 #define KSDEVICE_DESCRIPTOR_VERSION_2 (0x110)
2759 #define MIN_DEV_VER_FOR_FLAGS (0x110)
2764 const KSDEVICE_DESCRIPTOR
* Descriptor
;
2767 PDEVICE_OBJECT FunctionalDeviceObject
;
2768 PDEVICE_OBJECT PhysicalDeviceObject
;
2769 PDEVICE_OBJECT NextDeviceObject
;
2771 SYSTEM_POWER_STATE SystemPowerState
;
2772 DEVICE_POWER_STATE DevicePowerState
;
2776 /* ===============================================================
2779 #if defined(_NTDDK_)
2782 const KSFILTER_DESCRIPTOR
* Descriptor
;
2789 (NTAPI
*PFNKSFILTERPOWER
)(
2790 IN PKSFILTER Filter
,
2791 IN DEVICE_POWER_STATE State
2794 typedef NTSTATUS (NTAPI
*PFNKSFILTERIRP
)(
2795 IN PKSFILTER Filter
,
2798 typedef NTSTATUS (NTAPI
*PFNKSFILTERPROCESS
)(
2799 IN PKSFILTER Filter
,
2800 IN PKSPROCESSPIN_INDEXENTRY ProcessPinsIndex
);
2802 typedef NTSTATUS (NTAPI
*PFNKSFILTERVOID
)(
2803 IN PKSFILTER Filter
);
2805 struct _KSFILTER_DISPATCH
2807 PFNKSFILTERIRP Create
;
2808 PFNKSFILTERIRP Close
;
2809 PFNKSFILTERPROCESS Process
;
2810 PFNKSFILTERVOID Reset
;
2813 struct _KSNODE_DESCRIPTOR
2815 const KSAUTOMATION_TABLE
* AutomationTable
;
2820 struct _KSFILTER_DESCRIPTOR
2822 const KSFILTER_DISPATCH
* Dispatch
;
2823 const KSAUTOMATION_TABLE
* AutomationTable
;
2826 const GUID
* ReferenceGuid
;
2827 ULONG PinDescriptorsCount
;
2828 ULONG PinDescriptorSize
;
2829 const KSPIN_DESCRIPTOR_EX
* PinDescriptors
;
2830 ULONG CategoriesCount
;
2831 const GUID
* Categories
;
2832 ULONG NodeDescriptorsCount
;
2833 ULONG NodeDescriptorSize
;
2834 const KSNODE_DESCRIPTOR
* NodeDescriptors
;
2835 ULONG ConnectionsCount
;
2836 const KSTOPOLOGY_CONNECTION
* Connections
;
2837 const KSCOMPONENTID
* ComponentId
;
2840 #define KSFILTER_DESCRIPTOR_VERSION ((ULONG)-1)
2842 struct _KSDEVICE_DESCRIPTOR
2844 const KSDEVICE_DISPATCH
* Dispatch
;
2845 ULONG FilterDescriptorsCount
;
2846 const KSFILTER_DESCRIPTOR
*const* FilterDescriptors
;
2851 struct _KSFILTERFACTORY
{
2852 const KSFILTER_DESCRIPTOR
* FilterDescriptor
;
2857 #define DEFINE_KSFILTER_DESCRIPTOR(descriptor)\
2858 const KSFILTER_DESCRIPTOR descriptor =
2860 #define DEFINE_KSFILTER_PIN_DESCRIPTORS(table)\
2861 SIZEOF_ARRAY(table),\
2865 #define DEFINE_KSFILTER_CATEGORIES(table)\
2866 SIZEOF_ARRAY(table),\
2869 #define DEFINE_KSFILTER_CATEGORY(category)\
2873 #define DEFINE_KSFILTER_CATEGORIES_NULL\
2877 #define DEFINE_KSFILTER_NODE_DESCRIPTORS(table)\
2878 SIZEOF_ARRAY(table),\
2882 #define DEFINE_KSFILTER_NODE_DESCRIPTORS_NULL\
2884 sizeof(KSNODE_DESCRIPTOR),\
2887 #define DEFINE_KSFILTER_CONNECTIONS(table)\
2888 SIZEOF_ARRAY(table),\
2891 #define DEFINE_KSFILTER_DEFAULT_CONNECTIONS\
2896 /* ===============================================================
2897 Minidriver Callbacks
2899 #if defined(_NTDDK_)
2900 typedef NTSTATUS (NTAPI
*KStrMethodHandler
)(
2902 IN PKSIDENTIFIER Request
,
2905 typedef NTSTATUS (NTAPI
*KStrSupportHandler
)(
2907 IN PKSIDENTIFIER Request
,
2911 /* ===============================================================
2914 #if defined(_NTDDK_)
2915 KSDDKAPI NTSTATUS NTAPI
2917 IN HANDLE ConnectionHandle
,
2918 IN PKSALLOCATOR_FRAMING AllocatorFraming
,
2919 OUT PHANDLE AllocatorHandle
);
2921 KSDDKAPI NTSTATUS NTAPI
2922 KsCreateDefaultAllocator(
2925 KSDDKAPI NTSTATUS NTAPI
2926 KsValidateAllocatorCreateRequest(
2928 OUT PKSALLOCATOR_FRAMING
* AllocatorFraming
);
2930 KSDDKAPI NTSTATUS NTAPI
2931 KsCreateDefaultAllocatorEx(
2933 IN PVOID InitializeContext OPTIONAL
,
2934 IN PFNKSDEFAULTALLOCATE DefaultAllocate OPTIONAL
,
2935 IN PFNKSDEFAULTFREE DefaultFree OPTIONAL
,
2936 IN PFNKSINITIALIZEALLOCATOR InitializeAllocator OPTIONAL
,
2937 IN PFNKSDELETEALLOCATOR DeleteAllocator OPTIONAL
);
2939 KSDDKAPI NTSTATUS NTAPI
2940 KsValidateAllocatorFramingEx(
2941 IN PKSALLOCATOR_FRAMING_EX Framing
,
2942 IN ULONG BufferSize
,
2943 IN
const KSALLOCATOR_FRAMING_EX
* PinFraming
);
2946 /* ===============================================================
2949 #if defined(_NTDDK_)
2950 typedef BOOLEAN (NTAPI
*PFNKSSETTIMER
)(
2953 IN LARGE_INTEGER DueTime
,
2956 typedef BOOLEAN (NTAPI
*PFNKSCANCELTIMER
)(
2960 typedef LONGLONG (FASTCALL
*PFNKSCORRELATEDTIME
)(
2962 OUT PLONGLONG SystemTime
);
2964 KSDDKAPI NTSTATUS NTAPI
2966 IN HANDLE ConnectionHandle
,
2967 IN PKSCLOCK_CREATE ClockCreate
,
2968 OUT PHANDLE ClockHandle
);
2970 KSDDKAPI NTSTATUS NTAPI
2971 KsCreateDefaultClock(
2973 IN PKSDEFAULTCLOCK DefaultClock
);
2975 KSDDKAPI NTSTATUS NTAPI
2976 KsAllocateDefaultClock(
2977 OUT PKSDEFAULTCLOCK
* DefaultClock
);
2979 KSDDKAPI NTSTATUS NTAPI
2980 KsAllocateDefaultClockEx(
2981 OUT PKSDEFAULTCLOCK
* DefaultClock
,
2982 IN PVOID Context OPTIONAL
,
2983 IN PFNKSSETTIMER SetTimer OPTIONAL
,
2984 IN PFNKSCANCELTIMER CancelTimer OPTIONAL
,
2985 IN PFNKSCORRELATEDTIME CorrelatedTime OPTIONAL
,
2986 IN
const KSRESOLUTION
* Resolution OPTIONAL
,
2991 IN PKSDEFAULTCLOCK DefaultClock
);
2993 KSDDKAPI NTSTATUS NTAPI
2994 KsValidateClockCreateRequest(
2996 OUT PKSCLOCK_CREATE
* ClockCreate
);
2998 KSDDKAPI KSSTATE NTAPI
2999 KsGetDefaultClockState(
3000 IN PKSDEFAULTCLOCK DefaultClock
);
3003 KsSetDefaultClockState(
3004 IN PKSDEFAULTCLOCK DefaultClock
,
3007 KSDDKAPI LONGLONG NTAPI
3008 KsGetDefaultClockTime(
3009 IN PKSDEFAULTCLOCK DefaultClock
);
3012 KsSetDefaultClockTime(
3013 IN PKSDEFAULTCLOCK DefaultClock
,
3017 /* ===============================================================
3021 /* Method sets - TODO: Make into macros! */
3022 #if defined(_NTDDK_)
3025 KSMETHOD_SET_IRP_STORAGE(
3029 KSMETHOD_ITEM_IRP_STORAGE(
3033 KSMETHOD_TYPE_IRP_STORAGE(
3037 KSDDKAPI NTSTATUS NTAPI
3040 IN ULONG MethodSetsCount
,
3041 IN PKSMETHOD_SET MethodSet
);
3043 KSDDKAPI NTSTATUS NTAPI
3044 KsMethodHandlerWithAllocator(
3046 IN ULONG MethodSetsCount
,
3047 IN PKSMETHOD_SET MethodSet
,
3048 IN PFNKSALLOCATOR Allocator OPTIONAL
,
3049 IN ULONG MethodItemSize OPTIONAL
);
3051 KSDDKAPI BOOLEAN NTAPI
3052 KsFastMethodHandler(
3053 IN PFILE_OBJECT FileObject
,
3054 IN PKSMETHOD UNALIGNED Method
,
3055 IN ULONG MethodLength
,
3056 IN OUT PVOID UNALIGNED Data
,
3057 IN ULONG DataLength
,
3058 OUT PIO_STATUS_BLOCK IoStatus
,
3059 IN ULONG MethodSetsCount
,
3060 IN
const KSMETHOD_SET
* MethodSet
);
3063 /* ===============================================================
3066 #if defined(_NTDDK_)
3067 KSDDKAPI NTSTATUS NTAPI
3070 IN ULONG PropertySetsCount
,
3071 IN
const KSPROPERTY_SET
* PropertySet
);
3073 KSDDKAPI NTSTATUS NTAPI
3074 KsPropertyHandlerWithAllocator(
3076 IN ULONG PropertySetsCount
,
3077 IN PKSPROPERTY_SET PropertySet
,
3078 IN PFNKSALLOCATOR Allocator OPTIONAL
,
3079 IN ULONG PropertyItemSize OPTIONAL
);
3081 KSDDKAPI NTSTATUS NTAPI
3082 KsUnserializeObjectPropertiesFromRegistry(
3083 IN PFILE_OBJECT FileObject
,
3084 IN HANDLE ParentKey OPTIONAL
,
3085 IN PUNICODE_STRING RegistryPath OPTIONAL
);
3087 KSDDKAPI BOOLEAN NTAPI
3088 KsFastPropertyHandler(
3089 IN PFILE_OBJECT FileObject
,
3090 IN PKSPROPERTY UNALIGNED Property
,
3091 IN ULONG PropertyLength
,
3092 IN OUT PVOID UNALIGNED Data
,
3093 IN ULONG DataLength
,
3094 OUT PIO_STATUS_BLOCK IoStatus
,
3095 IN ULONG PropertySetsCount
,
3096 IN
const KSPROPERTY_SET
* PropertySet
);
3099 /* ===============================================================
3102 #if defined(_NTDDK_)
3104 #define KSPROBE_STREAMREAD 0x00000000
3105 #define KSPROBE_STREAMWRITE 0x00000001
3106 #define KSPROBE_ALLOCATEMDL 0x00000010
3107 #define KSPROBE_PROBEANDLOCK 0x00000020
3108 #define KSPROBE_SYSTEMADDRESS 0x00000040
3109 #define KSPROBE_MODIFY 0x00000200
3110 #define KSPROBE_STREAMWRITEMODIFY (KSPROBE_MODIFY | KSPROBE_STREAMWRITE)
3111 #define KSPROBE_ALLOWFORMATCHANGE 0x00000080
3113 #define KSSTREAM_READ KSPROBE_STREAMREAD
3114 #define KSSTREAM_WRITE KSPROBE_STREAMWRITE
3115 #define KSSTREAM_PAGED_DATA 0x00000000
3116 #define KSSTREAM_NONPAGED_DATA 0x00000100
3117 #define KSSTREAM_SYNCHRONOUS 0x00001000
3118 #define KSSTREAM_FAILUREEXCEPTION 0x00002000
3122 (NTAPI
*PFNKSGENERATEEVENTCALLBACK
)(
3124 IN PKSEVENT_ENTRY EventEntry
3127 KSDDKAPI NTSTATUS NTAPI
3129 IN PKSEVENT_ENTRY EntryEvent
);
3134 IN
const GUID
* EventSet OPTIONAL
,
3137 IN PVOID Data OPTIONAL
,
3138 IN PFNKSGENERATEEVENTCALLBACK CallBack OPTIONAL
,
3139 IN PVOID CallBackContext OPTIONAL
3143 KSDDKAPI NTSTATUS NTAPI
3144 KsEnableEventWithAllocator(
3146 IN ULONG EventSetsCount
,
3147 IN PKSEVENT_SET EventSet
,
3148 IN OUT PLIST_ENTRY EventsList OPTIONAL
,
3149 IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL
,
3150 IN PVOID EventsLock OPTIONAL
,
3151 IN PFNKSALLOCATOR Allocator OPTIONAL
,
3152 IN ULONG EventItemSize OPTIONAL
);
3154 KSDDKAPI NTSTATUS NTAPI
3155 KsGenerateDataEvent(
3156 IN PKSEVENT_ENTRY EventEntry
,
3160 KSDDKAPI NTSTATUS NTAPI
3163 IN ULONG EventSetsCount
,
3164 IN KSEVENT_SET
* EventSet
,
3165 IN OUT PLIST_ENTRY EventsList OPTIONAL
,
3166 IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL
,
3167 IN PVOID EventsLock OPTIONAL
);
3171 IN PKSEVENT_ENTRY EventEntry
);
3173 KSDDKAPI NTSTATUS NTAPI
3176 IN OUT PLIST_ENTRY EventsList
,
3177 IN KSEVENTS_LOCKTYPE EventsFlags
,
3178 IN PVOID EventsLock
);
3182 IN PFILE_OBJECT FileObject
,
3183 IN OUT PLIST_ENTRY EventsList
,
3184 IN KSEVENTS_LOCKTYPE EVentsFlags
,
3185 IN PVOID EventsLock
);
3187 /* ===============================================================
3191 KSDDKAPI NTSTATUS NTAPI
3192 KsValidateTopologyNodeCreateRequest(
3194 IN PKSTOPOLOGY Topology
,
3195 OUT PKSNODE_CREATE
* NodeCreate
);
3197 KSDDKAPI NTSTATUS NTAPI
3198 KsCreateTopologyNode(
3199 IN HANDLE ParentHandle
,
3200 IN PKSNODE_CREATE NodeCreate
,
3201 IN ACCESS_MASK DesiredAccess
,
3202 OUT PHANDLE NodeHandle
);
3204 KSDDKAPI NTSTATUS NTAPI
3205 KsTopologyPropertyHandler(
3207 IN PKSPROPERTY Property
,
3209 IN
const KSTOPOLOGY
* Topology
);
3213 /* ===============================================================
3214 Connectivity Functions
3217 KSDDKAPI NTSTATUS NTAPI
3219 IN HANDLE FilterHandle
,
3220 IN PKSPIN_CONNECT Connect
,
3221 IN ACCESS_MASK DesiredAccess
,
3222 OUT PHANDLE ConnectionHandle
);
3224 KSDDKAPI NTSTATUS NTAPI
3225 KsValidateConnectRequest(
3227 IN ULONG DescriptorsCount
,
3228 IN KSPIN_DESCRIPTOR
* Descriptor
,
3229 OUT PKSPIN_CONNECT
* Connect
);
3231 KSDDKAPI NTSTATUS NTAPI
3232 KsPinPropertyHandler(
3234 IN PKSPROPERTY Property
,
3236 IN ULONG DescriptorsCount
,
3237 IN
const KSPIN_DESCRIPTOR
* Descriptor
);
3239 KSDDKAPI NTSTATUS NTAPI
3240 KsPinDataIntersection(
3244 IN ULONG DescriptorsCount
,
3245 IN
const KSPIN_DESCRIPTOR
* Descriptor
,
3246 IN PFNKSINTERSECTHANDLER IntersectHandler
);
3248 KSDDKAPI NTSTATUS NTAPI
3249 KsPinDataIntersectionEx(
3253 IN ULONG DescriptorsCount
,
3254 IN
const KSPIN_DESCRIPTOR
* Descriptor
,
3255 IN ULONG DescriptorSize
,
3256 IN PFNKSINTERSECTHANDLEREX IntersectHandler OPTIONAL
,
3257 IN PVOID HandlerContext OPTIONAL
);
3259 KSDDKAPI PKSFILTER NTAPI
3260 KsPinGetParentFilter(
3264 KSDDKAPI PKSPIN NTAPI
3265 KsPinGetNextSiblingPin(
3270 /* Does this belong here? */
3272 KSDDKAPI NTSTATUS NTAPI
3273 KsHandleSizedListQuery(
3275 IN ULONG DataItemsCount
,
3276 IN ULONG DataItemSize
,
3277 IN
const VOID
* DataItems
);
3280 /* ===============================================================
3281 IRP Helper Functions
3284 typedef NTSTATUS (NTAPI
*PFNKSIRPLISTCALLBACK
)(
3288 KSDDKAPI NTSTATUS NTAPI
3289 KsAcquireResetValue(
3291 OUT KSRESET
* ResetValue
);
3294 KsAddIrpToCancelableQueue(
3295 IN OUT PLIST_ENTRY QueueHead
,
3296 IN PKSPIN_LOCK SpinLock
,
3298 IN KSLIST_ENTRY_LOCATION ListLocation
,
3299 IN PDRIVER_CANCEL DriverCancel OPTIONAL
);
3301 KSDDKAPI NTSTATUS NTAPI
3302 KsAddObjectCreateItemToDeviceHeader(
3303 IN KSDEVICE_HEADER Header
,
3304 IN PDRIVER_DISPATCH Create
,
3306 IN PWCHAR ObjectClass
,
3307 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
3309 KSDDKAPI NTSTATUS NTAPI
3310 KsAddObjectCreateItemToObjectHeader(
3311 IN KSOBJECT_HEADER Header
,
3312 IN PDRIVER_DISPATCH Create
,
3314 IN PWCHAR ObjectClass
,
3315 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
3317 KSDDKAPI NTSTATUS NTAPI
3318 KsAllocateDeviceHeader(
3319 OUT KSDEVICE_HEADER
* Header
,
3320 IN ULONG ItemsCount
,
3321 IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL
);
3323 KSDDKAPI NTSTATUS NTAPI
3324 KsAllocateExtraData(
3327 OUT PVOID
* ExtraBuffer
);
3329 KSDDKAPI NTSTATUS NTAPI
3330 KsAllocateObjectCreateItem(
3331 IN KSDEVICE_HEADER Header
,
3332 IN PKSOBJECT_CREATE_ITEM CreateItem
,
3333 IN BOOLEAN AllocateEntry
,
3334 IN PFNKSITEMFREECALLBACK ItemFreeCallback OPTIONAL
);
3336 KSDDKAPI NTSTATUS NTAPI
3337 KsAllocateObjectHeader(
3338 OUT KSOBJECT_HEADER
*Header
,
3339 IN ULONG ItemsCount
,
3340 IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL
,
3342 IN KSDISPATCH_TABLE
* Table
);
3346 IN OUT PLIST_ENTRY QueueHead
,
3347 IN PKSPIN_LOCK SpinLock
);
3351 IN PDEVICE_OBJECT DeviceObject
,
3354 KSDDKAPI NTSTATUS NTAPI
3355 KsDefaultDeviceIoCompletion(
3356 IN PDEVICE_OBJECT DeviceObject
,
3360 KSDDKAPI ULONG NTAPI
3361 KsDecrementCountedWorker(
3362 IN PKSWORKER Worker);
3365 KSDDKAPI BOOLEAN NTAPI
3366 KsDispatchFastIoDeviceControlFailure(
3367 IN PFILE_OBJECT FileObject
,
3369 IN PVOID InputBuffer OPTIONAL
,
3370 IN ULONG InputBufferLength
,
3371 OUT PVOID OutputBuffer OPTIONAL
,
3372 IN ULONG OutputBufferLength
,
3373 IN ULONG IoControlCode
,
3374 OUT PIO_STATUS_BLOCK IoStatus
,
3375 IN PDEVICE_OBJECT DeviceObject
); /* always return false */
3377 KSDDKAPI BOOLEAN NTAPI
3378 KsDispatchFastReadFailure(
3379 IN PFILE_OBJECT FileObject
,
3380 IN PLARGE_INTEGER FileOffset
,
3385 OUT PIO_STATUS_BLOCK IoStatus
,
3386 IN PDEVICE_OBJECT DeviceObject
); /* always return false */
3388 /* This function does the same as the above */
3389 #define KsDispatchFastWriteFailure KsDispatchFastReadFailure
3391 KSDDKAPI NTSTATUS NTAPI
3392 KsDispatchInvalidDeviceRequest(
3393 IN PDEVICE_OBJECT DeviceObject
,
3396 KSDDKAPI NTSTATUS NTAPI
3398 IN PDEVICE_OBJECT DeviceObject
,
3401 KSDDKAPI NTSTATUS NTAPI
3402 KsDispatchSpecificMethod(
3404 IN PFNKSHANDLER Handler
);
3406 KSDDKAPI NTSTATUS NTAPI
3407 KsDispatchSpecificProperty(
3409 IN PFNKSHANDLER Handler
);
3411 KSDDKAPI NTSTATUS NTAPI
3412 KsForwardAndCatchIrp(
3413 IN PDEVICE_OBJECT DeviceObject
,
3415 IN PFILE_OBJECT FileObject
,
3416 IN KSSTACK_USE StackUse
);
3418 KSDDKAPI NTSTATUS NTAPI
3421 IN PFILE_OBJECT FileObject
,
3422 IN BOOLEAN ReuseStackLocation
);
3426 IN KSDEVICE_HEADER Header
);
3432 KSDDKAPI NTSTATUS NTAPI
3433 KsGetChildCreateParameter(
3435 OUT PVOID
* CreateParameter
);
3437 KSDDKAPI NTSTATUS NTAPI
3438 KsMoveIrpsOnCancelableQueue(
3439 IN OUT PLIST_ENTRY SourceList
,
3440 IN PKSPIN_LOCK SourceLock
,
3441 IN OUT PLIST_ENTRY DestinationList
,
3442 IN PKSPIN_LOCK DestinationLock OPTIONAL
,
3443 IN KSLIST_ENTRY_LOCATION ListLocation
,
3444 IN PFNKSIRPLISTCALLBACK ListCallback
,
3447 KSDDKAPI NTSTATUS NTAPI
3450 IN ULONG ProbeFlags
,
3451 IN ULONG HeaderSize
);
3453 KSDDKAPI NTSTATUS NTAPI
3454 KsQueryInformationFile(
3455 IN PFILE_OBJECT FileObject
,
3456 OUT PVOID FileInformation
,
3458 IN FILE_INFORMATION_CLASS FileInformationClass
);
3460 KSDDKAPI ACCESS_MASK NTAPI
3461 KsQueryObjectAccessMask(
3462 IN KSOBJECT_HEADER Header
);
3464 KSDDKAPI PKSOBJECT_CREATE_ITEM NTAPI
3465 KsQueryObjectCreateItem(
3466 IN KSOBJECT_HEADER Header
);
3468 KSDDKAPI NTSTATUS NTAPI
3470 IN PFILE_OBJECT FileObject
,
3471 IN PKEVENT Event OPTIONAL
,
3472 IN PVOID PortContext OPTIONAL
,
3473 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3476 IN ULONG Key OPTIONAL
,
3477 IN KPROCESSOR_MODE RequestorMode
);
3480 KsReleaseIrpOnCancelableQueue(
3482 IN PDRIVER_CANCEL DriverCancel OPTIONAL
);
3485 KsRemoveIrpFromCancelableQueue(
3486 IN OUT PLIST_ENTRY QueueHead
,
3487 IN PKSPIN_LOCK SpinLock
,
3488 IN KSLIST_ENTRY_LOCATION ListLocation
,
3489 IN KSIRP_REMOVAL_OPERATION RemovalOperation
);
3492 KsRemoveSpecificIrpFromCancelableQueue(
3495 KSDDKAPI NTSTATUS NTAPI
3496 KsSetInformationFile(
3497 IN PFILE_OBJECT FileObject
,
3498 IN PVOID FileInformation
,
3500 IN FILE_INFORMATION_CLASS FileInformationClass
);
3502 KSDDKAPI NTSTATUS NTAPI
3503 KsSetMajorFunctionHandler(
3504 IN PDRIVER_OBJECT DriverObject
,
3505 IN ULONG MajorFunction
);
3507 KSDDKAPI NTSTATUS NTAPI
3509 IN PFILE_OBJECT FileObject
,
3510 IN PKEVENT Event OPTIONAL
,
3511 IN PVOID PortContext OPTIONAL
,
3512 IN PIO_COMPLETION_ROUTINE CompletionRoutine OPTIONAL
,
3513 IN PVOID CompletionContext OPTIONAL
,
3514 IN KSCOMPLETION_INVOCATION CompletionInvocationFlags OPTIONAL
,
3515 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3516 IN OUT PVOID StreamHeaders
,
3519 IN KPROCESSOR_MODE RequestorMode
);
3521 KSDDKAPI NTSTATUS NTAPI
3523 IN PFILE_OBJECT FileObject
,
3524 IN PKEVENT Event OPTIONAL
,
3525 IN PVOID PortContext OPTIONAL
,
3526 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3529 IN ULONG Key OPTIONAL
,
3530 IN KPROCESSOR_MODE RequestorMode
);
3533 KSDDKAPI NTSTATUS NTAPI
3534 KsDefaultForwardIrp(
3535 IN PDEVICE_OBJECT DeviceObject
,
3538 /* ===============================================================
3539 Worker Management Functions
3542 KSDDKAPI NTSTATUS NTAPI
3544 IN WORK_QUEUE_TYPE WorkQueueType
,
3545 OUT PKSWORKER
* Worker
);
3549 IN PKSWORKER Worker
);
3551 KSDDKAPI NTSTATUS NTAPI
3552 KsRegisterCountedWorker(
3553 IN WORK_QUEUE_TYPE WorkQueueType
,
3554 IN PWORK_QUEUE_ITEM CountedWorkItem
,
3555 OUT PKSWORKER
* Worker
);
3557 KSDDKAPI ULONG NTAPI
3558 KsDecrementCountedWorker(
3559 IN PKSWORKER Worker
);
3561 KSDDKAPI ULONG NTAPI
3562 KsIncrementCountedWorker(
3563 IN PKSWORKER Worker
);
3565 KSDDKAPI NTSTATUS NTAPI
3567 IN PKSWORKER Worker
,
3568 IN PWORK_QUEUE_ITEM WorkItem
);
3571 /* ===============================================================
3575 KSDDKAPI NTSTATUS NTAPI
3578 IN POOL_TYPE PoolType
,
3579 IN ULONG_PTR ResourceName
,
3580 IN ULONG ResourceType
,
3581 OUT PVOID
* Resource
,
3582 OUT PULONG ResourceSize
);
3585 KSDDKAPI NTSTATUS NTAPI
3586 KsGetImageNameAndResourceId(
3588 OUT PUNICODE_STRING ImageName,
3589 OUT PULONG_PTR ResourceId,
3590 OUT PULONG ValueType);
3592 KSDDKAPI NTSTATUS NTAPI
3594 IN PDEVICE_OBJECT PhysicalDeviceObject,
3595 IN PUNICODE_STRING ModuleName,
3596 OUT PUNICODE_STRING ImageName,
3597 OUT PULONG_PTR ResourceId,
3598 OUT PULONG ValueType);
3602 /* ===============================================================
3603 Misc. Helper Functions
3606 KSDDKAPI PVOID NTAPI
3611 KSDDKAPI NTSTATUS NTAPI
3613 IN PUNICODE_STRING SymbolicLink
,
3614 IN PKSPIN_MEDIUM Medium
,
3615 IN ULONG PinDirection
);
3617 KSDDKAPI NTSTATUS NTAPI
3618 KsDefaultDispatchPnp(
3619 IN PDEVICE_OBJECT DeviceObject
,
3623 KsSetDevicePnpAndBaseObject(
3624 IN KSDEVICE_HEADER Header
,
3625 IN PDEVICE_OBJECT PnpDeviceObject
,
3626 IN PDEVICE_OBJECT BaseDevice
);
3628 KSDDKAPI NTSTATUS NTAPI
3629 KsDefaultDispatchPower(
3630 IN PDEVICE_OBJECT DeviceObject
,
3635 IN KSOBJECT_HEADER Header
,
3636 IN PFNKSCONTEXT_DISPATCH PowerDispatch OPTIONAL
,
3637 IN PVOID PowerContext OPTIONAL
);
3639 KSDDKAPI NTSTATUS NTAPI
3640 KsReferenceBusObject(
3641 IN KSDEVICE_HEADER Header
);
3644 KsDereferenceBusObject(
3645 IN KSDEVICE_HEADER Header
);
3647 KSDDKAPI NTSTATUS NTAPI
3648 KsFreeObjectCreateItem(
3649 IN KSDEVICE_HEADER Header
,
3650 IN PUNICODE_STRING CreateItem
);
3652 KSDDKAPI NTSTATUS NTAPI
3653 KsFreeObjectCreateItemsByContext(
3654 IN KSDEVICE_HEADER Header
,
3659 IN PDRIVER_OBJECT DriverObject
);
3661 KSDDKAPI PDEVICE_OBJECT NTAPI
3662 KsQueryDevicePnpObject(
3663 IN KSDEVICE_HEADER Header
);
3666 KsRecalculateStackDepth(
3667 IN KSDEVICE_HEADER Header
,
3668 IN BOOLEAN ReuseStackLocation
);
3671 KsSetTargetDeviceObject(
3672 IN KSOBJECT_HEADER Header
,
3673 IN PDEVICE_OBJECT TargetDevice OPTIONAL
);
3677 IN KSOBJECT_HEADER Header
,
3678 IN KSTARGET_STATE TargetState
);
3680 KSDDKAPI NTSTATUS NTAPI
3681 KsSynchronousIoControlDevice(
3682 IN PFILE_OBJECT FileObject
,
3683 IN KPROCESSOR_MODE RequestorMode
,
3687 OUT PVOID OutBuffer
,
3689 OUT PULONG BytesReturned
);
3694 KsFilterGetFirstChildPin(
3695 IN PKSFILTER Filter
,
3702 KsPinGetConnectedPinFileObject(
3709 /* ===============================================================
3710 AVStream Functions (XP / DirectX 8)
3712 http://www.osronline.com/ddkx/stream/avstream_5q9f.htm
3715 #if defined(_NTDDK_)
3720 KsMergeAutomationTables(
3721 OUT PKSAUTOMATION_TABLE
* AutomationTableAB
,
3722 IN PKSAUTOMATION_TABLE AutomationTableA OPTIONAL
,
3723 IN PKSAUTOMATION_TABLE AutomationTableB OPTIONAL
,
3724 IN KSOBJECT_BAG Bag OPTIONAL
3731 IN PDRIVER_OBJECT DriverObject
,
3732 IN PUNICODE_STRING RegistryPath
,
3733 IN
const KSDEVICE_DESCRIPTOR
*Descriptor OPTIONAL
);
3735 typedef struct _KSFILTERFACTORY KSFILTERFACTORY
, *PKSFILTERFACTORY
; //FIXME
3742 KsInitializeDevice (
3743 IN PDEVICE_OBJECT FunctionalDeviceObject
,
3744 IN PDEVICE_OBJECT PhysicalDeviceObject
,
3745 IN PDEVICE_OBJECT NextDeviceObject
,
3746 IN
const KSDEVICE_DESCRIPTOR
* Descriptor OPTIONAL
);
3749 typedef void (NTAPI
*PFNKSFILTERFACTORYPOWER
)(
3750 IN PKSFILTERFACTORY FilterFactory
,
3751 IN DEVICE_POWER_STATE State
);
3757 IN KSOBJECT_BAG ObjectBag
,
3758 IN OUT PVOID
* PointerToPointerToItem
,
3773 IN PKSDEVICE Device
);
3779 IN PDRIVER_OBJECT DriverObject
,
3780 IN PDEVICE_OBJECT PhysicalDeviceObject
);
3787 IN PKSEVENT_ENTRY EventEntry
);
3792 KsAddItemToObjectBag(
3793 IN KSOBJECT_BAG ObjectBag
,
3795 IN PFNKSFREE Free OPTIONAL
);
3800 KsRemoveItemFromObjectBag(
3801 IN KSOBJECT_BAG ObjectBag
,
3808 KsAllocateObjectBag(
3809 IN PKSDEVICE Device
,
3810 OUT KSOBJECT_BAG
* ObjectBag
);
3816 IN KSOBJECT_BAG ObjectBag
3822 KsCompletePendingRequest(
3828 KsCopyObjectBagItems(
3829 IN KSOBJECT_BAG ObjectBagDestination
,
3830 IN KSOBJECT_BAG ObjectBagSource
);
3836 IN PDRIVER_OBJECT DriverObject
,
3837 IN PDEVICE_OBJECT PhysicalDeviceObject
,
3838 IN
const KSDEVICE_DESCRIPTOR
* Descriptor OPTIONAL
,
3839 IN ULONG ExtensionSize OPTIONAL
,
3840 OUT PKSDEVICE
* Device OPTIONAL
);
3845 KsCreateFilterFactory(
3846 IN PDEVICE_OBJECT DeviceObject
,
3847 IN
const KSFILTER_DESCRIPTOR
* Descriptor
,
3848 IN PWCHAR RefString OPTIONAL
,
3849 IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL
,
3850 IN ULONG CreateItemFlags
,
3851 IN PFNKSFILTERFACTORYPOWER SleepCallback OPTIONAL
,
3852 IN PFNKSFILTERFACTORYPOWER WakeCallback OPTIONAL
,
3853 OUT PKSFILTERFACTORY
*FilterFactory OPTIONAL
);
3858 KsFilterFactoryUpdateCacheData(
3859 IN PKSFILTERFACTORY FilterFactory
,
3860 IN
const KSFILTER_DESCRIPTOR
*FilterDescriptor OPTIONAL
3880 KsDefaultAddEventHandler(
3882 IN PKSEVENTDATA EventData
,
3883 IN OUT PKSEVENT_ENTRY EventEntry
);
3888 KsDispatchQuerySecurity(
3889 IN PDEVICE_OBJECT DeviceObject
,
3896 KsDispatchSetSecurity(
3897 IN PDEVICE_OBJECT DeviceObject
,
3912 KsFilterGetParentFilterFactory(
3916 return (PKSFILTERFACTORY
) KsGetParent((PVOID
) Filter
);
3922 KsFilterFactoryGetParentDevice(
3923 IN PKSFILTERFACTORY FilterFactory
3926 return (PKSDEVICE
) KsGetParent((PVOID
) FilterFactory
);
3931 #define KsDeleteFilterFactory(FilterFactory) \
3932 KsFreeObjectCreateItemsByContext( \
3933 *(KSDEVICE_HEADER *)( \
3934 KsFilterFactoryGetParentDevice(FilterFactory)->FunctionalDeviceObject-> \
3942 IN PKSDEVICE Device
,
3959 KsDeviceGetFirstChildFilterFactory(
3960 IN PKSDEVICE Device
);
3962 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
3974 KsDeviceGetOuterUnknown(
3975 IN PKSDEVICE Device
)
3977 return KsGetOuterUnknown((PVOID
) Device
);
3983 KsDeviceRegisterAggregatedClientUnknown(
3984 IN PKSDEVICE Device
,
3985 IN PUNKNOWN ClientUnknown
);
3990 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
3992 typedef interface IKsReferenceClock
* PIKSREFERENCECLOCK
;
3995 #define INTERFACE IKsReferenceClock
3996 DECLARE_INTERFACE_(IKsReferenceClock
,IUnknown
)
3998 DEFINE_ABSTRACT_UNKNOWN() // For C
4000 STDMETHOD_(LONGLONG
,GetTime
)(THIS
4002 STDMETHOD_(LONGLONG
,GetPhysicalTime
)(THIS
4004 STDMETHOD_(LONGLONG
,GetCorrelatedTime
)(THIS_
4005 OUT PLONGLONG SystemTime
4007 STDMETHOD_(LONGLONG
,GetCorrelatedPhysicalTime
)(THIS_
4008 OUT PLONGLONG SystemTime
4010 STDMETHOD_(NTSTATUS
, GetResolution
)(THIS_
4011 OUT PKSRESOLUTION Resolution
4013 STDMETHOD_(NTSTATUS
, GetState
)(THIS_
4019 #define INTERFACE IKsControl
4021 DEFINE_GUID(IID_IKsControl
, 0x28F54685L
, 0x06FD, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96);
4023 DECLARE_INTERFACE_(IKsControl
,IUnknown
)
4025 STDMETHOD_(NTSTATUS
, QueryInterface
)( THIS_
4027 PVOID
* Interface
)PURE
;
4029 STDMETHOD_(ULONG
, AddRef
)(THIS
) PURE
;
4031 STDMETHOD_(ULONG
, Release
)(THIS
) PURE
;
4033 STDMETHOD_(NTSTATUS
, KsProperty
)(THIS_
4034 IN PKSPROPERTY Property
,
4035 IN ULONG PropertyLength
,
4036 IN OUT PVOID PropertyData
,
4037 IN ULONG DataLength
,
4038 OUT ULONG
* BytesReturned
4040 STDMETHOD_(NTSTATUS
, KsMethod
)(THIS_
4041 IN PKSMETHOD Method
,
4042 IN ULONG MethodLength
,
4043 IN OUT PVOID MethodData
,
4044 IN ULONG DataLength
,
4045 OUT ULONG
* BytesReturned
4047 STDMETHOD_(NTSTATUS
, KsEvent
)(THIS_
4048 IN PKSEVENT Event OPTIONAL
,
4049 IN ULONG EventLength
,
4050 IN OUT PVOID EventData
,
4051 IN ULONG DataLength
,
4052 OUT ULONG
* BytesReturned
4057 typedef IKsControl
* PIKSCONTROL
;
4064 KsDeviceRegisterAdapterObject(
4065 IN PKSDEVICE Device
,
4066 IN PADAPTER_OBJECT AdapterObject
,
4067 IN ULONG MaxMappingByteCount
,
4068 IN ULONG MappingTableStride
);
4074 IN PKSDEVICE Device
,
4088 #define KsDiscard(object, pointer) \
4089 KsRemoveItemFromObjectBag(object->Bag, pointer, TRUE)
4091 #define KsFilterAcquireControl(Filter) \
4092 KsAcquireControl((PVOID) Filter);
4094 #define KsFilterReleaseControl(Filter) \
4095 KsReleaseControl((PVOID) Filter);
4097 #define KsFilterAddEvent(Filter, EventEntry) \
4098 KsAddEvent(Filter,EventEntry);
4103 KsFilterAcquireProcessingMutex(
4104 IN PKSFILTER Filter
);
4110 KsFilterAddTopologyConnections(
4111 IN PKSFILTER Filter
,
4112 IN ULONG NewConnectionsCount
,
4113 IN
const KSTOPOLOGY_CONNECTION
*const NewTopologyConnections
);
4118 KsFilterAttemptProcessing(
4119 IN PKSFILTER Filter
,
4120 IN BOOLEAN Asynchronous
);
4126 IN PKSFILTER Filter
,
4127 IN
const KSNODE_DESCRIPTOR
*const NodeDescriptor
,
4133 KsFilterCreatePinFactory(
4134 IN PKSFILTER Filter
,
4135 IN
const KSPIN_DESCRIPTOR_EX
*const PinDescriptor
,
4141 KsFilterFactoryGetDevice(
4142 IN PKSFILTERFACTORY FilterFactory
);
4145 #endif /* avstream */