- Fix build
[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 #ifdef __cplusplus
36 extern "C" {
37 #endif
38
39 #ifdef BUILDING_KS
40 #define KSDDKAPI
41 #else
42 #define KSDDKAPI //DECLSPEC_IMPORT /* TODO */
43 #endif
44
45
46
47
48 #define KSSTRING_Filter L"{9B365890-165F-11D0-A195-0020AFD156E4}"
49 #define KSSTRING_Pin L"{146F1A80-4791-11D0-A5D6-28DB04C10000}"
50 #define KSSTRING_Clock L"{53172480-4791-11D0-A5D6-28DB04C10000}"
51 #define KSSTRING_Allocator L"{642F5D00-4791-11D0-A5D6-28DB04C10000}"
52 #define KSSTRING_AllocatorEx L"{091BB63B-603F-11D1-B067-00A0C9062802}"
53 #define KSSTRING_TopologyNode L"{0621061A-EE75-11D0-B915-00A0C9223196}"
54
55 #define KSDATAFORMAT_BIT_ATTRIBUTES 1
56 #define KSDATAFORMAT_ATTRIBUTES (1 << KSDATAFORMAT_BIT_ATTRIBUTES)
57 typedef PVOID PKSWORKER;
58
59 /* ===============================================================
60 GUID definition helpers
61 */
62
63 #ifndef _NTRTL_
64 #ifndef DEFINE_GUIDEX
65 #ifdef _MSC_VER
66 #define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name
67 #else
68 #define DEFINE_GUIDEX(name) EXTERN_C const GUID name
69 #endif
70 #endif
71
72 #ifndef STATICGUIDOF
73 #define STATICGUIDOF(guid) STATIC_##guid
74 #endif
75 #endif
76
77 #if defined(__cplusplus) && _MSC_VER >= 1100
78 #define DEFINE_GUIDSTRUCT(guid, name) struct __declspec(uuid(guid)) name
79 #define DEFINE_GUIDNAMED(name) __uidof(struct name)
80 #else
81 #define DEFINE_GUIDSTRUCT(guid, name) DEFINE_GUIDEX(name)
82 #define DEFINE_GUIDNAMED(name) name
83 #endif
84
85
86 #define STATIC_GUID_NULL \
87 0x00000000L, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
88 DEFINE_GUIDSTRUCT("00000000-0000-0000-0000-000000000000", GUID_NULL);
89 #define GUID_NULL DEFINE_GUIDNAMED(GUID_NULL)
90
91
92 /* ===============================================================
93 I/O Control Codes
94 */
95
96 #define IOCTL_KS_DISABLE_EVENT \
97 CTL_CODE( \
98 FILE_DEVICE_KS, \
99 0x000, \
100 METHOD_NEITHER, \
101 FILE_ANY_ACCESS)
102
103 #define IOCTL_KS_ENABLE_EVENT \
104 CTL_CODE( \
105 FILE_DEVICE_KS, \
106 0x001, \
107 METHOD_NEITHER, \
108 FILE_ANY_ACCESS)
109
110 // WAS 2
111 #define IOCTL_KS_METHOD \
112 CTL_CODE( \
113 FILE_DEVICE_KS, \
114 0x003, \
115 METHOD_NEITHER, \
116 FILE_ANY_ACCESS)
117
118 // WAS 3
119 #define IOCTL_KS_PROPERTY \
120 CTL_CODE( \
121 FILE_DEVICE_KS, \
122 0x000, \
123 METHOD_NEITHER, \
124 FILE_ANY_ACCESS)
125
126 #define IOCTL_KS_WRITE_STREAM \
127 CTL_CODE( \
128 FILE_DEVICE_KS, \
129 0x004, \
130 METHOD_NEITHER, \
131 FILE_WRITE_ACCESS)
132
133 #define IOCTL_KS_READ_STREAM \
134 CTL_CODE( \
135 FILE_DEVICE_KS, \
136 0x005, \
137 METHOD_NEITHER, \
138 FILE_READ_ACCESS)
139
140 #define IOCTL_KS_RESET_STATE \
141 CTL_CODE( \
142 FILE_DEVICE_KS, \
143 0x006, \
144 METHOD_NEITHER, \
145 FILE_ANY_ACCESS)
146
147
148 /* ===============================================================
149 Categories
150 */
151
152 #define STATIC_KSCATEGORY_BRIDGE \
153 0x085AFF00L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
154 DEFINE_GUIDSTRUCT("085AFF00-62CE-11CF-A5D6-28DB04C10000", KSCATEGORY_BRIDGE);
155 #define KSCATEGORY_BRIDGE DEFINE_GUIDNAMED(KSCATEGORY_BRIDGE)
156
157 #define STATIC_KSCATEGORY_CAPTURE \
158 0x65E8773DL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
159 DEFINE_GUIDSTRUCT("65E8773D-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_CAPTURE);
160 #define KSCATEGORY_CAPTURE DEFINE_GUIDNAMED(KSCATEGORY_CAPTURE)
161
162 #define STATIC_KSCATEGORY_RENDER \
163 0x65E8773EL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
164 DEFINE_GUIDSTRUCT("65E8773E-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_RENDER);
165 #define KSCATEGORY_RENDER DEFINE_GUIDNAMED(KSCATEGORY_RENDER)
166
167 #define STATIC_KSCATEGORY_MIXER \
168 0xAD809C00L, 0x7B88, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
169 DEFINE_GUIDSTRUCT("AD809C00-7B88-11D0-A5D6-28DB04C10000", KSCATEGORY_MIXER);
170 #define KSCATEGORY_MIXER DEFINE_GUIDNAMED(KSCATEGORY_MIXER)
171
172 #define STATIC_KSCATEGORY_SPLITTER \
173 0x0A4252A0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
174 DEFINE_GUIDSTRUCT("0A4252A0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_SPLITTER);
175 #define KSCATEGORY_SPLITTER DEFINE_GUIDNAMED(KSCATEGORY_SPLITTER)
176
177 #define STATIC_KSCATEGORY_DATACOMPRESSOR \
178 0x1E84C900L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
179 DEFINE_GUIDSTRUCT("1E84C900-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATACOMPRESSOR);
180 #define KSCATEGORY_DATACOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATACOMPRESSOR)
181
182 #define STATIC_KSCATEGORY_DATADECOMPRESSOR \
183 0x2721AE20L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
184 DEFINE_GUIDSTRUCT("2721AE20-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATADECOMPRESSOR);
185 #define KSCATEGORY_DATADECOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATADECOMPRESSOR)
186
187 #define STATIC_KSCATEGORY_DATATRANSFORM \
188 0x2EB07EA0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
189 DEFINE_GUIDSTRUCT("2EB07EA0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATATRANSFORM);
190 #define KSCATEGORY_DATATRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_DATATRANSFORM)
191
192 #define STATIC_KSCATEGORY_COMMUNICATIONSTRANSFORM \
193 0xCF1DDA2CL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
194 DEFINE_GUIDSTRUCT("CF1DDA2C-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_COMMUNICATIONSTRANSFORM);
195 #define KSCATEGORY_COMMUNICATIONSTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_COMMUNICATIONSTRANSFORM)
196
197 #define STATIC_KSCATEGORY_INTERFACETRANSFORM \
198 0xCF1DDA2DL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
199 DEFINE_GUIDSTRUCT("CF1DDA2D-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_INTERFACETRANSFORM);
200 #define KSCATEGORY_INTERFACETRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_INTERFACETRANSFORM)
201
202 #define STATIC_KSCATEGORY_MEDIUMTRANSFORM \
203 0xCF1DDA2EL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
204 DEFINE_GUIDSTRUCT("CF1DDA2E-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_MEDIUMTRANSFORM);
205 #define KSCATEGORY_MEDIUMTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_MEDIUMTRANSFORM)
206
207 #define STATIC_KSCATEGORY_FILESYSTEM \
208 0x760FED5EL, 0x9357, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
209 DEFINE_GUIDSTRUCT("760FED5E-9357-11D0-A3CC-00A0C9223196", KSCATEGORY_FILESYSTEM);
210 #define KSCATEGORY_FILESYSTEM DEFINE_GUIDNAMED(KSCATEGORY_FILESYSTEM)
211
212 #define STATIC_KSCATEGORY_CLOCK \
213 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
214 DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000", KSCATEGORY_CLOCK);
215 #define KSCATEGORY_CLOCK DEFINE_GUIDNAMED(KSCATEGORY_CLOCK)
216
217 #define STATIC_KSCATEGORY_PROXY \
218 0x97EBAACAL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
219 DEFINE_GUIDSTRUCT("97EBAACA-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_PROXY);
220 #define KSCATEGORY_PROXY DEFINE_GUIDNAMED(KSCATEGORY_PROXY)
221
222 #define STATIC_KSCATEGORY_QUALITY \
223 0x97EBAACBL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
224 DEFINE_GUIDSTRUCT("97EBAACB-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_QUALITY);
225 #define KSCATEGORY_QUALITY DEFINE_GUIDNAMED(KSCATEGORY_QUALITY)
226
227 /* ===============================================================
228 Common
229 */
230
231 typedef struct
232 {
233 GUID Set;
234 ULONG Id;
235 ULONG Flags;
236 } KSIDENTIFIER, *PKSIDENTIFIER;
237
238 typedef KSIDENTIFIER KSPROPERTY, *PKSPROPERTY;
239 typedef KSIDENTIFIER KSMETHOD, *PKSMETHOD;
240 typedef KSIDENTIFIER KSEVENT, *PKSEVENT;
241
242 typedef KSIDENTIFIER KSDEGRADE, *PKSDEGRADE;
243
244 typedef KSIDENTIFIER KSPIN_INTERFACE, *PKSPIN_INTERFACE;
245 typedef KSIDENTIFIER KSPIN_MEDIUM, *PKSPIN_MEDIUM;
246
247 typedef union
248 {
249 struct {
250 ULONG FormatSize;
251 ULONG Flags;
252 ULONG SampleSize;
253 ULONG Reserved;
254 GUID MajorFormat;
255 GUID SubFormat;
256 GUID Specifier;
257 };
258 LONGLONG Alignment;
259 } KSDATAFORMAT, *PKSDATAFORMAT, KSDATARANGE, *PKSDATARANGE;
260
261 typedef struct
262 {
263 } KSATTRIBUTE, *PKSATTRIBUTE;
264
265
266
267 /* ===============================================================
268 Interface Sets - TODO
269 */
270
271 #if 0
272 #define KSINTERFACESETID_Media
273
274 #define KSINTERFACESETID_Standard
275 #define KSINTERFACE_STANDARD_STREAMING
276 #define KSINTERFACE_STANDARD_LOOPED_STREAMING
277 #define KSINTERFACE_STANDARD_CONTROL
278 #endif
279
280 #define STATIC_KSINTERFACESETID_Standard \
281 0x1A8766A0L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
282 DEFINE_GUIDSTRUCT("1A8766A0-62CE-11CF-A5D6-28DB04C10000", KSINTERFACESETID_Standard);
283 #define KSINTERFACESETID_Standard DEFINE_GUIDNAMED(KSINTERFACESETID_Standard)
284
285 typedef enum
286 {
287 KSINTERFACE_STANDARD_STREAMING,
288 KSINTERFACE_STANDARD_LOOPED_STREAMING,
289 KSINTERFACE_STANDARD_CONTROL
290 } KSINTERFACE_STANDARD;
291
292 #define STATIC_KSINTERFACESETID_FileIo \
293 0x8C6F932CL, 0xE771, 0x11D0, 0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
294 DEFINE_GUIDSTRUCT("8C6F932C-E771-11D0-B8FF-00A0C9223196", KSINTERFACESETID_FileIo);
295 #define KSINTERFACESETID_FileIo DEFINE_GUIDNAMED(KSINTERFACESETID_FileIo)
296
297
298 /* ===============================================================
299 Mediums
300 */
301
302 typedef enum
303 {
304 KSINTERFACE_FILEIO_STREAMING
305 } KSINTERFACE_FILEIO;
306
307 #define KSMEDIUM_TYPE_ANYINSTANCE 0
308
309 #define STATIC_KSMEDIUMSETID_Standard \
310 0x4747B320L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
311 DEFINE_GUIDSTRUCT("4747B320-62CE-11CF-A5D6-28DB04C10000", KSMEDIUMSETID_Standard);
312 #define KSMEDIUMSETID_Standard DEFINE_GUIDNAMED(KSMEDIUMSETID_Standard)
313
314
315 /* ===============================================================
316 Clock Properties/Methods/Events
317 */
318
319 #define KSPROPSETID_Clock \
320 0xDF12A4C0L, 0xAC17, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
321
322 typedef enum
323 {
324 KSPROPERTY_CLOCK_TIME,
325 KSPROPERTY_CLOCK_PHYSICALTIME,
326 KSPROPERTY_CORRELATEDTIME,
327 KSPROPERTY_CORRELATEDPHYSICALTIME,
328 KSPROPERTY_CLOCK_RESOLUTION,
329 KSPROPERTY_CLOCK_STATE,
330 KSPROPERTY_CLOCK_FUNCTIONTABLE
331 } KSPROPERTY_CLOCK;
332
333 #define KSEVENTSETID_Clock \
334 0x364D8E20L, 0x62C7, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
335
336 typedef enum
337 {
338 KSEVENT_CLOCK_INTERVAL_MARK,
339 KSEVENT_CLOCK_POSITION_MARK
340 } KSEVENT_CLOCK_POSITION;
341
342
343 /* ===============================================================
344 Connection Properties/Methods/Events
345 */
346
347 #define STATIC_KSPROPSETID_Connection \
348 0x1D58C920L, 0xAC9B, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
349 DEFINE_GUIDSTRUCT("1D58C920-AC9B-11CF-A5D6-28DB04C10000", KSPROPSETID_Connection);
350 #define KSPROPSETID_Connection DEFINE_GUIDNAMED(KSPROPSETID_Connection)
351
352
353 typedef enum
354 {
355 KSPROPERTY_CONNECTION_STATE,
356 KSPROPERTY_CONNECTION_PRIORITY,
357 KSPROPERTY_CONNECTION_DATAFORMAT,
358 KSPROPERTY_CONNECTION_ALLOCATORFRAMING,
359 KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT,
360 KSPROPERTY_CONNECTION_ACQUIREORDERING,
361 KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,
362 KSPROPERTY_CONNECTION_STARTAT
363 } KSPROPERTY_CONNECTION;
364
365 #define KSEVENTSETID_Connection \
366 0x7f4bcbe0L, 0x9ea5, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00
367
368 typedef enum
369 {
370 KSEVENT_CONNECTION_POSITIONUPDATE,
371 KSEVENT_CONNECTION_DATADISCONTINUITY,
372 KSEVENT_CONNECTION_TIMEDISCONTINUITY,
373 KSEVENT_CONNECTION_PRIORITY,
374 KSEVENT_CONNECTION_ENDOFSTREAM
375 } KSEVENT_CONNECTION;
376
377
378 /* ===============================================================
379 General
380 Properties/Methods/Events
381 */
382
383 #define KSPROPSETID_General \
384 0x1464EDA5L, 0x6A8F, 0x11D1, 0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
385
386 typedef enum
387 {
388 KSPROPERTY_GENERAL_COMPONENTID
389 } KSPROPERTY_GENERAL;
390
391
392 /* ===============================================================
393 Graph Manager
394 Properties/Methods/Events
395 */
396
397 #define KSPROPSETID_GM \
398 0xAF627536L, 0xE719, 0x11D2, 0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D
399
400 typedef enum
401 {
402 KSPROPERTY_GM_GRAPHMANAGER,
403 KSPROPERTY_GM_TIMESTAMP_CLOCK,
404 KSPROPERTY_GM_RATEMATCH,
405 KSPROPERTY_GM_RENDERCLOCK
406 } KSPROPERTY_GM;
407
408
409 /* ===============================================================
410 Media Seeking
411 Properties/Methods/Events
412 */
413
414 #define KSPROPSETID_MediaSeeking \
415 0xEE904F0CL, 0xD09B, 0x11D0, 0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
416
417 typedef enum
418 {
419 KSPROPERTY_MEDIASEEKING_CAPABILITIES,
420 KSPROPERTY_MEDIASEEKING_FORMATS,
421 KSPROPERTY_MEDIASEEKING_TIMEFORMAT,
422 KSPROPERTY_MEDIASEEKING_POSITION,
423 KSPROPERTY_MEDIASEEKING_STOPPOSITION,
424 KSPROPERTY_MEDIASEEKING_POSITIONS,
425 KSPROPERTY_MEDIASEEKING_DURATION,
426 KSPROPERTY_MEDIASEEKING_AVAILABLE,
427 KSPROPERTY_MEDIASEEKING_PREROLL,
428 KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT
429 } KSPROPERTY_MEDIASEEKING;
430
431
432 /* ===============================================================
433 Pin
434 Properties/Methods/Events
435 */
436
437 #define STATIC_KSPROPSETID_Pin\
438 0x8C134960L, 0x51AD, 0x11CF, 0x87, 0x8A, 0x94, 0xF8, 0x01, 0xC1, 0x00, 0x00
439 DEFINE_GUIDSTRUCT("8C134960-51AD-11CF-878A-94F801C10000", KSPROPSETID_Pin);
440 #define KSPROPSETID_Pin DEFINE_GUIDNAMED(KSPROPSETID_Pin)
441
442 typedef enum
443 {
444 KSPROPERTY_PIN_CINSTANCES,
445 KSPROPERTY_PIN_CTYPES,
446 KSPROPERTY_PIN_DATAFLOW,
447 KSPROPERTY_PIN_DATARANGES,
448 KSPROPERTY_PIN_DATAINTERSECTION,
449 KSPROPERTY_PIN_INTERFACES,
450 KSPROPERTY_PIN_MEDIUMS,
451 KSPROPERTY_PIN_COMMUNICATION,
452 KSPROPERTY_PIN_GLOBALCINSTANCES,
453 KSPROPERTY_PIN_NECESSARYINSTANCES,
454 KSPROPERTY_PIN_PHYSICALCONNECTION,
455 KSPROPERTY_PIN_CATEGORY,
456 KSPROPERTY_PIN_NAME,
457 KSPROPERTY_PIN_CONSTRAINEDDATARANGES,
458 KSPROPERTY_PIN_PROPOSEDATAFORMAT
459 } KSPROPERTY_PIN;
460
461 typedef struct
462 {
463 KSPROPERTY Property;
464 ULONG PinId;
465 ULONG Reserved;
466 } KSP_PIN, *PKSP_PIN;
467
468 #define KSINSTANCE_INDETERMINATE ((ULONG)-1)
469
470 typedef struct
471 {
472 ULONG PossibleCount;
473 ULONG CurrentCount;
474 } KSPIN_CINSTANCES, *PKSPIN_CINSTANCES;
475
476 typedef struct
477 {
478 ULONG Size;
479 ULONG Pin;
480 WCHAR SymbolicLinkName[1];
481 } KSPIN_PHYSICALCONNECTION, *PKSPIN_PHYSICALCONNECTION;
482
483
484 /* ===============================================================
485 Quality
486 Properties/Methods/Events
487 */
488
489 #define KSPROPSETID_Quality \
490 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
491
492 typedef enum
493 {
494 KSPROPERTY_QUALITY_REPORT,
495 KSPROPERTY_QUALITY_ERROR
496 } KSPROPERTY_QUALITY;
497
498
499 /* ===============================================================
500 Stream
501 Properties/Methods/Events
502 */
503
504 #define KSPROPSETID_Stream \
505 0x65aaba60L, 0x98ae, 0x11cf, 0xa1, 0x0d, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
506
507 typedef enum
508 {
509 KSPROPERTY_STREAM_ALLOCATOR,
510 KSPROPERTY_STREAM_QUALITY,
511 KSPROPERTY_STREAM_DEGRADATION,
512 KSPROPERTY_STREAM_MASTERCLOCK,
513 KSPROPERTY_STREAM_TIMEFORMAT,
514 KSPROPERTY_STREAM_PRESENTATIONTIME,
515 KSPROPERTY_STREAM_PRESENTATIONEXTENT,
516 KSPROPERTY_STREAM_FRAMETIME,
517 KSPROPERTY_STREAM_RATECAPABILITY,
518 KSPROPERTY_STREAM_RATE,
519 KSPROPERTY_STREAM_PIPE_ID
520 } KSPROPERTY_STREAM;
521
522
523 /* ===============================================================
524 StreamAllocator
525 Properties/Methods/Events
526 */
527
528 #define KSPROPSETID_StreamAllocator \
529 0xcf6e4342L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
530
531 typedef enum
532 {
533 KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE,
534 KSPROPERTY_STREAMALLOCATOR_STATUS
535 } KSPROPERTY_STREAMALLOCATOR;
536
537 #define KSMETHODSETID_StreamAllocator \
538 0xcf6e4341L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
539
540 typedef enum
541 {
542 KSMETHOD_STREAMALLOCATOR_ALLOC,
543 KSMETHOD_STREAMALLOCATOR_FREE
544 } KSMETHOD_STREAMALLOCATOR;
545
546
547 #define KSEVENTSETID_StreamAllocator
548
549 typedef enum
550 {
551 KSEVENT_STREAMALLOCATOR_INTERNAL_FREEFRAME,
552 KSEVENT_STREAMALLOCATOR_FREEFRAME
553 } KSEVENT_STREAMALLOCATOR;
554
555
556 /* ===============================================================
557 StreamInterface
558 Properties/Methods/Events
559 */
560
561 #define KSPROPSETID_StreamInterface \
562 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
563
564 typedef enum
565 {
566 KSPROPERTY_STREAMINTERFACE_HEADERSIZE
567 } KSPROPERTY_STREAMINTERFACE;
568
569
570 /* ===============================================================
571 Topology
572 Properties/Methods/Events
573 */
574
575 #define KSPROPSETID_Topology \
576 0x720D4AC0L, 0x7533, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
577
578 typedef enum
579 {
580 KSPROPERTY_TOPOLOGY_CATEGORIES,
581 KSPROPERTY_TOPOLOGY_CONNECTIONS,
582 KSPROPERTY_TOPOLOGY_NAME,
583 KSPROPERTY_TOPOLOGY_NODES
584 } KSPROPERTY_TOPOLOGY;
585
586
587
588 /* ===============================================================
589 Property Sets for audio drivers - TODO
590 */
591
592 #define KSPROPSETID_AC3
593 /*
594 KSPROPERTY_AC3_ALTERNATE_AUDIO
595 KSPROPERTY_AC3_BIT_STREAM_MODE
596 KSPROPERTY_AC3_DIALOGUE_LEVEL
597 KSPROPERTY_AC3_DOWNMIX
598 KSPROPERTY_AC3_ERROR_CONCEALMENT
599 KSPROPERTY_AC3_LANGUAGE_CODE
600 KSPROPERTY_AC3_ROOM_TYPE
601 */
602
603 #define KSPROPSETID_Acoustic_Echo_Cancel
604 /*
605 KSPROPERTY_AEC_MODE
606 KSPROPERTY_AEC_NOISE_FILL_ENABLE
607 KSPROPERTY_AEC_STATUS
608 */
609
610 #define KSPROPSETID_Audio
611 /*
612 KSPROPERTY_AUDIO_3D_INTERFACE
613 KSPROPERTY_AUDIO_AGC
614 KSPROPERTY_AUDIO_ALGORITHM_INSTANCE
615 KSPROPERTY_AUDIO_BASS
616 KSPROPERTY_AUDIO_BASS_BOOST
617 KSPROPERTY_AUDIO_CHANNEL_CONFIG
618 KSPROPERTY_AUDIO_CHORUS_LEVEL
619 KSPROPERTY_AUDIO_COPY_PROTECTION
620 KSPROPERTY_AUDIO_CPU_RESOURCES
621 KSPROPERTY_AUDIO_DELAY
622 KSPROPERTY_AUDIO_DEMUX_DEST
623 KSPROPERTY_AUDIO_DEV_SPECIFIC
624 KSPROPERTY_AUDIO_DYNAMIC_RANGE
625 KSPROPERTY_AUDIO_DYNAMIC_SAMPLING_RATE
626 KSPROPERTY_AUDIO_EQ_BANDS
627 KSPROPERTY_AUDIO_EQ_LEVEL
628 KSPROPERTY_AUDIO_FILTER_STATE
629 KSPROPERTY_AUDIO_LATENCY
630 KSPROPERTY_AUDIO_LOUDNESS
631 KSPROPERTY_AUDIO_MANUFACTURE_GUID
632 KSPROPERTY_AUDIO_MID
633 KSPROPERTY_AUDIO_MIX_LEVEL_CAPS
634 KSPROPERTY_AUDIO_MIX_LEVEL_TABLE
635 KSPROPERTY_AUDIO_MUTE
636 KSPROPERTY_AUDIO_MUX_SOURCE
637 KSPROPERTY_AUDIO_NUM_EQ_BANDS
638 KSPROPERTY_AUDIO_PEAKMETER
639 KSPROPERTY_AUDIO_POSITION
640 KSPROPERTY_AUDIO_PREFERRED_STATUS
641 KSPROPERTY_AUDIO_PRODUCT_GUID
642 KSPROPERTY_AUDIO_QUALITY
643 KSPROPERTY_AUDIO_REVERB_LEVEL
644 KSPROPERTY_AUDIO_SAMPLING_RATE
645 KSPROPERTY_AUDIO_STEREO_ENHANCE
646 KSPROPERTY_AUDIO_STEREO_SPEAKER_GEOMETRY
647 KSPROPERTY_AUDIO_SURROUND_ENCODE
648 KSPROPERTY_AUDIO_TREBLE
649 KSPROPERTY_AUDIO_VOLUMELEVEL
650 KSPROPERTY_AUDIO_WIDE_MODE
651 KSPROPERTY_AUDIO_WIDENESS
652 */
653
654 #define KSPROPSETID_AudioGfx
655 /*
656 KSPROPERTY_AUDIOGFX_CAPTURETARGETDEVICEID
657 KSPROPERTY_AUDIOGFX_RENDERTARGETDEVICEID
658 */
659
660 #define KSPROPSETID_DirectSound3DBuffer
661 /*
662 KSPROPERTY_DIRECTSOUND3DBUFFER_ALL
663 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEANGLES
664 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEORIENTATION
665 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEOUTSIDEVOLUME
666 KSPROPERTY_DIRECTSOUND3DBUFFER_MAXDISTANCE
667 KSPROPERTY_DIRECTSOUND3DBUFFER_MINDISTANCE
668 KSPROPERTY_DIRECTSOUND3DBUFFER_MODE
669 KSPROPERTY_DIRECTSOUND3DBUFFER_POSITION
670 KSPROPERTY_DIRECTSOUND3DBUFFER_VELOCITY
671 */
672
673 #define KSPROPSETID_DirectSound3DListener
674 /*
675 KSPROPERTY_DIRECTSOUND3DLISTENER_ALL
676 KSPROPERTY_DIRECTSOUND3DLISTENER_ALLOCATION
677 KSPROPERTY_DIRECTSOUND3DLISTENER_BATCH
678 KSPROPERTY_DIRECTSOUND3DLISTENER_DISTANCEFACTOR
679 KSPROPERTY_DIRECTSOUND3DLISTENER_DOPPLERFACTOR
680 KSPROPERTY_DIRECTSOUND3DLISTENER_ORIENTATION
681 KSPROPERTY_DIRECTSOUND3DLISTENER_POSITION
682 KSPROPERTY_DIRECTSOUND3DLISTENER_ROLLOFFFACTOR
683 KSPROPERTY_DIRECTSOUND3DLISTENER_VELOCITY
684 */
685
686 #define KSPROPSETID_DrmAudioStream
687 /*
688 KSPROPERTY_DRMAUDIOSTREAM_CONTENTID
689 */
690
691 #define KSPROPSETID_Hrtf3d
692 /*
693 KSPROPERTY_HRTF3D_FILTER_FORMAT
694 KSPROPERTY_HRTF3D_INITIALIZE
695 KSPROPERTY_HRTF3D_PARAMS
696 */
697
698 #define KSPROPSETID_Itd3d
699 /*
700 KSPROPERTY_ITD3D_PARAMS
701 */
702
703 #define KSPROPSETID_Synth
704 /*
705 KSPROPERTY_SYNTH_CAPS
706 KSPROPERTY_SYNTH_CHANNELGROUPS
707 KSPROPERTY_SYNTH_LATENCYCLOCK
708 KSPROPERTY_SYNTH_MASTERCLOCK
709 KSPROPERTY_SYNTH_PORTPARAMETERS
710 KSPROPERTY_SYNTH_RUNNINGSTATS
711 KSPROPERTY_SYNTH_VOICEPRIORITY
712 KSPROPERTY_SYNTH_VOLUME
713 KSPROPERTY_SYNTH_VOLUMEBOOST
714 */
715
716 #define KSPROPSETID_Synth_Dls
717 /*
718 KSPROPERTY_SYNTH_DLS_APPEND
719 KSPROPERTY_SYNTH_DLS_COMPACT
720 KSPROPERTY_SYNTH_DLS_DOWNLOAD
721 KSPROPERTY_SYNTH_DLS_UNLOAD
722 KSPROPERTY_SYNTH_DLS_WAVEFORMAT
723 */
724
725 /* #define KSPROPSETID_Sysaudio */
726 /*
727 KSPROPERTY_SYSAUDIO_COMPONENT_ID
728 KSPROPERTY_SYSAUDIO_CREATE_VIRTUAL_SOURCE
729 KSPROPERTY_SYSAUDIO_DEVICE_COUNT
730 KSPROPERTY_SYSAUDIO_DEVICE_FRIENDLY_NAME
731 KSPROPERTY_SYSAUDIO_DEVICE_INSTANCE
732 KSPROPERTY_SYSAUDIO_DEVICE_INTERFACE_NAME
733 KSPROPERTY_SYSAUDIO_INSTANCE_INFO
734 KSPROPERTY_SYSAUDIO_SELECT_GRAPH
735 */
736
737 #define KSPROPSETID_Sysaudio_Pin
738 /*
739 KSPROPERTY_SYSAUDIO_ATTACH_VIRTUAL_SOURCE
740 */
741
742 #define KSPROPSETID_TopologyNode
743 /*
744 KSPROPERTY_TOPOLOGYNODE_ENABLE
745 KSPROPERTY_TOPOLOGYNODE_RESET
746 */
747
748
749
750
751 /* ===============================================================
752 Event Sets for audio drivers - TODO
753 */
754 #define KSEVENTSETID_AudioControlChange
755 /*
756 KSEVENT_CONTROL_CHANGE
757 */
758
759
760
761 /* ===============================================================
762 Node Types
763 */
764 /*
765 KSNODETYPE_3D_EFFECTS
766 KSNODETYPE_ACOUSTIC_ECHO_CANCEL
767 KSNODETYPE_ADC
768 KSNODETYPE_AGC
769 KSNODETYPE_CHORUS
770 KSNODETYPE_DAC
771 KSNODETYPE_DELAY
772 KSNODETYPE_DEMUX
773 KSNODETYPE_DEV_SPECIFIC
774 KSNODETYPE_DMSYNTH
775 KSNODETYPE_DMSYNTH_CAPS
776 KSNODETYPE_DRM_DESCRAMBLE
777 KSNODETYPE_EQUALIZER
778 KSNODETYPE_LOUDNESS
779 KSNODETYPE_MUTE
780 KSNODETYPE_MUX
781 KSNODETYPE_PEAKMETER
782 KSNODETYPE_PROLOGIC_DECODER
783 KSNODETYPE_PROLOGIC_ENCODER
784 KSNODETYPE_REVERB
785 KSNODETYPE_SRC
786 KSNODETYPE_STEREO_ENHANCE
787 KSNODETYPE_STEREO_WIDE
788 KSNODETYPE_SUM
789 KSNODETYPE_SUPERMIX
790 KSNODETYPE_SWMIDI
791 KSNODETYPE_SWSYNTH
792 KSNODETYPE_SYNTHESIZER
793 KSNODETYPE_TONE
794 KSNODETYPE_VOLUME
795 */
796
797
798 typedef PVOID KSDEVICE_HEADER,
799 KSOBJECT_HEADER,
800 KSOBJECT_BAG;
801
802
803
804
805 /* ===============================================================
806 Method Types
807 */
808
809 #define KSMETHOD_TYPE_NONE 0x00000000
810 #define KSMETHOD_TYPE_READ 0x00000001
811 #define KSMETHOD_TYPE_WRITE 0x00000002
812 #define KSMETHOD_TYPE_MODIFY 0x00000003
813 #define KSMETHOD_TYPE_SOURCE 0x00000004
814 #define KSMETHOD_TYPE_SEND 0x00000001
815 #define KSMETHOD_TYPE_SETSUPPORT 0x00000100
816 #define KSMETHOD_TYPE_BASICSUPPORT 0x00000200
817
818
819 /* ===============================================================
820 Property Types
821 */
822
823 #define KSPROPERTY_TYPE_GET 0x00000001
824 #define KSPROPERTY_TYPE_SET 0x00000002
825 #define KSPROPERTY_TYPE_SETSUPPORT 0x00000100
826 #define KSPROPERTY_TYPE_BASICSUPPORT 0x00000200
827 #define KSPROPERTY_TYPE_RELATIONS 0x00000400
828 #define KSPROPERTY_TYPE_SERIALIZESET 0x00000800
829 #define KSPROPERTY_TYPE_UNSERIALIZESET 0x00001000
830 #define KSPROPERTY_TYPE_SERIALIZERAW 0x00002000
831 #define KSPROPERTY_TYPE_UNSERIALIZERAW 0x00004000
832 #define KSPROPERTY_TYPE_SERIALIZESIZE 0x00008000
833 #define KSPROPERTY_TYPE_DEFAULT_VALUES 0x00010000
834
835
836 /* ===============================================================
837 Topology Methods/Properties
838 */
839
840 #define KSMETHOD_TYPE_TOPOLOGY 0x10000000
841 #define KSPROPERTY_TYPE_TOPOLOGY 0x10000000
842
843 /*
844 #define DEFINE_KS_GUID(GA,GB,GC,GD,GE,GF,GG,GH,GI,GJ,GK) \
845 DEFINE_GUID(??, 0x#GA#L, 0xGB, 0xGC, 0xGD, 0xGE, 0xGF, 0xGG, 0xGH, 0xGI, 0xGJ, 0xGK) \
846 "GA-GB-GC-GDGE-GFGGGHGIGJGK"
847 */
848
849 /* ===============================================================
850 KS Category GUIDs
851
852 BRIDGE - 0x085AFF00L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
853 CAPTURE - 0x65E8773DL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
854 RENDER - 0x65E8773EL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
855 MIXER - 0xAD809C00L, 0x7B88, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
856 SPLITTER - 0x0A4252A0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
857 DATACOMPRESSOR - 0x1E84C900L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
858 DATADECOMPRESSOR - 0x2721AE20L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
859 DATATRANSFORM - 0x2EB07EA0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
860 COMMUNICATIONSTRANSFORM - 0xCF1DDA2CL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
861 INTERFACETRANSFORM - 0xCF1DDA2DL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
862 MEDIUMTRANSFORM - 0xCF1DDA2EL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
863 FILESYSTEM - 0x760FED5EL, 0x9357, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
864 CLOCK - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
865 PROXY - 0x97EBAACAL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
866 QUALITY - 0x97EBAACBL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
867 */
868
869 /* ===============================================================
870 KSNAME GUIDs (defined also as KSSTRING_Xxx L"{...}"
871
872 Filter - 0x9b365890L, 0x165f, 0x11d0, 0xa1, 0x95, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
873 Pin - 0x146F1A80L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
874 Clock - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
875 Allocator - 0x642F5D00L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
876 TopologyNode - 0x0621061AL, 0xEE75, 0x11D0, 0xB9, 0x15, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
877 */
878
879 /* ===============================================================
880 Interface GUIDs
881
882 Standard - 0x1A8766A0L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
883 FileIo - 0x8C6F932CL, 0xE771, 0x11D0, 0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
884 */
885
886 /* ===============================================================
887 Medium Type GUIDs
888
889 Standard - 0x4747B320L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
890 */
891
892 /* ===============================================================
893 Property Set GUIDs
894
895 General - 0x1464EDA5L, 0x6A8F, 0x11D1, 0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
896 StreamIo - 0x65D003CAL, 0x1523, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
897 MediaSeeking - 0xEE904F0CL, 0xD09B, 0x11D0, 0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
898 Topology - 0x720D4AC0L, 0x7533, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
899 GM - 0xAF627536L, 0xE719, 0x11D2, 0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D
900 Quality - 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
901 Connection - 0x1D58C920L, 0xAC9B, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
902 */
903
904 /* ===============================================================
905 StreamAllocator Sets
906
907 Event set - 0x75d95571L, 0x073c, 0x11d0, 0xa1, 0x61, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
908 Method set - 0xcf6e4341L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
909 Property set - 0xcf6e4342L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
910 */
911
912 /* ===============================================================
913 StreamInterface Sets
914
915 Property set - 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
916 */
917
918 /* ===============================================================
919 Clock Sets
920
921 Property set - 0xDF12A4C0L, 0xAC17, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
922 Event sets - 0x364D8E20L, 0x62C7, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
923 */
924
925 /* ===============================================================
926 Connection Sets
927
928 Event set - 0x7f4bcbe0L, 0x9ea5, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00
929 */
930
931 /* ===============================================================
932 Time Format GUIDs
933
934 KSTIME_FORMAT_NONE (null guid)
935 FRAME - 0x7b785570L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
936 BYTE - 0x7b785571L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
937 SAMPLE - 0x7b785572L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
938 FIELD - 0x7b785573L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
939 MEDIA_TIME - 0x7b785574L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
940 */
941
942 /* ===============================================================
943 Media Type GUIDs
944
945 NULL
946 Stream -
947 None -
948
949 TODO ...
950 */
951
952 /* ===============================================================
953 KSMEMORY_TYPE_xxx
954
955 WILDCARD, DONT_CARE = NULL
956 SYSTEM - 0x091bb638L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
957 USER - 0x8cb0fc28L, 0x7893, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
958 KERNEL_PAGED - 0xd833f8f8L, 0x7894, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
959 KERNEL_NONPAGED - 0x4a6d5fc4L, 0x7895, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
960 DEVICE_UNKNOWN - 0x091bb639L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
961 */
962
963 /* ===============================================================
964 Enums
965 (values have been checked)
966 */
967
968 typedef enum
969 {
970 KsObjectTypeDevice,
971 KsObjectTypeFilterFactory,
972 KsObjectTypeFilter,
973 KsObjectTypePin
974 } KSOBJECTTYPE;
975
976 typedef enum
977 {
978 KSSTATE_STOP,
979 KSSTATE_ACQUIRE,
980 KSSTATE_PAUSE,
981 KSSTATE_RUN
982 } KSSTATE;
983
984 typedef enum
985 {
986 KSTARGET_STATE_DISABLED,
987 KSTARGET_STATE_ENABLED
988 } KSTARGET_STATE;
989
990 typedef enum
991 {
992 KSRESET_BEGIN,
993 KSRESET_END
994 } KSRESET;
995
996 typedef enum
997 {
998 KSEVENTS_NONE,
999 KSEVENTS_SPINLOCK,
1000 KSEVENTS_MUTEX,
1001 KSEVENTS_FMUTEX,
1002 KSEVENTS_FMUTEXUNSAFE,
1003 KSEVENTS_INTERRUPT,
1004 KSEVENTS_ERESOURCE
1005 } KSEVENTS_LOCKTYPE;
1006
1007 typedef enum
1008 {
1009 KSDEGRADE_STANDARD_SIMPLE,
1010 KSDEGRADE_STANDARD_QUALITY,
1011 KSDEGRADE_STANDARD_COMPUTATION,
1012 KSDEGRADE_STANDARD_SKIP
1013 } KSDEGRADE_STANDARD;
1014
1015 typedef enum
1016 {
1017 KSPIN_DATAFLOW_IN = 1,
1018 KSPIN_DATAFLOW_OUT
1019 } KSPIN_DATAFLOW;
1020
1021 typedef enum
1022 {
1023 KSPIN_COMMUNICATION_NONE,
1024 KSPIN_COMMUNICATION_SINK,
1025 KSPIN_COMMUNICATION_SOURCE,
1026 KSPIN_COMMUNICATION_BOTH,
1027 KSPIN_COMMUNICATION_BRIDGE
1028 } KSPIN_COMMUNICATION;
1029
1030 typedef enum
1031 {
1032 KsListEntryTail,
1033 KsListEntryHead
1034 } KSLIST_ENTRY_LOCATION;
1035
1036 typedef enum
1037 {
1038 KsStackCopyToNewLocation,
1039 KsStackReuseCurrentLocation,
1040 KsStackUseNewLocation
1041 } KSSTACK_USE;
1042
1043 typedef enum
1044 {
1045 KsAcquireOnly,
1046 KsAcquireAndRemove,
1047 KsAcquireOnlySingleItem,
1048 KsAcquireAndRemoveOnlySingleItem
1049 } KSIRP_REMOVAL_OPERATION;
1050
1051 typedef enum
1052 {
1053 KsInvokeOnSuccess = 1,
1054 KsInvokeOnError = 2,
1055 KsInvokeOnCancel = 4
1056 } KSCOMPLETION_INVOCATION;
1057
1058
1059 #if defined(__NTDDK_H)
1060 /* MOVE ME */
1061 typedef NTSTATUS (*PFNKSCONTEXT_DISPATCH)(
1062 IN PVOID Context,
1063 IN PIRP Irp);
1064 #endif
1065
1066 /* ===============================================================
1067 Framing
1068 */
1069
1070 typedef struct
1071 {
1072 } KS_FRAMING_ITEM, *PKS_FRAMING_ITEM;
1073
1074 typedef struct
1075 {
1076 } KS_FRAMING_RANGE, *PKS_FRAMING_RANGE;
1077
1078 typedef struct
1079 {
1080 /* Obsolete */
1081 } KS_FRAMING_RANGE_WEIGHTED, *PKS_FRAMING_RANGE_WEIGHTED;
1082
1083 /* ??? */
1084 typedef struct
1085 {
1086 } KS_COMPRESSION, *PKS_COMPRESSION;
1087
1088
1089 /* ===============================================================
1090 Priorities
1091 */
1092
1093 #define KSPRIORITY_LOW 0x00000001
1094 #define KSPRIORITY_NORMAL 0x40000000
1095 #define KSPRIORITY_HIGH 0x80000000
1096 #define KSPRIORITY_EXCLUSIVE 0xFFFFFFFF
1097
1098 typedef struct
1099 {
1100 ULONG PriorityClass;
1101 ULONG PrioritySubClass;
1102 } KSPRIORITY, *PKSPRIORITY;
1103
1104
1105 /* ===============================================================
1106 Dispatch Table
1107 http://www.osronline.com/DDKx/stream/ks-struct_494j.htm
1108 */
1109 #if defined(__NTDDK_H)
1110 typedef struct
1111 {
1112 PDRIVER_DISPATCH DeviceIoControl;
1113 PDRIVER_DISPATCH Read;
1114 PDRIVER_DISPATCH Write;
1115 PDRIVER_DISPATCH Flush;
1116 PDRIVER_DISPATCH Close;
1117 PDRIVER_DISPATCH QuerySecurity;
1118 PDRIVER_DISPATCH SetSecurity;
1119 PFAST_IO_DEVICE_CONTROL FastDeviceIoControl;
1120 PFAST_IO_READ FastRead;
1121 PFAST_IO_WRITE FastWrite;
1122 } KSDISPATCH_TABLE, *PKSDISPATCH_TABLE;
1123 #endif
1124
1125 typedef struct
1126 {
1127 } BUS_INTERFACE_REFERENCE, *PBUS_INTERFACE_REFERENCE;
1128
1129 typedef struct
1130 {
1131 GUID Manufacturer;
1132 GUID Product;
1133 GUID Component;
1134 GUID Name;
1135 ULONG Version;
1136 ULONG Revision;
1137 } KSCOMPONENTID, *PKSCOMPONENTID;
1138
1139 typedef struct
1140 {
1141 } KSBUFFER_ITEM, *PKSBUFFER_ITEM;
1142
1143 /* ===============================================================
1144 Properties
1145 */
1146
1147 #define KSPROPERTY_MEMBER_RANGES 0x00000001
1148 #define KSPROPERTY_MEMBER_STEPPEDRANGES 0x00000002
1149 #define KSPROPERTY_MEMBER_VALUES 0x00000003
1150 #define KSPROPERTY_MEMBER_FLAG_DEFAULT KSPROPERTY_MEMBER_RANGES
1151
1152 typedef struct
1153 {
1154 } KSPROPERTY_BOUNDS_LONG, *PKSPROPERTY_BOUNDS_LONG;
1155
1156 typedef struct
1157 {
1158 } KSPROPERTY_BOUNDS_LONGLONG, *PKSPROPERTY_BOUNDS_LONGLONG;
1159
1160 typedef struct
1161 {
1162 } KSPROPERTY_DESCRIPTION, *PKSPROPERTY_DESCRIPTION;
1163
1164 typedef struct
1165 {
1166 } KSPROPERTY_ITEM, *PKSPROPERTY_ITEM;
1167
1168 typedef struct
1169 {
1170 } KSPROPERTY_MEDIAAVAILABLE, *PKSPROPERTY_MEDIAAVAILABLE;
1171
1172 typedef struct
1173 {
1174 } KSPROPERTY_MEMBERSHEADER, *PKSPROPERTY_MEMBERSHEADER;
1175
1176 typedef struct
1177 {
1178 } KSPROPERTY_MEMBERSLIST, *PKSPROPERTY_MEMBERSLIST;
1179
1180 typedef struct
1181 {
1182 } KSPROPERTY_POSITIONS, *PKSPROPERTY_POSITIONS;
1183
1184 typedef struct
1185 {
1186 } KSPROPERTY_SERIAL, *PKSPROPERTY_SERIAL;
1187
1188 typedef struct
1189 {
1190 } KSPROPERTY_SERIALHDR, *PKSPROPERTY_SERIALHDR;
1191
1192 typedef struct
1193 {
1194 } KSPROPERTY_SET, *PKSPROPERTY_SET;
1195
1196 typedef struct
1197 {
1198 } KSPROPERTY_STEPPING_LONG, *PKSPROPERTY_STEPPING_LONG;
1199
1200 typedef struct
1201 {
1202 } KSPROPERTY_STEPPING_LONGLONG, *PKSPROPERTY_STEPPING_LONGLONG;
1203
1204 typedef struct
1205 {
1206 } KSPROPERTY_VALUES, *PKSPROPERTY_VALUES;
1207
1208
1209 /* ===============================================================
1210 Allocator Framing
1211 */
1212
1213 typedef struct
1214 {
1215 } KSALLOCATOR_FRAMING, *PKSALLOCATOR_FRAMING;
1216
1217 typedef struct
1218 {
1219 } KSALLOCATOR_FRAMING_EX, *PKSALLOCATOR_FRAMING_EX;
1220
1221
1222 /* ===============================================================
1223 Quality
1224 */
1225
1226 typedef struct
1227 {
1228 } KSQUALITY, *PKSQUALITY;
1229
1230 typedef struct
1231 {
1232 HANDLE QualityManager;
1233 PVOID Context;
1234 } KSQUALITY_MANAGER, *PKSQUALITY_MANAGER;
1235
1236 typedef struct
1237 {
1238 } KSRATE, *PKSRATE;
1239
1240 typedef struct
1241 {
1242 } KSRATE_CAPABILITY, *PKSRATE_CAPABILITY;
1243
1244 typedef struct
1245 {
1246 LONGLONG Granularity;
1247 LONGLONG Error;
1248 } KSRESOLUTION, *PKSRESOLUTION;
1249
1250 typedef struct
1251 {
1252 } KSRELATIVEEVENT, *PKSRELATIVEEVENT;
1253
1254
1255 /* ===============================================================
1256 Timing
1257 */
1258
1259 typedef struct
1260 {
1261 LONGLONG Time;
1262 ULONG Numerator;
1263 ULONG Denominator;
1264 } KSTIME, *PKSTIME;
1265
1266 typedef struct
1267 {
1268 } KSCORRELATED_TIME, *PKSCORRELATED_TIME;
1269
1270 typedef struct
1271 {
1272 KSPROPERTY Property;
1273 GUID SourceFormat;
1274 GUID TargetFormat;
1275 LONGLONG Time;
1276 } KSP_TIMEFORMAT, *PKSP_TIMEFORMAT;
1277
1278 typedef struct
1279 {
1280 } KSINTERVAL, *PKSINTERVAL;
1281
1282 typedef struct
1283 {
1284 } KSFRAMETIME, *PKSFRAMETIME;
1285
1286
1287 /* ===============================================================
1288 Clocks
1289 */
1290
1291 typedef struct
1292 {
1293 } KSCLOCK, *PKSCLOCK, *PKSDEFAULTCLOCK; /* OK ? */
1294
1295 typedef struct
1296 {
1297 } KSCLOCK_CREATE, *PKSCLOCK_CREATE;
1298
1299 typedef struct
1300 {
1301 } KSCLOCK_FUNCTIONTABLE, *PKSCLOCK_FUNCTIONTABLE;
1302
1303
1304 /* ===============================================================
1305 Objects ??? SORT ME!
1306 */
1307
1308 typedef struct
1309 {
1310 } KSOBJECT_CREATE, *PKSOBJECT_CREATE;
1311
1312 #if defined(__NTDDK_H)
1313 typedef struct
1314 {
1315 PDRIVER_DISPATCH Create;
1316 PVOID Context;
1317 UNICODE_STRING ObjectClass;
1318 PSECURITY_DESCRIPTOR SecurityDescriptor;
1319 ULONG Flags;
1320 } KSOBJECT_CREATE_ITEM, *PKSOBJECT_CREATE_ITEM;
1321
1322
1323 typedef VOID (*PFNKSITEMFREECALLBACK)(
1324 IN PKSOBJECT_CREATE_ITEM CreateItem);
1325
1326 #endif
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 #if defined(__NTDDK_H)
1559 typedef NTSTATUS (*PFNKSALLOCATOR)(
1560 IN PIRP Irp,
1561 IN ULONG BufferSize,
1562 IN BOOLEAN 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 #endif
1592
1593 typedef UNKNOWN PFNALLOCATORE_ALLOCATEFRAME;
1594 typedef UNKNOWN PFNALLOCATOR_FREEFRAME;
1595
1596 /*
1597 typedef struct
1598 {
1599 PFNALLOCATOR_ALLOCATEFRAME AllocateFrame;
1600 PFNALLOCATOR_FREEFRAME FreeFrame;
1601 }
1602 */
1603
1604 typedef struct
1605 {
1606 KSALLOCATOR_FRAMING Framing;
1607 ULONG AllocatedFrames;
1608 ULONG Reserved;
1609 } KSSTREAMALLOCATOR_STATUS, *PKSSTREAMALLOCATOR_STATUS;
1610
1611 typedef struct
1612 {
1613 KSALLOCATOR_FRAMING_EX Framing;
1614 ULONG AllocatedFrames;
1615 ULONG Reserved;
1616 } KSSTREAMALLOCATOR_STATUS_EX, *PKSSTREAMALLOCATOR_STATUS_EX;
1617
1618 typedef struct
1619 {
1620 ULONG Size;
1621 ULONG TypeSpecificFlags;
1622 KSTIME PresentationTime;
1623 LONGLONG Duration;
1624 ULONG FrameExtent;
1625 ULONG DataUsed;
1626 PVOID Data;
1627 ULONG OptionsFlags;
1628 } KSSTREAM_HEADER, *PKSSTREAM_HEADER;
1629
1630
1631
1632 /* ===============================================================
1633 XP / DX8
1634 */
1635
1636 typedef struct
1637 {
1638 /* TODO */
1639 } KSPROCESSPIN, *PKSPROCESSPIN;
1640
1641 typedef struct
1642 {
1643 PKSPROCESSPIN* Pins;
1644 ULONG Count;
1645 } KSPROCESSPIN_INDEXENTRY, *PKSPROCESSPIN_INDEXENTRY;
1646
1647
1648 /* ===============================================================
1649 Device Dispatch
1650 */
1651 #if defined(_NTDDK_)
1652 typedef struct
1653 {
1654 /* TODO */
1655 } KSDEVICE, *PKSDEVICE;
1656
1657 typedef NTSTATUS (*PFNKSDEVICECREATE)(
1658 IN PKSDEVICE Device);
1659
1660 typedef NTSTATUS (*PFNKSDEVICEPNPSTART)(
1661 IN PKSDEVICE Device,
1662 IN PIRP Irp,
1663 IN PCM_RESOURCE_LIST TranslatedResourceList OPTIONAL,
1664 IN PCM_RESOURCE_LIST UntranslatedResourceList OPTIONAL);
1665
1666 typedef NTSTATUS (*PFNKSDEVICE)(
1667 IN PKSDEVICE Device);
1668
1669 typedef NTSTATUS (*PFNKSDEVICEIRP)(
1670 IN PKSDEVICE Device,
1671 IN PIRP Irp);
1672
1673 typedef VOID (*PFNKSDEVICEIRPVOID)(
1674 IN PKSDEVICE Device,
1675 IN PIRP Irp);
1676
1677 typedef NTSTATUS (*PFNKSDEVICEQUERYCAPABILITIES)(
1678 IN PKSDEVICE Device,
1679 IN PIRP Irp,
1680 IN OUT PDEVICE_CAPABILITIES Capabilities);
1681
1682 typedef NTSTATUS (*PFNKSDEVICEQUERYPOWER)(
1683 IN PKSDEVICE Device,
1684 IN PIRP Irp,
1685 IN DEVICE_POWER_STATE DeviceTo,
1686 IN DEVICE_POWER_STATE DeviceFrom,
1687 IN SYSTEM_POWER_STATE SystemTo,
1688 IN SYSTEM_POWER_STATE SystemFrom,
1689 IN POWER_ACTION Action);
1690
1691 typedef VOID (*PFNKSDEVICESETPOWER)(
1692 IN PKSDEVICE Device,
1693 IN PIRP Irp,
1694 IN DEVICE_POWER_STATE To,
1695 IN DEVICE_POWER_STATE From);
1696
1697 typedef struct _KSDEVICE_DISPATCH
1698 {
1699 PFNKSDEVICECREATE Add;
1700 PFNKSDEVICEPNPSTART Start;
1701 PFNKSDEVICE PostStart;
1702 PFNKSDEVICEIRP QueryStop;
1703 PFNKSDEVICEIRPVOID CancelStop;
1704 PFNKSDEVICEIRPVOID Stop;
1705 PFNKSDEVICEIRP QueryRemove;
1706 PFNKSDEVICEIRPVOID CancelRemove;
1707 PFNKSDEVICEIRPVOID Remove;
1708 PFNKSDEVICEQUERYCAPABILITIES QueryCapabilities;
1709 PFNKSDEVICEIRPVOID SurpriseRemoval;
1710 PFNKSDEVICEQUERYPOWER Querypower;
1711 PFNKSDEVICESETPOWER SetPower;
1712 } KSDEVICE_DISPATCH, *PKSDEVICE_DISPATCH;
1713 #endif
1714
1715 /* ===============================================================
1716 Filter Dispatch
1717 */
1718 #if defined(_NTDDK_)
1719 typedef struct
1720 {
1721 } KSFILTER, *PKSFILTER;
1722
1723 typedef NTSTATUS (*PFNKSFILTERIRP)(
1724 IN PKSFILTER Filter,
1725 IN PIRP Irp);
1726
1727 typedef NTSTATUS (*PFNKSFILTERPROCESS)(
1728 IN PKSFILTER FIlter,
1729 IN PKSPROCESSPIN_INDEXENTRY ProcessPinsIndex);
1730
1731 typedef NTSTATUS (*PFNKSFILTERVOID)(
1732 IN PKSFILTER Filter);
1733
1734 typedef struct _KSFILTER_DISPATCH
1735 {
1736 PFNKSFILTERIRP Create;
1737 PFNKSFILTERIRP Close;
1738 PFNKSFILTERPROCESS Process;
1739 PFNKSFILTERVOID Reset;
1740 } KSFILTER_DISPATCH, *PKSFILTER_DISPATCH;
1741
1742 typedef struct {
1743 const KSAUTOMATION_TABLE* AutomationTable;
1744 const GUID* Type;
1745 const GUID* Name;
1746 } KSNODE_DESCRIPTOR, *PKSNODE_DESCRIPTOR;
1747
1748 typedef struct {
1749 const KSFILTER_DISPATCH* Dispatch;
1750 const KSAUTOMATION_TABLE* AutomationTable;
1751 ULONG Version;
1752 ULONG Flags;
1753 const GUID* ReferenceGuid;
1754 ULONG PinDescriptorsCount;
1755 ULONG PinDescriptorSize;
1756 const KSPIN_DESCRIPTOR_EX* PinDescriptors;
1757 ULONG CategoriesCount;
1758 const GUID* Categories;
1759 ULONG NodeDescriptorsCount;
1760 ULONG NodeDescriptorSize;
1761 const KSNODE_DESCRIPTOR* NodeDescriptors;
1762 ULONG ConnectionsCount;
1763 const KSTOPOLOGY_CONNECTION* Connections;
1764 const KSCOMPONENTID* ComponentId;
1765 } KSFILTER_DESCRIPTOR, *PKSFILTER_DESCRIPTOR;
1766
1767 typedef struct
1768 {
1769 const KSDEVICE_DISPATCH* Dispatch;
1770 ULONG FilterDescriptorsCount;
1771 const KSFILTER_DESCRIPTOR*const* FilterDescriptors;
1772 } KSDEVICE_DESCRIPTOR, *PKSDEVICE_DESCRIPTOR;
1773 #endif
1774 /* ===============================================================
1775 Minidriver Callbacks
1776 */
1777 #if defined(_NTDDK_)
1778 typedef NTSTATUS (*KStrMethodHandler)(
1779 IN PIRP Irp,
1780 IN PKSIDENTIFIER Request,
1781 IN OUT PVOID Data);
1782
1783 typedef NTSTATUS (*KStrSupportHandler)(
1784 IN PIRP Irp,
1785 IN PKSIDENTIFIER Request,
1786 IN OUT PVOID Data);
1787 #endif
1788
1789 /* ===============================================================
1790 Allocator Functions
1791 */
1792 #if defined(_NTDDK_)
1793 KSDDKAPI NTSTATUS NTAPI
1794 KsCreateAllocator(
1795 IN HANDLE ConnectionHandle,
1796 IN PKSALLOCATOR_FRAMING AllocatorFraming,
1797 OUT PHANDLE AllocatorHandle);
1798
1799 KSDDKAPI NTSTATUS NTAPI
1800 KsCreateDefaultAllocator(
1801 IN PIRP Irp);
1802
1803 KSDDKAPI NTSTATUS NTAPI
1804 KsValidateAllocatorCreateRequest(
1805 IN PIRP Irp,
1806 OUT PKSALLOCATOR_FRAMING* AllocatorFraming);
1807
1808 KSDDKAPI NTSTATUS NTAPI
1809 KsCreateDefaultAllocatorEx(
1810 IN PIRP Irp,
1811 IN PVOID InitializeContext OPTIONAL,
1812 IN PFNKSDEFAULTALLOCATE DefaultAllocate OPTIONAL,
1813 IN PFNKSDEFAULTFREE DefaultFree OPTIONAL,
1814 IN PFNKSINITIALIZEALLOCATOR InitializeAllocator OPTIONAL,
1815 IN PFNKSDELETEALLOCATOR DeleteAllocator OPTIONAL);
1816
1817 KSDDKAPI NTSTATUS NTAPI
1818 KsValidateAllocatorFramingEx(
1819 IN PKSALLOCATOR_FRAMING_EX Framing,
1820 IN ULONG BufferSize,
1821 IN const KSALLOCATOR_FRAMING_EX* PinFraming);
1822 #endif
1823
1824 /* ===============================================================
1825 Clock Functions
1826 */
1827 #if defined(_NTDDK_)
1828 typedef BOOLEAN (*PFNKSSETTIMER)(
1829 IN PVOID Context,
1830 IN PKTIMER Timer,
1831 IN LARGE_INTEGER DueTime,
1832 IN PKDPC Dpc);
1833
1834 typedef BOOLEAN (*PFNKSCANCELTIMER)(
1835 IN PVOID Context,
1836 IN PKTIMER Timer);
1837
1838 typedef LONGLONG (FASTCALL *PFNKSCORRELATEDTIME)(
1839 IN PVOID Context,
1840 OUT PLONGLONG SystemTime);
1841
1842 KSDDKAPI NTSTATUS NTAPI
1843 KsCreateClock(
1844 IN HANDLE ConnectionHandle,
1845 IN PKSCLOCK_CREATE ClockCreate,
1846 OUT PHANDLE ClockHandle);
1847
1848 KSDDKAPI NTSTATUS NTAPI
1849 KsCreateDefaultClock(
1850 IN PIRP Irp,
1851 IN PKSDEFAULTCLOCK DefaultClock);
1852
1853 KSDDKAPI NTSTATUS NTAPI
1854 KsAllocateDefaultClock(
1855 OUT PKSDEFAULTCLOCK* DefaultClock);
1856
1857 KSDDKAPI NTSTATUS NTAPI
1858 KsAllocateDefaultClockEx(
1859 OUT PKSDEFAULTCLOCK* DefaultClock,
1860 IN PVOID Context OPTIONAL,
1861 IN PFNKSSETTIMER SetTimer OPTIONAL,
1862 IN PFNKSCANCELTIMER CancelTimer OPTIONAL,
1863 IN PFNKSCORRELATEDTIME CorrelatedTime OPTIONAL,
1864 IN const KSRESOLUTION* Resolution OPTIONAL,
1865 IN ULONG Flags);
1866
1867 KSDDKAPI VOID NTAPI
1868 KsFreeDefaultClock(
1869 IN PKSDEFAULTCLOCK DefaultClock);
1870
1871 KSDDKAPI NTSTATUS NTAPI
1872 KsValidateClockCreateRequest(
1873 IN PIRP Irp,
1874 OUT PKSCLOCK_CREATE* ClockCreate);
1875
1876 KSDDKAPI KSSTATE NTAPI
1877 KsGetDefaultClockState(
1878 IN PKSDEFAULTCLOCK DefaultClock);
1879
1880 KSDDKAPI VOID NTAPI
1881 KsSetDefaultClockState(
1882 IN PKSDEFAULTCLOCK DefaultClock,
1883 IN KSSTATE State);
1884
1885 KSDDKAPI LONGLONG NTAPI
1886 KsGetDefaultClockTime(
1887 IN PKSDEFAULTCLOCK DefaultClock);
1888
1889 KSDDKAPI VOID NTAPI
1890 KsSetDefaultClockTime(
1891 IN PKSDEFAULTCLOCK DefaultClock,
1892 IN LONGLONG Time);
1893 #endif
1894
1895 /* ===============================================================
1896 Method Functions
1897 */
1898
1899 /* Method sets - TODO: Make into macros! */
1900 #if defined(_NTDDK_)
1901 #if 0
1902 VOID
1903 KSMETHOD_SET_IRP_STORAGE(
1904 IN IRP Irp);
1905
1906 VOID
1907 KSMETHOD_ITEM_IRP_STORAGE(
1908 IN IRP Irp);
1909
1910 VOID
1911 KSMETHOD_TYPE_IRP_STORAGE(
1912 IN IRP Irp);
1913 #endif
1914
1915 KSDDKAPI NTSTATUS NTAPI
1916 KsMethodHandler(
1917 IN PIRP Irp,
1918 IN ULONG MethodSetsCount,
1919 IN PKSMETHOD_SET MethodSet);
1920
1921 KSDDKAPI NTSTATUS NTAPI
1922 KsMethodHandlerWithAllocator(
1923 IN PIRP Irp,
1924 IN ULONG MethodSetsCount,
1925 IN PKSMETHOD_SET MethodSet,
1926 IN PFNKSALLOCATOR Allocator OPTIONAL,
1927 IN ULONG MethodItemSize OPTIONAL);
1928
1929 KSDDKAPI BOOLEAN NTAPI
1930 KsFastMethodHandler(
1931 IN PFILE_OBJECT FileObject,
1932 IN PKSMETHOD UNALIGNED Method,
1933 IN ULONG MethodLength,
1934 IN OUT PVOID UNALIGNED Data,
1935 IN ULONG DataLength,
1936 OUT PIO_STATUS_BLOCK IoStatus,
1937 IN ULONG MethodSetsCount,
1938 IN const KSMETHOD_SET* MethodSet);
1939 #endif
1940
1941 /* ===============================================================
1942 Property Functions
1943 */
1944 #if defined(_NTDDK_)
1945 KSDDKAPI NTSTATUS NTAPI
1946 KsPropertyHandler(
1947 IN PIRP Irp,
1948 IN ULONG PropertySetsCount,
1949 IN const KSPROPERTY_SET* PropertySet);
1950
1951 KSDDKAPI NTSTATUS NTAPI
1952 KsPropertyHandlerWithAllocator(
1953 IN PIRP Irp,
1954 IN ULONG PropertySetsCount,
1955 IN PKSPROPERTY_SET PropertySet,
1956 IN PFNKSALLOCATOR Allocator OPTIONAL,
1957 IN ULONG PropertyItemSize OPTIONAL);
1958
1959 KSDDKAPI NTSTATUS NTAPI
1960 KsUnserializeObjectPropertiesFromRegistry(
1961 IN PFILE_OBJECT FileObject,
1962 IN HANDLE ParentKey OPTIONAL,
1963 IN PUNICODE_STRING RegistryPath OPTIONAL);
1964
1965 KSDDKAPI BOOLEAN NTAPI
1966 KsFastPropertyHandler(
1967 IN PFILE_OBJECT FileObject,
1968 IN PKSPROPERTY UNALIGNED Property,
1969 IN ULONG PropertyLength,
1970 IN OUT PVOID UNALIGNED Data,
1971 IN ULONG DataLength,
1972 OUT PIO_STATUS_BLOCK IoStatus,
1973 IN ULONG PropertySetsCount,
1974 IN const KSPROPERTY_SET* PropertySet);
1975 #endif
1976
1977 /* ===============================================================
1978 Event Functions
1979 */
1980 #if defined(_NTDDK_)
1981 KSDDKAPI NTSTATUS NTAPI
1982 KsGenerateEvent(
1983 IN PKSEVENT_ENTRY EntryEvent);
1984
1985 KSDDKAPI NTSTATUS NTAPI
1986 KsEnableEventWithAllocator(
1987 IN PIRP Irp,
1988 IN ULONG EventSetsCount,
1989 IN PKSEVENT_SET EventSet,
1990 IN OUT PLIST_ENTRY EventsList OPTIONAL,
1991 IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL,
1992 IN PVOID EventsLock OPTIONAL,
1993 IN PFNKSALLOCATOR Allocator OPTIONAL,
1994 IN ULONG EventItemSize OPTIONAL);
1995
1996 KSDDKAPI NTSTATUS NTAPI
1997 KsGenerateDataEvent(
1998 IN PKSEVENT_ENTRY EventEntry,
1999 IN ULONG DataSize,
2000 IN PVOID Data);
2001
2002 KSDDKAPI NTSTATUS NTAPI
2003 KsEnableEvent(
2004 IN PIRP Irp,
2005 IN ULONG EventSetsCount,
2006 IN KSEVENT_SET* EventSet,
2007 IN OUT PLIST_ENTRY EventsList OPTIONAL,
2008 IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL,
2009 IN PVOID EventsLock OPTIONAL);
2010
2011 KSDDKAPI VOID NTAPI
2012 KsDiscardEvent(
2013 IN PKSEVENT_ENTRY EventEntry);
2014
2015 KSDDKAPI NTSTATUS NTAPI
2016 KsDisableEvent(
2017 IN PIRP Irp,
2018 IN OUT PLIST_ENTRY EventsList,
2019 IN KSEVENTS_LOCKTYPE EventsFlags,
2020 IN PVOID EventsLock);
2021
2022 KSDDKAPI VOID NTAPI
2023 KsFreeEventList(
2024 IN PFILE_OBJECT FileObject,
2025 IN OUT PLIST_ENTRY EventsList,
2026 IN KSEVENTS_LOCKTYPE EVentsFlags,
2027 IN PVOID EventsLock);
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 BOOLEAN 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 KSDDKAPI NTSTATUS NTAPI
2365 KsDefaultForwardIrp(
2366 IN PDEVICE_OBJECT DeviceObject,
2367 IN PIRP Irp);
2368
2369 /* ===============================================================
2370 Worker Management Functions
2371 */
2372
2373 KSDDKAPI NTSTATUS NTAPI
2374 KsRegisterWorker(
2375 IN WORK_QUEUE_TYPE WorkQueueType,
2376 OUT PKSWORKER* Worker);
2377
2378 KSDDKAPI VOID NTAPI
2379 KsUnregisterWorker(
2380 IN PKSWORKER Worker);
2381
2382 KSDDKAPI NTSTATUS NTAPI
2383 KsRegisterCountedWorker(
2384 IN WORK_QUEUE_TYPE WorkQueueType,
2385 IN PWORK_QUEUE_ITEM CountedWorkItem,
2386 OUT PKSWORKER* Worker);
2387
2388 KSDDKAPI ULONG NTAPI
2389 KsDecrementCountedWorker(
2390 IN PKSWORKER Worker);
2391
2392 KSDDKAPI ULONG NTAPI
2393 KsIncrementCountedWorker(
2394 IN PKSWORKER Worker);
2395
2396 KSDDKAPI NTSTATUS NTAPI
2397 KsQueueWorkItem(
2398 IN PKSWORKER Worker,
2399 IN PWORK_QUEUE_ITEM WorkItem);
2400
2401
2402 /* ===============================================================
2403 Resources / Images
2404 */
2405
2406 KSDDKAPI NTSTATUS NTAPI
2407 KsLoadResource(
2408 IN PVOID ImageBase,
2409 IN POOL_TYPE PoolType,
2410 IN ULONG_PTR ResourceName,
2411 IN ULONG ResourceType,
2412 OUT PVOID* Resource,
2413 OUT PULONG ResourceSize);
2414
2415 /* TODO: Implement
2416 KSDDKAPI NTSTATUS NTAPI
2417 KsGetImageNameAndResourceId(
2418 IN HANDLE RegKey,
2419 OUT PUNICODE_STRING ImageName,
2420 OUT PULONG_PTR ResourceId,
2421 OUT PULONG ValueType);
2422
2423 KSDDKAPI NTSTATUS NTAPI
2424 KsMapModuleName(
2425 IN PDEVICE_OBJECT PhysicalDeviceObject,
2426 IN PUNICODE_STRING ModuleName,
2427 OUT PUNICODE_STRING ImageName,
2428 OUT PULONG_PTR ResourceId,
2429 OUT PULONG ValueType);
2430 */
2431
2432
2433 /* ===============================================================
2434 Misc. Helper Functions
2435 */
2436
2437 KSDDKAPI NTSTATUS NTAPI
2438 KsCacheMedium(
2439 IN PUNICODE_STRING SymbolicLink,
2440 IN PKSPIN_MEDIUM Medium,
2441 IN ULONG PinDirection);
2442
2443 KSDDKAPI NTSTATUS NTAPI
2444 KsDefaultDispatchPnp(
2445 IN PDEVICE_OBJECT DeviceObject,
2446 IN PIRP Irp);
2447
2448 KSDDKAPI VOID NTAPI
2449 KsSetDevicePnpAndBaseObject(
2450 IN KSDEVICE_HEADER Header,
2451 IN PDEVICE_OBJECT PnpDeviceObject,
2452 IN PDEVICE_OBJECT BaseDevice);
2453
2454 KSDDKAPI NTSTATUS NTAPI
2455 KsDefaultDispatchPower(
2456 IN PDEVICE_OBJECT DeviceObject,
2457 IN PIRP Irp);
2458
2459 KSDDKAPI VOID NTAPI
2460 KsSetPowerDispatch(
2461 IN KSOBJECT_HEADER Header,
2462 IN PFNKSCONTEXT_DISPATCH PowerDispatch OPTIONAL,
2463 IN PVOID PowerContext OPTIONAL);
2464
2465 KSDDKAPI NTSTATUS NTAPI
2466 KsReferenceBusObject(
2467 IN KSDEVICE_HEADER Header);
2468
2469 KSDDKAPI VOID NTAPI
2470 KsDereferenceBusObject(
2471 IN KSDEVICE_HEADER Header);
2472
2473 KSDDKAPI NTSTATUS NTAPI
2474 KsFreeObjectCreateItem(
2475 IN KSDEVICE_HEADER Header,
2476 IN PUNICODE_STRING CreateItem);
2477
2478 KSDDKAPI NTSTATUS NTAPI
2479 KsFreeObjectCreateItemsByContext(
2480 IN KSDEVICE_HEADER Header,
2481 IN PVOID Context);
2482
2483 VOID
2484 KsNullDriverUnload(
2485 IN PDRIVER_OBJECT DriverObject);
2486
2487 KSDDKAPI PDEVICE_OBJECT NTAPI
2488 KsQueryDevicePnpObject(
2489 IN KSDEVICE_HEADER Header);
2490
2491 KSDDKAPI VOID NTAPI
2492 KsRecalculateStackDepth(
2493 IN KSDEVICE_HEADER Header,
2494 IN BOOLEAN ReuseStackLocation);
2495
2496 KSDDKAPI VOID NTAPI
2497 KsSetTargetDeviceObject(
2498 IN KSOBJECT_HEADER Header,
2499 IN PDEVICE_OBJECT TargetDevice OPTIONAL);
2500
2501 KSDDKAPI VOID NTAPI
2502 KsSetTargetState(
2503 IN KSOBJECT_HEADER Header,
2504 IN KSTARGET_STATE TargetState);
2505
2506 KSDDKAPI NTSTATUS NTAPI
2507 KsSynchronousIoControlDevice(
2508 IN PFILE_OBJECT FileObject,
2509 IN KPROCESSOR_MODE RequestorMode,
2510 IN ULONG IoControl,
2511 IN PVOID InBuffer,
2512 IN ULONG InSize,
2513 OUT PVOID OutBuffer,
2514 IN ULONG OUtSize,
2515 OUT PULONG BytesReturned);
2516
2517 #endif
2518
2519 /* ===============================================================
2520 AVStream Functions (XP / DirectX 8)
2521 NOT IMPLEMENTED YET
2522 http://www.osronline.com/ddkx/stream/avstream_5q9f.htm
2523 */
2524
2525 #if defined(_NTDDK_)
2526 KSDDKAPI NTSTATUS NTAPI
2527 KsInitializeDriver(
2528 IN PDRIVER_OBJECT DriverObject,
2529 IN PUNICODE_STRING RegistryPath,
2530 IN const KSDEVICE_DESCRIPTOR *Descriptor OPTIONAL);
2531 #endif
2532
2533 #if 0
2534 typedef void (*PFNKSFILTERFACTORYPOWER)(
2535 IN PKSFILTERFACTORY FilterFactory,
2536 IN DEVICE_POWER_STATE State);
2537
2538 KSDDKAPI NTSTATUS NTAPI
2539 _KsEdit(
2540 IN KSOBJECT_BAG ObjectBag,
2541 IN OUT PVOID* PointerToPointerToItem,
2542 IN ULONG NewSize,
2543 IN ULONG OldSize,
2544 IN ULONG Tag);
2545
2546 VOID
2547 KsAcquireControl(
2548 IN PVOID Object)
2549 {
2550 }
2551
2552 VOID
2553 KsAcquireDevice(
2554 IN PKSDEVICE Device)
2555 {
2556 }
2557
2558 NTSTATUS
2559 KsAddDevice(
2560 IN PDRIVER_OBJECT DriverObject,
2561 IN PDEVICE_OBJECT PhysicalDeviceObject)
2562 {
2563 }
2564
2565 VOID
2566 KsAddEvent(
2567 IN PVOID Object,
2568 IN PKSEVENT_ENTRY EventEntry)
2569 {
2570 }
2571
2572 NTSTATUS
2573 KsAddItemToObjectBag(
2574 IN KSOBJECT_BAG ObjectBag,
2575 IN PVOID Item,
2576 IN PFNKSFREE Free OPTIONAL)
2577 {
2578 }
2579
2580 NTSTATUS
2581 KsAllocateObjectBag(
2582 IN PKSDEVICE Device,
2583 OUT KSOBJECT_BAG* ObjectBag)
2584 {
2585 }
2586
2587 VOID
2588 KsCompletePendingRequest(
2589 IN PIRP Irp)
2590 {
2591 }
2592
2593 NTSTATUS
2594 KsCopyObjectBagItems(
2595 IN KSOBJECT_BAG ObjectBagDestination,
2596 IN KSOBJECT_BAG ObjectBagSource)
2597 {
2598 }
2599
2600 NTSTATUS
2601 KsCreateDevice(
2602 IN PDRIVER_OBJECT DriverObject,
2603 IN PDEVICE_OBJECT PhysicalDeviceObject,
2604 IN const KSDEVICE_DESCRIPTOR* Descriptor OPTIONAL,
2605 IN ULONG ExtensionSize OPTIONAL,
2606 OUT PKSDEVICE* Device OPTIONAL)
2607 {
2608 }
2609
2610 NTSTATUS
2611 KsCreateFilterFactory(
2612 IN PDEVICE_OBJECT DeviceObject,
2613 IN const KSFILTER_DESCRIPTOR* Descriptor,
2614 IN PWCHAR RefString OPTIONAL,
2615 IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL,
2616 IN ULONG CreateItemFlags,
2617 IN PFNKSFILTERFACTORYPOWER SleepCallback OPTIONAL,
2618 IN PFNKSFILTERFACTORYPOWER WakeCallback OPTIONAL,
2619 OUT PKFSFILTERFACTORY FilterFactory OPTIONAL)
2620 {
2621 }
2622
2623 NTSTATUS
2624 KsDefaultAddEventHandler(
2625 IN PIRP Irp,
2626 IN PKSEVENTDATA EventData,
2627 IN OUT PKSEVENT_ENTRY EventEntry)
2628 {
2629 }
2630
2631 NTSTATUS
2632 KsDeleteFilterFactory(
2633 IN PKSFILTERFACTORY FilterFactory)
2634 {
2635 }
2636
2637 ULONG
2638 KsDeviceGetBusData(
2639 IN PKSDEVICE Device,
2640 IN ULONG DataType,
2641 IN PVOID Buffer,
2642 IN ULONG Offset,
2643 IN ULONG Length)
2644 {
2645 }
2646
2647 PKSFILTERFACTORY
2648 KsDeviceGetFirstChildFilterFactory(
2649 IN PKSDEVICE Device)
2650 {
2651 }
2652
2653 PUNKNOWN
2654 KsDeviceGetOuterUnknown(
2655 IN PKSDEVICE Device)
2656 {
2657 }
2658
2659 VOID
2660 KsDeviceRegisterAdapterObject(
2661 IN PKSDEVICE Device,
2662 IN PADAPTER_OBJECT AdapterObject,
2663 IN ULONG MaxMappingByteCount,
2664 IN ULONG MappingTableStride)
2665 {
2666 }
2667
2668 KSDDKAPI PUNKNOWN NTAPI
2669 KsDeviceRegisterAggregatedClientUnknown(
2670 IN PKSDEVICE Device,
2671 IN PUNKNOWN ClientUnknown);
2672
2673 ULONG
2674 KsDeviceSetBusData(
2675 IN PKSDEVICE Device,
2676 IN ULONG DataType,
2677 IN PVOID Buffer,
2678 IN ULONG Offset,
2679 IN ULONG Length)
2680 {
2681 }
2682
2683 #define KsDiscard(object, pointer) \
2684 KsRemoveItemFromObjectBag(object->Bag, pointer, TRUE)
2685
2686 VOID
2687 KsFilterAcquireControl(
2688 IN PKSFILTER Filter)
2689 {
2690 }
2691
2692 VOID
2693 KsFilterAcquireProcessingMutex(
2694 IN PKSFILTER Filter);
2695
2696 VOID
2697 KsFilterAddEvent(
2698 IN PKSFILTER Filter,
2699 IN PKSEVENT_ENTRY EventEntry)
2700 {
2701 }
2702
2703 KSDDKAPI NTSTATUS NTAPI
2704 KsFilterAddTopologyConnections(
2705 IN PKSFILTER Filter,
2706 IN ULONG NewConnectionsCount,
2707 IN const KSTOPOLOGY_CONNECTION* NewTopologyConnections);
2708
2709 VOID
2710 KsFilterAttemptProcessing(
2711 IN PKSFILTER Filter,
2712 IN BOOLEAN Asynchronous);
2713
2714 KSDDKAPI NTSTATUS NTAPI
2715 KsFilterCreateNode(
2716 IN PKSFILTER Filter,
2717 IN const KSNODE_DESCRIPTOR* NodeDescriptor,
2718 OUT PULONG NodeID);
2719
2720 KSDDKAPI NTSTATUS NTAPI
2721 KsFilterCreatePinFactory(
2722 IN PKSFILTER Filter,
2723 IN const KSPIN_DESCRIPTOR_EX* PinDescriptor,
2724 OUT PULONG PinID);
2725
2726 PKSDEVICE __inline
2727 KsFilterFactoryGetDevice(
2728 IN PKSFILTERFACTORY FilterFactory);
2729
2730 /* etc. */
2731 #endif /* avstream */
2732
2733 #ifdef __cplusplus
2734 }
2735 #endif
2736
2737 #endif