rtmidi 0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +15 -0
- data/.yardopts +7 -0
- data/DEV_NOTES.md +13 -0
- data/LICENSE.txt +46 -0
- data/README.md +82 -0
- data/Rakefile +10 -0
- data/examples/list_ports.rb +15 -0
- data/examples/monitor_input.rb +31 -0
- data/examples/play_notes.rb +28 -0
- data/ext/Rakefile +57 -0
- data/ext/rtmidi-2.0.1/RtError.h +60 -0
- data/ext/rtmidi-2.0.1/RtMidi.cpp +3747 -0
- data/ext/rtmidi-2.0.1/RtMidi.h +675 -0
- data/ext/rtmidi-2.0.1/RtMidi.o +0 -0
- data/ext/rtmidi-2.0.1/include/ks.h +3577 -0
- data/ext/rtmidi-2.0.1/include/ksmedia.h +4824 -0
- data/ext/ruby-rtmidi.cpp +108 -0
- data/ext/ruby-rtmidi.h +44 -0
- data/ext/ruby-rtmidi.o +0 -0
- data/ext/ruby-rtmidi.so +0 -0
- data/lib/rtmidi.rb +4 -0
- data/lib/rtmidi/in.rb +76 -0
- data/lib/rtmidi/interface.rb +67 -0
- data/lib/rtmidi/out.rb +59 -0
- metadata +85 -0
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
|
+
|