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)
611 KSPROPERTY_TOPOLOGY_CATEGORIES
,
612 KSPROPERTY_TOPOLOGY_NODES
,
613 KSPROPERTY_TOPOLOGY_CONNECTIONS
,
614 KSPROPERTY_TOPOLOGY_NAME
615 } KSPROPERTY_TOPOLOGY
;
617 /* ===============================================================
618 Property Sets for audio drivers - TODO
621 #define STATIC_KSPROPTYPESETID_General \
622 0x97E99BA0L, 0xBDEA, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
623 DEFINE_GUIDSTRUCT("97E99BA0-BDEA-11CF-A5D6-28DB04C10000", KSPROPTYPESETID_General
);
624 #define KSPROPTYPESETID_General DEFINE_GUIDNAMED(KSPROPTYPESETID_General)
627 KSPROPERTY_AC3_ALTERNATE_AUDIO
628 KSPROPERTY_AC3_BIT_STREAM_MODE
629 KSPROPERTY_AC3_DIALOGUE_LEVEL
630 KSPROPERTY_AC3_DOWNMIX
631 KSPROPERTY_AC3_ERROR_CONCEALMENT
632 KSPROPERTY_AC3_LANGUAGE_CODE
633 KSPROPERTY_AC3_ROOM_TYPE
636 #define KSPROPSETID_Acoustic_Echo_Cancel
639 KSPROPERTY_AEC_NOISE_FILL_ENABLE
640 KSPROPERTY_AEC_STATUS
644 KSPROPERTY_AUDIO_3D_INTERFACE
646 KSPROPERTY_AUDIO_ALGORITHM_INSTANCE
647 KSPROPERTY_AUDIO_BASS
648 KSPROPERTY_AUDIO_BASS_BOOST
649 KSPROPERTY_AUDIO_CHANNEL_CONFIG
650 KSPROPERTY_AUDIO_CHORUS_LEVEL
651 KSPROPERTY_AUDIO_COPY_PROTECTION
652 KSPROPERTY_AUDIO_CPU_RESOURCES
653 KSPROPERTY_AUDIO_DELAY
654 KSPROPERTY_AUDIO_DEMUX_DEST
655 KSPROPERTY_AUDIO_DEV_SPECIFIC
656 KSPROPERTY_AUDIO_DYNAMIC_RANGE
657 KSPROPERTY_AUDIO_DYNAMIC_SAMPLING_RATE
658 KSPROPERTY_AUDIO_EQ_BANDS
659 KSPROPERTY_AUDIO_EQ_LEVEL
660 KSPROPERTY_AUDIO_FILTER_STATE
661 KSPROPERTY_AUDIO_LATENCY
662 KSPROPERTY_AUDIO_LOUDNESS
663 KSPROPERTY_AUDIO_MANUFACTURE_GUID
665 KSPROPERTY_AUDIO_MIX_LEVEL_CAPS
666 KSPROPERTY_AUDIO_MIX_LEVEL_TABLE
667 KSPROPERTY_AUDIO_MUTE
668 KSPROPERTY_AUDIO_MUX_SOURCE
669 KSPROPERTY_AUDIO_NUM_EQ_BANDS
670 KSPROPERTY_AUDIO_PEAKMETER
671 KSPROPERTY_AUDIO_POSITION
672 KSPROPERTY_AUDIO_PREFERRED_STATUS
673 KSPROPERTY_AUDIO_PRODUCT_GUID
674 KSPROPERTY_AUDIO_QUALITY
675 KSPROPERTY_AUDIO_REVERB_LEVEL
676 KSPROPERTY_AUDIO_SAMPLING_RATE
677 KSPROPERTY_AUDIO_STEREO_ENHANCE
678 KSPROPERTY_AUDIO_STEREO_SPEAKER_GEOMETRY
679 KSPROPERTY_AUDIO_SURROUND_ENCODE
680 KSPROPERTY_AUDIO_TREBLE
681 KSPROPERTY_AUDIO_VOLUMELEVEL
682 KSPROPERTY_AUDIO_WIDE_MODE
683 KSPROPERTY_AUDIO_WIDENESS
686 #define KSPROPSETID_AudioGfx
688 KSPROPERTY_AUDIOGFX_CAPTURETARGETDEVICEID
689 KSPROPERTY_AUDIOGFX_RENDERTARGETDEVICEID
692 #define KSPROPSETID_DirectSound3DBuffer
694 KSPROPERTY_DIRECTSOUND3DBUFFER_ALL
695 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEANGLES
696 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEORIENTATION
697 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEOUTSIDEVOLUME
698 KSPROPERTY_DIRECTSOUND3DBUFFER_MAXDISTANCE
699 KSPROPERTY_DIRECTSOUND3DBUFFER_MINDISTANCE
700 KSPROPERTY_DIRECTSOUND3DBUFFER_MODE
701 KSPROPERTY_DIRECTSOUND3DBUFFER_POSITION
702 KSPROPERTY_DIRECTSOUND3DBUFFER_VELOCITY
705 #define KSPROPSETID_DirectSound3DListener
707 KSPROPERTY_DIRECTSOUND3DLISTENER_ALL
708 KSPROPERTY_DIRECTSOUND3DLISTENER_ALLOCATION
709 KSPROPERTY_DIRECTSOUND3DLISTENER_BATCH
710 KSPROPERTY_DIRECTSOUND3DLISTENER_DISTANCEFACTOR
711 KSPROPERTY_DIRECTSOUND3DLISTENER_DOPPLERFACTOR
712 KSPROPERTY_DIRECTSOUND3DLISTENER_ORIENTATION
713 KSPROPERTY_DIRECTSOUND3DLISTENER_POSITION
714 KSPROPERTY_DIRECTSOUND3DLISTENER_ROLLOFFFACTOR
715 KSPROPERTY_DIRECTSOUND3DLISTENER_VELOCITY
718 #define KSPROPSETID_DrmAudioStream
720 KSPROPERTY_DRMAUDIOSTREAM_CONTENTID
723 #define KSPROPSETID_Hrtf3d
725 KSPROPERTY_HRTF3D_FILTER_FORMAT
726 KSPROPERTY_HRTF3D_INITIALIZE
727 KSPROPERTY_HRTF3D_PARAMS
730 #define KSPROPSETID_Itd3d
732 KSPROPERTY_ITD3D_PARAMS
735 #define KSPROPSETID_Synth
737 KSPROPERTY_SYNTH_CAPS
738 KSPROPERTY_SYNTH_CHANNELGROUPS
739 KSPROPERTY_SYNTH_LATENCYCLOCK
740 KSPROPERTY_SYNTH_MASTERCLOCK
741 KSPROPERTY_SYNTH_PORTPARAMETERS
742 KSPROPERTY_SYNTH_RUNNINGSTATS
743 KSPROPERTY_SYNTH_VOICEPRIORITY
744 KSPROPERTY_SYNTH_VOLUME
745 KSPROPERTY_SYNTH_VOLUMEBOOST
748 #define KSPROPSETID_Synth_Dls
750 KSPROPERTY_SYNTH_DLS_APPEND
751 KSPROPERTY_SYNTH_DLS_COMPACT
752 KSPROPERTY_SYNTH_DLS_DOWNLOAD
753 KSPROPERTY_SYNTH_DLS_UNLOAD
754 KSPROPERTY_SYNTH_DLS_WAVEFORMAT
757 #define KSPROPSETID_TopologyNode
759 KSPROPERTY_TOPOLOGYNODE_ENABLE
760 KSPROPERTY_TOPOLOGYNODE_RESET
766 /* ===============================================================
767 Event Sets for audio drivers - TODO
769 #define KSEVENTSETID_AudioControlChange
771 KSEVENT_CONTROL_CHANGE
776 /* ===============================================================
780 KSNODETYPE_3D_EFFECTS
781 KSNODETYPE_ACOUSTIC_ECHO_CANCEL
788 KSNODETYPE_DEV_SPECIFIC
790 KSNODETYPE_DMSYNTH_CAPS
791 KSNODETYPE_DRM_DESCRAMBLE
797 KSNODETYPE_PROLOGIC_DECODER
798 KSNODETYPE_PROLOGIC_ENCODER
801 KSNODETYPE_STEREO_ENHANCE
802 KSNODETYPE_STEREO_WIDE
807 KSNODETYPE_SYNTHESIZER
813 typedef PVOID KSDEVICE_HEADER
,
820 /* ===============================================================
824 #define KSMETHOD_TYPE_NONE 0x00000000
825 #define KSMETHOD_TYPE_READ 0x00000001
826 #define KSMETHOD_TYPE_WRITE 0x00000002
827 #define KSMETHOD_TYPE_MODIFY 0x00000003
828 #define KSMETHOD_TYPE_SOURCE 0x00000004
829 #define KSMETHOD_TYPE_SEND 0x00000001
830 #define KSMETHOD_TYPE_SETSUPPORT 0x00000100
831 #define KSMETHOD_TYPE_BASICSUPPORT 0x00000200
834 /* ===============================================================
838 #define KSPROPERTY_TYPE_GET 0x00000001
839 #define KSPROPERTY_TYPE_SET 0x00000002
840 #define KSPROPERTY_TYPE_SETSUPPORT 0x00000100
841 #define KSPROPERTY_TYPE_BASICSUPPORT 0x00000200
842 #define KSPROPERTY_TYPE_RELATIONS 0x00000400
843 #define KSPROPERTY_TYPE_SERIALIZESET 0x00000800
844 #define KSPROPERTY_TYPE_UNSERIALIZESET 0x00001000
845 #define KSPROPERTY_TYPE_SERIALIZERAW 0x00002000
846 #define KSPROPERTY_TYPE_UNSERIALIZERAW 0x00004000
847 #define KSPROPERTY_TYPE_SERIALIZESIZE 0x00008000
848 #define KSPROPERTY_TYPE_DEFAULT_VALUES 0x00010000
851 /* ===============================================================
852 Topology Methods/Properties
855 #define KSMETHOD_TYPE_TOPOLOGY 0x10000000
856 #define KSPROPERTY_TYPE_TOPOLOGY 0x10000000
859 #define DEFINE_KS_GUID(GA,GB,GC,GD,GE,GF,GG,GH,GI,GJ,GK) \
860 DEFINE_GUID(??, 0x#GA#L, 0xGB, 0xGC, 0xGD, 0xGE, 0xGF, 0xGG, 0xGH, 0xGI, 0xGJ, 0xGK) \
861 "GA-GB-GC-GDGE-GFGGGHGIGJGK"
864 /* ===============================================================
867 BRIDGE - 0x085AFF00L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
868 CAPTURE - 0x65E8773DL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
869 RENDER - 0x65E8773EL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
870 MIXER - 0xAD809C00L, 0x7B88, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
871 SPLITTER - 0x0A4252A0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
872 DATACOMPRESSOR - 0x1E84C900L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
873 DATADECOMPRESSOR - 0x2721AE20L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
874 DATATRANSFORM - 0x2EB07EA0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
875 COMMUNICATIONSTRANSFORM - 0xCF1DDA2CL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
876 INTERFACETRANSFORM - 0xCF1DDA2DL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
877 MEDIUMTRANSFORM - 0xCF1DDA2EL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
878 FILESYSTEM - 0x760FED5EL, 0x9357, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
879 CLOCK - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
880 PROXY - 0x97EBAACAL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
881 QUALITY - 0x97EBAACBL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
884 /* ===============================================================
885 KSNAME GUIDs (defined also as KSSTRING_Xxx L"{...}"
887 Filter - 0x9b365890L, 0x165f, 0x11d0, 0xa1, 0x95, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
888 Pin - 0x146F1A80L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
889 Clock - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
890 Allocator - 0x642F5D00L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
891 TopologyNode - 0x0621061AL, 0xEE75, 0x11D0, 0xB9, 0x15, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
894 /* ===============================================================
897 Standard - 0x1A8766A0L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
898 FileIo - 0x8C6F932CL, 0xE771, 0x11D0, 0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
901 /* ===============================================================
904 Standard - 0x4747B320L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
907 /* ===============================================================
910 General - 0x1464EDA5L, 0x6A8F, 0x11D1, 0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
911 StreamIo - 0x65D003CAL, 0x1523, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
912 MediaSeeking - 0xEE904F0CL, 0xD09B, 0x11D0, 0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
913 Topology - 0x720D4AC0L, 0x7533, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
914 GM - 0xAF627536L, 0xE719, 0x11D2, 0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D
915 Quality - 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
916 Connection - 0x1D58C920L, 0xAC9B, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
919 /* ===============================================================
922 Event set - 0x75d95571L, 0x073c, 0x11d0, 0xa1, 0x61, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
923 Method set - 0xcf6e4341L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
924 Property set - 0xcf6e4342L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
927 /* ===============================================================
930 Property set - 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
933 /* ===============================================================
936 Property set - 0xDF12A4C0L, 0xAC17, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
937 Event sets - 0x364D8E20L, 0x62C7, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
940 /* ===============================================================
943 Event set - 0x7f4bcbe0L, 0x9ea5, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00
946 /* ===============================================================
949 KSTIME_FORMAT_NONE (null guid)
950 FRAME - 0x7b785570L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
951 BYTE - 0x7b785571L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
952 SAMPLE - 0x7b785572L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
953 FIELD - 0x7b785573L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
954 MEDIA_TIME - 0x7b785574L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
957 /* ===============================================================
967 #define STATIC_KSDATAFORMAT_SPECIFIER_NONE\
968 0x0F6417D6L, 0xC318, 0x11D0, 0xA4, 0x3F, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
969 DEFINE_GUIDSTRUCT("0F6417D6-C318-11D0-A43F-00A0C9223196", KSDATAFORMAT_SPECIFIER_NONE
);
970 #define KSDATAFORMAT_SPECIFIER_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_NONE)
973 /* ===============================================================
976 WILDCARD, DONT_CARE = NULL
977 SYSTEM - 0x091bb638L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
978 USER - 0x8cb0fc28L, 0x7893, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
979 KERNEL_PAGED - 0xd833f8f8L, 0x7894, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
980 KERNEL_NONPAGED - 0x4a6d5fc4L, 0x7895, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
981 DEVICE_UNKNOWN - 0x091bb639L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
984 /* ===============================================================
986 (values have been checked)
991 #define DEFINE_KSPROPERTY_ITEM(PropertyId, GetHandler,\
995 Values, RelationsCount, Relations, SupportHandler,\
998 PropertyId, {(PFNKSHANDLER)GetHandler}, MinProperty, MinData,\
999 {(PFNKSHANDLER)SetHandler},\
1000 (PKSPROPERTY_VALUES)Values, RelationsCount, (PKSPROPERTY)Relations,\
1001 (PFNKSHANDLER)SupportHandler, (ULONG)SerializedSize\
1006 #define DEFINE_KSPROPERTY_ITEM(PropertyId, GetHandler,\
1010 Values, RelationsCount, Relations, SupportHandler,\
1013 PropertyId, (PFNKSHANDLER)GetHandler, MinProperty, MinData,\
1014 (PFNKSHANDLER)SetHandler,\
1015 (PKSPROPERTY_VALUES)Values, RelationsCount, (PKSPROPERTY)Relations,\
1016 (PFNKSHANDLER)SupportHandler, (ULONG)SerializedSize\
1025 KsObjectTypeFilterFactory
,
1036 } KSSTATE
, *PKSSTATE
;
1040 KSTARGET_STATE_DISABLED
,
1041 KSTARGET_STATE_ENABLED
1056 KSEVENTS_FMUTEXUNSAFE
,
1059 } KSEVENTS_LOCKTYPE
;
1063 KSDEGRADE_STANDARD_SIMPLE
,
1064 KSDEGRADE_STANDARD_QUALITY
,
1065 KSDEGRADE_STANDARD_COMPUTATION
,
1066 KSDEGRADE_STANDARD_SKIP
1067 } KSDEGRADE_STANDARD
;
1071 KSPIN_DATAFLOW_IN
= 1,
1077 KSPIN_COMMUNICATION_NONE
,
1078 KSPIN_COMMUNICATION_SINK
,
1079 KSPIN_COMMUNICATION_SOURCE
,
1080 KSPIN_COMMUNICATION_BOTH
,
1081 KSPIN_COMMUNICATION_BRIDGE
1082 } KSPIN_COMMUNICATION
;
1088 } KSLIST_ENTRY_LOCATION
;
1092 KsStackCopyToNewLocation
,
1093 KsStackReuseCurrentLocation
,
1094 KsStackUseNewLocation
1101 KsAcquireOnlySingleItem
,
1102 KsAcquireAndRemoveOnlySingleItem
1103 } KSIRP_REMOVAL_OPERATION
;
1107 KsInvokeOnSuccess
= 1,
1108 KsInvokeOnError
= 2,
1109 KsInvokeOnCancel
= 4
1110 } KSCOMPLETION_INVOCATION
;
1113 #if defined(_NTDDK_)
1115 typedef NTSTATUS (NTAPI
*PFNKSCONTEXT_DISPATCH
)(
1120 #if defined(_NTDDK_) && !defined(__wtypes_h__)
1150 VT_USERDEFINED
= 29,
1157 VT_STREAMED_OBJECT
= 68,
1158 VT_STORED_OBJECT
= 69,
1159 VT_BLOB_OBJECT
= 70,
1165 VT_RESERVED
= 0x8000,
1166 VT_ILLEGAL
= 0xffff,
1167 VT_ILLEGALMASKED
= 0xfff,
1172 #define STATIC_KSDATAFORMAT_TYPE_WILDCARD STATIC_GUID_NULL
1173 #define KSDATAFORMAT_TYPE_WILDCARD GUID_NULL
1175 #define STATIC_KSDATAFORMAT_SUBTYPE_WILDCARD STATIC_GUID_NULL
1176 #define KSDATAFORMAT_SUBTYPE_WILDCARD GUID_NULL
1178 #define STATIC_KSDATAFORMAT_SPECIFIER_WILDCARD STATIC_GUID_NULL
1179 #define KSDATAFORMAT_SPECIFIER_WILDCARD GUID_NULL
1181 /* ===============================================================
1190 } KS_FRAMING_RANGE
, *PKS_FRAMING_RANGE
;
1194 KS_FRAMING_RANGE Range
;
1195 ULONG InPlaceWeight
;
1196 ULONG NotInPlaceWeight
;
1197 } KS_FRAMING_RANGE_WEIGHTED
, *PKS_FRAMING_RANGE_WEIGHTED
;
1207 ULONG FileAlignment
;
1208 ULONG MemoryTypeWeight
;
1209 KS_FRAMING_RANGE PhysicalRange
;
1210 KS_FRAMING_RANGE_WEIGHTED FramingRange
;
1211 } KS_FRAMING_ITEM
, *PKS_FRAMING_ITEM
;
1215 ULONG RatioNumerator
;
1216 ULONG RatioDenominator
;
1217 ULONG RatioConstantMargin
;
1218 } KS_COMPRESSION
, *PKS_COMPRESSION
;
1221 /* ===============================================================
1225 #define KSPRIORITY_LOW 0x00000001
1226 #define KSPRIORITY_NORMAL 0x40000000
1227 #define KSPRIORITY_HIGH 0x80000000
1228 #define KSPRIORITY_EXCLUSIVE 0xFFFFFFFF
1232 ULONG PriorityClass
;
1233 ULONG PrioritySubClass
;
1234 } KSPRIORITY
, *PKSPRIORITY
;
1237 /* ===============================================================
1239 http://www.osronline.com/DDKx/stream/ks-struct_494j.htm
1241 #if defined(_NTDDK_)
1244 PDRIVER_DISPATCH DeviceIoControl
;
1245 PDRIVER_DISPATCH Read
;
1246 PDRIVER_DISPATCH Write
;
1247 PDRIVER_DISPATCH Flush
;
1248 PDRIVER_DISPATCH Close
;
1249 PDRIVER_DISPATCH QuerySecurity
;
1250 PDRIVER_DISPATCH SetSecurity
;
1251 PFAST_IO_DEVICE_CONTROL FastDeviceIoControl
;
1252 PFAST_IO_READ FastRead
;
1253 PFAST_IO_WRITE FastWrite
;
1254 } KSDISPATCH_TABLE
, *PKSDISPATCH_TABLE
;
1257 #define KSCREATE_ITEM_IRP_STORAGE(Irp) (*(PKSOBJECT_CREATE_ITEM*)&(Irp)->Tail.Overlay.DriverContext[0])
1258 #define KSEVENT_SET_IRP_STORAGE(Irp) (*(const KSEVENT_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1259 #define KSEVENT_ITEM_IRP_STORAGE(Irp) (*(const KSEVENT_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1260 #define KSEVENT_ENTRY_IRP_STORAGE(Irp) (*(PKSEVENT_ENTRY*)&(Irp)->Tail.Overlay.DriverContext[0])
1261 #define KSMETHOD_SET_IRP_STORAGE(Irp) (*(const KSMETHOD_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1262 #define KSMETHOD_ITEM_IRP_STORAGE(Irp) (*(const KSMETHOD_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1263 #define KSMETHOD_TYPE_IRP_STORAGE(Irp) (*(ULONG_PTR*)(&(Irp)->Tail.Overlay.DriverContext[2]))
1264 #define KSQUEUE_SPINLOCK_IRP_STORAGE(Irp) (*(PKSPIN_LOCK*)&(Irp)->Tail.Overlay.DriverContext[1])
1265 #define KSPROPERTY_SET_IRP_STORAGE(Irp) (*(const KSPROPERTY_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1266 #define KSPROPERTY_ITEM_IRP_STORAGE(Irp) (*(const KSPROPERTY_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1267 #define KSPROPERTY_ATTRIBUTES_IRP_STORAGE(Irp) (*(PKSATTRIBUTE_LIST*)&(Irp)->Tail.Overlay.DriverContext[2])
1271 (NTAPI
*PFNREFERENCEDEVICEOBJECT
)(
1277 (NTAPI
*PFNDEREFERENCEDEVICEOBJECT
)(
1283 (NTAPI
*PFNQUERYREFERENCESTRING
)(
1285 IN OUT PWCHAR
*String
1290 INTERFACE Interface
;
1291 PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject
;
1292 PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject
;
1293 PFNQUERYREFERENCESTRING QueryReferenceString
;
1294 } BUS_INTERFACE_REFERENCE
, *PBUS_INTERFACE_REFERENCE
;
1299 ULONG ReferenceCount
;
1300 KSPIN_LOCK AccessLock
;
1301 } KSDPC_ITEM
, *PKSDPC_ITEM
;
1306 LIST_ENTRY BufferList
;
1307 } KSBUFFER_ITEM
, *PKSBUFFER_ITEM
;
1319 } KSCOMPONENTID
, *PKSCOMPONENTID
;
1321 /* ===============================================================
1325 #define KSPROPERTY_MEMBER_RANGES 0x00000001
1326 #define KSPROPERTY_MEMBER_STEPPEDRANGES 0x00000002
1327 #define KSPROPERTY_MEMBER_VALUES 0x00000003
1328 #define KSPROPERTY_MEMBER_FLAG_DEFAULT KSPROPERTY_MEMBER_RANGES
1331 KS_SEEKING_NoPositioning
,
1332 KS_SEEKING_AbsolutePositioning
,
1333 KS_SEEKING_RelativePositioning
,
1334 KS_SEEKING_IncrementalPositioning
,
1335 KS_SEEKING_PositioningBitsMask
= 0x3,
1336 KS_SEEKING_SeekToKeyFrame
,
1337 KS_SEEKING_ReturnTime
= 0x8
1344 KS_SEEKING_FLAGS CurrentFlags
;
1345 KS_SEEKING_FLAGS StopFlags
;
1346 } KSPROPERTY_POSITIONS
, *PKSPROPERTY_POSITIONS
;
1352 } KSPROPERTY_SERIALHDR
, *PKSPROPERTY_SERIALHDR
;
1356 KSIDENTIFIER PropTypeSet
;
1358 ULONG PropertyLength
;
1359 } KSPROPERTY_SERIAL
, *PKSPROPERTY_SERIAL
;
1368 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1375 ULONG UnsignedMinimum
;
1376 ULONG UnsignedMaximum
;
1377 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1383 } KSPROPERTY_BOUNDS_LONG
, *PKSPROPERTY_BOUNDS_LONG
;
1388 LONGLONG SignedMinimum
;
1389 LONGLONG SignedMaximum
;
1390 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1397 #if defined(_NTDDK_)
1398 ULONGLONG UnsignedMinimum
;
1399 ULONGLONG UnsignedMaximum
;
1401 DWORDLONG UnsignedMinimum
;
1402 DWORDLONG UnsignedMaximum
;
1404 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1409 } KSPROPERTY_BOUNDS_LONGLONG
, *PKSPROPERTY_BOUNDS_LONGLONG
;
1414 ULONG DescriptionSize
;
1415 KSIDENTIFIER PropTypeSet
;
1416 ULONG MembersListCount
;
1418 } KSPROPERTY_DESCRIPTION
, *PKSPROPERTY_DESCRIPTION
;
1424 } KSPROPERTY_MEDIAAVAILABLE
, *PKSPROPERTY_MEDIAAVAILABLE
;
1433 } KSPROPERTY_MEMBERSHEADER
, *PKSPROPERTY_MEMBERSHEADER
;
1436 KSPROPERTY_MEMBERSHEADER MembersHeader
;
1437 const VOID
* Members
;
1438 } KSPROPERTY_MEMBERSLIST
, *PKSPROPERTY_MEMBERSLIST
;
1441 KSIDENTIFIER PropTypeSet
;
1442 ULONG MembersListCount
;
1443 const KSPROPERTY_MEMBERSLIST
* MembersList
;
1444 } KSPROPERTY_VALUES
, *PKSPROPERTY_VALUES
;
1446 #if defined(_NTDDK_)
1447 typedef NTSTATUS (NTAPI
*PFNKSHANDLER
)(
1449 IN PKSIDENTIFIER Request
,
1457 PFNKSHANDLER GetPropertyHandler
;
1458 BOOLEAN GetSupported
;
1463 PFNKSHANDLER SetPropertyHandler
;
1464 BOOLEAN SetSupported
;
1466 const KSPROPERTY_VALUES
* Values
;
1467 ULONG RelationsCount
;
1468 const KSPROPERTY
* Relations
;
1469 PFNKSHANDLER SupportHandler
;
1470 ULONG SerializedSize
;
1471 } KSPROPERTY_ITEM
, *PKSPROPERTY_ITEM
;
1476 (NTAPI
*PFNKSFASTHANDLER
)(
1477 IN PFILE_OBJECT FileObject
,
1478 IN PKSIDENTIFIER Request
,
1479 IN ULONG RequestLength
,
1481 IN ULONG DataLength
,
1482 OUT PIO_STATUS_BLOCK IoStatus
1488 PFNKSFASTHANDLER GetPropertyHandler
;
1489 BOOLEAN GetSupported
;
1492 PFNKSFASTHANDLER SetPropertyHandler
;
1493 BOOLEAN SetSupported
;
1496 } KSFASTPROPERTY_ITEM
, *PKSFASTPROPERTY_ITEM
;
1501 ULONG PropertiesCount
;
1502 const KSPROPERTY_ITEM
* PropertyItem
;
1504 const KSFASTPROPERTY_ITEM
* FastIoTable
;
1505 } KSPROPERTY_SET
, *PKSPROPERTY_SET
;
1511 ULONG SteppingDelta
;
1513 KSPROPERTY_BOUNDS_LONG Bounds
;
1514 } KSPROPERTY_STEPPING_LONG
, *PKSPROPERTY_STEPPING_LONG
;
1518 #if defined(_NTDDK_)
1519 ULONGLONG SteppingDelta
;
1521 DWORDLONG SteppingDelta
;
1523 KSPROPERTY_BOUNDS_LONGLONG Bounds
;
1524 } KSPROPERTY_STEPPING_LONGLONG
, *PKSPROPERTY_STEPPING_LONGLONG
;
1526 /* ===============================================================
1534 ULONG RequirementsFlags
;
1536 #if defined(_NTDDK_)
1543 ULONG FileAlignment
;
1545 } KSALLOCATOR_FRAMING
, *PKSALLOCATOR_FRAMING
;
1551 KS_COMPRESSION OutputCompression
;
1553 KS_FRAMING_ITEM FramingItem
[1];
1554 } KSALLOCATOR_FRAMING_EX
, *PKSALLOCATOR_FRAMING_EX
;
1556 #define KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER 0x00000001
1557 #define KSALLOCATOR_REQUIREMENTF_SYSTEM_MEMORY 0x00000002
1558 #define KSALLOCATOR_REQUIREMENTF_FRAME_INTEGRITY 0x00000004
1559 #define KSALLOCATOR_REQUIREMENTF_MUST_ALLOCATE 0x00000008
1560 #define KSALLOCATOR_REQUIREMENTF_PREFERENCES_ONLY 0x80000000
1562 #define KSALLOCATOR_OPTIONF_COMPATIBLE 0x00000001
1563 #define KSALLOCATOR_OPTIONF_SYSTEM_MEMORY 0x00000002
1564 #define KSALLOCATOR_OPTIONF_VALID 0x00000003
1566 #define KSALLOCATOR_FLAG_PARTIAL_READ_SUPPORT 0x00000010
1567 #define KSALLOCATOR_FLAG_DEVICE_SPECIFIC 0x00000020
1568 #define KSALLOCATOR_FLAG_CAN_ALLOCATE 0x00000040
1569 #define KSALLOCATOR_FLAG_INSIST_ON_FRAMESIZE_RATIO 0x00000080
1571 /* ===============================================================
1580 } KSQUALITY
, *PKSQUALITY
;
1584 HANDLE QualityManager
;
1586 } KSQUALITY_MANAGER
, *PKSQUALITY_MANAGER
;
1590 LONGLONG PresentationStart
;
1592 KSPIN_INTERFACE Interface
;
1599 KSPROPERTY Property
;
1601 } KSRATE_CAPABILITY
, *PKSRATE_CAPABILITY
;
1605 LONGLONG Granularity
;
1607 } KSRESOLUTION
, *PKSRESOLUTION
;
1611 ULONG NotificationType
;
1615 ULONG_PTR Reserved
[2];
1622 #if defined(_NTDDK_)
1625 KPRIORITY Increment
;
1630 KPRIORITY Increment
;
1635 ULONG ReferenceCount
;
1639 PWORK_QUEUE_ITEM WorkQueueItem
;
1640 WORK_QUEUE_TYPE WorkQueueType
;
1644 PWORK_QUEUE_ITEM WorkQueueItem
;
1645 PKSWORKER KsWorkerObject
;
1651 LONG_PTR Alignment
[2];
1654 } KSEVENTDATA
, *PKSEVENTDATA
;
1661 HANDLE ObjectHandle
;
1662 PVOID ObjectPointer
;
1666 KSEVENTDATA EventData
;
1667 } KSRELATIVEEVENT
, *PKSRELATIVEEVENT
;
1670 /* ===============================================================
1684 LONGLONG SystemTime
;
1685 } KSCORRELATED_TIME
, *PKSCORRELATED_TIME
;
1689 KSPROPERTY Property
;
1693 } KSP_TIMEFORMAT
, *PKSP_TIMEFORMAT
;
1699 } KSINTERVAL
, *PKSINTERVAL
;
1706 } KSFRAMETIME
, *PKSFRAMETIME
;
1709 /* ===============================================================
1713 typedef PVOID PKSDEFAULTCLOCK
;
1718 } KSCLOCK_CREATE
, *PKSCLOCK_CREATE
;
1720 #if defined(_NTDDK_)
1724 (FASTCALL
*PFNKSCLOCK_GETTIME
)(
1725 IN PFILE_OBJECT FileObject
1729 (FASTCALL
*PFNKSCLOCK_CORRELATEDTIME
)(
1730 IN PFILE_OBJECT FileObject
,
1731 OUT PLONGLONG SystemTime
);
1735 PFNKSCLOCK_GETTIME GetTime
;
1736 PFNKSCLOCK_GETTIME GetPhysicalTime
;
1737 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedTime
;
1738 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedPhysicalTime
;
1739 } KSCLOCK_FUNCTIONTABLE
, *PKSCLOCK_FUNCTIONTABLE
;
1742 /* ===============================================================
1743 Objects ??? SORT ME!
1746 #define KSCREATE_ITEM_SECURITYCHANGED 0x1
1747 #define KSCREATE_ITEM_WILDCARD 0x2
1748 #define KSCREATE_ITEM_NOPARAMETERS 0x4
1749 #define KSCREATE_ITEM_FREEONSTOP 0x8
1753 PDRIVER_DISPATCH Create
;
1755 UNICODE_STRING ObjectClass
;
1756 PSECURITY_DESCRIPTOR SecurityDescriptor
;
1758 } KSOBJECT_CREATE_ITEM
, *PKSOBJECT_CREATE_ITEM
;
1762 ULONG CreateItemsCount
;
1763 PKSOBJECT_CREATE_ITEM CreateItemsList
;
1764 } KSOBJECT_CREATE
, *PKSOBJECT_CREATE
;
1766 typedef VOID (NTAPI
*PFNKSITEMFREECALLBACK
)(
1767 IN PKSOBJECT_CREATE_ITEM CreateItem
);
1775 } KSMULTIPLE_ITEM
, *PKSMULTIPLE_ITEM
;
1780 PKSEVENTDATA EventData
;
1782 } KSQUERYBUFFER
, *PKSQUERYBUFFER
;
1788 } KSERROR
, *PKSERROR
;
1790 /* ===============================================================
1793 #if defined(_NTDDK_)
1799 PFNKSHANDLER MethodHandler
;
1800 BOOLEAN MethodSupported
;
1804 PFNKSHANDLER SupportHandler
;
1806 } KSMETHOD_ITEM
, *PKSMETHOD_ITEM
;
1810 #define DEFINE_KSMETHOD_ITEM(MethodId, Flags,\
1812 MinMethod, MinData, SupportHandler)\
1814 MethodId, {(PFNKSHANDLER)MethodHandler}, MinMethod, MinData,\
1815 SupportHandler, Flags\
1820 #define DEFINE_KSMETHOD_ITEM(MethodId, Flags,\
1822 MinMethod, MinData, SupportHandler)\
1824 MethodId, (PFNKSHANDLER)MethodHandler, MinMethod, MinData,\
1825 SupportHandler, Flags\
1837 PFNKSFASTHANDLER MethodHandler
;
1838 BOOLEAN MethodSupported
;
1840 } KSFASTMETHOD_ITEM
, *PKSFASTMETHOD_ITEM
;
1842 #define DEFINE_KSFASTMETHOD_ITEM(MethodId, MethodHandler)\
1844 MethodId, (PFNKSFASTHANDLER)MethodHandler\
1852 const KSMETHOD_ITEM
* MethodItem
;
1854 const KSFASTMETHOD_ITEM
*FastIoTable
;
1855 } KSMETHOD_SET
, *PKSMETHOD_SET
;
1858 #define DEFINE_KSMETHOD_SET(Set,\
1872 /* ===============================================================
1878 KSPROPERTY Property
;
1881 } KSP_NODE
, *PKSP_NODE
;
1888 } KSM_NODE
, *PKSM_NODE
;
1895 } KSE_NODE
, *PKSE_NODE
;
1900 } KSNODE_CREATE
, *PKSNODE_CREATE
;
1903 /* ===============================================================
1906 typedef struct _KSEVENT_ENTRY KSEVENT_ENTRY
, *PKSEVENT_ENTRY
;
1908 #if defined(_NTDDK_)
1911 KSEVENTDATA EventData
;
1913 } KSEVENT_TIME_MARK
, *PKSEVENT_TIME_MARK
;
1917 KSEVENTDATA EventData
;
1920 } KSEVENT_TIME_INTERVAL
, *PKSEVENT_TIME_INTERVAL
;
1922 typedef NTSTATUS (NTAPI
*PFNKSADDEVENT
)(
1924 IN PKSEVENTDATA EventData
,
1925 IN
struct _KSEVENT_ENTRY
* EventEntry
);
1929 (NTAPI
*PFNKSREMOVEEVENT
)(
1930 IN PFILE_OBJECT FileObject
,
1931 IN
struct _KSEVENT_ENTRY
* EventEntry
1938 ULONG ExtraEntryData
;
1939 PFNKSADDEVENT AddHandler
;
1940 PFNKSREMOVEEVENT RemoveHandler
;
1941 PFNKSHANDLER SupportHandler
;
1942 } KSEVENT_ITEM
, *PKSEVENT_ITEM
;
1948 const KSEVENT_ITEM
* EventItem
;
1949 } KSEVENT_SET
, *PKSEVENT_SET
;
1951 struct _KSEVENT_ENTRY
1953 LIST_ENTRY ListEntry
;
1956 PKSDPC_ITEM DpcItem
;
1957 PKSBUFFER_ITEM BufferItem
;
1959 PKSEVENTDATA EventData
;
1960 ULONG NotificationType
;
1961 const KSEVENT_SET
* EventSet
;
1962 const KSEVENT_ITEM
* EventItem
;
1963 PFILE_OBJECT FileObject
;
1964 ULONG SemaphoreAdjustment
;
1970 /* ===============================================================
1974 #if defined(_NTDDK_)
1976 typedef struct _KSPIN KSPIN
, *PKSPIN
;
1977 typedef struct _KSSTREAM_POINTER KSSTREAM_POINTER
, *PKSSTREAM_POINTER
;
1978 typedef struct _KSSTREAM_POINTER_OFFSET KSSTREAM_POINTER_OFFSET
, *PKSSTREAM_POINTER_OFFSET
;
1979 typedef struct _KSMAPPING KSMAPPING
, *PKSMAPPING
;
1980 typedef struct _KSPROCESSPIN KSPROCESSPIN
, *PKSPROCESSPIN
;
1982 #define IOCTL_KS_HANDSHAKE CTL_CODE(FILE_DEVICE_KS, 0x007, METHOD_NEITHER, FILE_ANY_ACCESS)
1988 } KSHANDSHAKE
, *PKSHANDSHAKE
;
1992 (NTAPI
*PFNKSPINHANDSHAKE
)(
2000 (NTAPI
*PFNKSPINPOWER
)(
2002 IN DEVICE_POWER_STATE State
2007 (NTAPI
*PFNKSPINFRAMERETURN
)(
2009 IN PVOID Data OPTIONAL
,
2010 IN ULONG Size OPTIONAL
,
2011 IN PMDL Mdl OPTIONAL
,
2012 IN PVOID Context OPTIONAL
,
2018 (NTAPI
*PFNKSPINIRPCOMPLETION
)(
2025 (NTAPI
*PFNKSPINIRP
)(
2038 (NTAPI
*PFNKSPINVOID
)(
2044 (NTAPI
*PFNKSSTREAMPOINTER
)(
2045 IN PKSSTREAM_POINTER StreamPointer
2050 PKSATTRIBUTE
* Attributes
;
2051 } KSATTRIBUTE_LIST
, *PKSATTRIBUTE_LIST
;
2055 (NTAPI
*PFNKSPINSETDATAFORMAT
)(
2057 IN PKSDATAFORMAT OldFormat OPTIONAL
,
2058 IN PKSMULTIPLE_ITEM OldAttributeList OPTIONAL
,
2059 IN
const KSDATARANGE
* DataRange
,
2060 IN
const KSATTRIBUTE_LIST
* AttributeRange OPTIONAL
2065 (NTAPI
*PFNKSPINSETDEVICESTATE
)(
2068 IN KSSTATE FromState
2071 typedef struct _KSCLOCK_DISPATCH KSCLOCK_DISPATCH
, *PKSCLOCK_DISPATCH
;
2072 typedef struct _KSALLOCATOR_DISPATCH KSALLOCATOR_DISPATCH
, *PKSALLOCATOR_DISPATCH
;
2080 PFNKSPINSETDATAFORMAT SetDataFormat
;
2081 PFNKSPINSETDEVICESTATE SetDeviceState
;
2083 PFNKSPINVOID Disconnect
;
2084 const KSCLOCK_DISPATCH
* Clock
;
2085 const KSALLOCATOR_DISPATCH
* Allocator
;
2086 } KSPIN_DISPATCH
, *PKSPIN_DISPATCH
;
2090 (NTAPI
*PFNKSPINSETTIMER
)(
2093 IN LARGE_INTEGER DueTime
,
2099 (NTAPI
*PFNKSPINCANCELTIMER
)(
2106 (FASTCALL
*PFNKSPINCORRELATEDTIME
)(
2108 OUT PLONGLONG SystemTime
2113 (NTAPI
*PFNKSPINRESOLUTION
)(
2115 OUT PKSRESOLUTION Resolution
2118 struct _KSCLOCK_DISPATCH
{
2119 PFNKSPINSETTIMER SetTimer
;
2120 PFNKSPINCANCELTIMER CancelTimer
;
2121 PFNKSPINCORRELATEDTIME CorrelatedTime
;
2122 PFNKSPINRESOLUTION Resolution
;
2127 (NTAPI
*PFNKSPININITIALIZEALLOCATOR
)(
2129 IN PKSALLOCATOR_FRAMING AllocatorFraming
,
2133 typedef PVOID (NTAPI
*PFNKSDELETEALLOCATOR
)(
2136 typedef PVOID (NTAPI
*PFNKSDEFAULTALLOCATE
)(
2139 typedef PVOID (NTAPI
*PFNKSDEFAULTFREE
)(
2143 struct _KSALLOCATOR_DISPATCH
{
2144 PFNKSPININITIALIZEALLOCATOR InitializeAllocator
;
2145 PFNKSDELETEALLOCATOR DeleteAllocator
;
2146 PFNKSDEFAULTALLOCATE Allocate
;
2147 PFNKSDEFAULTFREE Free
;
2152 ULONG PropertySetsCount
;
2153 ULONG PropertyItemSize
;
2154 const KSPROPERTY_SET
* PropertySets
;
2155 ULONG MethodSetsCount
;
2156 ULONG MethodItemSize
;
2157 const KSMETHOD_SET
* MethodSets
;
2158 ULONG EventSetsCount
;
2159 ULONG EventItemSize
;
2160 const KSEVENT_SET
* EventSets
;
2161 #if !defined(_WIN64)
2164 } KSAUTOMATION_TABLE
, *PKSAUTOMATION_TABLE
;
2170 ULONG InterfacesCount
;
2171 const KSPIN_INTERFACE
* Interfaces
;
2173 const KSPIN_MEDIUM
* Mediums
;
2174 ULONG DataRangesCount
;
2175 const PKSDATARANGE
* DataRanges
;
2176 KSPIN_DATAFLOW DataFlow
;
2177 KSPIN_COMMUNICATION Communication
;
2178 const GUID
* Category
;
2183 ULONG ConstrainedDataRangesCount
;
2184 PKSDATARANGE
* ConstrainedDataRanges
;
2187 } KSPIN_DESCRIPTOR
, *PKSPIN_DESCRIPTOR
;
2191 (NTAPI
*PFNKSINTERSECTHANDLER
)(
2194 IN PKSDATARANGE DataRange
,
2195 OUT PVOID Data OPTIONAL
2200 (NTAPI
*PFNKSINTERSECTHANDLEREX
)(
2204 IN PKSDATARANGE DataRange
,
2205 IN PKSDATARANGE MatchingDataRange
,
2206 IN ULONG DataBufferSize
,
2207 OUT PVOID Data OPTIONAL
,
2213 const KSPIN_DISPATCH
* Dispatch
;
2214 const KSAUTOMATION_TABLE
* AutomationTable
;
2215 KSPIN_DESCRIPTOR PinDescriptor
;
2217 ULONG InstancesPossible
;
2218 ULONG InstancesNecessary
;
2219 const KSALLOCATOR_FRAMING_EX
* AllocatorFraming
;
2220 PFNKSINTERSECTHANDLEREX IntersectHandler
;
2221 } KSPIN_DESCRIPTOR_EX
, *PKSPIN_DESCRIPTOR_EX
;
2223 #define KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING 0x00000001
2224 #define KSFILTER_FLAG_CRITICAL_PROCESSING 0x00000002
2225 #define KSFILTER_FLAG_HYPERCRITICAL_PROCESSING 0x00000004
2226 #define KSFILTER_FLAG_RECEIVE_ZERO_LENGTH_SAMPLES 0x00000008
2227 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
2228 #define KSFILTER_FLAG_DENY_USERMODE_ACCESS 0x80000000
2232 #define KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING
2233 #define KSPIN_FLAG_CRITICAL_PROCESSING KSFILTER_FLAG_CRITICAL_PROCESSING
2234 #define KSPIN_FLAG_HYPERCRITICAL_PROCESSING KSFILTER_FLAG_HYPERCRITICAL_PROCESSING
2235 #define KSPIN_FLAG_ASYNCHRONOUS_PROCESSING 0x00000008
2236 #define KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING 0x00000010
2237 #define KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL 0x00000020
2238 #define KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING 0x00000040
2239 #define KSPIN_FLAG_ENFORCE_FIFO 0x00000080
2241 #define KSPIN_FLAG_GENERATE_MAPPINGS 0x00000100
2242 #define KSPIN_FLAG_DISTINCT_TRAILING_EDGE 0x00000200
2244 #define KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY 0x00010000
2245 #define KSPIN_FLAG_SPLITTER 0x00020000
2246 #define KSPIN_FLAG_USE_STANDARD_TRANSPORT 0x00040000
2247 #define KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT 0x00080000
2248 #define KSPIN_FLAG_FIXED_FORMAT 0x00100000
2249 #define KSPIN_FLAG_GENERATE_EOS_EVENTS 0x00200000
2250 #define KSPIN_FLAG_RENDERER (KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY|KSPIN_FLAG_GENERATE_EOS_EVENTS)
2251 #define KSPIN_FLAG_IMPLEMENT_CLOCK 0x00400000
2252 #define KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING 0x00800000
2253 #define KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE 0x01000000
2254 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
2255 #define KSPIN_FLAG_DENY_USERMODE_ACCESS 0x80000000
2260 const KSPIN_DESCRIPTOR_EX
* Descriptor
;
2264 KSPIN_COMMUNICATION Communication
;
2265 BOOLEAN ConnectionIsExternal
;
2266 KSPIN_INTERFACE ConnectionInterface
;
2267 KSPIN_MEDIUM ConnectionMedium
;
2268 KSPRIORITY ConnectionPriority
;
2269 PKSDATAFORMAT ConnectionFormat
;
2270 PKSMULTIPLE_ITEM AttributeList
;
2271 ULONG StreamHeaderSize
;
2272 KSPIN_DATAFLOW DataFlow
;
2273 KSSTATE DeviceState
;
2275 KSSTATE ClientState
;
2278 #define DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(Handler)\
2279 DEFINE_KSPROPERTY_ITEM(\
2280 KSPROPERTY_PIN_CINSTANCES,\
2283 sizeof(KSPIN_CINSTANCES),\
2284 NULL, NULL, 0, NULL, NULL, 0)
2286 #define DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(Handler)\
2287 DEFINE_KSPROPERTY_ITEM(\
2288 KSPROPERTY_PIN_CTYPES,\
2290 sizeof(KSPROPERTY),\
2292 NULL, NULL, 0, NULL, NULL, 0)
2294 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(Handler)\
2295 DEFINE_KSPROPERTY_ITEM(\
2296 KSPROPERTY_PIN_DATAFLOW,\
2299 sizeof(KSPIN_DATAFLOW),\
2300 NULL, NULL, 0, NULL, NULL, 0)
2302 #define DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(Handler)\
2303 DEFINE_KSPROPERTY_ITEM(\
2304 KSPROPERTY_PIN_DATARANGES,\
2308 NULL, NULL, 0, NULL, NULL, 0)
2310 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(Handler)\
2311 DEFINE_KSPROPERTY_ITEM(\
2312 KSPROPERTY_PIN_DATAINTERSECTION,\
2314 sizeof(KSP_PIN) + sizeof(KSMULTIPLE_ITEM),\
2316 NULL, NULL, 0, NULL, NULL, 0)
2318 #define DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(Handler)\
2319 DEFINE_KSPROPERTY_ITEM(\
2320 KSPROPERTY_PIN_INTERFACES,\
2324 NULL, NULL, 0, NULL, NULL, 0)
2326 #define DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(Handler)\
2327 DEFINE_KSPROPERTY_ITEM(\
2328 KSPROPERTY_PIN_MEDIUMS,\
2332 NULL, NULL, 0, NULL, NULL, 0)
2334 #define DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(Handler)\
2335 DEFINE_KSPROPERTY_ITEM(\
2336 KSPROPERTY_PIN_COMMUNICATION,\
2339 sizeof(KSPIN_COMMUNICATION),\
2340 NULL, NULL, 0, NULL, NULL, 0)
2342 #define DEFINE_KSPROPERTY_ITEM_PIN_GLOBALCINSTANCES(Handler)\
2343 DEFINE_KSPROPERTY_ITEM(\
2344 KSPROPERTY_PIN_GLOBALCINSTANCES,\
2347 sizeof(KSPIN_CINSTANCES),\
2348 NULL, NULL, 0, NULL, NULL, 0)
2350 #define DEFINE_KSPROPERTY_ITEM_PIN_NECESSARYINSTANCES(Handler)\
2351 DEFINE_KSPROPERTY_ITEM(\
2352 KSPROPERTY_PIN_NECESSARYINSTANCES,\
2356 NULL, NULL, 0, NULL, NULL, 0)
2358 #define DEFINE_KSPROPERTY_ITEM_PIN_PHYSICALCONNECTION(Handler)\
2359 DEFINE_KSPROPERTY_ITEM(\
2360 KSPROPERTY_PIN_PHYSICALCONNECTION,\
2364 NULL, NULL, 0, NULL, NULL, 0)
2366 #define DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(Handler)\
2367 DEFINE_KSPROPERTY_ITEM(\
2368 KSPROPERTY_PIN_CATEGORY,\
2372 NULL, NULL, 0, NULL, NULL, 0)
2374 #define DEFINE_KSPROPERTY_ITEM_PIN_NAME(Handler)\
2375 DEFINE_KSPROPERTY_ITEM(\
2376 KSPROPERTY_PIN_NAME,\
2380 NULL, NULL, 0, NULL, NULL, 0)
2382 #define DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(Handler)\
2383 DEFINE_KSPROPERTY_ITEM(\
2384 KSPROPERTY_PIN_CONSTRAINEDDATARANGES,\
2388 NULL, NULL, 0, NULL, NULL, 0)
2390 #define DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(Handler)\
2391 DEFINE_KSPROPERTY_ITEM(\
2392 KSPROPERTY_PIN_PROPOSEDATAFORMAT,\
2395 sizeof(KSDATAFORMAT),\
2396 (Handler), NULL, 0, NULL, NULL, 0)
2398 #define DEFINE_KSPROPERTY_PINSET(PinSet,\
2399 PropGeneral, PropInstances, PropIntersection)\
2400 DEFINE_KSPROPERTY_TABLE(PinSet) {\
2401 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
2402 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
2403 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
2404 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
2405 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
2406 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
2407 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
2408 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
2409 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
2410 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral)\
2413 #define DEFINE_KSPROPERTY_PINSETCONSTRAINED(PinSet,\
2414 PropGeneral, PropInstances, PropIntersection)\
2415 DEFINE_KSPROPERTY_TABLE(PinSet) {\
2416 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
2417 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
2418 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
2419 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
2420 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
2421 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
2422 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
2423 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
2424 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
2425 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral),\
2426 DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral)\
2439 #define DEFINE_KSPROPERTY_TABLE(tablename)\
2440 const KSPROPERTY_ITEM tablename[] =
2446 KSPIN_INTERFACE Interface
;
2447 KSPIN_MEDIUM Medium
;
2450 KSPRIORITY Priority
;
2451 } KSPIN_CONNECT
, *PKSPIN_CONNECT
;
2453 /* ===============================================================
2463 } KSTOPOLOGY_CONNECTION
, *PKSTOPOLOGY_CONNECTION
;
2467 ULONG CategoriesCount
;
2468 const GUID
* Categories
;
2469 ULONG TopologyNodesCount
;
2470 const GUID
* TopologyNodes
;
2471 ULONG TopologyConnectionsCount
;
2472 const KSTOPOLOGY_CONNECTION
* TopologyConnections
;
2473 const GUID
* TopologyNodesNames
;
2475 } KSTOPOLOGY
, *PKSTOPOLOGY
;
2478 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler)\
2479 DEFINE_KSPROPERTY_ITEM(\
2480 KSPROPERTY_TOPOLOGY_CATEGORIES,\
2482 sizeof(KSPROPERTY),\
2484 NULL, NULL, 0, NULL, NULL, 0)
2486 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler)\
2487 DEFINE_KSPROPERTY_ITEM(\
2488 KSPROPERTY_TOPOLOGY_NODES,\
2490 sizeof(KSPROPERTY),\
2492 NULL, NULL, 0, NULL, NULL, 0)
2494 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler)\
2495 DEFINE_KSPROPERTY_ITEM(\
2496 KSPROPERTY_TOPOLOGY_CONNECTIONS,\
2498 sizeof(KSPROPERTY),\
2500 NULL, NULL, 0, NULL, NULL, 0)
2502 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\
2503 DEFINE_KSPROPERTY_ITEM(\
2504 KSPROPERTY_TOPOLOGY_NAME,\
2508 NULL, NULL, 0, NULL, NULL, 0)
2510 #define DEFINE_KSPROPERTY_TOPOLOGYSET(TopologySet, Handler)\
2511 DEFINE_KSPROPERTY_TABLE(TopologySet) {\
2512 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler),\
2513 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler),\
2514 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler),\
2515 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\
2518 /* ===============================================================
2523 typedef void* UNKNOWN
;
2525 typedef PVOID (NTAPI
*PFNKSINITIALIZEALLOCATOR
)(
2526 IN PVOID InitialContext
,
2527 IN PKSALLOCATOR_FRAMING AllocatorFraming
,
2528 OUT PVOID
* Context
);
2530 #if defined(_NTDDK_)
2531 typedef NTSTATUS (NTAPI
*PFNKSALLOCATOR
)(
2533 IN ULONG BufferSize
,
2534 IN BOOLEAN InputOperation
);
2536 typedef NTSTATUS (NTAPI
*PFNKINTERSECTHANDLEREX
)(
2540 IN PKSDATARANGE DataRange
,
2541 IN PKSDATARANGE MatchingDataRange
,
2542 IN ULONG DataBufferSize
,
2543 OUT PVOID Data OPTIONAL
,
2544 OUT PULONG DataSize
);
2549 (NTAPI
*PFNALLOCATOR_ALLOCATEFRAME
)(
2550 IN PFILE_OBJECT FileObject
,
2556 (NTAPI
*PFNALLOCATOR_FREEFRAME
)(
2557 IN PFILE_OBJECT FileObject
,
2562 PFNALLOCATOR_ALLOCATEFRAME AllocateFrame
;
2563 PFNALLOCATOR_FREEFRAME FreeFrame
;
2564 } KSSTREAMALLOCATOR_FUNCTIONTABLE
, *PKSSTREAMALLOCATOR_FUNCTIONTABLE
;
2570 KSALLOCATOR_FRAMING Framing
;
2571 ULONG AllocatedFrames
;
2573 } KSSTREAMALLOCATOR_STATUS
, *PKSSTREAMALLOCATOR_STATUS
;
2577 KSALLOCATOR_FRAMING_EX Framing
;
2578 ULONG AllocatedFrames
;
2580 } KSSTREAMALLOCATOR_STATUS_EX
, *PKSSTREAMALLOCATOR_STATUS_EX
;
2585 ULONG TypeSpecificFlags
;
2586 KSTIME PresentationTime
;
2595 } KSSTREAM_HEADER
, *PKSSTREAM_HEADER
;
2597 #define KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT 0x00000001
2598 #define KSSTREAM_HEADER_OPTIONSF_PREROLL 0x00000002
2599 #define KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY 0x00000004
2600 #define KSSTREAM_HEADER_OPTIONSF_TYPECHANGED 0x00000008
2601 #define KSSTREAM_HEADER_OPTIONSF_TIMEVALID 0x00000010
2602 #define KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY 0x00000040
2603 #define KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE 0x00000080
2604 #define KSSTREAM_HEADER_OPTIONSF_DURATIONVALID 0x00000100
2605 #define KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM 0x00000200
2606 #define KSSTREAM_HEADER_OPTIONSF_BUFFEREDTRANSFER 0x00000400
2607 #define KSSTREAM_HEADER_OPTIONSF_VRAM_DATA_TRANSFER 0x00000800
2608 #define KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA 0x80000000
2610 /* ===============================================================
2613 #if defined(_NTDDK_)
2615 PHYSICAL_ADDRESS PhysicalAddress
;
2622 KSSTREAM_POINTER_STATE_UNLOCKED
= 0,
2623 KSSTREAM_POINTER_STATE_LOCKED
2624 } KSSTREAM_POINTER_STATE
;
2626 typedef struct _KSGATE KSGATE
, *PKSGATE
;
2627 typedef struct _KSPROCESSPIN_INDEXENTRY KSPROCESSPIN_INDEXENTRY
, *PKSPROCESSPIN_INDEXENTRY
;
2634 struct _KSSTREAM_POINTER_OFFSET
2636 #if defined(_NTDDK_)
2639 PKSMAPPING Mappings
;
2644 #if !defined(_WIN64)
2650 #if defined(_NTDDK_)
2651 struct _KSSTREAM_POINTER
2655 PKSSTREAM_HEADER StreamHeader
;
2656 PKSSTREAM_POINTER_OFFSET Offset
;
2657 KSSTREAM_POINTER_OFFSET OffsetIn
;
2658 KSSTREAM_POINTER_OFFSET OffsetOut
;
2661 struct _KSPROCESSPIN
2664 PKSSTREAM_POINTER StreamPointer
;
2665 PKSPROCESSPIN InPlaceCounterpart
;
2666 PKSPROCESSPIN DelegateBranch
;
2667 PKSPROCESSPIN CopySource
;
2669 ULONG BytesAvailable
;
2675 struct _KSPROCESSPIN_INDEXENTRY
2677 PKSPROCESSPIN
* Pins
;
2682 /* ===============================================================
2688 #if defined(_NTDDK_)
2690 typedef struct _KSFILTER_DISPATCH KSFILTER_DISPATCH
, *PKSFILTER_DISPATCH
;
2691 typedef struct _KSDEVICE KSDEVICE
, *PKSDEVICE
;
2692 typedef struct _KSFILTER KSFILTER
, *PKSFILTER
;
2693 typedef struct _KSNODE_DESCRIPTOR KSNODE_DESCRIPTOR
, *PKSNODE_DESCRIPTOR
;
2694 typedef struct _KSFILTER_DESCRIPTOR KSFILTER_DESCRIPTOR
, *PKSFILTER_DESCRIPTOR
;
2695 typedef struct _KSDEVICE_DESCRIPTOR KSDEVICE_DESCRIPTOR
, *PKSDEVICE_DESCRIPTOR
;
2697 typedef NTSTATUS (NTAPI
*PFNKSDEVICECREATE
)(
2698 IN PKSDEVICE Device
);
2700 typedef NTSTATUS (NTAPI
*PFNKSDEVICEPNPSTART
)(
2701 IN PKSDEVICE Device
,
2703 IN PCM_RESOURCE_LIST TranslatedResourceList OPTIONAL
,
2704 IN PCM_RESOURCE_LIST UntranslatedResourceList OPTIONAL
);
2706 typedef NTSTATUS (NTAPI
*PFNKSDEVICE
)(
2707 IN PKSDEVICE Device
);
2709 typedef NTSTATUS (NTAPI
*PFNKSDEVICEIRP
)(
2710 IN PKSDEVICE Device
,
2713 typedef VOID (NTAPI
*PFNKSDEVICEIRPVOID
)(
2714 IN PKSDEVICE Device
,
2717 typedef NTSTATUS (NTAPI
*PFNKSDEVICEQUERYCAPABILITIES
)(
2718 IN PKSDEVICE Device
,
2720 IN OUT PDEVICE_CAPABILITIES Capabilities
);
2722 typedef NTSTATUS (NTAPI
*PFNKSDEVICEQUERYPOWER
)(
2723 IN PKSDEVICE Device
,
2725 IN DEVICE_POWER_STATE DeviceTo
,
2726 IN DEVICE_POWER_STATE DeviceFrom
,
2727 IN SYSTEM_POWER_STATE SystemTo
,
2728 IN SYSTEM_POWER_STATE SystemFrom
,
2729 IN POWER_ACTION Action
);
2731 typedef VOID (NTAPI
*PFNKSDEVICESETPOWER
)(
2732 IN PKSDEVICE Device
,
2734 IN DEVICE_POWER_STATE To
,
2735 IN DEVICE_POWER_STATE From
);
2737 typedef struct _KSDEVICE_DISPATCH
{
2738 PFNKSDEVICECREATE Add
;
2739 PFNKSDEVICEPNPSTART Start
;
2740 PFNKSDEVICE PostStart
;
2741 PFNKSDEVICEIRP QueryStop
;
2742 PFNKSDEVICEIRPVOID CancelStop
;
2743 PFNKSDEVICEIRPVOID Stop
;
2744 PFNKSDEVICEIRP QueryRemove
;
2745 PFNKSDEVICEIRPVOID CancelRemove
;
2746 PFNKSDEVICEIRPVOID Remove
;
2747 PFNKSDEVICEQUERYCAPABILITIES QueryCapabilities
;
2748 PFNKSDEVICEIRPVOID SurpriseRemoval
;
2749 PFNKSDEVICEQUERYPOWER QueryPower
;
2750 PFNKSDEVICESETPOWER SetPower
;
2751 PFNKSDEVICEIRP QueryInterface
;
2752 }KSDEVICE_DISPATCH
, *PKSDEVICE_DISPATCH
;
2754 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
2755 #define KSDEVICE_DESCRIPTOR_VERSION_2 (0x110)
2756 #define MIN_DEV_VER_FOR_FLAGS (0x110)
2761 const KSDEVICE_DESCRIPTOR
* Descriptor
;
2764 PDEVICE_OBJECT FunctionalDeviceObject
;
2765 PDEVICE_OBJECT PhysicalDeviceObject
;
2766 PDEVICE_OBJECT NextDeviceObject
;
2768 SYSTEM_POWER_STATE SystemPowerState
;
2769 DEVICE_POWER_STATE DevicePowerState
;
2773 /* ===============================================================
2776 #if defined(_NTDDK_)
2779 const KSFILTER_DESCRIPTOR
* Descriptor
;
2786 (NTAPI
*PFNKSFILTERPOWER
)(
2787 IN PKSFILTER Filter
,
2788 IN DEVICE_POWER_STATE State
2791 typedef NTSTATUS (NTAPI
*PFNKSFILTERIRP
)(
2792 IN PKSFILTER Filter
,
2795 typedef NTSTATUS (NTAPI
*PFNKSFILTERPROCESS
)(
2796 IN PKSFILTER Filter
,
2797 IN PKSPROCESSPIN_INDEXENTRY ProcessPinsIndex
);
2799 typedef NTSTATUS (NTAPI
*PFNKSFILTERVOID
)(
2800 IN PKSFILTER Filter
);
2802 struct _KSFILTER_DISPATCH
2804 PFNKSFILTERIRP Create
;
2805 PFNKSFILTERIRP Close
;
2806 PFNKSFILTERPROCESS Process
;
2807 PFNKSFILTERVOID Reset
;
2810 struct _KSNODE_DESCRIPTOR
2812 const KSAUTOMATION_TABLE
* AutomationTable
;
2817 struct _KSFILTER_DESCRIPTOR
2819 const KSFILTER_DISPATCH
* Dispatch
;
2820 const KSAUTOMATION_TABLE
* AutomationTable
;
2823 const GUID
* ReferenceGuid
;
2824 ULONG PinDescriptorsCount
;
2825 ULONG PinDescriptorSize
;
2826 const KSPIN_DESCRIPTOR_EX
* PinDescriptors
;
2827 ULONG CategoriesCount
;
2828 const GUID
* Categories
;
2829 ULONG NodeDescriptorsCount
;
2830 ULONG NodeDescriptorSize
;
2831 const KSNODE_DESCRIPTOR
* NodeDescriptors
;
2832 ULONG ConnectionsCount
;
2833 const KSTOPOLOGY_CONNECTION
* Connections
;
2834 const KSCOMPONENTID
* ComponentId
;
2837 #define KSFILTER_DESCRIPTOR_VERSION ((ULONG)-1)
2839 struct _KSDEVICE_DESCRIPTOR
2841 const KSDEVICE_DISPATCH
* Dispatch
;
2842 ULONG FilterDescriptorsCount
;
2843 const KSFILTER_DESCRIPTOR
*const* FilterDescriptors
;
2848 struct _KSFILTERFACTORY
{
2849 const KSFILTER_DESCRIPTOR
* FilterDescriptor
;
2854 #define DEFINE_KSFILTER_DESCRIPTOR(descriptor)\
2855 const KSFILTER_DESCRIPTOR descriptor =
2857 #define DEFINE_KSFILTER_PIN_DESCRIPTORS(table)\
2858 SIZEOF_ARRAY(table),\
2862 #define DEFINE_KSFILTER_CATEGORIES(table)\
2863 SIZEOF_ARRAY(table),\
2866 #define DEFINE_KSFILTER_CATEGORY(category)\
2870 #define DEFINE_KSFILTER_CATEGORIES_NULL\
2874 #define DEFINE_KSFILTER_NODE_DESCRIPTORS(table)\
2875 SIZEOF_ARRAY(table),\
2879 #define DEFINE_KSFILTER_NODE_DESCRIPTORS_NULL\
2881 sizeof(KSNODE_DESCRIPTOR),\
2884 #define DEFINE_KSFILTER_CONNECTIONS(table)\
2885 SIZEOF_ARRAY(table),\
2888 #define DEFINE_KSFILTER_DEFAULT_CONNECTIONS\
2893 /* ===============================================================
2894 Minidriver Callbacks
2896 #if defined(_NTDDK_)
2897 typedef NTSTATUS (NTAPI
*KStrMethodHandler
)(
2899 IN PKSIDENTIFIER Request
,
2902 typedef NTSTATUS (NTAPI
*KStrSupportHandler
)(
2904 IN PKSIDENTIFIER Request
,
2908 /* ===============================================================
2911 #if defined(_NTDDK_)
2912 KSDDKAPI NTSTATUS NTAPI
2914 IN HANDLE ConnectionHandle
,
2915 IN PKSALLOCATOR_FRAMING AllocatorFraming
,
2916 OUT PHANDLE AllocatorHandle
);
2918 KSDDKAPI NTSTATUS NTAPI
2919 KsCreateDefaultAllocator(
2922 KSDDKAPI NTSTATUS NTAPI
2923 KsValidateAllocatorCreateRequest(
2925 OUT PKSALLOCATOR_FRAMING
* AllocatorFraming
);
2927 KSDDKAPI NTSTATUS NTAPI
2928 KsCreateDefaultAllocatorEx(
2930 IN PVOID InitializeContext OPTIONAL
,
2931 IN PFNKSDEFAULTALLOCATE DefaultAllocate OPTIONAL
,
2932 IN PFNKSDEFAULTFREE DefaultFree OPTIONAL
,
2933 IN PFNKSINITIALIZEALLOCATOR InitializeAllocator OPTIONAL
,
2934 IN PFNKSDELETEALLOCATOR DeleteAllocator OPTIONAL
);
2936 KSDDKAPI NTSTATUS NTAPI
2937 KsValidateAllocatorFramingEx(
2938 IN PKSALLOCATOR_FRAMING_EX Framing
,
2939 IN ULONG BufferSize
,
2940 IN
const KSALLOCATOR_FRAMING_EX
* PinFraming
);
2943 /* ===============================================================
2946 #if defined(_NTDDK_)
2947 typedef BOOLEAN (NTAPI
*PFNKSSETTIMER
)(
2950 IN LARGE_INTEGER DueTime
,
2953 typedef BOOLEAN (NTAPI
*PFNKSCANCELTIMER
)(
2957 typedef LONGLONG (FASTCALL
*PFNKSCORRELATEDTIME
)(
2959 OUT PLONGLONG SystemTime
);
2961 KSDDKAPI NTSTATUS NTAPI
2963 IN HANDLE ConnectionHandle
,
2964 IN PKSCLOCK_CREATE ClockCreate
,
2965 OUT PHANDLE ClockHandle
);
2967 KSDDKAPI NTSTATUS NTAPI
2968 KsCreateDefaultClock(
2970 IN PKSDEFAULTCLOCK DefaultClock
);
2972 KSDDKAPI NTSTATUS NTAPI
2973 KsAllocateDefaultClock(
2974 OUT PKSDEFAULTCLOCK
* DefaultClock
);
2976 KSDDKAPI NTSTATUS NTAPI
2977 KsAllocateDefaultClockEx(
2978 OUT PKSDEFAULTCLOCK
* DefaultClock
,
2979 IN PVOID Context OPTIONAL
,
2980 IN PFNKSSETTIMER SetTimer OPTIONAL
,
2981 IN PFNKSCANCELTIMER CancelTimer OPTIONAL
,
2982 IN PFNKSCORRELATEDTIME CorrelatedTime OPTIONAL
,
2983 IN
const KSRESOLUTION
* Resolution OPTIONAL
,
2988 IN PKSDEFAULTCLOCK DefaultClock
);
2990 KSDDKAPI NTSTATUS NTAPI
2991 KsValidateClockCreateRequest(
2993 OUT PKSCLOCK_CREATE
* ClockCreate
);
2995 KSDDKAPI KSSTATE NTAPI
2996 KsGetDefaultClockState(
2997 IN PKSDEFAULTCLOCK DefaultClock
);
3000 KsSetDefaultClockState(
3001 IN PKSDEFAULTCLOCK DefaultClock
,
3004 KSDDKAPI LONGLONG NTAPI
3005 KsGetDefaultClockTime(
3006 IN PKSDEFAULTCLOCK DefaultClock
);
3009 KsSetDefaultClockTime(
3010 IN PKSDEFAULTCLOCK DefaultClock
,
3014 /* ===============================================================
3018 /* Method sets - TODO: Make into macros! */
3019 #if defined(_NTDDK_)
3022 KSMETHOD_SET_IRP_STORAGE(
3026 KSMETHOD_ITEM_IRP_STORAGE(
3030 KSMETHOD_TYPE_IRP_STORAGE(
3034 KSDDKAPI NTSTATUS NTAPI
3037 IN ULONG MethodSetsCount
,
3038 IN PKSMETHOD_SET MethodSet
);
3040 KSDDKAPI NTSTATUS NTAPI
3041 KsMethodHandlerWithAllocator(
3043 IN ULONG MethodSetsCount
,
3044 IN PKSMETHOD_SET MethodSet
,
3045 IN PFNKSALLOCATOR Allocator OPTIONAL
,
3046 IN ULONG MethodItemSize OPTIONAL
);
3048 KSDDKAPI BOOLEAN NTAPI
3049 KsFastMethodHandler(
3050 IN PFILE_OBJECT FileObject
,
3051 IN PKSMETHOD UNALIGNED Method
,
3052 IN ULONG MethodLength
,
3053 IN OUT PVOID UNALIGNED Data
,
3054 IN ULONG DataLength
,
3055 OUT PIO_STATUS_BLOCK IoStatus
,
3056 IN ULONG MethodSetsCount
,
3057 IN
const KSMETHOD_SET
* MethodSet
);
3060 /* ===============================================================
3063 #if defined(_NTDDK_)
3064 KSDDKAPI NTSTATUS NTAPI
3067 IN ULONG PropertySetsCount
,
3068 IN
const KSPROPERTY_SET
* PropertySet
);
3070 KSDDKAPI NTSTATUS NTAPI
3071 KsPropertyHandlerWithAllocator(
3073 IN ULONG PropertySetsCount
,
3074 IN PKSPROPERTY_SET PropertySet
,
3075 IN PFNKSALLOCATOR Allocator OPTIONAL
,
3076 IN ULONG PropertyItemSize OPTIONAL
);
3078 KSDDKAPI NTSTATUS NTAPI
3079 KsUnserializeObjectPropertiesFromRegistry(
3080 IN PFILE_OBJECT FileObject
,
3081 IN HANDLE ParentKey OPTIONAL
,
3082 IN PUNICODE_STRING RegistryPath OPTIONAL
);
3084 KSDDKAPI BOOLEAN NTAPI
3085 KsFastPropertyHandler(
3086 IN PFILE_OBJECT FileObject
,
3087 IN PKSPROPERTY UNALIGNED Property
,
3088 IN ULONG PropertyLength
,
3089 IN OUT PVOID UNALIGNED Data
,
3090 IN ULONG DataLength
,
3091 OUT PIO_STATUS_BLOCK IoStatus
,
3092 IN ULONG PropertySetsCount
,
3093 IN
const KSPROPERTY_SET
* PropertySet
);
3096 /* ===============================================================
3100 #if defined(_NTDDK_)
3102 #define KSPROBE_STREAMREAD 0x00000000
3103 #define KSPROBE_STREAMWRITE 0x00000001
3104 #define KSPROBE_ALLOCATEMDL 0x00000010
3105 #define KSPROBE_PROBEANDLOCK 0x00000020
3106 #define KSPROBE_SYSTEMADDRESS 0x00000040
3107 #define KSPROBE_MODIFY 0x00000200
3108 #define KSPROBE_STREAMWRITEMODIFY (KSPROBE_MODIFY | KSPROBE_STREAMWRITE)
3109 #define KSPROBE_ALLOWFORMATCHANGE 0x00000080
3111 #define KSSTREAM_READ KSPROBE_STREAMREAD
3112 #define KSSTREAM_WRITE KSPROBE_STREAMWRITE
3113 #define KSSTREAM_PAGED_DATA 0x00000000
3114 #define KSSTREAM_NONPAGED_DATA 0x00000100
3115 #define KSSTREAM_SYNCHRONOUS 0x00001000
3116 #define KSSTREAM_FAILUREEXCEPTION 0x00002000
3120 (NTAPI
*PFNKSGENERATEEVENTCALLBACK
)(
3122 IN PKSEVENT_ENTRY EventEntry
3125 KSDDKAPI NTSTATUS NTAPI
3127 IN PKSEVENT_ENTRY EntryEvent
);
3132 IN
const GUID
* EventSet OPTIONAL
,
3135 IN PVOID Data OPTIONAL
,
3136 IN PFNKSGENERATEEVENTCALLBACK CallBack OPTIONAL
,
3137 IN PVOID CallBackContext OPTIONAL
3141 KSDDKAPI NTSTATUS NTAPI
3142 KsEnableEventWithAllocator(
3144 IN ULONG EventSetsCount
,
3145 IN PKSEVENT_SET EventSet
,
3146 IN OUT PLIST_ENTRY EventsList OPTIONAL
,
3147 IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL
,
3148 IN PVOID EventsLock OPTIONAL
,
3149 IN PFNKSALLOCATOR Allocator OPTIONAL
,
3150 IN ULONG EventItemSize OPTIONAL
);
3152 KSDDKAPI NTSTATUS NTAPI
3153 KsGenerateDataEvent(
3154 IN PKSEVENT_ENTRY EventEntry
,
3158 KSDDKAPI NTSTATUS NTAPI
3161 IN ULONG EventSetsCount
,
3162 IN KSEVENT_SET
* EventSet
,
3163 IN OUT PLIST_ENTRY EventsList OPTIONAL
,
3164 IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL
,
3165 IN PVOID EventsLock OPTIONAL
);
3169 IN PKSEVENT_ENTRY EventEntry
);
3171 KSDDKAPI NTSTATUS NTAPI
3174 IN OUT PLIST_ENTRY EventsList
,
3175 IN KSEVENTS_LOCKTYPE EventsFlags
,
3176 IN PVOID EventsLock
);
3180 IN PFILE_OBJECT FileObject
,
3181 IN OUT PLIST_ENTRY EventsList
,
3182 IN KSEVENTS_LOCKTYPE EVentsFlags
,
3183 IN PVOID EventsLock
);
3185 /* ===============================================================
3189 KSDDKAPI NTSTATUS NTAPI
3190 KsValidateTopologyNodeCreateRequest(
3192 IN PKSTOPOLOGY Topology
,
3193 OUT PKSNODE_CREATE
* NodeCreate
);
3195 KSDDKAPI NTSTATUS NTAPI
3196 KsCreateTopologyNode(
3197 IN HANDLE ParentHandle
,
3198 IN PKSNODE_CREATE NodeCreate
,
3199 IN ACCESS_MASK DesiredAccess
,
3200 OUT PHANDLE NodeHandle
);
3202 KSDDKAPI NTSTATUS NTAPI
3203 KsTopologyPropertyHandler(
3205 IN PKSPROPERTY Property
,
3207 IN
const KSTOPOLOGY
* Topology
);
3211 /* ===============================================================
3212 Connectivity Functions
3215 KSDDKAPI NTSTATUS NTAPI
3217 IN HANDLE FilterHandle
,
3218 IN PKSPIN_CONNECT Connect
,
3219 IN ACCESS_MASK DesiredAccess
,
3220 OUT PHANDLE ConnectionHandle
);
3222 KSDDKAPI NTSTATUS NTAPI
3223 KsValidateConnectRequest(
3225 IN ULONG DescriptorsCount
,
3226 IN KSPIN_DESCRIPTOR
* Descriptor
,
3227 OUT PKSPIN_CONNECT
* Connect
);
3229 KSDDKAPI NTSTATUS NTAPI
3230 KsPinPropertyHandler(
3232 IN PKSPROPERTY Property
,
3234 IN ULONG DescriptorsCount
,
3235 IN
const KSPIN_DESCRIPTOR
* Descriptor
);
3237 KSDDKAPI NTSTATUS NTAPI
3238 KsPinDataIntersection(
3242 IN ULONG DescriptorsCount
,
3243 IN
const KSPIN_DESCRIPTOR
* Descriptor
,
3244 IN PFNKSINTERSECTHANDLER IntersectHandler
);
3246 KSDDKAPI NTSTATUS NTAPI
3247 KsPinDataIntersectionEx(
3251 IN ULONG DescriptorsCount
,
3252 IN
const KSPIN_DESCRIPTOR
* Descriptor
,
3253 IN ULONG DescriptorSize
,
3254 IN PFNKSINTERSECTHANDLEREX IntersectHandler OPTIONAL
,
3255 IN PVOID HandlerContext OPTIONAL
);
3257 KSDDKAPI PKSFILTER NTAPI
3258 KsPinGetParentFilter(
3262 KSDDKAPI PKSPIN NTAPI
3263 KsPinGetNextSiblingPin(
3268 /* Does this belong here? */
3270 KSDDKAPI NTSTATUS NTAPI
3271 KsHandleSizedListQuery(
3273 IN ULONG DataItemsCount
,
3274 IN ULONG DataItemSize
,
3275 IN
const VOID
* DataItems
);
3278 /* ===============================================================
3279 IRP Helper Functions
3282 typedef NTSTATUS (NTAPI
*PFNKSIRPLISTCALLBACK
)(
3286 KSDDKAPI NTSTATUS NTAPI
3287 KsAcquireResetValue(
3289 OUT KSRESET
* ResetValue
);
3292 KsAddIrpToCancelableQueue(
3293 IN OUT PLIST_ENTRY QueueHead
,
3294 IN PKSPIN_LOCK SpinLock
,
3296 IN KSLIST_ENTRY_LOCATION ListLocation
,
3297 IN PDRIVER_CANCEL DriverCancel OPTIONAL
);
3299 KSDDKAPI NTSTATUS NTAPI
3300 KsAddObjectCreateItemToDeviceHeader(
3301 IN KSDEVICE_HEADER Header
,
3302 IN PDRIVER_DISPATCH Create
,
3304 IN PWCHAR ObjectClass
,
3305 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
3307 KSDDKAPI NTSTATUS NTAPI
3308 KsAddObjectCreateItemToObjectHeader(
3309 IN KSOBJECT_HEADER Header
,
3310 IN PDRIVER_DISPATCH Create
,
3312 IN PWCHAR ObjectClass
,
3313 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
3315 KSDDKAPI NTSTATUS NTAPI
3316 KsAllocateDeviceHeader(
3317 OUT KSDEVICE_HEADER
* Header
,
3318 IN ULONG ItemsCount
,
3319 IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL
);
3321 KSDDKAPI NTSTATUS NTAPI
3322 KsAllocateExtraData(
3325 OUT PVOID
* ExtraBuffer
);
3327 KSDDKAPI NTSTATUS NTAPI
3328 KsAllocateObjectCreateItem(
3329 IN KSDEVICE_HEADER Header
,
3330 IN PKSOBJECT_CREATE_ITEM CreateItem
,
3331 IN BOOLEAN AllocateEntry
,
3332 IN PFNKSITEMFREECALLBACK ItemFreeCallback OPTIONAL
);
3334 KSDDKAPI NTSTATUS NTAPI
3335 KsAllocateObjectHeader(
3336 OUT KSOBJECT_HEADER
*Header
,
3337 IN ULONG ItemsCount
,
3338 IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL
,
3340 IN KSDISPATCH_TABLE
* Table
);
3344 IN OUT PLIST_ENTRY QueueHead
,
3345 IN PKSPIN_LOCK SpinLock
);
3349 IN PDEVICE_OBJECT DeviceObject
,
3352 KSDDKAPI NTSTATUS NTAPI
3353 KsDefaultDeviceIoCompletion(
3354 IN PDEVICE_OBJECT DeviceObject
,
3358 KSDDKAPI ULONG NTAPI
3359 KsDecrementCountedWorker(
3360 IN PKSWORKER Worker);
3363 KSDDKAPI BOOLEAN NTAPI
3364 KsDispatchFastIoDeviceControlFailure(
3365 IN PFILE_OBJECT FileObject
,
3367 IN PVOID InputBuffer OPTIONAL
,
3368 IN ULONG InputBufferLength
,
3369 OUT PVOID OutputBuffer OPTIONAL
,
3370 IN ULONG OutputBufferLength
,
3371 IN ULONG IoControlCode
,
3372 OUT PIO_STATUS_BLOCK IoStatus
,
3373 IN PDEVICE_OBJECT DeviceObject
); /* always return false */
3375 KSDDKAPI BOOLEAN NTAPI
3376 KsDispatchFastReadFailure(
3377 IN PFILE_OBJECT FileObject
,
3378 IN PLARGE_INTEGER FileOffset
,
3383 OUT PIO_STATUS_BLOCK IoStatus
,
3384 IN PDEVICE_OBJECT DeviceObject
); /* always return false */
3386 /* This function does the same as the above */
3387 #define KsDispatchFastWriteFailure KsDispatchFastReadFailure
3389 KSDDKAPI NTSTATUS NTAPI
3390 KsDispatchInvalidDeviceRequest(
3391 IN PDEVICE_OBJECT DeviceObject
,
3394 KSDDKAPI NTSTATUS NTAPI
3396 IN PDEVICE_OBJECT DeviceObject
,
3399 KSDDKAPI NTSTATUS NTAPI
3400 KsDispatchSpecificMethod(
3402 IN PFNKSHANDLER Handler
);
3404 KSDDKAPI NTSTATUS NTAPI
3405 KsDispatchSpecificProperty(
3407 IN PFNKSHANDLER Handler
);
3409 KSDDKAPI NTSTATUS NTAPI
3410 KsForwardAndCatchIrp(
3411 IN PDEVICE_OBJECT DeviceObject
,
3413 IN PFILE_OBJECT FileObject
,
3414 IN KSSTACK_USE StackUse
);
3416 KSDDKAPI NTSTATUS NTAPI
3419 IN PFILE_OBJECT FileObject
,
3420 IN BOOLEAN ReuseStackLocation
);
3424 IN KSDEVICE_HEADER Header
);
3430 KSDDKAPI NTSTATUS NTAPI
3431 KsGetChildCreateParameter(
3433 OUT PVOID
* CreateParameter
);
3435 KSDDKAPI NTSTATUS NTAPI
3436 KsMoveIrpsOnCancelableQueue(
3437 IN OUT PLIST_ENTRY SourceList
,
3438 IN PKSPIN_LOCK SourceLock
,
3439 IN OUT PLIST_ENTRY DestinationList
,
3440 IN PKSPIN_LOCK DestinationLock OPTIONAL
,
3441 IN KSLIST_ENTRY_LOCATION ListLocation
,
3442 IN PFNKSIRPLISTCALLBACK ListCallback
,
3445 KSDDKAPI NTSTATUS NTAPI
3448 IN ULONG ProbeFlags
,
3449 IN ULONG HeaderSize
);
3451 KSDDKAPI NTSTATUS NTAPI
3452 KsQueryInformationFile(
3453 IN PFILE_OBJECT FileObject
,
3454 OUT PVOID FileInformation
,
3456 IN FILE_INFORMATION_CLASS FileInformationClass
);
3458 KSDDKAPI ACCESS_MASK NTAPI
3459 KsQueryObjectAccessMask(
3460 IN KSOBJECT_HEADER Header
);
3462 KSDDKAPI PKSOBJECT_CREATE_ITEM NTAPI
3463 KsQueryObjectCreateItem(
3464 IN KSOBJECT_HEADER Header
);
3466 KSDDKAPI NTSTATUS NTAPI
3468 IN PFILE_OBJECT FileObject
,
3469 IN PKEVENT Event OPTIONAL
,
3470 IN PVOID PortContext OPTIONAL
,
3471 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3474 IN ULONG Key OPTIONAL
,
3475 IN KPROCESSOR_MODE RequestorMode
);
3478 KsReleaseIrpOnCancelableQueue(
3480 IN PDRIVER_CANCEL DriverCancel OPTIONAL
);
3483 KsRemoveIrpFromCancelableQueue(
3484 IN OUT PLIST_ENTRY QueueHead
,
3485 IN PKSPIN_LOCK SpinLock
,
3486 IN KSLIST_ENTRY_LOCATION ListLocation
,
3487 IN KSIRP_REMOVAL_OPERATION RemovalOperation
);
3490 KsRemoveSpecificIrpFromCancelableQueue(
3493 KSDDKAPI NTSTATUS NTAPI
3494 KsSetInformationFile(
3495 IN PFILE_OBJECT FileObject
,
3496 IN PVOID FileInformation
,
3498 IN FILE_INFORMATION_CLASS FileInformationClass
);
3500 KSDDKAPI NTSTATUS NTAPI
3501 KsSetMajorFunctionHandler(
3502 IN PDRIVER_OBJECT DriverObject
,
3503 IN ULONG MajorFunction
);
3505 KSDDKAPI NTSTATUS NTAPI
3507 IN PFILE_OBJECT FileObject
,
3508 IN PKEVENT Event OPTIONAL
,
3509 IN PVOID PortContext OPTIONAL
,
3510 IN PIO_COMPLETION_ROUTINE CompletionRoutine OPTIONAL
,
3511 IN PVOID CompletionContext OPTIONAL
,
3512 IN KSCOMPLETION_INVOCATION CompletionInvocationFlags OPTIONAL
,
3513 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3514 IN OUT PVOID StreamHeaders
,
3517 IN KPROCESSOR_MODE RequestorMode
);
3519 KSDDKAPI NTSTATUS NTAPI
3521 IN PFILE_OBJECT FileObject
,
3522 IN PKEVENT Event OPTIONAL
,
3523 IN PVOID PortContext OPTIONAL
,
3524 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3527 IN ULONG Key OPTIONAL
,
3528 IN KPROCESSOR_MODE RequestorMode
);
3531 KSDDKAPI NTSTATUS NTAPI
3532 KsDefaultForwardIrp(
3533 IN PDEVICE_OBJECT DeviceObject
,
3536 /* ===============================================================
3537 Worker Management Functions
3540 KSDDKAPI NTSTATUS NTAPI
3542 IN WORK_QUEUE_TYPE WorkQueueType
,
3543 OUT PKSWORKER
* Worker
);
3547 IN PKSWORKER Worker
);
3549 KSDDKAPI NTSTATUS NTAPI
3550 KsRegisterCountedWorker(
3551 IN WORK_QUEUE_TYPE WorkQueueType
,
3552 IN PWORK_QUEUE_ITEM CountedWorkItem
,
3553 OUT PKSWORKER
* Worker
);
3555 KSDDKAPI ULONG NTAPI
3556 KsDecrementCountedWorker(
3557 IN PKSWORKER Worker
);
3559 KSDDKAPI ULONG NTAPI
3560 KsIncrementCountedWorker(
3561 IN PKSWORKER Worker
);
3563 KSDDKAPI NTSTATUS NTAPI
3565 IN PKSWORKER Worker
,
3566 IN PWORK_QUEUE_ITEM WorkItem
);
3569 /* ===============================================================
3573 KSDDKAPI NTSTATUS NTAPI
3576 IN POOL_TYPE PoolType
,
3577 IN ULONG_PTR ResourceName
,
3578 IN ULONG ResourceType
,
3579 OUT PVOID
* Resource
,
3580 OUT PULONG ResourceSize
);
3583 KSDDKAPI NTSTATUS NTAPI
3584 KsGetImageNameAndResourceId(
3586 OUT PUNICODE_STRING ImageName,
3587 OUT PULONG_PTR ResourceId,
3588 OUT PULONG ValueType);
3590 KSDDKAPI NTSTATUS NTAPI
3592 IN PDEVICE_OBJECT PhysicalDeviceObject,
3593 IN PUNICODE_STRING ModuleName,
3594 OUT PUNICODE_STRING ImageName,
3595 OUT PULONG_PTR ResourceId,
3596 OUT PULONG ValueType);
3600 /* ===============================================================
3601 Misc. Helper Functions
3604 KSDDKAPI PVOID NTAPI
3609 KSDDKAPI NTSTATUS NTAPI
3611 IN PUNICODE_STRING SymbolicLink
,
3612 IN PKSPIN_MEDIUM Medium
,
3613 IN ULONG PinDirection
);
3615 KSDDKAPI NTSTATUS NTAPI
3616 KsDefaultDispatchPnp(
3617 IN PDEVICE_OBJECT DeviceObject
,
3621 KsSetDevicePnpAndBaseObject(
3622 IN KSDEVICE_HEADER Header
,
3623 IN PDEVICE_OBJECT PnpDeviceObject
,
3624 IN PDEVICE_OBJECT BaseDevice
);
3626 KSDDKAPI NTSTATUS NTAPI
3627 KsDefaultDispatchPower(
3628 IN PDEVICE_OBJECT DeviceObject
,
3633 IN KSOBJECT_HEADER Header
,
3634 IN PFNKSCONTEXT_DISPATCH PowerDispatch OPTIONAL
,
3635 IN PVOID PowerContext OPTIONAL
);
3637 KSDDKAPI NTSTATUS NTAPI
3638 KsReferenceBusObject(
3639 IN KSDEVICE_HEADER Header
);
3642 KsDereferenceBusObject(
3643 IN KSDEVICE_HEADER Header
);
3645 KSDDKAPI NTSTATUS NTAPI
3646 KsFreeObjectCreateItem(
3647 IN KSDEVICE_HEADER Header
,
3648 IN PUNICODE_STRING CreateItem
);
3650 KSDDKAPI NTSTATUS NTAPI
3651 KsFreeObjectCreateItemsByContext(
3652 IN KSDEVICE_HEADER Header
,
3657 IN PDRIVER_OBJECT DriverObject
);
3659 KSDDKAPI PDEVICE_OBJECT NTAPI
3660 KsQueryDevicePnpObject(
3661 IN KSDEVICE_HEADER Header
);
3664 KsRecalculateStackDepth(
3665 IN KSDEVICE_HEADER Header
,
3666 IN BOOLEAN ReuseStackLocation
);
3669 KsSetTargetDeviceObject(
3670 IN KSOBJECT_HEADER Header
,
3671 IN PDEVICE_OBJECT TargetDevice OPTIONAL
);
3675 IN KSOBJECT_HEADER Header
,
3676 IN KSTARGET_STATE TargetState
);
3678 KSDDKAPI NTSTATUS NTAPI
3679 KsSynchronousIoControlDevice(
3680 IN PFILE_OBJECT FileObject
,
3681 IN KPROCESSOR_MODE RequestorMode
,
3685 OUT PVOID OutBuffer
,
3687 OUT PULONG BytesReturned
);
3692 KsFilterGetFirstChildPin(
3693 IN PKSFILTER Filter
,
3700 KsPinGetConnectedPinFileObject(
3710 IN HANDLE FilterHandle
,
3711 IN PKSPIN_CONNECT Connect
,
3712 IN ACCESS_MASK DesiredAccess
,
3713 OUT PHANDLE ConnectionHandle
3719 /* ===============================================================
3720 AVStream Functions (XP / DirectX 8)
3722 http://www.osronline.com/ddkx/stream/avstream_5q9f.htm
3725 #if defined(_NTDDK_)
3730 KsMergeAutomationTables(
3731 OUT PKSAUTOMATION_TABLE
* AutomationTableAB
,
3732 IN PKSAUTOMATION_TABLE AutomationTableA OPTIONAL
,
3733 IN PKSAUTOMATION_TABLE AutomationTableB OPTIONAL
,
3734 IN KSOBJECT_BAG Bag OPTIONAL
3741 IN PDRIVER_OBJECT DriverObject
,
3742 IN PUNICODE_STRING RegistryPath
,
3743 IN
const KSDEVICE_DESCRIPTOR
*Descriptor OPTIONAL
);
3745 typedef struct _KSFILTERFACTORY KSFILTERFACTORY
, *PKSFILTERFACTORY
; //FIXME
3752 KsInitializeDevice (
3753 IN PDEVICE_OBJECT FunctionalDeviceObject
,
3754 IN PDEVICE_OBJECT PhysicalDeviceObject
,
3755 IN PDEVICE_OBJECT NextDeviceObject
,
3756 IN
const KSDEVICE_DESCRIPTOR
* Descriptor OPTIONAL
);
3759 typedef void (NTAPI
*PFNKSFILTERFACTORYPOWER
)(
3760 IN PKSFILTERFACTORY FilterFactory
,
3761 IN DEVICE_POWER_STATE State
);
3767 IN KSOBJECT_BAG ObjectBag
,
3768 IN OUT PVOID
* PointerToPointerToItem
,
3783 IN PKSDEVICE Device
);
3789 IN PDRIVER_OBJECT DriverObject
,
3790 IN PDEVICE_OBJECT PhysicalDeviceObject
);
3797 IN PKSEVENT_ENTRY EventEntry
);
3802 KsAddItemToObjectBag(
3803 IN KSOBJECT_BAG ObjectBag
,
3805 IN PFNKSFREE Free OPTIONAL
);
3810 KsRemoveItemFromObjectBag(
3811 IN KSOBJECT_BAG ObjectBag
,
3818 KsAllocateObjectBag(
3819 IN PKSDEVICE Device
,
3820 OUT KSOBJECT_BAG
* ObjectBag
);
3826 IN KSOBJECT_BAG ObjectBag
3832 KsCompletePendingRequest(
3838 KsCopyObjectBagItems(
3839 IN KSOBJECT_BAG ObjectBagDestination
,
3840 IN KSOBJECT_BAG ObjectBagSource
);
3846 IN PDRIVER_OBJECT DriverObject
,
3847 IN PDEVICE_OBJECT PhysicalDeviceObject
,
3848 IN
const KSDEVICE_DESCRIPTOR
* Descriptor OPTIONAL
,
3849 IN ULONG ExtensionSize OPTIONAL
,
3850 OUT PKSDEVICE
* Device OPTIONAL
);
3855 KsCreateFilterFactory(
3856 IN PDEVICE_OBJECT DeviceObject
,
3857 IN
const KSFILTER_DESCRIPTOR
* Descriptor
,
3858 IN PWCHAR RefString OPTIONAL
,
3859 IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL
,
3860 IN ULONG CreateItemFlags
,
3861 IN PFNKSFILTERFACTORYPOWER SleepCallback OPTIONAL
,
3862 IN PFNKSFILTERFACTORYPOWER WakeCallback OPTIONAL
,
3863 OUT PKSFILTERFACTORY
*FilterFactory OPTIONAL
);
3868 KsFilterFactoryUpdateCacheData(
3869 IN PKSFILTERFACTORY FilterFactory
,
3870 IN
const KSFILTER_DESCRIPTOR
*FilterDescriptor OPTIONAL
3890 KsDefaultAddEventHandler(
3892 IN PKSEVENTDATA EventData
,
3893 IN OUT PKSEVENT_ENTRY EventEntry
);
3898 KsDispatchQuerySecurity(
3899 IN PDEVICE_OBJECT DeviceObject
,
3906 KsDispatchSetSecurity(