- Fix KiDispatchException to unmask KI_EXCEPTION_INTERNAL when setting the exception...
[reactos.git] / reactos / include / ddk / ks.h
1 /*
2 ReactOS
3 Kernel Streaming API
4
5 by Andrew Greenwood
6
7 NOTES:
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.
10
11 Some of the structs/funcs may be incorrectly grouped.
12
13 GUIDs need to be defined properly.
14
15 AVStream functionality (XP and above, DirectX 8.0 and above) will NOT
16 implemented for a while.
17
18 Some example code for interaction from usermode:
19 DeviceIoControl(
20 FilterHandle,
21 IOCTL_KS_PROPERTY,
22 &Property,
23 sizeof(KSPROPERTY),
24 &SeekingCapabilities,
25 sizeof(KS_SEEKING_CAPABILITIES),
26 &BytesReturned,
27 &Overlapped);
28 */
29
30 #ifndef KS_H
31 #define KS_H
32
33 #if __GNUC__ >=3
34 #pragma GCC system_header
35 #endif
36
37 #ifdef __cplusplus
38 extern "C" {
39 #endif
40
41 #ifdef BUILDING_KS
42 #define KSDDKAPI
43 #else
44 #define KSDDKAPI DECLSPEC_IMPORT
45 #endif
46
47 #include <reactos/debug.h>
48 #include <ntddk.h>
49
50 /* TODO */
51 #define KSDDKAPI
52
53
54 typedef PVOID PKSWORKER;
55
56 /* ===============================================================
57 I/O Control Codes
58 */
59
60 #define IOCTL_KS_DISABLE_EVENT \
61 CTL_CODE( \
62 FILE_DEVICE_KS, \
63 0x000, \
64 METHOD_NEITHER, \
65 FILE_ANY_ACCESS)
66
67 #define IOCTL_KS_ENABLE_EVENT \
68 CTL_CODE( \
69 FILE_DEVICE_KS, \
70 0x001, \
71 METHOD_NEITHER, \
72 FILE_ANY_ACCESS)
73
74 #define IOCTL_KS_METHOD \
75 CTL_CODE( \
76 FILE_DEVICE_KS, \
77 0x002, \
78 METHOD_NEITHER, \
79 FILE_ANY_ACCESS)
80
81 #define IOCTL_KS_PROPERTY \
82 CTL_CODE( \
83 FILE_DEVICE_KS, \
84 0x003, \
85 METHOD_NEITHER, \
86 FILE_ANY_ACCESS)
87
88 #define IOCTL_KS_WRITE_STREAM \
89 CTL_CODE( \
90 FILE_DEVICE_KS, \
91 0x004, \
92 METHOD_NEITHER, \
93 FILE_WRITE_ACCESS)
94
95 #define IOCTL_KS_READ_STREAM \
96 CTL_CODE( \
97 FILE_DEVICE_KS, \
98 0x005, \
99 METHOD_NEITHER, \
100 FILE_READ_ACCESS)
101
102 #define IOCTL_KS_RESET_STATE \
103 CTL_CODE( \
104 FILE_DEVICE_KS, \
105 0x006, \
106 METHOD_NEITHER, \
107 FILE_ANY_ACCESS)
108
109
110 /* ===============================================================
111 Clock Properties/Methods/Events
112 */
113
114 #define KSPROPSETID_Clock \
115 0xDF12A4C0L, 0xAC17, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
116
117 typedef enum
118 {
119 KSPROPERTY_CLOCK_TIME,
120 KSPROPERTY_CLOCK_PHYSICALTIME,
121 KSPROPERTY_CORRELATEDTIME,
122 KSPROPERTY_CORRELATEDPHYSICALTIME,
123 KSPROPERTY_CLOCK_RESOLUTION,
124 KSPROPERTY_CLOCK_STATE,
125 KSPROPERTY_CLOCK_FUNCTIONTABLE
126 } KSPROPERTY_CLOCK;
127
128 #define KSEVENTSETID_Clock \
129 0x364D8E20L, 0x62C7, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
130
131 typedef enum
132 {
133 KSEVENT_CLOCK_INTERVAL_MARK,
134 KSEVENT_CLOCK_POSITION_MARK
135 } KSEVENT_CLOCK_POSITION;
136
137
138 /* ===============================================================
139 Connection Properties/Methods/Events
140 */
141
142 #define KSPROPSETID_Connection \
143 0x1D58C920L, 0xAC9B, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
144
145 typedef enum
146 {
147 KSPROPERTY_CONNECTION_STATE,
148 KSPROPERTY_CONNECTION_PRIORITY,
149 KSPROPERTY_CONNECTION_DATAFORMAT,
150 KSPROPERTY_CONNECTION_ALLOCATORFRAMING,
151 KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT,
152 KSPROPERTY_CONNECTION_ACQUIREORDERING,
153 KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,
154 KSPROPERTY_CONNECTION_STARTAT
155 } KSPROPERTY_CONNECTION;
156
157 #define KSEVENTSETID_Connection \
158 0x7f4bcbe0L, 0x9ea5, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00
159
160 typedef enum
161 {
162 KSEVENT_CONNECTION_POSITIONUPDATE,
163 KSEVENT_CONNECTION_DATADISCONTINUITY,
164 KSEVENT_CONNECTION_TIMEDISCONTINUITY,
165 KSEVENT_CONNECTION_PRIORITY,
166 KSEVENT_CONNECTION_ENDOFSTREAM
167 } KSEVENT_CONNECTION;
168
169
170 /* ===============================================================
171 General
172 Properties/Methods/Events
173 */
174
175 #define KSPROPSETID_General \
176 0x1464EDA5L, 0x6A8F, 0x11D1, 0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
177
178 typedef enum
179 {
180 KSPROPERTY_GENERAL_COMPONENTID
181 } KSPROPERTY_GENERAL;
182
183
184 /* ===============================================================
185 Graph Manager
186 Properties/Methods/Events
187 */
188
189 #define KSPROPSETID_GM \
190 0xAF627536L, 0xE719, 0x11D2, 0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D
191
192 typedef enum
193 {
194 KSPROPERTY_GM_GRAPHMANAGER,
195 KSPROPERTY_GM_TIMESTAMP_CLOCK,
196 KSPROPERTY_GM_RATEMATCH,
197 KSPROPERTY_GM_RENDERCLOCK
198 } KSPROPERTY_GM;
199
200
201 /* ===============================================================
202 Media Seeking
203 Properties/Methods/Events
204 */
205
206 #define KSPROPSETID_MediaSeeking \
207 0xEE904F0CL, 0xD09B, 0x11D0, 0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
208
209 typedef enum
210 {
211 KSPROPERTY_MEDIASEEKING_CAPABILITIES,
212 KSPROPERTY_MEDIASEEKING_FORMATS,
213 KSPROPERTY_MEDIASEEKING_TIMEFORMAT,
214 KSPROPERTY_MEDIASEEKING_POSITION,
215 KSPROPERTY_MEDIASEEKING_STOPPOSITION,
216 KSPROPERTY_MEDIASEEKING_POSITIONS,
217 KSPROPERTY_MEDIASEEKING_DURATION,
218 KSPROPERTY_MEDIASEEKING_AVAILABLE,
219 KSPROPERTY_MEDIASEEKING_PREROLL,
220 KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT
221 } KSPROPERTY_MEDIASEEKING;
222
223
224 /* ===============================================================
225 Pin
226 Properties/Methods/Events
227 */
228
229 #define KSPROPSETID_Pin \
230 0x8C134960L, 0x51AD, 0x11CF, 0x87, 0x8A, 0x94, 0xF8, 0x01, 0xC1, 0x00, 0x00
231
232 typedef enum
233 {
234 KSPROPERTY_PIN_CINSTANCES,
235 KSPROPERTY_PIN_CTYPES,
236 KSPROPERTY_PIN_DATAFLOW,
237 KSPROPERTY_PIN_DATARANGES,
238 KSPROPERTY_PIN_DATAINTERSECTION,
239 KSPROPERTY_PIN_INTERFACES,
240 KSPROPERTY_PIN_MEDIUMS,
241 KSPROPERTY_PIN_COMMUNICATION,
242 KSPROPERTY_PIN_GLOBALCINSTANCES,
243 KSPROPERTY_PIN_NECESSARYINSTANCES,
244 KSPROPERTY_PIN_PHYSICALCONNECTION,
245 KSPROPERTY_PIN_CATEGORY,
246 KSPROPERTY_PIN_NAME,
247 KSPROPERTY_PIN_CONSTRAINEDDATARANGES,
248 KSPROPERTY_PIN_PROPOSEDATAFORMAT
249 } KSPROPERTY_PIN;
250
251
252 /* ===============================================================
253 Quality
254 Properties/Methods/Events
255 */
256
257 #define KSPROPSETID_Quality \
258 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
259
260 typedef enum
261 {
262 KSPROPERTY_QUALITY_REPORT,
263 KSPROPERTY_QUALITY_ERROR
264 } KSPROPERTY_QUALITY;
265
266
267 /* ===============================================================
268 Stream
269 Properties/Methods/Events
270 */
271
272 #define KSPROPSETID_Stream \
273 0x65aaba60L, 0x98ae, 0x11cf, 0xa1, 0x0d, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
274
275 typedef enum
276 {
277 KSPROPERTY_STREAM_ALLOCATOR,
278 KSPROPERTY_STREAM_QUALITY,
279 KSPROPERTY_STREAM_DEGRADATION,
280 KSPROPERTY_STREAM_MASTERCLOCK,
281 KSPROPERTY_STREAM_TIMEFORMAT,
282 KSPROPERTY_STREAM_PRESENTATIONTIME,
283 KSPROPERTY_STREAM_PRESENTATIONEXTENT,
284 KSPROPERTY_STREAM_FRAMETIME,
285 KSPROPERTY_STREAM_RATECAPABILITY,
286 KSPROPERTY_STREAM_RATE,
287 KSPROPERTY_STREAM_PIPE_ID
288 } KSPROPERTY_STREAM;
289
290
291 /* ===============================================================
292 StreamAllocator
293 Properties/Methods/Events
294 */
295
296 #define KSPROPSETID_StreamAllocator \
297 0xcf6e4342L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
298
299 typedef enum
300 {
301 KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE,
302 KSPROPERTY_STREAMALLOCATOR_STATUS
303 } KSPROPERTY_STREAMALLOCATOR;
304
305 #define KSMETHODSETID_StreamAllocator \
306 0xcf6e4341L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
307
308 typedef enum
309 {
310 KSMETHOD_STREAMALLOCATOR_ALLOC,
311 KSMETHOD_STREAMALLOCATOR_FREE
312 } KSMETHOD_STREAMALLOCATOR;
313
314
315 #define KSEVENTSETID_StreamAllocator
316
317 typedef enum
318 {
319 KSEVENT_STREAMALLOCATOR_INTERNAL_FREEFRAME,
320 KSEVENT_STREAMALLOCATOR_FREEFRAME
321 } KSEVENT_STREAMALLOCATOR;
322
323
324 /* ===============================================================
325 StreamInterface
326 Properties/Methods/Events
327 */
328
329 #define KSPROPSETID_StreamInterface \
330 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
331
332 typedef enum
333 {
334 KSPROPERTY_STREAMINTERFACE_HEADERSIZE
335 } KSPROPERTY_STREAMINTERFACE;
336
337
338 /* ===============================================================
339 Topology
340 Properties/Methods/Events
341 */
342
343 #define KSPROPSETID_Topology \
344 0x720D4AC0L, 0x7533, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
345
346 typedef enum
347 {
348 KSPROPERTY_TOPOLOGY_CATEGORIES,
349 KSPROPERTY_TOPOLOGY_CONNECTIONS,
350 KSPROPERTY_TOPOLOGY_NAME,
351 KSPROPERTY_TOPOLOGY_NODES
352 } KSPROPERTY_TOPOLOGY;
353
354
355
356 /* ===============================================================
357 Property Sets for audio drivers - TODO
358 */
359
360 #define KSPROPSETID_AC3
361 /*
362 KSPROPERTY_AC3_ALTERNATE_AUDIO
363 KSPROPERTY_AC3_BIT_STREAM_MODE
364 KSPROPERTY_AC3_DIALOGUE_LEVEL
365 KSPROPERTY_AC3_DOWNMIX
366 KSPROPERTY_AC3_ERROR_CONCEALMENT
367 KSPROPERTY_AC3_LANGUAGE_CODE
368 KSPROPERTY_AC3_ROOM_TYPE
369 */
370
371 #define KSPROPSETID_Acoustic_Echo_Cancel
372 /*
373 KSPROPERTY_AEC_MODE
374 KSPROPERTY_AEC_NOISE_FILL_ENABLE
375 KSPROPERTY_AEC_STATUS
376 */
377
378 #define KSPROPSETID_Audio
379 /*
380 KSPROPERTY_AUDIO_3D_INTERFACE
381 KSPROPERTY_AUDIO_AGC
382 KSPROPERTY_AUDIO_ALGORITHM_INSTANCE
383 KSPROPERTY_AUDIO_BASS
384 KSPROPERTY_AUDIO_BASS_BOOST
385 KSPROPERTY_AUDIO_CHANNEL_CONFIG
386 KSPROPERTY_AUDIO_CHORUS_LEVEL
387 KSPROPERTY_AUDIO_COPY_PROTECTION
388 KSPROPERTY_AUDIO_CPU_RESOURCES
389 KSPROPERTY_AUDIO_DELAY
390 KSPROPERTY_AUDIO_DEMUX_DEST
391 KSPROPERTY_AUDIO_DEV_SPECIFIC
392 KSPROPERTY_AUDIO_DYNAMIC_RANGE
393 KSPROPERTY_AUDIO_DYNAMIC_SAMPLING_RATE
394 KSPROPERTY_AUDIO_EQ_BANDS
395 KSPROPERTY_AUDIO_EQ_LEVEL
396 KSPROPERTY_AUDIO_FILTER_STATE
397 KSPROPERTY_AUDIO_LATENCY
398 KSPROPERTY_AUDIO_LOUDNESS
399 KSPROPERTY_AUDIO_MANUFACTURE_GUID
400 KSPROPERTY_AUDIO_MID
401 KSPROPERTY_AUDIO_MIX_LEVEL_CAPS
402 KSPROPERTY_AUDIO_MIX_LEVEL_TABLE
403 KSPROPERTY_AUDIO_MUTE
404 KSPROPERTY_AUDIO_MUX_SOURCE
405 KSPROPERTY_AUDIO_NUM_EQ_BANDS
406 KSPROPERTY_AUDIO_PEAKMETER
407 KSPROPERTY_AUDIO_POSITION
408 KSPROPERTY_AUDIO_PREFERRED_STATUS
409 KSPROPERTY_AUDIO_PRODUCT_GUID
410 KSPROPERTY_AUDIO_QUALITY
411 KSPROPERTY_AUDIO_REVERB_LEVEL
412 KSPROPERTY_AUDIO_SAMPLING_RATE
413 KSPROPERTY_AUDIO_STEREO_ENHANCE
414 KSPROPERTY_AUDIO_STEREO_SPEAKER_GEOMETRY
415 KSPROPERTY_AUDIO_SURROUND_ENCODE
416 KSPROPERTY_AUDIO_TREBLE
417 KSPROPERTY_AUDIO_VOLUMELEVEL
418 KSPROPERTY_AUDIO_WIDE_MODE
419 KSPROPERTY_AUDIO_WIDENESS
420 */
421
422 #define KSPROPSETID_AudioGfx
423 /*
424 KSPROPERTY_AUDIOGFX_CAPTURETARGETDEVICEID
425 KSPROPERTY_AUDIOGFX_RENDERTARGETDEVICEID
426 */
427
428 #define KSPROPSETID_DirectSound3DBuffer
429 /*
430 KSPROPERTY_DIRECTSOUND3DBUFFER_ALL
431 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEANGLES
432 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEORIENTATION
433 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEOUTSIDEVOLUME
434 KSPROPERTY_DIRECTSOUND3DBUFFER_MAXDISTANCE
435 KSPROPERTY_DIRECTSOUND3DBUFFER_MINDISTANCE
436 KSPROPERTY_DIRECTSOUND3DBUFFER_MODE
437 KSPROPERTY_DIRECTSOUND3DBUFFER_POSITION
438 KSPROPERTY_DIRECTSOUND3DBUFFER_VELOCITY
439 */
440
441 #define KSPROPSETID_DirectSound3DListener
442 /*
443 KSPROPERTY_DIRECTSOUND3DLISTENER_ALL
444 KSPROPERTY_DIRECTSOUND3DLISTENER_ALLOCATION
445 KSPROPERTY_DIRECTSOUND3DLISTENER_BATCH
446 KSPROPERTY_DIRECTSOUND3DLISTENER_DISTANCEFACTOR
447 KSPROPERTY_DIRECTSOUND3DLISTENER_DOPPLERFACTOR
448 KSPROPERTY_DIRECTSOUND3DLISTENER_ORIENTATION
449 KSPROPERTY_DIRECTSOUND3DLISTENER_POSITION
450 KSPROPERTY_DIRECTSOUND3DLISTENER_ROLLOFFFACTOR
451 KSPROPERTY_DIRECTSOUND3DLISTENER_VELOCITY
452 */
453
454 #define KSPROPSETID_DrmAudioStream
455 /*
456 KSPROPERTY_DRMAUDIOSTREAM_CONTENTID
457 */
458
459 #define KSPROPSETID_Hrtf3d
460 /*
461 KSPROPERTY_HRTF3D_FILTER_FORMAT
462 KSPROPERTY_HRTF3D_INITIALIZE
463 KSPROPERTY_HRTF3D_PARAMS
464 */
465
466 #define KSPROPSETID_Itd3d
467 /*
468 KSPROPERTY_ITD3D_PARAMS
469 */
470
471 #define KSPROPSETID_Synth
472 /*
473 KSPROPERTY_SYNTH_CAPS
474 KSPROPERTY_SYNTH_CHANNELGROUPS
475 KSPROPERTY_SYNTH_LATENCYCLOCK
476 KSPROPERTY_SYNTH_MASTERCLOCK
477 KSPROPERTY_SYNTH_PORTPARAMETERS
478 KSPROPERTY_SYNTH_RUNNINGSTATS
479 KSPROPERTY_SYNTH_VOICEPRIORITY
480 KSPROPERTY_SYNTH_VOLUME
481 KSPROPERTY_SYNTH_VOLUMEBOOST
482 */
483
484 #define KSPROPSETID_Synth_Dls
485 /*
486 KSPROPERTY_SYNTH_DLS_APPEND
487 KSPROPERTY_SYNTH_DLS_COMPACT
488 KSPROPERTY_SYNTH_DLS_DOWNLOAD
489 KSPROPERTY_SYNTH_DLS_UNLOAD
490 KSPROPERTY_SYNTH_DLS_WAVEFORMAT
491 */
492
493 #define KSPROPSETID_Sysaudio
494 /*
495 KSPROPERTY_SYSAUDIO_COMPONENT_ID
496 KSPROPERTY_SYSAUDIO_CREATE_VIRTUAL_SOURCE
497 KSPROPERTY_SYSAUDIO_DEVICE_COUNT
498 KSPROPERTY_SYSAUDIO_DEVICE_FRIENDLY_NAME
499 KSPROPERTY_SYSAUDIO_DEVICE_INSTANCE
500 KSPROPERTY_SYSAUDIO_DEVICE_INTERFACE_NAME
501 KSPROPERTY_SYSAUDIO_INSTANCE_INFO
502 KSPROPERTY_SYSAUDIO_SELECT_GRAPH
503 */
504
505 #define KSPROPSETID_Sysaudio_Pin
506 /*
507 KSPROPERTY_SYSAUDIO_ATTACH_VIRTUAL_SOURCE
508 */
509
510 #define KSPROPSETID_TopologyNode
511 /*
512 KSPROPERTY_TOPOLOGYNODE_ENABLE
513 KSPROPERTY_TOPOLOGYNODE_RESET
514 */
515
516
517 /* ===============================================================
518 Interface Sets - TODO
519 */
520
521 #define KSINTERFACESETID_Media
522
523 #define KSINTERFACESETID_Standard
524 #define KSINTERFACE_STANDARD_STREAMING
525 #define KSINTERFACE_STANDARD_LOOPED_STREAMING
526 #define KSINTERFACE_STANDARD_CONTROL
527
528
529 /* ===============================================================
530 Event Sets for audio drivers - TODO
531 */
532 #define KSEVENTSETID_AudioControlChange
533 /*
534 KSEVENT_CONTROL_CHANGE
535 */
536
537
538
539 /* ===============================================================
540 Node Types
541 */
542 /*
543 KSNODETYPE_3D_EFFECTS
544 KSNODETYPE_ACOUSTIC_ECHO_CANCEL
545 KSNODETYPE_ADC
546 KSNODETYPE_AGC
547 KSNODETYPE_CHORUS
548 KSNODETYPE_DAC
549 KSNODETYPE_DELAY
550 KSNODETYPE_DEMUX
551 KSNODETYPE_DEV_SPECIFIC
552 KSNODETYPE_DMSYNTH
553 KSNODETYPE_DMSYNTH_CAPS
554 KSNODETYPE_DRM_DESCRAMBLE
555 KSNODETYPE_EQUALIZER
556 KSNODETYPE_LOUDNESS
557 KSNODETYPE_MUTE
558 KSNODETYPE_MUX
559 KSNODETYPE_PEAKMETER
560 KSNODETYPE_PROLOGIC_DECODER
561 KSNODETYPE_PROLOGIC_ENCODER
562 KSNODETYPE_REVERB
563 KSNODETYPE_SRC
564 KSNODETYPE_STEREO_ENHANCE
565 KSNODETYPE_STEREO_WIDE
566 KSNODETYPE_SUM
567 KSNODETYPE_SUPERMIX
568 KSNODETYPE_SWMIDI
569 KSNODETYPE_SWSYNTH
570 KSNODETYPE_SYNTHESIZER
571 KSNODETYPE_TONE
572 KSNODETYPE_VOLUME
573 */
574
575
576 typedef PVOID KSDEVICE_HEADER,
577 KSOBJECT_HEADER,
578 KSOBJECT_BAG;
579
580
581
582
583 /* ===============================================================
584 Method Types
585 */
586
587 #define KSMETHOD_TYPE_NONE 0x00000000
588 #define KSMETHOD_TYPE_READ 0x00000001
589 #define KSMETHOD_TYPE_WRITE 0x00000002
590 #define KSMETHOD_TYPE_MODIFY 0x00000003
591 #define KSMETHOD_TYPE_SOURCE 0x00000004
592 #define KSMETHOD_TYPE_SEND 0x00000001
593 #define KSMETHOD_TYPE_SETSUPPORT 0x00000100
594 #define KSMETHOD_TYPE_BASICSUPPORT 0x00000200
595
596
597 /* ===============================================================
598 Property Types
599 */
600
601 #define KSPROPERTY_TYPE_GET 0x00000001
602 #define KSPROPERTY_TYPE_SET 0x00000002
603 #define KSPROPERTY_TYPE_SETSUPPORT 0x00000100
604 #define KSPROPERTY_TYPE_BASICSUPPORT 0x00000200
605 #define KSPROPERTY_TYPE_RELATIONS 0x00000400
606 #define KSPROPERTY_TYPE_SERIALIZESET 0x00000800
607 #define KSPROPERTY_TYPE_UNSERIALIZESET 0x00001000
608 #define KSPROPERTY_TYPE_SERIALIZERAW 0x00002000
609 #define KSPROPERTY_TYPE_UNSERIALIZERAW 0x00004000
610 #define KSPROPERTY_TYPE_SERIALIZESIZE 0x00008000
611 #define KSPROPERTY_TYPE_DEFAULT_VALUES 0x00010000
612
613
614 /* ===============================================================
615 Topology Methods/Properties
616 */
617
618 #define KSMETHOD_TYPE_TOPOLOGY 0x10000000
619 #define KSPROPERTY_TYPE_TOPOLOGY 0x10000000
620
621 /*
622 #define DEFINE_KS_GUID(GA,GB,GC,GD,GE,GF,GG,GH,GI,GJ,GK) \
623 DEFINE_GUID(??, 0x#GA#L, 0xGB, 0xGC, 0xGD, 0xGE, 0xGF, 0xGG, 0xGH, 0xGI, 0xGJ, 0xGK) \
624 "GA-GB-GC-GDGE-GFGGGHGIGJGK"
625 */
626
627 /* ===============================================================
628 KS Category GUIDs
629
630 BRIDGE - 0x085AFF00L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
631 CAPTURE - 0x65E8773DL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
632 RENDER - 0x65E8773EL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
633 MIXER - 0xAD809C00L, 0x7B88, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
634 SPLITTER - 0x0A4252A0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
635 DATACOMPRESSOR - 0x1E84C900L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
636 DATADECOMPRESSOR - 0x2721AE20L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
637 DATATRANSFORM - 0x2EB07EA0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
638 COMMUNICATIONSTRANSFORM - 0xCF1DDA2CL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
639 INTERFACETRANSFORM - 0xCF1DDA2DL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
640 MEDIUMTRANSFORM - 0xCF1DDA2EL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
641 FILESYSTEM - 0x760FED5EL, 0x9357, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
642 CLOCK - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
643 PROXY - 0x97EBAACAL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
644 QUALITY - 0x97EBAACBL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
645 */
646
647 /* ===============================================================
648 KSNAME GUIDs (defined also as KSSTRING_Xxx L"{...}"
649
650 Filter - 0x9b365890L, 0x165f, 0x11d0, 0xa1, 0x95, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
651 Pin - 0x146F1A80L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
652 Clock - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
653 Allocator - 0x642F5D00L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
654 TopologyNode - 0x0621061AL, 0xEE75, 0x11D0, 0xB9, 0x15, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
655 */
656
657 /* ===============================================================
658 Interface GUIDs
659
660 Standard - 0x1A8766A0L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
661 FileIo - 0x8C6F932CL, 0xE771, 0x11D0, 0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
662 */
663
664 /* ===============================================================
665 Medium Type GUIDs
666
667 Standard - 0x4747B320L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
668 */
669
670 /* ===============================================================
671 Property Set GUIDs
672
673 General - 0x1464EDA5L, 0x6A8F, 0x11D1, 0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
674 StreamIo - 0x65D003CAL, 0x1523, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
675 MediaSeeking - 0xEE904F0CL, 0xD09B, 0x11D0, 0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
676 Topology - 0x720D4AC0L, 0x7533, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
677 GM - 0xAF627536L, 0xE719, 0x11D2, 0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D
678 Quality - 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
679 Connection - 0x1D58C920L, 0xAC9B, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
680 */
681
682 /* ===============================================================
683 StreamAllocator Sets
684
685 Event set - 0x75d95571L, 0x073c, 0x11d0, 0xa1, 0x61, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
686 Method set - 0xcf6e4341L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
687 Property set - 0xcf6e4342L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
688 */
689
690 /* ===============================================================
691 StreamInterface Sets
692
693 Property set - 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
694 */
695
696 /* ===============================================================
697 Clock Sets
698
699 Property set - 0xDF12A4C0L, 0xAC17, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
700 Event sets - 0x364D8E20L, 0x62C7, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
701 */
702
703 /* ===============================================================
704 Connection Sets
705
706 Event set - 0x7f4bcbe0L, 0x9ea5, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00
707 */
708
709 /* ===============================================================
710 Time Format GUIDs
711
712 KSTIME_FORMAT_NONE (null guid)
713 FRAME - 0x7b785570L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
714 BYTE - 0x7b785571L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
715 SAMPLE - 0x7b785572L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
716 FIELD - 0x7b785573L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
717 MEDIA_TIME - 0x7b785574L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
718 */
719
720 /* ===============================================================
721 Media Type GUIDs
722
723 NULL
724 Stream -
725 None -
726
727 TODO ...
728 */
729
730 /* ===============================================================
731 KSMEMORY_TYPE_xxx
732
733 WILDCARD, DONT_CARE = NULL
734 SYSTEM - 0x091bb638L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
735 USER - 0x8cb0fc28L, 0x7893, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
736 KERNEL_PAGED - 0xd833f8f8L, 0x7894, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
737 KERNEL_NONPAGED - 0x4a6d5fc4L, 0x7895, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
738 DEVICE_UNKNOWN - 0x091bb639L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
739 */
740
741 /* ===============================================================
742 Enums
743 (values have been checked)
744 */
745
746 typedef enum
747 {
748 KsObjectTypeDevice,
749 KsObjectTypeFilterFactory,
750 KsObjectTypeFilter,
751 KsObjectTypePin
752 } KSOBJECTTYPE;
753
754 typedef enum
755 {
756 KSSTATE_STOP,
757 KSSTATE_ACQUIRE,
758 KSSTATE_PAUSE,
759 KSSTATE_RUN
760 } KSSTATE;
761
762 typedef enum
763 {
764 KSTARGET_STATE_DISABLED,
765 KSTARGET_STATE_ENABLED
766 } KSTARGET_STATE;
767
768 typedef enum
769 {
770 KSRESET_BEGIN,
771 KSRESET_END
772 } KSRESET;
773
774 typedef enum
775 {
776 KSEVENTS_NONE,
777 KSEVENTS_SPINLOCK,
778 KSEVENTS_MUTEX,
779 KSEVENTS_FMUTEX,
780 KSEVENTS_FMUTEXUNSAFE,
781 KSEVENTS_INTERRUPT,
782 KSEVENTS_ERESOURCE
783 } KSEVENTS_LOCKTYPE;
784
785 typedef enum
786 {
787 KSDEGRADE_STANDARD_SIMPLE,
788 KSDEGRADE_STANDARD_QUALITY,
789 KSDEGRADE_STANDARD_COMPUTATION,
790 KSDEGRADE_STANDARD_SKIP
791 } KSDEGRADE_STANDARD;
792
793 typedef enum
794 {
795 KSPIN_DATAFLOW_IN = 1,
796 KSPIN_DATAFLOW_OUT
797 } KSPIN_DATAFLOW;
798
799 typedef enum
800 {
801 KSPIN_COMMUNICATION_NONE,
802 KSPIN_COMMUNICATION_SINK,
803 KSPIN_COMMUNICATION_SOURCE,
804 KSPIN_COMMUNICATION_BOTH,
805 KSPIN_COMMUNICATION_BRIDGE
806 } KSPIN_COMMUNICATION;
807
808 typedef enum
809 {
810 KsListEntryTail,
811 KsListEntryHead
812 } KSLIST_ENTRY_LOCATION;
813
814 typedef enum
815 {
816 KsStackCopyToNewLocation,
817 KsStackReuseCurrentLocation,
818 KsStackUseNewLocation
819 } KSSTACK_USE;
820
821 typedef enum
822 {
823 KsAcquireOnly,
824 KsAcquireAndRemove,
825 KsAcquireOnlySingleItem,
826 KsAcquireAndRemoveOnlySingleItem
827 } KSIRP_REMOVAL_OPERATION;
828
829 typedef enum
830 {
831 KsInvokeOnSuccess = 1,
832 KsInvokeOnError = 2,
833 KsInvokeOnCancel = 4
834 } KSCOMPLETION_INVOCATION;
835
836
837
838 /* MOVE ME */
839 typedef NTSTATUS (*PFNKSCONTEXT_DISPATCH)(
840 IN PVOID Context,
841 IN PIRP Irp);
842
843
844 /* ===============================================================
845 Framing
846 */
847
848 typedef struct
849 {
850 } KS_FRAMING_ITEM, *PKS_FRAMING_ITEM;
851
852 typedef struct
853 {
854 } KS_FRAMING_RANGE, *PKS_FRAMING_RANGE;
855
856 typedef struct
857 {
858 /* Obsolete */
859 } KS_FRAMING_RANGE_WEIGHTED, *PKS_FRAMING_RANGE_WEIGHTED;
860
861 /* ??? */
862 typedef struct
863 {
864 } KS_COMPRESSION, *PKS_COMPRESSION;
865
866
867 /* ===============================================================
868 Common
869 */
870
871 typedef struct
872 {
873 GUID Set;
874 ULONG Id;
875 ULONG Flags;
876 } KSIDENTIFIER, *PKSIDENTIFIER;
877
878 typedef KSIDENTIFIER KSPROPERTY, *PKSPROPERTY;
879 typedef KSIDENTIFIER KSMETHOD, *PKSMETHOD;
880 typedef KSIDENTIFIER KSEVENT, *PKSEVENT;
881
882 typedef KSIDENTIFIER KSDEGRADE, *PKSDEGRADE;
883
884 typedef KSIDENTIFIER KSPIN_INTERFACE, *PKSPIN_INTERFACE;
885 typedef KSIDENTIFIER KSPIN_MEDIUM, *PKSPIN_MEDIUM;
886
887 typedef struct
888 {
889 } KSDATARANGE, *PKSDATARANGE;
890
891 typedef struct
892 {
893 } KSDATAFORMAT, *PKSDATAFORMAT;
894
895 typedef struct
896 {
897 } KSATTRIBUTE, *PKSATTRIBUTE;
898
899
900 /* ===============================================================
901 Priorities
902 */
903
904 #define KSPRIORITY_LOW 0x00000001
905 #define KSPRIORITY_NORMAL 0x40000000
906 #define KSPRIORITY_HIGH 0x80000000
907 #define KSPRIORITY_EXCLUSIVE 0xFFFFFFFF
908
909 typedef struct
910 {
911 ULONG PriorityClass;
912 ULONG PrioritySubClass;
913 } KSPRIORITY, *PKSPRIORITY;
914
915
916 /* =============================================================== */
917
918 typedef struct
919 {
920 } KSDISPATCH_TABLE, *PKSDISPATCH_TABLE;
921
922 typedef struct
923 {
924 } BUS_INTERFACE_REFERENCE, *PBUS_INTERFACE_REFERENCE;
925
926 typedef struct
927 {
928 } KSCOMPONENTID, *PKSCOMPONENTID;
929
930 typedef struct
931 {
932 } KSBUFFER_ITEM, *PKSBUFFER_ITEM;
933
934 /* ===============================================================
935 Properties
936 */
937
938 #define KSPROPERTY_MEMBER_RANGES 0x00000001
939 #define KSPROPERTY_MEMBER_STEPPEDRANGES 0x00000002
940 #define KSPROPERTY_MEMBER_VALUES 0x00000003
941 #define KSPROPERTY_MEMBER_FLAG_DEFAULT KSPROPERTY_MEMBER_RANGES
942
943 typedef struct
944 {
945 } KSPROPERTY_BOUNDS_LONG, *PKSPROPERTY_BOUNDS_LONG;
946
947 typedef struct
948 {
949 } KSPROPERTY_BOUNDS_LONGLONG, *PKSPROPERTY_BOUNDS_LONGLONG;
950
951 typedef struct
952 {
953 } KSPROPERTY_DESCRIPTION, *PKSPROPERTY_DESCRIPTION;
954
955 typedef struct
956 {
957 } KSPROPERTY_ITEM, *PKSPROPERTY_ITEM;
958
959 typedef struct
960 {
961 } KSPROPERTY_MEDIAAVAILABLE, *PKSPROPERTY_MEDIAAVAILABLE;
962
963 typedef struct
964 {
965 } KSPROPERTY_MEMBERSHEADER, *PKSPROPERTY_MEMBERSHEADER;
966
967 typedef struct
968 {
969 } KSPROPERTY_MEMBERSLIST, *PKSPROPERTY_MEMBERSLIST;
970
971 typedef struct
972 {
973 } KSPROPERTY_POSITIONS, *PKSPROPERTY_POSITIONS;
974
975 typedef struct
976 {
977 } KSPROPERTY_SERIAL, *PKSPROPERTY_SERIAL;
978
979 typedef struct
980 {
981 } KSPROPERTY_SERIALHDR, *PKSPROPERTY_SERIALHDR;
982
983 typedef struct
984 {
985 } KSPROPERTY_SET, *PKSPROPERTY_SET;
986
987 typedef struct
988 {
989 } KSPROPERTY_STEPPING_LONG, *PKSPROPERTY_STEPPING_LONG;
990
991 typedef struct
992 {
993 } KSPROPERTY_STEPPING_LONGLONG, *PKSPROPERTY_STEPPING_LONGLONG;
994
995 typedef struct
996 {
997 } KSPROPERTY_VALUES, *PKSPROPERTY_VALUES;
998
999
1000 /* ===============================================================
1001 Allocator Framing
1002 */
1003
1004 typedef struct
1005 {
1006 } KSALLOCATOR_FRAMING, *PKSALLOCATOR_FRAMING;
1007
1008 typedef struct
1009 {
1010 } KSALLOCATOR_FRAMING_EX, *PKSALLOCATOR_FRAMING_EX;
1011
1012
1013 /* ===============================================================
1014 Quality
1015 */
1016
1017 typedef struct
1018 {
1019 } KSQUALITY, *PKSQUALITY;
1020
1021 typedef struct
1022 {
1023 HANDLE QualityManager;
1024 PVOID Context;
1025 } KSQUALITY_MANAGER, *PKSQUALITY_MANAGER;
1026
1027 typedef struct
1028 {
1029 } KSRATE, *PKSRATE;
1030
1031 typedef struct
1032 {
1033 } KSRATE_CAPABILITY, *PKSRATE_CAPABILITY;
1034
1035 typedef struct
1036 {
1037 LONGLONG Granularity;
1038 LONGLONG Error;
1039 } KSRESOLUTION, *PKSRESOLUTION;
1040
1041 typedef struct
1042 {
1043 } KSRELATIVEEVENT, *PKSRELATIVEEVENT;
1044
1045
1046 /* ===============================================================
1047 Timing
1048 */
1049
1050 typedef struct
1051 {
1052 LONGLONG Time;
1053 ULONG Numerator;
1054 ULONG Denominator;
1055 } KSTIME, *PKSTIME;
1056
1057 typedef struct
1058 {
1059 } KSCORRELATED_TIME, *PKSCORRELATED_TIME;
1060
1061 typedef struct
1062 {
1063 KSPROPERTY Property;
1064 GUID SourceFormat;
1065 GUID TargetFormat;
1066 LONGLONG Time;
1067 } KSP_TIMEFORMAT, *PKSP_TIMEFORMAT;
1068
1069 typedef struct
1070 {
1071 } KSINTERVAL, *PKSINTERVAL;
1072
1073 typedef struct
1074 {
1075 } KSFRAMETIME, *PKSFRAMETIME;
1076
1077
1078 /* ===============================================================
1079 Clocks
1080 */
1081
1082 typedef struct
1083 {
1084 } KSCLOCK, *PKSCLOCK, *PKSDEFAULTCLOCK; /* OK ? */
1085
1086 typedef struct
1087 {
1088 } KSCLOCK_CREATE, *PKSCLOCK_CREATE;
1089
1090 typedef struct
1091 {
1092 } KSCLOCK_FUNCTIONTABLE, *PKSCLOCK_FUNCTIONTABLE;
1093
1094
1095 /* ===============================================================
1096 Objects ??? SORT ME!
1097 */
1098
1099 typedef struct
1100 {
1101 } KSOBJECT_CREATE, *PKSOBJECT_CREATE;
1102
1103 typedef struct
1104 {
1105 } KSOBJECT_CREATE_ITEM, *PKSOBJECT_CREATE_ITEM;
1106
1107 typedef VOID (*PFNKSITEMFREECALLBACK)(
1108 IN PKSOBJECT_CREATE_ITEM CreateItem);
1109
1110 typedef struct
1111 {
1112 } KSMULTIPLE_ITEM, *PKSMULTIPLE_ITEM;
1113
1114 typedef struct
1115 {
1116 } KSQUERYBUFFER, *PKSQUERYBUFFER;
1117
1118 typedef struct
1119 {
1120 } KSERROR, *PKSERROR;
1121
1122 typedef struct
1123 {
1124 } KSDPC_ITEM, *PKSDPC_ITEM;
1125
1126
1127 /* ===============================================================
1128 Methods
1129 */
1130
1131 typedef struct
1132 {
1133 } KSMETHOD_SET, *PKSMETHOD_SET;
1134
1135 typedef struct
1136 {
1137 } KSMETHOD_ITEM, *PKSMETHOD_ITEM;
1138
1139 typedef struct
1140 {
1141 } KSFASTMETHOD_ITEM, *PKSFASTMETHOD_ITEM;
1142
1143
1144 /* ===============================================================
1145 Nodes
1146 */
1147
1148 typedef struct
1149 {
1150 } KSP_NODE, *PKSP_NODE;
1151
1152 typedef struct
1153 {
1154 KSMETHOD Method;
1155 ULONG NodeID;
1156 ULONG Reserved;
1157 } KSM_NODE, *PKSM_NODE;
1158
1159 typedef struct
1160 {
1161 } KSE_NODE, *PKSE_NODE;
1162
1163 typedef struct
1164 {
1165 } KSNODE_CREATE, *PKSNODE_CREATE;
1166
1167
1168 /* ===============================================================
1169 Properties?
1170 */
1171
1172 typedef struct
1173 {
1174 } KSFASTPROPERTY_ITEM, *PKSFASTPROPERTY_ITEM;
1175
1176
1177 /* ===============================================================
1178 Events
1179 */
1180
1181 typedef struct
1182 {
1183 } KSEVENT_TIME_MARK, *PKSEVENT_TIME_MARK;
1184
1185 typedef struct
1186 {
1187 } KSEVENT_TIME_INTERVAL, *PKSEVENT_TIME_INTERVAL;
1188
1189 typedef struct
1190 {
1191 } KSEVENT_SET, *PKSEVENT_SET;
1192
1193 typedef struct
1194 {
1195 } KSEVENT_ITEM, *PKSEVENT_ITEM;
1196
1197 typedef struct _KSEVENT_ENTRY
1198 {
1199 } KSEVENT_ENTRY, *PKSEVENT_ENTRY;
1200
1201 typedef struct
1202 {
1203 } KSEVENTDATA, *PKSEVENTDATA;
1204
1205
1206 /* ===============================================================
1207 Pins
1208 */
1209
1210 typedef struct
1211 {
1212 } KSPIN_DISPATCH, *PKSPIN_DISPATCH;
1213
1214 typedef struct
1215 {
1216 } KSAUTOMATION_TABLE, *PKSAUTOMATION_TABLE;
1217
1218 typedef struct
1219 {
1220 } KSPIN_DESCRIPTOR, *PKSPIN_DESCRIPTOR;
1221
1222 /* TODO */
1223 /* This is just to shut the compiler up so DON'T USE IT! */
1224 typedef void (*PFNKSINTERSECTHANDLER)(void);
1225 typedef void (*PFNKSINTERSECTHANDLEREX)(void);
1226
1227 typedef struct
1228 {
1229 const KSPIN_DISPATCH* Dispatch;
1230 const KSAUTOMATION_TABLE* AutomationTable;
1231 KSPIN_DESCRIPTOR PinDescriptor;
1232 ULONG Flags;
1233 ULONG InstancesPossible;
1234 ULONG InstancesNecessary;
1235 const KSALLOCATOR_FRAMING_EX* AllocatorFraming;
1236 PFNKSINTERSECTHANDLEREX IntersectHandler;
1237 } KSPIN_DESCRIPTOR_EX, *PKSPIN_DESCRIPTOR_EX;
1238
1239 /* TODO */
1240 #define KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING
1241 #define KSPIN_FLAG_CRITICAL_PROCESSING
1242 #define KSPIN_FLAG_HYPERCRITICAL_PROCESSING
1243 #define KSPIN_FLAG_ASYNCHRONOUS_PROCESSING
1244 #define KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING
1245 #define KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL
1246 #define KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING
1247 #define KSPIN_FLAG_ENFORCE_FIFO
1248 #define KSPIN_FLAG_GENERATE_MAPPINGS
1249 #define KSPIN_FLAG_DISTINCT_TRAILING_EDGE
1250 #define KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY
1251 #define KSPIN_FLAG_SPLITTER
1252 #define KSPIN_FLAG_USE_STANDARD_TRANSPORT
1253 #define KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT
1254 #define KSPIN_FLAG_FIXED_FORMAT
1255 #define KSPIN_FLAG_GENERATE_EOS_EVENTS
1256 #define KSPIN_FLAG_RENDERER
1257 #define KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING
1258 #define KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE
1259 #define KSPIN_FLAG_DENY_USERMODE_ACCESS
1260 #define KSPIN_FLAG_IMPLEMENT_CLOCK
1261
1262 typedef struct
1263 {
1264 const KSPIN_DESCRIPTOR_EX* Descriptor;
1265 KSOBJECT_BAG Bag;
1266 PVOID Context;
1267 ULONG Id;
1268 KSPIN_COMMUNICATION Communication;
1269 BOOLEAN ConnectionIsExternal;
1270 KSPIN_INTERFACE ConnectionInterface;
1271 KSPIN_MEDIUM ConnectionMedium;
1272 KSPRIORITY ConnectionPriority;
1273 PKSDATAFORMAT ConnectionFormat;
1274 PKSMULTIPLE_ITEM AttributeList;
1275 ULONG StreamHeaderSize;
1276 KSPIN_DATAFLOW DataFlow;
1277 KSSTATE DeviceState;
1278 KSRESET ResetState;
1279 KSSTATE ClientState;
1280 } KSPIN, *PKSPIN;
1281
1282 typedef struct
1283 {
1284 KSPIN_INTERFACE Interface;
1285 KSPIN_MEDIUM Medium;
1286 ULONG PinId;
1287 HANDLE PinToHandle;
1288 KSPRIORITY Priority;
1289 } KSPIN_CONNECT, *PKSPIN_CONNECT;
1290
1291 typedef struct
1292 {
1293 } KSP_PIN, *PKSP_PIN;
1294
1295 typedef struct
1296 {
1297 } KSPIN_PHYSICALCONNECTION, *PKSPIN_PHYSICALCONNECTION;
1298
1299
1300 /* ===============================================================
1301 Topology
1302 */
1303
1304 typedef struct
1305 {
1306 ULONG FromNode;
1307 ULONG FromNodePin;
1308 ULONG ToNode;
1309 ULONG ToNodePin;
1310 } KSTOPOLOGY_CONNECTION, *PKSTOPOLOGY_CONNECTION;
1311
1312 typedef struct
1313 {
1314 ULONG CategoriesCount;
1315 const GUID* Categories;
1316 ULONG TopologyNodesCount;
1317 const GUID* TopologyNodes;
1318 ULONG TopologyConnectionsCount;
1319 const KSTOPOLOGY_CONNECTION* TopologyConnections;
1320 const GUID* TopologyNodesNames;
1321 ULONG Reserved;
1322 } KSTOPOLOGY, *PKSTOPOLOGY;
1323
1324
1325 /* ===============================================================
1326 ??? SORT ME
1327 */
1328
1329 /* TODO */
1330 typedef void* UNKNOWN;
1331
1332 typedef PVOID (*PFNKSDEFAULTALLOCATE)(
1333 IN PVOID Context);
1334
1335 typedef PVOID (*PFNKSDEFAULTFREE)(
1336 IN PVOID Context,
1337 IN PVOID Buffer);
1338
1339 typedef PVOID (*PFNKSINITIALIZEALLOCATOR)(
1340 IN PVOID InitialContext,
1341 IN PKSALLOCATOR_FRAMING AllocatorFraming,
1342 OUT PVOID* Context);
1343
1344 typedef PVOID (*PFNKSDELETEALLOCATOR)(
1345 IN PVOID Context);
1346
1347
1348 typedef NTSTATUS (*PFNKSALLOCATOR)(
1349 IN PIRP Irp,
1350 IN ULONG BufferSize,
1351 IN BOOL InputOperation);
1352
1353 typedef NTSTATUS (*PFNKSHANDLER)(
1354 IN PIRP Irp,
1355 IN PKSIDENTIFIER Request,
1356 IN OUT PVOID Data);
1357
1358 typedef BOOLEAN (*PFNKSFASTHANDLER)(
1359 IN PFILE_OBJECT FileObject,
1360 IN PKSIDENTIFIER UNALIGNED Request,
1361 IN ULONG RequestLength,
1362 IN OUT PVOID UNALIGNED Data,
1363 IN ULONG DataLength,
1364 OUT PIO_STATUS_BLOCK IoStatus);
1365
1366 typedef NTSTATUS (*PFNKSADDEVENT)(
1367 IN PIRP Irp,
1368 IN PKSEVENTDATA EventData,
1369 IN struct _KSEVENT_ENTRY* EventEntry);
1370
1371 typedef NTSTATUS (*PFNKINTERSECTHANDLEREX)(
1372 IN PVOID Context,
1373 IN PIRP Irp,
1374 IN PKSP_PIN Pin,
1375 IN PKSDATARANGE DataRange,
1376 IN PKSDATARANGE MatchingDataRange,
1377 IN ULONG DataBufferSize,
1378 OUT PVOID Data OPTIONAL,
1379 OUT PULONG DataSize);
1380
1381 typedef UNKNOWN PFNALLOCATORE_ALLOCATEFRAME;
1382 typedef UNKNOWN PFNALLOCATOR_FREEFRAME;
1383
1384 /*
1385 typedef struct
1386 {
1387 PFNALLOCATOR_ALLOCATEFRAME AllocateFrame;
1388 PFNALLOCATOR_FREEFRAME FreeFrame;
1389 }
1390 */
1391
1392 typedef struct
1393 {
1394 KSALLOCATOR_FRAMING Framing;
1395 ULONG AllocatedFrames;
1396 ULONG Reserved;
1397 } KSSTREAMALLOCATOR_STATUS, *PKSSTREAMALLOCATOR_STATUS;
1398
1399 typedef struct
1400 {
1401 KSALLOCATOR_FRAMING_EX Framing;
1402 ULONG AllocatedFrames;
1403 ULONG Reserved;
1404 } KSSTREAMALLOCATOR_STATUS_EX, *PKSSTREAMALLOCATOR_STATUS_EX;
1405
1406 typedef struct
1407 {
1408 ULONG Size;
1409 ULONG TypeSpecificFlags;
1410 KSTIME PresentationTime;
1411 LONGLONG Duration;
1412 ULONG FrameExtent;
1413 ULONG DataUsed;
1414 PVOID Data;
1415 ULONG OptionsFlags;
1416 } KSSTREAM_HEADER, *PKSSTREAM_HEADER;
1417
1418
1419
1420 /* ===============================================================
1421 XP / DX8
1422 */
1423
1424 typedef struct
1425 {
1426 /* TODO */
1427 } KSPROCESSPIN, *PKSPROCESSPIN;
1428
1429 typedef struct
1430 {
1431 PKSPROCESSPIN* Pins;
1432 ULONG Count;
1433 } KSPROCESSPIN_INDEXENTRY, *PKSPROCESSPIN_INDEXENTRY;
1434
1435
1436 /* ===============================================================
1437 Device Dispatch
1438 */
1439
1440 typedef struct
1441 {
1442 /* TODO */
1443 } KSDEVICE, *PKSDEVICE;
1444
1445 typedef NTSTATUS (*PFNKSDEVICECREATE)(
1446 IN PKSDEVICE Device);
1447
1448 typedef NTSTATUS (*PFNKSDEVICEPNPSTART)(
1449 IN PKSDEVICE Device,
1450 IN PIRP Irp,
1451 IN PCM_RESOURCE_LIST TranslatedResourceList OPTIONAL,
1452 IN PCM_RESOURCE_LIST UntranslatedResourceList OPTIONAL);
1453
1454 typedef NTSTATUS (*PFNKSDEVICE)(
1455 IN PKSDEVICE Device);
1456
1457 typedef NTSTATUS (*PFNKSDEVICEIRP)(
1458 IN PKSDEVICE Device,
1459 IN PIRP Irp);
1460
1461 typedef VOID (*PFNKSDEVICEIRPVOID)(
1462 IN PKSDEVICE Device,
1463 IN PIRP Irp);
1464
1465 typedef NTSTATUS (*PFNKSDEVICEQUERYCAPABILITIES)(
1466 IN PKSDEVICE Device,
1467 IN PIRP Irp,
1468 IN OUT PDEVICE_CAPABILITIES Capabilities);
1469
1470 typedef NTSTATUS (*PFNKSDEVICEQUERYPOWER)(
1471 IN PKSDEVICE Device,
1472 IN PIRP Irp,
1473 IN DEVICE_POWER_STATE DeviceTo,
1474 IN DEVICE_POWER_STATE DeviceFrom,
1475 IN SYSTEM_POWER_STATE SystemTo,
1476 IN SYSTEM_POWER_STATE SystemFrom,
1477 IN POWER_ACTION Action);
1478
1479 typedef VOID (*PFNKSDEVICESETPOWER)(
1480 IN PKSDEVICE Device,
1481 IN PIRP Irp,
1482 IN DEVICE_POWER_STATE To,
1483 IN DEVICE_POWER_STATE From);
1484
1485 typedef struct _KSDEVICE_DISPATCH
1486 {
1487 PFNKSDEVICECREATE Add;
1488 PFNKSDEVICEPNPSTART Start;
1489 PFNKSDEVICE PostStart;
1490 PFNKSDEVICEIRP QueryStop;
1491 PFNKSDEVICEIRPVOID CancelStop;
1492 PFNKSDEVICEIRPVOID Stop;
1493 PFNKSDEVICEIRP QueryRemove;
1494 PFNKSDEVICEIRPVOID CancelRemove;
1495 PFNKSDEVICEIRPVOID Remove;
1496 PFNKSDEVICEQUERYCAPABILITIES QueryCapabilities;
1497 PFNKSDEVICEIRPVOID SurpriseRemoval;
1498 PFNKSDEVICEQUERYPOWER Querypower;
1499 PFNKSDEVICESETPOWER SetPower;
1500 } KSDEVICE_DISPATCH, *PKSDEVICE_DISPATCH;
1501
1502
1503 /* ===============================================================
1504 Filter Dispatch
1505 */
1506
1507 typedef struct
1508 {
1509 } KSFILTER, *PKSFILTER;
1510
1511 typedef NTSTATUS (*PFNKSFILTERIRP)(
1512 IN PKSFILTER Filter,
1513 IN PIRP Irp);
1514
1515 typedef NTSTATUS (*PFNKSFILTERPROCESS)(
1516 IN PKSFILTER FIlter,
1517 IN PKSPROCESSPIN_INDEXENTRY ProcessPinsIndex);
1518
1519 typedef NTSTATUS (*PFNKSFILTERVOID)(
1520 IN PKSFILTER Filter);
1521
1522 typedef struct _KSFILTER_DISPATCH
1523 {
1524 PFNKSFILTERIRP Create;
1525 PFNKSFILTERIRP Close;
1526 PFNKSFILTERPROCESS Process;
1527 PFNKSFILTERVOID Reset;
1528 } KSFILTER_DISPATCH, *PKSFILTER_DISPATCH;
1529
1530
1531 /* ===============================================================
1532 Minidriver Callbacks
1533 */
1534
1535 typedef NTSTATUS (*KStrMethodHandler)(
1536 IN PIRP Irp,
1537 IN PKSIDENTIFIER Request,
1538 IN OUT PVOID Data);
1539
1540 typedef NTSTATUS (*KStrSupportHandler)(
1541 IN PIRP Irp,
1542 IN PKSIDENTIFIER Request,
1543 IN OUT PVOID Data);
1544
1545
1546 /* ===============================================================
1547 Allocator Functions
1548 */
1549
1550 KSDDKAPI NTSTATUS NTAPI
1551 KsCreateAllocator(
1552 IN HANDLE ConnectionHandle,
1553 IN PKSALLOCATOR_FRAMING AllocatorFraming,
1554 OUT PHANDLE AllocatorHandle);
1555
1556 KSDDKAPI NTSTATUS NTAPI
1557 KsCreateDefaultAllocator(
1558 IN PIRP Irp);
1559
1560 KSDDKAPI NTSTATUS NTAPI
1561 KsValidateAllocatorCreateRequest(
1562 IN PIRP Irp,
1563 OUT PKSALLOCATOR_FRAMING* AllocatorFraming);
1564
1565 KSDDKAPI NTSTATUS NTAPI
1566 KsCreateDefaultAllocatorEx(
1567 IN PIRP Irp,
1568 IN PVOID InitializeContext OPTIONAL,
1569 IN PFNKSDEFAULTALLOCATE DefaultAllocate OPTIONAL,
1570 IN PFNKSDEFAULTFREE DefaultFree OPTIONAL,
1571 IN PFNKSINITIALIZEALLOCATOR InitializeAllocator OPTIONAL,
1572 IN PFNKSDELETEALLOCATOR DeleteAllocator OPTIONAL);
1573
1574 KSDDKAPI NTSTATUS NTAPI
1575 KsValidateAllocatorFramingEx(
1576 IN PKSALLOCATOR_FRAMING_EX Framing,
1577 IN ULONG BufferSize,
1578 IN const KSALLOCATOR_FRAMING_EX* PinFraming);
1579
1580
1581 /* ===============================================================
1582 Clock Functions
1583 */
1584
1585 typedef BOOLEAN (*PFNKSSETTIMER)(
1586 IN PVOID Context,
1587 IN PKTIMER Timer,
1588 IN LARGE_INTEGER DueTime,
1589 IN PKDPC Dpc);
1590
1591 typedef BOOLEAN (*PFNKSCANCELTIMER)(
1592 IN PVOID Context,
1593 IN PKTIMER Timer);
1594
1595 typedef LONGLONG (FASTCALL *PFNKSCORRELATEDTIME)(
1596 IN PVOID Context,
1597 OUT PLONGLONG SystemTime);
1598
1599 KSDDKAPI NTSTATUS NTAPI
1600 KsCreateClock(
1601 IN HANDLE ConnectionHandle,
1602 IN PKSCLOCK_CREATE ClockCreate,
1603 OUT PHANDLE ClockHandle);
1604
1605 KSDDKAPI NTSTATUS NTAPI
1606 KsCreateDefaultClock(
1607 IN PIRP Irp,
1608 IN PKSDEFAULTCLOCK DefaultClock);
1609
1610 KSDDKAPI NTSTATUS NTAPI
1611 KsAllocateDefaultClock(
1612 OUT PKSDEFAULTCLOCK* DefaultClock);
1613
1614 KSDDKAPI NTSTATUS NTAPI
1615 KsAllocateDefaultClockEx(
1616 OUT PKSDEFAULTCLOCK* DefaultClock,
1617 IN PVOID Context OPTIONAL,
1618 IN PFNKSSETTIMER SetTimer OPTIONAL,
1619 IN PFNKSCANCELTIMER CancelTimer OPTIONAL,
1620 IN PFNKSCORRELATEDTIME CorrelatedTime OPTIONAL,
1621 IN const KSRESOLUTION* Resolution OPTIONAL,
1622 IN ULONG Flags);
1623
1624 KSDDKAPI VOID NTAPI
1625 KsFreeDefaultClock(
1626 IN PKSDEFAULTCLOCK DefaultClock);
1627
1628 KSDDKAPI NTSTATUS NTAPI
1629 KsValidateClockCreateRequest(
1630 IN PIRP Irp,
1631 OUT PKSCLOCK_CREATE* ClockCreate);
1632
1633 KSDDKAPI KSSTATE NTAPI
1634 KsGetDefaultClockState(
1635 IN PKSDEFAULTCLOCK DefaultClock);
1636
1637 KSDDKAPI VOID NTAPI
1638 KsSetDefaultClockState(
1639 IN PKSDEFAULTCLOCK DefaultClock,
1640 IN KSSTATE State);
1641
1642 KSDDKAPI LONGLONG NTAPI
1643 KsGetDefaultClockTime(
1644 IN PKSDEFAULTCLOCK DefaultClock);
1645
1646 KSDDKAPI VOID NTAPI
1647 KsSetDefaultClockTime(
1648 IN PKSDEFAULTCLOCK DefaultClock,
1649 IN LONGLONG Time);
1650
1651
1652 /* ===============================================================
1653 Method Functions
1654 */
1655
1656 /* Method sets - TODO: Make into macros! */
1657
1658 #if 0
1659 VOID
1660 KSMETHOD_SET_IRP_STORAGE(
1661 IN IRP Irp);
1662
1663 VOID
1664 KSMETHOD_ITEM_IRP_STORAGE(
1665 IN IRP Irp);
1666
1667 VOID
1668 KSMETHOD_TYPE_IRP_STORAGE(
1669 IN IRP Irp);
1670 #endif
1671
1672 KSDDKAPI NTSTATUS NTAPI
1673 KsMethodHandler(
1674 IN PIRP Irp,
1675 IN ULONG MethodSetsCount,
1676 IN PKSMETHOD_SET MethodSet);
1677
1678 KSDDKAPI NTSTATUS NTAPI
1679 KsMethodHandlerWithAllocator(
1680 IN PIRP Irp,
1681 IN ULONG MethodSetsCount,
1682 IN PKSMETHOD_SET MethodSet,
1683 IN PFNKSALLOCATOR Allocator OPTIONAL,
1684 IN ULONG MethodItemSize OPTIONAL);
1685
1686 KSDDKAPI BOOLEAN NTAPI
1687 KsFastMethodHandler(
1688 IN PFILE_OBJECT FileObject,
1689 IN PKSMETHOD UNALIGNED Method,
1690 IN ULONG MethodLength,
1691 IN OUT PVOID UNALIGNED Data,
1692 IN ULONG DataLength,
1693 OUT PIO_STATUS_BLOCK IoStatus,
1694 IN ULONG MethodSetsCount,
1695 IN const KSMETHOD_SET* MethodSet);
1696
1697
1698 /* ===============================================================
1699 Property Functions
1700 */
1701
1702 KSDDKAPI NTSTATUS NTAPI
1703 KsPropertyHandler(
1704 IN PIRP Irp,
1705 IN ULONG PropertySetsCount,
1706 IN const KSPROPERTY_SET* PropertySet);
1707
1708 KSDDKAPI NTSTATUS NTAPI
1709 KsPropertyHandlerWithAllocator(
1710 IN PIRP Irp,
1711 IN ULONG PropertySetsCount,
1712 IN PKSPROPERTY_SET PropertySet,
1713 IN PFNKSALLOCATOR Allocator OPTIONAL,
1714 IN ULONG PropertyItemSize OPTIONAL);
1715
1716 KSDDKAPI NTSTATUS NTAPI
1717 KsUnserializeObjectPropertiesFromRegistry(
1718 IN PFILE_OBJECT FileObject,
1719 IN HANDLE ParentKey OPTIONAL,
1720 IN PUNICODE_STRING RegistryPath OPTIONAL);
1721
1722 KSDDKAPI BOOLEAN NTAPI
1723 KsFastPropertyHandler(
1724 IN PFILE_OBJECT FileObject,
1725 IN PKSPROPERTY UNALIGNED Property,
1726 IN ULONG PropertyLength,
1727 IN OUT PVOID UNALIGNED Data,
1728 IN ULONG DataLength,
1729 OUT PIO_STATUS_BLOCK IoStatus,
1730 IN ULONG PropertySetsCount,
1731 IN const KSPROPERTY_SET* PropertySet);
1732
1733
1734 /* ===============================================================
1735 Event Functions
1736 */
1737
1738 KSDDKAPI NTSTATUS NTAPI
1739 KsGenerateEvent(
1740 IN PKSEVENT_ENTRY EntryEvent);
1741
1742 KSDDKAPI NTSTATUS NTAPI
1743 KsEnableEventWithAllocator(
1744 IN PIRP Irp,
1745 IN ULONG EventSetsCount,
1746 IN PKSEVENT_SET EventSet,
1747 IN OUT PLIST_ENTRY EventsList OPTIONAL,
1748 IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL,
1749 IN PVOID EventsLock OPTIONAL,
1750 IN PFNKSALLOCATOR Allocator OPTIONAL,
1751 IN ULONG EventItemSize OPTIONAL);
1752
1753 KSDDKAPI NTSTATUS NTAPI
1754 KsGenerateDataEvent(
1755 IN PKSEVENT_ENTRY EventEntry,
1756 IN ULONG DataSize,
1757 IN PVOID Data);
1758
1759 KSDDKAPI NTSTATUS NTAPI
1760 KsEnableEvent(
1761 IN PIRP Irp,
1762 IN ULONG EventSetsCount,
1763 IN KSEVENT_SET* EventSet,
1764 IN OUT PLIST_ENTRY EventsList OPTIONAL,
1765 IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL,
1766 IN PVOID EventsLock OPTIONAL);
1767
1768 KSDDKAPI VOID NTAPI
1769 KsDiscardEvent(
1770 IN PKSEVENT_ENTRY EventEntry);
1771
1772 KSDDKAPI NTSTATUS NTAPI
1773 KsDisableEvent(
1774 IN PIRP Irp,
1775 IN OUT PLIST_ENTRY EventsList,
1776 IN KSEVENTS_LOCKTYPE EventsFlags,
1777 IN PVOID EventsLock);
1778
1779 KSDDKAPI VOID NTAPI
1780 KsFreeEventList(
1781 IN PFILE_OBJECT FileObject,
1782 IN OUT PLIST_ENTRY EventsList,
1783 IN KSEVENTS_LOCKTYPE EVentsFlags,
1784 IN PVOID EventsLock);
1785
1786
1787 /* ===============================================================
1788 Topology Functions
1789 */
1790
1791 KSDDKAPI NTSTATUS NTAPI
1792 KsValidateTopologyNodeCreateRequest(
1793 IN PIRP Irp,
1794 IN PKSTOPOLOGY Topology,
1795 OUT PKSNODE_CREATE* NodeCreate);
1796
1797 KSDDKAPI NTSTATUS NTAPI
1798 KsCreateTopologyNode(
1799 IN HANDLE ParentHandle,
1800 IN PKSNODE_CREATE NodeCreate,
1801 IN ACCESS_MASK DesiredAccess,
1802 OUT PHANDLE NodeHandle);
1803
1804 KSDDKAPI NTSTATUS NTAPI
1805 KsTopologyPropertyHandler(
1806 IN PIRP Irp,
1807 IN PKSPROPERTY Property,
1808 IN OUT PVOID Data,
1809 IN const KSTOPOLOGY* Topology);
1810
1811
1812
1813 /* ===============================================================
1814 Connectivity Functions
1815 */
1816
1817 KSDDKAPI NTSTATUS NTAPI
1818 KsCreatePin(
1819 IN HANDLE FilterHandle,
1820 IN PKSPIN_CONNECT Connect,
1821 IN ACCESS_MASK DesiredAccess,
1822 OUT PHANDLE ConnectionHandle);
1823
1824 KSDDKAPI NTSTATUS NTAPI
1825 KsValidateConnectRequest(
1826 IN PIRP Irp,
1827 IN ULONG DescriptorsCount,
1828 IN KSPIN_DESCRIPTOR* Descriptor,
1829 OUT PKSPIN_CONNECT* Connect);
1830
1831 KSDDKAPI NTSTATUS NTAPI
1832 KsPinPropertyHandler(
1833 IN PIRP Irp,
1834 IN PKSPROPERTY Property,
1835 IN OUT PVOID Data,
1836 IN ULONG DescriptorsCount,
1837 IN const KSPIN_DESCRIPTOR* Descriptor);
1838
1839 KSDDKAPI NTSTATUS NTAPI
1840 KsPinDataIntersection(
1841 IN PIRP Irp,
1842 IN PKSPIN Pin,
1843 OUT PVOID Data,
1844 IN ULONG DescriptorsCount,
1845 IN const KSPIN_DESCRIPTOR* Descriptor,
1846 IN PFNKSINTERSECTHANDLER IntersectHandler);
1847
1848 KSDDKAPI NTSTATUS NTAPI
1849 KsPinDataIntersectionEx(
1850 IN PIRP Irp,
1851 IN PKSP_PIN Pin,
1852 OUT PVOID Data,
1853 IN ULONG DescriptorsCount,
1854 IN const KSPIN_DESCRIPTOR* Descriptor,
1855 IN ULONG DescriptorSize,
1856 IN PFNKSINTERSECTHANDLEREX IntersectHandler OPTIONAL,
1857 IN PVOID HandlerContext OPTIONAL);
1858
1859 /* Does this belong here? */
1860
1861 KSDDKAPI NTSTATUS NTAPI
1862 KsHandleSizedListQuery(
1863 IN PIRP Irp,
1864 IN ULONG DataItemsCount,
1865 IN ULONG DataItemSize,
1866 IN const VOID* DataItems);
1867
1868
1869 /* ===============================================================
1870 IRP Helper Functions
1871 */
1872
1873 typedef NTSTATUS (*PFNKSIRPLISTCALLBACK)(
1874 IN PIRP Irp,
1875 IN PVOID Context);
1876
1877 KSDDKAPI NTSTATUS NTAPI
1878 KsAcquireResetValue(
1879 IN PIRP Irp,
1880 OUT KSRESET* ResetValue);
1881
1882 KSDDKAPI VOID NTAPI
1883 KsAddIrpToCancelableQueue(
1884 IN OUT PLIST_ENTRY QueueHead,
1885 IN PKSPIN_LOCK SpinLock,
1886 IN PIRP Irp,
1887 IN KSLIST_ENTRY_LOCATION ListLocation,
1888 IN PDRIVER_CANCEL DriverCancel OPTIONAL);
1889
1890 KSDDKAPI NTSTATUS NTAPI
1891 KsAddObjectCreateItemToDeviceHeader(
1892 IN KSDEVICE_HEADER Header,
1893 IN PDRIVER_DISPATCH Create,
1894 IN PVOID Context,
1895 IN PWCHAR ObjectClass,
1896 IN PSECURITY_DESCRIPTOR SecurityDescriptor);
1897
1898 KSDDKAPI NTSTATUS NTAPI
1899 KsAddObjectCreateItemToObjectHeader(
1900 IN KSOBJECT_HEADER Header,
1901 IN PDRIVER_DISPATCH Create,
1902 IN PVOID Context,
1903 IN PWCHAR ObjectClass,
1904 IN PSECURITY_DESCRIPTOR SecurityDescriptor);
1905
1906 KSDDKAPI NTSTATUS NTAPI
1907 KsAllocateDeviceHeader(
1908 OUT PVOID Header,
1909 IN ULONG ItemsCount,
1910 IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL);
1911
1912 KSDDKAPI NTSTATUS NTAPI
1913 KsAllocateExtraData(
1914 IN PIRP Irp,
1915 IN ULONG ExtraSize,
1916 OUT PVOID* ExtraBuffer);
1917
1918 KSDDKAPI NTSTATUS NTAPI
1919 KsAllocateObjectCreateItem(
1920 IN KSDEVICE_HEADER Header,
1921 IN PKSOBJECT_CREATE_ITEM CreateItem,
1922 IN BOOL AllocateEntry,
1923 IN PFNKSITEMFREECALLBACK ItemFreeCallback OPTIONAL);
1924
1925 KSDDKAPI NTSTATUS NTAPI
1926 KsAllocateObjectHeader(
1927 OUT PVOID Header,
1928 IN ULONG ItemsCount,
1929 IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL,
1930 IN PIRP Irp,
1931 IN KSDISPATCH_TABLE* Table);
1932
1933 KSDDKAPI VOID NTAPI
1934 KsCancelIo(
1935 IN OUT PLIST_ENTRY QueueHead,
1936 IN PKSPIN_LOCK SpinLock);
1937
1938 KSDDKAPI VOID NTAPI
1939 KsCancelRoutine(
1940 IN PDEVICE_OBJECT DeviceObject,
1941 IN PIRP Irp);
1942
1943 KSDDKAPI NTSTATUS NTAPI
1944 KsDefaultDeviceIoCompletion(
1945 IN PDEVICE_OBJECT DeviceObject,
1946 IN PIRP Irp);
1947
1948 /* ELSEWHERE
1949 KSDDKAPI ULONG NTAPI
1950 KsDecrementCountedWorker(
1951 IN PKSWORKER Worker);
1952 */
1953
1954 KSDDKAPI BOOLEAN NTAPI
1955 KsDispatchFastIoDeviceControlFailure(
1956 IN PFILE_OBJECT FileObject,
1957 IN BOOLEAN Wait,
1958 IN PVOID InputBuffer OPTIONAL,
1959 IN ULONG InputBufferLength,
1960 OUT PVOID OutputBuffer OPTIONAL,
1961 IN ULONG OutputBufferLength,
1962 IN ULONG IoControlCode,
1963 OUT PIO_STATUS_BLOCK IoStatus,
1964 IN PDEVICE_OBJECT DeviceObject); /* always return false */
1965
1966 KSDDKAPI BOOLEAN NTAPI
1967 KsDispatchFastReadFailure(
1968 IN PFILE_OBJECT FileObject,
1969 IN PLARGE_INTEGER FileOffset,
1970 IN ULONG Length,
1971 IN BOOLEAN Wait,
1972 IN ULONG LockKey,
1973 OUT PVOID Buffer,
1974 OUT PIO_STATUS_BLOCK IoStatus,
1975 IN PDEVICE_OBJECT DeviceObject); /* always return false */
1976
1977 /* This function does the same as the above */
1978 #define KsDispatchFastWriteFailure KsDispatchFastReadFailure
1979
1980 KSDDKAPI NTSTATUS NTAPI
1981 KsDispatchInvalidDeviceRequest(
1982 IN PDEVICE_OBJECT DeviceObject,
1983 IN PIRP Irp);
1984
1985 KSDDKAPI NTSTATUS NTAPI
1986 KsDispatchIrp(
1987 IN PDEVICE_OBJECT DeviceObject,
1988 IN PIRP Irp);
1989
1990 KSDDKAPI NTSTATUS NTAPI
1991 KsDispatchSpecificMethod(
1992 IN PIRP Irp,
1993 IN PFNKSHANDLER Handler);
1994
1995 KSDDKAPI NTSTATUS NTAPI
1996 KsDispatchSpecificProperty(
1997 IN PIRP Irp,
1998 IN PFNKSHANDLER Handler);
1999
2000 KSDDKAPI NTSTATUS NTAPI
2001 KsForwardAndCatchIrp(
2002 IN PDEVICE_OBJECT DeviceObject,
2003 IN PIRP Irp,
2004 IN PFILE_OBJECT FileObject,
2005 IN KSSTACK_USE StackUse);
2006
2007 KSDDKAPI NTSTATUS NTAPI
2008 KsForwardIrp(
2009 IN PIRP Irp,
2010 IN PFILE_OBJECT FileObject,
2011 IN BOOLEAN ReuseStackLocation);
2012
2013 KSDDKAPI VOID NTAPI
2014 KsFreeDeviceHeader(
2015 IN PVOID Header);
2016
2017 KSDDKAPI VOID NTAPI
2018 KsFreeObjectHeader(
2019 IN PVOID Header);
2020
2021 KSDDKAPI NTSTATUS NTAPI
2022 KsGetChildCreateParameter(
2023 IN PIRP Irp,
2024 OUT PVOID* CreateParameter);
2025
2026 KSDDKAPI NTSTATUS NTAPI
2027 KsMoveIrpsOnCancelableQueue(
2028 IN OUT PLIST_ENTRY SourceList,
2029 IN PKSPIN_LOCK SourceLock,
2030 IN OUT PLIST_ENTRY DestinationList,
2031 IN PKSPIN_LOCK DestinationLock OPTIONAL,
2032 IN KSLIST_ENTRY_LOCATION ListLocation,
2033 IN PFNKSIRPLISTCALLBACK ListCallback,
2034 IN PVOID Context);
2035
2036 KSDDKAPI NTSTATUS NTAPI
2037 KsProbeStreamIrp(
2038 IN PIRP Irp,
2039 IN ULONG ProbeFlags,
2040 IN ULONG HeaderSize);
2041
2042 KSDDKAPI NTSTATUS NTAPI
2043 KsQueryInformationFile(
2044 IN PFILE_OBJECT FileObject,
2045 OUT PVOID FileInformation,
2046 IN ULONG Length,
2047 IN FILE_INFORMATION_CLASS FileInformationClass);
2048
2049 KSDDKAPI ACCESS_MASK NTAPI
2050 KsQueryObjectAccessMask(
2051 IN KSOBJECT_HEADER Header);
2052
2053 KSDDKAPI PKSOBJECT_CREATE_ITEM NTAPI
2054 KsQueryObjectCreateItem(
2055 IN KSOBJECT_HEADER Header);
2056
2057 KSDDKAPI NTSTATUS NTAPI
2058 KsReadFile(
2059 IN PFILE_OBJECT FileObject,
2060 IN PKEVENT Event OPTIONAL,
2061 IN PVOID PortContext OPTIONAL,
2062 OUT PIO_STATUS_BLOCK IoStatusBlock,
2063 OUT PVOID Buffer,
2064 IN ULONG Length,
2065 IN ULONG Key OPTIONAL,
2066 IN KPROCESSOR_MODE RequestorMode);
2067
2068 KSDDKAPI VOID NTAPI
2069 KsReleaseIrpOnCancelableQueue(
2070 IN PIRP Irp,
2071 IN PDRIVER_CANCEL DriverCancel OPTIONAL);
2072
2073 KSDDKAPI PIRP NTAPI
2074 KsRemoveIrpFromCancelableQueue(
2075 IN OUT PLIST_ENTRY QueueHead,
2076 IN PKSPIN_LOCK SpinLock,
2077 IN KSLIST_ENTRY_LOCATION ListLocation,
2078 IN KSIRP_REMOVAL_OPERATION RemovalOperation);
2079
2080 KSDDKAPI VOID NTAPI
2081 KsRemoveSpecificIrpFromCancelableQueue(
2082 IN PIRP Irp);
2083
2084 KSDDKAPI NTSTATUS NTAPI
2085 KsSetInformationFile(
2086 IN PFILE_OBJECT FileObject,
2087 IN PVOID FileInformation,
2088 IN ULONG Length,
2089 IN FILE_INFORMATION_CLASS FileInformationClass);
2090
2091 KSDDKAPI NTSTATUS NTAPI
2092 KsSetMajorFunctionHandler(
2093 IN PDRIVER_OBJECT DriverObject,
2094 IN ULONG MajorFunction);
2095
2096 KSDDKAPI NTSTATUS NTAPI
2097 KsStreamIo(
2098 IN PFILE_OBJECT FileObject,
2099 IN PKEVENT Event OPTIONAL,
2100 IN PVOID PortContext OPTIONAL,
2101 IN PIO_COMPLETION_ROUTINE CompletionRoutine OPTIONAL,
2102 IN PVOID CompletionContext OPTIONAL,
2103 IN KSCOMPLETION_INVOCATION CompletionInvocationFlags OPTIONAL,
2104 OUT PIO_STATUS_BLOCK IoStatusBlock,
2105 IN OUT PVOID StreamHeaders,
2106 IN ULONG Length,
2107 IN ULONG Flags,
2108 IN KPROCESSOR_MODE RequestorMode);
2109
2110 KSDDKAPI NTSTATUS NTAPI
2111 KsWriteFile(
2112 IN PFILE_OBJECT FileObject,
2113 IN PKEVENT Event OPTIONAL,
2114 IN PVOID PortContext OPTIONAL,
2115 OUT PIO_STATUS_BLOCK IoStatusBlock,
2116 IN PVOID Buffer,
2117 IN ULONG Length,
2118 IN ULONG Key OPTIONAL,
2119 IN KPROCESSOR_MODE RequestorMode);
2120
2121
2122 /* ===============================================================
2123 Worker Management Functions
2124 */
2125
2126 KSDDKAPI NTSTATUS NTAPI
2127 KsRegisterWorker(
2128 IN WORK_QUEUE_TYPE WorkQueueType,
2129 OUT PKSWORKER* Worker);
2130
2131 KSDDKAPI VOID NTAPI
2132 KsUnregisterWorker(
2133 IN PKSWORKER Worker);
2134
2135 KSDDKAPI NTSTATUS NTAPI
2136 KsRegisterCountedWorker(
2137 IN WORK_QUEUE_TYPE WorkQueueType,
2138 IN PWORK_QUEUE_ITEM CountedWorkItem,
2139 OUT PKSWORKER* Worker);
2140
2141 KSDDKAPI ULONG NTAPI
2142 KsDecrementCountedWorker(
2143 IN PKSWORKER Worker);
2144
2145 KSDDKAPI ULONG NTAPI
2146 KsIncrementCountedWorker(
2147 IN PKSWORKER Worker);
2148
2149 KSDDKAPI NTSTATUS NTAPI
2150 KsQueueWorkItem(
2151 IN PKSWORKER Worker,
2152 IN PWORK_QUEUE_ITEM WorkItem);
2153
2154
2155 /* ===============================================================
2156 Resources / Images
2157 */
2158
2159 KSDDKAPI NTSTATUS NTAPI
2160 KsLoadResource(
2161 IN PVOID ImageBase,
2162 IN POOL_TYPE PoolType,
2163 IN ULONG_PTR ResourceName,
2164 IN ULONG ResourceType,
2165 OUT PVOID* Resource,
2166 OUT PULONG ResourceSize);
2167
2168 /* TODO: Implement
2169 KSDDKAPI NTSTATUS NTAPI
2170 KsGetImageNameAndResourceId(
2171 IN HANDLE RegKey,
2172 OUT PUNICODE_STRING ImageName,
2173 OUT PULONG_PTR ResourceId,
2174 OUT PULONG ValueType);
2175
2176 KSDDKAPI NTSTATUS NTAPI
2177 KsMapModuleName(
2178 IN PDEVICE_OBJECT PhysicalDeviceObject,
2179 IN PUNICODE_STRING ModuleName,
2180 OUT PUNICODE_STRING ImageName,
2181 OUT PULONG_PTR ResourceId,
2182 OUT PULONG ValueType);
2183 */
2184
2185
2186 /* ===============================================================
2187 Misc. Helper Functions
2188 */
2189
2190 KSDDKAPI NTSTATUS NTAPI
2191 KsCacheMedium(
2192 IN PUNICODE_STRING SymbolicLink,
2193 IN PKSPIN_MEDIUM Medium,
2194 IN DWORD PinDirection);
2195
2196 KSDDKAPI NTSTATUS NTAPI
2197 KsDefaultDispatchPnp(
2198 IN PDEVICE_OBJECT DeviceObject,
2199 IN PIRP Irp);
2200
2201 KSDDKAPI VOID NTAPI
2202 KsSetDevicePnpAndBaseObject(
2203 IN KSDEVICE_HEADER Header,
2204 IN PDEVICE_OBJECT PnpDeviceObject,
2205 IN PDEVICE_OBJECT BaseDevice);
2206
2207 KSDDKAPI NTSTATUS NTAPI
2208 KsDefaultDispatchPower(
2209 IN PDEVICE_OBJECT DeviceObject,
2210 IN PIRP Irp);
2211
2212 KSDDKAPI VOID NTAPI
2213 KsSetPowerDispatch(
2214 IN KSOBJECT_HEADER Header,
2215 IN PFNKSCONTEXT_DISPATCH PowerDispatch OPTIONAL,
2216 IN PVOID PowerContext OPTIONAL);
2217
2218 KSDDKAPI NTSTATUS NTAPI
2219 KsReferenceBusObject(
2220 IN KSDEVICE_HEADER Header);
2221
2222 KSDDKAPI VOID NTAPI
2223 KsDereferenceBusObject(
2224 IN KSDEVICE_HEADER Header);
2225
2226 KSDDKAPI NTSTATUS NTAPI
2227 KsFreeObjectCreateItem(
2228 IN KSDEVICE_HEADER Header,
2229 IN PUNICODE_STRING CreateItem);
2230
2231 KSDDKAPI NTSTATUS NTAPI
2232 KsFreeObjectCreateItemsByContext(
2233 IN KSDEVICE_HEADER Header,
2234 IN PVOID Context);
2235
2236 VOID
2237 KsNullDriverUnload(
2238 IN PDRIVER_OBJECT DriverObject);
2239
2240 KSDDKAPI PDEVICE_OBJECT NTAPI
2241 KsQueryDevicePnpObject(
2242 IN KSDEVICE_HEADER Header);
2243
2244 KSDDKAPI VOID NTAPI
2245 KsRecalculateStackDepth(
2246 IN KSDEVICE_HEADER Header,
2247 IN BOOLEAN ReuseStackLocation);
2248
2249 KSDDKAPI VOID NTAPI
2250 KsSetTargetDeviceObject(
2251 IN KSOBJECT_HEADER Header,
2252 IN PDEVICE_OBJECT TargetDevice OPTIONAL);
2253
2254 KSDDKAPI VOID NTAPI
2255 KsSetTargetState(
2256 IN KSOBJECT_HEADER Header,
2257 IN KSTARGET_STATE TargetState);
2258
2259 KSDDKAPI NTSTATUS NTAPI
2260 KsSynchronousIoControlDevice(
2261 IN PFILE_OBJECT FileObject,
2262 IN KPROCESSOR_MODE RequestorMode,
2263 IN DWORD IoControl,
2264 IN PVOID InBuffer,
2265 IN ULONG InSize,
2266 OUT PVOID OutBuffer,
2267 IN ULONG OUtSize,
2268 OUT PULONG BytesReturned);
2269
2270
2271 /* ===============================================================
2272 AVStream Functions (XP / DirectX 8)
2273 NOT IMPLEMENTED YET
2274 http://www.osronline.com/ddkx/stream/avstream_5q9f.htm
2275 */
2276
2277 #if 0
2278 typedef void (*PFNKSFILTERFACTORYPOWER)(
2279 IN PKSFILTERFACTORY FilterFactory,
2280 IN DEVICE_POWER_STATE State);
2281
2282 KSDDKAPI NTSTATUS NTAPI
2283 _KsEdit(
2284 IN KSOBJECT_BAG ObjectBag,
2285 IN OUT PVOID* PointerToPointerToItem,
2286 IN ULONG NewSize,
2287 IN ULONG OldSize,
2288 IN ULONG Tag);
2289
2290 VOID
2291 KsAcquireControl(
2292 IN PVOID Object)
2293 {
2294 }
2295
2296 VOID
2297 KsAcquireDevice(
2298 IN PKSDEVICE Device)
2299 {
2300 }
2301
2302 NTSTATUS
2303 KsAddDevice(
2304 IN PDRIVER_OBJECT DriverObject,
2305 IN PDEVICE_OBJECT PhysicalDeviceObject)
2306 {
2307 }
2308
2309 VOID
2310 KsAddEvent(
2311 IN PVOID Object,
2312 IN PKSEVENT_ENTRY EventEntry)
2313 {
2314 }
2315
2316 NTSTATUS
2317 KsAddItemToObjectBag(
2318 IN KSOBJECT_BAG ObjectBag,
2319 IN PVOID Item,
2320 IN PFNKSFREE Free OPTIONAL)
2321 {
2322 }
2323
2324 NTSTATUS
2325 KsAllocateObjectBag(
2326 IN PKSDEVICE Device,
2327 OUT KSOBJECT_BAG* ObjectBag)
2328 {
2329 }
2330
2331 VOID
2332 KsCompletePendingRequest(
2333 IN PIRP Irp)
2334 {
2335 }
2336
2337 NTSTATUS
2338 KsCopyObjectBagItems(
2339 IN KSOBJECT_BAG ObjectBagDestination,
2340 IN KSOBJECT_BAG ObjectBagSource)
2341 {
2342 }
2343
2344 NTSTATUS
2345 KsCreateDevice(
2346 IN PDRIVER_OBJECT DriverObject,
2347 IN PDEVICE_OBJECT PhysicalDeviceObject,
2348 IN const KSDEVICE_DESCRIPTOR* Descriptor OPTIONAL,
2349 IN ULONG ExtensionSize OPTIONAL,
2350 OUT PKSDEVICE* Device OPTIONAL)
2351 {
2352 }
2353
2354 NTSTATUS
2355 KsCreateFilterFactory(
2356 IN PDEVICE_OBJECT DeviceObject,
2357 IN const KSFILTER_DESCRIPTOR* Descriptor,
2358 IN PWCHAR RefString OPTIONAL,
2359 IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL,
2360 IN ULONG CreateItemFlags,
2361 IN PFNKSFILTERFACTORYPOWER SleepCallback OPTIONAL,
2362 IN PFNKSFILTERFACTORYPOWER WakeCallback OPTIONAL,
2363 OUT PKFSFILTERFACTORY FilterFactory OPTIONAL)
2364 {
2365 }
2366
2367 NTSTATUS
2368 KsDefaultAddEventHandler(
2369 IN PIRP Irp,
2370 IN PKSEVENTDATA EventData,
2371 IN OUT PKSEVENT_ENTRY EventEntry)
2372 {
2373 }
2374
2375 NTSTATUS
2376 KsDeleteFilterFactory(
2377 IN PKSFILTERFACTORY FilterFactory)
2378 {
2379 }
2380
2381 ULONG
2382 KsDeviceGetBusData(
2383 IN PKSDEVICE Device,
2384 IN ULONG DataType,
2385 IN PVOID Buffer,
2386 IN ULONG Offset,
2387 IN ULONG Length)
2388 {
2389 }
2390
2391 PKSFILTERFACTORY
2392 KsDeviceGetFirstChildFilterFactory(
2393 IN PKSDEVICE Device)
2394 {
2395 }
2396
2397 PUNKNOWN
2398 KsDeviceGetOuterUnknown(
2399 IN PKSDEVICE Device)
2400 {
2401 }
2402
2403 VOID
2404 KsDeviceRegisterAdapterObject(
2405 IN PKSDEVICE Device,
2406 IN PADAPTER_OBJECT AdapterObject,
2407 IN ULONG MaxMappingByteCount,
2408 IN ULONG MappingTableStride)
2409 {
2410 }
2411
2412 KSDDKAPI PUNKNOWN NTAPI
2413 KsDeviceRegisterAggregatedClientUnknown(
2414 IN PKSDEVICE Device,
2415 IN PUNKNOWN ClientUnknown);
2416
2417 ULONG
2418 KsDeviceSetBusData(
2419 IN PKSDEVICE Device,
2420 IN ULONG DataType,
2421 IN PVOID Buffer,
2422 IN ULONG Offset,
2423 IN ULONG Length)
2424 {
2425 }
2426
2427 #define KsDiscard(object, pointer) \
2428 KsRemoveItemFromObjectBag(object->Bag, pointer, TRUE)
2429
2430 VOID
2431 KsFilterAcquireControl(
2432 IN PKSFILTER Filter)
2433 {
2434 }
2435
2436 VOID
2437 KsFilterAcquireProcessingMutex(
2438 IN PKSFILTER Filter);
2439
2440 VOID
2441 KsFilterAddEvent(
2442 IN PKSFILTER Filter,
2443 IN PKSEVENT_ENTRY EventEntry)
2444 {
2445 }
2446
2447 KSDDKAPI NTSTATUS NTAPI
2448 KsFilterAddTopologyConnections(
2449 IN PKSFILTER Filter,
2450 IN ULONG NewConnectionsCount,
2451 IN const KSTOPOLOGY_CONNECTION* NewTopologyConnections);
2452
2453 VOID
2454 KsFilterAttemptProcessing(
2455 IN PKSFILTER Filter,
2456 IN BOOLEAN Asynchronous);
2457
2458 KSDDKAPI NTSTATUS NTAPI
2459 KsFilterCreateNode(
2460 IN PKSFILTER Filter,
2461 IN const KSNODE_DESCRIPTOR* NodeDescriptor,
2462 OUT PULONG NodeID);
2463
2464 KSDDKAPI NTSTATUS NTAPI
2465 KsFilterCreatePinFactory(
2466 IN PKSFILTER Filter,
2467 IN const KSPIN_DESCRIPTOR_EX* PinDescriptor,
2468 OUT PULONG PinID);
2469
2470 PKSDEVICE __inline
2471 KsFilterFactoryGetDevice(
2472 IN PKSFILTERFACTORY FilterFactory);
2473
2474 /* etc. */
2475 #endif /* avstream */
2476
2477 #ifdef __cplusplus
2478 }
2479 #endif
2480
2481 #endif