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