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