rtmidi 0.1

Sign up to get free protection for your applications and to get access to all the features.
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
+