Fix compilation of drmk.sys
[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_
31 #define _KS_
32
33 #ifdef __cplusplus
34 extern "C" {
35 #endif
36
37 #ifdef BUILDING_KS
38 #define KSDDKAPI
39 #else
40 #define KSDDKAPI //DECLSPEC_IMPORT /* TODO */
41 #endif
42
43
44
45
46 #define KSSTRING_Filter L"{9B365890-165F-11D0-A195-0020AFD156E4}"
47 #define KSSTRING_Pin L"{146F1A80-4791-11D0-A5D6-28DB04C10000}"
48 #define KSSTRING_Clock L"{53172480-4791-11D0-A5D6-28DB04C10000}"
49 #define KSSTRING_Allocator L"{642F5D00-4791-11D0-A5D6-28DB04C10000}"
50 #define KSSTRING_AllocatorEx L"{091BB63B-603F-11D1-B067-00A0C9062802}"
51 #define KSSTRING_TopologyNode L"{0621061A-EE75-11D0-B915-00A0C9223196}"
52
53 #define KSDATAFORMAT_BIT_ATTRIBUTES 1
54 #define KSDATAFORMAT_ATTRIBUTES (1 << KSDATAFORMAT_BIT_ATTRIBUTES)
55
56 #if defined(_NTDDK_)
57 typedef PVOID PKSWORKER;
58 #endif
59
60 #ifndef SIZEOF_ARRAY
61 #define SIZEOF_ARRAY(a) (sizeof(a)/sizeof((a)[0]))
62 #endif
63
64 /* ===============================================================
65 GUID definition helpers
66 */
67
68 #ifndef _NTRTL_
69 #ifndef DEFINE_GUIDEX
70 #ifdef _MSC_VER
71 #define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name
72 #else
73 #define DEFINE_GUIDEX(name) EXTERN_C const GUID name
74 #endif
75 #endif
76
77 #ifndef STATICGUIDOF
78 #define STATICGUIDOF(guid) STATIC_##guid
79 #endif
80 #endif
81
82 #if defined(__cplusplus) && _MSC_VER >= 1100
83 #define DEFINE_GUIDSTRUCT(guid, name) struct __declspec(uuid(guid)) name
84 #define DEFINE_GUIDNAMED(name) __uidof(struct name)
85 #else
86 #define DEFINE_GUIDSTRUCT(guid, name) DEFINE_GUIDEX(name)
87 #define DEFINE_GUIDNAMED(name) name
88 #endif
89
90
91 #define STATIC_GUID_NULL \
92 0x00000000L, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
93 DEFINE_GUIDSTRUCT("00000000-0000-0000-0000-000000000000", GUID_NULL);
94 #define GUID_NULL DEFINE_GUIDNAMED(GUID_NULL)
95
96
97 /* ===============================================================
98 I/O Control Codes
99 */
100
101 #define IOCTL_KS_DISABLE_EVENT \
102 CTL_CODE( \
103 FILE_DEVICE_KS, \
104 0x000, \
105 METHOD_NEITHER, \
106 FILE_ANY_ACCESS)
107
108 #define IOCTL_KS_ENABLE_EVENT \
109 CTL_CODE( \
110 FILE_DEVICE_KS, \
111 0x001, \
112 METHOD_NEITHER, \
113 FILE_ANY_ACCESS)
114
115 // WAS 2
116 #define IOCTL_KS_METHOD \
117 CTL_CODE( \
118 FILE_DEVICE_KS, \
119 0x003, \
120 METHOD_NEITHER, \
121 FILE_ANY_ACCESS)
122
123 // WAS 3
124 #define IOCTL_KS_PROPERTY \
125 CTL_CODE( \
126 FILE_DEVICE_KS, \
127 0x000, \
128 METHOD_NEITHER, \
129 FILE_ANY_ACCESS)
130
131 #define IOCTL_KS_WRITE_STREAM \
132 CTL_CODE( \
133 FILE_DEVICE_KS, \
134 0x004, \
135 METHOD_NEITHER, \
136 FILE_WRITE_ACCESS)
137
138 #define IOCTL_KS_READ_STREAM \
139 CTL_CODE( \
140 FILE_DEVICE_KS, \
141 0x005, \
142 METHOD_NEITHER, \
143 FILE_READ_ACCESS)
144
145 #define IOCTL_KS_RESET_STATE \
146 CTL_CODE( \
147 FILE_DEVICE_KS, \
148 0x006, \
149 METHOD_NEITHER, \
150 FILE_ANY_ACCESS)
151
152
153 /* ===============================================================
154 Categories
155 */
156
157 #define STATIC_KSCATEGORY_BRIDGE \
158 0x085AFF00L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
159 DEFINE_GUIDSTRUCT("085AFF00-62CE-11CF-A5D6-28DB04C10000", KSCATEGORY_BRIDGE);
160 #define KSCATEGORY_BRIDGE DEFINE_GUIDNAMED(KSCATEGORY_BRIDGE)
161
162 #define STATIC_KSCATEGORY_CAPTURE \
163 0x65E8773DL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
164 DEFINE_GUIDSTRUCT("65E8773D-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_CAPTURE);
165 #define KSCATEGORY_CAPTURE DEFINE_GUIDNAMED(KSCATEGORY_CAPTURE)
166
167 #define STATIC_KSCATEGORY_RENDER \
168 0x65E8773EL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
169 DEFINE_GUIDSTRUCT("65E8773E-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_RENDER);
170 #define KSCATEGORY_RENDER DEFINE_GUIDNAMED(KSCATEGORY_RENDER)
171
172 #define STATIC_KSCATEGORY_MIXER \
173 0xAD809C00L, 0x7B88, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
174 DEFINE_GUIDSTRUCT("AD809C00-7B88-11D0-A5D6-28DB04C10000", KSCATEGORY_MIXER);
175 #define KSCATEGORY_MIXER DEFINE_GUIDNAMED(KSCATEGORY_MIXER)
176
177 #define STATIC_KSCATEGORY_SPLITTER \
178 0x0A4252A0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
179 DEFINE_GUIDSTRUCT("0A4252A0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_SPLITTER);
180 #define KSCATEGORY_SPLITTER DEFINE_GUIDNAMED(KSCATEGORY_SPLITTER)
181
182 #define STATIC_KSCATEGORY_DATACOMPRESSOR \
183 0x1E84C900L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
184 DEFINE_GUIDSTRUCT("1E84C900-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATACOMPRESSOR);
185 #define KSCATEGORY_DATACOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATACOMPRESSOR)
186
187 #define STATIC_KSCATEGORY_DATADECOMPRESSOR \
188 0x2721AE20L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
189 DEFINE_GUIDSTRUCT("2721AE20-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATADECOMPRESSOR);
190 #define KSCATEGORY_DATADECOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATADECOMPRESSOR)
191
192 #define STATIC_KSCATEGORY_DATATRANSFORM \
193 0x2EB07EA0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
194 DEFINE_GUIDSTRUCT("2EB07EA0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATATRANSFORM);
195 #define KSCATEGORY_DATATRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_DATATRANSFORM)
196
197 #define STATIC_KSCATEGORY_COMMUNICATIONSTRANSFORM \
198 0xCF1DDA2CL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
199 DEFINE_GUIDSTRUCT("CF1DDA2C-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_COMMUNICATIONSTRANSFORM);
200 #define KSCATEGORY_COMMUNICATIONSTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_COMMUNICATIONSTRANSFORM)
201
202 #define STATIC_KSCATEGORY_INTERFACETRANSFORM \
203 0xCF1DDA2DL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
204 DEFINE_GUIDSTRUCT("CF1DDA2D-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_INTERFACETRANSFORM);
205 #define KSCATEGORY_INTERFACETRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_INTERFACETRANSFORM)
206
207 #define STATIC_KSCATEGORY_MEDIUMTRANSFORM \
208 0xCF1DDA2EL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
209 DEFINE_GUIDSTRUCT("CF1DDA2E-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_MEDIUMTRANSFORM);
210 #define KSCATEGORY_MEDIUMTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_MEDIUMTRANSFORM)
211
212 #define STATIC_KSCATEGORY_FILESYSTEM \
213 0x760FED5EL, 0x9357, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
214 DEFINE_GUIDSTRUCT("760FED5E-9357-11D0-A3CC-00A0C9223196", KSCATEGORY_FILESYSTEM);
215 #define KSCATEGORY_FILESYSTEM DEFINE_GUIDNAMED(KSCATEGORY_FILESYSTEM)
216
217 #define STATIC_KSCATEGORY_CLOCK \
218 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
219 DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000", KSCATEGORY_CLOCK);
220 #define KSCATEGORY_CLOCK DEFINE_GUIDNAMED(KSCATEGORY_CLOCK)
221
222 #define STATIC_KSCATEGORY_PROXY \
223 0x97EBAACAL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
224 DEFINE_GUIDSTRUCT("97EBAACA-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_PROXY);
225 #define KSCATEGORY_PROXY DEFINE_GUIDNAMED(KSCATEGORY_PROXY)
226
227 #define STATIC_KSCATEGORY_QUALITY \
228 0x97EBAACBL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
229 DEFINE_GUIDSTRUCT("97EBAACB-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_QUALITY);
230 #define KSCATEGORY_QUALITY DEFINE_GUIDNAMED(KSCATEGORY_QUALITY)
231
232 /* ===============================================================
233 Common
234 */
235
236 typedef struct
237 {
238 GUID Set;
239 ULONG Id;
240 ULONG Flags;
241 } KSIDENTIFIER, *PKSIDENTIFIER;
242
243 typedef KSIDENTIFIER KSPROPERTY, *PKSPROPERTY;
244 typedef KSIDENTIFIER KSMETHOD, *PKSMETHOD;
245 typedef KSIDENTIFIER KSEVENT, *PKSEVENT;
246
247 typedef KSIDENTIFIER KSDEGRADE, *PKSDEGRADE;
248
249 typedef KSIDENTIFIER KSPIN_INTERFACE, *PKSPIN_INTERFACE;
250 typedef KSIDENTIFIER KSPIN_MEDIUM, *PKSPIN_MEDIUM;
251
252 typedef union {
253 struct {
254 ULONG FormatSize;
255 ULONG Flags;
256 ULONG SampleSize;
257 ULONG Reserved;
258 GUID MajorFormat;
259 GUID SubFormat;
260 GUID Specifier;
261 };
262 LONGLONG Alignment;
263 } KSDATAFORMAT, *PKSDATAFORMAT, KSDATARANGE, *PKSDATARANGE;
264
265
266 typedef struct
267 {
268 ULONG Size;
269 ULONG Flags;
270 GUID Attribute;
271 } KSATTRIBUTE, *PKSATTRIBUTE;
272
273
274
275 /* ===============================================================
276 Interface Sets - TODO
277 */
278
279 #if 0
280 #define KSINTERFACESETID_Media
281
282 #define KSINTERFACESETID_Standard
283 #define KSINTERFACE_STANDARD_STREAMING
284 #define KSINTERFACE_STANDARD_LOOPED_STREAMING
285 #define KSINTERFACE_STANDARD_CONTROL
286 #endif
287
288 #define STATIC_KSINTERFACESETID_Standard \
289 0x1A8766A0L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
290 DEFINE_GUIDSTRUCT("1A8766A0-62CE-11CF-A5D6-28DB04C10000", KSINTERFACESETID_Standard);
291 #define KSINTERFACESETID_Standard DEFINE_GUIDNAMED(KSINTERFACESETID_Standard)
292
293 typedef enum
294 {
295 KSINTERFACE_STANDARD_STREAMING,
296 KSINTERFACE_STANDARD_LOOPED_STREAMING,
297 KSINTERFACE_STANDARD_CONTROL
298 } KSINTERFACE_STANDARD;
299
300 #define STATIC_KSINTERFACESETID_FileIo \
301 0x8C6F932CL, 0xE771, 0x11D0, 0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
302 DEFINE_GUIDSTRUCT("8C6F932C-E771-11D0-B8FF-00A0C9223196", KSINTERFACESETID_FileIo);
303 #define KSINTERFACESETID_FileIo DEFINE_GUIDNAMED(KSINTERFACESETID_FileIo)
304
305
306 /* ===============================================================
307 Mediums
308 */
309
310 typedef enum
311 {
312 KSINTERFACE_FILEIO_STREAMING
313 } KSINTERFACE_FILEIO;
314
315 #define KSMEDIUM_TYPE_ANYINSTANCE 0
316
317 #define STATIC_KSMEDIUMSETID_Standard \
318 0x4747B320L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
319 DEFINE_GUIDSTRUCT("4747B320-62CE-11CF-A5D6-28DB04C10000", KSMEDIUMSETID_Standard);
320 #define KSMEDIUMSETID_Standard DEFINE_GUIDNAMED(KSMEDIUMSETID_Standard)
321
322
323 /* ===============================================================
324 Clock Properties/Methods/Events
325 */
326
327 #define KSPROPSETID_Clock \
328 0xDF12A4C0L, 0xAC17, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
329
330 typedef enum
331 {
332 KSPROPERTY_CLOCK_TIME,
333 KSPROPERTY_CLOCK_PHYSICALTIME,
334 KSPROPERTY_CORRELATEDTIME,
335 KSPROPERTY_CORRELATEDPHYSICALTIME,
336 KSPROPERTY_CLOCK_RESOLUTION,
337 KSPROPERTY_CLOCK_STATE,
338 KSPROPERTY_CLOCK_FUNCTIONTABLE
339 } KSPROPERTY_CLOCK;
340
341 #define KSEVENTSETID_Clock \
342 0x364D8E20L, 0x62C7, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
343
344 typedef enum
345 {
346 KSEVENT_CLOCK_INTERVAL_MARK,
347 KSEVENT_CLOCK_POSITION_MARK
348 } KSEVENT_CLOCK_POSITION;
349
350
351 /* ===============================================================
352 Connection Properties/Methods/Events
353 */
354
355 #define STATIC_KSPROPSETID_Connection \
356 0x1D58C920L, 0xAC9B, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
357 DEFINE_GUIDSTRUCT("1D58C920-AC9B-11CF-A5D6-28DB04C10000", KSPROPSETID_Connection);
358 #define KSPROPSETID_Connection DEFINE_GUIDNAMED(KSPROPSETID_Connection)
359
360
361 typedef enum
362 {
363 KSPROPERTY_CONNECTION_STATE,
364 KSPROPERTY_CONNECTION_PRIORITY,
365 KSPROPERTY_CONNECTION_DATAFORMAT,
366 KSPROPERTY_CONNECTION_ALLOCATORFRAMING,
367 KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT,
368 KSPROPERTY_CONNECTION_ACQUIREORDERING,
369 KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,
370 KSPROPERTY_CONNECTION_STARTAT
371 } KSPROPERTY_CONNECTION;
372
373 #define KSEVENTSETID_Connection \
374 0x7f4bcbe0L, 0x9ea5, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00
375
376 typedef enum
377 {
378 KSEVENT_CONNECTION_POSITIONUPDATE,
379 KSEVENT_CONNECTION_DATADISCONTINUITY,
380 KSEVENT_CONNECTION_TIMEDISCONTINUITY,
381 KSEVENT_CONNECTION_PRIORITY,
382 KSEVENT_CONNECTION_ENDOFSTREAM
383 } KSEVENT_CONNECTION;
384
385
386 /* ===============================================================
387 General
388 Properties/Methods/Events
389 */
390
391 #define STATIC_KSPROPSETID_General\
392 0x1464EDA5L, 0x6A8F, 0x11D1, {0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
393 DEFINE_GUIDSTRUCT("1464EDA5-6A8F-11D1-9AA7-00A0C9223196", KSPROPSETID_General);
394 #define KSPROPSETID_General DEFINE_GUIDNAMED(KSPROPSETID_General)
395
396
397 typedef enum
398 {
399 KSPROPERTY_GENERAL_COMPONENTID
400 } KSPROPERTY_GENERAL;
401
402
403 /* ===============================================================
404 Graph Manager
405 Properties/Methods/Events
406 */
407
408 #define KSPROPSETID_GM \
409 0xAF627536L, 0xE719, 0x11D2, 0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D
410
411 typedef enum
412 {
413 KSPROPERTY_GM_GRAPHMANAGER,
414 KSPROPERTY_GM_TIMESTAMP_CLOCK,
415 KSPROPERTY_GM_RATEMATCH,
416 KSPROPERTY_GM_RENDERCLOCK
417 } KSPROPERTY_GM;
418
419
420 /* ===============================================================
421 Media Seeking
422 Properties/Methods/Events
423 */
424
425 #define KSPROPSETID_MediaSeeking \
426 0xEE904F0CL, 0xD09B, 0x11D0, 0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
427
428 typedef enum
429 {
430 KSPROPERTY_MEDIASEEKING_CAPABILITIES,
431 KSPROPERTY_MEDIASEEKING_FORMATS,
432 KSPROPERTY_MEDIASEEKING_TIMEFORMAT,
433 KSPROPERTY_MEDIASEEKING_POSITION,
434 KSPROPERTY_MEDIASEEKING_STOPPOSITION,
435 KSPROPERTY_MEDIASEEKING_POSITIONS,
436 KSPROPERTY_MEDIASEEKING_DURATION,
437 KSPROPERTY_MEDIASEEKING_AVAILABLE,
438 KSPROPERTY_MEDIASEEKING_PREROLL,
439 KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT
440 } KSPROPERTY_MEDIASEEKING;
441
442
443 /* ===============================================================
444 Pin
445 Properties/Methods/Events
446 */
447
448 #define STATIC_KSPROPSETID_Pin\
449 0x8C134960L, 0x51AD, 0x11CF, 0x87, 0x8A, 0x94, 0xF8, 0x01, 0xC1, 0x00, 0x00
450 DEFINE_GUIDSTRUCT("8C134960-51AD-11CF-878A-94F801C10000", KSPROPSETID_Pin);
451 #define KSPROPSETID_Pin DEFINE_GUIDNAMED(KSPROPSETID_Pin)
452
453 #define STATIC_KSNAME_Pin\
454 0x146F1A80L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
455 DEFINE_GUIDSTRUCT("146F1A80-4791-11D0-A5D6-28DB04C10000", KSNAME_Pin);
456 #define KSNAME_Pin DEFINE_GUIDNAMED(KSNAME_Pin)
457
458
459 typedef enum
460 {
461 KSPROPERTY_PIN_CINSTANCES,
462 KSPROPERTY_PIN_CTYPES,
463 KSPROPERTY_PIN_DATAFLOW,
464 KSPROPERTY_PIN_DATARANGES,
465 KSPROPERTY_PIN_DATAINTERSECTION,
466 KSPROPERTY_PIN_INTERFACES,
467 KSPROPERTY_PIN_MEDIUMS,
468 KSPROPERTY_PIN_COMMUNICATION,
469 KSPROPERTY_PIN_GLOBALCINSTANCES,
470 KSPROPERTY_PIN_NECESSARYINSTANCES,
471 KSPROPERTY_PIN_PHYSICALCONNECTION,
472 KSPROPERTY_PIN_CATEGORY,
473 KSPROPERTY_PIN_NAME,
474 KSPROPERTY_PIN_CONSTRAINEDDATARANGES,
475 KSPROPERTY_PIN_PROPOSEDATAFORMAT
476 } KSPROPERTY_PIN;
477
478 typedef struct
479 {
480 KSPROPERTY Property;
481 ULONG PinId;
482 ULONG Reserved;
483 } KSP_PIN, *PKSP_PIN;
484
485 #define KSINSTANCE_INDETERMINATE ((ULONG)-1)
486
487 typedef struct
488 {
489 ULONG PossibleCount;
490 ULONG CurrentCount;
491 } KSPIN_CINSTANCES, *PKSPIN_CINSTANCES;
492
493 typedef struct
494 {
495 ULONG Size;
496 ULONG Pin;
497 WCHAR SymbolicLinkName[1];
498 } KSPIN_PHYSICALCONNECTION, *PKSPIN_PHYSICALCONNECTION;
499
500
501 /* ===============================================================
502 Quality
503 Properties/Methods/Events
504 */
505
506 #define KSPROPSETID_Quality \
507 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
508
509 typedef enum
510 {
511 KSPROPERTY_QUALITY_REPORT,
512 KSPROPERTY_QUALITY_ERROR
513 } KSPROPERTY_QUALITY;
514
515
516 /* ===============================================================
517 Stream
518 Properties/Methods/Events
519 */
520
521 #define KSPROPSETID_Stream \
522 0x65aaba60L, 0x98ae, 0x11cf, 0xa1, 0x0d, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
523
524 typedef enum
525 {
526 KSPROPERTY_STREAM_ALLOCATOR,
527 KSPROPERTY_STREAM_QUALITY,
528 KSPROPERTY_STREAM_DEGRADATION,
529 KSPROPERTY_STREAM_MASTERCLOCK,
530 KSPROPERTY_STREAM_TIMEFORMAT,
531 KSPROPERTY_STREAM_PRESENTATIONTIME,
532 KSPROPERTY_STREAM_PRESENTATIONEXTENT,
533 KSPROPERTY_STREAM_FRAMETIME,
534 KSPROPERTY_STREAM_RATECAPABILITY,
535 KSPROPERTY_STREAM_RATE,
536 KSPROPERTY_STREAM_PIPE_ID
537 } KSPROPERTY_STREAM;
538
539
540 /* ===============================================================
541 StreamAllocator
542 Properties/Methods/Events
543 */
544
545 #define STATIC_KSPROPSETID_StreamAllocator\
546 0xcf6e4342L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
547 DEFINE_GUIDSTRUCT("cf6e4342-ec87-11cf-a130-0020afd156e4", KSPROPSETID_StreamAllocator);
548 #define KSPROPSETID_StreamAllocator DEFINE_GUIDNAMED(KSPROPSETID_StreamAllocator)
549
550 typedef enum
551 {
552 KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE,
553 KSPROPERTY_STREAMALLOCATOR_STATUS
554 } KSPROPERTY_STREAMALLOCATOR;
555
556 #define KSMETHODSETID_StreamAllocator \
557 0xcf6e4341L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
558
559 typedef enum
560 {
561 KSMETHOD_STREAMALLOCATOR_ALLOC,
562 KSMETHOD_STREAMALLOCATOR_FREE
563 } KSMETHOD_STREAMALLOCATOR;
564
565
566 #define KSEVENTSETID_StreamAllocator
567
568 typedef enum
569 {
570 KSEVENT_STREAMALLOCATOR_INTERNAL_FREEFRAME,
571 KSEVENT_STREAMALLOCATOR_FREEFRAME
572 } KSEVENT_STREAMALLOCATOR;
573
574
575 /* ===============================================================
576 StreamInterface
577 Properties/Methods/Events
578 */
579
580 #define KSPROPSETID_StreamInterface \
581 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
582
583 typedef enum
584 {
585 KSPROPERTY_STREAMINTERFACE_HEADERSIZE
586 } KSPROPERTY_STREAMINTERFACE;
587
588
589 /* ===============================================================
590 Topology
591 Properties/Methods/Events
592 */
593
594 #define STATIC_KSPROPSETID_Topology\
595 0x720D4AC0L, 0x7533, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
596 DEFINE_GUIDSTRUCT("720D4AC0-7533-11D0-A5D6-28DB04C10000", KSPROPSETID_Topology);
597 #define KSPROPSETID_Topology DEFINE_GUIDNAMED(KSPROPSETID_Topology)
598
599 typedef enum
600 {
601 KSPROPERTY_TOPOLOGY_CATEGORIES,
602 KSPROPERTY_TOPOLOGY_CONNECTIONS,
603 KSPROPERTY_TOPOLOGY_NAME,
604 KSPROPERTY_TOPOLOGY_NODES
605 } KSPROPERTY_TOPOLOGY;
606
607
608
609 /* ===============================================================
610 Property Sets for audio drivers - TODO
611 */
612
613 #define STATIC_KSPROPTYPESETID_General \
614 0x97E99BA0L, 0xBDEA, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
615 DEFINE_GUIDSTRUCT("97E99BA0-BDEA-11CF-A5D6-28DB04C10000", KSPROPTYPESETID_General);
616 #define KSPROPTYPESETID_General DEFINE_GUIDNAMED(KSPROPTYPESETID_General)
617
618 /*
619 KSPROPERTY_AC3_ALTERNATE_AUDIO
620 KSPROPERTY_AC3_BIT_STREAM_MODE
621 KSPROPERTY_AC3_DIALOGUE_LEVEL
622 KSPROPERTY_AC3_DOWNMIX
623 KSPROPERTY_AC3_ERROR_CONCEALMENT
624 KSPROPERTY_AC3_LANGUAGE_CODE
625 KSPROPERTY_AC3_ROOM_TYPE
626 */
627
628 #define KSPROPSETID_Acoustic_Echo_Cancel
629 /*
630 KSPROPERTY_AEC_MODE
631 KSPROPERTY_AEC_NOISE_FILL_ENABLE
632 KSPROPERTY_AEC_STATUS
633 */
634
635 /*
636 KSPROPERTY_AUDIO_3D_INTERFACE
637 KSPROPERTY_AUDIO_AGC
638 KSPROPERTY_AUDIO_ALGORITHM_INSTANCE
639 KSPROPERTY_AUDIO_BASS
640 KSPROPERTY_AUDIO_BASS_BOOST
641 KSPROPERTY_AUDIO_CHANNEL_CONFIG
642 KSPROPERTY_AUDIO_CHORUS_LEVEL
643 KSPROPERTY_AUDIO_COPY_PROTECTION
644 KSPROPERTY_AUDIO_CPU_RESOURCES
645 KSPROPERTY_AUDIO_DELAY
646 KSPROPERTY_AUDIO_DEMUX_DEST
647 KSPROPERTY_AUDIO_DEV_SPECIFIC
648 KSPROPERTY_AUDIO_DYNAMIC_RANGE
649 KSPROPERTY_AUDIO_DYNAMIC_SAMPLING_RATE
650 KSPROPERTY_AUDIO_EQ_BANDS
651 KSPROPERTY_AUDIO_EQ_LEVEL
652 KSPROPERTY_AUDIO_FILTER_STATE
653 KSPROPERTY_AUDIO_LATENCY
654 KSPROPERTY_AUDIO_LOUDNESS
655 KSPROPERTY_AUDIO_MANUFACTURE_GUID
656 KSPROPERTY_AUDIO_MID
657 KSPROPERTY_AUDIO_MIX_LEVEL_CAPS
658 KSPROPERTY_AUDIO_MIX_LEVEL_TABLE
659 KSPROPERTY_AUDIO_MUTE
660 KSPROPERTY_AUDIO_MUX_SOURCE
661 KSPROPERTY_AUDIO_NUM_EQ_BANDS
662 KSPROPERTY_AUDIO_PEAKMETER
663 KSPROPERTY_AUDIO_POSITION
664 KSPROPERTY_AUDIO_PREFERRED_STATUS
665 KSPROPERTY_AUDIO_PRODUCT_GUID
666 KSPROPERTY_AUDIO_QUALITY
667 KSPROPERTY_AUDIO_REVERB_LEVEL
668 KSPROPERTY_AUDIO_SAMPLING_RATE
669 KSPROPERTY_AUDIO_STEREO_ENHANCE
670 KSPROPERTY_AUDIO_STEREO_SPEAKER_GEOMETRY
671 KSPROPERTY_AUDIO_SURROUND_ENCODE
672 KSPROPERTY_AUDIO_TREBLE
673 KSPROPERTY_AUDIO_VOLUMELEVEL
674 KSPROPERTY_AUDIO_WIDE_MODE
675 KSPROPERTY_AUDIO_WIDENESS
676 */
677
678 #define KSPROPSETID_AudioGfx
679 /*
680 KSPROPERTY_AUDIOGFX_CAPTURETARGETDEVICEID
681 KSPROPERTY_AUDIOGFX_RENDERTARGETDEVICEID
682 */
683
684 #define KSPROPSETID_DirectSound3DBuffer
685 /*
686 KSPROPERTY_DIRECTSOUND3DBUFFER_ALL
687 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEANGLES
688 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEORIENTATION
689 KSPROPERTY_DIRECTSOUND3DBUFFER_CONEOUTSIDEVOLUME
690 KSPROPERTY_DIRECTSOUND3DBUFFER_MAXDISTANCE
691 KSPROPERTY_DIRECTSOUND3DBUFFER_MINDISTANCE
692 KSPROPERTY_DIRECTSOUND3DBUFFER_MODE
693 KSPROPERTY_DIRECTSOUND3DBUFFER_POSITION
694 KSPROPERTY_DIRECTSOUND3DBUFFER_VELOCITY
695 */
696
697 #define KSPROPSETID_DirectSound3DListener
698 /*
699 KSPROPERTY_DIRECTSOUND3DLISTENER_ALL
700 KSPROPERTY_DIRECTSOUND3DLISTENER_ALLOCATION
701 KSPROPERTY_DIRECTSOUND3DLISTENER_BATCH
702 KSPROPERTY_DIRECTSOUND3DLISTENER_DISTANCEFACTOR
703 KSPROPERTY_DIRECTSOUND3DLISTENER_DOPPLERFACTOR
704 KSPROPERTY_DIRECTSOUND3DLISTENER_ORIENTATION
705 KSPROPERTY_DIRECTSOUND3DLISTENER_POSITION
706 KSPROPERTY_DIRECTSOUND3DLISTENER_ROLLOFFFACTOR
707 KSPROPERTY_DIRECTSOUND3DLISTENER_VELOCITY
708 */
709
710 #define KSPROPSETID_DrmAudioStream
711 /*
712 KSPROPERTY_DRMAUDIOSTREAM_CONTENTID
713 */
714
715 #define KSPROPSETID_Hrtf3d
716 /*
717 KSPROPERTY_HRTF3D_FILTER_FORMAT
718 KSPROPERTY_HRTF3D_INITIALIZE
719 KSPROPERTY_HRTF3D_PARAMS
720 */
721
722 #define KSPROPSETID_Itd3d
723 /*
724 KSPROPERTY_ITD3D_PARAMS
725 */
726
727 #define KSPROPSETID_Synth
728 /*
729 KSPROPERTY_SYNTH_CAPS
730 KSPROPERTY_SYNTH_CHANNELGROUPS
731 KSPROPERTY_SYNTH_LATENCYCLOCK
732 KSPROPERTY_SYNTH_MASTERCLOCK
733 KSPROPERTY_SYNTH_PORTPARAMETERS
734 KSPROPERTY_SYNTH_RUNNINGSTATS
735 KSPROPERTY_SYNTH_VOICEPRIORITY
736 KSPROPERTY_SYNTH_VOLUME
737 KSPROPERTY_SYNTH_VOLUMEBOOST
738 */
739
740 #define KSPROPSETID_Synth_Dls
741 /*
742 KSPROPERTY_SYNTH_DLS_APPEND
743 KSPROPERTY_SYNTH_DLS_COMPACT
744 KSPROPERTY_SYNTH_DLS_DOWNLOAD
745 KSPROPERTY_SYNTH_DLS_UNLOAD
746 KSPROPERTY_SYNTH_DLS_WAVEFORMAT
747 */
748
749 #define KSPROPSETID_TopologyNode
750 /*
751 KSPROPERTY_TOPOLOGYNODE_ENABLE
752 KSPROPERTY_TOPOLOGYNODE_RESET
753 */
754
755
756
757
758 /* ===============================================================
759 Event Sets for audio drivers - TODO
760 */
761 #define KSEVENTSETID_AudioControlChange
762 /*
763 KSEVENT_CONTROL_CHANGE
764 */
765
766
767
768 /* ===============================================================
769 Node Types
770 */
771 /*
772 KSNODETYPE_3D_EFFECTS
773 KSNODETYPE_ACOUSTIC_ECHO_CANCEL
774 KSNODETYPE_ADC
775 KSNODETYPE_AGC
776 KSNODETYPE_CHORUS
777 KSNODETYPE_DAC
778 KSNODETYPE_DELAY
779 KSNODETYPE_DEMUX
780 KSNODETYPE_DEV_SPECIFIC
781 KSNODETYPE_DMSYNTH
782 KSNODETYPE_DMSYNTH_CAPS
783 KSNODETYPE_DRM_DESCRAMBLE
784 KSNODETYPE_EQUALIZER
785 KSNODETYPE_LOUDNESS
786 KSNODETYPE_MUTE
787 KSNODETYPE_MUX
788 KSNODETYPE_PEAKMETER
789 KSNODETYPE_PROLOGIC_DECODER
790 KSNODETYPE_PROLOGIC_ENCODER
791 KSNODETYPE_REVERB
792 KSNODETYPE_SRC
793 KSNODETYPE_STEREO_ENHANCE
794 KSNODETYPE_STEREO_WIDE
795 KSNODETYPE_SUM
796 KSNODETYPE_SUPERMIX
797 KSNODETYPE_SWMIDI
798 KSNODETYPE_SWSYNTH
799 KSNODETYPE_SYNTHESIZER
800 KSNODETYPE_TONE
801 KSNODETYPE_VOLUME
802 */
803
804
805 typedef PVOID KSDEVICE_HEADER,
806 KSOBJECT_HEADER,
807 KSOBJECT_BAG;
808
809
810
811
812 /* ===============================================================
813 Method Types
814 */
815
816 #define KSMETHOD_TYPE_NONE 0x00000000
817 #define KSMETHOD_TYPE_READ 0x00000001
818 #define KSMETHOD_TYPE_WRITE 0x00000002
819 #define KSMETHOD_TYPE_MODIFY 0x00000003
820 #define KSMETHOD_TYPE_SOURCE 0x00000004
821 #define KSMETHOD_TYPE_SEND 0x00000001
822 #define KSMETHOD_TYPE_SETSUPPORT 0x00000100
823 #define KSMETHOD_TYPE_BASICSUPPORT 0x00000200
824
825
826 /* ===============================================================
827 Property Types
828 */
829
830 #define KSPROPERTY_TYPE_GET 0x00000001
831 #define KSPROPERTY_TYPE_SET 0x00000002
832 #define KSPROPERTY_TYPE_SETSUPPORT 0x00000100
833 #define KSPROPERTY_TYPE_BASICSUPPORT 0x00000200
834 #define KSPROPERTY_TYPE_RELATIONS 0x00000400
835 #define KSPROPERTY_TYPE_SERIALIZESET 0x00000800
836 #define KSPROPERTY_TYPE_UNSERIALIZESET 0x00001000
837 #define KSPROPERTY_TYPE_SERIALIZERAW 0x00002000
838 #define KSPROPERTY_TYPE_UNSERIALIZERAW 0x00004000
839 #define KSPROPERTY_TYPE_SERIALIZESIZE 0x00008000
840 #define KSPROPERTY_TYPE_DEFAULT_VALUES 0x00010000
841
842
843 /* ===============================================================
844 Topology Methods/Properties
845 */
846
847 #define KSMETHOD_TYPE_TOPOLOGY 0x10000000
848 #define KSPROPERTY_TYPE_TOPOLOGY 0x10000000
849
850 /*
851 #define DEFINE_KS_GUID(GA,GB,GC,GD,GE,GF,GG,GH,GI,GJ,GK) \
852 DEFINE_GUID(??, 0x#GA#L, 0xGB, 0xGC, 0xGD, 0xGE, 0xGF, 0xGG, 0xGH, 0xGI, 0xGJ, 0xGK) \
853 "GA-GB-GC-GDGE-GFGGGHGIGJGK"
854 */
855
856 /* ===============================================================
857 KS Category GUIDs
858
859 BRIDGE - 0x085AFF00L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
860 CAPTURE - 0x65E8773DL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
861 RENDER - 0x65E8773EL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
862 MIXER - 0xAD809C00L, 0x7B88, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
863 SPLITTER - 0x0A4252A0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
864 DATACOMPRESSOR - 0x1E84C900L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
865 DATADECOMPRESSOR - 0x2721AE20L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
866 DATATRANSFORM - 0x2EB07EA0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
867 COMMUNICATIONSTRANSFORM - 0xCF1DDA2CL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
868 INTERFACETRANSFORM - 0xCF1DDA2DL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
869 MEDIUMTRANSFORM - 0xCF1DDA2EL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
870 FILESYSTEM - 0x760FED5EL, 0x9357, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
871 CLOCK - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
872 PROXY - 0x97EBAACAL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
873 QUALITY - 0x97EBAACBL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
874 */
875
876 /* ===============================================================
877 KSNAME GUIDs (defined also as KSSTRING_Xxx L"{...}"
878
879 Filter - 0x9b365890L, 0x165f, 0x11d0, 0xa1, 0x95, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
880 Pin - 0x146F1A80L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
881 Clock - 0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
882 Allocator - 0x642F5D00L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
883 TopologyNode - 0x0621061AL, 0xEE75, 0x11D0, 0xB9, 0x15, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
884 */
885
886 /* ===============================================================
887 Interface GUIDs
888
889 Standard - 0x1A8766A0L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
890 FileIo - 0x8C6F932CL, 0xE771, 0x11D0, 0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
891 */
892
893 /* ===============================================================
894 Medium Type GUIDs
895
896 Standard - 0x4747B320L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
897 */
898
899 /* ===============================================================
900 Property Set GUIDs
901
902 General - 0x1464EDA5L, 0x6A8F, 0x11D1, 0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
903 StreamIo - 0x65D003CAL, 0x1523, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
904 MediaSeeking - 0xEE904F0CL, 0xD09B, 0x11D0, 0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
905 Topology - 0x720D4AC0L, 0x7533, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
906 GM - 0xAF627536L, 0xE719, 0x11D2, 0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D
907 Quality - 0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
908 Connection - 0x1D58C920L, 0xAC9B, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
909 */
910
911 /* ===============================================================
912 StreamAllocator Sets
913
914 Event set - 0x75d95571L, 0x073c, 0x11d0, 0xa1, 0x61, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
915 Method set - 0xcf6e4341L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
916 Property set - 0xcf6e4342L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
917 */
918
919 /* ===============================================================
920 StreamInterface Sets
921
922 Property set - 0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
923 */
924
925 /* ===============================================================
926 Clock Sets
927
928 Property set - 0xDF12A4C0L, 0xAC17, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
929 Event sets - 0x364D8E20L, 0x62C7, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
930 */
931
932 /* ===============================================================
933 Connection Sets
934
935 Event set - 0x7f4bcbe0L, 0x9ea5, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00
936 */
937
938 /* ===============================================================
939 Time Format GUIDs
940
941 KSTIME_FORMAT_NONE (null guid)
942 FRAME - 0x7b785570L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
943 BYTE - 0x7b785571L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
944 SAMPLE - 0x7b785572L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
945 FIELD - 0x7b785573L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
946 MEDIA_TIME - 0x7b785574L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
947 */
948
949 /* ===============================================================
950 Media Type GUIDs
951
952 NULL
953 Stream -
954 None -
955
956 TODO ...
957 */
958
959 #define STATIC_KSDATAFORMAT_SPECIFIER_NONE\
960 0x0F6417D6L, 0xC318, 0x11D0, 0xA4, 0x3F, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
961 DEFINE_GUIDSTRUCT("0F6417D6-C318-11D0-A43F-00A0C9223196", KSDATAFORMAT_SPECIFIER_NONE);
962 #define KSDATAFORMAT_SPECIFIER_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_NONE)
963
964
965 /* ===============================================================
966 KSMEMORY_TYPE_xxx
967
968 WILDCARD, DONT_CARE = NULL
969 SYSTEM - 0x091bb638L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
970 USER - 0x8cb0fc28L, 0x7893, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
971 KERNEL_PAGED - 0xd833f8f8L, 0x7894, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
972 KERNEL_NONPAGED - 0x4a6d5fc4L, 0x7895, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
973 DEVICE_UNKNOWN - 0x091bb639L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
974 */
975
976 /* ===============================================================
977 Enums
978 (values have been checked)
979 */
980
981 #ifndef _MSC_VER
982
983 #define DEFINE_KSPROPERTY_ITEM(PropertyId, GetHandler,\
984 MinProperty,\
985 MinData,\
986 SetHandler,\
987 Values, RelationsCount, Relations, SupportHandler,\
988 SerializedSize)\
989 {\
990 PropertyId, {(PFNKSHANDLER)GetHandler}, MinProperty, MinData,\
991 {(PFNKSHANDLER)SetHandler},\
992 (PKSPROPERTY_VALUES)Values, RelationsCount, (PKSPROPERTY)Relations,\
993 (PFNKSHANDLER)SupportHandler, (ULONG)SerializedSize\
994 }
995
996 #else
997
998 #define DEFINE_KSPROPERTY_ITEM(PropertyId, GetHandler,\
999 MinProperty,\
1000 MinData,\
1001 SetHandler,\
1002 Values, RelationsCount, Relations, SupportHandler,\
1003 SerializedSize)\
1004 {\
1005 PropertyId, (PFNKSHANDLER)GetHandler, MinProperty, MinData,\
1006 (PFNKSHANDLER)SetHandler,\
1007 (PKSPROPERTY_VALUES)Values, RelationsCount, (PKSPROPERTY)Relations,\
1008 (PFNKSHANDLER)SupportHandler, (ULONG)SerializedSize\
1009 }
1010
1011 #endif
1012
1013
1014 typedef enum
1015 {
1016 KsObjectTypeDevice,
1017 KsObjectTypeFilterFactory,
1018 KsObjectTypeFilter,
1019 KsObjectTypePin
1020 } KSOBJECTTYPE;
1021
1022 typedef enum
1023 {
1024 KSSTATE_STOP,
1025 KSSTATE_ACQUIRE,
1026 KSSTATE_PAUSE,
1027 KSSTATE_RUN
1028 } KSSTATE, *PKSSTATE;
1029
1030 typedef enum
1031 {
1032 KSTARGET_STATE_DISABLED,
1033 KSTARGET_STATE_ENABLED
1034 } KSTARGET_STATE;
1035
1036 typedef enum
1037 {
1038 KSRESET_BEGIN,
1039 KSRESET_END
1040 } KSRESET;
1041
1042 typedef enum
1043 {
1044 KSEVENTS_NONE,
1045 KSEVENTS_SPINLOCK,
1046 KSEVENTS_MUTEX,
1047 KSEVENTS_FMUTEX,
1048 KSEVENTS_FMUTEXUNSAFE,
1049 KSEVENTS_INTERRUPT,
1050 KSEVENTS_ERESOURCE
1051 } KSEVENTS_LOCKTYPE;
1052
1053 typedef enum
1054 {
1055 KSDEGRADE_STANDARD_SIMPLE,
1056 KSDEGRADE_STANDARD_QUALITY,
1057 KSDEGRADE_STANDARD_COMPUTATION,
1058 KSDEGRADE_STANDARD_SKIP
1059 } KSDEGRADE_STANDARD;
1060
1061 typedef enum
1062 {
1063 KSPIN_DATAFLOW_IN = 1,
1064 KSPIN_DATAFLOW_OUT
1065 } KSPIN_DATAFLOW;
1066
1067 typedef enum
1068 {
1069 KSPIN_COMMUNICATION_NONE,
1070 KSPIN_COMMUNICATION_SINK,
1071 KSPIN_COMMUNICATION_SOURCE,
1072 KSPIN_COMMUNICATION_BOTH,
1073 KSPIN_COMMUNICATION_BRIDGE
1074 } KSPIN_COMMUNICATION;
1075
1076 typedef enum
1077 {
1078 KsListEntryTail,
1079 KsListEntryHead
1080 } KSLIST_ENTRY_LOCATION;
1081
1082 typedef enum
1083 {
1084 KsStackCopyToNewLocation,
1085 KsStackReuseCurrentLocation,
1086 KsStackUseNewLocation
1087 } KSSTACK_USE;
1088
1089 typedef enum
1090 {
1091 KsAcquireOnly,
1092 KsAcquireAndRemove,
1093 KsAcquireOnlySingleItem,
1094 KsAcquireAndRemoveOnlySingleItem
1095 } KSIRP_REMOVAL_OPERATION;
1096
1097 typedef enum
1098 {
1099 KsInvokeOnSuccess = 1,
1100 KsInvokeOnError = 2,
1101 KsInvokeOnCancel = 4
1102 } KSCOMPLETION_INVOCATION;
1103
1104
1105 #if defined(_NTDDK_)
1106 /* MOVE ME */
1107 typedef NTSTATUS (*PFNKSCONTEXT_DISPATCH)(
1108 IN PVOID Context,
1109 IN PIRP Irp);
1110 #endif
1111
1112 #if defined(_NTDDK_) && !defined(__wtypes_h__)
1113 enum VARENUM {
1114 VT_EMPTY = 0,
1115 VT_NULL = 1,
1116 VT_I2 = 2,
1117 VT_I4 = 3,
1118 VT_R4 = 4,
1119 VT_R8 = 5,
1120 VT_CY = 6,
1121 VT_DATE = 7,
1122 VT_BSTR = 8,
1123 VT_DISPATCH = 9,
1124 VT_ERROR = 10,
1125 VT_BOOL = 11,
1126 VT_VARIANT = 12,
1127 VT_UNKNOWN = 13,
1128 VT_DECIMAL = 14,
1129 VT_I1 = 16,
1130 VT_UI1 = 17,
1131 VT_UI2 = 18,
1132 VT_UI4 = 19,
1133 VT_I8 = 20,
1134 VT_UI8 = 21,
1135 VT_INT = 22,
1136 VT_UINT = 23,
1137 VT_VOID = 24,
1138 VT_HRESULT = 25,
1139 VT_PTR = 26,
1140 VT_SAFEARRAY = 27,
1141 VT_CARRAY = 28,
1142 VT_USERDEFINED = 29,
1143 VT_LPSTR = 30,
1144 VT_LPWSTR = 31,
1145 VT_FILETIME = 64,
1146 VT_BLOB = 65,
1147 VT_STREAM = 66,
1148 VT_STORAGE = 67,
1149 VT_STREAMED_OBJECT = 68,
1150 VT_STORED_OBJECT = 69,
1151 VT_BLOB_OBJECT = 70,
1152 VT_CF = 71,
1153 VT_CLSID = 72,
1154 VT_VECTOR = 0x1000,
1155 VT_ARRAY = 0x2000,
1156 VT_BYREF = 0x4000,
1157 VT_RESERVED = 0x8000,
1158 VT_ILLEGAL = 0xffff,
1159 VT_ILLEGALMASKED = 0xfff,
1160 VT_TYPEMASK = 0xfff
1161 };
1162 #endif
1163
1164 #define STATIC_KSDATAFORMAT_TYPE_WILDCARD STATIC_GUID_NULL
1165 #define KSDATAFORMAT_TYPE_WILDCARD GUID_NULL
1166
1167 #define STATIC_KSDATAFORMAT_SUBTYPE_WILDCARD STATIC_GUID_NULL
1168 #define KSDATAFORMAT_SUBTYPE_WILDCARD GUID_NULL
1169
1170 #define STATIC_KSDATAFORMAT_SPECIFIER_WILDCARD STATIC_GUID_NULL
1171 #define KSDATAFORMAT_SPECIFIER_WILDCARD GUID_NULL
1172
1173 /* ===============================================================
1174 Framing
1175 */
1176
1177 typedef struct
1178 {
1179 ULONG MinFrameSize;
1180 ULONG MaxFrameSize;
1181 ULONG Stepping;
1182 } KS_FRAMING_RANGE, *PKS_FRAMING_RANGE;
1183
1184 typedef struct
1185 {
1186 KS_FRAMING_RANGE Range;
1187 ULONG InPlaceWeight;
1188 ULONG NotInPlaceWeight;
1189 } KS_FRAMING_RANGE_WEIGHTED, *PKS_FRAMING_RANGE_WEIGHTED;
1190
1191 typedef struct
1192 {
1193 GUID MemoryType;
1194 GUID BusType;
1195 ULONG MemoryFlags;
1196 ULONG BusFlags;
1197 ULONG Flags;
1198 ULONG Frames;
1199 ULONG FileAlignment;
1200 ULONG MemoryTypeWeight;
1201 KS_FRAMING_RANGE PhysicalRange;
1202 KS_FRAMING_RANGE_WEIGHTED FramingRange;
1203 } KS_FRAMING_ITEM, *PKS_FRAMING_ITEM;
1204
1205 typedef struct
1206 {
1207 ULONG RatioNumerator;
1208 ULONG RatioDenominator;
1209 ULONG RatioConstantMargin;
1210 } KS_COMPRESSION, *PKS_COMPRESSION;
1211
1212
1213 /* ===============================================================
1214 Priorities
1215 */
1216
1217 #define KSPRIORITY_LOW 0x00000001
1218 #define KSPRIORITY_NORMAL 0x40000000
1219 #define KSPRIORITY_HIGH 0x80000000
1220 #define KSPRIORITY_EXCLUSIVE 0xFFFFFFFF
1221
1222 typedef struct
1223 {
1224 ULONG PriorityClass;
1225 ULONG PrioritySubClass;
1226 } KSPRIORITY, *PKSPRIORITY;
1227
1228
1229 /* ===============================================================
1230 Dispatch Table
1231 http://www.osronline.com/DDKx/stream/ks-struct_494j.htm
1232 */
1233 #if defined(_NTDDK_)
1234 typedef struct
1235 {
1236 PDRIVER_DISPATCH DeviceIoControl;
1237 PDRIVER_DISPATCH Read;
1238 PDRIVER_DISPATCH Write;
1239 PDRIVER_DISPATCH Flush;
1240 PDRIVER_DISPATCH Close;
1241 PDRIVER_DISPATCH QuerySecurity;
1242 PDRIVER_DISPATCH SetSecurity;
1243 PFAST_IO_DEVICE_CONTROL FastDeviceIoControl;
1244 PFAST_IO_READ FastRead;
1245 PFAST_IO_WRITE FastWrite;
1246 } KSDISPATCH_TABLE, *PKSDISPATCH_TABLE;
1247
1248
1249 #define KSCREATE_ITEM_IRP_STORAGE(Irp) (*(PKSOBJECT_CREATE_ITEM*)&(Irp)->Tail.Overlay.DriverContext[0])
1250 #define KSEVENT_SET_IRP_STORAGE(Irp) (*(const KSEVENT_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1251 #define KSEVENT_ITEM_IRP_STORAGE(Irp) (*(const KSEVENT_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1252 #define KSEVENT_ENTRY_IRP_STORAGE(Irp) (*(PKSEVENT_ENTRY*)&(Irp)->Tail.Overlay.DriverContext[0])
1253 #define KSMETHOD_SET_IRP_STORAGE(Irp) (*(const KSMETHOD_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1254 #define KSMETHOD_ITEM_IRP_STORAGE(Irp) (*(const KSMETHOD_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1255 #define KSMETHOD_TYPE_IRP_STORAGE(Irp) (*(ULONG_PTR*)(&(Irp)->Tail.Overlay.DriverContext[2]))
1256 #define KSQUEUE_SPINLOCK_IRP_STORAGE(Irp) (*(PKSPIN_LOCK*)&(Irp)->Tail.Overlay.DriverContext[1])
1257 #define KSPROPERTY_SET_IRP_STORAGE(Irp) (*(const KSPROPERTY_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
1258 #define KSPROPERTY_ITEM_IRP_STORAGE(Irp) (*(const KSPROPERTY_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
1259 #define KSPROPERTY_ATTRIBUTES_IRP_STORAGE(Irp) (*(PKSATTRIBUTE_LIST*)&(Irp)->Tail.Overlay.DriverContext[2])
1260
1261 typedef
1262 VOID
1263 (*PFNREFERENCEDEVICEOBJECT)(
1264 IN PVOID Context
1265 );
1266
1267 typedef
1268 VOID
1269 (*PFNDEREFERENCEDEVICEOBJECT)(
1270 IN PVOID Context
1271 );
1272
1273 typedef
1274 NTSTATUS
1275 (*PFNQUERYREFERENCESTRING)(
1276 IN PVOID Context,
1277 IN OUT PWCHAR *String
1278 );
1279
1280 typedef struct
1281 {
1282 INTERFACE Interface;
1283 PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject;
1284 PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject;
1285 PFNQUERYREFERENCESTRING QueryReferenceString;
1286 } BUS_INTERFACE_REFERENCE, *PBUS_INTERFACE_REFERENCE;
1287
1288 typedef struct
1289 {
1290 KDPC Dpc;
1291 ULONG ReferenceCount;
1292 KSPIN_LOCK AccessLock;
1293 } KSDPC_ITEM, *PKSDPC_ITEM;
1294
1295 typedef struct
1296 {
1297 KSDPC_ITEM DpcItem;
1298 LIST_ENTRY BufferList;
1299 } KSBUFFER_ITEM, *PKSBUFFER_ITEM;
1300
1301 #endif
1302
1303 typedef struct
1304 {
1305 GUID Manufacturer;
1306 GUID Product;
1307 GUID Component;
1308 GUID Name;
1309 ULONG Version;
1310 ULONG Revision;
1311 } KSCOMPONENTID, *PKSCOMPONENTID;
1312
1313 /* ===============================================================
1314 Properties
1315 */
1316
1317 #define KSPROPERTY_MEMBER_RANGES 0x00000001
1318 #define KSPROPERTY_MEMBER_STEPPEDRANGES 0x00000002
1319 #define KSPROPERTY_MEMBER_VALUES 0x00000003
1320 #define KSPROPERTY_MEMBER_FLAG_DEFAULT KSPROPERTY_MEMBER_RANGES
1321
1322 typedef enum {
1323 KS_SEEKING_NoPositioning,
1324 KS_SEEKING_AbsolutePositioning,
1325 KS_SEEKING_RelativePositioning,
1326 KS_SEEKING_IncrementalPositioning,
1327 KS_SEEKING_PositioningBitsMask = 0x3,
1328 KS_SEEKING_SeekToKeyFrame,
1329 KS_SEEKING_ReturnTime = 0x8
1330 } KS_SEEKING_FLAGS;
1331
1332 typedef struct
1333 {
1334 LONGLONG Current;
1335 LONGLONG Stop;
1336 KS_SEEKING_FLAGS CurrentFlags;
1337 KS_SEEKING_FLAGS StopFlags;
1338 } KSPROPERTY_POSITIONS, *PKSPROPERTY_POSITIONS;
1339
1340 typedef struct
1341 {
1342 GUID PropertySet;
1343 ULONG Count;
1344 } KSPROPERTY_SERIALHDR, *PKSPROPERTY_SERIALHDR;
1345
1346 typedef struct
1347 {
1348 KSIDENTIFIER PropTypeSet;
1349 ULONG Id;
1350 ULONG PropertyLength;
1351 } KSPROPERTY_SERIAL, *PKSPROPERTY_SERIAL;
1352
1353
1354 typedef union
1355 {
1356 struct {
1357 LONG SignedMinimum;
1358 LONG SignedMaximum;
1359
1360 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1361 }_SIGNED;
1362 #else
1363 };
1364 #endif
1365
1366 struct {
1367 ULONG UnsignedMinimum;
1368 ULONG UnsignedMaximum;
1369 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1370 }_UNSIGNED;
1371 #else
1372 };
1373 #endif
1374
1375 } KSPROPERTY_BOUNDS_LONG, *PKSPROPERTY_BOUNDS_LONG;
1376
1377 typedef union
1378 {
1379 struct {
1380 LONGLONG SignedMinimum;
1381 LONGLONG SignedMaximum;
1382 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1383 }_SIGNED64;
1384 #else
1385 };
1386 #endif
1387
1388 struct {
1389 #if defined(_NTDDK_)
1390 ULONGLONG UnsignedMinimum;
1391 ULONGLONG UnsignedMaximum;
1392 #else
1393 DWORDLONG UnsignedMinimum;
1394 DWORDLONG UnsignedMaximum;
1395 #endif
1396 #if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
1397 }_UNSIGNED64;
1398 #else
1399 };
1400 #endif
1401 } KSPROPERTY_BOUNDS_LONGLONG, *PKSPROPERTY_BOUNDS_LONGLONG;
1402
1403 typedef struct
1404 {
1405 ULONG AccessFlags;
1406 ULONG DescriptionSize;
1407 KSIDENTIFIER PropTypeSet;
1408 ULONG MembersListCount;
1409 ULONG Reserved;
1410 } KSPROPERTY_DESCRIPTION, *PKSPROPERTY_DESCRIPTION;
1411
1412 typedef struct
1413 {
1414 LONGLONG Earliest;
1415 LONGLONG Latest;
1416 } KSPROPERTY_MEDIAAVAILABLE, *PKSPROPERTY_MEDIAAVAILABLE;
1417
1418
1419 typedef struct
1420 {
1421 ULONG MembersFlags;
1422 ULONG MembersSize;
1423 ULONG MembersCount;
1424 ULONG Flags;
1425 } KSPROPERTY_MEMBERSHEADER, *PKSPROPERTY_MEMBERSHEADER;
1426
1427 typedef struct {
1428 KSPROPERTY_MEMBERSHEADER MembersHeader;
1429 const VOID* Members;
1430 } KSPROPERTY_MEMBERSLIST, *PKSPROPERTY_MEMBERSLIST;
1431
1432 typedef struct {
1433 KSIDENTIFIER PropTypeSet;
1434 ULONG MembersListCount;
1435 const KSPROPERTY_MEMBERSLIST* MembersList;
1436 } KSPROPERTY_VALUES, *PKSPROPERTY_VALUES;
1437
1438 #if defined(_NTDDK_)
1439 typedef NTSTATUS (*PFNKSHANDLER)(
1440 IN PIRP Irp,
1441 IN PKSIDENTIFIER Request,
1442 IN OUT PVOID Data);
1443
1444 typedef struct
1445 {
1446 ULONG PropertyId;
1447 union
1448 {
1449 PFNKSHANDLER GetPropertyHandler;
1450 BOOLEAN GetSupported;
1451 };
1452 ULONG MinProperty;
1453 ULONG MinData;
1454 union {
1455 PFNKSHANDLER SetPropertyHandler;
1456 BOOLEAN SetSupported;
1457 };
1458 const KSPROPERTY_VALUES * Values;
1459 ULONG RelationsCount;
1460 const KSPROPERTY * Relations;
1461 PFNKSHANDLER SupportHandler;
1462 ULONG SerializedSize;
1463 } KSPROPERTY_ITEM, *PKSPROPERTY_ITEM;
1464
1465
1466 typedef
1467 BOOLEAN
1468 NTAPI
1469 (*PFNKSFASTHANDLER)(
1470 IN PFILE_OBJECT FileObject,
1471 IN PKSIDENTIFIER Request,
1472 IN ULONG RequestLength,
1473 IN OUT PVOID Data,
1474 IN ULONG DataLength,
1475 OUT PIO_STATUS_BLOCK IoStatus
1476 );
1477
1478 typedef struct {
1479 ULONG PropertyId;
1480 union {
1481 PFNKSFASTHANDLER GetPropertyHandler;
1482 BOOLEAN GetSupported;
1483 };
1484 union {
1485 PFNKSFASTHANDLER SetPropertyHandler;
1486 BOOLEAN SetSupported;
1487 };
1488 ULONG Reserved;
1489 } KSFASTPROPERTY_ITEM, *PKSFASTPROPERTY_ITEM;
1490
1491 typedef struct
1492 {
1493 const GUID* Set;
1494 ULONG PropertiesCount;
1495 const KSPROPERTY_ITEM * PropertyItem;
1496 ULONG FastIoCount;
1497 const KSFASTPROPERTY_ITEM* FastIoTable;
1498 } KSPROPERTY_SET, *PKSPROPERTY_SET;
1499
1500 #endif
1501
1502 typedef struct
1503 {
1504 ULONG SteppingDelta;
1505 ULONG Reserved;
1506 KSPROPERTY_BOUNDS_LONG Bounds;
1507 } KSPROPERTY_STEPPING_LONG, *PKSPROPERTY_STEPPING_LONG;
1508
1509 typedef struct
1510 {
1511 #if defined(_NTDDK_)
1512 ULONGLONG SteppingDelta;
1513 #else
1514 DWORDLONG SteppingDelta;
1515 #endif
1516 KSPROPERTY_BOUNDS_LONGLONG Bounds;
1517 } KSPROPERTY_STEPPING_LONGLONG, *PKSPROPERTY_STEPPING_LONGLONG;
1518
1519 /* ===============================================================
1520 Allocator Framing
1521 */
1522
1523 typedef struct
1524 {
1525 union {
1526 ULONG OptionsFlags;
1527 ULONG RequirementsFlags;
1528 };
1529 #if defined(_NTDDK_)
1530 POOL_TYPE PoolType;
1531 #else
1532 ULONG PoolType;
1533 #endif
1534 ULONG Frames;
1535 ULONG FrameSize;
1536 ULONG FileAlignment;
1537 ULONG Reserved;
1538 } KSALLOCATOR_FRAMING, *PKSALLOCATOR_FRAMING;
1539
1540 typedef struct
1541 {
1542 ULONG CountItems;
1543 ULONG PinFlags;
1544 KS_COMPRESSION OutputCompression;
1545 ULONG PinWeight;
1546 KS_FRAMING_ITEM FramingItem[1];
1547 } KSALLOCATOR_FRAMING_EX, *PKSALLOCATOR_FRAMING_EX;
1548
1549 #define KSALLOCATOR_FLAG_PARTIAL_READ_SUPPORT 0x00000010
1550 #define KSALLOCATOR_FLAG_DEVICE_SPECIFIC 0x00000020
1551 #define KSALLOCATOR_FLAG_CAN_ALLOCATE 0x00000040
1552 #define KSALLOCATOR_FLAG_INSIST_ON_FRAMESIZE_RATIO 0x00000080
1553
1554 /* ===============================================================
1555 Quality
1556 */
1557
1558 typedef struct
1559 {
1560 PVOID Context;
1561 ULONG Proportion;
1562 LONGLONG DeltaTime;
1563 } KSQUALITY, *PKSQUALITY;
1564
1565 typedef struct
1566 {
1567 HANDLE QualityManager;
1568 PVOID Context;
1569 } KSQUALITY_MANAGER, *PKSQUALITY_MANAGER;
1570
1571 typedef struct
1572 {
1573 LONGLONG PresentationStart;
1574 LONGLONG Duration;
1575 KSPIN_INTERFACE Interface;
1576 LONG Rate;
1577 ULONG Flags;
1578 } KSRATE, *PKSRATE;
1579
1580 typedef struct
1581 {
1582 KSPROPERTY Property;
1583 KSRATE Rate;
1584 } KSRATE_CAPABILITY, *PKSRATE_CAPABILITY;
1585
1586 typedef struct
1587 {
1588 LONGLONG Granularity;
1589 LONGLONG Error;
1590 } KSRESOLUTION, *PKSRESOLUTION;
1591
1592 typedef struct
1593 {
1594 ULONG NotificationType;
1595 union {
1596 struct {
1597 HANDLE Event;
1598 ULONG_PTR Reserved[2];
1599 } EventHandle;
1600 struct {
1601 HANDLE Semaphore;
1602 ULONG Reserved;
1603 LONG Adjustment;
1604 } SemaphoreHandle;
1605 #if defined(_NTDDK_)
1606 struct {
1607 PVOID Event;
1608 KPRIORITY Increment;
1609 ULONG_PTR Reserved;
1610 } EventObject;
1611 struct {
1612 PVOID Semaphore;
1613 KPRIORITY Increment;
1614 LONG Adjustment;
1615 } SemaphoreObject;
1616 struct {
1617 PKDPC Dpc;
1618 ULONG ReferenceCount;
1619 ULONG_PTR Reserved;
1620 } Dpc;
1621 struct {
1622 PWORK_QUEUE_ITEM WorkQueueItem;
1623 WORK_QUEUE_TYPE WorkQueueType;
1624 ULONG_PTR Reserved;
1625 } WorkItem;
1626 struct {
1627 PWORK_QUEUE_ITEM WorkQueueItem;
1628 PKSWORKER KsWorkerObject;
1629 ULONG_PTR Reserved;
1630 } KsWorkItem;
1631 #endif
1632 struct {
1633 PVOID Unused;
1634 LONG_PTR Alignment[2];
1635 } Alignment;
1636 };
1637 } KSEVENTDATA, *PKSEVENTDATA;
1638
1639 typedef struct
1640 {
1641 ULONG Size;
1642 ULONG Flags;
1643 union {
1644 HANDLE ObjectHandle;
1645 PVOID ObjectPointer;
1646 };
1647 PVOID Reserved;
1648 KSEVENT Event;
1649 KSEVENTDATA EventData;
1650 } KSRELATIVEEVENT, *PKSRELATIVEEVENT;
1651
1652
1653 /* ===============================================================
1654 Timing
1655 */
1656
1657 typedef struct
1658 {
1659 LONGLONG Time;
1660 ULONG Numerator;
1661 ULONG Denominator;
1662 } KSTIME, *PKSTIME;
1663
1664 typedef struct
1665 {
1666 LONGLONG Time;
1667 LONGLONG SystemTime;
1668 } KSCORRELATED_TIME, *PKSCORRELATED_TIME;
1669
1670 typedef struct
1671 {
1672 KSPROPERTY Property;
1673 GUID SourceFormat;
1674 GUID TargetFormat;
1675 LONGLONG Time;
1676 } KSP_TIMEFORMAT, *PKSP_TIMEFORMAT;
1677
1678 typedef struct
1679 {
1680 LONGLONG TimeBase;
1681 LONGLONG Interval;
1682 } KSINTERVAL, *PKSINTERVAL;
1683
1684 typedef struct
1685 {
1686 LONGLONG Duration;
1687 ULONG FrameFlags;
1688 ULONG Reserved;
1689 } KSFRAMETIME, *PKSFRAMETIME;
1690
1691
1692 /* ===============================================================
1693 Clocks
1694 */
1695
1696 typedef PVOID PKSDEFAULTCLOCK;
1697
1698 typedef struct
1699 {
1700 ULONG CreateFlags;
1701 } KSCLOCK_CREATE, *PKSCLOCK_CREATE;
1702
1703 #if defined(_NTDDK_)
1704
1705 typedef
1706 LONGLONG
1707 (FASTCALL *PFNKSCLOCK_GETTIME)(
1708 IN PFILE_OBJECT FileObject
1709 );
1710 typedef
1711 LONGLONG
1712 (FASTCALL *PFNKSCLOCK_CORRELATEDTIME)(
1713 IN PFILE_OBJECT FileObject,
1714 OUT PLONGLONG SystemTime);
1715
1716 typedef struct
1717 {
1718 PFNKSCLOCK_GETTIME GetTime;
1719 PFNKSCLOCK_GETTIME GetPhysicalTime;
1720 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedTime;
1721 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedPhysicalTime;
1722 } KSCLOCK_FUNCTIONTABLE, *PKSCLOCK_FUNCTIONTABLE;
1723
1724
1725 /* ===============================================================
1726 Objects ??? SORT ME!
1727 */
1728
1729 #define KSCREATE_ITEM_SECURITYCHANGED 0x1
1730 #define KSCREATE_ITEM_WILDCARD 0x2
1731 #define KSCREATE_ITEM_NOPARAMETERS 0x4
1732 #define KSCREATE_ITEM_FREEONSTOP 0x8
1733
1734 typedef struct
1735 {
1736 PDRIVER_DISPATCH Create;
1737 PVOID Context;
1738 UNICODE_STRING ObjectClass;
1739 PSECURITY_DESCRIPTOR SecurityDescriptor;
1740 ULONG Flags;
1741 } KSOBJECT_CREATE_ITEM, *PKSOBJECT_CREATE_ITEM;
1742
1743 typedef struct
1744 {
1745 ULONG CreateItemsCount;
1746 PKSOBJECT_CREATE_ITEM CreateItemsList;
1747 } KSOBJECT_CREATE, *PKSOBJECT_CREATE;
1748
1749 typedef VOID (NTAPI *PFNKSITEMFREECALLBACK)(
1750 IN PKSOBJECT_CREATE_ITEM CreateItem);
1751
1752 #endif
1753
1754 typedef struct
1755 {
1756 ULONG Size;
1757 ULONG Count;
1758 } KSMULTIPLE_ITEM, *PKSMULTIPLE_ITEM;
1759
1760 typedef struct
1761 {
1762 KSEVENT Event;
1763 PKSEVENTDATA EventData;
1764 PVOID Reserved;
1765 } KSQUERYBUFFER, *PKSQUERYBUFFER;
1766
1767 typedef struct
1768 {
1769 PVOID Context;
1770 ULONG Status;
1771 } KSERROR, *PKSERROR;
1772
1773 /* ===============================================================
1774 Methods
1775 */
1776 #if defined(_NTDDK_)
1777
1778 typedef struct
1779 {
1780 ULONG MethodId;
1781 union {
1782 PFNKSHANDLER MethodHandler;
1783 BOOLEAN MethodSupported;
1784 };
1785 ULONG MinMethod;
1786 ULONG MinData;
1787 PFNKSHANDLER SupportHandler;
1788 ULONG Flags;
1789 } KSMETHOD_ITEM, *PKSMETHOD_ITEM;
1790
1791
1792 typedef struct
1793 {
1794 ULONG MethodId;
1795 union {
1796 PFNKSFASTHANDLER MethodHandler;
1797 BOOLEAN MethodSupported;
1798 };
1799 } KSFASTMETHOD_ITEM, *PKSFASTMETHOD_ITEM;
1800
1801 typedef struct
1802 {
1803 const GUID* Set;
1804 ULONG MethodsCount;
1805 const KSMETHOD_ITEM* MethodItem;
1806 ULONG FastIoCount;
1807 const KSFASTMETHOD_ITEM*FastIoTable;
1808 } KSMETHOD_SET, *PKSMETHOD_SET;
1809
1810 #endif
1811 /* ===============================================================
1812 Nodes
1813 */
1814
1815 typedef struct
1816 {
1817 KSPROPERTY Property;
1818 ULONG NodeId;
1819 ULONG Reserved;
1820 } KSP_NODE, *PKSP_NODE;
1821
1822 typedef struct
1823 {
1824 KSMETHOD Method;
1825 ULONG NodeID;
1826 ULONG Reserved;
1827 } KSM_NODE, *PKSM_NODE;
1828
1829 typedef struct
1830 {
1831 KSEVENT Event;
1832 ULONG NodeId;
1833 ULONG Reserved;
1834 } KSE_NODE, *PKSE_NODE;
1835
1836 typedef struct {
1837 ULONG CreateFlags;
1838 ULONG Node;
1839 } KSNODE_CREATE, *PKSNODE_CREATE;
1840
1841
1842 /* ===============================================================
1843 Events
1844 */
1845 typedef struct _KSEVENT_ENTRY KSEVENT_ENTRY, *PKSEVENT_ENTRY;
1846
1847 #if defined(_NTDDK_)
1848 typedef struct
1849 {
1850 KSEVENTDATA EventData;
1851 LONGLONG MarkTime;
1852 } KSEVENT_TIME_MARK, *PKSEVENT_TIME_MARK;
1853
1854 typedef struct
1855 {
1856 KSEVENTDATA EventData;
1857 LONGLONG TimeBase;
1858 LONGLONG Interval;
1859 } KSEVENT_TIME_INTERVAL, *PKSEVENT_TIME_INTERVAL;
1860
1861 typedef NTSTATUS (*PFNKSADDEVENT)(
1862 IN PIRP Irp,
1863 IN PKSEVENTDATA EventData,
1864 IN struct _KSEVENT_ENTRY* EventEntry);
1865
1866 typedef
1867 VOID
1868 (*PFNKSREMOVEEVENT)(
1869 IN PFILE_OBJECT FileObject,
1870 IN struct _KSEVENT_ENTRY* EventEntry
1871 );
1872
1873 typedef struct
1874 {
1875 ULONG EventId;
1876 ULONG DataInput;
1877 ULONG ExtraEntryData;
1878 PFNKSADDEVENT AddHandler;
1879 PFNKSREMOVEEVENT RemoveHandler;
1880 PFNKSHANDLER SupportHandler;
1881 } KSEVENT_ITEM, *PKSEVENT_ITEM;
1882
1883 typedef struct
1884 {
1885 const GUID* Set;
1886 ULONG EventsCount;
1887 const KSEVENT_ITEM* EventItem;
1888 } KSEVENT_SET, *PKSEVENT_SET;
1889
1890 struct _KSEVENT_ENTRY
1891 {
1892 LIST_ENTRY ListEntry;
1893 PVOID Object;
1894 union {
1895 PKSDPC_ITEM DpcItem;
1896 PKSBUFFER_ITEM BufferItem;
1897 };
1898 PKSEVENTDATA EventData;
1899 ULONG NotificationType;
1900 const KSEVENT_SET* EventSet;
1901 const KSEVENT_ITEM* EventItem;
1902 PFILE_OBJECT FileObject;
1903 ULONG SemaphoreAdjustment;
1904 ULONG Reserved;
1905 ULONG Flags;
1906 };
1907
1908 #endif
1909 /* ===============================================================
1910 Pins
1911 */
1912
1913 #if defined(_NTDDK_)
1914
1915 typedef struct _KSPIN KSPIN, *PKSPIN;
1916 typedef struct _KSSTREAM_POINTER KSSTREAM_POINTER, *PKSSTREAM_POINTER;
1917 typedef struct _KSSTREAM_POINTER_OFFSET KSSTREAM_POINTER_OFFSET, *PKSSTREAM_POINTER_OFFSET;
1918 typedef struct _KSMAPPING KSMAPPING, *PKSMAPPING;
1919 typedef struct _KSPROCESSPIN KSPROCESSPIN, *PKSPROCESSPIN;
1920
1921 typedef
1922 NTSTATUS
1923 (*PFNKSPINIRP)(
1924 IN PKSPIN Pin,
1925 IN PIRP Irp
1926 );
1927
1928 typedef
1929 NTSTATUS
1930 (*PFNKSPIN)(
1931 IN PKSPIN Pin
1932 );
1933
1934 typedef
1935 void
1936 (*PFNKSPINVOID)(
1937 IN PKSPIN Pin
1938 );
1939
1940 typedef
1941 void
1942 (*PFNKSSTREAMPOINTER)(
1943 IN PKSSTREAM_POINTER StreamPointer
1944 );
1945
1946 typedef struct {
1947 ULONG Count;
1948 PKSATTRIBUTE* Attributes;
1949 } KSATTRIBUTE_LIST, *PKSATTRIBUTE_LIST;
1950
1951 typedef
1952 NTSTATUS
1953 (*PFNKSPINSETDATAFORMAT)(
1954 IN PKSPIN Pin,
1955 IN PKSDATAFORMAT OldFormat OPTIONAL,
1956 IN PKSMULTIPLE_ITEM OldAttributeList OPTIONAL,
1957 IN const KSDATARANGE* DataRange,
1958 IN const KSATTRIBUTE_LIST* AttributeRange OPTIONAL
1959 );
1960
1961 typedef
1962 NTSTATUS
1963 (*PFNKSPINSETDEVICESTATE)(
1964 IN PKSPIN Pin,
1965 IN KSSTATE ToState,
1966 IN KSSTATE FromState
1967 );
1968
1969 typedef struct _KSCLOCK_DISPATCH KSCLOCK_DISPATCH, *PKSCLOCK_DISPATCH;
1970 typedef struct _KSALLOCATOR_DISPATCH KSALLOCATOR_DISPATCH, *PKSALLOCATOR_DISPATCH;
1971
1972 typedef struct
1973 {
1974 PFNKSPINIRP Create;
1975 PFNKSPINIRP Close;
1976 PFNKSPIN Process;
1977 PFNKSPINVOID Reset;
1978 PFNKSPINSETDATAFORMAT SetDataFormat;
1979 PFNKSPINSETDEVICESTATE SetDeviceState;
1980 PFNKSPIN Connect;
1981 PFNKSPINVOID Disconnect;
1982 const KSCLOCK_DISPATCH* Clock;
1983 const KSALLOCATOR_DISPATCH* Allocator;
1984 } KSPIN_DISPATCH, *PKSPIN_DISPATCH;
1985
1986 typedef
1987 BOOLEAN
1988 (*PFNKSPINSETTIMER)(
1989 IN PKSPIN Pin,
1990 IN PKTIMER Timer,
1991 IN LARGE_INTEGER DueTime,
1992 IN PKDPC Dpc
1993 );
1994
1995 typedef
1996 BOOLEAN
1997 (*PFNKSPINCANCELTIMER)(
1998 IN PKSPIN Pin,
1999 IN PKTIMER Timer
2000 );
2001
2002 typedef
2003 LONGLONG
2004 (FASTCALL *PFNKSPINCORRELATEDTIME)(
2005 IN PKSPIN Pin,
2006 OUT PLONGLONG SystemTime
2007 );
2008
2009 typedef
2010 void
2011 (*PFNKSPINRESOLUTION)(
2012 IN PKSPIN Pin,
2013 OUT PKSRESOLUTION Resolution
2014 );
2015
2016 struct _KSCLOCK_DISPATCH {
2017 PFNKSPINSETTIMER SetTimer;
2018 PFNKSPINCANCELTIMER CancelTimer;
2019 PFNKSPINCORRELATEDTIME CorrelatedTime;
2020 PFNKSPINRESOLUTION Resolution;
2021 };
2022
2023 typedef
2024 NTSTATUS
2025 (*PFNKSPININITIALIZEALLOCATOR)(
2026 IN PKSPIN Pin,
2027 IN PKSALLOCATOR_FRAMING AllocatorFraming,
2028 OUT PVOID* Context
2029 );
2030
2031 typedef PVOID (*PFNKSDELETEALLOCATOR)(
2032 IN PVOID Context);
2033
2034 typedef PVOID (*PFNKSDEFAULTALLOCATE)(
2035 IN PVOID Context);
2036
2037 typedef PVOID (*PFNKSDEFAULTFREE)(
2038 IN PVOID Context,
2039 IN PVOID Buffer);
2040
2041 struct _KSALLOCATOR_DISPATCH {
2042 PFNKSPININITIALIZEALLOCATOR InitializeAllocator;
2043 PFNKSDELETEALLOCATOR DeleteAllocator;
2044 PFNKSDEFAULTALLOCATE Allocate;
2045 PFNKSDEFAULTFREE Free;
2046 };
2047
2048 typedef struct
2049 {
2050 ULONG PropertySetsCount;
2051 ULONG PropertyItemSize;
2052 const KSPROPERTY_SET* PropertySets;
2053 ULONG MethodSetsCount;
2054 ULONG MethodItemSize;
2055 const KSMETHOD_SET* MethodSets;
2056 ULONG EventSetsCount;
2057 ULONG EventItemSize;
2058 const KSEVENT_SET* EventSets;
2059 #if !defined(_WIN64)
2060 PVOID Alignment;
2061 #endif
2062 } KSAUTOMATION_TABLE, *PKSAUTOMATION_TABLE;
2063
2064
2065
2066 typedef struct
2067 {
2068 ULONG InterfacesCount;
2069 const KSPIN_INTERFACE* Interfaces;
2070 ULONG MediumsCount;
2071 const KSPIN_MEDIUM* Mediums;
2072 ULONG DataRangesCount;
2073 const PKSDATARANGE* DataRanges;
2074 KSPIN_DATAFLOW DataFlow;
2075 KSPIN_COMMUNICATION Communication;
2076 const GUID* Category;
2077 const GUID* Name;
2078 union {
2079 LONGLONG Reserved;
2080 struct {
2081 ULONG ConstrainedDataRangesCount;
2082 PKSDATARANGE* ConstrainedDataRanges;
2083 };
2084 };
2085 } KSPIN_DESCRIPTOR, *PKSPIN_DESCRIPTOR;
2086
2087 typedef
2088 NTSTATUS
2089 (*PFNKSINTERSECTHANDLER)(
2090 IN PIRP Irp,
2091 IN PKSP_PIN Pin,
2092 IN PKSDATARANGE DataRange,
2093 OUT PVOID Data OPTIONAL
2094 );
2095
2096 typedef
2097 NTSTATUS
2098 (*PFNKSINTERSECTHANDLEREX)(
2099 IN PVOID Context,
2100 IN PIRP Irp,
2101 IN PKSP_PIN Pin,
2102 IN PKSDATARANGE DataRange,
2103 IN PKSDATARANGE MatchingDataRange,
2104 IN ULONG DataBufferSize,
2105 OUT PVOID Data OPTIONAL,
2106 OUT PULONG DataSize
2107 );
2108
2109 typedef struct
2110 {
2111 const KSPIN_DISPATCH* Dispatch;
2112 const KSAUTOMATION_TABLE* AutomationTable;
2113 KSPIN_DESCRIPTOR PinDescriptor;
2114 ULONG Flags;
2115 ULONG InstancesPossible;
2116 ULONG InstancesNecessary;
2117 const KSALLOCATOR_FRAMING_EX* AllocatorFraming;
2118 PFNKSINTERSECTHANDLEREX IntersectHandler;
2119 } KSPIN_DESCRIPTOR_EX, *PKSPIN_DESCRIPTOR_EX;
2120
2121 /* TODO */
2122 #define KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING
2123 #define KSPIN_FLAG_CRITICAL_PROCESSING
2124 #define KSPIN_FLAG_HYPERCRITICAL_PROCESSING
2125 #define KSPIN_FLAG_ASYNCHRONOUS_PROCESSING
2126 #define KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING
2127 #define KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL
2128 #define KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING
2129 #define KSPIN_FLAG_ENFORCE_FIFO
2130 #define KSPIN_FLAG_GENERATE_MAPPINGS
2131 #define KSPIN_FLAG_DISTINCT_TRAILING_EDGE
2132 #define KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY
2133 #define KSPIN_FLAG_SPLITTER
2134 #define KSPIN_FLAG_USE_STANDARD_TRANSPORT
2135 #define KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT
2136 #define KSPIN_FLAG_FIXED_FORMAT
2137 #define KSPIN_FLAG_GENERATE_EOS_EVENTS
2138 #define KSPIN_FLAG_RENDERER
2139 #define KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING
2140 #define KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE
2141 #define KSPIN_FLAG_DENY_USERMODE_ACCESS
2142 #define KSPIN_FLAG_IMPLEMENT_CLOCK
2143
2144 struct _KSPIN
2145 {
2146 const KSPIN_DESCRIPTOR_EX* Descriptor;
2147 KSOBJECT_BAG Bag;
2148 PVOID Context;
2149 ULONG Id;
2150 KSPIN_COMMUNICATION Communication;
2151 BOOLEAN ConnectionIsExternal;
2152 KSPIN_INTERFACE ConnectionInterface;
2153 KSPIN_MEDIUM ConnectionMedium;
2154 KSPRIORITY ConnectionPriority;
2155 PKSDATAFORMAT ConnectionFormat;
2156 PKSMULTIPLE_ITEM AttributeList;
2157 ULONG StreamHeaderSize;
2158 KSPIN_DATAFLOW DataFlow;
2159 KSSTATE DeviceState;
2160 KSRESET ResetState;
2161 KSSTATE ClientState;
2162 };
2163
2164 #define DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(Handler)\
2165 DEFINE_KSPROPERTY_ITEM(\
2166 KSPROPERTY_PIN_CINSTANCES,\
2167 (Handler),\
2168 sizeof(KSP_PIN),\
2169 sizeof(KSPIN_CINSTANCES),\
2170 NULL, NULL, 0, NULL, NULL, 0)
2171
2172 #define DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(Handler)\
2173 DEFINE_KSPROPERTY_ITEM(\
2174 KSPROPERTY_PIN_CTYPES,\
2175 (Handler),\
2176 sizeof(KSPROPERTY),\
2177 sizeof(ULONG),\
2178 NULL, NULL, 0, NULL, NULL, 0)
2179
2180 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(Handler)\
2181 DEFINE_KSPROPERTY_ITEM(\
2182 KSPROPERTY_PIN_DATAFLOW,\
2183 (Handler),\
2184 sizeof(KSP_PIN),\
2185 sizeof(KSPIN_DATAFLOW),\
2186 NULL, NULL, 0, NULL, NULL, 0)
2187
2188 #define DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(Handler)\
2189 DEFINE_KSPROPERTY_ITEM(\
2190 KSPROPERTY_PIN_DATARANGES,\
2191 (Handler),\
2192 sizeof(KSP_PIN),\
2193 0,\
2194 NULL, NULL, 0, NULL, NULL, 0)
2195
2196 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(Handler)\
2197 DEFINE_KSPROPERTY_ITEM(\
2198 KSPROPERTY_PIN_DATAINTERSECTION,\
2199 (Handler),\
2200 sizeof(KSP_PIN) + sizeof(KSMULTIPLE_ITEM),\
2201 0,\
2202 NULL, NULL, 0, NULL, NULL, 0)
2203
2204 #define DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(Handler)\
2205 DEFINE_KSPROPERTY_ITEM(\
2206 KSPROPERTY_PIN_INTERFACES,\
2207 (Handler),\
2208 sizeof(KSP_PIN),\
2209 0,\
2210 NULL, NULL, 0, NULL, NULL, 0)
2211
2212 #define DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(Handler)\
2213 DEFINE_KSPROPERTY_ITEM(\
2214 KSPROPERTY_PIN_MEDIUMS,\
2215 (Handler),\
2216 sizeof(KSP_PIN),\
2217 0,\
2218 NULL, NULL, 0, NULL, NULL, 0)
2219
2220 #define DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(Handler)\
2221 DEFINE_KSPROPERTY_ITEM(\
2222 KSPROPERTY_PIN_COMMUNICATION,\
2223 (Handler),\
2224 sizeof(KSP_PIN),\
2225 sizeof(KSPIN_COMMUNICATION),\
2226 NULL, NULL, 0, NULL, NULL, 0)
2227
2228 #define DEFINE_KSPROPERTY_ITEM_PIN_GLOBALCINSTANCES(Handler)\
2229 DEFINE_KSPROPERTY_ITEM(\
2230 KSPROPERTY_PIN_GLOBALCINSTANCES,\
2231 (Handler),\
2232 sizeof(KSP_PIN),\
2233 sizeof(KSPIN_CINSTANCES),\
2234 NULL, NULL, 0, NULL, NULL, 0)
2235
2236 #define DEFINE_KSPROPERTY_ITEM_PIN_NECESSARYINSTANCES(Handler)\
2237 DEFINE_KSPROPERTY_ITEM(\
2238 KSPROPERTY_PIN_NECESSARYINSTANCES,\
2239 (Handler),\
2240 sizeof(KSP_PIN),\
2241 sizeof(ULONG),\
2242 NULL, NULL, 0, NULL, NULL, 0)
2243
2244 #define DEFINE_KSPROPERTY_ITEM_PIN_PHYSICALCONNECTION(Handler)\
2245 DEFINE_KSPROPERTY_ITEM(\
2246 KSPROPERTY_PIN_PHYSICALCONNECTION,\
2247 (Handler),\
2248 sizeof(KSP_PIN),\
2249 0,\
2250 NULL, NULL, 0, NULL, NULL, 0)
2251
2252 #define DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(Handler)\
2253 DEFINE_KSPROPERTY_ITEM(\
2254 KSPROPERTY_PIN_CATEGORY,\
2255 (Handler),\
2256 sizeof(KSP_PIN),\
2257 sizeof(GUID),\
2258 NULL, NULL, 0, NULL, NULL, 0)
2259
2260 #define DEFINE_KSPROPERTY_ITEM_PIN_NAME(Handler)\
2261 DEFINE_KSPROPERTY_ITEM(\
2262 KSPROPERTY_PIN_NAME,\
2263 (Handler),\
2264 sizeof(KSP_PIN),\
2265 0,\
2266 NULL, NULL, 0, NULL, NULL, 0)
2267
2268 #define DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(Handler)\
2269 DEFINE_KSPROPERTY_ITEM(\
2270 KSPROPERTY_PIN_CONSTRAINEDDATARANGES,\
2271 (Handler),\
2272 sizeof(KSP_PIN),\
2273 0,\
2274 NULL, NULL, 0, NULL, NULL, 0)
2275
2276 #define DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(Handler)\
2277 DEFINE_KSPROPERTY_ITEM(\
2278 KSPROPERTY_PIN_PROPOSEDATAFORMAT,\
2279 NULL,\
2280 sizeof(KSP_PIN),\
2281 sizeof(KSDATAFORMAT),\
2282 (Handler), NULL, 0, NULL, NULL, 0)
2283
2284 #define DEFINE_KSPROPERTY_PINSET(PinSet,\
2285 PropGeneral, PropInstances, PropIntersection)\
2286 DEFINE_KSPROPERTY_TABLE(PinSet) {\
2287 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
2288 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
2289 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
2290 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
2291 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
2292 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
2293 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
2294 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
2295 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
2296 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral)\
2297 }
2298
2299 #define DEFINE_KSPROPERTY_PINSETCONSTRAINED(PinSet,\
2300 PropGeneral, PropInstances, PropIntersection)\
2301 DEFINE_KSPROPERTY_TABLE(PinSet) {\
2302 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
2303 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
2304 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
2305 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
2306 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
2307 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
2308 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
2309 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
2310 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
2311 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral),\
2312 DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral)\
2313 }
2314
2315
2316
2317 typedef
2318 void
2319 (*PFNKSFREE)(
2320 IN PVOID Data
2321 );
2322
2323
2324
2325 #define DEFINE_KSPROPERTY_TABLE(tablename)\
2326 const KSPROPERTY_ITEM tablename[] =
2327
2328 #endif
2329
2330 typedef struct
2331 {
2332 KSPIN_INTERFACE Interface;
2333 KSPIN_MEDIUM Medium;
2334 ULONG PinId;
2335 HANDLE PinToHandle;
2336 KSPRIORITY Priority;
2337 } KSPIN_CONNECT, *PKSPIN_CONNECT;
2338
2339 /* ===============================================================
2340 Topology
2341 */
2342
2343 typedef struct
2344 {
2345 ULONG FromNode;
2346 ULONG FromNodePin;
2347 ULONG ToNode;
2348 ULONG ToNodePin;
2349 } KSTOPOLOGY_CONNECTION, *PKSTOPOLOGY_CONNECTION;
2350
2351 typedef struct
2352 {
2353 ULONG CategoriesCount;
2354 const GUID* Categories;
2355 ULONG TopologyNodesCount;
2356 const GUID* TopologyNodes;
2357 ULONG TopologyConnectionsCount;
2358 const KSTOPOLOGY_CONNECTION* TopologyConnections;
2359 const GUID* TopologyNodesNames;
2360 ULONG Reserved;
2361 } KSTOPOLOGY, *PKSTOPOLOGY;
2362
2363
2364 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler)\
2365 DEFINE_KSPROPERTY_ITEM(\
2366 KSPROPERTY_TOPOLOGY_CATEGORIES,\
2367 (Handler),\
2368 sizeof(KSPROPERTY),\
2369 0,\
2370 NULL, NULL, 0, NULL, NULL, 0)
2371
2372 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler)\
2373 DEFINE_KSPROPERTY_ITEM(\
2374 KSPROPERTY_TOPOLOGY_NODES,\
2375 (Handler),\
2376 sizeof(KSPROPERTY),\
2377 0,\
2378 NULL, NULL, 0, NULL, NULL, 0)
2379
2380 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler)\
2381 DEFINE_KSPROPERTY_ITEM(\
2382 KSPROPERTY_TOPOLOGY_CONNECTIONS,\
2383 (Handler),\
2384 sizeof(KSPROPERTY),\
2385 0,\
2386 NULL, NULL, 0, NULL, NULL, 0)
2387
2388 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\
2389 DEFINE_KSPROPERTY_ITEM(\
2390 KSPROPERTY_TOPOLOGY_NAME,\
2391 (Handler),\
2392 sizeof(KSP_NODE),\
2393 0,\
2394 NULL, NULL, 0, NULL, NULL, 0)
2395
2396 #define DEFINE_KSPROPERTY_TOPOLOGYSET(TopologySet, Handler)\
2397 DEFINE_KSPROPERTY_TABLE(TopologySet) {\
2398 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler),\
2399 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler),\
2400 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler),\
2401 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\
2402 }
2403
2404 /* ===============================================================
2405 ??? SORT ME
2406 */
2407
2408 /* TODO */
2409 typedef void* UNKNOWN;
2410
2411 typedef PVOID NTAPI(*PFNKSINITIALIZEALLOCATOR)(
2412 IN PVOID InitialContext,
2413 IN PKSALLOCATOR_FRAMING AllocatorFraming,
2414 OUT PVOID* Context);
2415
2416 #if defined(_NTDDK_)
2417 typedef NTSTATUS (*PFNKSALLOCATOR)(
2418 IN PIRP Irp,
2419 IN ULONG BufferSize,
2420 IN BOOLEAN InputOperation);
2421
2422 typedef NTSTATUS (*PFNKINTERSECTHANDLEREX)(
2423 IN PVOID Context,
2424 IN PIRP Irp,
2425 IN PKSP_PIN Pin,
2426 IN PKSDATARANGE DataRange,
2427 IN PKSDATARANGE MatchingDataRange,
2428 IN ULONG DataBufferSize,
2429 OUT PVOID Data OPTIONAL,
2430 OUT PULONG DataSize);
2431
2432
2433 typedef
2434 NTSTATUS
2435 NTAPI
2436 (*PFNALLOCATOR_ALLOCATEFRAME)(
2437 IN PFILE_OBJECT FileObject,
2438 PVOID *Frame
2439 );
2440
2441 typedef
2442 VOID
2443 NTAPI
2444 (*PFNALLOCATOR_FREEFRAME)(
2445 IN PFILE_OBJECT FileObject,
2446 IN PVOID Frame
2447 );
2448
2449 typedef struct {
2450 PFNALLOCATOR_ALLOCATEFRAME AllocateFrame;
2451 PFNALLOCATOR_FREEFRAME FreeFrame;
2452 } KSSTREAMALLOCATOR_FUNCTIONTABLE, *PKSSTREAMALLOCATOR_FUNCTIONTABLE;
2453
2454 #endif
2455
2456 typedef struct
2457 {
2458 KSALLOCATOR_FRAMING Framing;
2459 ULONG AllocatedFrames;
2460 ULONG Reserved;
2461 } KSSTREAMALLOCATOR_STATUS, *PKSSTREAMALLOCATOR_STATUS;
2462
2463 typedef struct
2464 {
2465 KSALLOCATOR_FRAMING_EX Framing;
2466 ULONG AllocatedFrames;
2467 ULONG Reserved;
2468 } KSSTREAMALLOCATOR_STATUS_EX, *PKSSTREAMALLOCATOR_STATUS_EX;
2469
2470 typedef struct
2471 {
2472 ULONG Size;
2473 ULONG TypeSpecificFlags;
2474 KSTIME PresentationTime;
2475 LONGLONG Duration;
2476 ULONG FrameExtent;
2477 ULONG DataUsed;
2478 PVOID Data;
2479 ULONG OptionsFlags;
2480 } KSSTREAM_HEADER, *PKSSTREAM_HEADER;
2481
2482
2483
2484 /* ===============================================================
2485 XP / DX8
2486 */
2487 #if defined(_NTDDK_)
2488 struct _KSMAPPING {
2489 PHYSICAL_ADDRESS PhysicalAddress;
2490 ULONG ByteCount;
2491 ULONG Alignment;
2492 };
2493 #endif
2494
2495
2496 typedef struct {
2497 GUID ProtocolId;
2498 PVOID Argument1;
2499 PVOID Argument2;
2500 } KSHANDSHAKE, *PKSHANDSHAKE;
2501
2502 typedef struct _KSGATE KSGATE, *PKSGATE;
2503 typedef struct _KSPROCESSPIN_INDEXENTRY KSPROCESSPIN_INDEXENTRY, *PKSPROCESSPIN_INDEXENTRY;
2504
2505 struct _KSGATE {
2506 LONG Count;
2507 PKSGATE NextGate;
2508 };
2509
2510 struct _KSSTREAM_POINTER_OFFSET
2511 {
2512 #if defined(_NTDDK_)
2513 union {
2514 PUCHAR Data;
2515 PKSMAPPING Mappings;
2516 };
2517 #else
2518 PUCHAR Data;
2519 #endif
2520 #if !defined(_WIN64)
2521 PVOID Alignment;
2522 #endif
2523 ULONG Count;
2524 ULONG Remaining;
2525 };
2526 #if defined(_NTDDK_)
2527 struct _KSSTREAM_POINTER
2528 {
2529 PVOID Context;
2530 PKSPIN Pin;
2531 PKSSTREAM_HEADER StreamHeader;
2532 PKSSTREAM_POINTER_OFFSET Offset;
2533 KSSTREAM_POINTER_OFFSET OffsetIn;
2534 KSSTREAM_POINTER_OFFSET OffsetOut;
2535 };
2536
2537 struct _KSPROCESSPIN
2538 {
2539 PKSPIN Pin;
2540 PKSSTREAM_POINTER StreamPointer;
2541 PKSPROCESSPIN InPlaceCounterpart;
2542 PKSPROCESSPIN DelegateBranch;
2543 PKSPROCESSPIN CopySource;
2544 PVOID Data;
2545 ULONG BytesAvailable;
2546 ULONG BytesUsed;
2547 ULONG Flags;
2548 BOOLEAN Terminate;
2549 };
2550
2551 struct _KSPROCESSPIN_INDEXENTRY
2552 {
2553 PKSPROCESSPIN* Pins;
2554 ULONG Count;
2555 };
2556 #endif
2557
2558 /* ===============================================================
2559 Device Dispatch
2560 */
2561
2562
2563
2564 #if defined(_NTDDK_)
2565
2566 typedef struct _KSFILTER_DISPATCH KSFILTER_DISPATCH, *PKSFILTER_DISPATCH;
2567 typedef struct _KSDEVICE KSDEVICE, *PKSDEVICE;
2568 typedef struct _KSFILTER KSFILTER, *PKSFILTER;
2569 typedef struct _KSNODE_DESCRIPTOR KSNODE_DESCRIPTOR, *PKSNODE_DESCRIPTOR;
2570 typedef struct _KSFILTER_DESCRIPTOR KSFILTER_DESCRIPTOR, *PKSFILTER_DESCRIPTOR;
2571 typedef struct _KSDEVICE_DESCRIPTOR KSDEVICE_DESCRIPTOR, *PKSDEVICE_DESCRIPTOR;
2572
2573 typedef NTSTATUS (*PFNKSDEVICECREATE)(
2574 IN PKSDEVICE Device);
2575
2576 typedef NTSTATUS (*PFNKSDEVICEPNPSTART)(
2577 IN PKSDEVICE Device,
2578 IN PIRP Irp,
2579 IN PCM_RESOURCE_LIST TranslatedResourceList OPTIONAL,
2580 IN PCM_RESOURCE_LIST UntranslatedResourceList OPTIONAL);
2581
2582 typedef NTSTATUS (*PFNKSDEVICE)(
2583 IN PKSDEVICE Device);
2584
2585 typedef NTSTATUS (*PFNKSDEVICEIRP)(
2586 IN PKSDEVICE Device,
2587 IN PIRP Irp);
2588
2589 typedef VOID (*PFNKSDEVICEIRPVOID)(
2590 IN PKSDEVICE Device,
2591 IN PIRP Irp);
2592
2593 typedef NTSTATUS (*PFNKSDEVICEQUERYCAPABILITIES)(
2594 IN PKSDEVICE Device,
2595 IN PIRP Irp,
2596 IN OUT PDEVICE_CAPABILITIES Capabilities);
2597
2598 typedef NTSTATUS (*PFNKSDEVICEQUERYPOWER)(
2599 IN PKSDEVICE Device,
2600 IN PIRP Irp,
2601 IN DEVICE_POWER_STATE DeviceTo,
2602 IN DEVICE_POWER_STATE DeviceFrom,
2603 IN SYSTEM_POWER_STATE SystemTo,
2604 IN SYSTEM_POWER_STATE SystemFrom,
2605 IN POWER_ACTION Action);
2606
2607 typedef VOID (*PFNKSDEVICESETPOWER)(
2608 IN PKSDEVICE Device,
2609 IN PIRP Irp,
2610 IN DEVICE_POWER_STATE To,
2611 IN DEVICE_POWER_STATE From);
2612
2613 typedef struct _KSDEVICE_DISPATCH {
2614 PFNKSDEVICECREATE Add;
2615 PFNKSDEVICEPNPSTART Start;
2616 PFNKSDEVICE PostStart;
2617 PFNKSDEVICEIRP QueryStop;
2618 PFNKSDEVICEIRPVOID CancelStop;
2619 PFNKSDEVICEIRPVOID Stop;
2620 PFNKSDEVICEIRP QueryRemove;
2621 PFNKSDEVICEIRPVOID CancelRemove;
2622 PFNKSDEVICEIRPVOID Remove;
2623 PFNKSDEVICEQUERYCAPABILITIES QueryCapabilities;
2624 PFNKSDEVICEIRPVOID SurpriseRemoval;
2625 PFNKSDEVICEQUERYPOWER QueryPower;
2626 PFNKSDEVICESETPOWER SetPower;
2627 PFNKSDEVICEIRP QueryInterface;
2628 }KSDEVICE_DISPATCH, *PKSDEVICE_DISPATCH;
2629
2630 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
2631 #define KSDEVICE_DESCRIPTOR_VERSION_2 (0x110)
2632 #define MIN_DEV_VER_FOR_FLAGS (0x110)
2633 #endif
2634
2635 struct _KSDEVICE
2636 {
2637 const KSDEVICE_DESCRIPTOR* Descriptor;
2638 KSOBJECT_BAG Bag;
2639 PVOID Context;
2640 PDEVICE_OBJECT FunctionalDeviceObject;
2641 PDEVICE_OBJECT PhysicalDeviceObject;
2642 PDEVICE_OBJECT NextDeviceObject;
2643 BOOLEAN Started;
2644 SYSTEM_POWER_STATE SystemPowerState;
2645 DEVICE_POWER_STATE DevicePowerState;
2646 };
2647 #endif
2648
2649 /* ===============================================================
2650 Filter Dispatch
2651 */
2652 #if defined(_NTDDK_)
2653 struct _KSFILTER
2654 {
2655 const KSFILTER_DESCRIPTOR* Descriptor;
2656 KSOBJECT_BAG Bag;
2657 PVOID Context;
2658 };
2659
2660 typedef NTSTATUS (*PFNKSFILTERIRP)(
2661 IN PKSFILTER Filter,
2662 IN PIRP Irp);
2663
2664 typedef NTSTATUS (*PFNKSFILTERPROCESS)(
2665 IN PKSFILTER FIlter,
2666 IN PKSPROCESSPIN_INDEXENTRY ProcessPinsIndex);
2667
2668 typedef NTSTATUS (*PFNKSFILTERVOID)(
2669 IN PKSFILTER Filter);
2670
2671 struct _KSFILTER_DISPATCH
2672 {
2673 PFNKSFILTERIRP Create;
2674 PFNKSFILTERIRP Close;
2675 PFNKSFILTERPROCESS Process;
2676 PFNKSFILTERVOID Reset;
2677 };
2678
2679 struct _KSNODE_DESCRIPTOR
2680 {
2681 const KSAUTOMATION_TABLE* AutomationTable;
2682 const GUID* Type;
2683 const GUID* Name;
2684 };
2685
2686 struct _KSFILTER_DESCRIPTOR
2687 {
2688 const KSFILTER_DISPATCH* Dispatch;
2689 const KSAUTOMATION_TABLE* AutomationTable;
2690 ULONG Version;
2691 ULONG Flags;
2692 const GUID* ReferenceGuid;
2693 ULONG PinDescriptorsCount;
2694 ULONG PinDescriptorSize;
2695 const KSPIN_DESCRIPTOR_EX* PinDescriptors;
2696 ULONG CategoriesCount;
2697 const GUID* Categories;
2698 ULONG NodeDescriptorsCount;
2699 ULONG NodeDescriptorSize;
2700 const KSNODE_DESCRIPTOR* NodeDescriptors;
2701 ULONG ConnectionsCount;
2702 const KSTOPOLOGY_CONNECTION* Connections;
2703 const KSCOMPONENTID* ComponentId;
2704 };
2705
2706 struct _KSDEVICE_DESCRIPTOR
2707 {
2708 const KSDEVICE_DISPATCH* Dispatch;
2709 ULONG FilterDescriptorsCount;
2710 const KSFILTER_DESCRIPTOR*const* FilterDescriptors;
2711 ULONG Version;
2712 ULONG Flags;
2713 };
2714
2715 struct _KSFILTERFACTORY {
2716 const KSFILTER_DESCRIPTOR* FilterDescriptor;
2717 KSOBJECT_BAG Bag;
2718 PVOID Context;
2719 };
2720
2721 #endif
2722 /* ===============================================================
2723 Minidriver Callbacks
2724 */
2725 #if defined(_NTDDK_)
2726 typedef NTSTATUS (*KStrMethodHandler)(
2727 IN PIRP Irp,
2728 IN PKSIDENTIFIER Request,
2729 IN OUT PVOID Data);
2730
2731 typedef NTSTATUS (*KStrSupportHandler)(
2732 IN PIRP Irp,
2733 IN PKSIDENTIFIER Request,
2734 IN OUT PVOID Data);
2735 #endif
2736
2737 /* ===============================================================
2738 Allocator Functions
2739 */
2740 #if defined(_NTDDK_)
2741 KSDDKAPI NTSTATUS NTAPI
2742 KsCreateAllocator(
2743 IN HANDLE ConnectionHandle,
2744 IN PKSALLOCATOR_FRAMING AllocatorFraming,
2745 OUT PHANDLE AllocatorHandle);
2746
2747 KSDDKAPI NTSTATUS NTAPI
2748 KsCreateDefaultAllocator(
2749 IN PIRP Irp);
2750
2751 KSDDKAPI NTSTATUS NTAPI
2752 KsValidateAllocatorCreateRequest(
2753 IN PIRP Irp,
2754 OUT PKSALLOCATOR_FRAMING* AllocatorFraming);
2755
2756 KSDDKAPI NTSTATUS NTAPI
2757 KsCreateDefaultAllocatorEx(
2758 IN PIRP Irp,
2759 IN PVOID InitializeContext OPTIONAL,
2760 IN PFNKSDEFAULTALLOCATE DefaultAllocate OPTIONAL,
2761 IN PFNKSDEFAULTFREE DefaultFree OPTIONAL,
2762 IN PFNKSINITIALIZEALLOCATOR InitializeAllocator OPTIONAL,
2763 IN PFNKSDELETEALLOCATOR DeleteAllocator OPTIONAL);
2764
2765 KSDDKAPI NTSTATUS NTAPI
2766 KsValidateAllocatorFramingEx(
2767 IN PKSALLOCATOR_FRAMING_EX Framing,
2768 IN ULONG BufferSize,
2769 IN const KSALLOCATOR_FRAMING_EX* PinFraming);
2770 #endif
2771
2772 /* ===============================================================
2773 Clock Functions
2774 */
2775 #if defined(_NTDDK_)
2776 typedef BOOLEAN (*PFNKSSETTIMER)(
2777 IN PVOID Context,
2778 IN PKTIMER Timer,
2779 IN LARGE_INTEGER DueTime,
2780 IN PKDPC Dpc);
2781
2782 typedef BOOLEAN (*PFNKSCANCELTIMER)(
2783 IN PVOID Context,
2784 IN PKTIMER Timer);
2785
2786 typedef LONGLONG (FASTCALL *PFNKSCORRELATEDTIME)(
2787 IN PVOID Context,
2788 OUT PLONGLONG SystemTime);
2789
2790 KSDDKAPI NTSTATUS NTAPI
2791 KsCreateClock(
2792 IN HANDLE ConnectionHandle,
2793 IN PKSCLOCK_CREATE ClockCreate,
2794 OUT PHANDLE ClockHandle);
2795
2796 KSDDKAPI NTSTATUS NTAPI
2797 KsCreateDefaultClock(
2798 IN PIRP Irp,
2799 IN PKSDEFAULTCLOCK DefaultClock);
2800
2801 KSDDKAPI NTSTATUS NTAPI
2802 KsAllocateDefaultClock(
2803 OUT PKSDEFAULTCLOCK* DefaultClock);
2804
2805 KSDDKAPI NTSTATUS NTAPI
2806 KsAllocateDefaultClockEx(
2807 OUT PKSDEFAULTCLOCK* DefaultClock,
2808 IN PVOID Context OPTIONAL,
2809 IN PFNKSSETTIMER SetTimer OPTIONAL,
2810 IN PFNKSCANCELTIMER CancelTimer OPTIONAL,
2811 IN PFNKSCORRELATEDTIME CorrelatedTime OPTIONAL,
2812 IN const KSRESOLUTION* Resolution OPTIONAL,
2813 IN ULONG Flags);
2814
2815 KSDDKAPI VOID NTAPI
2816 KsFreeDefaultClock(
2817 IN PKSDEFAULTCLOCK DefaultClock);
2818
2819 KSDDKAPI NTSTATUS NTAPI
2820 KsValidateClockCreateRequest(
2821 IN PIRP Irp,
2822 OUT PKSCLOCK_CREATE* ClockCreate);
2823
2824 KSDDKAPI KSSTATE NTAPI
2825 KsGetDefaultClockState(
2826 IN PKSDEFAULTCLOCK DefaultClock);
2827
2828 KSDDKAPI VOID NTAPI
2829 KsSetDefaultClockState(
2830 IN PKSDEFAULTCLOCK DefaultClock,
2831 IN KSSTATE State);
2832
2833 KSDDKAPI LONGLONG NTAPI
2834 KsGetDefaultClockTime(
2835 IN PKSDEFAULTCLOCK DefaultClock);
2836
2837 KSDDKAPI VOID NTAPI
2838 KsSetDefaultClockTime(
2839 IN PKSDEFAULTCLOCK DefaultClock,
2840 IN LONGLONG Time);
2841 #endif
2842
2843 /* ===============================================================
2844 Method Functions
2845 */
2846
2847 /* Method sets - TODO: Make into macros! */
2848 #if defined(_NTDDK_)
2849 #if 0
2850 VOID
2851 KSMETHOD_SET_IRP_STORAGE(
2852 IN IRP Irp);
2853
2854 VOID
2855 KSMETHOD_ITEM_IRP_STORAGE(
2856 IN IRP Irp);
2857
2858 VOID
2859 KSMETHOD_TYPE_IRP_STORAGE(
2860 IN IRP Irp);
2861 #endif
2862
2863 KSDDKAPI NTSTATUS NTAPI
2864 KsMethodHandler(
2865 IN PIRP Irp,
2866 IN ULONG MethodSetsCount,
2867 IN PKSMETHOD_SET MethodSet);
2868
2869 KSDDKAPI NTSTATUS NTAPI
2870 KsMethodHandlerWithAllocator(
2871 IN PIRP Irp,
2872 IN ULONG MethodSetsCount,
2873 IN PKSMETHOD_SET MethodSet,
2874 IN PFNKSALLOCATOR Allocator OPTIONAL,
2875 IN ULONG MethodItemSize OPTIONAL);
2876
2877 KSDDKAPI BOOLEAN NTAPI
2878 KsFastMethodHandler(
2879 IN PFILE_OBJECT FileObject,
2880 IN PKSMETHOD UNALIGNED Method,
2881 IN ULONG MethodLength,
2882 IN OUT PVOID UNALIGNED Data,
2883 IN ULONG DataLength,
2884 OUT PIO_STATUS_BLOCK IoStatus,
2885 IN ULONG MethodSetsCount,
2886 IN const KSMETHOD_SET* MethodSet);
2887 #endif
2888
2889 /* ===============================================================
2890 Property Functions
2891 */
2892 #if defined(_NTDDK_)
2893 KSDDKAPI NTSTATUS NTAPI
2894 KsPropertyHandler(
2895 IN PIRP Irp,
2896 IN ULONG PropertySetsCount,
2897 IN const KSPROPERTY_SET* PropertySet);
2898
2899 KSDDKAPI NTSTATUS NTAPI
2900 KsPropertyHandlerWithAllocator(
2901 IN PIRP Irp,
2902 IN ULONG PropertySetsCount,
2903 IN PKSPROPERTY_SET PropertySet,
2904 IN PFNKSALLOCATOR Allocator OPTIONAL,
2905 IN ULONG PropertyItemSize OPTIONAL);
2906
2907 KSDDKAPI NTSTATUS NTAPI
2908 KsUnserializeObjectPropertiesFromRegistry(
2909 IN PFILE_OBJECT FileObject,
2910 IN HANDLE ParentKey OPTIONAL,
2911 IN PUNICODE_STRING RegistryPath OPTIONAL);
2912
2913 KSDDKAPI BOOLEAN NTAPI
2914 KsFastPropertyHandler(
2915 IN PFILE_OBJECT FileObject,
2916 IN PKSPROPERTY UNALIGNED Property,
2917 IN ULONG PropertyLength,
2918 IN OUT PVOID UNALIGNED Data,
2919 IN ULONG DataLength,
2920 OUT PIO_STATUS_BLOCK IoStatus,
2921 IN ULONG PropertySetsCount,
2922 IN const KSPROPERTY_SET* PropertySet);
2923 #endif
2924
2925 /* ===============================================================
2926 Event Functions
2927 */
2928 #if defined(_NTDDK_)
2929
2930 #define KSPROBE_STREAMREAD 0x00000000
2931 #define KSPROBE_STREAMWRITE 0x00000001
2932 #define KSPROBE_ALLOCATEMDL 0x00000010
2933 #define KSPROBE_PROBEANDLOCK 0x00000020
2934 #define KSPROBE_SYSTEMADDRESS 0x00000040
2935 #define KSPROBE_MODIFY 0x00000200
2936 #define KSPROBE_STREAMWRITEMODIFY (KSPROBE_MODIFY | KSPROBE_STREAMWRITE)
2937 #define KSPROBE_ALLOWFORMATCHANGE 0x00000080
2938
2939 #define KSSTREAM_READ KSPROBE_STREAMREAD
2940 #define KSSTREAM_WRITE KSPROBE_STREAMWRITE
2941 #define KSSTREAM_PAGED_DATA 0x00000000
2942 #define KSSTREAM_NONPAGED_DATA 0x00000100
2943 #define KSSTREAM_SYNCHRONOUS 0x00001000
2944 #define KSSTREAM_FAILUREEXCEPTION 0x00002000
2945
2946 KSDDKAPI NTSTATUS NTAPI
2947 KsGenerateEvent(
2948 IN PKSEVENT_ENTRY EntryEvent);
2949
2950 KSDDKAPI NTSTATUS NTAPI
2951 KsEnableEventWithAllocator(
2952 IN PIRP Irp,
2953 IN ULONG EventSetsCount,
2954 IN PKSEVENT_SET EventSet,
2955 IN OUT PLIST_ENTRY EventsList OPTIONAL,
2956 IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL,
2957 IN PVOID EventsLock OPTIONAL,
2958 IN PFNKSALLOCATOR Allocator OPTIONAL,
2959 IN ULONG EventItemSize OPTIONAL);
2960
2961 KSDDKAPI NTSTATUS NTAPI
2962 KsGenerateDataEvent(
2963 IN PKSEVENT_ENTRY EventEntry,
2964 IN ULONG DataSize,
2965 IN PVOID Data);
2966
2967 KSDDKAPI NTSTATUS NTAPI
2968 KsEnableEvent(
2969 IN PIRP Irp,
2970 IN ULONG EventSetsCount,
2971 IN KSEVENT_SET* EventSet,
2972 IN OUT PLIST_ENTRY EventsList OPTIONAL,
2973 IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL,
2974 IN PVOID EventsLock OPTIONAL);
2975
2976 KSDDKAPI VOID NTAPI
2977 KsDiscardEvent(
2978 IN PKSEVENT_ENTRY EventEntry);
2979
2980 KSDDKAPI NTSTATUS NTAPI
2981 KsDisableEvent(
2982 IN PIRP Irp,
2983 IN OUT PLIST_ENTRY EventsList,
2984 IN KSEVENTS_LOCKTYPE EventsFlags,
2985 IN PVOID EventsLock);
2986
2987 KSDDKAPI VOID NTAPI
2988 KsFreeEventList(
2989 IN PFILE_OBJECT FileObject,
2990 IN OUT PLIST_ENTRY EventsList,
2991 IN KSEVENTS_LOCKTYPE EVentsFlags,
2992 IN PVOID EventsLock);
2993
2994 /* ===============================================================
2995 Topology Functions
2996 */
2997
2998 KSDDKAPI NTSTATUS NTAPI
2999 KsValidateTopologyNodeCreateRequest(
3000 IN PIRP Irp,
3001 IN PKSTOPOLOGY Topology,
3002 OUT PKSNODE_CREATE* NodeCreate);
3003
3004 KSDDKAPI NTSTATUS NTAPI
3005 KsCreateTopologyNode(
3006 IN HANDLE ParentHandle,
3007 IN PKSNODE_CREATE NodeCreate,
3008 IN ACCESS_MASK DesiredAccess,
3009 OUT PHANDLE NodeHandle);
3010
3011 KSDDKAPI NTSTATUS NTAPI
3012 KsTopologyPropertyHandler(
3013 IN PIRP Irp,
3014 IN PKSPROPERTY Property,
3015 IN OUT PVOID Data,
3016 IN const KSTOPOLOGY* Topology);
3017
3018
3019
3020 /* ===============================================================
3021 Connectivity Functions
3022 */
3023
3024 KSDDKAPI NTSTATUS NTAPI
3025 KsCreatePin(
3026 IN HANDLE FilterHandle,
3027 IN PKSPIN_CONNECT Connect,
3028 IN ACCESS_MASK DesiredAccess,
3029 OUT PHANDLE ConnectionHandle);
3030
3031 KSDDKAPI NTSTATUS NTAPI
3032 KsValidateConnectRequest(
3033 IN PIRP Irp,
3034 IN ULONG DescriptorsCount,
3035 IN KSPIN_DESCRIPTOR* Descriptor,
3036 OUT PKSPIN_CONNECT* Connect);
3037
3038 KSDDKAPI NTSTATUS NTAPI
3039 KsPinPropertyHandler(
3040 IN PIRP Irp,
3041 IN PKSPROPERTY Property,
3042 IN OUT PVOID Data,
3043 IN ULONG DescriptorsCount,
3044 IN const KSPIN_DESCRIPTOR* Descriptor);
3045
3046 KSDDKAPI NTSTATUS NTAPI
3047 KsPinDataIntersection(
3048 IN PIRP Irp,
3049 IN PKSP_PIN Pin,
3050 OUT PVOID Data,
3051 IN ULONG DescriptorsCount,
3052 IN const KSPIN_DESCRIPTOR* Descriptor,
3053 IN PFNKSINTERSECTHANDLER IntersectHandler);
3054
3055 KSDDKAPI NTSTATUS NTAPI
3056 KsPinDataIntersectionEx(
3057 IN PIRP Irp,
3058 IN PKSP_PIN Pin,
3059 OUT PVOID Data,
3060 IN ULONG DescriptorsCount,
3061 IN const KSPIN_DESCRIPTOR* Descriptor,
3062 IN ULONG DescriptorSize,
3063 IN PFNKSINTERSECTHANDLEREX IntersectHandler OPTIONAL,
3064 IN PVOID HandlerContext OPTIONAL);
3065
3066 /* Does this belong here? */
3067
3068 KSDDKAPI NTSTATUS NTAPI
3069 KsHandleSizedListQuery(
3070 IN PIRP Irp,
3071 IN ULONG DataItemsCount,
3072 IN ULONG DataItemSize,
3073 IN const VOID* DataItems);
3074
3075
3076 /* ===============================================================
3077 IRP Helper Functions
3078 */
3079
3080 typedef NTSTATUS (*PFNKSIRPLISTCALLBACK)(
3081 IN PIRP Irp,
3082 IN PVOID Context);
3083
3084 KSDDKAPI NTSTATUS NTAPI
3085 KsAcquireResetValue(
3086 IN PIRP Irp,
3087 OUT KSRESET* ResetValue);
3088
3089 KSDDKAPI VOID NTAPI
3090 KsAddIrpToCancelableQueue(
3091 IN OUT PLIST_ENTRY QueueHead,
3092 IN PKSPIN_LOCK SpinLock,
3093 IN PIRP Irp,
3094 IN KSLIST_ENTRY_LOCATION ListLocation,
3095 IN PDRIVER_CANCEL DriverCancel OPTIONAL);
3096
3097 KSDDKAPI NTSTATUS NTAPI
3098 KsAddObjectCreateItemToDeviceHeader(
3099 IN KSDEVICE_HEADER Header,
3100 IN PDRIVER_DISPATCH Create,
3101 IN PVOID Context,
3102 IN PWCHAR ObjectClass,
3103 IN PSECURITY_DESCRIPTOR SecurityDescriptor);
3104
3105 KSDDKAPI NTSTATUS NTAPI
3106 KsAddObjectCreateItemToObjectHeader(
3107 IN KSOBJECT_HEADER Header,
3108 IN PDRIVER_DISPATCH Create,
3109 IN PVOID Context,
3110 IN PWCHAR ObjectClass,
3111 IN PSECURITY_DESCRIPTOR SecurityDescriptor);
3112
3113 KSDDKAPI NTSTATUS NTAPI
3114 KsAllocateDeviceHeader(
3115 OUT KSDEVICE_HEADER* Header,
3116 IN ULONG ItemsCount,
3117 IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL);
3118
3119 KSDDKAPI NTSTATUS NTAPI
3120 KsAllocateExtraData(
3121 IN PIRP Irp,
3122 IN ULONG ExtraSize,
3123 OUT PVOID* ExtraBuffer);
3124
3125 KSDDKAPI NTSTATUS NTAPI
3126 KsAllocateObjectCreateItem(
3127 IN KSDEVICE_HEADER Header,
3128 IN PKSOBJECT_CREATE_ITEM CreateItem,
3129 IN BOOLEAN AllocateEntry,
3130 IN PFNKSITEMFREECALLBACK ItemFreeCallback OPTIONAL);
3131
3132 KSDDKAPI NTSTATUS NTAPI
3133 KsAllocateObjectHeader(
3134 OUT KSOBJECT_HEADER *Header,
3135 IN ULONG ItemsCount,
3136 IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL,
3137 IN PIRP Irp,
3138 IN KSDISPATCH_TABLE* Table);
3139
3140 KSDDKAPI VOID NTAPI
3141 KsCancelIo(
3142 IN OUT PLIST_ENTRY QueueHead,
3143 IN PKSPIN_LOCK SpinLock);
3144
3145 KSDDKAPI VOID NTAPI
3146 KsCancelRoutine(
3147 IN PDEVICE_OBJECT DeviceObject,
3148 IN PIRP Irp);
3149
3150 KSDDKAPI NTSTATUS NTAPI
3151 KsDefaultDeviceIoCompletion(
3152 IN PDEVICE_OBJECT DeviceObject,
3153 IN PIRP Irp);
3154
3155 /* ELSEWHERE
3156 KSDDKAPI ULONG NTAPI
3157 KsDecrementCountedWorker(
3158 IN PKSWORKER Worker);
3159 */
3160
3161 KSDDKAPI BOOLEAN NTAPI
3162 KsDispatchFastIoDeviceControlFailure(
3163 IN PFILE_OBJECT FileObject,
3164 IN BOOLEAN Wait,
3165 IN PVOID InputBuffer OPTIONAL,
3166 IN ULONG InputBufferLength,
3167 OUT PVOID OutputBuffer OPTIONAL,
3168 IN ULONG OutputBufferLength,
3169 IN ULONG IoControlCode,
3170 OUT PIO_STATUS_BLOCK IoStatus,
3171 IN PDEVICE_OBJECT DeviceObject); /* always return false */
3172
3173 KSDDKAPI BOOLEAN NTAPI
3174 KsDispatchFastReadFailure(
3175 IN PFILE_OBJECT FileObject,
3176 IN PLARGE_INTEGER FileOffset,
3177 IN ULONG Length,
3178 IN BOOLEAN Wait,
3179 IN ULONG LockKey,
3180 OUT PVOID Buffer,
3181 OUT PIO_STATUS_BLOCK IoStatus,
3182 IN PDEVICE_OBJECT DeviceObject); /* always return false */
3183
3184 /* This function does the same as the above */
3185 #define KsDispatchFastWriteFailure KsDispatchFastReadFailure
3186
3187 KSDDKAPI NTSTATUS NTAPI
3188 KsDispatchInvalidDeviceRequest(
3189 IN PDEVICE_OBJECT DeviceObject,
3190 IN PIRP Irp);
3191
3192 KSDDKAPI NTSTATUS NTAPI
3193 KsDispatchIrp(
3194 IN PDEVICE_OBJECT DeviceObject,
3195 IN PIRP Irp);
3196
3197 KSDDKAPI NTSTATUS NTAPI
3198 KsDispatchSpecificMethod(
3199 IN PIRP Irp,
3200 IN PFNKSHANDLER Handler);
3201
3202 KSDDKAPI NTSTATUS NTAPI
3203 KsDispatchSpecificProperty(
3204 IN PIRP Irp,
3205 IN PFNKSHANDLER Handler);
3206
3207 KSDDKAPI NTSTATUS NTAPI
3208 KsForwardAndCatchIrp(
3209 IN PDEVICE_OBJECT DeviceObject,
3210 IN PIRP Irp,
3211 IN PFILE_OBJECT FileObject,
3212 IN KSSTACK_USE StackUse);
3213
3214 KSDDKAPI NTSTATUS NTAPI
3215 KsForwardIrp(
3216 IN PIRP Irp,
3217 IN PFILE_OBJECT FileObject,
3218 IN BOOLEAN ReuseStackLocation);
3219
3220 KSDDKAPI VOID NTAPI
3221 KsFreeDeviceHeader(
3222 IN KSDEVICE_HEADER Header);
3223
3224 KSDDKAPI VOID NTAPI
3225 KsFreeObjectHeader(
3226 IN PVOID Header);
3227
3228 KSDDKAPI NTSTATUS NTAPI
3229 KsGetChildCreateParameter(
3230 IN PIRP Irp,
3231 OUT PVOID* CreateParameter);
3232
3233 KSDDKAPI NTSTATUS NTAPI
3234 KsMoveIrpsOnCancelableQueue(
3235 IN OUT PLIST_ENTRY SourceList,
3236 IN PKSPIN_LOCK SourceLock,
3237 IN OUT PLIST_ENTRY DestinationList,
3238 IN PKSPIN_LOCK DestinationLock OPTIONAL,
3239 IN KSLIST_ENTRY_LOCATION ListLocation,
3240 IN PFNKSIRPLISTCALLBACK ListCallback,
3241 IN PVOID Context);
3242
3243 KSDDKAPI NTSTATUS NTAPI
3244 KsProbeStreamIrp(
3245 IN PIRP Irp,
3246 IN ULONG ProbeFlags,
3247 IN ULONG HeaderSize);
3248
3249 KSDDKAPI NTSTATUS NTAPI
3250 KsQueryInformationFile(
3251 IN PFILE_OBJECT FileObject,
3252 OUT PVOID FileInformation,
3253 IN ULONG Length,
3254 IN FILE_INFORMATION_CLASS FileInformationClass);
3255
3256 KSDDKAPI ACCESS_MASK NTAPI
3257 KsQueryObjectAccessMask(
3258 IN KSOBJECT_HEADER Header);
3259
3260 KSDDKAPI PKSOBJECT_CREATE_ITEM NTAPI
3261 KsQueryObjectCreateItem(
3262 IN KSOBJECT_HEADER Header);
3263
3264 KSDDKAPI NTSTATUS NTAPI
3265 KsReadFile(
3266 IN PFILE_OBJECT FileObject,
3267 IN PKEVENT Event OPTIONAL,
3268 IN PVOID PortContext OPTIONAL,
3269 OUT PIO_STATUS_BLOCK IoStatusBlock,
3270 OUT PVOID Buffer,
3271 IN ULONG Length,
3272 IN ULONG Key OPTIONAL,
3273 IN KPROCESSOR_MODE RequestorMode);
3274
3275 KSDDKAPI VOID NTAPI
3276 KsReleaseIrpOnCancelableQueue(
3277 IN PIRP Irp,
3278 IN PDRIVER_CANCEL DriverCancel OPTIONAL);
3279
3280 KSDDKAPI PIRP NTAPI
3281 KsRemoveIrpFromCancelableQueue(
3282 IN OUT PLIST_ENTRY QueueHead,
3283 IN PKSPIN_LOCK SpinLock,
3284 IN KSLIST_ENTRY_LOCATION ListLocation,
3285 IN KSIRP_REMOVAL_OPERATION RemovalOperation);
3286
3287 KSDDKAPI VOID NTAPI
3288 KsRemoveSpecificIrpFromCancelableQueue(
3289 IN PIRP Irp);
3290
3291 KSDDKAPI NTSTATUS NTAPI
3292 KsSetInformationFile(
3293 IN PFILE_OBJECT FileObject,
3294 IN PVOID FileInformation,
3295 IN ULONG Length,
3296 IN FILE_INFORMATION_CLASS FileInformationClass);
3297
3298 KSDDKAPI NTSTATUS NTAPI
3299 KsSetMajorFunctionHandler(
3300 IN PDRIVER_OBJECT DriverObject,
3301 IN ULONG MajorFunction);
3302
3303 KSDDKAPI NTSTATUS NTAPI
3304 KsStreamIo(
3305 IN PFILE_OBJECT FileObject,
3306 IN PKEVENT Event OPTIONAL,
3307 IN PVOID PortContext OPTIONAL,
3308 IN PIO_COMPLETION_ROUTINE CompletionRoutine OPTIONAL,
3309 IN PVOID CompletionContext OPTIONAL,
3310 IN KSCOMPLETION_INVOCATION CompletionInvocationFlags OPTIONAL,
3311 OUT PIO_STATUS_BLOCK IoStatusBlock,
3312 IN OUT PVOID StreamHeaders,
3313 IN ULONG Length,
3314 IN ULONG Flags,
3315 IN KPROCESSOR_MODE RequestorMode);
3316
3317 KSDDKAPI NTSTATUS NTAPI
3318 KsWriteFile(
3319 IN PFILE_OBJECT FileObject,
3320 IN PKEVENT Event OPTIONAL,
3321 IN PVOID PortContext OPTIONAL,
3322 OUT PIO_STATUS_BLOCK IoStatusBlock,
3323 IN PVOID Buffer,
3324 IN ULONG Length,
3325 IN ULONG Key OPTIONAL,
3326 IN KPROCESSOR_MODE RequestorMode);
3327
3328
3329 KSDDKAPI NTSTATUS NTAPI
3330 KsDefaultForwardIrp(
3331 IN PDEVICE_OBJECT DeviceObject,
3332 IN PIRP Irp);
3333
3334 /* ===============================================================
3335 Worker Management Functions
3336 */
3337
3338 KSDDKAPI NTSTATUS NTAPI
3339 KsRegisterWorker(
3340 IN WORK_QUEUE_TYPE WorkQueueType,
3341 OUT PKSWORKER* Worker);
3342
3343 KSDDKAPI VOID NTAPI
3344 KsUnregisterWorker(
3345 IN PKSWORKER Worker);
3346
3347 KSDDKAPI NTSTATUS NTAPI
3348 KsRegisterCountedWorker(
3349 IN WORK_QUEUE_TYPE WorkQueueType,
3350 IN PWORK_QUEUE_ITEM CountedWorkItem,
3351 OUT PKSWORKER* Worker);
3352
3353 KSDDKAPI ULONG NTAPI
3354 KsDecrementCountedWorker(
3355 IN PKSWORKER Worker);
3356
3357 KSDDKAPI ULONG NTAPI
3358 KsIncrementCountedWorker(
3359 IN PKSWORKER Worker);
3360
3361 KSDDKAPI NTSTATUS NTAPI
3362 KsQueueWorkItem(
3363 IN PKSWORKER Worker,
3364 IN PWORK_QUEUE_ITEM WorkItem);
3365
3366
3367 /* ===============================================================
3368 Resources / Images
3369 */
3370
3371 KSDDKAPI NTSTATUS NTAPI
3372 KsLoadResource(
3373 IN PVOID ImageBase,
3374 IN POOL_TYPE PoolType,
3375 IN ULONG_PTR ResourceName,
3376 IN ULONG ResourceType,
3377 OUT PVOID* Resource,
3378 OUT PULONG ResourceSize);
3379
3380 /* TODO: Implement
3381 KSDDKAPI NTSTATUS NTAPI
3382 KsGetImageNameAndResourceId(
3383 IN HANDLE RegKey,
3384 OUT PUNICODE_STRING ImageName,
3385 OUT PULONG_PTR ResourceId,
3386 OUT PULONG ValueType);
3387
3388 KSDDKAPI NTSTATUS NTAPI
3389 KsMapModuleName(
3390 IN PDEVICE_OBJECT PhysicalDeviceObject,
3391 IN PUNICODE_STRING ModuleName,
3392 OUT PUNICODE_STRING ImageName,
3393 OUT PULONG_PTR ResourceId,
3394 OUT PULONG ValueType);
3395 */
3396
3397
3398 /* ===============================================================
3399 Misc. Helper Functions
3400 */
3401
3402 KSDDKAPI NTSTATUS NTAPI
3403 KsCacheMedium(
3404 IN PUNICODE_STRING SymbolicLink,
3405 IN PKSPIN_MEDIUM Medium,
3406 IN ULONG PinDirection);
3407
3408 KSDDKAPI NTSTATUS NTAPI
3409 KsDefaultDispatchPnp(
3410 IN PDEVICE_OBJECT DeviceObject,
3411 IN PIRP Irp);
3412
3413 KSDDKAPI VOID NTAPI
3414 KsSetDevicePnpAndBaseObject(
3415 IN KSDEVICE_HEADER Header,
3416 IN PDEVICE_OBJECT PnpDeviceObject,
3417 IN PDEVICE_OBJECT BaseDevice);
3418
3419 KSDDKAPI NTSTATUS NTAPI
3420 KsDefaultDispatchPower(
3421 IN PDEVICE_OBJECT DeviceObject,
3422 IN PIRP Irp);
3423
3424 KSDDKAPI VOID NTAPI
3425 KsSetPowerDispatch(
3426 IN KSOBJECT_HEADER Header,
3427 IN PFNKSCONTEXT_DISPATCH PowerDispatch OPTIONAL,
3428 IN PVOID PowerContext OPTIONAL);
3429
3430 KSDDKAPI NTSTATUS NTAPI
3431 KsReferenceBusObject(
3432 IN KSDEVICE_HEADER Header);
3433
3434 KSDDKAPI VOID NTAPI
3435 KsDereferenceBusObject(
3436 IN KSDEVICE_HEADER Header);
3437
3438 KSDDKAPI NTSTATUS NTAPI
3439 KsFreeObjectCreateItem(
3440 IN KSDEVICE_HEADER Header,
3441 IN PUNICODE_STRING CreateItem);
3442
3443 KSDDKAPI NTSTATUS NTAPI
3444 KsFreeObjectCreateItemsByContext(
3445 IN KSDEVICE_HEADER Header,
3446 IN PVOID Context);
3447
3448 KSDDKAPI VOID NTAPI
3449 KsNullDriverUnload(
3450 IN PDRIVER_OBJECT DriverObject);
3451
3452 KSDDKAPI PDEVICE_OBJECT NTAPI
3453 KsQueryDevicePnpObject(
3454 IN KSDEVICE_HEADER Header);
3455
3456 KSDDKAPI VOID NTAPI
3457 KsRecalculateStackDepth(
3458 IN KSDEVICE_HEADER Header,
3459 IN BOOLEAN ReuseStackLocation);
3460
3461 KSDDKAPI VOID NTAPI
3462 KsSetTargetDeviceObject(
3463 IN KSOBJECT_HEADER Header,
3464 IN PDEVICE_OBJECT TargetDevice OPTIONAL);
3465
3466 KSDDKAPI VOID NTAPI
3467 KsSetTargetState(
3468 IN KSOBJECT_HEADER Header,
3469 IN KSTARGET_STATE TargetState);
3470
3471 KSDDKAPI NTSTATUS NTAPI
3472 KsSynchronousIoControlDevice(
3473 IN PFILE_OBJECT FileObject,
3474 IN KPROCESSOR_MODE RequestorMode,
3475 IN ULONG IoControl,
3476 IN PVOID InBuffer,
3477 IN ULONG InSize,
3478 OUT PVOID OutBuffer,
3479 IN ULONG OUtSize,
3480 OUT PULONG BytesReturned);
3481
3482 #endif
3483
3484 /* ===============================================================
3485 AVStream Functions (XP / DirectX 8)
3486 NOT IMPLEMENTED YET
3487 http://www.osronline.com/ddkx/stream/avstream_5q9f.htm
3488 */
3489
3490 #if defined(_NTDDK_)
3491 KSDDKAPI
3492 NTSTATUS
3493 NTAPI
3494 KsInitializeDriver(
3495 IN PDRIVER_OBJECT DriverObject,
3496 IN PUNICODE_STRING RegistryPath,
3497 IN const KSDEVICE_DESCRIPTOR *Descriptor OPTIONAL);
3498
3499 typedef struct _KSFILTERFACTORY KSFILTERFACTORY, *PKSFILTERFACTORY; //FIXME
3500
3501
3502 KSDDKAPI
3503 NTSTATUS
3504 NTAPI
3505 KsInitializeDevice (
3506 IN PDEVICE_OBJECT FunctionalDeviceObject,
3507 IN PDEVICE_OBJECT PhysicalDeviceObject,
3508 IN PDEVICE_OBJECT NextDeviceObject,
3509 IN const KSDEVICE_DESCRIPTOR* Descriptor OPTIONAL);
3510
3511
3512 typedef void (*PFNKSFILTERFACTORYPOWER)(
3513 IN PKSFILTERFACTORY FilterFactory,
3514 IN DEVICE_POWER_STATE State);
3515
3516 KSDDKAPI
3517 NTSTATUS
3518 NTAPI
3519 _KsEdit(
3520 IN KSOBJECT_BAG ObjectBag,
3521 IN OUT PVOID* PointerToPointerToItem,
3522 IN ULONG NewSize,
3523 IN ULONG OldSize,
3524 IN ULONG Tag);
3525
3526 KSDDKAPI
3527 VOID
3528 NTAPI
3529 KsAcquireControl(
3530 IN PVOID Object);
3531
3532 KSDDKAPI
3533 VOID
3534 NTAPI
3535 KsAcquireDevice(
3536 IN PKSDEVICE Device);
3537
3538 KSDDKAPI
3539 NTSTATUS
3540 NTAPI
3541 KsAddDevice(
3542 IN PDRIVER_OBJECT DriverObject,
3543 IN PDEVICE_OBJECT PhysicalDeviceObject);
3544
3545 KSDDKAPI
3546 VOID
3547 NTAPI
3548 KsAddEvent(
3549 IN PVOID Object,
3550 IN PKSEVENT_ENTRY EventEntry);
3551
3552 KSDDKAPI
3553 NTSTATUS
3554 NTAPI
3555 KsAddItemToObjectBag(
3556 IN KSOBJECT_BAG ObjectBag,
3557 IN PVOID Item,
3558 IN PFNKSFREE Free OPTIONAL);
3559
3560 KSDDKAPI
3561 NTSTATUS
3562 NTAPI
3563 KsAllocateObjectBag(
3564 IN PKSDEVICE Device,
3565 OUT KSOBJECT_BAG* ObjectBag);
3566
3567 KSDDKAPI
3568 VOID
3569 NTAPI
3570 KsCompletePendingRequest(
3571 IN PIRP Irp);
3572
3573 KSDDKAPI
3574 NTSTATUS
3575 NTAPI
3576 KsCopyObjectBagItems(
3577 IN KSOBJECT_BAG ObjectBagDestination,
3578 IN KSOBJECT_BAG ObjectBagSource);
3579
3580 KSDDKAPI
3581 NTSTATUS
3582 NTAPI
3583 KsCreateDevice(
3584 IN PDRIVER_OBJECT DriverObject,
3585 IN PDEVICE_OBJECT PhysicalDeviceObject,
3586 IN const KSDEVICE_DESCRIPTOR* Descriptor OPTIONAL,
3587 IN ULONG ExtensionSize OPTIONAL,
3588 OUT PKSDEVICE* Device OPTIONAL);
3589
3590 KSDDKAPI
3591 NTSTATUS
3592 NTAPI
3593 KsCreateFilterFactory(
3594 IN PDEVICE_OBJECT DeviceObject,
3595 IN const KSFILTER_DESCRIPTOR* Descriptor,
3596 IN PWCHAR RefString OPTIONAL,
3597 IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL,
3598 IN ULONG CreateItemFlags,
3599 IN PFNKSFILTERFACTORYPOWER SleepCallback OPTIONAL,
3600 IN PFNKSFILTERFACTORYPOWER WakeCallback OPTIONAL,
3601 OUT PKSFILTERFACTORY *FilterFactory OPTIONAL);
3602
3603 KSDDKAPI
3604 NTSTATUS
3605 NTAPI
3606 KsDefaultAddEventHandler(
3607 IN PIRP Irp,
3608 IN PKSEVENTDATA EventData,
3609 IN OUT PKSEVENT_ENTRY EventEntry);
3610
3611 KSDDKAPI
3612 NTSTATUS
3613 NTAPI
3614 KsDispatchQuerySecurity(
3615 IN PDEVICE_OBJECT DeviceObject,
3616 IN PIRP Irp
3617 );
3618
3619 KSDDKAPI
3620 NTSTATUS
3621 NTAPI
3622 KsDispatchSetSecurity(
3623 IN PDEVICE_OBJECT DeviceObject,
3624 IN PIRP Irp
3625 );
3626
3627
3628
3629 #define KsDeleteFilterFactory(FilterFactory) \
3630 KsFreeObjectCreateItemsByContext( \
3631 *(KSDEVICE_HEADER *)( \
3632 KsFilterFactoryGetParentDevice(FilterFactory)->FunctionalDeviceObject-> \
3633 DeviceExtension), \
3634 FilterFactory)
3635
3636 KSDDKAPI
3637 ULONG
3638 NTAPI
3639 KsDeviceGetBusData(
3640 IN PKSDEVICE Device,
3641 IN ULONG DataType,
3642 IN PVOID Buffer,
3643 IN ULONG Offset,
3644 IN ULONG Length);
3645
3646
3647 KSDDKAPI
3648 PVOID
3649 NTAPI
3650 KsGetFirstChild(
3651 IN PVOID Object
3652 );
3653
3654 KSDDKAPI
3655 PKSFILTERFACTORY
3656 NTAPI
3657 KsDeviceGetFirstChildFilterFactory(
3658 IN PKSDEVICE Device);
3659
3660 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
3661
3662 KSDDKAPI
3663 PUNKNOWN
3664 NTAPI
3665 KsGetOuterUnknown(
3666 IN PVOID Object
3667 );
3668
3669
3670 PUNKNOWN
3671 NTAPI
3672 KsDeviceGetOuterUnknown(
3673 IN PKSDEVICE Device);
3674 //{
3675 // return KsGetOuterUnknown((PVOID) Device);
3676 //}
3677
3678 KSDDKAPI
3679 PUNKNOWN
3680 NTAPI
3681 KsDeviceRegisterAggregatedClientUnknown(
3682 IN PKSDEVICE Device,
3683 IN PUNKNOWN ClientUnknown);
3684
3685
3686 #endif
3687
3688 #undef INTERFACE
3689 #define INTERFACE IKsControl
3690
3691 DEFINE_GUID(IID_IKsControl, 0x28F54685L, 0x06FD, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96);
3692
3693 DECLARE_INTERFACE_(IKsControl,IUnknown)
3694 {
3695 STDMETHOD_(NTSTATUS, QueryInterface)( THIS_
3696 REFIID InterfaceId,
3697 PVOID* Interface)PURE;
3698
3699 STDMETHOD_(ULONG, AddRef)(THIS) PURE;
3700
3701 STDMETHOD_(ULONG, Release)(THIS) PURE;
3702
3703 STDMETHOD_(NTSTATUS, KsProperty)(THIS_
3704 IN PKSPROPERTY Property,
3705 IN ULONG PropertyLength,
3706 IN OUT PVOID PropertyData,
3707 IN ULONG DataLength,
3708 OUT ULONG* BytesReturned
3709 ) PURE;
3710 STDMETHOD_(NTSTATUS, KsMethod)(THIS_
3711 IN PKSMETHOD Method,
3712 IN ULONG MethodLength,
3713 IN OUT PVOID MethodData,
3714 IN ULONG DataLength,
3715 OUT ULONG* BytesReturned
3716 ) PURE;
3717 STDMETHOD_(NTSTATUS, KsEvent)(THIS_
3718 IN PKSEVENT Event OPTIONAL,
3719 IN ULONG EventLength,
3720 IN OUT PVOID EventData,
3721 IN ULONG DataLength,
3722 OUT ULONG* BytesReturned
3723 ) PURE;
3724 };
3725
3726 #undef INTERFACE
3727 typedef IKsControl* PIKSCONTROL;
3728
3729 KSDDKAPI
3730 VOID
3731 NTAPI
3732 KsDeviceRegisterAdapterObject(
3733 IN PKSDEVICE Device,
3734 IN PADAPTER_OBJECT AdapterObject,
3735 IN ULONG MaxMappingByteCount,
3736 IN ULONG MappingTableStride);
3737
3738 KSDDKAPI
3739 ULONG
3740 NTAPI
3741 KsDeviceSetBusData(
3742 IN PKSDEVICE Device,
3743 IN ULONG DataType,
3744 IN PVOID Buffer,
3745 IN ULONG Offset,
3746 IN ULONG Length);
3747
3748
3749 #define KsDiscard(object, pointer) \
3750 KsRemoveItemFromObjectBag(object->Bag, pointer, TRUE)
3751
3752 #define KsFilterAcquireControl(Filter) \
3753 KsAcquireControl((PVOID) Filter);
3754
3755 #define KsFilterAddEvent(Filter, EventEntry) \
3756 KsAddEvent(Filter,EventEntry);
3757
3758 KSDDKAPI
3759 VOID
3760 NTAPI
3761 KsFilterAcquireProcessingMutex(
3762 IN PKSFILTER Filter);
3763
3764 KSDDKAPI
3765 NTSTATUS
3766 NTAPI
3767 KsFilterAddTopologyConnections(
3768 IN PKSFILTER Filter,
3769 IN ULONG NewConnectionsCount,
3770 IN const KSTOPOLOGY_CONNECTION* NewTopologyConnections);
3771
3772 KSDDKAPI
3773 VOID
3774 NTAPI
3775 KsFilterAttemptProcessing(
3776 IN PKSFILTER Filter,
3777 IN BOOLEAN Asynchronous);
3778
3779 KSDDKAPI
3780 NTSTATUS
3781 NTAPI
3782 KsFilterCreateNode(
3783 IN PKSFILTER Filter,
3784 IN const KSNODE_DESCRIPTOR* NodeDescriptor,
3785 OUT PULONG NodeID);
3786
3787 KSDDKAPI
3788 NTSTATUS
3789 NTAPI
3790 KsFilterCreatePinFactory(
3791 IN PKSFILTER Filter,
3792 IN const KSPIN_DESCRIPTOR_EX* PinDescriptor,
3793 OUT PULONG PinID);
3794
3795 KSDDKAPI
3796 PKSDEVICE
3797 __inline
3798 KsFilterFactoryGetDevice(
3799 IN PKSFILTERFACTORY FilterFactory);
3800
3801 /* etc. */
3802 #endif /* avstream */
3803
3804 #ifdef __cplusplus
3805 }
3806 #endif
3807
3808 #endif