rtmidi 0.1

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