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