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