1 |
/*++
|
2 |
|
3 |
Copyright (C) Microsoft Corporation, 1996 - 1999
|
4 |
|
5 |
Module Name:
|
6 |
|
7 |
ks.h
|
8 |
|
9 |
Abstract:
|
10 |
|
11 |
Windows Driver Model/Connection and Streaming Architecture (WDM-CSA)
|
12 |
core definitions.
|
13 |
|
14 |
--*/
|
15 |
|
16 |
#if !defined(_KS_)
|
17 |
#define _KS_
|
18 |
|
19 |
#if defined(__TCS__)
|
20 |
#define _KS_NO_ANONYMOUS_STRUCTURES_ 1
|
21 |
#endif
|
22 |
|
23 |
#if !defined(_NTRTL_)
|
24 |
#ifndef DEFINE_GUIDEX
|
25 |
#define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name
|
26 |
#endif // !defined(DEFINE_GUIDEX)
|
27 |
|
28 |
#ifndef STATICGUIDOF
|
29 |
#define STATICGUIDOF(guid) STATIC_##guid
|
30 |
#endif // !defined(STATICGUIDOF)
|
31 |
#endif // !defined(_NTRTL_)
|
32 |
|
33 |
#ifndef SIZEOF_ARRAY
|
34 |
#define SIZEOF_ARRAY(ar) (sizeof(ar)/sizeof((ar)[0]))
|
35 |
#endif // !defined(SIZEOF_ARRAY)
|
36 |
|
37 |
#if defined(__cplusplus) && _MSC_VER >= 1100
|
38 |
#define DEFINE_GUIDSTRUCT(g, n) struct __declspec(uuid(g)) n
|
39 |
#define DEFINE_GUIDNAMED(n) __uuidof(struct n)
|
40 |
#else // !defined(__cplusplus)
|
41 |
#define DEFINE_GUIDSTRUCT(g, n) DEFINE_GUIDEX(n)
|
42 |
#define DEFINE_GUIDNAMED(n) n
|
43 |
#endif // !defined(__cplusplus)
|
44 |
|
45 |
//===========================================================================
|
46 |
|
47 |
#define STATIC_GUID_NULL \
|
48 |
0x00000000L, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
49 |
|
50 |
DEFINE_GUIDSTRUCT("00000000-0000-0000-0000-000000000000", GUID_NULL);
|
51 |
#define GUID_NULL DEFINE_GUIDNAMED(GUID_NULL)
|
52 |
|
53 |
//===========================================================================
|
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 |
//===========================================================================
|
64 |
|
65 |
typedef enum {
|
66 |
KSRESET_BEGIN,
|
67 |
KSRESET_END
|
68 |
} KSRESET;
|
69 |
|
70 |
typedef enum {
|
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 |
ULONG PriorityClass;
|
84 |
ULONG PrioritySubClass;
|
85 |
} KSPRIORITY, *PKSPRIORITY;
|
86 |
|
87 |
typedef struct {
|
88 |
union {
|
89 |
#if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
|
90 |
struct _IDENTIFIER {
|
91 |
#else
|
92 |
struct {
|
93 |
#endif
|
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 |
KSPROPERTY Property;
|
132 |
ULONG NodeId;
|
133 |
ULONG Reserved;
|
134 |
} KSP_NODE, *PKSP_NODE;
|
135 |
|
136 |
typedef struct {
|
137 |
KSMETHOD Method;
|
138 |
ULONG NodeId;
|
139 |
ULONG Reserved;
|
140 |
} KSM_NODE, *PKSM_NODE;
|
141 |
|
142 |
typedef struct {
|
143 |
KSEVENT Event;
|
144 |
ULONG NodeId;
|
145 |
ULONG Reserved;
|
146 |
} KSE_NODE, *PKSE_NODE;
|
147 |
|
148 |
#define STATIC_KSPROPTYPESETID_General \
|
149 |
0x97E99BA0L, 0xBDEA, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
|
150 |
DEFINE_GUIDSTRUCT("97E99BA0-BDEA-11CF-A5D6-28DB04C10000", KSPROPTYPESETID_General);
|
151 |
#define KSPROPTYPESETID_General DEFINE_GUIDNAMED(KSPROPTYPESETID_General)
|
152 |
|
153 |
#if defined(_NTDDK_) && !defined(__wtypes_h__)
|
154 |
enum VARENUM {
|
155 |
VT_EMPTY = 0,
|
156 |
VT_NULL = 1,
|
157 |
VT_I2 = 2,
|
158 |
VT_I4 = 3,
|
159 |
VT_R4 = 4,
|
160 |
VT_R8 = 5,
|
161 |
VT_CY = 6,
|
162 |
VT_DATE = 7,
|
163 |
VT_BSTR = 8,
|
164 |
VT_DISPATCH = 9,
|
165 |
VT_ERROR = 10,
|
166 |
VT_BOOL = 11,
|
167 |
VT_VARIANT = 12,
|
168 |
VT_UNKNOWN = 13,
|
169 |
VT_DECIMAL = 14,
|
170 |
VT_I1 = 16,
|
171 |
VT_UI1 = 17,
|
172 |
VT_UI2 = 18,
|
173 |
VT_UI4 = 19,
|
174 |
VT_I8 = 20,
|
175 |
VT_UI8 = 21,
|
176 |
VT_INT = 22,
|
177 |
VT_UINT = 23,
|
178 |
VT_VOID = 24,
|
179 |
VT_HRESULT = 25,
|
180 |
VT_PTR = 26,
|
181 |
VT_SAFEARRAY = 27,
|
182 |
VT_CARRAY = 28,
|
183 |
VT_USERDEFINED = 29,
|
184 |
VT_LPSTR = 30,
|
185 |
VT_LPWSTR = 31,
|
186 |
VT_FILETIME = 64,
|
187 |
VT_BLOB = 65,
|
188 |
VT_STREAM = 66,
|
189 |
VT_STORAGE = 67,
|
190 |
VT_STREAMED_OBJECT = 68,
|
191 |
VT_STORED_OBJECT = 69,
|
192 |
VT_BLOB_OBJECT = 70,
|
193 |
VT_CF = 71,
|
194 |
VT_CLSID = 72,
|
195 |
VT_VECTOR = 0x1000,
|
196 |
VT_ARRAY = 0x2000,
|
197 |
VT_BYREF = 0x4000,
|
198 |
VT_RESERVED = 0x8000,
|
199 |
VT_ILLEGAL = 0xffff,
|
200 |
VT_ILLEGALMASKED = 0xfff,
|
201 |
VT_TYPEMASK = 0xfff
|
202 |
};
|
203 |
#endif // _NTDDK_ && !__wtypes_h__
|
204 |
|
205 |
typedef struct {
|
206 |
ULONG Size;
|
207 |
ULONG Count;
|
208 |
} KSMULTIPLE_ITEM, *PKSMULTIPLE_ITEM;
|
209 |
|
210 |
typedef struct {
|
211 |
ULONG AccessFlags;
|
212 |
ULONG DescriptionSize;
|
213 |
KSIDENTIFIER PropTypeSet;
|
214 |
ULONG MembersListCount;
|
215 |
ULONG Reserved;
|
216 |
} KSPROPERTY_DESCRIPTION, *PKSPROPERTY_DESCRIPTION;
|
217 |
|
218 |
#define KSPROPERTY_MEMBER_RANGES 0x00000001
|
219 |
#define KSPROPERTY_MEMBER_STEPPEDRANGES 0x00000002
|
220 |
#define KSPROPERTY_MEMBER_VALUES 0x00000003
|
221 |
|
222 |
#define KSPROPERTY_MEMBER_FLAG_DEFAULT 0x00000001
|
223 |
|
224 |
typedef struct {
|
225 |
ULONG MembersFlags;
|
226 |
ULONG MembersSize;
|
227 |
ULONG MembersCount;
|
228 |
ULONG Flags;
|
229 |
} KSPROPERTY_MEMBERSHEADER, *PKSPROPERTY_MEMBERSHEADER;
|
230 |
|
231 |
typedef union {
|
232 |
#if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
|
233 |
struct _SIGNED {
|
234 |
#else
|
235 |
struct {
|
236 |
#endif
|
237 |
LONG SignedMinimum;
|
238 |
LONG SignedMaximum;
|
239 |
};
|
240 |
#if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
|
241 |
struct _UNSIGNED {
|
242 |
#else
|
243 |
struct {
|
244 |
#endif
|
245 |
ULONG UnsignedMinimum;
|
246 |
ULONG UnsignedMaximum;
|
247 |
};
|
248 |
} KSPROPERTY_BOUNDS_LONG, *PKSPROPERTY_BOUNDS_LONG;
|
249 |
|
250 |
typedef union {
|
251 |
#if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
|
252 |
struct _SIGNED64 {
|
253 |
#else
|
254 |
struct {
|
255 |
#endif
|
256 |
LONGLONG SignedMinimum;
|
257 |
LONGLONG SignedMaximum;
|
258 |
};
|
259 |
#if defined( _KS_NO_ANONYMOUS_STRUCTURES_ )
|
260 |
struct _UNSIGNED64 {
|
261 |
#else
|
262 |
struct {
|
263 |
#endif
|
264 |
#if defined(_NTDDK_)
|
265 |
ULONGLONG UnsignedMinimum;
|
266 |
ULONGLONG UnsignedMaximum;
|
267 |
#else // !_NTDDK_
|
268 |
DWORDLONG UnsignedMinimum;
|
269 |
DWORDLONG UnsignedMaximum;
|
270 |
#endif // !_NTDDK_
|
271 |
};
|
272 |
} KSPROPERTY_BOUNDS_LONGLONG, *PKSPROPERTY_BOUNDS_LONGLONG;
|
273 |
|
274 |
typedef struct {
|
275 |
ULONG SteppingDelta;
|
276 |
ULONG Reserved;
|
277 |
KSPROPERTY_BOUNDS_LONG Bounds;
|
278 |
} KSPROPERTY_STEPPING_LONG, *PKSPROPERTY_STEPPING_LONG;
|
279 |
|
280 |
typedef struct {
|
281 |
#if defined(_NTDDK_)
|
282 |
ULONGLONG SteppingDelta;
|
283 |
#else // !_NTDDK_
|
284 |
DWORDLONG SteppingDelta;
|
285 |
#endif // !_NTDDK_
|
286 |
KSPROPERTY_BOUNDS_LONGLONG Bounds;
|
287 |
} KSPROPERTY_STEPPING_LONGLONG, *PKSPROPERTY_STEPPING_LONGLONG;
|
288 |
|
289 |
//===========================================================================
|
290 |
|
291 |
#if defined(_NTDDK_)
|
292 |
//
|
293 |
// Structure forward declarations.
|
294 |
//
|
295 |
typedef struct _KSDEVICE_DESCRIPTOR
|
296 |
KSDEVICE_DESCRIPTOR, *PKSDEVICE_DESCRIPTOR;
|
297 |
typedef struct _KSDEVICE_DISPATCH
|
298 |
KSDEVICE_DISPATCH, *PKSDEVICE_DISPATCH;
|
299 |
typedef struct _KSDEVICE
|
300 |
KSDEVICE, *PKSDEVICE;
|
301 |
typedef struct _KSFILTERFACTORY
|
302 |
KSFILTERFACTORY, *PKSFILTERFACTORY;
|
303 |
typedef struct _KSFILTER_DESCRIPTOR
|
304 |
KSFILTER_DESCRIPTOR, *PKSFILTER_DESCRIPTOR;
|
305 |
typedef struct _KSFILTER_DISPATCH
|
306 |
KSFILTER_DISPATCH, *PKSFILTER_DISPATCH;
|
307 |
typedef struct _KSFILTER
|
308 |
KSFILTER, *PKSFILTER;
|
309 |
typedef struct _KSPIN_DESCRIPTOR_EX
|
310 |
KSPIN_DESCRIPTOR_EX, *PKSPIN_DESCRIPTOR_EX;
|
311 |
typedef struct _KSPIN_DISPATCH
|
312 |
KSPIN_DISPATCH, *PKSPIN_DISPATCH;
|
313 |
typedef struct _KSCLOCK_DISPATCH
|
314 |
KSCLOCK_DISPATCH, *PKSCLOCK_DISPATCH;
|
315 |
typedef struct _KSALLOCATOR_DISPATCH
|
316 |
KSALLOCATOR_DISPATCH, *PKSALLOCATOR_DISPATCH;
|
317 |
typedef struct _KSPIN
|
318 |
KSPIN, *PKSPIN;
|
319 |
typedef struct _KSNODE_DESCRIPTOR
|
320 |
KSNODE_DESCRIPTOR, *PKSNODE_DESCRIPTOR;
|
321 |
typedef struct _KSSTREAM_POINTER_OFFSET
|
322 |
KSSTREAM_POINTER_OFFSET, *PKSSTREAM_POINTER_OFFSET;
|
323 |
typedef struct _KSSTREAM_POINTER
|
324 |
KSSTREAM_POINTER, *PKSSTREAM_POINTER;
|
325 |
typedef struct _KSMAPPING
|
326 |
KSMAPPING, *PKSMAPPING;
|
327 |
typedef struct _KSPROCESSPIN
|
328 |
KSPROCESSPIN, *PKSPROCESSPIN;
|
329 |
typedef struct _KSPROCESSPIN_INDEXENTRY
|
330 |
KSPROCESSPIN_INDEXENTRY, *PKSPROCESSPIN_INDEXENTRY;
|
331 |
#endif // _NTDDK_
|
332 |
|
333 |
typedef PVOID PKSWORKER;
|
334 |
|
335 |
typedef struct {
|
336 |
ULONG NotificationType;
|
337 |
union {
|
338 |
struct {
|
339 |
HANDLE Event;
|
340 |
ULONG_PTR Reserved[2];
|
341 |
} EventHandle;
|
342 |
struct {
|
343 |
HANDLE Semaphore;
|
344 |
ULONG Reserved;
|
345 |
LONG Adjustment;
|
346 |
} SemaphoreHandle;
|
347 |
#if defined(_NTDDK_)
|
348 |
struct {
|
349 |
PVOID Event;
|
350 |
KPRIORITY Increment;
|
351 |
ULONG_PTR Reserved;
|
352 |
} EventObject;
|
353 |
struct {
|
354 |
PVOID Semaphore;
|
355 |
KPRIORITY Increment;
|
356 |
LONG Adjustment;
|
357 |
} SemaphoreObject;
|
358 |
struct {
|
359 |
PKDPC Dpc;
|
360 |
ULONG ReferenceCount;
|
361 |
ULONG_PTR Reserved;
|
362 |
} Dpc;
|
363 |
struct {
|
364 |
PWORK_QUEUE_ITEM WorkQueueItem;
|
365 |
WORK_QUEUE_TYPE WorkQueueType;
|
366 |
ULONG_PTR Reserved;
|
367 |
} WorkItem;
|
368 |
struct {
|
369 |
PWORK_QUEUE_ITEM WorkQueueItem;
|
370 |
PKSWORKER KsWorkerObject;
|
371 |
ULONG_PTR Reserved;
|
372 |
} KsWorkItem;
|
373 |
// @@BEGIN_DDKSPLIT
|
374 |
struct {
|
375 |
PKSFILTER Filter;
|
376 |
ULONG_PTR Reserved[2];
|
377 |
} KsFilterProcessing;
|
378 |
struct {
|
379 |
PKSPIN Pin;
|
380 |
ULONG_PTR Reserved[2];
|
381 |
} KsPinProcessing;
|
382 |
// @@END_DDKSPLIT
|
383 |
#endif // defined(_NTDDK_)
|
384 |
struct {
|
385 |
PVOID Unused;
|
386 |
LONG_PTR Alignment[2];
|
387 |
} Alignment;
|
388 |
};
|
389 |
} KSEVENTDATA, *PKSEVENTDATA;
|
390 |
|
391 |
#define KSEVENTF_EVENT_HANDLE 0x00000001
|
392 |
#define KSEVENTF_SEMAPHORE_HANDLE 0x00000002
|
393 |
#if defined(_NTDDK_)
|
394 |
#define KSEVENTF_EVENT_OBJECT 0x00000004
|
395 |
#define KSEVENTF_SEMAPHORE_OBJECT 0x00000008
|
396 |
#define KSEVENTF_DPC 0x00000010
|
397 |
#define KSEVENTF_WORKITEM 0x00000020
|
398 |
#define KSEVENTF_KSWORKITEM 0x00000080
|
399 |
// @@BEGIN_DDKSPLIT
|
400 |
#define KSEVENTF_KSFILTERPROCESSING 0x00000100
|
401 |
#define KSEVENTF_KSPINPROCESSING 0x00000200
|
402 |
// @@END_DDKSPLIT
|
403 |
#endif // defined(_NTDDK_)
|
404 |
|
405 |
#define KSEVENT_TYPE_ENABLE 0x00000001
|
406 |
#define KSEVENT_TYPE_ONESHOT 0x00000002
|
407 |
#define KSEVENT_TYPE_ENABLEBUFFERED 0x00000004
|
408 |
#define KSEVENT_TYPE_SETSUPPORT 0x00000100
|
409 |
#define KSEVENT_TYPE_BASICSUPPORT 0x00000200
|
410 |
#define KSEVENT_TYPE_QUERYBUFFER 0x00000400
|
411 |
|
412 |
#define KSEVENT_TYPE_TOPOLOGY 0x10000000
|
413 |
|
414 |
typedef struct {
|
415 |
KSEVENT Event;
|
416 |
PKSEVENTDATA EventData;
|
417 |
PVOID Reserved;
|
418 |
} KSQUERYBUFFER, *PKSQUERYBUFFER;
|
419 |
|
420 |
typedef struct {
|
421 |
ULONG Size;
|
422 |
ULONG Flags;
|
423 |
union {
|
424 |
HANDLE ObjectHandle;
|
425 |
PVOID ObjectPointer;
|
426 |
};
|
427 |
PVOID Reserved;
|
428 |
KSEVENT Event;
|
429 |
KSEVENTDATA EventData;
|
430 |
} KSRELATIVEEVENT;
|
431 |
|
432 |
#define KSRELATIVEEVENT_FLAG_HANDLE 0x00000001
|
433 |
#define KSRELATIVEEVENT_FLAG_POINTER 0x00000002
|
434 |
|
435 |
//===========================================================================
|
436 |
|
437 |
typedef struct {
|
438 |
KSEVENTDATA EventData;
|
439 |
LONGLONG MarkTime;
|
440 |
} KSEVENT_TIME_MARK, *PKSEVENT_TIME_MARK;
|
441 |
|
442 |
typedef struct {
|
443 |
KSEVENTDATA EventData;
|
444 |
LONGLONG TimeBase;
|
445 |
LONGLONG Interval;
|
446 |
} KSEVENT_TIME_INTERVAL, *PKSEVENT_TIME_INTERVAL;
|
447 |
|
448 |
typedef struct {
|
449 |
LONGLONG TimeBase;
|
450 |
LONGLONG Interval;
|
451 |
} KSINTERVAL, *PKSINTERVAL;
|
452 |
|
453 |
//===========================================================================
|
454 |
|
455 |
#define STATIC_KSPROPSETID_General\
|
456 |
0x1464EDA5L, 0x6A8F, 0x11D1, 0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
|
457 |
DEFINE_GUIDSTRUCT("1464EDA5-6A8F-11D1-9AA7-00A0C9223196", KSPROPSETID_General);
|
458 |
#define KSPROPSETID_General DEFINE_GUIDNAMED(KSPROPSETID_General)
|
459 |
|
460 |
typedef enum {
|
461 |
KSPROPERTY_GENERAL_COMPONENTID
|
462 |
} KSPROPERTY_GENERAL;
|
463 |
|
464 |
typedef struct {
|
465 |
GUID Manufacturer;
|
466 |
GUID Product;
|
467 |
GUID Component;
|
468 |
GUID Name;
|
469 |
ULONG Version;
|
470 |
ULONG Revision;
|
471 |
} KSCOMPONENTID, *PKSCOMPONENTID;
|
472 |
|
473 |
#define DEFINE_KSPROPERTY_ITEM_GENERAL_COMPONENTID(Handler)\
|
474 |
DEFINE_KSPROPERTY_ITEM(\
|
475 |
KSPROPERTY_GENERAL_COMPONENTID,\
|
476 |
(Handler),\
|
477 |
sizeof(KSPROPERTY),\
|
478 |
sizeof(KSCOMPONENTID),\
|
479 |
NULL, NULL, 0, NULL, NULL, 0)
|
480 |
|
481 |
#define STATIC_KSMETHODSETID_StreamIo\
|
482 |
0x65D003CAL, 0x1523, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
|
483 |
DEFINE_GUIDSTRUCT("65D003CA-1523-11D2-B27A-00A0C9223196", KSMETHODSETID_StreamIo);
|
484 |
#define KSMETHODSETID_StreamIo DEFINE_GUIDNAMED(KSMETHODSETID_StreamIo)
|
485 |
|
486 |
typedef enum {
|
487 |
KSMETHOD_STREAMIO_READ,
|
488 |
KSMETHOD_STREAMIO_WRITE
|
489 |
} KSMETHOD_STREAMIO;
|
490 |
|
491 |
#define DEFINE_KSMETHOD_ITEM_STREAMIO_READ(Handler)\
|
492 |
DEFINE_KSMETHOD_ITEM(\
|
493 |
KSMETHOD_STREAMIO_READ,\
|
494 |
KSMETHOD_TYPE_WRITE,\
|
495 |
(Handler),\
|
496 |
sizeof(KSMETHOD),\
|
497 |
0,\
|
498 |
NULL)
|
499 |
|
500 |
#define DEFINE_KSMETHOD_ITEM_STREAMIO_WRITE(Handler)\
|
501 |
DEFINE_KSMETHOD_ITEM(\
|
502 |
KSMETHOD_STREAMIO_WRITE,\
|
503 |
KSMETHOD_TYPE_READ,\
|
504 |
(Handler),\
|
505 |
sizeof(KSMETHOD),\
|
506 |
0,\
|
507 |
NULL)
|
508 |
|
509 |
#define STATIC_KSPROPSETID_MediaSeeking\
|
510 |
0xEE904F0CL, 0xD09B, 0x11D0, 0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
|
511 |
DEFINE_GUIDSTRUCT("EE904F0C-D09B-11D0-ABE9-00A0C9223196", KSPROPSETID_MediaSeeking);
|
512 |
#define KSPROPSETID_MediaSeeking DEFINE_GUIDNAMED(KSPROPSETID_MediaSeeking)
|
513 |
|
514 |
typedef enum {
|
515 |
KSPROPERTY_MEDIASEEKING_CAPABILITIES,
|
516 |
KSPROPERTY_MEDIASEEKING_FORMATS,
|
517 |
KSPROPERTY_MEDIASEEKING_TIMEFORMAT,
|
518 |
KSPROPERTY_MEDIASEEKING_POSITION,
|
519 |
KSPROPERTY_MEDIASEEKING_STOPPOSITION,
|
520 |
KSPROPERTY_MEDIASEEKING_POSITIONS,
|
521 |
KSPROPERTY_MEDIASEEKING_DURATION,
|
522 |
KSPROPERTY_MEDIASEEKING_AVAILABLE,
|
523 |
KSPROPERTY_MEDIASEEKING_PREROLL,
|
524 |
KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT
|
525 |
} KSPROPERTY_MEDIASEEKING;
|
526 |
|
527 |
typedef enum {
|
528 |
KS_SEEKING_NoPositioning,
|
529 |
KS_SEEKING_AbsolutePositioning,
|
530 |
KS_SEEKING_RelativePositioning,
|
531 |
KS_SEEKING_IncrementalPositioning,
|
532 |
KS_SEEKING_PositioningBitsMask = 0x3,
|
533 |
KS_SEEKING_SeekToKeyFrame,
|
534 |
KS_SEEKING_ReturnTime = 0x8
|
535 |
} KS_SEEKING_FLAGS;
|
536 |
|
537 |
typedef enum {
|
538 |
KS_SEEKING_CanSeekAbsolute = 0x1,
|
539 |
KS_SEEKING_CanSeekForwards = 0x2,
|
540 |
KS_SEEKING_CanSeekBackwards = 0x4,
|
541 |
KS_SEEKING_CanGetCurrentPos = 0x8,
|
542 |
KS_SEEKING_CanGetStopPos = 0x10,
|
543 |
KS_SEEKING_CanGetDuration = 0x20,
|
544 |
KS_SEEKING_CanPlayBackwards = 0x40
|
545 |
} KS_SEEKING_CAPABILITIES;
|
546 |
|
547 |
typedef struct {
|
548 |
LONGLONG Current;
|
549 |
LONGLONG Stop;
|
550 |
KS_SEEKING_FLAGS CurrentFlags;
|
551 |
KS_SEEKING_FLAGS StopFlags;
|
552 |
} KSPROPERTY_POSITIONS, *PKSPROPERTY_POSITIONS;
|
553 |
|
554 |
typedef struct {
|
555 |
LONGLONG Earliest;
|
556 |
LONGLONG Latest;
|
557 |
} KSPROPERTY_MEDIAAVAILABLE, *PKSPROPERTY_MEDIAAVAILABLE;
|
558 |
|
559 |
typedef struct {
|
560 |
KSPROPERTY Property;
|
561 |
GUID SourceFormat;
|
562 |
GUID TargetFormat;
|
563 |
LONGLONG Time;
|
564 |
} KSP_TIMEFORMAT, *PKSP_TIMEFORMAT;
|
565 |
|
566 |
#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CAPABILITIES(Handler)\
|
567 |
DEFINE_KSPROPERTY_ITEM(\
|
568 |
KSPROPERTY_MEDIASEEKING_CAPABILITIES,\
|
569 |
(Handler),\
|
570 |
sizeof(KSPROPERTY),\
|
571 |
sizeof(KS_SEEKING_CAPABILITIES),\
|
572 |
NULL, NULL, 0, NULL, NULL, 0)
|
573 |
|
574 |
#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_FORMATS(Handler)\
|
575 |
DEFINE_KSPROPERTY_ITEM(\
|
576 |
KSPROPERTY_MEDIASEEKING_FORMATS,\
|
577 |
(Handler),\
|
578 |
sizeof(KSPROPERTY),\
|
579 |
0,\
|
580 |
NULL, NULL, 0, NULL, NULL, 0)
|
581 |
|
582 |
#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_TIMEFORMAT(GetHandler, SetHandler)\
|
583 |
DEFINE_KSPROPERTY_ITEM(\
|
584 |
KSPROPERTY_MEDIASEEKING_TIMEFORMAT,\
|
585 |
(GetHandler),\
|
586 |
sizeof(KSPROPERTY),\
|
587 |
sizeof(GUID),\
|
588 |
(SetHandler),\
|
589 |
NULL, 0, NULL, NULL, 0)
|
590 |
|
591 |
#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITION(Handler)\
|
592 |
DEFINE_KSPROPERTY_ITEM(\
|
593 |
KSPROPERTY_MEDIASEEKING_POSITION,\
|
594 |
(Handler),\
|
595 |
sizeof(KSPROPERTY),\
|
596 |
sizeof(LONGLONG),\
|
597 |
NULL, NULL, 0, NULL, NULL, 0)
|
598 |
|
599 |
#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_STOPPOSITION(Handler)\
|
600 |
DEFINE_KSPROPERTY_ITEM(\
|
601 |
KSPROPERTY_MEDIASEEKING_STOPPOSITION,\
|
602 |
(Handler),\
|
603 |
sizeof(KSPROPERTY),\
|
604 |
sizeof(LONGLONG),\
|
605 |
NULL, NULL, 0, NULL, NULL, 0)
|
606 |
|
607 |
#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITIONS(Handler)\
|
608 |
DEFINE_KSPROPERTY_ITEM(\
|
609 |
KSPROPERTY_MEDIASEEKING_POSITIONS,\
|
610 |
NULL,\
|
611 |
sizeof(KSPROPERTY),\
|
612 |
sizeof(KSPROPERTY_POSITIONS),\
|
613 |
(Handler),\
|
614 |
NULL, 0, NULL, NULL, 0)
|
615 |
|
616 |
#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_DURATION(Handler)\
|
617 |
DEFINE_KSPROPERTY_ITEM(\
|
618 |
KSPROPERTY_MEDIASEEKING_DURATION,\
|
619 |
(Handler),\
|
620 |
sizeof(KSPROPERTY),\
|
621 |
sizeof(LONGLONG),\
|
622 |
NULL, NULL, 0, NULL, NULL, 0)
|
623 |
|
624 |
#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_AVAILABLE(Handler)\
|
625 |
DEFINE_KSPROPERTY_ITEM(\
|
626 |
KSPROPERTY_MEDIASEEKING_AVAILABLE,\
|
627 |
(Handler),\
|
628 |
sizeof(KSPROPERTY),\
|
629 |
sizeof(KSPROPERTY_MEDIAAVAILABLE),\
|
630 |
NULL, NULL, 0, NULL, NULL, 0)
|
631 |
|
632 |
#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_PREROLL(Handler)\
|
633 |
DEFINE_KSPROPERTY_ITEM(\
|
634 |
KSPROPERTY_MEDIASEEKING_PREROLL,\
|
635 |
(Handler),\
|
636 |
sizeof(KSPROPERTY),\
|
637 |
sizeof(LONGLONG),\
|
638 |
NULL, NULL, 0, NULL, NULL, 0)
|
639 |
|
640 |
#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CONVERTTIMEFORMAT(Handler)\
|
641 |
DEFINE_KSPROPERTY_ITEM(\
|
642 |
KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT,\
|
643 |
(Handler),\
|
644 |
sizeof(KSP_TIMEFORMAT),\
|
645 |
sizeof(LONGLONG),\
|
646 |
NULL, NULL, 0, NULL, NULL, 0)
|
647 |
|
648 |
//===========================================================================
|
649 |
|
650 |
#define STATIC_KSPROPSETID_Topology\
|
651 |
0x720D4AC0L, 0x7533, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
|
652 |
DEFINE_GUIDSTRUCT("720D4AC0-7533-11D0-A5D6-28DB04C10000", KSPROPSETID_Topology);
|
653 |
#define KSPROPSETID_Topology DEFINE_GUIDNAMED(KSPROPSETID_Topology)
|
654 |
|
655 |
typedef enum {
|
656 |
KSPROPERTY_TOPOLOGY_CATEGORIES,
|
657 |
KSPROPERTY_TOPOLOGY_NODES,
|
658 |
KSPROPERTY_TOPOLOGY_CONNECTIONS,
|
659 |
KSPROPERTY_TOPOLOGY_NAME
|
660 |
} KSPROPERTY_TOPOLOGY;
|
661 |
|
662 |
#define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler)\
|
663 |
DEFINE_KSPROPERTY_ITEM(\
|
664 |
KSPROPERTY_TOPOLOGY_CATEGORIES,\
|
665 |
(Handler),\
|
666 |
sizeof(KSPROPERTY),\
|
667 |
0,\
|
668 |
NULL, NULL, 0, NULL, NULL, 0)
|
669 |
|
670 |
#define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler)\
|
671 |
DEFINE_KSPROPERTY_ITEM(\
|
672 |
KSPROPERTY_TOPOLOGY_NODES,\
|
673 |
(Handler),\
|
674 |
sizeof(KSPROPERTY),\
|
675 |
0,\
|
676 |
NULL, NULL, 0, NULL, NULL, 0)
|
677 |
|
678 |
#define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler)\
|
679 |
DEFINE_KSPROPERTY_ITEM(\
|
680 |
KSPROPERTY_TOPOLOGY_CONNECTIONS,\
|
681 |
(Handler),\
|
682 |
sizeof(KSPROPERTY),\
|
683 |
0,\
|
684 |
NULL, NULL, 0, NULL, NULL, 0)
|
685 |
|
686 |
#define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\
|
687 |
DEFINE_KSPROPERTY_ITEM(\
|
688 |
KSPROPERTY_TOPOLOGY_NAME,\
|
689 |
(Handler),\
|
690 |
sizeof(KSP_NODE),\
|
691 |
0,\
|
692 |
NULL, NULL, 0, NULL, NULL, 0)
|
693 |
|
694 |
#define DEFINE_KSPROPERTY_TOPOLOGYSET(TopologySet, Handler)\
|
695 |
DEFINE_KSPROPERTY_TABLE(TopologySet) {\
|
696 |
DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler),\
|
697 |
DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler),\
|
698 |
DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler),\
|
699 |
DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\
|
700 |
}
|
701 |
|
702 |
//=============================================================================
|
703 |
|
704 |
//
|
705 |
// properties used by graph manager to talk to particular filters
|
706 |
//
|
707 |
#if defined(_NTDDK_)
|
708 |
|
709 |
#define STATIC_KSPROPSETID_GM \
|
710 |
0xAF627536L, 0xE719, 0x11D2, 0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D
|
711 |
DEFINE_GUIDSTRUCT("AF627536-E719-11D2-8A1D-006097D2DF5D", KSPROPSETID_GM);
|
712 |
#define KSPROPSETID_GM DEFINE_GUIDNAMED(KSPROPSETID_GM)
|
713 |
|
714 |
typedef VOID (*PFNKSGRAPHMANAGER_NOTIFY)(IN PFILE_OBJECT GraphManager,
|
715 |
IN ULONG EventId,
|
716 |
IN PVOID Filter,
|
717 |
IN PVOID Pin,
|
718 |
IN PVOID Frame,
|
719 |
IN ULONG Duration);
|
720 |
|
721 |
typedef struct KSGRAPHMANAGER_FUNCTIONTABLE {
|
722 |
PFNKSGRAPHMANAGER_NOTIFY NotifyEvent;
|
723 |
} KSGRAPHMANAGER_FUNCTIONTABLE, PKSGRAPHMANAGER_FUNCTIONTABLE;
|
724 |
|
725 |
typedef struct _KSPROPERTY_GRAPHMANAGER_INTERFACE {
|
726 |
PFILE_OBJECT GraphManager;
|
727 |
KSGRAPHMANAGER_FUNCTIONTABLE FunctionTable;
|
728 |
} KSPROPERTY_GRAPHMANAGER_INTERFACE, *PKSPROPERTY_GRAPHMANAGER_INTERFACE;
|
729 |
|
730 |
|
731 |
//
|
732 |
// Commands
|
733 |
//
|
734 |
typedef enum {
|
735 |
KSPROPERTY_GM_GRAPHMANAGER,
|
736 |
KSPROPERTY_GM_TIMESTAMP_CLOCK,
|
737 |
KSPROPERTY_GM_RATEMATCH,
|
738 |
KSPROPERTY_GM_RENDER_CLOCK,
|
739 |
} KSPROPERTY_GM;
|
740 |
|
741 |
#endif
|
742 |
|
743 |
//===========================================================================
|
744 |
|
745 |
|
746 |
#define STATIC_KSCATEGORY_BRIDGE \
|
747 |
0x085AFF00L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
|
748 |
DEFINE_GUIDSTRUCT("085AFF00-62CE-11CF-A5D6-28DB04C10000", KSCATEGORY_BRIDGE);
|
749 |
#define KSCATEGORY_BRIDGE DEFINE_GUIDNAMED(KSCATEGORY_BRIDGE)
|
750 |
|
751 |
#define STATIC_KSCATEGORY_CAPTURE \
|
752 |
0x65E8773DL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
|
753 |
DEFINE_GUIDSTRUCT("65E8773D-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_CAPTURE);
|
754 |
#define KSCATEGORY_CAPTURE DEFINE_GUIDNAMED(KSCATEGORY_CAPTURE)
|
755 |
|
756 |
#define STATIC_KSCATEGORY_RENDER \
|
757 |
0x65E8773EL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
|
758 |
DEFINE_GUIDSTRUCT("65E8773E-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_RENDER);
|
759 |
#define KSCATEGORY_RENDER DEFINE_GUIDNAMED(KSCATEGORY_RENDER)
|
760 |
|
761 |
#define STATIC_KSCATEGORY_MIXER \
|
762 |
0xAD809C00L, 0x7B88, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
|
763 |
DEFINE_GUIDSTRUCT("AD809C00-7B88-11D0-A5D6-28DB04C10000", KSCATEGORY_MIXER);
|
764 |
#define KSCATEGORY_MIXER DEFINE_GUIDNAMED(KSCATEGORY_MIXER)
|
765 |
|
766 |
#define STATIC_KSCATEGORY_SPLITTER \
|
767 |
0x0A4252A0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
|
768 |
DEFINE_GUIDSTRUCT("0A4252A0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_SPLITTER);
|
769 |
#define KSCATEGORY_SPLITTER DEFINE_GUIDNAMED(KSCATEGORY_SPLITTER)
|
770 |
|
771 |
#define STATIC_KSCATEGORY_DATACOMPRESSOR \
|
772 |
0x1E84C900L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
|
773 |
DEFINE_GUIDSTRUCT("1E84C900-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATACOMPRESSOR);
|
774 |
#define KSCATEGORY_DATACOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATACOMPRESSOR)
|
775 |
|
776 |
#define STATIC_KSCATEGORY_DATADECOMPRESSOR \
|
777 |
0x2721AE20L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
|
778 |
DEFINE_GUIDSTRUCT("2721AE20-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATADECOMPRESSOR);
|
779 |
#define KSCATEGORY_DATADECOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATADECOMPRESSOR)
|
780 |
|
781 |
#define STATIC_KSCATEGORY_DATATRANSFORM \
|
782 |
0x2EB07EA0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
|
783 |
DEFINE_GUIDSTRUCT("2EB07EA0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATATRANSFORM);
|
784 |
#define KSCATEGORY_DATATRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_DATATRANSFORM)
|
785 |
|
786 |
#define STATIC_KSCATEGORY_COMMUNICATIONSTRANSFORM \
|
787 |
0xCF1DDA2CL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
|
788 |
DEFINE_GUIDSTRUCT("CF1DDA2C-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_COMMUNICATIONSTRANSFORM);
|
789 |
#define KSCATEGORY_COMMUNICATIONSTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_COMMUNICATIONSTRANSFORM)
|
790 |
|
791 |
#define STATIC_KSCATEGORY_INTERFACETRANSFORM \
|
792 |
0xCF1DDA2DL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
|
793 |
DEFINE_GUIDSTRUCT("CF1DDA2D-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_INTERFACETRANSFORM);
|
794 |
#define KSCATEGORY_INTERFACETRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_INTERFACETRANSFORM)
|
795 |
|
796 |
#define STATIC_KSCATEGORY_MEDIUMTRANSFORM \
|
797 |
0xCF1DDA2EL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
|
798 |
DEFINE_GUIDSTRUCT("CF1DDA2E-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_MEDIUMTRANSFORM);
|
799 |
#define KSCATEGORY_MEDIUMTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_MEDIUMTRANSFORM)
|
800 |
|
801 |
#define STATIC_KSCATEGORY_FILESYSTEM \
|
802 |
0x760FED5EL, 0x9357, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
|
803 |
DEFINE_GUIDSTRUCT("760FED5E-9357-11D0-A3CC-00A0C9223196", KSCATEGORY_FILESYSTEM);
|
804 |
#define KSCATEGORY_FILESYSTEM DEFINE_GUIDNAMED(KSCATEGORY_FILESYSTEM)
|
805 |
|
806 |
// KSNAME_Clock
|
807 |
#define STATIC_KSCATEGORY_CLOCK \
|
808 |
0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
|
809 |
DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000", KSCATEGORY_CLOCK);
|
810 |
#define KSCATEGORY_CLOCK DEFINE_GUIDNAMED(KSCATEGORY_CLOCK)
|
811 |
|
812 |
#define STATIC_KSCATEGORY_PROXY \
|
813 |
0x97EBAACAL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
|
814 |
DEFINE_GUIDSTRUCT("97EBAACA-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_PROXY);
|
815 |
#define KSCATEGORY_PROXY DEFINE_GUIDNAMED(KSCATEGORY_PROXY)
|
816 |
|
817 |
#define STATIC_KSCATEGORY_QUALITY \
|
818 |
0x97EBAACBL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
|
819 |
DEFINE_GUIDSTRUCT("97EBAACB-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_QUALITY);
|
820 |
#define KSCATEGORY_QUALITY DEFINE_GUIDNAMED(KSCATEGORY_QUALITY)
|
821 |
|
822 |
typedef struct {
|
823 |
ULONG FromNode;
|
824 |
ULONG FromNodePin;
|
825 |
ULONG ToNode;
|
826 |
ULONG ToNodePin;
|
827 |
} KSTOPOLOGY_CONNECTION, *PKSTOPOLOGY_CONNECTION;
|
828 |
|
829 |
typedef struct {
|
830 |
ULONG CategoriesCount;
|
831 |
const GUID* Categories;
|
832 |
ULONG TopologyNodesCount;
|
833 |
const GUID* TopologyNodes;
|
834 |
ULONG TopologyConnectionsCount;
|
835 |
const KSTOPOLOGY_CONNECTION* TopologyConnections;
|
836 |
const GUID* TopologyNodesNames;
|
837 |
ULONG Reserved;
|
838 |
} KSTOPOLOGY, *PKSTOPOLOGY;
|
839 |
|
840 |
#define KSFILTER_NODE ((ULONG)-1)
|
841 |
#define KSALL_NODES ((ULONG)-1)
|
842 |
|
843 |
typedef struct {
|
844 |
ULONG CreateFlags;
|
845 |
ULONG Node;
|
846 |
} KSNODE_CREATE, *PKSNODE_CREATE;
|
847 |
|
848 |
//===========================================================================
|
849 |
|
850 |
// TIME_FORMAT_NONE
|
851 |
#define STATIC_KSTIME_FORMAT_NONE STATIC_GUID_NULL
|
852 |
#define KSTIME_FORMAT_NONE GUID_NULL
|
853 |
|
854 |
// TIME_FORMAT_FRAME
|
855 |
#define STATIC_KSTIME_FORMAT_FRAME\
|
856 |
0x7b785570L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
|
857 |
DEFINE_GUIDSTRUCT("7b785570-8c82-11cf-bc0c-00aa00ac74f6", KSTIME_FORMAT_FRAME);
|
858 |
#define KSTIME_FORMAT_FRAME DEFINE_GUIDNAMED(KSTIME_FORMAT_FRAME)
|
859 |
|
860 |
// TIME_FORMAT_BYTE
|
861 |
#define STATIC_KSTIME_FORMAT_BYTE\
|
862 |
0x7b785571L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
|
863 |
DEFINE_GUIDSTRUCT("7b785571-8c82-11cf-bc0c-00aa00ac74f6", KSTIME_FORMAT_BYTE);
|
864 |
#define KSTIME_FORMAT_BYTE DEFINE_GUIDNAMED(KSTIME_FORMAT_BYTE)
|
865 |
|
866 |
// TIME_FORMAT_SAMPLE
|
867 |
#define STATIC_KSTIME_FORMAT_SAMPLE\
|
868 |
0x7b785572L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
|
869 |
DEFINE_GUIDSTRUCT("7b785572-8c82-11cf-bc0c-00aa00ac74f6", KSTIME_FORMAT_SAMPLE);
|
870 |
#define KSTIME_FORMAT_SAMPLE DEFINE_GUIDNAMED(KSTIME_FORMAT_SAMPLE)
|
871 |
|
872 |
// TIME_FORMAT_FIELD
|
873 |
#define STATIC_KSTIME_FORMAT_FIELD\
|
874 |
0x7b785573L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
|
875 |
DEFINE_GUIDSTRUCT("7b785573-8c82-11cf-bc0c-00aa00ac74f6", KSTIME_FORMAT_FIELD);
|
876 |
#define KSTIME_FORMAT_FIELD DEFINE_GUIDNAMED(KSTIME_FORMAT_FIELD)
|
877 |
|
878 |
// TIME_FORMAT_MEDIA_TIME
|
879 |
#define STATIC_KSTIME_FORMAT_MEDIA_TIME\
|
880 |
0x7b785574L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
|
881 |
DEFINE_GUIDSTRUCT("7b785574-8c82-11cf-bc0c-00aa00ac74f6", KSTIME_FORMAT_MEDIA_TIME);
|
882 |
#define KSTIME_FORMAT_MEDIA_TIME DEFINE_GUIDNAMED(KSTIME_FORMAT_MEDIA_TIME)
|
883 |
|
884 |
//===========================================================================
|
885 |
|
886 |
typedef KSIDENTIFIER KSPIN_INTERFACE, *PKSPIN_INTERFACE;
|
887 |
|
888 |
#define STATIC_KSINTERFACESETID_Standard \
|
889 |
0x1A8766A0L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
|
890 |
DEFINE_GUIDSTRUCT("1A8766A0-62CE-11CF-A5D6-28DB04C10000", KSINTERFACESETID_Standard);
|
891 |
#define KSINTERFACESETID_Standard DEFINE_GUIDNAMED(KSINTERFACESETID_Standard)
|
892 |
|
893 |
typedef enum {
|
894 |
KSINTERFACE_STANDARD_STREAMING,
|
895 |
KSINTERFACE_STANDARD_LOOPED_STREAMING,
|
896 |
KSINTERFACE_STANDARD_CONTROL
|
897 |
} KSINTERFACE_STANDARD;
|
898 |
|
899 |
#define STATIC_KSINTERFACESETID_FileIo \
|
900 |
0x8C6F932CL, 0xE771, 0x11D0, 0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
|
901 |
DEFINE_GUIDSTRUCT("8C6F932C-E771-11D0-B8FF-00A0C9223196", KSINTERFACESETID_FileIo);
|
902 |
#define KSINTERFACESETID_FileIo DEFINE_GUIDNAMED(KSINTERFACESETID_FileIo)
|
903 |
|
904 |
typedef enum {
|
905 |
KSINTERFACE_FILEIO_STREAMING
|
906 |
} KSINTERFACE_FILEIO;
|
907 |
|
908 |
//===========================================================================
|
909 |
|
910 |
#define KSMEDIUM_TYPE_ANYINSTANCE 0
|
911 |
|
912 |
#define STATIC_KSMEDIUMSETID_Standard \
|
913 |
0x4747B320L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
|
914 |
DEFINE_GUIDSTRUCT("4747B320-62CE-11CF-A5D6-28DB04C10000", KSMEDIUMSETID_Standard);
|
915 |
#define KSMEDIUMSETID_Standard DEFINE_GUIDNAMED(KSMEDIUMSETID_Standard)
|
916 |
|
917 |
//For compatibility only
|
918 |
#define KSMEDIUM_STANDARD_DEVIO KSMEDIUM_TYPE_ANYINSTANCE
|
919 |
|
920 |
//===========================================================================
|
921 |
|
922 |
#define STATIC_KSPROPSETID_Pin\
|
923 |
0x8C134960L, 0x51AD, 0x11CF, 0x87, 0x8A, 0x94, 0xF8, 0x01, 0xC1, 0x00, 0x00
|
924 |
DEFINE_GUIDSTRUCT("8C134960-51AD-11CF-878A-94F801C10000", KSPROPSETID_Pin);
|
925 |
#define KSPROPSETID_Pin DEFINE_GUIDNAMED(KSPROPSETID_Pin)
|
926 |
|
927 |
typedef enum {
|
928 |
KSPROPERTY_PIN_CINSTANCES,
|
929 |
KSPROPERTY_PIN_CTYPES,
|
930 |
KSPROPERTY_PIN_DATAFLOW,
|
931 |
KSPROPERTY_PIN_DATARANGES,
|
932 |
KSPROPERTY_PIN_DATAINTERSECTION,
|
933 |
KSPROPERTY_PIN_INTERFACES,
|
934 |
KSPROPERTY_PIN_MEDIUMS,
|
935 |
KSPROPERTY_PIN_COMMUNICATION,
|
936 |
KSPROPERTY_PIN_GLOBALCINSTANCES,
|
937 |
KSPROPERTY_PIN_NECESSARYINSTANCES,
|
938 |
KSPROPERTY_PIN_PHYSICALCONNECTION,
|
939 |
KSPROPERTY_PIN_CATEGORY,
|
940 |
KSPROPERTY_PIN_NAME,
|
941 |
KSPROPERTY_PIN_CONSTRAINEDDATARANGES,
|
942 |
KSPROPERTY_PIN_PROPOSEDATAFORMAT
|
943 |
} KSPROPERTY_PIN;
|
944 |
|
945 |
typedef struct {
|
946 |
KSPROPERTY Property;
|
947 |
ULONG PinId;
|
948 |
ULONG Reserved;
|
949 |
} KSP_PIN, *PKSP_PIN;
|
950 |
|
951 |
#define KSINSTANCE_INDETERMINATE ((ULONG)-1)
|
952 |
|
953 |
typedef struct {
|
954 |
ULONG PossibleCount;
|
955 |
ULONG CurrentCount;
|
956 |
} KSPIN_CINSTANCES, *PKSPIN_CINSTANCES;
|
957 |
|
958 |
typedef enum {
|
959 |
KSPIN_DATAFLOW_IN = 1,
|
960 |
KSPIN_DATAFLOW_OUT
|
961 |
} KSPIN_DATAFLOW, *PKSPIN_DATAFLOW;
|
962 |
|
963 |
#define KSDATAFORMAT_BIT_TEMPORAL_COMPRESSION 0
|
964 |
#define KSDATAFORMAT_TEMPORAL_COMPRESSION (1 << KSDATAFORMAT_BIT_TEMPORAL_COMPRESSION)
|
965 |
#define KSDATAFORMAT_BIT_ATTRIBUTES 1
|
966 |
#define KSDATAFORMAT_ATTRIBUTES (1 << KSDATAFORMAT_BIT_ATTRIBUTES)
|
967 |
|
968 |
#define KSDATARANGE_BIT_ATTRIBUTES 1
|
969 |
#define KSDATARANGE_ATTRIBUTES (1 << KSDATARANGE_BIT_ATTRIBUTES)
|
970 |
#define KSDATARANGE_BIT_REQUIRED_ATTRIBUTES 2
|
971 |
#define KSDATARANGE_REQUIRED_ATTRIBUTES (1 << KSDATARANGE_BIT_REQUIRED_ATTRIBUTES)
|
972 |
|
973 |
#if !defined( _MSC_VER )
|
974 |
typedef struct {
|
975 |
ULONG FormatSize;
|
976 |
ULONG Flags;
|
977 |
ULONG SampleSize;
|
978 |
ULONG Reserved;
|
979 |
GUID MajorFormat;
|
980 |
GUID SubFormat;
|
981 |
GUID Specifier;
|
982 |
} KSDATAFORMAT, *PKSDATAFORMAT, KSDATARANGE, *PKSDATARANGE;
|
983 |
#else
|
984 |
typedef union {
|
985 |
struct {
|
986 |
ULONG FormatSize;
|
987 |
ULONG Flags;
|
988 |
ULONG SampleSize;
|
989 |
ULONG Reserved;
|
990 |
GUID MajorFormat;
|
991 |
GUID SubFormat;
|
992 |
GUID Specifier;
|
993 |
};
|
994 |
LONGLONG Alignment;
|
995 |
} KSDATAFORMAT, *PKSDATAFORMAT, KSDATARANGE, *PKSDATARANGE;
|
996 |
#endif
|
997 |
|
998 |
#define KSATTRIBUTE_REQUIRED 0x00000001
|
999 |
|
1000 |
typedef struct {
|
1001 |
ULONG Size;
|
1002 |
ULONG Flags;
|
1003 |
GUID Attribute;
|
1004 |
} KSATTRIBUTE, *PKSATTRIBUTE;
|
1005 |
|
1006 |
#if defined(_NTDDK_)
|
1007 |
typedef struct {
|
1008 |
ULONG Count;
|
1009 |
PKSATTRIBUTE* Attributes;
|
1010 |
} KSATTRIBUTE_LIST, *PKSATTRIBUTE_LIST;
|
1011 |
#endif // _NTDDK_
|
1012 |
|
1013 |
typedef enum {
|
1014 |
KSPIN_COMMUNICATION_NONE,
|
1015 |
KSPIN_COMMUNICATION_SINK,
|
1016 |
KSPIN_COMMUNICATION_SOURCE,
|
1017 |
KSPIN_COMMUNICATION_BOTH,
|
1018 |
KSPIN_COMMUNICATION_BRIDGE
|
1019 |
} KSPIN_COMMUNICATION, *PKSPIN_COMMUNICATION;
|
1020 |
|
1021 |
typedef KSIDENTIFIER KSPIN_MEDIUM, *PKSPIN_MEDIUM;
|
1022 |
|
1023 |
typedef struct {
|
1024 |
KSPIN_INTERFACE Interface;
|
1025 |
KSPIN_MEDIUM Medium;
|
1026 |
ULONG PinId;
|
1027 |
HANDLE PinToHandle;
|
1028 |
KSPRIORITY Priority;
|
1029 |
} KSPIN_CONNECT, *PKSPIN_CONNECT;
|
1030 |
|
1031 |
typedef struct {
|
1032 |
ULONG Size;
|
1033 |
ULONG Pin;
|
1034 |
WCHAR SymbolicLinkName[1];
|
1035 |
} KSPIN_PHYSICALCONNECTION, *PKSPIN_PHYSICALCONNECTION;
|
1036 |
|
1037 |
#if defined(_NTDDK_)
|
1038 |
typedef
|
1039 |
NTSTATUS
|
1040 |
(*PFNKSINTERSECTHANDLER)(
|
1041 |
IN PIRP Irp,
|
1042 |
IN PKSP_PIN Pin,
|
1043 |
IN PKSDATARANGE DataRange,
|
1044 |
OUT PVOID Data OPTIONAL
|
1045 |
);
|
1046 |
typedef
|
1047 |
NTSTATUS
|
1048 |
(*PFNKSINTERSECTHANDLEREX)(
|
1049 |
IN PVOID Context,
|
1050 |
IN PIRP Irp,
|
1051 |
IN PKSP_PIN Pin,
|
1052 |
IN PKSDATARANGE DataRange,
|
1053 |
IN PKSDATARANGE MatchingDataRange,
|
1054 |
IN ULONG DataBufferSize,
|
1055 |
OUT PVOID Data OPTIONAL,
|
1056 |
OUT PULONG DataSize
|
1057 |
);
|
1058 |
#endif // _NTDDK_
|
1059 |
|
1060 |
#define DEFINE_KSPIN_INTERFACE_TABLE(tablename)\
|
1061 |
const KSPIN_INTERFACE tablename[] =
|
1062 |
|
1063 |
#define DEFINE_KSPIN_INTERFACE_ITEM(guid, interface)\
|
1064 |
{\
|
1065 |
STATICGUIDOF(guid),\
|
1066 |
(interface),\
|
1067 |
0\
|
1068 |
}
|
1069 |
|
1070 |
#define DEFINE_KSPIN_MEDIUM_TABLE( tablename )\
|
1071 |
const KSPIN_MEDIUM tablename[] =
|
1072 |
|
1073 |
#define DEFINE_KSPIN_MEDIUM_ITEM(guid, medium)\
|
1074 |
DEFINE_KSPIN_INTERFACE_ITEM(guid, medium)
|
1075 |
|
1076 |
#define DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(Handler)\
|
1077 |
DEFINE_KSPROPERTY_ITEM(\
|
1078 |
KSPROPERTY_PIN_CINSTANCES,\
|
1079 |
(Handler),\
|
1080 |
sizeof(KSP_PIN),\
|
1081 |
sizeof(KSPIN_CINSTANCES),\
|
1082 |
NULL, NULL, 0, NULL, NULL, 0)
|
1083 |
|
1084 |
#define DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(Handler)\
|
1085 |
DEFINE_KSPROPERTY_ITEM(\
|
1086 |
KSPROPERTY_PIN_CTYPES,\
|
1087 |
(Handler),\
|
1088 |
sizeof(KSPROPERTY),\
|
1089 |
sizeof(ULONG),\
|
1090 |
NULL, NULL, 0, NULL, NULL, 0)
|
1091 |
|
1092 |
#define DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(Handler)\
|
1093 |
DEFINE_KSPROPERTY_ITEM(\
|
1094 |
KSPROPERTY_PIN_DATAFLOW,\
|
1095 |
(Handler),\
|
1096 |
sizeof(KSP_PIN),\
|
1097 |
sizeof(KSPIN_DATAFLOW),\
|
1098 |
NULL, NULL, 0, NULL, NULL, 0)
|
1099 |
|
1100 |
#define DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(Handler)\
|
1101 |
DEFINE_KSPROPERTY_ITEM(\
|
1102 |
KSPROPERTY_PIN_DATARANGES,\
|
1103 |
(Handler),\
|
1104 |
sizeof(KSP_PIN),\
|
1105 |
0,\
|
1106 |
NULL, NULL, 0, NULL, NULL, 0)
|
1107 |
|
1108 |
#define DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(Handler)\
|
1109 |
DEFINE_KSPROPERTY_ITEM(\
|
1110 |
KSPROPERTY_PIN_DATAINTERSECTION,\
|
1111 |
(Handler),\
|
1112 |
sizeof(KSP_PIN) + sizeof(KSMULTIPLE_ITEM),\
|
1113 |
0,\
|
1114 |
NULL, NULL, 0, NULL, NULL, 0)
|
1115 |
|
1116 |
#define DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(Handler)\
|
1117 |
DEFINE_KSPROPERTY_ITEM(\
|
1118 |
KSPROPERTY_PIN_INTERFACES,\
|
1119 |
(Handler),\
|
1120 |
sizeof(KSP_PIN),\
|
1121 |
0,\
|
1122 |
NULL, NULL, 0, NULL, NULL, 0)
|
1123 |
|
1124 |
#define DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(Handler)\
|
1125 |
DEFINE_KSPROPERTY_ITEM(\
|
1126 |
KSPROPERTY_PIN_MEDIUMS,\
|
1127 |
(Handler),\
|
1128 |
sizeof(KSP_PIN),\
|
1129 |
0,\
|
1130 |
NULL, NULL, 0, NULL, NULL, 0)
|
1131 |
|
1132 |
#define DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(Handler)\
|
1133 |
DEFINE_KSPROPERTY_ITEM(\
|
1134 |
KSPROPERTY_PIN_COMMUNICATION,\
|
1135 |
(Handler),\
|
1136 |
sizeof(KSP_PIN),\
|
1137 |
sizeof(KSPIN_COMMUNICATION),\
|
1138 |
NULL, NULL, 0, NULL, NULL, 0)
|
1139 |
|
1140 |
#define DEFINE_KSPROPERTY_ITEM_PIN_GLOBALCINSTANCES(Handler)\
|
1141 |
DEFINE_KSPROPERTY_ITEM(\
|
1142 |
KSPROPERTY_PIN_GLOBALCINSTANCES,\
|
1143 |
(Handler),\
|
1144 |
sizeof(KSP_PIN),\
|
1145 |
sizeof(KSPIN_CINSTANCES),\
|
1146 |
NULL, NULL, 0, NULL, NULL, 0)
|
1147 |
|
1148 |
#define DEFINE_KSPROPERTY_ITEM_PIN_NECESSARYINSTANCES(Handler)\
|
1149 |
DEFINE_KSPROPERTY_ITEM(\
|
1150 |
KSPROPERTY_PIN_NECESSARYINSTANCES,\
|
1151 |
(Handler),\
|
1152 |
sizeof(KSP_PIN),\
|
1153 |
sizeof(ULONG),\
|
1154 |
NULL, NULL, 0, NULL, NULL, 0)
|
1155 |
|
1156 |
#define DEFINE_KSPROPERTY_ITEM_PIN_PHYSICALCONNECTION(Handler)\
|
1157 |
DEFINE_KSPROPERTY_ITEM(\
|
1158 |
KSPROPERTY_PIN_PHYSICALCONNECTION,\
|
1159 |
(Handler),\
|
1160 |
sizeof(KSP_PIN),\
|
1161 |
0,\
|
1162 |
NULL, NULL, 0, NULL, NULL, 0)
|
1163 |
|
1164 |
#define DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(Handler)\
|
1165 |
DEFINE_KSPROPERTY_ITEM(\
|
1166 |
KSPROPERTY_PIN_CATEGORY,\
|
1167 |
(Handler),\
|
1168 |
sizeof(KSP_PIN),\
|
1169 |
sizeof(GUID),\
|
1170 |
NULL, NULL, 0, NULL, NULL, 0)
|
1171 |
|
1172 |
#define DEFINE_KSPROPERTY_ITEM_PIN_NAME(Handler)\
|
1173 |
DEFINE_KSPROPERTY_ITEM(\
|
1174 |
KSPROPERTY_PIN_NAME,\
|
1175 |
(Handler),\
|
1176 |
sizeof(KSP_PIN),\
|
1177 |
0,\
|
1178 |
NULL, NULL, 0, NULL, NULL, 0)
|
1179 |
|
1180 |
#define DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(Handler)\
|
1181 |
DEFINE_KSPROPERTY_ITEM(\
|
1182 |
KSPROPERTY_PIN_CONSTRAINEDDATARANGES,\
|
1183 |
(Handler),\
|
1184 |
sizeof(KSP_PIN),\
|
1185 |
0,\
|
1186 |
NULL, NULL, 0, NULL, NULL, 0)
|
1187 |
|
1188 |
#define DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(Handler)\
|
1189 |
DEFINE_KSPROPERTY_ITEM(\
|
1190 |
KSPROPERTY_PIN_PROPOSEDATAFORMAT,\
|
1191 |
NULL,\
|
1192 |
sizeof(KSP_PIN),\
|
1193 |
sizeof(KSDATAFORMAT),\
|
1194 |
(Handler), NULL, 0, NULL, NULL, 0)
|
1195 |
|
1196 |
#define DEFINE_KSPROPERTY_PINSET(PinSet,\
|
1197 |
PropGeneral, PropInstances, PropIntersection)\
|
1198 |
DEFINE_KSPROPERTY_TABLE(PinSet) {\
|
1199 |
DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
|
1200 |
DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
|
1201 |
DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
|
1202 |
DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
|
1203 |
DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
|
1204 |
DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
|
1205 |
DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
|
1206 |
DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
|
1207 |
DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
|
1208 |
DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral)\
|
1209 |
}
|
1210 |
|
1211 |
#define DEFINE_KSPROPERTY_PINSETCONSTRAINED(PinSet,\
|
1212 |
PropGeneral, PropInstances, PropIntersection)\
|
1213 |
DEFINE_KSPROPERTY_TABLE(PinSet) {\
|
1214 |
DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
|
1215 |
DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
|
1216 |
DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
|
1217 |
DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
|
1218 |
DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
|
1219 |
DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
|
1220 |
DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
|
1221 |
DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
|
1222 |
DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
|
1223 |
DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral),\
|
1224 |
DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral)\
|
1225 |
}
|
1226 |
|
1227 |
#define STATIC_KSNAME_Filter\
|
1228 |
0x9b365890L, 0x165f, 0x11d0, 0xa1, 0x95, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
|
1229 |
DEFINE_GUIDSTRUCT("9b365890-165f-11d0-a195-0020afd156e4", KSNAME_Filter);
|
1230 |
#define KSNAME_Filter DEFINE_GUIDNAMED(KSNAME_Filter)
|
1231 |
|
1232 |
#define KSSTRING_Filter L"{9B365890-165F-11D0-A195-0020AFD156E4}"
|
1233 |
|
1234 |
#define STATIC_KSNAME_Pin\
|
1235 |
0x146F1A80L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
|
1236 |
DEFINE_GUIDSTRUCT("146F1A80-4791-11D0-A5D6-28DB04C10000", KSNAME_Pin);
|
1237 |
#define KSNAME_Pin DEFINE_GUIDNAMED(KSNAME_Pin)
|
1238 |
|
1239 |
#define KSSTRING_Pin L"{146F1A80-4791-11D0-A5D6-28DB04C10000}"
|
1240 |
|
1241 |
#define STATIC_KSNAME_Clock\
|
1242 |
0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
|
1243 |
DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000", KSNAME_Clock);
|
1244 |
#define KSNAME_Clock DEFINE_GUIDNAMED(KSNAME_Clock)
|
1245 |
|
1246 |
#define KSSTRING_Clock L"{53172480-4791-11D0-A5D6-28DB04C10000}"
|
1247 |
|
1248 |
#define STATIC_KSNAME_Allocator\
|
1249 |
0x642F5D00L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
|
1250 |
DEFINE_GUIDSTRUCT("642F5D00-4791-11D0-A5D6-28DB04C10000", KSNAME_Allocator);
|
1251 |
#define KSNAME_Allocator DEFINE_GUIDNAMED(KSNAME_Allocator)
|
1252 |
|
1253 |
#define KSSTRING_Allocator L"{642F5D00-4791-11D0-A5D6-28DB04C10000}"
|
1254 |
|
1255 |
#define KSSTRING_AllocatorEx L"{091BB63B-603F-11D1-B067-00A0C9062802}"
|
1256 |
|
1257 |
#define STATIC_KSNAME_TopologyNode\
|
1258 |
0x0621061AL, 0xEE75, 0x11D0, 0xB9, 0x15, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
|
1259 |
DEFINE_GUIDSTRUCT("0621061A-EE75-11D0-B915-00A0C9223196", KSNAME_TopologyNode);
|
1260 |
#define KSNAME_TopologyNode DEFINE_GUIDNAMED(KSNAME_TopologyNode)
|
1261 |
|
1262 |
#define KSSTRING_TopologyNode L"{0621061A-EE75-11D0-B915-00A0C9223196}"
|
1263 |
|
1264 |
#if defined(_NTDDK_)
|
1265 |
|
1266 |
typedef struct {
|
1267 |
ULONG InterfacesCount;
|
1268 |
const KSPIN_INTERFACE* Interfaces;
|
1269 |
ULONG MediumsCount;
|
1270 |
const KSPIN_MEDIUM* Mediums;
|
1271 |
ULONG DataRangesCount;
|
1272 |
const PKSDATARANGE* DataRanges;
|
1273 |
KSPIN_DATAFLOW DataFlow;
|
1274 |
KSPIN_COMMUNICATION Communication;
|
1275 |
const GUID* Category;
|
1276 |
const GUID* Name;
|
1277 |
union {
|
1278 |
LONGLONG Reserved;
|
1279 |
struct {
|
1280 |
ULONG ConstrainedDataRangesCount;
|
1281 |
PKSDATARANGE* ConstrainedDataRanges;
|
1282 |
};
|
1283 |
};
|
1284 |
} KSPIN_DESCRIPTOR, *PKSPIN_DESCRIPTOR;
|
1285 |
typedef const KSPIN_DESCRIPTOR *PCKSPIN_DESCRIPTOR;
|
1286 |
|
1287 |
#define DEFINE_KSPIN_DESCRIPTOR_TABLE(tablename)\
|
1288 |
const KSPIN_DESCRIPTOR tablename[] =
|
1289 |
|
1290 |
#define DEFINE_KSPIN_DESCRIPTOR_ITEM(\
|
1291 |
InterfacesCount, Interfaces,\
|
1292 |
MediumsCount, Mediums,\
|
1293 |
DataRangesCount, DataRanges,\
|
1294 |
DataFlow, Communication)\
|
1295 |
{\
|
1296 |
InterfacesCount, Interfaces, MediumsCount, Mediums,\
|
1297 |
DataRangesCount, DataRanges, DataFlow, Communication,\
|
1298 |
NULL, NULL, 0\
|
1299 |
}
|
1300 |
#define DEFINE_KSPIN_DESCRIPTOR_ITEMEX(\
|
1301 |
InterfacesCount, Interfaces,\
|
1302 |
MediumsCount, Mediums,\
|
1303 |
DataRangesCount, DataRanges,\
|
1304 |
DataFlow, Communication,\
|
1305 |
Category, Name)\
|
1306 |
{\
|
1307 |
InterfacesCount, Interfaces, MediumsCount, Mediums,\
|
1308 |
DataRangesCount, DataRanges, DataFlow, Communication,\
|
1309 |
Category, Name, 0\
|
1310 |
}
|
1311 |
|
1312 |
#endif // defined(_NTDDK_)
|
1313 |
|
1314 |
//===========================================================================
|
1315 |
|
1316 |
// MEDIATYPE_NULL
|
1317 |
#define STATIC_KSDATAFORMAT_TYPE_WILDCARD STATIC_GUID_NULL
|
1318 |
#define KSDATAFORMAT_TYPE_WILDCARD GUID_NULL
|
1319 |
|
1320 |
// MEDIASUBTYPE_NULL
|
1321 |
#define STATIC_KSDATAFORMAT_SUBTYPE_WILDCARD STATIC_GUID_NULL
|
1322 |
#define KSDATAFORMAT_SUBTYPE_WILDCARD GUID_NULL
|
1323 |
|
1324 |
// MEDIATYPE_Stream
|
1325 |
#define STATIC_KSDATAFORMAT_TYPE_STREAM\
|
1326 |
0xE436EB83L, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70
|
1327 |
DEFINE_GUIDSTRUCT("E436EB83-524F-11CE-9F53-0020AF0BA770", KSDATAFORMAT_TYPE_STREAM);
|
1328 |
#define KSDATAFORMAT_TYPE_STREAM DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_STREAM)
|
1329 |
|
1330 |
// MEDIASUBTYPE_None
|
1331 |
#define STATIC_KSDATAFORMAT_SUBTYPE_NONE\
|
1332 |
0xE436EB8EL, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70
|
1333 |
DEFINE_GUIDSTRUCT("E436EB8E-524F-11CE-9F53-0020AF0BA770", KSDATAFORMAT_SUBTYPE_NONE);
|
1334 |
#define KSDATAFORMAT_SUBTYPE_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_NONE)
|
1335 |
|
1336 |
#define STATIC_KSDATAFORMAT_SPECIFIER_WILDCARD STATIC_GUID_NULL
|
1337 |
#define KSDATAFORMAT_SPECIFIER_WILDCARD GUID_NULL
|
1338 |
|
1339 |
#define STATIC_KSDATAFORMAT_SPECIFIER_FILENAME\
|
1340 |
0xAA797B40L, 0xE974, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
|
1341 |
DEFINE_GUIDSTRUCT("AA797B40-E974-11CF-A5D6-28DB04C10000", KSDATAFORMAT_SPECIFIER_FILENAME);
|
1342 |
#define KSDATAFORMAT_SPECIFIER_FILENAME DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_FILENAME)
|
1343 |
|
1344 |
#define STATIC_KSDATAFORMAT_SPECIFIER_FILEHANDLE\
|
1345 |
0x65E8773CL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
|
1346 |
DEFINE_GUIDSTRUCT("65E8773C-8F56-11D0-A3B9-00A0C9223196", KSDATAFORMAT_SPECIFIER_FILEHANDLE);
|
1347 |
#define KSDATAFORMAT_SPECIFIER_FILEHANDLE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_FILEHANDLE)
|
1348 |
|
1349 |
// FORMAT_None
|
1350 |
#define STATIC_KSDATAFORMAT_SPECIFIER_NONE\
|
1351 |
0x0F6417D6L, 0xC318, 0x11D0, 0xA4, 0x3F, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
|
1352 |
DEFINE_GUIDSTRUCT("0F6417D6-C318-11D0-A43F-00A0C9223196", KSDATAFORMAT_SPECIFIER_NONE);
|
1353 |
#define KSDATAFORMAT_SPECIFIER_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_NONE)
|
1354 |
|
1355 |
//===========================================================================
|
1356 |
|
1357 |
#define STATIC_KSPROPSETID_Quality \
|
1358 |
0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
|
1359 |
DEFINE_GUIDSTRUCT("D16AD380-AC1A-11CF-A5D6-28DB04C10000", KSPROPSETID_Quality);
|
1360 |
#define KSPROPSETID_Quality DEFINE_GUIDNAMED(KSPROPSETID_Quality)
|
1361 |
|
1362 |
typedef enum {
|
1363 |
KSPROPERTY_QUALITY_REPORT,
|
1364 |
KSPROPERTY_QUALITY_ERROR
|
1365 |
} KSPROPERTY_QUALITY;
|
1366 |
|
1367 |
#define DEFINE_KSPROPERTY_ITEM_QUALITY_REPORT(GetHandler, SetHandler)\
|
1368 |
DEFINE_KSPROPERTY_ITEM(\
|
1369 |
KSPROPERTY_QUALITY_REPORT,\
|
1370 |
(GetHandler),\
|
1371 |
sizeof(KSPROPERTY),\
|
1372 |
sizeof(KSQUALITY),\
|
1373 |
(SetHandler),\
|
1374 |
NULL, 0, NULL, NULL, 0)
|
1375 |
|
1376 |
#define DEFINE_KSPROPERTY_ITEM_QUALITY_ERROR(GetHandler, SetHandler)\
|
1377 |
DEFINE_KSPROPERTY_ITEM(\
|
1378 |
KSPROPERTY_QUALITY_ERROR,\
|
1379 |
(GetHandler),\
|
1380 |
sizeof(KSPROPERTY),\
|
1381 |
sizeof(KSERROR),\
|
1382 |
(SetHandler),\
|
1383 |
NULL, 0, NULL, NULL, 0)
|
1384 |
|
1385 |
//===========================================================================
|
1386 |
|
1387 |
#define STATIC_KSPROPSETID_Connection \
|
1388 |
0x1D58C920L, 0xAC9B, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
|
1389 |
DEFINE_GUIDSTRUCT("1D58C920-AC9B-11CF-A5D6-28DB04C10000", KSPROPSETID_Connection);
|
1390 |
#define KSPROPSETID_Connection DEFINE_GUIDNAMED(KSPROPSETID_Connection)
|
1391 |
|
1392 |
typedef enum {
|
1393 |
KSPROPERTY_CONNECTION_STATE,
|
1394 |
KSPROPERTY_CONNECTION_PRIORITY,
|
1395 |
KSPROPERTY_CONNECTION_DATAFORMAT,
|
1396 |
KSPROPERTY_CONNECTION_ALLOCATORFRAMING,
|
1397 |
KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT,
|
1398 |
KSPROPERTY_CONNECTION_ACQUIREORDERING,
|
1399 |
KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,
|
1400 |
KSPROPERTY_CONNECTION_STARTAT
|
1401 |
} KSPROPERTY_CONNECTION;
|
1402 |
|
1403 |
#define DEFINE_KSPROPERTY_ITEM_CONNECTION_STATE(GetHandler, SetHandler)\
|
1404 |
DEFINE_KSPROPERTY_ITEM(\
|
1405 |
KSPROPERTY_CONNECTION_STATE,\
|
1406 |
(GetHandler),\
|
1407 |
sizeof(KSPROPERTY),\
|
1408 |
sizeof(KSSTATE),\
|
1409 |
(SetHandler),\
|
1410 |
NULL, 0, NULL, NULL, 0)
|
1411 |
|
1412 |
#define DEFINE_KSPROPERTY_ITEM_CONNECTION_PRIORITY(GetHandler, SetHandler)\
|
1413 |
DEFINE_KSPROPERTY_ITEM(\
|
1414 |
KSPROPERTY_CONNECTION_PRIORITY,\
|
1415 |
(GetHandler),\
|
1416 |
sizeof(KSPROPERTY),\
|
1417 |
sizeof(KSPRIORITY),\
|
1418 |
(SetHandler),\
|
1419 |
NULL, 0, NULL, NULL, 0)
|
1420 |
|
1421 |
#define DEFINE_KSPROPERTY_ITEM_CONNECTION_DATAFORMAT(GetHandler, SetHandler)\
|
1422 |
DEFINE_KSPROPERTY_ITEM(\
|
1423 |
KSPROPERTY_CONNECTION_DATAFORMAT,\
|
1424 |
(GetHandler),\
|
1425 |
sizeof(KSPROPERTY),\
|
1426 |
0,\
|
1427 |
(SetHandler),\
|
1428 |
NULL, 0, NULL, NULL, 0)
|
1429 |
|
1430 |
#define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING(Handler)\
|
1431 |
DEFINE_KSPROPERTY_ITEM(\
|
1432 |
KSPROPERTY_CONNECTION_ALLOCATORFRAMING,\
|
1433 |
(Handler),\
|
1434 |
sizeof(KSPROPERTY),\
|
1435 |
sizeof(KSALLOCATOR_FRAMING),\
|
1436 |
NULL, NULL, 0, NULL, NULL, 0)
|
1437 |
|
1438 |
#define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING_EX(Handler)\
|
1439 |
DEFINE_KSPROPERTY_ITEM(\
|
1440 |
KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,\
|
1441 |
(Handler),\
|
1442 |
sizeof(KSPROPERTY),\
|
1443 |
sizeof(KSALLOCATOR_FRAMING_EX),\
|
1444 |
NULL, NULL, 0, NULL, NULL, 0)
|
1445 |
|
1446 |
#define DEFINE_KSPROPERTY_ITEM_CONNECTION_PROPOSEDATAFORMAT(Handler)\
|
1447 |
DEFINE_KSPROPERTY_ITEM(\
|
1448 |
KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT,\
|
1449 |
NULL,\
|
1450 |
sizeof(KSPROPERTY),\
|
1451 |
sizeof(KSDATAFORMAT),\
|
1452 |
(Handler),\
|
1453 |
NULL, 0, NULL, NULL, 0)
|
1454 |
|
1455 |
#define DEFINE_KSPROPERTY_ITEM_CONNECTION_ACQUIREORDERING(Handler)\
|
1456 |
DEFINE_KSPROPERTY_ITEM(\
|
1457 |
KSPROPERTY_CONNECTION_ACQUIREORDERING,\
|
1458 |
(Handler),\
|
1459 |
sizeof(KSPROPERTY),\
|
1460 |
sizeof(int),\
|
1461 |
NULL, NULL, 0, NULL, NULL, 0)
|
1462 |
|
1463 |
#define DEFINE_KSPROPERTY_ITEM_CONNECTION_STARTAT(Handler)\
|
1464 |
DEFINE_KSPROPERTY_ITEM(\
|
1465 |
KSPROPERTY_CONNECTION_STARTAT,\
|
1466 |
NULL,\
|
1467 |
sizeof(KSPROPERTY),\
|
1468 |
sizeof(KSRELATIVEEVENT),\
|
1469 |
(Handler),\
|
1470 |
NULL, 0, NULL, NULL, 0)
|
1471 |
|
1472 |
//===========================================================================
|
1473 |
//
|
1474 |
// pins flags
|
1475 |
//
|
1476 |
#define KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER 0x00000001
|
1477 |
#define KSALLOCATOR_REQUIREMENTF_SYSTEM_MEMORY 0x00000002
|
1478 |
#define KSALLOCATOR_REQUIREMENTF_FRAME_INTEGRITY 0x00000004
|
1479 |
#define KSALLOCATOR_REQUIREMENTF_MUST_ALLOCATE 0x00000008
|
1480 |
#define KSALLOCATOR_REQUIREMENTF_PREFERENCES_ONLY 0x80000000
|
1481 |
|
1482 |
#define KSALLOCATOR_OPTIONF_COMPATIBLE 0x00000001
|
1483 |
#define KSALLOCATOR_OPTIONF_SYSTEM_MEMORY 0x00000002
|
1484 |
#define KSALLOCATOR_OPTIONF_VALID 0x00000003
|
1485 |
//
|
1486 |
// pins extended framing flags
|
1487 |
//
|
1488 |
#define KSALLOCATOR_FLAG_PARTIAL_READ_SUPPORT 0x00000010
|
1489 |
#define KSALLOCATOR_FLAG_DEVICE_SPECIFIC 0x00000020
|
1490 |
#define KSALLOCATOR_FLAG_CAN_ALLOCATE 0x00000040
|
1491 |
#define KSALLOCATOR_FLAG_INSIST_ON_FRAMESIZE_RATIO 0x00000080
|
1492 |
//
|
1493 |
// allocator pipes flags
|
1494 |
//
|
1495 |
// there is at least one data modification in a pipe
|
1496 |
#define KSALLOCATOR_FLAG_NO_FRAME_INTEGRITY 0x00000100
|
1497 |
#define KSALLOCATOR_FLAG_MULTIPLE_OUTPUT 0x00000200
|
1498 |
#define KSALLOCATOR_FLAG_CYCLE 0x00000400
|
1499 |
#define KSALLOCATOR_FLAG_ALLOCATOR_EXISTS 0x00000800
|
1500 |
// there is no framing dependency between neighbouring pipes.
|
1501 |
#define KSALLOCATOR_FLAG_INDEPENDENT_RANGES 0x00001000
|
1502 |
#define KSALLOCATOR_FLAG_ATTENTION_STEPPING 0x00002000
|
1503 |
|
1504 |
|
1505 |
//
|
1506 |
// old Framing structure
|
1507 |
//
|
1508 |
typedef struct {
|
1509 |
union {
|
1510 |
ULONG OptionsFlags; // allocator options (create)
|
1511 |
ULONG RequirementsFlags; // allocation requirements (query)
|
1512 |
};
|
1513 |
#if defined(_NTDDK_)
|
1514 |
POOL_TYPE PoolType;
|
1515 |
#else // !_NTDDK_
|
1516 |
ULONG PoolType;
|
1517 |
#endif // !_NTDDK_
|
1518 |
ULONG Frames; // total number of allowable outstanding frames
|
1519 |
ULONG FrameSize; // total size of frame
|
1520 |
ULONG FileAlignment;
|
1521 |
ULONG Reserved;
|
1522 |
} KSALLOCATOR_FRAMING, *PKSALLOCATOR_FRAMING;
|
1523 |
|
1524 |
#if defined(_NTDDK_)
|
1525 |
typedef
|
1526 |
PVOID
|
1527 |
(*PFNKSDEFAULTALLOCATE)(
|
1528 |
IN PVOID Context
|
1529 |
);
|
1530 |
|
1531 |
typedef
|
1532 |
VOID
|
1533 |
(*PFNKSDEFAULTFREE)(
|
1534 |
IN PVOID Context,
|
1535 |
IN PVOID Buffer
|
1536 |
);
|
1537 |
|
1538 |
typedef
|
1539 |
NTSTATUS
|
1540 |
(*PFNKSINITIALIZEALLOCATOR)(
|
1541 |
IN PVOID InitialContext,
|
1542 |
IN PKSALLOCATOR_FRAMING AllocatorFraming,
|
1543 |
OUT PVOID* Context
|
1544 |
);
|
1545 |
|
1546 |
typedef
|
1547 |
VOID
|
1548 |
(*PFNKSDELETEALLOCATOR)(
|
1549 |
IN PVOID Context
|
1550 |
);
|
1551 |
#endif // !_NTDDK_
|
1552 |
|
1553 |
//
|
1554 |
// new Framing structure, eventually will replace KSALLOCATOR_FRAMING.
|
1555 |
//
|
1556 |
typedef struct {
|
1557 |
ULONG MinFrameSize;
|
1558 |
ULONG MaxFrameSize;
|
1559 |
ULONG Stepping;
|
1560 |
} KS_FRAMING_RANGE, *PKS_FRAMING_RANGE;
|
1561 |
|
1562 |
|
1563 |
typedef struct {
|
1564 |
KS_FRAMING_RANGE Range;
|
1565 |
ULONG InPlaceWeight;
|
1566 |
ULONG NotInPlaceWeight;
|
1567 |
} KS_FRAMING_RANGE_WEIGHTED, *PKS_FRAMING_RANGE_WEIGHTED;
|
1568 |
|
1569 |
|
1570 |
typedef struct {
|
1571 |
ULONG RatioNumerator; // compression/expansion ratio
|
1572 |
ULONG RatioDenominator;
|
1573 |
ULONG RatioConstantMargin;
|
1574 |
} KS_COMPRESSION, *PKS_COMPRESSION;
|
1575 |
|
1576 |
|
1577 |
//
|
1578 |
// Memory Types and Buses are repeated in each entry.
|
1579 |
// Easiest to use but takes a little more memory than the varsize layout Pin\Memories\Buses\Ranges.
|
1580 |
//
|
1581 |
typedef struct {
|
1582 |
GUID MemoryType;
|
1583 |
GUID BusType;
|
1584 |
ULONG MemoryFlags;
|
1585 |
ULONG BusFlags;
|
1586 |
ULONG Flags;
|
1587 |
ULONG Frames; // total number of allowable outstanding frames
|
1588 |
ULONG FileAlignment;
|
1589 |
ULONG MemoryTypeWeight; // this memory type Weight pin-wide
|
1590 |
KS_FRAMING_RANGE PhysicalRange;
|
1591 |
KS_FRAMING_RANGE_WEIGHTED FramingRange;
|
1592 |
} KS_FRAMING_ITEM, *PKS_FRAMING_ITEM;
|
1593 |
|
1594 |
|
1595 |
typedef struct {
|
1596 |
ULONG CountItems; // count of FramingItem-s below.
|
1597 |
ULONG PinFlags;
|
1598 |
KS_COMPRESSION OutputCompression;
|
1599 |
ULONG PinWeight; // this pin framing's Weight graph-wide
|
1600 |
KS_FRAMING_ITEM FramingItem[1];
|
1601 |
} KSALLOCATOR_FRAMING_EX, *PKSALLOCATOR_FRAMING_EX;
|
1602 |
|
1603 |
|
1604 |
|
1605 |
//
|
1606 |
// define memory type GUIDs
|
1607 |
//
|
1608 |
#define KSMEMORY_TYPE_WILDCARD GUID_NULL
|
1609 |
#define STATIC_KSMEMORY_TYPE_WILDCARD STATIC_GUID_NULL
|
1610 |
|
1611 |
#define KSMEMORY_TYPE_DONT_CARE GUID_NULL
|
1612 |
#define STATIC_KSMEMORY_TYPE_DONT_CARE STATIC_GUID_NULL
|
1613 |
|
1614 |
#define KS_TYPE_DONT_CARE GUID_NULL
|
1615 |
#define STATIC_KS_TYPE_DONT_CARE STATIC_GUID_NULL
|
1616 |
|
1617 |
#define STATIC_KSMEMORY_TYPE_SYSTEM \
|
1618 |
0x091bb638L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
|
1619 |
DEFINE_GUIDSTRUCT("091bb638-603f-11d1-b067-00a0c9062802", KSMEMORY_TYPE_SYSTEM);
|
1620 |
#define KSMEMORY_TYPE_SYSTEM DEFINE_GUIDNAMED(KSMEMORY_TYPE_SYSTEM)
|
1621 |
|
1622 |
#define STATIC_KSMEMORY_TYPE_USER \
|
1623 |
0x8cb0fc28L, 0x7893, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
|
1624 |
DEFINE_GUIDSTRUCT("8cb0fc28-7893-11d1-b069-00a0c9062802", KSMEMORY_TYPE_USER);
|
1625 |
#define KSMEMORY_TYPE_USER DEFINE_GUIDNAMED(KSMEMORY_TYPE_USER)
|
1626 |
|
1627 |
#define STATIC_KSMEMORY_TYPE_KERNEL_PAGED \
|
1628 |
0xd833f8f8L, 0x7894, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
|
1629 |
DEFINE_GUIDSTRUCT("d833f8f8-7894-11d1-b069-00a0c9062802", KSMEMORY_TYPE_KERNEL_PAGED);
|
1630 |
#define KSMEMORY_TYPE_KERNEL_PAGED DEFINE_GUIDNAMED(KSMEMORY_TYPE_KERNEL_PAGED)
|
1631 |
|
1632 |
#define STATIC_KSMEMORY_TYPE_KERNEL_NONPAGED \
|
1633 |
0x4a6d5fc4L, 0x7895, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
|
1634 |
DEFINE_GUIDSTRUCT("4a6d5fc4-7895-11d1-b069-00a0c9062802", KSMEMORY_TYPE_KERNEL_NONPAGED);
|
1635 |
#define KSMEMORY_TYPE_KERNEL_NONPAGED DEFINE_GUIDNAMED(KSMEMORY_TYPE_KERNEL_NONPAGED)
|
1636 |
|
1637 |
// old KS clients did not specify the device memory type
|
1638 |
#define STATIC_KSMEMORY_TYPE_DEVICE_UNKNOWN \
|
1639 |
0x091bb639L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
|
1640 |
DEFINE_GUIDSTRUCT("091bb639-603f-11d1-b067-00a0c9062802", KSMEMORY_TYPE_DEVICE_UNKNOWN);
|
1641 |
#define KSMEMORY_TYPE_DEVICE_UNKNOWN DEFINE_GUIDNAMED(KSMEMORY_TYPE_DEVICE_UNKNOWN)
|
1642 |
|
1643 |
//
|
1644 |
// Helper framing macros.
|
1645 |
//
|
1646 |
#define DECLARE_SIMPLE_FRAMING_EX(FramingExName, MemoryType, Flags, Frames, Alignment, MinFrameSize, MaxFrameSize) \
|
1647 |
const KSALLOCATOR_FRAMING_EX FramingExName = \
|
1648 |
{\
|
1649 |
1, \
|
1650 |
0, \
|
1651 |
{\
|
1652 |
1, \
|
1653 |
1, \
|
1654 |
0 \
|
1655 |
}, \
|
1656 |
0, \
|
1657 |
{\
|
1658 |
{\
|
1659 |
MemoryType, \
|
1660 |
STATIC_KS_TYPE_DONT_CARE, \
|
1661 |
0, \
|
1662 |
0, \
|
1663 |
Flags, \
|
1664 |
Frames, \
|
1665 |
Alignment, \
|
1666 |
0, \
|
1667 |
{\
|
1668 |
0, \
|
1669 |
(ULONG)-1, \
|
1670 |
1 \
|
1671 |
}, \
|
1672 |
{\
|
1673 |
{\
|
1674 |
MinFrameSize, \
|
1675 |
MaxFrameSize, \
|
1676 |
1 \
|
1677 |
}, \
|
1678 |
0, \
|
1679 |
0 \
|
1680 |
}\
|
1681 |
}\
|
1682 |
}\
|
1683 |
}
|
1684 |
|
1685 |
#define SetDefaultKsCompression(KsCompressionPointer) \
|
1686 |
{\
|
1687 |
KsCompressionPointer->RatioNumerator = 1;\
|
1688 |
KsCompressionPointer->RatioDenominator = 1;\
|
1689 |
KsCompressionPointer->RatioConstantMargin = 0;\
|
1690 |
}
|
1691 |
|
1692 |
#define SetDontCareKsFramingRange(KsFramingRangePointer) \
|
1693 |
{\
|
1694 |
KsFramingRangePointer->MinFrameSize = 0;\
|
1695 |
KsFramingRangePointer->MaxFrameSize = (ULONG) -1;\
|
1696 |
KsFramingRangePointer->Stepping = 1;\
|
1697 |
}
|
1698 |
|
1699 |
#define SetKsFramingRange(KsFramingRangePointer, P_MinFrameSize, P_MaxFrameSize) \
|
1700 |
{\
|
1701 |
KsFramingRangePointer->MinFrameSize = P_MinFrameSize;\
|
1702 |
KsFramingRangePointer->MaxFrameSize = P_MaxFrameSize;\
|
1703 |
KsFramingRangePointer->Stepping = 1;\
|
1704 |
}
|
1705 |
|
1706 |
#define SetKsFramingRangeWeighted(KsFramingRangeWeightedPointer, P_MinFrameSize, P_MaxFrameSize) \
|
1707 |
{\
|
1708 |
KS_FRAMING_RANGE *KsFramingRange = &KsFramingRangeWeightedPointer->Range;\
|
1709 |
SetKsFramingRange(KsFramingRange, P_MinFrameSize, P_MaxFrameSize);\
|
1710 |
KsFramingRangeWeightedPointer->InPlaceWeight = 0;\
|
1711 |
KsFramingRangeWeightedPointer->NotInPlaceWeight = 0;\
|
1712 |
}
|
1713 |
|
1714 |
#define INITIALIZE_SIMPLE_FRAMING_EX(FramingExPointer, P_MemoryType, P_Flags, P_Frames, P_Alignment, P_MinFrameSize, P_MaxFrameSize) \
|
1715 |
{\
|
1716 |
KS_COMPRESSION *KsCompression = &FramingExPointer->OutputCompression;\
|
1717 |
KS_FRAMING_RANGE *KsFramingRange = &FramingExPointer->FramingItem[0].PhysicalRange;\
|
1718 |
KS_FRAMING_RANGE_WEIGHTED *KsFramingRangeWeighted = &FramingExPointer->FramingItem[0].FramingRange;\
|
1719 |
FramingExPointer->CountItems = 1;\
|
1720 |
FramingExPointer->PinFlags = 0;\
|
1721 |
SetDefaultKsCompression(KsCompression);\
|
1722 |
FramingExPointer->PinWeight = 0;\
|
1723 |
FramingExPointer->FramingItem[0].MemoryType = P_MemoryType;\
|
1724 |
FramingExPointer->FramingItem[0].BusType = KS_TYPE_DONT_CARE;\
|
1725 |
FramingExPointer->FramingItem[0].MemoryFlags = 0;\
|
1726 |
FramingExPointer->FramingItem[0].BusFlags = 0;\
|
1727 |
FramingExPointer->FramingItem[0].Flags = P_Flags;\
|
1728 |
FramingExPointer->FramingItem[0].Frames = P_Frames;\
|
1729 |
FramingExPointer->FramingItem[0].FileAlignment = P_Alignment;\
|
1730 |
FramingExPointer->FramingItem[0].MemoryTypeWeight = 0;\
|
1731 |
SetDontCareKsFramingRange(KsFramingRange);\
|
1732 |
SetKsFramingRangeWeighted(KsFramingRangeWeighted, P_MinFrameSize, P_MaxFrameSize);\
|
1733 |
}
|
1734 |
|
1735 |
|
1736 |
|
1737 |
// KSEVENTSETID_StreamAllocator: {75D95571-073C-11d0-A161-0020AFD156E4}
|
1738 |
|
1739 |
#define STATIC_KSEVENTSETID_StreamAllocator\
|
1740 |
0x75d95571L, 0x073c, 0x11d0, 0xa1, 0x61, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
|
1741 |
DEFINE_GUIDSTRUCT("75d95571-073c-11d0-a161-0020afd156e4", KSEVENTSETID_StreamAllocator);
|
1742 |
#define KSEVENTSETID_StreamAllocator DEFINE_GUIDNAMED(KSEVENTSETID_StreamAllocator)
|
1743 |
|
1744 |
typedef enum {
|
1745 |
KSEVENT_STREAMALLOCATOR_INTERNAL_FREEFRAME,
|
1746 |
KSEVENT_STREAMALLOCATOR_FREEFRAME
|
1747 |
} KSEVENT_STREAMALLOCATOR;
|
1748 |
|
1749 |
#define STATIC_KSMETHODSETID_StreamAllocator\
|
1750 |
0xcf6e4341L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
|
1751 |
DEFINE_GUIDSTRUCT("cf6e4341-ec87-11cf-a130-0020afd156e4", KSMETHODSETID_StreamAllocator);
|
1752 |
#define KSMETHODSETID_StreamAllocator DEFINE_GUIDNAMED(KSMETHODSETID_StreamAllocator)
|
1753 |
|
1754 |
typedef enum {
|
1755 |
KSMETHOD_STREAMALLOCATOR_ALLOC,
|
1756 |
KSMETHOD_STREAMALLOCATOR_FREE
|
1757 |
} KSMETHOD_STREAMALLOCATOR;
|
1758 |
|
1759 |
#define DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_ALLOC(Handler)\
|
1760 |
DEFINE_KSMETHOD_ITEM(\
|
1761 |
KSMETHOD_STREAMALLOCATOR_ALLOC,\
|
1762 |
KSMETHOD_TYPE_WRITE,\
|
1763 |
(Handler),\
|
1764 |
sizeof(KSMETHOD),\
|
1765 |
sizeof(PVOID),\
|
1766 |
NULL)
|
1767 |
|
1768 |
#define DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_FREE(Handler)\
|
1769 |
DEFINE_KSMETHOD_ITEM(\
|
1770 |
KSMETHOD_STREAMALLOCATOR_FREE,\
|
1771 |
KSMETHOD_TYPE_READ,\
|
1772 |
(Handler),\
|
1773 |
sizeof(KSMETHOD),\
|
1774 |
sizeof(PVOID),\
|
1775 |
NULL)
|
1776 |
|
1777 |
#define DEFINE_KSMETHOD_ALLOCATORSET(AllocatorSet, MethodAlloc, MethodFree)\
|
1778 |
DEFINE_KSMETHOD_TABLE(AllocatorSet) {\
|
1779 |
DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_ALLOC(MethodAlloc),\
|
1780 |
DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_FREE(MethodFree)\
|
1781 |
}
|
1782 |
|
1783 |
#define STATIC_KSPROPSETID_StreamAllocator\
|
1784 |
0xcf6e4342L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
|
1785 |
DEFINE_GUIDSTRUCT("cf6e4342-ec87-11cf-a130-0020afd156e4", KSPROPSETID_StreamAllocator);
|
1786 |
#define KSPROPSETID_StreamAllocator DEFINE_GUIDNAMED(KSPROPSETID_StreamAllocator)
|
1787 |
|
1788 |
#if defined(_NTDDK_)
|
1789 |
typedef enum {
|
1790 |
KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE,
|
1791 |
KSPROPERTY_STREAMALLOCATOR_STATUS
|
1792 |
} KSPROPERTY_STREAMALLOCATOR;
|
1793 |
|
1794 |
#define DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_FUNCTIONTABLE(Handler)\
|
1795 |
DEFINE_KSPROPERTY_ITEM(\
|
1796 |
KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE,\
|
1797 |
(Handler),\
|
1798 |
sizeof(KSPROPERTY),\
|
1799 |
sizeof(KSSTREAMALLOCATOR_FUNCTIONTABLE),\
|
1800 |
NULL, NULL, 0, NULL, NULL, 0)
|
1801 |
|
1802 |
#define DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_STATUS(Handler)\
|
1803 |
DEFINE_KSPROPERTY_ITEM(\
|
1804 |
KSPROPERTY_STREAMALLOCATOR_STATUS,\
|
1805 |
(Handler),\
|
1806 |
sizeof(KSPROPERTY),\
|
1807 |
sizeof(KSSTREAMALLOCATOR_STATUS),\
|
1808 |
NULL, NULL, 0, NULL, NULL, 0)
|
1809 |
|
1810 |
#define DEFINE_KSPROPERTY_ALLOCATORSET(AllocatorSet, PropFunctionTable, PropStatus)\
|
1811 |
DEFINE_KSPROPERTY_TABLE(AllocatorSet) {\
|
1812 |
DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_STATUS(PropStatus),\
|
1813 |
DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_FUNCTIONTABLE(PropFunctionTable)\
|
1814 |
}
|
1815 |
|
1816 |
typedef
|
1817 |
NTSTATUS
|
1818 |
(*PFNALLOCATOR_ALLOCATEFRAME)(
|
1819 |
IN PFILE_OBJECT FileObject,
|
1820 |
PVOID *Frame
|
1821 |
);
|
1822 |
|
1823 |
typedef
|
1824 |
VOID
|
1825 |
(*PFNALLOCATOR_FREEFRAME)(
|
1826 |
IN PFILE_OBJECT FileObject,
|
1827 |
IN PVOID Frame
|
1828 |
);
|
1829 |
|
1830 |
typedef struct {
|
1831 |
PFNALLOCATOR_ALLOCATEFRAME AllocateFrame;
|
1832 |
PFNALLOCATOR_FREEFRAME FreeFrame;
|
1833 |
} KSSTREAMALLOCATOR_FUNCTIONTABLE, *PKSSTREAMALLOCATOR_FUNCTIONTABLE;
|
1834 |
#endif // defined(_NTDDK_)
|
1835 |
|
1836 |
typedef struct {
|
1837 |
KSALLOCATOR_FRAMING Framing;
|
1838 |
ULONG AllocatedFrames;
|
1839 |
ULONG Reserved;
|
1840 |
} KSSTREAMALLOCATOR_STATUS, *PKSSTREAMALLOCATOR_STATUS;
|
1841 |
|
1842 |
typedef struct {
|
1843 |
KSALLOCATOR_FRAMING_EX Framing;
|
1844 |
ULONG AllocatedFrames;
|
1845 |
ULONG Reserved;
|
1846 |
} KSSTREAMALLOCATOR_STATUS_EX, *PKSSTREAMALLOCATOR_STATUS_EX;
|
1847 |
|
1848 |
|
1849 |
#define KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT 0x00000001
|
1850 |
#define KSSTREAM_HEADER_OPTIONSF_PREROLL 0x00000002
|
1851 |
#define KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY 0x00000004
|
1852 |
#define KSSTREAM_HEADER_OPTIONSF_TYPECHANGED 0x00000008
|
1853 |
#define KSSTREAM_HEADER_OPTIONSF_TIMEVALID 0x00000010
|
1854 |
#define KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY 0x00000040
|
1855 |
#define KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE 0x00000080
|
1856 |
#define KSSTREAM_HEADER_OPTIONSF_DURATIONVALID 0x00000100
|
1857 |
#define KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM 0x00000200
|
1858 |
#define KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA 0x80000000
|
1859 |
|
1860 |
typedef struct {
|
1861 |
LONGLONG Time;
|
1862 |
ULONG Numerator;
|
1863 |
ULONG Denominator;
|
1864 |
} KSTIME, *PKSTIME;
|
1865 |
|
1866 |
typedef struct {
|
1867 |
ULONG Size;
|
1868 |
ULONG TypeSpecificFlags;
|
1869 |
KSTIME PresentationTime;
|
1870 |
LONGLONG Duration;
|
1871 |
ULONG FrameExtent;
|
1872 |
ULONG DataUsed;
|
1873 |
PVOID Data;
|
1874 |
ULONG OptionsFlags;
|
1875 |
#if _WIN64
|
1876 |
ULONG Reserved;
|
1877 |
#endif
|
1878 |
} KSSTREAM_HEADER, *PKSSTREAM_HEADER;
|
1879 |
|
1880 |
#define STATIC_KSPROPSETID_StreamInterface\
|
1881 |
0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
|
1882 |
DEFINE_GUIDSTRUCT("1fdd8ee1-9cd3-11d0-82aa-0000f822fe8a", KSPROPSETID_StreamInterface);
|
1883 |
#define KSPROPSETID_StreamInterface DEFINE_GUIDNAMED(KSPROPSETID_StreamInterface)
|
1884 |
|
1885 |
typedef enum {
|
1886 |
KSPROPERTY_STREAMINTERFACE_HEADERSIZE
|
1887 |
} KSPROPERTY_STREAMINTERFACE;
|
1888 |
|
1889 |
#define DEFINE_KSPROPERTY_ITEM_STREAMINTERFACE_HEADERSIZE( GetHandler )\
|
1890 |
DEFINE_KSPROPERTY_ITEM(\
|
1891 |
KSPROPERTY_STREAMINTERFACE_HEADERSIZE,\
|
1892 |
(GetHandler),\
|
1893 |
sizeof(KSPROPERTY),\
|
1894 |
sizeof(ULONG),\
|
1895 |
NULL, NULL, 0, NULL, NULL, 0)
|
1896 |
|
1897 |
#define DEFINE_KSPROPERTY_STREAMINTERFACESET(StreamInterfaceSet,\
|
1898 |
HeaderSizeHandler)\
|
1899 |
DEFINE_KSPROPERTY_TABLE(StreamInterfaceSet) {\
|
1900 |
DEFINE_KSPROPERTY_ITEM_STREAMINTERFACE_HEADERSIZE( HeaderSizeHandler )\
|
1901 |
}
|
1902 |
|
1903 |
#define STATIC_KSPROPSETID_Stream\
|
1904 |
0x65aaba60L, 0x98ae, 0x11cf, 0xa1, 0x0d, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
|
1905 |
DEFINE_GUIDSTRUCT("65aaba60-98ae-11cf-a10d-0020afd156e4", KSPROPSETID_Stream);
|
1906 |
#define KSPROPSETID_Stream DEFINE_GUIDNAMED(KSPROPSETID_Stream)
|
1907 |
|
1908 |
typedef enum {
|
1909 |
KSPROPERTY_STREAM_ALLOCATOR,
|
1910 |
KSPROPERTY_STREAM_QUALITY,
|
1911 |
KSPROPERTY_STREAM_DEGRADATION,
|
1912 |
KSPROPERTY_STREAM_MASTERCLOCK,
|
1913 |
KSPROPERTY_STREAM_TIMEFORMAT,
|
1914 |
KSPROPERTY_STREAM_PRESENTATIONTIME,
|
1915 |
KSPROPERTY_STREAM_PRESENTATIONEXTENT,
|
1916 |
KSPROPERTY_STREAM_FRAMETIME,
|
1917 |
KSPROPERTY_STREAM_RATECAPABILITY,
|
1918 |
KSPROPERTY_STREAM_RATE,
|
1919 |
KSPROPERTY_STREAM_PIPE_ID
|
1920 |
} KSPROPERTY_STREAM;
|
1921 |
|
1922 |
#define DEFINE_KSPROPERTY_ITEM_STREAM_ALLOCATOR(GetHandler, SetHandler)\
|
1923 |
DEFINE_KSPROPERTY_ITEM(\
|
1924 |
KSPROPERTY_STREAM_ALLOCATOR,\
|
1925 |
(GetHandler),\
|
1926 |
sizeof(KSPROPERTY),\
|
1927 |
sizeof(HANDLE),\
|
1928 |
(SetHandler),\
|
1929 |
NULL, 0, NULL, NULL, 0)
|
1930 |
|
1931 |
#define DEFINE_KSPROPERTY_ITEM_STREAM_QUALITY(Handler)\
|
1932 |
DEFINE_KSPROPERTY_ITEM(\
|
1933 |
KSPROPERTY_STREAM_QUALITY,\
|
1934 |
(Handler),\
|
1935 |
sizeof(KSPROPERTY),\
|
1936 |
sizeof(KSQUALITY_MANAGER),\
|
1937 |
NULL, NULL, 0, NULL, NULL, 0)
|
1938 |
|
1939 |
#define DEFINE_KSPROPERTY_ITEM_STREAM_DEGRADATION(GetHandler, SetHandler)\
|
1940 |
DEFINE_KSPROPERTY_ITEM(\
|
1941 |
KSPROPERTY_STREAM_DEGRADATION,\
|
1942 |
(GetHandler),\
|
1943 |
sizeof(KSPROPERTY),\
|
1944 |
0,\
|
1945 |
(SetHandler),\
|
1946 |
NULL, 0, NULL, NULL, 0)
|
1947 |
|
1948 |
#define DEFINE_KSPROPERTY_ITEM_STREAM_MASTERCLOCK(GetHandler, SetHandler)\
|
1949 |
DEFINE_KSPROPERTY_ITEM(\
|
1950 |
KSPROPERTY_STREAM_MASTERCLOCK,\
|
1951 |
(GetHandler),\
|
1952 |
sizeof(KSPROPERTY),\
|
1953 |
sizeof(HANDLE),\
|
1954 |
(SetHandler),\
|
1955 |
NULL, 0, NULL, NULL, 0)
|
1956 |
|
1957 |
#define DEFINE_KSPROPERTY_ITEM_STREAM_TIMEFORMAT(Handler)\
|
1958 |
DEFINE_KSPROPERTY_ITEM(\
|
1959 |
KSPROPERTY_STREAM_TIMEFORMAT,\
|
1960 |
(Handler),\
|
1961 |
sizeof(KSPROPERTY),\
|
1962 |
sizeof(GUID),\
|
1963 |
NULL, NULL, 0, NULL, NULL, 0)
|
1964 |
|
1965 |
#define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONTIME(GetHandler, SetHandler)\
|
1966 |
DEFINE_KSPROPERTY_ITEM(\
|
1967 |
KSPROPERTY_STREAM_PRESENTATIONTIME,\
|
1968 |
(GetHandler),\
|
1969 |
sizeof(KSPROPERTY),\
|
1970 |
sizeof(KSTIME),\
|
1971 |
(SetHandler),\
|
1972 |
NULL, 0, NULL, NULL, 0)
|
1973 |
|
1974 |
#define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONEXTENT(Handler)\
|
1975 |
DEFINE_KSPROPERTY_ITEM(\
|
1976 |
KSPROPERTY_STREAM_PRESENTATIONEXTENT,\
|
1977 |
(Handler),\
|
1978 |
sizeof(KSPROPERTY),\
|
1979 |
sizeof(LONGLONG),\
|
1980 |
NULL, NULL, 0, NULL, NULL, 0)
|
1981 |
|
1982 |
#define DEFINE_KSPROPERTY_ITEM_STREAM_FRAMETIME(Handler)\
|
1983 |
DEFINE_KSPROPERTY_ITEM(\
|
1984 |
KSPROPERTY_STREAM_FRAMETIME,\
|
1985 |
(Handler),\
|
1986 |
sizeof(KSPROPERTY),\
|
1987 |
sizeof(KSFRAMETIME),\
|
1988 |
NULL, NULL, 0, NULL, NULL, 0)
|
1989 |
|
1990 |
#define DEFINE_KSPROPERTY_ITEM_STREAM_RATECAPABILITY(Handler)\
|
1991 |
DEFINE_KSPROPERTY_ITEM(\
|
1992 |
KSPROPERTY_STREAM_RATECAPABILITY,\
|
1993 |
(Handler),\
|
1994 |
sizeof(KSRATE_CAPABILITY),\
|
1995 |
sizeof(KSRATE),\
|
1996 |
NULL, NULL, 0, NULL, NULL, 0)
|
1997 |
|
1998 |
#define DEFINE_KSPROPERTY_ITEM_STREAM_RATE(GetHandler, SetHandler)\
|
1999 |
DEFINE_KSPROPERTY_ITEM(\
|
2000 |
KSPROPERTY_STREAM_RATE,\
|
2001 |
(GetHandler),\
|
2002 |
sizeof(KSPROPERTY),\
|
2003 |
sizeof(KSRATE),\
|
2004 |
(SetHandler),\
|
2005 |
NULL, 0, NULL, NULL, 0)
|
2006 |
|
2007 |
#define DEFINE_KSPROPERTY_ITEM_STREAM_PIPE_ID(GetHandler, SetHandler)\
|
2008 |
DEFINE_KSPROPERTY_ITEM(\
|
2009 |
KSPROPERTY_STREAM_PIPE_ID,\
|
2010 |
(GetHandler),\
|
2011 |
sizeof(KSPROPERTY),\
|
2012 |
sizeof(HANDLE),\
|
2013 |
(SetHandler),\
|
2014 |
NULL, 0, NULL, NULL, 0)
|
2015 |
|
2016 |
typedef struct {
|
2017 |
HANDLE QualityManager;
|
2018 |
PVOID Context;
|
2019 |
} KSQUALITY_MANAGER, *PKSQUALITY_MANAGER;
|
2020 |
|
2021 |
typedef struct {
|
2022 |
LONGLONG Duration;
|
2023 |
ULONG FrameFlags;
|
2024 |
ULONG Reserved;
|
2025 |
} KSFRAMETIME, *PKSFRAMETIME;
|
2026 |
|
2027 |
#define KSFRAMETIME_VARIABLESIZE 0x00000001
|
2028 |
|
2029 |
typedef struct {
|
2030 |
LONGLONG PresentationStart;
|
2031 |
LONGLONG Duration;
|
2032 |
KSPIN_INTERFACE Interface;
|
2033 |
LONG Rate;
|
2034 |
ULONG Flags;
|
2035 |
} KSRATE, *PKSRATE;
|
2036 |
|
2037 |
#define KSRATE_NOPRESENTATIONSTART 0x00000001
|
2038 |
#define KSRATE_NOPRESENTATIONDURATION 0x00000002
|
2039 |
|
2040 |
typedef struct {
|
2041 |
KSPROPERTY Property;
|
2042 |
KSRATE Rate;
|
2043 |
} KSRATE_CAPABILITY, *PKSRATE_CAPABILITY;
|
2044 |
|
2045 |
#define STATIC_KSPROPSETID_Clock \
|
2046 |
0xDF12A4C0L, 0xAC17, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
|
2047 |
DEFINE_GUIDSTRUCT("DF12A4C0-AC17-11CF-A5D6-28DB04C10000", KSPROPSETID_Clock);
|
2048 |
#define KSPROPSETID_Clock DEFINE_GUIDNAMED(KSPROPSETID_Clock)
|
2049 |
|
2050 |
//
|
2051 |
// Performs a x*y/z operation on 64 bit quantities by splitting the operation. The equation
|
2052 |
// is simplified with respect to adding in the remainder for the upper 32 bits.
|
2053 |
//
|
2054 |
// (xh * 10000000 / Frequency) * 2^32 + ((((xh * 10000000) % Frequency) * 2^32 + (xl * 10000000)) / Frequency)
|
2055 |
//
|
2056 |
#define NANOSECONDS 10000000
|
2057 |
#define KSCONVERT_PERFORMANCE_TIME(Frequency, PerformanceTime) \
|
2058 |
((((ULONGLONG)(ULONG)(PerformanceTime).HighPart * NANOSECONDS / (Frequency)) << 32) + \
|
2059 |
((((((ULONGLONG)(ULONG)(PerformanceTime).HighPart * NANOSECONDS) % (Frequency)) << 32) + \
|
2060 |
((ULONGLONG)(PerformanceTime).LowPart * NANOSECONDS)) / (Frequency)))
|
2061 |
|
2062 |
typedef struct {
|
2063 |
ULONG CreateFlags;
|
2064 |
} KSCLOCK_CREATE, *PKSCLOCK_CREATE;
|
2065 |
|
2066 |
typedef struct {
|
2067 |
LONGLONG Time;
|
2068 |
LONGLONG SystemTime;
|
2069 |
} KSCORRELATED_TIME, *PKSCORRELATED_TIME;
|
2070 |
|
2071 |
typedef struct {
|
2072 |
LONGLONG Granularity;
|
2073 |
LONGLONG Error;
|
2074 |
} KSRESOLUTION, *PKSRESOLUTION;
|
2075 |
|
2076 |
typedef enum {
|
2077 |
KSPROPERTY_CLOCK_TIME,
|
2078 |
KSPROPERTY_CLOCK_PHYSICALTIME,
|
2079 |
KSPROPERTY_CLOCK_CORRELATEDTIME,
|
2080 |
KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME,
|
2081 |
KSPROPERTY_CLOCK_RESOLUTION,
|
2082 |
KSPROPERTY_CLOCK_STATE,
|
2083 |
#if defined(_NTDDK_)
|
2084 |
KSPROPERTY_CLOCK_FUNCTIONTABLE
|
2085 |
#endif // defined(_NTDDK_)
|
2086 |
} KSPROPERTY_CLOCK;
|
2087 |
|
2088 |
#if defined(_NTDDK_)
|
2089 |
|
2090 |
typedef
|
2091 |
LONGLONG
|
2092 |
(FASTCALL *PFNKSCLOCK_GETTIME)(
|
2093 |
IN PFILE_OBJECT FileObject
|
2094 |
);
|
2095 |
typedef
|
2096 |
LONGLONG
|
2097 |
(FASTCALL *PFNKSCLOCK_CORRELATEDTIME)(
|
2098 |
IN PFILE_OBJECT FileObject,
|
2099 |
OUT PLONGLONG SystemTime);
|
2100 |
|
2101 |
typedef struct {
|
2102 |
PFNKSCLOCK_GETTIME GetTime;
|
2103 |
PFNKSCLOCK_GETTIME GetPhysicalTime;
|
2104 |
PFNKSCLOCK_CORRELATEDTIME GetCorrelatedTime;
|
2105 |
PFNKSCLOCK_CORRELATEDTIME GetCorrelatedPhysicalTime;
|
2106 |
} KSCLOCK_FUNCTIONTABLE, *PKSCLOCK_FUNCTIONTABLE;
|
2107 |
|
2108 |
typedef
|
2109 |
BOOLEAN
|
2110 |
(*PFNKSSETTIMER)(
|
2111 |
IN PVOID Context,
|
2112 |
IN PKTIMER Timer,
|
2113 |
IN LARGE_INTEGER DueTime,
|
2114 |
IN PKDPC Dpc
|
2115 |
);
|
2116 |
|
2117 |
typedef
|
2118 |
BOOLEAN
|
2119 |
(*PFNKSCANCELTIMER)(
|
2120 |
IN PVOID Context,
|
2121 |
IN PKTIMER Timer
|
2122 |
);
|
2123 |
|
2124 |
typedef
|
2125 |
LONGLONG
|
2126 |
(FASTCALL *PFNKSCORRELATEDTIME)(
|
2127 |
IN PVOID Context,
|
2128 |
OUT PLONGLONG SystemTime);
|
2129 |
|
2130 |
typedef PVOID PKSDEFAULTCLOCK;
|
2131 |
|
2132 |
#define DEFINE_KSPROPERTY_ITEM_CLOCK_TIME(Handler)\
|
2133 |
DEFINE_KSPROPERTY_ITEM(\
|
2134 |
KSPROPERTY_CLOCK_TIME,\
|
2135 |
(Handler),\
|
2136 |
sizeof(KSPROPERTY),\
|
2137 |
sizeof(LONGLONG),\
|
2138 |
NULL, NULL, 0, NULL, NULL, 0)
|
2139 |
|
2140 |
#define DEFINE_KSPROPERTY_ITEM_CLOCK_PHYSICALTIME(Handler)\
|
2141 |
DEFINE_KSPROPERTY_ITEM(\
|
2142 |
KSPROPERTY_CLOCK_PHYSICALTIME,\
|
2143 |
(Handler),\
|
2144 |
sizeof(KSPROPERTY),\
|
2145 |
sizeof(LONGLONG),\
|
2146 |
NULL, NULL, 0, NULL, NULL, 0)
|
2147 |
|
2148 |
#define DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDTIME(Handler)\
|
2149 |
DEFINE_KSPROPERTY_ITEM(\
|
2150 |
KSPROPERTY_CLOCK_CORRELATEDTIME,\
|
2151 |
(Handler),\
|
2152 |
sizeof(KSPROPERTY),\
|
2153 |
sizeof(KSCORRELATED_TIME),\
|
2154 |
NULL, NULL, 0, NULL, NULL, 0)
|
2155 |
|
2156 |
#define DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDPHYSICALTIME(Handler)\
|
2157 |
DEFINE_KSPROPERTY_ITEM(\
|
2158 |
KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME,\
|
2159 |
(Handler),\
|
2160 |
sizeof(KSPROPERTY),\
|
2161 |
sizeof(KSCORRELATED_TIME),\
|
2162 |
NULL, NULL, 0, NULL, NULL, 0)
|
2163 |
|
2164 |
#define DEFINE_KSPROPERTY_ITEM_CLOCK_RESOLUTION(Handler)\
|
2165 |
DEFINE_KSPROPERTY_ITEM(\
|
2166 |
KSPROPERTY_CLOCK_RESOLUTION,\
|
2167 |
(Handler),\
|
2168 |
sizeof(KSPROPERTY),\
|
2169 |
sizeof(KSRESOLUTION),\
|
2170 |
NULL, NULL, 0, NULL, NULL, 0)
|
2171 |
|
2172 |
#define DEFINE_KSPROPERTY_ITEM_CLOCK_STATE(Handler)\
|
2173 |
DEFINE_KSPROPERTY_ITEM(\
|
2174 |
KSPROPERTY_CLOCK_STATE,\
|
2175 |
(Handler),\
|
2176 |
sizeof(KSPROPERTY),\
|
2177 |
sizeof(KSSTATE),\
|
2178 |
NULL, NULL, 0, NULL, NULL, 0)
|
2179 |
|
2180 |
#define DEFINE_KSPROPERTY_ITEM_CLOCK_FUNCTIONTABLE(Handler)\
|
2181 |
DEFINE_KSPROPERTY_ITEM(\
|
2182 |
KSPROPERTY_CLOCK_FUNCTIONTABLE,\
|
2183 |
(Handler),\
|
2184 |
sizeof(KSPROPERTY),\
|
2185 |
sizeof(KSCLOCK_FUNCTIONTABLE),\
|
2186 |
NULL, NULL, 0, NULL, NULL, 0)
|
2187 |
|
2188 |
#define DEFINE_KSPROPERTY_CLOCKSET(ClockSet,\
|
2189 |
PropTime, PropPhysicalTime,\
|
2190 |
PropCorrelatedTime, PropCorrelatedPhysicalTime,\
|
2191 |
PropResolution, PropState, PropFunctionTable)\
|
2192 |
DEFINE_KSPROPERTY_TABLE(ClockSet) {\
|
2193 |
DEFINE_KSPROPERTY_ITEM_CLOCK_TIME(PropTime),\
|
2194 |
DEFINE_KSPROPERTY_ITEM_CLOCK_PHYSICALTIME(PropPhysicalTime),\
|
2195 |
DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDTIME(PropCorrelatedTime),\
|
2196 |
DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDPHYSICALTIME(PropCorrelatedPhysicalTime),\
|
2197 |
DEFINE_KSPROPERTY_ITEM_CLOCK_RESOLUTION(PropResolution),\
|
2198 |
DEFINE_KSPROPERTY_ITEM_CLOCK_STATE(PropState),\
|
2199 |
DEFINE_KSPROPERTY_ITEM_CLOCK_FUNCTIONTABLE(PropFunctionTable),\
|
2200 |
}
|
2201 |
|
2202 |
#endif // defined(_NTDDK_)
|
2203 |
|
2204 |
#define STATIC_KSEVENTSETID_Clock \
|
2205 |
0x364D8E20L, 0x62C7, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
|
2206 |
DEFINE_GUIDSTRUCT("364D8E20-62C7-11CF-A5D6-28DB04C10000", KSEVENTSETID_Clock);
|
2207 |
#define KSEVENTSETID_Clock DEFINE_GUIDNAMED(KSEVENTSETID_Clock)
|
2208 |
|
2209 |
typedef enum {
|
2210 |
KSEVENT_CLOCK_INTERVAL_MARK,
|
2211 |
KSEVENT_CLOCK_POSITION_MARK
|
2212 |
} KSEVENT_CLOCK_POSITION;
|
2213 |
|
2214 |
#define STATIC_KSEVENTSETID_Connection\
|
2215 |
0x7f4bcbe0L, 0x9ea5, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00
|
2216 |
DEFINE_GUIDSTRUCT("7f4bcbe0-9ea5-11cf-a5d6-28db04c10000", KSEVENTSETID_Connection);
|
2217 |
#define KSEVENTSETID_Connection DEFINE_GUIDNAMED(KSEVENTSETID_Connection)
|
2218 |
|
2219 |
typedef enum {
|
2220 |
KSEVENT_CONNECTION_POSITIONUPDATE,
|
2221 |
KSEVENT_CONNECTION_DATADISCONTINUITY,
|
2222 |
KSEVENT_CONNECTION_TIMEDISCONTINUITY,
|
2223 |
KSEVENT_CONNECTION_PRIORITY,
|
2224 |
KSEVENT_CONNECTION_ENDOFSTREAM
|
2225 |
} KSEVENT_CONNECTION;
|
2226 |
|
2227 |
typedef struct {
|
2228 |
PVOID Context;
|
2229 |
ULONG Proportion;
|
2230 |
LONGLONG DeltaTime;
|
2231 |
} KSQUALITY, *PKSQUALITY;
|
2232 |
|
2233 |
typedef struct {
|
2234 |
PVOID Context;
|
2235 |
ULONG Status;
|
2236 |
} KSERROR, *PKSERROR;
|
2237 |
|
2238 |
typedef KSIDENTIFIER KSDEGRADE, *PKSDEGRADE;
|
2239 |
|
2240 |
#define STATIC_KSDEGRADESETID_Standard\
|
2241 |
0x9F564180L, 0x704C, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
|
2242 |
DEFINE_GUIDSTRUCT("9F564180-704C-11D0-A5D6-28DB04C10000", KSDEGRADESETID_Standard);
|
2243 |
#define KSDEGRADESETID_Standard DEFINE_GUIDNAMED(KSDEGRADESETID_Standard)
|
2244 |
|
2245 |
typedef enum {
|
2246 |
KSDEGRADE_STANDARD_SAMPLE,
|
2247 |
KSDEGRADE_STANDARD_QUALITY,
|
2248 |
KSDEGRADE_STANDARD_COMPUTATION,
|
2249 |
KSDEGRADE_STANDARD_SKIP
|
2250 |
} KSDEGRADE_STANDARD;
|
2251 |
|
2252 |
#if defined(_NTDDK_)
|
2253 |
|
2254 |
#define KSPROBE_STREAMREAD 0x00000000
|
2255 |
#define KSPROBE_STREAMWRITE 0x00000001
|
2256 |
#define KSPROBE_ALLOCATEMDL 0x00000010
|
2257 |
#define KSPROBE_PROBEANDLOCK 0x00000020
|
2258 |
#define KSPROBE_SYSTEMADDRESS 0x00000040
|
2259 |
#define KSPROBE_MODIFY 0x00000200
|
2260 |
#define KSPROBE_STREAMWRITEMODIFY (KSPROBE_MODIFY | KSPROBE_STREAMWRITE)
|
2261 |
#define KSPROBE_ALLOWFORMATCHANGE 0x00000080
|
2262 |
|
2263 |
#define KSSTREAM_READ KSPROBE_STREAMREAD
|
2264 |
#define KSSTREAM_WRITE KSPROBE_STREAMWRITE
|
2265 |
#define KSSTREAM_PAGED_DATA 0x00000000
|
2266 |
#define KSSTREAM_NONPAGED_DATA 0x00000100
|
2267 |
#define KSSTREAM_SYNCHRONOUS 0x00001000
|
2268 |
#define KSSTREAM_FAILUREEXCEPTION 0x00002000
|
2269 |
|
2270 |
typedef
|
2271 |
NTSTATUS
|
2272 |
(*PFNKSCONTEXT_DISPATCH)(
|
2273 |
IN PVOID Context,
|
2274 |
IN PIRP Irp
|
2275 |
);
|
2276 |
|
2277 |
typedef
|
2278 |
NTSTATUS
|
2279 |
(*PFNKSHANDLER)(
|
2280 |
IN PIRP Irp,
|
2281 |
IN PKSIDENTIFIER Request,
|
2282 |
IN OUT PVOID Data
|
2283 |
);
|
2284 |
|
2285 |
typedef
|
2286 |
BOOLEAN
|
2287 |
(*PFNKSFASTHANDLER)(
|
2288 |
IN PFILE_OBJECT FileObject,
|
2289 |
IN PKSIDENTIFIER UNALIGNED Request,
|
2290 |
IN ULONG RequestLength,
|
2291 |
IN OUT PVOID UNALIGNED Data,
|
2292 |
IN ULONG DataLength,
|
2293 |
OUT PIO_STATUS_BLOCK IoStatus
|
2294 |
);
|
2295 |
|
2296 |
typedef
|
2297 |
NTSTATUS
|
2298 |
(*PFNKSALLOCATOR)(
|
2299 |
IN PIRP Irp,
|
2300 |
IN ULONG BufferSize,
|
2301 |
IN BOOLEAN InputOperation
|
2302 |
);
|
2303 |
|
2304 |
typedef struct {
|
2305 |
KSPROPERTY_MEMBERSHEADER MembersHeader;
|
2306 |
const VOID* Members;
|
2307 |
} KSPROPERTY_MEMBERSLIST, *PKSPROPERTY_MEMBERSLIST;
|
2308 |
|
2309 |
typedef struct {
|
2310 |
KSIDENTIFIER PropTypeSet;
|
2311 |
ULONG MembersListCount;
|
2312 |
const KSPROPERTY_MEMBERSLIST* MembersList;
|
2313 |
} KSPROPERTY_VALUES, *PKSPROPERTY_VALUES;
|
2314 |
|
2315 |
#define DEFINE_KSPROPERTY_TABLE(tablename)\
|
2316 |
const KSPROPERTY_ITEM tablename[] =
|
2317 |
|
2318 |
#define DEFINE_KSPROPERTY_ITEM(PropertyId, GetHandler,\
|
2319 |
MinProperty,\
|
2320 |
MinData,\
|
2321 |
SetHandler,\
|
2322 |
Values, RelationsCount, Relations, SupportHandler,\
|
2323 |
SerializedSize)\
|
2324 |
{\
|
2325 |
PropertyId, (PFNKSHANDLER)GetHandler, MinProperty, MinData,\
|
2326 |
(PFNKSHANDLER)SetHandler,\
|
2327 |
(PKSPROPERTY_VALUES)Values, RelationsCount, (PKSPROPERTY)Relations,\
|
2328 |
(PFNKSHANDLER)SupportHandler, (ULONG)SerializedSize\
|
2329 |
}
|
2330 |
|
2331 |
typedef struct {
|
2332 |
ULONG PropertyId;
|
2333 |
union {
|
2334 |
PFNKSHANDLER GetPropertyHandler;
|
2335 |
BOOLEAN GetSupported;
|
2336 |
};
|
2337 |
ULONG MinProperty;
|
2338 |
ULONG MinData;
|
2339 |
union {
|
2340 |
PFNKSHANDLER SetPropertyHandler;
|
2341 |
BOOLEAN SetSupported;
|
2342 |
};
|
2343 |
const KSPROPERTY_VALUES*Values;
|
2344 |
ULONG RelationsCount;
|
2345 |
const KSPROPERTY* Relations;
|
2346 |
PFNKSHANDLER SupportHandler;
|
2347 |
ULONG SerializedSize;
|
2348 |
} KSPROPERTY_ITEM, *PKSPROPERTY_ITEM;
|
2349 |
|
2350 |
#define DEFINE_KSFASTPROPERTY_ITEM(PropertyId, GetHandler, SetHandler)\
|
2351 |
{\
|
2352 |
PropertyId, (PFNKSFASTHANDLER)GetHandler, (PFNKSFASTHANDLER)SetHandler, 0\
|
2353 |
}
|
2354 |
|
2355 |
typedef struct {
|
2356 |
ULONG PropertyId;
|
2357 |
union {
|
2358 |
PFNKSFASTHANDLER GetPropertyHandler;
|
2359 |
BOOLEAN GetSupported;
|
2360 |
};
|
2361 |
union {
|
2362 |
PFNKSFASTHANDLER SetPropertyHandler;
|
2363 |
BOOLEAN SetSupported;
|
2364 |
};
|
2365 |
ULONG Reserved;
|
2366 |
} KSFASTPROPERTY_ITEM, *PKSFASTPROPERTY_ITEM;
|
2367 |
|
2368 |
#define DEFINE_KSPROPERTY_SET(Set,\
|
2369 |
PropertiesCount,\
|
2370 |
PropertyItem,\
|
2371 |
FastIoCount,\
|
2372 |
FastIoTable)\
|
2373 |
{\
|
2374 |
Set,\
|
2375 |
PropertiesCount,\
|
2376 |
PropertyItem,\
|
2377 |
FastIoCount,\
|
2378 |
FastIoTable\
|
2379 |
}
|
2380 |
|
2381 |
#define DEFINE_KSPROPERTY_SET_TABLE(tablename)\
|
2382 |
const KSPROPERTY_SET tablename[] =
|
2383 |
|
2384 |
typedef struct {
|
2385 |
const GUID* Set;
|
2386 |
ULONG PropertiesCount;
|
2387 |
const KSPROPERTY_ITEM* PropertyItem;
|
2388 |
ULONG FastIoCount;
|
2389 |
const KSFASTPROPERTY_ITEM* FastIoTable;
|
2390 |
} KSPROPERTY_SET, *PKSPROPERTY_SET;
|
2391 |
|
2392 |
#define DEFINE_KSMETHOD_TABLE(tablename)\
|
2393 |
const KSMETHOD_ITEM tablename[] =
|
2394 |
|
2395 |
#define DEFINE_KSMETHOD_ITEM(MethodId, Flags,\
|
2396 |
MethodHandler,\
|
2397 |
MinMethod, MinData, SupportHandler)\
|
2398 |
{\
|
2399 |
MethodId, (PFNKSHANDLER)MethodHandler, MinMethod, MinData,\
|
2400 |
SupportHandler, Flags\
|
2401 |
}
|
2402 |
|
2403 |
typedef struct {
|
2404 |
ULONG MethodId;
|
2405 |
union {
|
2406 |
PFNKSHANDLER MethodHandler;
|
2407 |
BOOLEAN MethodSupported;
|
2408 |
};
|
2409 |
ULONG MinMethod;
|
2410 |
ULONG MinData;
|
2411 |
PFNKSHANDLER SupportHandler;
|
2412 |
ULONG Flags;
|
2413 |
} KSMETHOD_ITEM, *PKSMETHOD_ITEM;
|
2414 |
|
2415 |
#define DEFINE_KSFASTMETHOD_ITEM(MethodId, MethodHandler)\
|
2416 |
{\
|
2417 |
MethodId, (PFNKSFASTHANDLER)MethodHandler\
|
2418 |
}
|
2419 |
|
2420 |
typedef struct {
|
2421 |
ULONG MethodId;
|
2422 |
union {
|
2423 |
PFNKSFASTHANDLER MethodHandler;
|
2424 |
BOOLEAN MethodSupported;
|
2425 |
};
|
2426 |
} KSFASTMETHOD_ITEM, *PKSFASTMETHOD_ITEM;
|
2427 |
|
2428 |
#define DEFINE_KSMETHOD_SET(Set,\
|
2429 |
MethodsCount,\
|
2430 |
MethodItem,\
|
2431 |
FastIoCount,\
|
2432 |
FastIoTable)\
|
2433 |
{\
|
2434 |
Set,\
|
2435 |
MethodsCount,\
|
2436 |
MethodItem,\
|
2437 |
FastIoCount,\
|
2438 |
FastIoTable\
|
2439 |
}
|
2440 |
|
2441 |
#define DEFINE_KSMETHOD_SET_TABLE(tablename)\
|
2442 |
const KSMETHOD_SET tablename[] =
|
2443 |
|
2444 |
typedef struct {
|
2445 |
const GUID* Set;
|
2446 |
ULONG MethodsCount;
|
2447 |
const KSMETHOD_ITEM* MethodItem;
|
2448 |
ULONG FastIoCount;
|
2449 |
const KSFASTMETHOD_ITEM*FastIoTable;
|
2450 |
} KSMETHOD_SET, *PKSMETHOD_SET;
|
2451 |
|
2452 |
typedef struct _KSEVENT_ENTRY
|
2453 |
KSEVENT_ENTRY, *PKSEVENT_ENTRY;
|
2454 |
|
2455 |
typedef
|
2456 |
NTSTATUS
|
2457 |
(*PFNKSADDEVENT)(
|
2458 |
IN PIRP Irp,
|
2459 |
IN PKSEVENTDATA EventData,
|
2460 |
IN struct _KSEVENT_ENTRY* EventEntry
|
2461 |
);
|
2462 |
|
2463 |
typedef
|
2464 |
VOID
|
2465 |
(*PFNKSREMOVEEVENT)(
|
2466 |
IN PFILE_OBJECT FileObject,
|
2467 |
IN struct _KSEVENT_ENTRY* EventEntry
|
2468 |
);
|
2469 |
|
2470 |
#define DEFINE_KSEVENT_TABLE(tablename)\
|
2471 |
const KSEVENT_ITEM tablename[] =
|
2472 |
|
2473 |
#define DEFINE_KSEVENT_ITEM(EventId, DataInput, ExtraEntryData,\
|
2474 |
AddHandler, RemoveHandler, SupportHandler)\
|
2475 |
{\
|
2476 |
EventId,\
|
2477 |
DataInput,\
|
2478 |
ExtraEntryData,\
|
2479 |
AddHandler,\
|
2480 |
RemoveHandler,\
|
2481 |
SupportHandler\
|
2482 |
}
|
2483 |
|
2484 |
typedef struct {
|
2485 |
ULONG EventId;
|
2486 |
ULONG DataInput;
|
2487 |
ULONG ExtraEntryData;
|
2488 |
PFNKSADDEVENT AddHandler;
|
2489 |
PFNKSREMOVEEVENT RemoveHandler;
|
2490 |
PFNKSHANDLER SupportHandler;
|
2491 |
} KSEVENT_ITEM, *PKSEVENT_ITEM;
|
2492 |
|
2493 |
#define DEFINE_KSEVENT_SET(Set,\
|
2494 |
EventsCount,\
|
2495 |
EventItem)\
|
2496 |
{\
|
2497 |
Set, EventsCount, EventItem\
|
2498 |
}
|
2499 |
|
2500 |
#define DEFINE_KSEVENT_SET_TABLE(tablename)\
|
2501 |
const KSEVENT_SET tablename[] =
|
2502 |
|
2503 |
typedef struct {
|
2504 |
const GUID* Set;
|
2505 |
ULONG EventsCount;
|
2506 |
const KSEVENT_ITEM* EventItem;
|
2507 |
} KSEVENT_SET, *PKSEVENT_SET;
|
2508 |
|
2509 |
typedef struct {
|
2510 |
KDPC Dpc;
|
2511 |
ULONG ReferenceCount;
|
2512 |
KSPIN_LOCK AccessLock;
|
2513 |
} KSDPC_ITEM, *PKSDPC_ITEM;
|
2514 |
|
2515 |
typedef struct {
|
2516 |
KSDPC_ITEM DpcItem;
|
2517 |
LIST_ENTRY BufferList;
|
2518 |
} KSBUFFER_ITEM, *PKSBUFFER_ITEM;
|
2519 |
|
2520 |
#define KSEVENT_ENTRY_DELETED 1
|
2521 |
#define KSEVENT_ENTRY_ONESHOT 2
|
2522 |
#define KSEVENT_ENTRY_BUFFERED 4
|
2523 |
|
2524 |
struct _KSEVENT_ENTRY {
|
2525 |
LIST_ENTRY ListEntry;
|
2526 |
PVOID Object;
|
2527 |
union {
|
2528 |
PKSDPC_ITEM DpcItem;
|
2529 |
PKSBUFFER_ITEM BufferItem;
|
2530 |
};
|
2531 |
PKSEVENTDATA EventData;
|
2532 |
ULONG NotificationType;
|
2533 |
const KSEVENT_SET* EventSet;
|
2534 |
const KSEVENT_ITEM* EventItem;
|
2535 |
PFILE_OBJECT FileObject;
|
2536 |
ULONG SemaphoreAdjustment;
|
2537 |
ULONG Reserved;
|
2538 |
ULONG Flags;
|
2539 |
};
|
2540 |
|
2541 |
typedef enum {
|
2542 |
KSEVENTS_NONE,
|
2543 |
KSEVENTS_SPINLOCK,
|
2544 |
KSEVENTS_MUTEX,
|
2545 |
KSEVENTS_FMUTEX,
|
2546 |
KSEVENTS_FMUTEXUNSAFE,
|
2547 |
KSEVENTS_INTERRUPT,
|
2548 |
KSEVENTS_ERESOURCE
|
2549 |
} KSEVENTS_LOCKTYPE;
|
2550 |
|
2551 |
#define KSDISPATCH_FASTIO 0x80000000
|
2552 |
|
2553 |
typedef struct {
|
2554 |
PDRIVER_DISPATCH Create;
|
2555 |
PVOID Context;
|
2556 |
UNICODE_STRING ObjectClass;
|
2557 |
PSECURITY_DESCRIPTOR SecurityDescriptor;
|
2558 |
ULONG Flags;
|
2559 |
} KSOBJECT_CREATE_ITEM, *PKSOBJECT_CREATE_ITEM;
|
2560 |
|
2561 |
typedef
|
2562 |
VOID
|
2563 |
(*PFNKSITEMFREECALLBACK)(
|
2564 |
IN PKSOBJECT_CREATE_ITEM CreateItem
|
2565 |
);
|
2566 |
|
2567 |
#define KSCREATE_ITEM_SECURITYCHANGED 0x00000001
|
2568 |
#define KSCREATE_ITEM_WILDCARD 0x00000002
|
2569 |
#define KSCREATE_ITEM_NOPARAMETERS 0x00000004
|
2570 |
#define KSCREATE_ITEM_FREEONSTOP 0x00000008
|
2571 |
|
2572 |
#define DEFINE_KSCREATE_DISPATCH_TABLE( tablename )\
|
2573 |
KSOBJECT_CREATE_ITEM tablename[] =
|
2574 |
|
2575 |
#define DEFINE_KSCREATE_ITEM(DispatchCreate, TypeName, Context)\
|
2576 |
{\
|
2577 |
(DispatchCreate),\
|
2578 |
(PVOID)(Context),\
|
2579 |
{\
|
2580 |
sizeof(TypeName) - sizeof(UNICODE_NULL),\
|
2581 |
sizeof(TypeName),\
|
2582 |
(PWCHAR)(TypeName)\
|
2583 |
},\
|
2584 |
NULL, 0\
|
2585 |
}
|
2586 |
|
2587 |
#define DEFINE_KSCREATE_ITEMEX(DispatchCreate, TypeName, Context, Flags)\
|
2588 |
{\
|
2589 |
(DispatchCreate),\
|
2590 |
(PVOID)(Context),\
|
2591 |
{\
|
2592 |
sizeof(TypeName) - sizeof(UNICODE_NULL),\
|
2593 |
sizeof(TypeName),\
|
2594 |
(PWCHAR)(TypeName)\
|
2595 |
},\
|
2596 |
NULL, (Flags)\
|
2597 |
}
|
2598 |
|
2599 |
#define DEFINE_KSCREATE_ITEMNULL( DispatchCreate, Context )\
|
2600 |
{\
|
2601 |
DispatchCreate,\
|
2602 |
Context,\
|
2603 |
{\
|
2604 |
0,\
|
2605 |
0,\
|
2606 |
NULL,\
|
2607 |
},\
|
2608 |
NULL, 0\
|
2609 |
}
|
2610 |
|
2611 |
typedef struct {
|
2612 |
ULONG CreateItemsCount;
|
2613 |
PKSOBJECT_CREATE_ITEM CreateItemsList;
|
2614 |
} KSOBJECT_CREATE, *PKSOBJECT_CREATE;
|
2615 |
|
2616 |
typedef struct {
|
2617 |
PDRIVER_DISPATCH DeviceIoControl;
|
2618 |
PDRIVER_DISPATCH Read;
|
2619 |
PDRIVER_DISPATCH Write;
|
2620 |
PDRIVER_DISPATCH Flush;
|
2621 |
PDRIVER_DISPATCH Close;
|
2622 |
PDRIVER_DISPATCH QuerySecurity;
|
2623 |
PDRIVER_DISPATCH SetSecurity;
|
2624 |
PFAST_IO_DEVICE_CONTROL FastDeviceIoControl;
|
2625 |
PFAST_IO_READ FastRead;
|
2626 |
PFAST_IO_WRITE FastWrite;
|
2627 |
} KSDISPATCH_TABLE, *PKSDISPATCH_TABLE;
|
2628 |
|
2629 |
#define DEFINE_KSDISPATCH_TABLE( tablename, DeviceIoControl, Read, Write,\
|
2630 |
Flush, Close, QuerySecurity, SetSecurity,\
|
2631 |
FastDeviceIoControl, FastRead, FastWrite )\
|
2632 |
const KSDISPATCH_TABLE tablename = \
|
2633 |
{\
|
2634 |
DeviceIoControl, \
|
2635 |
Read, \
|
2636 |
Write, \
|
2637 |
Flush, \
|
2638 |
Close, \
|
2639 |
QuerySecurity, \
|
2640 |
SetSecurity, \
|
2641 |
FastDeviceIoControl, \
|
2642 |
FastRead, \
|
2643 |
FastWrite, \
|
2644 |
}
|
2645 |
|
2646 |
#define KSCREATE_ITEM_IRP_STORAGE(Irp) ((PKSOBJECT_CREATE_ITEM)(Irp)->Tail.Overlay.DriverContext[0])
|
2647 |
#define KSEVENT_SET_IRP_STORAGE(Irp) ((const KSEVENT_SET*)(Irp)->Tail.Overlay.DriverContext[0])
|
2648 |
#define KSEVENT_ITEM_IRP_STORAGE(Irp) ((const KSEVENT_ITEM*)(Irp)->Tail.Overlay.DriverContext[3])
|
2649 |
#define KSEVENT_ENTRY_IRP_STORAGE(Irp) ((PKSEVENT_ENTRY)(Irp)->Tail.Overlay.DriverContext[0])
|
2650 |
#define KSMETHOD_SET_IRP_STORAGE(Irp) ((const KSMETHOD_SET*)(Irp)->Tail.Overlay.DriverContext[0])
|
2651 |
#define KSMETHOD_ITEM_IRP_STORAGE(Irp) ((const KSMETHOD_ITEM*)(Irp)->Tail.Overlay.DriverContext[3])
|
2652 |
#define KSMETHOD_TYPE_IRP_STORAGE(Irp) ((ULONG_PTR)((Irp)->Tail.Overlay.DriverContext[2]))
|
2653 |
#define KSQUEUE_SPINLOCK_IRP_STORAGE(Irp) ((PKSPIN_LOCK)(Irp)->Tail.Overlay.DriverContext[1])
|
2654 |
#define KSPROPERTY_SET_IRP_STORAGE(Irp) ((const KSPROPERTY_SET*)(Irp)->Tail.Overlay.DriverContext[0])
|
2655 |
#define KSPROPERTY_ITEM_IRP_STORAGE(Irp) ((const KSPROPERTY_ITEM*)(Irp)->Tail.Overlay.DriverContext[3])
|
2656 |
#define KSPROPERTY_ATTRIBUTES_IRP_STORAGE(Irp) ((PKSATTRIBUTE_LIST)(Irp)->Tail.Overlay.DriverContext[2])
|
2657 |
|
2658 |
typedef PVOID KSDEVICE_HEADER, KSOBJECT_HEADER;
|
2659 |
|
2660 |
typedef enum {
|
2661 |
KsInvokeOnSuccess = 1,
|
2662 |
KsInvokeOnError = 2,
|
2663 |
KsInvokeOnCancel = 4
|
2664 |
} KSCOMPLETION_INVOCATION;
|
2665 |
|
2666 |
typedef enum {
|
2667 |
KsListEntryTail,
|
2668 |
KsListEntryHead
|
2669 |
} KSLIST_ENTRY_LOCATION;
|
2670 |
|
2671 |
typedef enum {
|
2672 |
KsAcquireOnly,
|
2673 |
KsAcquireAndRemove,
|
2674 |
KsAcquireOnlySingleItem,
|
2675 |
KsAcquireAndRemoveOnlySingleItem
|
2676 |
} KSIRP_REMOVAL_OPERATION;
|
2677 |
|
2678 |
typedef enum {
|
2679 |
KsStackCopyToNewLocation,
|
2680 |
KsStackReuseCurrentLocation,
|
2681 |
KsStackUseNewLocation
|
2682 |
} KSSTACK_USE;
|
2683 |
|
2684 |
typedef enum {
|
2685 |
KSTARGET_STATE_DISABLED,
|
2686 |
KSTARGET_STATE_ENABLED
|
2687 |
} KSTARGET_STATE;
|
2688 |
|
2689 |
typedef
|
2690 |
NTSTATUS
|
2691 |
(*PFNKSIRPLISTCALLBACK)(
|
2692 |
IN PIRP Irp,
|
2693 |
IN PVOID Context
|
2694 |
);
|
2695 |
|
2696 |
typedef
|
2697 |
VOID
|
2698 |
(*PFNREFERENCEDEVICEOBJECT)(
|
2699 |
IN PVOID Context
|
2700 |
);
|
2701 |
|
2702 |
typedef
|
2703 |
VOID
|
2704 |
(*PFNDEREFERENCEDEVICEOBJECT)(
|
2705 |
IN PVOID Context
|
2706 |
);
|
2707 |
|
2708 |
typedef
|
2709 |
NTSTATUS
|
2710 |
(*PFNQUERYREFERENCESTRING)(
|
2711 |
IN PVOID Context,
|
2712 |
IN OUT PWCHAR *String
|
2713 |
);
|
2714 |
|
2715 |
#define BUS_INTERFACE_REFERENCE_VERSION 0x100
|
2716 |
|
2717 |
typedef struct {
|
2718 |
//
|
2719 |
// Standard interface header
|
2720 |
//
|
2721 |
|
2722 |
INTERFACE Interface;
|
2723 |
|
2724 |
//
|
2725 |
// Standard bus interfaces
|
2726 |
//
|
2727 |
|
2728 |
PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject;
|
2729 |
PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject;
|
2730 |
PFNQUERYREFERENCESTRING QueryReferenceString;
|
2731 |
|
2732 |
} BUS_INTERFACE_REFERENCE, *PBUS_INTERFACE_REFERENCE;
|
2733 |
|
2734 |
#define STATIC_REFERENCE_BUS_INTERFACE STATIC_KSMEDIUMSETID_Standard
|
2735 |
#define REFERENCE_BUS_INTERFACE KSMEDIUMSETID_Standard
|
2736 |
|
2737 |
typedef
|
2738 |
NTSTATUS
|
2739 |
(*PFNQUERYMEDIUMSLIST)(
|
2740 |
IN PVOID Context,
|
2741 |
OUT ULONG* MediumsCount,
|
2742 |
OUT PKSPIN_MEDIUM* MediumList
|
2743 |
);
|
2744 |
|
2745 |
typedef struct {
|
2746 |
//
|
2747 |
// Standard interface header
|
2748 |
//
|
2749 |
|
2750 |
INTERFACE Interface;
|
2751 |
|
2752 |
//
|
2753 |
// Interface definition
|
2754 |
//
|
2755 |
|
2756 |
PFNQUERYMEDIUMSLIST QueryMediumsList;
|
2757 |
|
2758 |
} BUS_INTERFACE_MEDIUMS, *PBUS_INTERFACE_MEDIUMS;
|
2759 |
|
2760 |
#define STATIC_GUID_BUS_INTERFACE_MEDIUMS \
|
2761 |
0x4EC35C3EL, 0x201B, 0x11D2, 0x87, 0x45, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
|
2762 |
DEFINE_GUIDSTRUCT("4EC35C3E-201B-11D2-8745-00A0C9223196", GUID_BUS_INTERFACE_MEDIUMS);
|
2763 |
#define GUID_BUS_INTERFACE_MEDIUMS DEFINE_GUIDNAMED(GUID_BUS_INTERFACE_MEDIUMS)
|
2764 |
|
2765 |
#endif // defined(_NTDDK_)
|
2766 |
|
2767 |
#if !defined( PACK_PRAGMAS_NOT_SUPPORTED )
|
2768 |
#include <pshpack1.h>
|
2769 |
#endif
|
2770 |
|
2771 |
typedef struct {
|
2772 |
GUID PropertySet;
|
2773 |
ULONG Count;
|
2774 |
} KSPROPERTY_SERIALHDR, *PKSPROPERTY_SERIALHDR;
|
2775 |
|
2776 |
#if !defined( PACK_PRAGMAS_NOT_SUPPORTED )
|
2777 |
#include <poppack.h>
|
2778 |
#endif
|
2779 |
|
2780 |
typedef struct {
|
2781 |
KSIDENTIFIER PropTypeSet;
|
2782 |
ULONG Id;
|
2783 |
ULONG PropertyLength;
|
2784 |
} KSPROPERTY_SERIAL, *PKSPROPERTY_SERIAL;
|
2785 |
|
2786 |
#if defined(_NTDDK_)
|
2787 |
|
2788 |
#define IOCTL_KS_HANDSHAKE CTL_CODE(FILE_DEVICE_KS, 0x007, METHOD_NEITHER, FILE_ANY_ACCESS)
|
2789 |
|
2790 |
typedef struct {
|
2791 |
GUID ProtocolId;
|
2792 |
PVOID Argument1;
|
2793 |
PVOID Argument2;
|
2794 |
} KSHANDSHAKE, *PKSHANDSHAKE;
|
2795 |
|
2796 |
typedef struct _KSGATE
|
2797 |
KSGATE, *PKSGATE;
|
2798 |
|
2799 |
struct _KSGATE {
|
2800 |
LONG Count;
|
2801 |
PKSGATE NextGate;
|
2802 |
};
|
2803 |
|
2804 |
#ifndef _NTOS_
|
2805 |
|
2806 |
void __inline
|
2807 |
KsGateTurnInputOn(
|
2808 |
IN PKSGATE Gate OPTIONAL
|
2809 |
)
|
2810 |
{
|
2811 |
while (Gate && (InterlockedIncrement(&Gate->Count) == 1)) {
|
2812 |
Gate = Gate->NextGate;
|
2813 |
}
|
2814 |
}
|
2815 |
|
2816 |
void __inline
|
2817 |
KsGateTurnInputOff(
|
2818 |
IN PKSGATE Gate OPTIONAL
|
2819 |
)
|
2820 |
{
|
2821 |
while (Gate && (InterlockedDecrement(&Gate->Count) == 0)) {
|
2822 |
Gate = Gate->NextGate;
|
2823 |
}
|
2824 |
}
|
2825 |
|
2826 |
BOOLEAN __inline
|
2827 |
KsGateGetStateUnsafe(
|
2828 |
IN PKSGATE Gate
|
2829 |
)
|
2830 |
{
|
2831 |
ASSERT(Gate);
|
2832 |
return Gate->Count > 0;
|
2833 |
}
|
2834 |
|
2835 |
BOOLEAN __inline
|
2836 |
KsGateCaptureThreshold(
|
2837 |
IN PKSGATE Gate
|
2838 |
)
|
2839 |
{
|
2840 |
BOOLEAN captured;
|
2841 |
|
2842 |
ASSERT(Gate);
|
2843 |
|
2844 |
captured = (InterlockedCompareExchange(&Gate->Count,0,1) == 1);
|
2845 |
|
2846 |
//
|
2847 |
// If we made a transition, it must be propagated.
|
2848 |
//
|
2849 |
if (captured) {
|
2850 |
KsGateTurnInputOff(Gate->NextGate);
|
2851 |
}
|
2852 |
|
2853 |
//
|
2854 |
// We return whatever the state was prior to the compare/exchange. If
|
2855 |
// the state was on, the state is now off.
|
2856 |
//
|
2857 |
return captured;
|
2858 |
}
|
2859 |
|
2860 |
void __inline
|
2861 |
KsGateInitialize(
|
2862 |
IN PKSGATE Gate,
|
2863 |
IN LONG InitialCount,
|
2864 |
IN PKSGATE NextGate OPTIONAL,
|
2865 |
IN BOOLEAN StateToPropagate // IN BOOLEAN NextGateIsAnOrGate
|
2866 |
)
|
2867 |
{
|
2868 |
ASSERT(Gate);
|
2869 |
Gate->Count = InitialCount;
|
2870 |
Gate->NextGate = NextGate;
|
2871 |
|
2872 |
if (NextGate) {
|
2873 |
if (InitialCount > 0) {
|
2874 |
if (StateToPropagate) {
|
2875 |
KsGateTurnInputOn(NextGate);
|
2876 |
}
|
2877 |
} else {
|
2878 |
if (! StateToPropagate) {
|
2879 |
KsGateTurnInputOff(NextGate);
|
2880 |
}
|
2881 |
}
|
2882 |
}
|
2883 |
}
|
2884 |
|
2885 |
void __inline
|
2886 |
KsGateInitializeAnd(
|
2887 |
IN PKSGATE AndGate,
|
2888 |
IN PKSGATE NextOrGate OPTIONAL
|
2889 |
)
|
2890 |
{
|
2891 |
KsGateInitialize(AndGate,1,NextOrGate,TRUE);
|
2892 |
}
|
2893 |
|
2894 |
void __inline
|
2895 |
KsGateInitializeOr(
|
2896 |
IN PKSGATE OrGate,
|
2897 |
IN PKSGATE NextAndGate OPTIONAL
|
2898 |
)
|
2899 |
{
|
2900 |
KsGateInitialize(OrGate,0,NextAndGate,FALSE);
|
2901 |
}
|
2902 |
|
2903 |
void __inline KsGateAddOnInputToAnd(IN PKSGATE AndGate) {}
|
2904 |
void __inline KsGateAddOffInputToAnd(IN PKSGATE AndGate) { KsGateTurnInputOff(AndGate); }
|
2905 |
void __inline KsGateRemoveOnInputFromAnd(IN PKSGATE AndGate) {}
|
2906 |
void __inline KsGateRemoveOffInputFromAnd(IN PKSGATE AndGate) { KsGateTurnInputOn(AndGate); }
|
2907 |
|
2908 |
void __inline KsGateAddOnInputToOr(IN PKSGATE OrGate) { KsGateTurnInputOn(OrGate); }
|
2909 |
void __inline KsGateAddOffInputToOr(IN PKSGATE OrGate) {}
|
2910 |
void __inline KsGateRemoveOnInputFromOr(IN PKSGATE OrGate) { KsGateTurnInputOff(OrGate); }
|
2911 |
void __inline KsGateRemoveOffInputFromOr(IN PKSGATE OrGate) {}
|
2912 |
|
2913 |
void __inline
|
2914 |
KsGateTerminateAnd(
|
2915 |
IN PKSGATE AndGate
|
2916 |
)
|
2917 |
{
|
2918 |
ASSERT(AndGate);
|
2919 |
if (KsGateGetStateUnsafe(AndGate)) {
|
2920 |
KsGateRemoveOnInputFromOr(AndGate->NextGate);
|
2921 |
} else {
|
2922 |
KsGateRemoveOffInputFromOr(AndGate->NextGate);
|
2923 |
}
|
2924 |
}
|
2925 |
|
2926 |
void __inline
|
2927 |
KsGateTerminateOr(
|
2928 |
IN PKSGATE OrGate
|
2929 |
)
|
2930 |
{
|
2931 |
ASSERT(OrGate);
|
2932 |
if (KsGateGetStateUnsafe(OrGate)) {
|
2933 |
KsGateRemoveOnInputFromAnd(OrGate->NextGate);
|
2934 |
} else {
|
2935 |
KsGateRemoveOffInputFromAnd(OrGate->NextGate);
|
2936 |
}
|
2937 |
}
|
2938 |
|
2939 |
#endif // !_NTOS_
|
2940 |
|
2941 |
typedef PVOID KSOBJECT_BAG;
|
2942 |
|
2943 |
typedef
|
2944 |
BOOLEAN
|
2945 |
(*PFNKSGENERATEEVENTCALLBACK)(
|
2946 |
IN PVOID Context,
|
2947 |
IN PKSEVENT_ENTRY EventEntry
|
2948 |
);
|
2949 |
|
2950 |
typedef
|
2951 |
NTSTATUS
|
2952 |
(*PFNKSDEVICECREATE)(
|
2953 |
IN PKSDEVICE Device
|
2954 |
);
|
2955 |
typedef
|
2956 |
NTSTATUS
|
2957 |
(*PFNKSDEVICEPNPSTART)(
|
2958 |
IN PKSDEVICE Device,
|
2959 |
IN PIRP Irp,
|
2960 |
IN PCM_RESOURCE_LIST TranslatedResourceList OPTIONAL,
|
2961 |
IN PCM_RESOURCE_LIST UntranslatedResourceList OPTIONAL
|
2962 |
);
|
2963 |
typedef
|
2964 |
NTSTATUS
|
2965 |
(*PFNKSDEVICE)(
|
2966 |
IN PKSDEVICE Device
|
2967 |
);
|
2968 |
typedef
|
2969 |
NTSTATUS
|
2970 |
(*PFNKSDEVICEIRP)(
|
2971 |
IN PKSDEVICE Device,
|
2972 |
IN PIRP Irp
|
2973 |
);
|
2974 |
typedef
|
2975 |
void
|
2976 |
(*PFNKSDEVICEIRPVOID)(
|
2977 |
IN PKSDEVICE Device,
|
2978 |
IN PIRP Irp
|
2979 |
);
|
2980 |
typedef
|
2981 |
NTSTATUS
|
2982 |
(*PFNKSDEVICEQUERYCAPABILITIES)(
|
2983 |
IN PKSDEVICE Device,
|
2984 |
IN PIRP Irp,
|
2985 |
IN OUT PDEVICE_CAPABILITIES Capabilities
|
2986 |
);
|
2987 |
typedef
|
2988 |
NTSTATUS
|
2989 |
(*PFNKSDEVICEQUERYPOWER)(
|
2990 |
IN PKSDEVICE Device,
|
2991 |
IN PIRP Irp,
|
2992 |
IN DEVICE_POWER_STATE DeviceTo,
|
2993 |
IN DEVICE_POWER_STATE DeviceFrom,
|
2994 |
IN SYSTEM_POWER_STATE SystemTo,
|
2995 |
IN SYSTEM_POWER_STATE SystemFrom,
|
2996 |
IN POWER_ACTION Action
|
2997 |
);
|
2998 |
typedef
|
2999 |
void
|
3000 |
(*PFNKSDEVICESETPOWER)(
|
3001 |
IN PKSDEVICE Device,
|
3002 |
IN PIRP Irp,
|
3003 |
IN DEVICE_POWER_STATE To,
|
3004 |
IN DEVICE_POWER_STATE From
|
3005 |
);
|
3006 |
typedef
|
3007 |
NTSTATUS
|
3008 |
(*PFNKSFILTERFACTORYVOID)(
|
3009 |
IN PKSFILTERFACTORY FilterFactory
|
3010 |
);
|
3011 |
typedef
|
3012 |
void
|
3013 |
(*PFNKSFILTERFACTORYPOWER)(
|
3014 |
IN PKSFILTERFACTORY FilterFactory,
|
3015 |
IN DEVICE_POWER_STATE State
|
3016 |
);
|
3017 |
typedef
|
3018 |
NTSTATUS
|
3019 |
(*PFNKSFILTERIRP)(
|
3020 |
IN PKSFILTER Filter,
|
3021 |
IN PIRP Irp
|
3022 |
);
|
3023 |
typedef
|
3024 |
NTSTATUS
|
3025 |
(*PFNKSFILTERPROCESS)(
|
3026 |
IN PKSFILTER Filter,
|
3027 |
IN PKSPROCESSPIN_INDEXENTRY Index
|
3028 |
);
|
3029 |
typedef
|
3030 |
NTSTATUS
|
3031 |
(*PFNKSFILTERVOID)(
|
3032 |
IN PKSFILTER Filter
|
3033 |
);
|
3034 |
typedef
|
3035 |
void
|
3036 |
(*PFNKSFILTERPOWER)(
|
3037 |
IN PKSFILTER Filter,
|
3038 |
IN DEVICE_POWER_STATE State
|
3039 |
);
|
3040 |
typedef
|
3041 |
NTSTATUS
|
3042 |
(*PFNKSPINIRP)(
|
3043 |
IN PKSPIN Pin,
|
3044 |
IN PIRP Irp
|
3045 |
);
|
3046 |
typedef
|
3047 |
NTSTATUS
|
3048 |
(*PFNKSPINSETDEVICESTATE)(
|
3049 |
IN PKSPIN Pin,
|
3050 |
IN KSSTATE ToState,
|
3051 |
IN KSSTATE FromState
|
3052 |
);
|
3053 |
typedef
|
3054 |
NTSTATUS
|
3055 |
(*PFNKSPINSETDATAFORMAT)(
|
3056 |
IN PKSPIN Pin,
|
3057 |
IN PKSDATAFORMAT OldFormat OPTIONAL,
|
3058 |
IN PKSMULTIPLE_ITEM OldAttributeList OPTIONAL,
|
3059 |
IN const KSDATARANGE* DataRange,
|
3060 |
IN const KSATTRIBUTE_LIST* AttributeRange OPTIONAL
|
3061 |
);
|
3062 |
typedef
|
3063 |
NTSTATUS
|
3064 |
(*PFNKSPINHANDSHAKE)(
|
3065 |
IN PKSPIN Pin,
|
3066 |
IN PKSHANDSHAKE In,
|
3067 |
IN PKSHANDSHAKE Out
|
3068 |
);
|
3069 |
typedef
|
3070 |
NTSTATUS
|
3071 |
(*PFNKSPIN)(
|
3072 |
IN PKSPIN Pin
|
3073 |
);
|
3074 |
typedef
|
3075 |
void
|
3076 |
(*PFNKSPINVOID)(
|
3077 |
IN PKSPIN Pin
|
3078 |
);
|
3079 |
typedef
|
3080 |
void
|
3081 |
(*PFNKSPINPOWER)(
|
3082 |
IN PKSPIN Pin,
|
3083 |
IN DEVICE_POWER_STATE State
|
3084 |
);
|
3085 |
typedef
|
3086 |
BOOLEAN
|
3087 |
(*PFNKSPINSETTIMER)(
|
3088 |
IN PKSPIN Pin,
|
3089 |
IN PKTIMER Timer,
|
3090 |
IN LARGE_INTEGER DueTime,
|
3091 |
IN PKDPC Dpc
|
3092 |
);
|
3093 |
typedef
|
3094 |
BOOLEAN
|
3095 |
(*PFNKSPINCANCELTIMER)(
|
3096 |
IN PKSPIN Pin,
|
3097 |
IN PKTIMER Timer
|
3098 |
);
|
3099 |
typedef
|
3100 |
LONGLONG
|
3101 |
(FASTCALL *PFNKSPINCORRELATEDTIME)(
|
3102 |
IN PKSPIN Pin,
|
3103 |
OUT PLONGLONG SystemTime
|
3104 |
);
|
3105 |
typedef
|
3106 |
void
|
3107 |
(*PFNKSPINRESOLUTION)(
|
3108 |
IN PKSPIN Pin,
|
3109 |
OUT PKSRESOLUTION Resolution
|
3110 |
);
|
3111 |
typedef
|
3112 |
NTSTATUS
|
3113 |
(*PFNKSPININITIALIZEALLOCATOR)(
|
3114 |
IN PKSPIN Pin,
|
3115 |
IN PKSALLOCATOR_FRAMING AllocatorFraming,
|
3116 |
OUT PVOID* Context
|
3117 |
);
|
3118 |
typedef
|
3119 |
void
|
3120 |
(*PFNKSSTREAMPOINTER)(
|
3121 |
IN PKSSTREAM_POINTER StreamPointer
|
3122 |
);
|
3123 |
|
3124 |
typedef struct KSAUTOMATION_TABLE_
|
3125 |
KSAUTOMATION_TABLE, *PKSAUTOMATION_TABLE;
|
3126 |
struct KSAUTOMATION_TABLE_ {
|
3127 |
ULONG PropertySetsCount;
|
3128 |
ULONG PropertyItemSize;
|
3129 |
const KSPROPERTY_SET* PropertySets;
|
3130 |
ULONG MethodSetsCount;
|
3131 |
ULONG MethodItemSize;
|
3132 |
const KSMETHOD_SET* MethodSets;
|
3133 |
ULONG EventSetsCount;
|
3134 |
ULONG EventItemSize;
|
3135 |
const KSEVENT_SET* EventSets;
|
3136 |
#if !defined(_WIN64)
|
3137 |
PVOID Alignment;
|
3138 |
#endif // !defined(_WIN64)
|
3139 |
};
|
3140 |
|
3141 |
#define DEFINE_KSAUTOMATION_TABLE(table)\
|
3142 |
const KSAUTOMATION_TABLE table =
|
3143 |
|
3144 |
#define DEFINE_KSAUTOMATION_PROPERTIES(table)\
|
3145 |
SIZEOF_ARRAY(table),\
|
3146 |
sizeof(KSPROPERTY_ITEM),\
|
3147 |
table
|
3148 |
|
3149 |
#define DEFINE_KSAUTOMATION_METHODS(table)\
|
3150 |
SIZEOF_ARRAY(table),\
|
3151 |
sizeof(KSMETHOD_ITEM),\
|
3152 |
table
|
3153 |
|
3154 |
#define DEFINE_KSAUTOMATION_EVENTS(table)\
|
3155 |
SIZEOF_ARRAY(table),\
|
3156 |
sizeof(KSEVENT_ITEM),\
|
3157 |
table
|
3158 |
|
3159 |
#define DEFINE_KSAUTOMATION_PROPERTIES_NULL\
|
3160 |
0,\
|
3161 |
sizeof(KSPROPERTY_ITEM),\
|
3162 |
NULL
|
3163 |
|
3164 |
#define DEFINE_KSAUTOMATION_METHODS_NULL\
|
3165 |
0,\
|
3166 |
sizeof(KSMETHOD_ITEM),\
|
3167 |
NULL
|
3168 |
|
3169 |
#define DEFINE_KSAUTOMATION_EVENTS_NULL\
|
3170 |
0,\
|
3171 |
sizeof(KSEVENT_ITEM),\
|
3172 |
NULL
|
3173 |
|
3174 |
#define MIN_DEV_VER_FOR_QI (0x100)
|
3175 |
|
3176 |
struct _KSDEVICE_DISPATCH {
|
3177 |
PFNKSDEVICECREATE Add;
|
3178 |
PFNKSDEVICEPNPSTART Start;
|
3179 |
PFNKSDEVICE PostStart;
|
3180 |
PFNKSDEVICEIRP QueryStop;
|
3181 |
PFNKSDEVICEIRPVOID CancelStop;
|
3182 |
PFNKSDEVICEIRPVOID Stop;
|
3183 |
PFNKSDEVICEIRP QueryRemove;
|
3184 |
PFNKSDEVICEIRPVOID CancelRemove;
|
3185 |
PFNKSDEVICEIRPVOID Remove;
|
3186 |
PFNKSDEVICEQUERYCAPABILITIES QueryCapabilities;
|
3187 |
PFNKSDEVICEIRPVOID SurpriseRemoval;
|
3188 |
PFNKSDEVICEQUERYPOWER QueryPower;
|
3189 |
PFNKSDEVICESETPOWER SetPower;
|
3190 |
PFNKSDEVICEIRP QueryInterface; // added in version 0x100
|
3191 |
};
|
3192 |
|
3193 |
struct _KSFILTER_DISPATCH {
|
3194 |
PFNKSFILTERIRP Create;
|
3195 |
PFNKSFILTERIRP Close;
|
3196 |
PFNKSFILTERPROCESS Process;
|
3197 |
PFNKSFILTERVOID Reset;
|
3198 |
};
|
3199 |
|
3200 |
struct _KSPIN_DISPATCH {
|
3201 |
PFNKSPINIRP Create;
|
3202 |
PFNKSPINIRP Close;
|
3203 |
PFNKSPIN Process;
|
3204 |
PFNKSPINVOID Reset;
|
3205 |
PFNKSPINSETDATAFORMAT SetDataFormat;
|
3206 |
PFNKSPINSETDEVICESTATE SetDeviceState;
|
3207 |
PFNKSPIN Connect;
|
3208 |
PFNKSPINVOID Disconnect;
|
3209 |
const KSCLOCK_DISPATCH* Clock;
|
3210 |
const KSALLOCATOR_DISPATCH* Allocator;
|
3211 |
};
|
3212 |
|
3213 |
struct _KSCLOCK_DISPATCH {
|
3214 |
PFNKSPINSETTIMER SetTimer;
|
3215 |
PFNKSPINCANCELTIMER CancelTimer;
|
3216 |
PFNKSPINCORRELATEDTIME CorrelatedTime;
|
3217 |
PFNKSPINRESOLUTION Resolution;
|
3218 |
};
|
3219 |
|
3220 |
struct _KSALLOCATOR_DISPATCH {
|
3221 |
PFNKSPININITIALIZEALLOCATOR InitializeAllocator;
|
3222 |
PFNKSDELETEALLOCATOR DeleteAllocator;
|
3223 |
PFNKSDEFAULTALLOCATE Allocate;
|
3224 |
PFNKSDEFAULTFREE Free;
|
3225 |
};
|
3226 |
|
3227 |
#define KSDEVICE_DESCRIPTOR_VERSION (0x100)
|
3228 |
|
3229 |
struct _KSDEVICE_DESCRIPTOR {
|
3230 |
const KSDEVICE_DISPATCH* Dispatch;
|
3231 |
ULONG FilterDescriptorsCount;
|
3232 |
const KSFILTER_DESCRIPTOR*const* FilterDescriptors;
|
3233 |
ULONG Version; // this is 0 for pre-version 100 driver
|
3234 |
//#if !defined(_WIN64)
|
3235 |
//PVOID Alignment;
|
3236 |
//#endif //!defined(_WIN64)
|
3237 |
};
|
3238 |
|
3239 |
struct _KSFILTER_DESCRIPTOR {
|
3240 |
const KSFILTER_DISPATCH* Dispatch;
|
3241 |
const KSAUTOMATION_TABLE* AutomationTable;
|
3242 |
ULONG Version;
|
3243 |
#define KSFILTER_DESCRIPTOR_VERSION ((ULONG)-1)
|
3244 |
ULONG Flags;
|
3245 |
#define KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING 0x00000001
|
3246 |
#define KSFILTER_FLAG_CRITICAL_PROCESSING 0x00000002
|
3247 |
#define KSFILTER_FLAG_HYPERCRITICAL_PROCESSING 0x00000004
|
3248 |
const GUID* ReferenceGuid;
|
3249 |
ULONG PinDescriptorsCount;
|
3250 |
ULONG PinDescriptorSize;
|
3251 |
const KSPIN_DESCRIPTOR_EX* PinDescriptors;
|
3252 |
ULONG CategoriesCount;
|
3253 |
const GUID* Categories;
|
3254 |
ULONG NodeDescriptorsCount;
|
3255 |
ULONG NodeDescriptorSize;
|
3256 |
const KSNODE_DESCRIPTOR* NodeDescriptors;
|
3257 |
ULONG ConnectionsCount;
|
3258 |
const KSTOPOLOGY_CONNECTION* Connections;
|
3259 |
const KSCOMPONENTID* ComponentId;
|
3260 |
};
|
3261 |
|
3262 |
#define DEFINE_KSFILTER_DESCRIPTOR(descriptor)\
|
3263 |
const KSFILTER_DESCRIPTOR descriptor =
|
3264 |
|
3265 |
#define DEFINE_KSFILTER_PIN_DESCRIPTORS(table)\
|
3266 |
SIZEOF_ARRAY(table),\
|
3267 |
sizeof(table[0]),\
|
3268 |
table
|
3269 |
|
3270 |
#define DEFINE_KSFILTER_CATEGORIES(table)\
|
3271 |
SIZEOF_ARRAY(table),\
|
3272 |
table
|
3273 |
|
3274 |
#define DEFINE_KSFILTER_CATEGORY(category)\
|
3275 |
1,\
|
3276 |
&(category)
|
3277 |
|
3278 |
#define DEFINE_KSFILTER_CATEGORIES_NULL\
|
3279 |
0,\
|
3280 |
NULL
|
3281 |
|
3282 |
#define DEFINE_KSFILTER_NODE_DESCRIPTORS(table)\
|
3283 |
SIZEOF_ARRAY(table),\
|
3284 |
sizeof(table[0]),\
|
3285 |
table
|
3286 |
|
3287 |
#define DEFINE_KSFILTER_NODE_DESCRIPTORS_NULL\
|
3288 |
0,\
|
3289 |
sizeof(KSNODE_DESCRIPTOR),\
|
3290 |
NULL
|
3291 |
|
3292 |
#define DEFINE_KSFILTER_CONNECTIONS(table)\
|
3293 |
SIZEOF_ARRAY(table),\
|
3294 |
table
|
3295 |
|
3296 |
#define DEFINE_KSFILTER_DEFAULT_CONNECTIONS\
|
3297 |
0,\
|
3298 |
NULL
|
3299 |
|
3300 |
#define DEFINE_KSFILTER_DESCRIPTOR_TABLE(table)\
|
3301 |
const KSFILTER_DESCRIPTOR*const table[] =
|
3302 |
|
3303 |
struct _KSPIN_DESCRIPTOR_EX {
|
3304 |
const KSPIN_DISPATCH* Dispatch;
|
3305 |
const KSAUTOMATION_TABLE* AutomationTable;
|
3306 |
KSPIN_DESCRIPTOR PinDescriptor;
|
3307 |
ULONG Flags;
|
3308 |
#define KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING
|
3309 |
#define KSPIN_FLAG_CRITICAL_PROCESSING KSFILTER_FLAG_CRITICAL_PROCESSING
|
3310 |
#define KSPIN_FLAG_HYPERCRITICAL_PROCESSING KSFILTER_FLAG_HYPERCRITICAL_PROCESSING
|
3311 |
#define KSPIN_FLAG_ASYNCHRONOUS_PROCESSING 0x00000008
|
3312 |
#define KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING 0x00000010
|
3313 |
#define KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL 0x00000020
|
3314 |
#define KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING 0x00000040
|
3315 |
#define KSPIN_FLAG_ENFORCE_FIFO 0x00000080
|
3316 |
|
3317 |
#define KSPIN_FLAG_GENERATE_MAPPINGS 0x00000100
|
3318 |
#define KSPIN_FLAG_DISTINCT_TRAILING_EDGE 0x00000200
|
3319 |
|
3320 |
#define KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY 0x00010000
|
3321 |
#define KSPIN_FLAG_SPLITTER 0x00020000
|
3322 |
#define KSPIN_FLAG_USE_STANDARD_TRANSPORT 0x00040000
|
3323 |
#define KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT 0x00080000
|
3324 |
#define KSPIN_FLAG_FIXED_FORMAT 0x00100000
|
3325 |
#define KSPIN_FLAG_GENERATE_EOS_EVENTS 0x00200000
|
3326 |
#define KSPIN_FLAG_RENDERER (KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY|KSPIN_FLAG_GENERATE_EOS_EVENTS)
|
3327 |
#define KSPIN_FLAG_IMPLEMENT_CLOCK 0x00400000
|
3328 |
ULONG InstancesPossible;
|
3329 |
ULONG InstancesNecessary;
|
3330 |
const KSALLOCATOR_FRAMING_EX* AllocatorFraming;
|
3331 |
PFNKSINTERSECTHANDLEREX IntersectHandler;
|
3332 |
};
|
3333 |
|
3334 |
#define DEFINE_KSPIN_DEFAULT_INTERFACES\
|
3335 |
0,\
|
3336 |
NULL
|
3337 |
|
3338 |
#define DEFINE_KSPIN_DEFAULT_MEDIUMS\
|
3339 |
0,\
|
3340 |
NULL
|
3341 |
|
3342 |
struct _KSNODE_DESCRIPTOR {
|
3343 |
const KSAUTOMATION_TABLE* AutomationTable;
|
3344 |
const GUID* Type;
|
3345 |
const GUID* Name;
|
3346 |
#if !defined(_WIN64)
|
3347 |
PVOID Alignment;
|
3348 |
#endif // !defined(_WIN64)
|
3349 |
};
|
3350 |
|
3351 |
#if !defined(_WIN64)
|
3352 |
#define DEFINE_NODE_DESCRIPTOR(automation,type,name) \
|
3353 |
{ (automation), (type), (name), NULL }
|
3354 |
#else // !defined(_WIN64)
|
3355 |
#define DEFINE_NODE_DESCRIPTOR(automation,type,name) \
|
3356 |
{ (automation), (type), (name) }
|
3357 |
#endif // !defined(_WIN64)
|
3358 |
|
3359 |
struct _KSDEVICE {
|
3360 |
const KSDEVICE_DESCRIPTOR* Descriptor;
|
3361 |
KSOBJECT_BAG Bag;
|
3362 |
PVOID Context;
|
3363 |
PDEVICE_OBJECT FunctionalDeviceObject;
|
3364 |
PDEVICE_OBJECT PhysicalDeviceObject;
|
3365 |
PDEVICE_OBJECT NextDeviceObject;
|
3366 |
BOOLEAN Started;
|
3367 |
SYSTEM_POWER_STATE SystemPowerState;
|
3368 |
DEVICE_POWER_STATE DevicePowerState;
|
3369 |
};
|
3370 |
|
3371 |
struct _KSFILTERFACTORY {
|
3372 |
const KSFILTER_DESCRIPTOR* FilterDescriptor;
|
3373 |
KSOBJECT_BAG Bag;
|
3374 |
PVOID Context;
|
3375 |
};
|
3376 |
|
3377 |
struct _KSFILTER {
|
3378 |
const KSFILTER_DESCRIPTOR* Descriptor;
|
3379 |
KSOBJECT_BAG Bag;
|
3380 |
PVOID Context;
|
3381 |
};
|
3382 |
|
3383 |
struct _KSPIN {
|
3384 |
const KSPIN_DESCRIPTOR_EX* Descriptor;
|
3385 |
KSOBJECT_BAG Bag;
|
3386 |
PVOID Context;
|
3387 |
ULONG Id;
|
3388 |
KSPIN_COMMUNICATION Communication;
|
3389 |
BOOLEAN ConnectionIsExternal;
|
3390 |
KSPIN_INTERFACE ConnectionInterface;
|
3391 |
KSPIN_MEDIUM ConnectionMedium;
|
3392 |
KSPRIORITY ConnectionPriority;
|
3393 |
PKSDATAFORMAT ConnectionFormat;
|
3394 |
PKSMULTIPLE_ITEM AttributeList;
|
3395 |
ULONG StreamHeaderSize;
|
3396 |
KSPIN_DATAFLOW DataFlow;
|
3397 |
KSSTATE DeviceState;
|
3398 |
KSRESET ResetState;
|
3399 |
};
|
3400 |
|
3401 |
struct _KSMAPPING {
|
3402 |
PHYSICAL_ADDRESS PhysicalAddress;
|
3403 |
ULONG ByteCount;
|
3404 |
ULONG Alignment;
|
3405 |
};
|
3406 |
|
3407 |
struct _KSSTREAM_POINTER_OFFSET
|
3408 |
{
|
3409 |
#if defined(_NTDDK_)
|
3410 |
union {
|
3411 |
PUCHAR Data;
|
3412 |
PKSMAPPING Mappings;
|
3413 |
};
|
3414 |
#else // !defined(_NTDDK_)
|
3415 |
PUCHAR Data;
|
3416 |
#endif // !defined(_NTDDK_)
|
3417 |
#if !defined(_WIN64)
|
3418 |
PVOID Alignment;
|
3419 |
#endif // !defined(_WIN64)
|
3420 |
ULONG Count;
|
3421 |
ULONG Remaining;
|
3422 |
};
|
3423 |
|
3424 |
struct _KSSTREAM_POINTER
|
3425 |
{
|
3426 |
PVOID Context;
|
3427 |
PKSPIN Pin;
|
3428 |
PKSSTREAM_HEADER StreamHeader;
|
3429 |
PKSSTREAM_POINTER_OFFSET Offset;
|
3430 |
KSSTREAM_POINTER_OFFSET OffsetIn;
|
3431 |
KSSTREAM_POINTER_OFFSET OffsetOut;
|
3432 |
};
|
3433 |
|
3434 |
struct _KSPROCESSPIN {
|
3435 |
PKSPIN Pin;
|
3436 |
PKSSTREAM_POINTER StreamPointer;
|
3437 |
PKSPROCESSPIN InPlaceCounterpart;
|
3438 |
PKSPROCESSPIN DelegateBranch;
|
3439 |
PKSPROCESSPIN CopySource;
|
3440 |
PVOID Data;
|
3441 |
ULONG BytesAvailable;
|
3442 |
ULONG BytesUsed;
|
3443 |
ULONG Flags;
|
3444 |
BOOLEAN Terminate;
|
3445 |
};
|
3446 |
|
3447 |
struct _KSPROCESSPIN_INDEXENTRY {
|
3448 |
PKSPROCESSPIN *Pins;
|
3449 |
ULONG Count;
|
3450 |
};
|
3451 |
|
3452 |
typedef enum {
|
3453 |
KsObjectTypeDevice,
|
3454 |
KsObjectTypeFilterFactory,
|
3455 |
KsObjectTypeFilter,
|
3456 |
KsObjectTypePin
|
3457 |
} KSOBJECTTYPE;
|
3458 |
|
3459 |
typedef
|
3460 |
void
|
3461 |
(*PFNKSFREE)(
|
3462 |
IN PVOID Data
|
3463 |
);
|
3464 |
|
3465 |
typedef
|
3466 |
void
|
3467 |
(*PFNKSPINFRAMERETURN)(
|
3468 |
IN PKSPIN Pin,
|
3469 |
IN PVOID Data OPTIONAL,
|
3470 |
IN ULONG Size OPTIONAL,
|
3471 |
IN PMDL Mdl OPTIONAL,
|
3472 |
IN PVOID Context OPTIONAL,
|
3473 |
IN NTSTATUS Status
|
3474 |
);
|
3475 |
|
3476 |
#if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
|
3477 |
#if !defined(_IKsControl_)
|
3478 |
#define _IKsControl_
|
3479 |
|
3480 |
typedef interface IKsControl* PIKSCONTROL;
|
3481 |
|
3482 |
#if !defined(DEFINE_ABSTRACT_UNKNOWN)
|
3483 |
|
3484 |
#define DEFINE_ABSTRACT_UNKNOWN() \
|
3485 |
STDMETHOD_(NTSTATUS, QueryInterface)(THIS_ \
|
3486 |
REFIID InterfaceId, \
|
3487 |
PVOID* Interface \
|
3488 |
) PURE; \
|
3489 |
STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
|
3490 |
STDMETHOD_(ULONG,Release)(THIS) PURE;
|
3491 |
|
3492 |
#endif //!defined(DEFINE_ABSTRACT_UNKNOWN)
|
3493 |
|
3494 |
#undef INTERFACE
|
3495 |
#define INTERFACE IKsControl
|
3496 |
DECLARE_INTERFACE_(IKsControl,IUnknown)
|
3497 |
{
|
3498 |
DEFINE_ABSTRACT_UNKNOWN() // For C
|
3499 |
|
3500 |
STDMETHOD_(NTSTATUS, KsProperty)(THIS_
|
3501 |
IN PKSPROPERTY Property,
|
3502 |
IN ULONG PropertyLength,
|
3503 |
IN OUT PVOID PropertyData,
|
3504 |
IN ULONG DataLength,
|
3505 |
OUT ULONG* BytesReturned
|
3506 |
) PURE;
|
3507 |
STDMETHOD_(NTSTATUS, KsMethod)(THIS_
|
3508 |
IN PKSMETHOD Method,
|
3509 |
IN ULONG MethodLength,
|
3510 |
IN OUT PVOID MethodData,
|
3511 |
IN ULONG DataLength,
|
3512 |
OUT ULONG* BytesReturned
|
3513 |
) PURE;
|
3514 |
STDMETHOD_(NTSTATUS, KsEvent)(THIS_
|
3515 |
IN PKSEVENT Event OPTIONAL,
|
3516 |
IN ULONG EventLength,
|
3517 |
IN OUT PVOID EventData,
|
3518 |
IN ULONG DataLength,
|
3519 |
OUT ULONG* BytesReturned
|
3520 |
) PURE;
|
3521 |
};
|
3522 |
|
3523 |
typedef interface IKsReferenceClock* PIKSREFERENCECLOCK;
|
3524 |
|
3525 |
#undef INTERFACE
|
3526 |
#define INTERFACE IKsReferenceClock
|
3527 |
DECLARE_INTERFACE_(IKsReferenceClock,IUnknown)
|
3528 |
{
|
3529 |
DEFINE_ABSTRACT_UNKNOWN() // For C
|
3530 |
|
3531 |
STDMETHOD_(LONGLONG,GetTime)(THIS
|
3532 |
) PURE;
|
3533 |
STDMETHOD_(LONGLONG,GetPhysicalTime)(THIS
|
3534 |
) PURE;
|
3535 |
STDMETHOD_(LONGLONG,GetCorrelatedTime)(THIS_
|
3536 |
OUT PLONGLONG SystemTime
|
3537 |
) PURE;
|
3538 |
STDMETHOD_(LONGLONG,GetCorrelatedPhysicalTime)(THIS_
|
3539 |
OUT PLONGLONG SystemTime
|
3540 |
) PURE;
|
3541 |
STDMETHOD_(NTSTATUS, GetResolution)(THIS_
|
3542 |
OUT PKSRESOLUTION Resolution
|
3543 |
) PURE;
|
3544 |
STDMETHOD_(NTSTATUS, GetState)(THIS_
|
3545 |
OUT PKSSTATE State
|
3546 |
) PURE;
|
3547 |
};
|
3548 |
#undef INTERFACE
|
3549 |
|
3550 |
#define STATIC_IID_IKsControl \
|
3551 |
0x28F54685L, 0x06FD, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
|
3552 |
DEFINE_GUID(IID_IKsControl,
|
3553 |
0x28F54685L, 0x06FD, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96);
|
3554 |
#if defined(__cplusplus) && _MSC_VER >= 1100
|
3555 |
struct __declspec(uuid("28F54685-06FD-11D2-B27A-00A0C9223196")) IKsControl;
|
3556 |
#endif
|
3557 |
|
3558 |
#define STATIC_IID_IKsFastClock \
|
3559 |
0xc9902485, 0xc180, 0x11d2, 0x84, 0x73, 0xd4, 0x23, 0x94, 0x45, 0x9e, 0x5e
|
3560 |
DEFINE_GUID(IID_IKsFastClock,
|
3561 |
0xc9902485, 0xc180, 0x11d2, 0x84, 0x73, 0xd4, 0x23, 0x94, 0x45, 0x9e, 0x5e);
|
3562 |
#if defined(__cplusplus) && _MSC_VER >= 1100
|
3563 |
struct __declspec(uuid("C9902485-C180-11d2-8473-D42394459E5E")) IKsFastClock;
|
3564 |
#endif
|
3565 |
|
3566 |
#endif // !defined(_IKsControl_)
|
3567 |
#endif // defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
|
3568 |
|
3569 |
#endif // defined(_NTDDK_)
|
3570 |
|
3571 |
//===========================================================================
|
3572 |
|
3573 |
#if defined(__cplusplus)
|
3574 |
extern "C" {
|
3575 |
#endif // defined(__cplusplus)
|
3576 |
|
3577 |
//
|
3578 |
// exported prototypes
|
3579 |
//
|
3580 |
|
3581 |
#ifdef _KSDDK_
|
3582 |
#define KSDDKAPI
|
3583 |
#else // !_KSDDK_
|
3584 |
#define KSDDKAPI DECLSPEC_IMPORT
|
3585 |
#endif // _KSDDK_
|
3586 |
|
3587 |
#if defined(_NTDDK_)
|
3588 |
|
3589 |
KSDDKAPI
|
3590 |
NTSTATUS
|
3591 |
NTAPI
|
3592 |
KsEnableEvent(
|
3593 |
IN PIRP Irp,
|
3594 |
IN ULONG EventSetsCount,
|
3595 |
IN const KSEVENT_SET* EventSet,
|
3596 |
IN OUT PLIST_ENTRY EventsList OPTIONAL,
|
3597 |
IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL,
|
3598 |
IN PVOID EventsLock OPTIONAL
|
3599 |
);
|
3600 |
|
3601 |
KSDDKAPI
|
3602 |
NTSTATUS
|
3603 |
NTAPI
|
3604 |
KsEnableEventWithAllocator(
|
3605 |
IN PIRP Irp,
|
3606 |
IN ULONG EventSetsCount,
|
3607 |
IN const KSEVENT_SET* EventSet,
|
3608 |
IN OUT PLIST_ENTRY EventsList OPTIONAL,
|
3609 |
IN KSEVENTS_LOCKTYPE EventsFlags OPTIONAL,
|
3610 |
IN PVOID EventsLock OPTIONAL,
|
3611 |
IN PFNKSALLOCATOR Allocator OPTIONAL,
|
3612 |
IN ULONG EventItemSize OPTIONAL
|
3613 |
);
|
3614 |
|
3615 |
KSDDKAPI
|
3616 |
NTSTATUS
|
3617 |
NTAPI
|
3618 |
KsDisableEvent(
|
3619 |
IN PIRP Irp,
|
3620 |
IN OUT PLIST_ENTRY EventsList,
|
3621 |
IN KSEVENTS_LOCKTYPE EventsFlags,
|
3622 |
IN PVOID EventsLock
|
3623 |
);
|
3624 |
|
3625 |
KSDDKAPI
|
3626 |
VOID
|
3627 |
NTAPI
|
3628 |
KsDiscardEvent(
|
3629 |
IN PKSEVENT_ENTRY EventEntry
|
3630 |
);
|
3631 |
|
3632 |
KSDDKAPI
|
3633 |
VOID
|
3634 |
NTAPI
|
3635 |
KsFreeEventList(
|
3636 |
IN PFILE_OBJECT FileObject,
|
3637 |
IN OUT PLIST_ENTRY EventsList,
|
3638 |
IN KSEVENTS_LOCKTYPE EventsFlags,
|
3639 |
IN PVOID EventsLock
|
3640 |
);
|
3641 |
|
3642 |
KSDDKAPI
|
3643 |
NTSTATUS
|
3644 |
NTAPI
|
3645 |
KsGenerateEvent(
|
3646 |
IN PKSEVENT_ENTRY EventEntry
|
3647 |
);
|
3648 |
|
3649 |
KSDDKAPI
|
3650 |
NTSTATUS
|
3651 |
NTAPI
|
3652 |
KsGenerateDataEvent(
|
3653 |
IN PKSEVENT_ENTRY EventEntry,
|
3654 |
IN ULONG DataSize,
|
3655 |
IN PVOID Data
|
3656 |
);
|
3657 |
|
3658 |
KSDDKAPI
|
3659 |
VOID
|
3660 |
NTAPI
|
3661 |
KsGenerateEventList(
|
3662 |
IN GUID* Set OPTIONAL,
|
3663 |
IN ULONG EventId,
|
3664 |
IN PLIST_ENTRY EventsList,
|
3665 |
IN KSEVENTS_LOCKTYPE EventsFlags,
|
3666 |
IN PVOID EventsLock
|
3667 |
);
|
3668 |
|
3669 |
// property.c:
|
3670 |
|
3671 |
KSDDKAPI
|
3672 |
NTSTATUS
|
3673 |
NTAPI
|
3674 |
KsPropertyHandler(
|
3675 |
IN PIRP Irp,
|
3676 |
IN ULONG PropertySetsCount,
|
3677 |
IN const KSPROPERTY_SET* PropertySet
|
3678 |
);
|
3679 |
|
3680 |
KSDDKAPI
|
3681 |
NTSTATUS
|
3682 |
NTAPI
|
3683 |
KsPropertyHandlerWithAllocator(
|
3684 |
IN PIRP Irp,
|
3685 |
IN ULONG PropertySetsCount,
|
3686 |
IN const KSPROPERTY_SET* PropertySet,
|
3687 |
IN PFNKSALLOCATOR Allocator OPTIONAL,
|
3688 |
IN ULONG PropertyItemSize OPTIONAL
|
3689 |
);
|
3690 |
|
3691 |
KSDDKAPI
|
3692 |
BOOLEAN
|
3693 |
NTAPI
|
3694 |
KsFastPropertyHandler(
|
3695 |
IN PFILE_OBJECT FileObject,
|
3696 |
IN PKSPROPERTY UNALIGNED Property,
|
3697 |
IN ULONG PropertyLength,
|
3698 |
IN OUT PVOID UNALIGNED Data,
|
3699 |
IN ULONG DataLength,
|
3700 |
OUT PIO_STATUS_BLOCK IoStatus,
|
3701 |
IN ULONG PropertySetsCount,
|
3702 |
IN const KSPROPERTY_SET* PropertySet
|
3703 |
);
|
3704 |
|
3705 |
// method.c:
|
3706 |
|
3707 |
KSDDKAPI
|
3708 |
NTSTATUS
|
3709 |
NTAPI
|
3710 |
KsMethodHandler(
|
3711 |
IN PIRP Irp,
|
3712 |
IN ULONG MethodSetsCount,
|
3713 |
IN const KSMETHOD_SET* MethodSet
|
3714 |
);
|
3715 |
|
3716 |
KSDDKAPI
|
3717 |
NTSTATUS
|
3718 |
NTAPI
|
3719 |
KsMethodHandlerWithAllocator(
|
3720 |
IN PIRP Irp,
|
3721 |
IN ULONG MethodSetsCount,
|
3722 |
IN const KSMETHOD_SET* MethodSet,
|
3723 |
IN PFNKSALLOCATOR Allocator OPTIONAL,
|
3724 |
IN ULONG MethodItemSize OPTIONAL
|
3725 |
);
|
3726 |
|
3727 |
KSDDKAPI
|
3728 |
BOOLEAN
|
3729 |
NTAPI
|
3730 |
KsFastMethodHandler(
|
3731 |
IN PFILE_OBJECT FileObject,
|
3732 |
IN PKSMETHOD UNALIGNED Method,
|
3733 |
IN ULONG MethodLength,
|
3734 |
IN OUT PVOID UNALIGNED Data,
|
3735 |
IN ULONG DataLength,
|
3736 |
OUT PIO_STATUS_BLOCK IoStatus,
|
3737 |
IN ULONG MethodSetsCount,
|
3738 |
IN const KSMETHOD_SET* MethodSet
|
3739 |
);
|
3740 |
|
3741 |
// alloc.c:
|
3742 |
|
3743 |
KSDDKAPI
|
3744 |
NTSTATUS
|
3745 |
NTAPI
|
3746 |
KsCreateDefaultAllocator(
|
3747 |
IN PIRP Irp
|
3748 |
);
|
3749 |
|
3750 |
KSDDKAPI
|
3751 |
NTSTATUS
|
3752 |
NTAPI
|
3753 |
KsCreateDefaultAllocatorEx(
|
3754 |
IN PIRP Irp,
|
3755 |
IN PVOID InitializeContext OPTIONAL,
|
3756 |
IN PFNKSDEFAULTALLOCATE DefaultAllocate OPTIONAL,
|
3757 |
IN PFNKSDEFAULTFREE DefaultFree OPTIONAL,
|
3758 |
IN PFNKSINITIALIZEALLOCATOR InitializeAllocator OPTIONAL,
|
3759 |
IN PFNKSDELETEALLOCATOR DeleteAllocator OPTIONAL
|
3760 |
);
|
3761 |
|
3762 |
KSDDKAPI
|
3763 |
NTSTATUS
|
3764 |
NTAPI
|
3765 |
KsCreateAllocator(
|
3766 |
IN HANDLE ConnectionHandle,
|
3767 |
IN PKSALLOCATOR_FRAMING AllocatorFraming,
|
3768 |
OUT PHANDLE AllocatorHandle
|
3769 |
);
|
3770 |
|
3771 |
KSDDKAPI
|
3772 |
NTSTATUS
|
3773 |
NTAPI
|
3774 |
KsValidateAllocatorCreateRequest(
|
3775 |
IN PIRP Irp,
|
3776 |
OUT PKSALLOCATOR_FRAMING* AllocatorFraming
|
3777 |
);
|
3778 |
|
3779 |
KSDDKAPI
|
3780 |
NTSTATUS
|
3781 |
NTAPI
|
3782 |
KsValidateAllocatorFramingEx(
|
3783 |
IN PKSALLOCATOR_FRAMING_EX Framing,
|
3784 |
IN ULONG BufferSize,
|
3785 |
IN const KSALLOCATOR_FRAMING_EX *PinFraming
|
3786 |
);
|
3787 |
|
3788 |
// clock.c:
|
3789 |
|
3790 |
KSDDKAPI
|
3791 |
NTSTATUS
|
3792 |
NTAPI
|
3793 |
KsAllocateDefaultClock(
|
3794 |
OUT PKSDEFAULTCLOCK* DefaultClock
|
3795 |
);
|
3796 |
|
3797 |
KSDDKAPI
|
3798 |
NTSTATUS
|
3799 |
NTAPI
|
3800 |
KsAllocateDefaultClockEx(
|
3801 |
OUT PKSDEFAULTCLOCK* DefaultClock,
|
3802 |
IN PVOID Context OPTIONAL,
|
3803 |
IN PFNKSSETTIMER SetTimer OPTIONAL,
|
3804 |
IN PFNKSCANCELTIMER CancelTimer OPTIONAL,
|
3805 |
IN PFNKSCORRELATEDTIME CorrelatedTime OPTIONAL,
|
3806 |
IN const KSRESOLUTION* Resolution OPTIONAL,
|
3807 |
IN ULONG Flags
|
3808 |
);
|
3809 |
|
3810 |
KSDDKAPI
|
3811 |
VOID
|
3812 |
NTAPI
|
3813 |
KsFreeDefaultClock(
|
3814 |
IN PKSDEFAULTCLOCK DefaultClock
|
3815 |
);
|
3816 |
|
3817 |
KSDDKAPI
|
3818 |
NTSTATUS
|
3819 |
NTAPI
|
3820 |
KsCreateDefaultClock(
|
3821 |
IN PIRP Irp,
|
3822 |
IN PKSDEFAULTCLOCK DefaultClock
|
3823 |
);
|
3824 |
|
3825 |
KSDDKAPI
|
3826 |
NTSTATUS
|
3827 |
NTAPI
|
3828 |
KsCreateClock(
|
3829 |
IN HANDLE ConnectionHandle,
|
3830 |
IN PKSCLOCK_CREATE ClockCreate,
|
3831 |
OUT PHANDLE ClockHandle
|
3832 |
);
|
3833 |
|
3834 |
KSDDKAPI
|
3835 |
NTSTATUS
|
3836 |
NTAPI
|
3837 |
KsValidateClockCreateRequest(
|
3838 |
IN PIRP Irp,
|
3839 |
OUT PKSCLOCK_CREATE* ClockCreate
|
3840 |
);
|
3841 |
|
3842 |
KSDDKAPI
|
3843 |
KSSTATE
|
3844 |
NTAPI
|
3845 |
KsGetDefaultClockState(
|
3846 |
IN PKSDEFAULTCLOCK DefaultClock
|
3847 |
);
|
3848 |
|
3849 |
KSDDKAPI
|
3850 |
VOID
|
3851 |
NTAPI
|
3852 |
KsSetDefaultClockState(
|
3853 |
IN PKSDEFAULTCLOCK DefaultClock,
|
3854 |
IN KSSTATE State
|
3855 |
);
|
3856 |
|
3857 |
KSDDKAPI
|
3858 |
LONGLONG
|
3859 |
NTAPI
|
3860 |
KsGetDefaultClockTime(
|
3861 |
IN PKSDEFAULTCLOCK DefaultClock
|
3862 |
);
|
3863 |
|
3864 |
KSDDKAPI
|
3865 |
VOID
|
3866 |
NTAPI
|
3867 |
KsSetDefaultClockTime(
|
3868 |
IN PKSDEFAULTCLOCK DefaultClock,
|
3869 |
IN LONGLONG Time
|
3870 |
);
|
3871 |
|
3872 |
// connect.c:
|
3873 |
|
3874 |
KSDDKAPI
|
3875 |
NTSTATUS
|
3876 |
NTAPI
|
3877 |
KsCreatePin(
|
3878 |
IN HANDLE FilterHandle,
|
3879 |
IN PKSPIN_CONNECT Connect,
|
3880 |
IN ACCESS_MASK DesiredAccess,
|
3881 |
OUT PHANDLE ConnectionHandle
|
3882 |
);
|
3883 |
|
3884 |
KSDDKAPI
|
3885 |
NTSTATUS
|
3886 |
NTAPI
|
3887 |
KsValidateConnectRequest(
|
3888 |
IN PIRP Irp,
|
3889 |
IN ULONG DescriptorsCount,
|
3890 |
IN const KSPIN_DESCRIPTOR* Descriptor,
|
3891 |
OUT PKSPIN_CONNECT* Connect
|
3892 |
);
|
3893 |
|
3894 |
KSDDKAPI
|
3895 |
NTSTATUS
|
3896 |
NTAPI
|
3897 |
KsPinPropertyHandler(
|
3898 |
IN PIRP Irp,
|
3899 |
IN PKSPROPERTY Property,
|
3900 |
IN OUT PVOID Data,
|
3901 |
IN ULONG DescriptorsCount,
|
3902 |
IN const KSPIN_DESCRIPTOR* Descriptor
|
3903 |
);
|
3904 |
|
3905 |
KSDDKAPI
|
3906 |
NTSTATUS
|
3907 |
NTAPI
|
3908 |
KsPinDataIntersection(
|
3909 |
IN PIRP Irp,
|
3910 |
IN PKSP_PIN Pin,
|
3911 |
OUT PVOID Data OPTIONAL,
|
3912 |
IN ULONG DescriptorsCount,
|
3913 |
IN const KSPIN_DESCRIPTOR* Descriptor,
|
3914 |
IN PFNKSINTERSECTHANDLER IntersectHandler
|
3915 |
);
|
3916 |
|
3917 |
KSDDKAPI
|
3918 |
NTSTATUS
|
3919 |
NTAPI
|
3920 |
KsPinDataIntersectionEx(
|
3921 |
IN PIRP Irp,
|
3922 |
IN PKSP_PIN Pin,
|
3923 |
OUT PVOID Data,
|
3924 |
IN ULONG DescriptorsCount,
|
3925 |
IN const KSPIN_DESCRIPTOR* Descriptor,
|
3926 |
IN ULONG DescriptorSize,
|
3927 |
IN PFNKSINTERSECTHANDLEREX IntersectHandler OPTIONAL,
|
3928 |
IN PVOID HandlerContext OPTIONAL
|
3929 |
);
|
3930 |
|
3931 |
KSDDKAPI
|
3932 |
NTSTATUS
|
3933 |
NTAPI
|
3934 |
KsHandleSizedListQuery(
|
3935 |
IN PIRP Irp,
|
3936 |
IN ULONG DataItemsCount,
|
3937 |
IN ULONG DataItemSize,
|
3938 |
IN const VOID* DataItems
|
3939 |
);
|
3940 |
|
3941 |
// image.c:
|
3942 |
|
3943 |
#if (!defined( MAKEINTRESOURCE ))
|
3944 |
#define MAKEINTRESOURCE( res ) ((ULONG_PTR) (USHORT) res)
|
3945 |
#endif
|
3946 |
|
3947 |
#if (!defined( RT_STRING ))
|
3948 |
#define RT_STRING MAKEINTRESOURCE( 6 )
|
3949 |
#define RT_RCDATA MAKEINTRESOURCE( 10 )
|
3950 |
#endif
|
3951 |
|
3952 |
KSDDKAPI
|
3953 |
NTSTATUS
|
3954 |
NTAPI
|
3955 |
KsLoadResource(
|
3956 |
IN PVOID ImageBase,
|
3957 |
IN POOL_TYPE PoolType,
|
3958 |
IN ULONG_PTR ResourceName,
|
3959 |
IN ULONG ResourceType,
|
3960 |
OUT PVOID *Resource,
|
3961 |
OUT PULONG ResourceSize
|
3962 |
);
|
3963 |
|
3964 |
KSDDKAPI
|
3965 |
NTSTATUS
|
3966 |
NTAPI
|
3967 |
KsGetImageNameAndResourceId(
|
3968 |
IN HANDLE RegKey,
|
3969 |
OUT PUNICODE_STRING ImageName,
|
3970 |
OUT PULONG_PTR ResourceId,
|
3971 |
OUT PULONG ValueType
|
3972 |
);
|
3973 |
|
3974 |
KSDDKAPI
|
3975 |
NTSTATUS
|
3976 |
NTAPI
|
3977 |
KsMapModuleName(
|
3978 |
IN PDEVICE_OBJECT PhysicalDeviceObject,
|
3979 |
IN PUNICODE_STRING ModuleName,
|
3980 |
OUT PUNICODE_STRING ImageName,
|
3981 |
OUT PULONG_PTR ResourceId,
|
3982 |
OUT PULONG ValueType
|
3983 |
);
|
3984 |
|
3985 |
// irp.c:
|
3986 |
|
3987 |
KSDDKAPI
|
3988 |
NTSTATUS
|
3989 |
NTAPI
|
3990 |
KsReferenceBusObject(
|
3991 |
IN KSDEVICE_HEADER Header
|
3992 |
);
|
3993 |
|
3994 |
KSDDKAPI
|
3995 |
VOID
|
3996 |
NTAPI
|
3997 |
KsDereferenceBusObject(
|
3998 |
IN KSDEVICE_HEADER Header
|
3999 |
);
|
4000 |
|
4001 |
KSDDKAPI
|
4002 |
NTSTATUS
|
4003 |
NTAPI
|
4004 |
KsDispatchQuerySecurity(
|
4005 |
IN PDEVICE_OBJECT DeviceObject,
|
4006 |
IN PIRP Irp
|
4007 |
);
|
4008 |
|
4009 |
KSDDKAPI
|
4010 |
NTSTATUS
|
4011 |
NTAPI
|
4012 |
KsDispatchSetSecurity(
|
4013 |
IN PDEVICE_OBJECT DeviceObject,
|
4014 |
IN PIRP Irp
|
4015 |
);
|
4016 |
|
4017 |
KSDDKAPI
|
4018 |
NTSTATUS
|
4019 |
NTAPI
|
4020 |
KsDispatchSpecificProperty(
|
4021 |
IN PIRP Irp,
|
4022 |
IN PFNKSHANDLER Handler
|
4023 |
);
|
4024 |
|
4025 |
KSDDKAPI
|
4026 |
NTSTATUS
|
4027 |
NTAPI
|
4028 |
KsDispatchSpecificMethod(
|
4029 |
IN PIRP Irp,
|
4030 |
IN PFNKSHANDLER Handler
|
4031 |
);
|
4032 |
|
4033 |
KSDDKAPI
|
4034 |
NTSTATUS
|
4035 |
NTAPI
|
4036 |
KsReadFile(
|
4037 |
IN PFILE_OBJECT FileObject,
|
4038 |
IN PKEVENT Event OPTIONAL,
|
4039 |
IN PVOID PortContext OPTIONAL,
|
4040 |
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
4041 |
OUT PVOID Buffer,
|
4042 |
IN ULONG Length,
|
4043 |
IN ULONG Key OPTIONAL,
|
4044 |
IN KPROCESSOR_MODE RequestorMode
|
4045 |
);
|
4046 |
|
4047 |
KSDDKAPI
|
4048 |
NTSTATUS
|
4049 |
NTAPI
|
4050 |
KsWriteFile(
|
4051 |
IN PFILE_OBJECT FileObject,
|
4052 |
IN PKEVENT Event OPTIONAL,
|
4053 |
IN PVOID PortContext OPTIONAL,
|
4054 |
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
4055 |
IN PVOID Buffer,
|
4056 |
IN ULONG Length,
|
4057 |
IN ULONG Key OPTIONAL,
|
4058 |
IN KPROCESSOR_MODE RequestorMode
|
4059 |
);
|
4060 |
|
4061 |
KSDDKAPI
|
4062 |
NTSTATUS
|
4063 |
NTAPI
|
4064 |
KsQueryInformationFile(
|
4065 |
IN PFILE_OBJECT FileObject,
|
4066 |
OUT PVOID FileInformation,
|
4067 |
IN ULONG Length,
|
4068 |
IN FILE_INFORMATION_CLASS FileInformationClass
|
4069 |
);
|
4070 |
|
4071 |
KSDDKAPI
|
4072 |
NTSTATUS
|
4073 |
NTAPI
|
4074 |
KsSetInformationFile(
|
4075 |
IN PFILE_OBJECT FileObject,
|
4076 |
IN PVOID FileInformation,
|
4077 |
IN ULONG Length,
|
4078 |
IN FILE_INFORMATION_CLASS FileInformationClass
|
4079 |
);
|
4080 |
|
4081 |
KSDDKAPI
|
4082 |
NTSTATUS
|
4083 |
NTAPI
|
4084 |
KsStreamIo(
|
4085 |
IN PFILE_OBJECT FileObject,
|
4086 |
IN PKEVENT Event OPTIONAL,
|
4087 |
IN PVOID PortContext OPTIONAL,
|
4088 |
IN PIO_COMPLETION_ROUTINE CompletionRoutine OPTIONAL,
|
4089 |
IN PVOID CompletionContext OPTIONAL,
|
4090 |
IN KSCOMPLETION_INVOCATION CompletionInvocationFlags OPTIONAL,
|
4091 |
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
4092 |
IN OUT PVOID StreamHeaders,
|
4093 |
IN ULONG Length,
|
4094 |
IN ULONG Flags,
|
4095 |
IN KPROCESSOR_MODE RequestorMode
|
4096 |
);
|
4097 |
|
4098 |
KSDDKAPI
|
4099 |
NTSTATUS
|
4100 |
NTAPI
|
4101 |
KsProbeStreamIrp(
|
4102 |
IN OUT PIRP Irp,
|
4103 |
IN ULONG ProbeFlags,
|
4104 |
IN ULONG HeaderSize OPTIONAL
|
4105 |
);
|
4106 |
|
4107 |
KSDDKAPI
|
4108 |
NTSTATUS
|
4109 |
NTAPI
|
4110 |
KsAllocateExtraData(
|
4111 |
IN OUT PIRP Irp,
|
4112 |
IN ULONG ExtraSize,
|
4113 |
OUT PVOID* ExtraBuffer
|
4114 |
);
|
4115 |
|
4116 |
KSDDKAPI
|
4117 |
VOID
|
4118 |
NTAPI
|
4119 |
KsNullDriverUnload(
|
4120 |
IN PDRIVER_OBJECT DriverObject
|
4121 |
);
|
4122 |
|
4123 |
KSDDKAPI
|
4124 |
NTSTATUS
|
4125 |
NTAPI
|
4126 |
KsSetMajorFunctionHandler(
|
4127 |
IN PDRIVER_OBJECT DriverObject,
|
4128 |
IN ULONG MajorFunction
|
4129 |
);
|
4130 |
|
4131 |
KSDDKAPI
|
4132 |
NTSTATUS
|
4133 |
NTAPI
|
4134 |
KsDispatchInvalidDeviceRequest(
|
4135 |
IN PDEVICE_OBJECT DeviceObject,
|
4136 |
IN PIRP Irp
|
4137 |
);
|
4138 |
|
4139 |
KSDDKAPI
|
4140 |
NTSTATUS
|
4141 |
NTAPI
|
4142 |
KsDefaultDeviceIoCompletion(
|
4143 |
IN PDEVICE_OBJECT DeviceObject,
|
4144 |
IN PIRP Irp
|
4145 |
);
|
4146 |
|
4147 |
KSDDKAPI
|
4148 |
NTSTATUS
|
4149 |
NTAPI
|
4150 |
KsDispatchIrp(
|
4151 |
IN PDEVICE_OBJECT DeviceObject,
|
4152 |
IN PIRP Irp
|
4153 |
);
|
4154 |
|
4155 |
KSDDKAPI
|
4156 |
BOOLEAN
|
4157 |
NTAPI
|
4158 |
KsDispatchFastIoDeviceControlFailure(
|
4159 |
IN PFILE_OBJECT FileObject,
|
4160 |
IN BOOLEAN Wait,
|
4161 |
IN PVOID InputBuffer OPTIONAL,
|
4162 |
IN ULONG InputBufferLength,
|
4163 |
OUT PVOID OutputBuffer OPTIONAL,
|
4164 |
IN ULONG OutputBufferLength,
|
4165 |
IN ULONG IoControlCode,
|
4166 |
OUT PIO_STATUS_BLOCK IoStatus,
|
4167 |
IN PDEVICE_OBJECT DeviceObject
|
4168 |
);
|
4169 |
|
4170 |
KSDDKAPI
|
4171 |
BOOLEAN
|
4172 |
NTAPI
|
4173 |
KsDispatchFastReadFailure(
|
4174 |
IN PFILE_OBJECT FileObject,
|
4175 |
IN PLARGE_INTEGER FileOffset,
|
4176 |
IN ULONG Length,
|
4177 |
IN BOOLEAN Wait,
|
4178 |
IN ULONG LockKey,
|
4179 |
OUT PVOID Buffer,
|
4180 |
OUT PIO_STATUS_BLOCK IoStatus,
|
4181 |
IN PDEVICE_OBJECT DeviceObject
|
4182 |
);
|
4183 |
|
4184 |
#define KsDispatchFastWriteFailure KsDispatchFastReadFailure
|
4185 |
|
4186 |
KSDDKAPI
|
4187 |
VOID
|
4188 |
NTAPI
|
4189 |
KsCancelRoutine(
|
4190 |
IN PDEVICE_OBJECT DeviceObject,
|
4191 |
IN PIRP Irp
|
4192 |
);
|
4193 |
|
4194 |
KSDDKAPI
|
4195 |
VOID
|
4196 |
NTAPI
|
4197 |
KsCancelIo(
|
4198 |
IN OUT PLIST_ENTRY QueueHead,
|
4199 |
IN PKSPIN_LOCK SpinLock
|
4200 |
);
|
4201 |
|
4202 |
KSDDKAPI
|
4203 |
VOID
|
4204 |
NTAPI
|
4205 |
KsReleaseIrpOnCancelableQueue(
|
4206 |
IN PIRP Irp,
|
4207 |
IN PDRIVER_CANCEL DriverCancel OPTIONAL
|
4208 |
);
|
4209 |
|
4210 |
KSDDKAPI
|
4211 |
PIRP
|
4212 |
NTAPI
|
4213 |
KsRemoveIrpFromCancelableQueue(
|
4214 |
IN OUT PLIST_ENTRY QueueHead,
|
4215 |
IN PKSPIN_LOCK SpinLock,
|
4216 |
IN KSLIST_ENTRY_LOCATION ListLocation,
|
4217 |
IN KSIRP_REMOVAL_OPERATION RemovalOperation
|
4218 |
);
|
4219 |
|
4220 |
KSDDKAPI
|
4221 |
NTSTATUS
|
4222 |
NTAPI
|
4223 |
KsMoveIrpsOnCancelableQueue(
|
4224 |
IN OUT PLIST_ENTRY SourceList,
|
4225 |
IN PKSPIN_LOCK SourceLock,
|
4226 |
IN OUT PLIST_ENTRY DestinationList,
|
4227 |
IN PKSPIN_LOCK DestinationLock OPTIONAL,
|
4228 |
IN KSLIST_ENTRY_LOCATION ListLocation,
|
4229 |
IN PFNKSIRPLISTCALLBACK ListCallback,
|
4230 |
IN PVOID Context
|
4231 |
);
|
4232 |
|
4233 |
KSDDKAPI
|
4234 |
VOID
|
4235 |
NTAPI
|
4236 |
KsRemoveSpecificIrpFromCancelableQueue(
|
4237 |
IN PIRP Irp
|
4238 |
);
|
4239 |
|
4240 |
KSDDKAPI
|
4241 |
VOID
|
4242 |
NTAPI
|
4243 |
KsAddIrpToCancelableQueue(
|
4244 |
IN OUT PLIST_ENTRY QueueHead,
|
4245 |
IN PKSPIN_LOCK SpinLock,
|
4246 |
IN PIRP Irp,
|
4247 |
IN KSLIST_ENTRY_LOCATION ListLocation,
|
4248 |
IN PDRIVER_CANCEL DriverCancel OPTIONAL
|
4249 |
);
|
4250 |
|
4251 |
// api.c:
|
4252 |
|
4253 |
KSDDKAPI
|
4254 |
NTSTATUS
|
4255 |
NTAPI
|
4256 |
KsAcquireResetValue(
|
4257 |
IN PIRP Irp,
|
4258 |
OUT KSRESET* ResetValue
|
4259 |
);
|
4260 |
|
4261 |
KSDDKAPI
|
4262 |
NTSTATUS
|
4263 |
NTAPI
|
4264 |
KsTopologyPropertyHandler(
|
4265 |
IN PIRP Irp,
|
4266 |
IN PKSPROPERTY Property,
|
4267 |
IN OUT PVOID Data,
|
4268 |
IN const KSTOPOLOGY* Topology
|
4269 |
);
|
4270 |
|
4271 |
KSDDKAPI
|
4272 |
VOID
|
4273 |
NTAPI
|
4274 |
KsAcquireDeviceSecurityLock(
|
4275 |
IN KSDEVICE_HEADER Header,
|
4276 |
IN BOOLEAN Exclusive
|
4277 |
);
|
4278 |
|
4279 |
KSDDKAPI
|
4280 |
VOID
|
4281 |
NTAPI
|
4282 |
KsReleaseDeviceSecurityLock(
|
4283 |
IN KSDEVICE_HEADER Header
|
4284 |
);
|
4285 |
|
4286 |
KSDDKAPI
|
4287 |
NTSTATUS
|
4288 |
NTAPI
|
4289 |
KsDefaultDispatchPnp(
|
4290 |
IN PDEVICE_OBJECT DeviceObject,
|
4291 |
IN PIRP Irp
|
4292 |
);
|
4293 |
|
4294 |
KSDDKAPI
|
4295 |
NTSTATUS
|
4296 |
NTAPI
|
4297 |
KsDefaultDispatchPower(
|
4298 |
IN PDEVICE_OBJECT DeviceObject,
|
4299 |
IN PIRP Irp
|
4300 |
);
|
4301 |
|
4302 |
KSDDKAPI
|
4303 |
NTSTATUS
|
4304 |
NTAPI
|
4305 |
KsDefaultForwardIrp(
|
4306 |
IN PDEVICE_OBJECT DeviceObject,
|
4307 |
IN PIRP Irp
|
4308 |
);
|
4309 |
|
4310 |
KSDDKAPI
|
4311 |
VOID
|
4312 |
NTAPI
|
4313 |
KsSetDevicePnpAndBaseObject(
|
4314 |
IN KSDEVICE_HEADER Header,
|
4315 |
IN PDEVICE_OBJECT PnpDeviceObject,
|
4316 |
IN PDEVICE_OBJECT BaseObject
|
4317 |
);
|
4318 |
|
4319 |
KSDDKAPI
|
4320 |
PDEVICE_OBJECT
|
4321 |
NTAPI
|
4322 |
KsQueryDevicePnpObject(
|
4323 |
IN KSDEVICE_HEADER Header
|
4324 |
);
|
4325 |
|
4326 |
KSDDKAPI
|
4327 |
ACCESS_MASK
|
4328 |
NTAPI
|
4329 |
KsQueryObjectAccessMask(
|
4330 |
IN KSOBJECT_HEADER Header
|
4331 |
);
|
4332 |
|
4333 |
KSDDKAPI
|
4334 |
VOID
|
4335 |
NTAPI
|
4336 |
KsRecalculateStackDepth(
|
4337 |
IN KSDEVICE_HEADER Header,
|
4338 |
IN BOOLEAN ReuseStackLocation
|
4339 |
);
|
4340 |
|
4341 |
KSDDKAPI
|
4342 |
VOID
|
4343 |
NTAPI
|
4344 |
KsSetTargetState(
|
4345 |
IN KSOBJECT_HEADER Header,
|
4346 |
IN KSTARGET_STATE TargetState
|
4347 |
);
|
4348 |
|
4349 |
KSDDKAPI
|
4350 |
VOID
|
4351 |
NTAPI
|
4352 |
KsSetTargetDeviceObject(
|
4353 |
IN KSOBJECT_HEADER Header,
|
4354 |
IN PDEVICE_OBJECT TargetDevice OPTIONAL
|
4355 |
);
|
4356 |
|
4357 |
KSDDKAPI
|
4358 |
VOID
|
4359 |
NTAPI
|
4360 |
KsSetPowerDispatch(
|
4361 |
IN KSOBJECT_HEADER Header,
|
4362 |
IN PFNKSCONTEXT_DISPATCH PowerDispatch OPTIONAL,
|
4363 |
IN PVOID PowerContext OPTIONAL
|
4364 |
);
|
4365 |
|
4366 |
KSDDKAPI
|
4367 |
PKSOBJECT_CREATE_ITEM
|
4368 |
NTAPI
|
4369 |
KsQueryObjectCreateItem(
|
4370 |
IN KSOBJECT_HEADER Header
|
4371 |
);
|
4372 |
|
4373 |
KSDDKAPI
|
4374 |
NTSTATUS
|
4375 |
NTAPI
|
4376 |
KsAllocateDeviceHeader(
|
4377 |
OUT KSDEVICE_HEADER* Header,
|
4378 |
IN ULONG ItemsCount,
|
4379 |
IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL
|
4380 |
);
|
4381 |
|
4382 |
KSDDKAPI
|
4383 |
VOID
|
4384 |
NTAPI
|
4385 |
KsFreeDeviceHeader(
|
4386 |
IN KSDEVICE_HEADER Header
|
4387 |
);
|
4388 |
|
4389 |
KSDDKAPI
|
4390 |
NTSTATUS
|
4391 |
NTAPI
|
4392 |
KsAllocateObjectHeader(
|
4393 |
OUT KSOBJECT_HEADER* Header,
|
4394 |
IN ULONG ItemsCount,
|
4395 |
IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL,
|
4396 |
IN PIRP Irp,
|
4397 |
IN const KSDISPATCH_TABLE* Table
|
4398 |
);
|
4399 |
|
4400 |
KSDDKAPI
|
4401 |
VOID
|
4402 |
NTAPI
|
4403 |
KsFreeObjectHeader(
|
4404 |
IN KSOBJECT_HEADER Header
|
4405 |
);
|
4406 |
|
4407 |
KSDDKAPI
|
4408 |
NTSTATUS
|
4409 |
NTAPI
|
4410 |
KsAddObjectCreateItemToDeviceHeader(
|
4411 |
IN KSDEVICE_HEADER Header,
|
4412 |
IN PDRIVER_DISPATCH Create,
|
4413 |
IN PVOID Context,
|
4414 |
IN PWCHAR ObjectClass,
|
4415 |
IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL
|
4416 |
);
|
4417 |
|
4418 |
KSDDKAPI
|
4419 |
NTSTATUS
|
4420 |
NTAPI
|
4421 |
KsAddObjectCreateItemToObjectHeader(
|
4422 |
IN KSOBJECT_HEADER Header,
|
4423 |
IN PDRIVER_DISPATCH Create,
|
4424 |
IN PVOID Context,
|
4425 |
IN PWCHAR ObjectClass,
|
4426 |
IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL
|
4427 |
);
|
4428 |
|
4429 |
KSDDKAPI
|
4430 |
NTSTATUS
|
4431 |
NTAPI
|
4432 |
KsAllocateObjectCreateItem(
|
4433 |
IN KSDEVICE_HEADER Header,
|
4434 |
IN PKSOBJECT_CREATE_ITEM CreateItem,
|
4435 |
IN BOOLEAN AllocateEntry,
|
4436 |
IN PFNKSITEMFREECALLBACK ItemFreeCallback OPTIONAL
|
4437 |
);
|
4438 |
|
4439 |
KSDDKAPI
|
4440 |
NTSTATUS
|
4441 |
NTAPI
|
4442 |
KsFreeObjectCreateItem(
|
4443 |
IN KSDEVICE_HEADER Header,
|
4444 |
IN PUNICODE_STRING CreateItem
|
4445 |
);
|
4446 |
|
4447 |
KSDDKAPI
|
4448 |
NTSTATUS
|
4449 |
NTAPI
|
4450 |
KsFreeObjectCreateItemsByContext(
|
4451 |
IN KSDEVICE_HEADER Header,
|
4452 |
IN PVOID Context
|
4453 |
);
|
4454 |
|
4455 |
KSDDKAPI
|
4456 |
NTSTATUS
|
4457 |
NTAPI
|
4458 |
KsCreateDefaultSecurity(
|
4459 |
IN PSECURITY_DESCRIPTOR ParentSecurity OPTIONAL,
|
4460 |
OUT PSECURITY_DESCRIPTOR* DefaultSecurity
|
4461 |
);
|
4462 |
|
4463 |
KSDDKAPI
|
4464 |
NTSTATUS
|
4465 |
NTAPI
|
4466 |
KsForwardIrp(
|
4467 |
IN PIRP Irp,
|
4468 |
IN PFILE_OBJECT FileObject,
|
4469 |
IN BOOLEAN ReuseStackLocation
|
4470 |
);
|
4471 |
|
4472 |
KSDDKAPI
|
4473 |
NTSTATUS
|
4474 |
NTAPI
|
4475 |
KsForwardAndCatchIrp(
|
4476 |
IN PDEVICE_OBJECT DeviceObject,
|
4477 |
IN PIRP Irp,
|
4478 |
IN PFILE_OBJECT FileObject,
|
4479 |
IN KSSTACK_USE StackUse
|
4480 |
);
|
4481 |
|
4482 |
KSDDKAPI
|
4483 |
NTSTATUS
|
4484 |
NTAPI
|
4485 |
KsSynchronousIoControlDevice(
|
4486 |
IN PFILE_OBJECT FileObject,
|
4487 |
IN KPROCESSOR_MODE RequestorMode,
|
4488 |
IN ULONG IoControl,
|
4489 |
IN PVOID InBuffer,
|
4490 |
IN ULONG InSize,
|
4491 |
OUT PVOID OutBuffer,
|
4492 |
IN ULONG OutSize,
|
4493 |
OUT PULONG BytesReturned
|
4494 |
);
|
4495 |
|
4496 |
KSDDKAPI
|
4497 |
NTSTATUS
|
4498 |
NTAPI
|
4499 |
KsUnserializeObjectPropertiesFromRegistry(
|
4500 |
IN PFILE_OBJECT FileObject,
|
4501 |
IN HANDLE ParentKey OPTIONAL,
|
4502 |
IN PUNICODE_STRING RegistryPath OPTIONAL
|
4503 |
);
|
4504 |
|
4505 |
KSDDKAPI
|
4506 |
NTSTATUS
|
4507 |
NTAPI
|
4508 |
KsCacheMedium(
|
4509 |
IN PUNICODE_STRING SymbolicLink,
|
4510 |
IN PKSPIN_MEDIUM Medium,
|
4511 |
IN ULONG PinDirection
|
4512 |
);
|
4513 |
|
4514 |
// thread.c:
|
4515 |
|
4516 |
KSDDKAPI
|
4517 |
NTSTATUS
|
4518 |
NTAPI
|
4519 |
KsRegisterWorker(
|
4520 |
IN WORK_QUEUE_TYPE WorkQueueType,
|
4521 |
OUT PKSWORKER* Worker
|
4522 |
);
|
4523 |
KSDDKAPI
|
4524 |
NTSTATUS
|
4525 |
NTAPI
|
4526 |
KsRegisterCountedWorker(
|
4527 |
IN WORK_QUEUE_TYPE WorkQueueType,
|
4528 |
IN PWORK_QUEUE_ITEM CountedWorkItem,
|
4529 |
OUT PKSWORKER* Worker
|
4530 |
);
|
4531 |
KSDDKAPI
|
4532 |
VOID
|
4533 |
NTAPI
|
4534 |
KsUnregisterWorker(
|
4535 |
IN PKSWORKER Worker
|
4536 |
);
|
4537 |
KSDDKAPI
|
4538 |
NTSTATUS
|
4539 |
NTAPI
|
4540 |
KsQueueWorkItem(
|
4541 |
IN PKSWORKER Worker,
|
4542 |
IN PWORK_QUEUE_ITEM WorkItem
|
4543 |
);
|
4544 |
KSDDKAPI
|
4545 |
ULONG
|
4546 |
NTAPI
|
4547 |
KsIncrementCountedWorker(
|
4548 |
IN PKSWORKER Worker
|
4549 |
);
|
4550 |
KSDDKAPI
|
4551 |
ULONG
|
4552 |
NTAPI
|
4553 |
KsDecrementCountedWorker(
|
4554 |
IN PKSWORKER Worker
|
4555 |
);
|
4556 |
|
4557 |
// topology.c:
|
4558 |
|
4559 |
KSDDKAPI
|
4560 |
NTSTATUS
|
4561 |
NTAPI
|
4562 |
KsCreateTopologyNode(
|
4563 |
IN HANDLE ParentHandle,
|
4564 |
IN PKSNODE_CREATE NodeCreate,
|
4565 |
IN ACCESS_MASK DesiredAccess,
|
4566 |
OUT PHANDLE NodeHandle
|
4567 |
);
|
4568 |
|
4569 |
KSDDKAPI
|
4570 |
NTSTATUS
|
4571 |
NTAPI
|
4572 |
KsValidateTopologyNodeCreateRequest(
|
4573 |
IN PIRP Irp,
|
4574 |
IN PKSTOPOLOGY Topology,
|
4575 |
OUT PKSNODE_CREATE* NodeCreate
|
4576 |
);
|
4577 |
|
4578 |
KSDDKAPI
|
4579 |
NTSTATUS
|
4580 |
NTAPI
|
4581 |
KsMergeAutomationTables(
|
4582 |
OUT PKSAUTOMATION_TABLE* AutomationTableAB,
|
4583 |
IN PKSAUTOMATION_TABLE AutomationTableA OPTIONAL,
|
4584 |
IN PKSAUTOMATION_TABLE AutomationTableB OPTIONAL,
|
4585 |
IN KSOBJECT_BAG Bag OPTIONAL
|
4586 |
);
|
4587 |
|
4588 |
KSDDKAPI
|
4589 |
NTSTATUS
|
4590 |
NTAPI
|
4591 |
KsInitializeDriver(
|
4592 |
IN PDRIVER_OBJECT DriverObject,
|
4593 |
IN PUNICODE_STRING RegistryPathName,
|
4594 |
IN const KSDEVICE_DESCRIPTOR* Descriptor OPTIONAL
|
4595 |
);
|
4596 |
|
4597 |
KSDDKAPI
|
4598 |
NTSTATUS
|
4599 |
NTAPI
|
4600 |
KsAddDevice(
|
4601 |
IN PDRIVER_OBJECT DriverObject,
|
4602 |
IN PDEVICE_OBJECT PhysicalDeviceObject
|
4603 |
);
|
4604 |
|
4605 |
KSDDKAPI
|
4606 |
NTSTATUS
|
4607 |
NTAPI
|
4608 |
KsCreateDevice(
|
4609 |
IN PDRIVER_OBJECT DriverObject,
|
4610 |
IN PDEVICE_OBJECT PhysicalDeviceObject,
|
4611 |
IN const KSDEVICE_DESCRIPTOR* Descriptor OPTIONAL,
|
4612 |
IN ULONG ExtensionSize OPTIONAL,
|
4613 |
OUT PKSDEVICE* Device OPTIONAL
|
4614 |
);
|
4615 |
|
4616 |
KSDDKAPI
|
4617 |
NTSTATUS
|
4618 |
NTAPI
|
4619 |
KsInitializeDevice(
|
4620 |
IN PDEVICE_OBJECT FunctionalDeviceObject,
|
4621 |
IN PDEVICE_OBJECT PhysicalDeviceObject,
|
4622 |
IN PDEVICE_OBJECT NextDeviceObject,
|
4623 |
IN const KSDEVICE_DESCRIPTOR* Descriptor OPTIONAL
|
4624 |
);
|
4625 |
|
4626 |
KSDDKAPI
|
4627 |
void
|
4628 |
NTAPI
|
4629 |
KsTerminateDevice(
|
4630 |
IN PDEVICE_OBJECT DeviceObject
|
4631 |
);
|
4632 |
|
4633 |
KSDDKAPI
|
4634 |
PKSDEVICE
|
4635 |
NTAPI
|
4636 |
KsGetDeviceForDeviceObject(
|
4637 |
IN PDEVICE_OBJECT FunctionalDeviceObject
|
4638 |
);
|
4639 |
|
4640 |
KSDDKAPI
|
4641 |
void
|
4642 |
NTAPI
|
4643 |
KsAcquireDevice(
|
4644 |
IN PKSDEVICE Device
|
4645 |
);
|
4646 |
|
4647 |
KSDDKAPI
|
4648 |
void
|
4649 |
NTAPI
|
4650 |
KsReleaseDevice(
|
4651 |
IN PKSDEVICE Device
|
4652 |
);
|
4653 |
|
4654 |
KSDDKAPI
|
4655 |
void
|
4656 |
NTAPI
|
4657 |
KsDeviceRegisterAdapterObject(
|
4658 |
IN PKSDEVICE Device,
|
4659 |
IN PADAPTER_OBJECT AdapterObject,
|
4660 |
IN ULONG MaxMappingsByteCount,
|
4661 |
IN ULONG MappingTableStride
|
4662 |
);
|
4663 |
|
4664 |
KSDDKAPI
|
4665 |
ULONG
|
4666 |
NTAPI
|
4667 |
KsDeviceGetBusData(
|
4668 |
IN PKSDEVICE Device,
|
4669 |
IN ULONG DataType,
|
4670 |
IN PVOID Buffer,
|
4671 |
IN ULONG Offset,
|
4672 |
IN ULONG Length
|
4673 |
);
|
4674 |
|
4675 |
KSDDKAPI
|
4676 |
ULONG
|
4677 |
NTAPI
|
4678 |
KsDeviceSetBusData(
|
4679 |
IN PKSDEVICE Device,
|
4680 |
IN ULONG DataType,
|
4681 |
IN PVOID Buffer,
|
4682 |
IN ULONG Offset,
|
4683 |
IN ULONG Length
|
4684 |
);
|
4685 |
|
4686 |
KSDDKAPI
|
4687 |
NTSTATUS
|
4688 |
NTAPI
|
4689 |
KsCreateFilterFactory(
|
4690 |
IN PDEVICE_OBJECT DeviceObject,
|
4691 |
IN const KSFILTER_DESCRIPTOR* Descriptor,
|
4692 |
IN PWCHAR RefString OPTIONAL,
|
4693 |
IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL,
|
4694 |
IN ULONG CreateItemFlags,
|
4695 |
IN PFNKSFILTERFACTORYPOWER SleepCallback OPTIONAL,
|
4696 |
IN PFNKSFILTERFACTORYPOWER WakeCallback OPTIONAL,
|
4697 |
OUT PKSFILTERFACTORY* FilterFactory OPTIONAL
|
4698 |
);
|
4699 |
|
4700 |
#define KsDeleteFilterFactory(FilterFactory) \
|
4701 |
KsFreeObjectCreateItemsByContext(\
|
4702 |
*(KSDEVICE_HEADER *)(\
|
4703 |
KsFilterFactoryGetParentDevice(FilterFactory)->FunctionalDeviceObject->\
|
4704 |
DeviceExtension),\
|
4705 |
FilterFactory)
|
4706 |
|
4707 |
KSDDKAPI
|
4708 |
NTSTATUS
|
4709 |
NTAPI
|
4710 |
KsFilterFactoryAddCreateItem(
|
4711 |
IN PKSFILTERFACTORY FilterFactory,
|
4712 |
IN PWCHAR RefString,
|
4713 |
IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL,
|
4714 |
IN ULONG CreateItemFlags
|
4715 |
);
|
4716 |
|
4717 |
KSDDKAPI
|
4718 |
NTSTATUS
|
4719 |
NTAPI
|
4720 |
KsFilterFactorySetDeviceClassesState(
|
4721 |
IN PKSFILTERFACTORY FilterFactory,
|
4722 |
IN BOOLEAN NewState
|
4723 |
);
|
4724 |
|
4725 |
KSDDKAPI
|
4726 |
PUNICODE_STRING
|
4727 |
NTAPI
|
4728 |
KsFilterFactoryGetSymbolicLink(
|
4729 |
IN PKSFILTERFACTORY FilterFactory
|
4730 |
);
|
4731 |
|
4732 |
KSDDKAPI
|
4733 |
void
|
4734 |
NTAPI
|
4735 |
KsAddEvent(
|
4736 |
IN PVOID Object,
|
4737 |
IN PKSEVENT_ENTRY EventEntry
|
4738 |
);
|
4739 |
|
4740 |
void _inline
|
4741 |
KsFilterAddEvent(
|
4742 |
IN PKSFILTER Filter,
|
4743 |
IN PKSEVENT_ENTRY EventEntry
|
4744 |
)
|
4745 |
{
|
4746 |
KsAddEvent(Filter,EventEntry);
|
4747 |
}
|
4748 |
|
4749 |
void _inline
|
4750 |
KsPinAddEvent(
|
4751 |
IN PKSPIN Pin,
|
4752 |
IN PKSEVENT_ENTRY EventEntry
|
4753 |
)
|
4754 |
{
|
4755 |
KsAddEvent(Pin,EventEntry);
|
4756 |
}
|
4757 |
|
4758 |
KSDDKAPI
|
4759 |
NTSTATUS
|
4760 |
NTAPI
|
4761 |
KsDefaultAddEventHandler(
|
4762 |
IN PIRP Irp,
|
4763 |
IN PKSEVENTDATA EventData,
|
4764 |
IN OUT PKSEVENT_ENTRY EventEntry
|
4765 |
);
|
4766 |
|
4767 |
KSDDKAPI
|
4768 |
void
|
4769 |
NTAPI
|
4770 |
KsGenerateEvents(
|
4771 |
IN PVOID Object,
|
4772 |
IN const GUID* EventSet OPTIONAL,
|
4773 |
IN ULONG EventId,
|
4774 |
IN ULONG DataSize,
|
4775 |
IN PVOID Data OPTIONAL,
|
4776 |
IN PFNKSGENERATEEVENTCALLBACK CallBack OPTIONAL,
|
4777 |
IN PVOID CallBackContext OPTIONAL
|
4778 |
);
|
4779 |
|
4780 |
void _inline
|
4781 |
KsFilterGenerateEvents(
|
4782 |
IN PKSFILTER Filter,
|
4783 |
IN const GUID* EventSet OPTIONAL,
|
4784 |
IN ULONG EventId,
|
4785 |
IN ULONG DataSize,
|
4786 |
IN PVOID Data OPTIONAL,
|
4787 |
IN PFNKSGENERATEEVENTCALLBACK CallBack OPTIONAL,
|
4788 |
IN PVOID CallBackContext OPTIONAL
|
4789 |
)
|
4790 |
{
|
4791 |
KsGenerateEvents(
|
4792 |
Filter,
|
4793 |
EventSet,
|
4794 |
EventId,
|
4795 |
DataSize,
|
4796 |
Data,
|
4797 |
CallBack,
|
4798 |
CallBackContext);
|
4799 |
}
|
4800 |
|
4801 |
void _inline
|
4802 |
KsPinGenerateEvents(
|
4803 |
IN PKSPIN Pin,
|
4804 |
IN const GUID* EventSet OPTIONAL,
|
4805 |
IN ULONG EventId,
|
4806 |
IN ULONG DataSize,
|
4807 |
IN PVOID Data OPTIONAL,
|
4808 |
IN PFNKSGENERATEEVENTCALLBACK CallBack OPTIONAL,
|
4809 |
IN PVOID CallBackContext OPTIONAL
|
4810 |
)
|
4811 |
{
|
4812 |
KsGenerateEvents(
|
4813 |
Pin,
|
4814 |
EventSet,
|
4815 |
EventId,
|
4816 |
DataSize,
|
4817 |
Data,
|
4818 |
CallBack,
|
4819 |
CallBackContext);
|
4820 |
}
|
4821 |
|
4822 |
typedef enum {
|
4823 |
KSSTREAM_POINTER_STATE_UNLOCKED = 0,
|
4824 |
KSSTREAM_POINTER_STATE_LOCKED
|
4825 |
} KSSTREAM_POINTER_STATE;
|
4826 |
|
4827 |
KSDDKAPI
|
4828 |
NTSTATUS
|
4829 |
NTAPI
|
4830 |
KsPinGetAvailableByteCount(
|
4831 |
IN PKSPIN Pin,
|
4832 |
OUT PLONG InputDataBytes OPTIONAL,
|
4833 |
OUT PLONG OutputBufferBytes OPTIONAL
|
4834 |
);
|
4835 |
|
4836 |
KSDDKAPI
|
4837 |
PKSSTREAM_POINTER
|
4838 |
NTAPI
|
4839 |
KsPinGetLeadingEdgeStreamPointer(
|
4840 |
IN PKSPIN Pin,
|
4841 |
IN KSSTREAM_POINTER_STATE State
|
4842 |
);
|
4843 |
|
4844 |
KSDDKAPI
|
4845 |
PKSSTREAM_POINTER
|
4846 |
NTAPI
|
4847 |
KsPinGetTrailingEdgeStreamPointer(
|
4848 |
IN PKSPIN Pin,
|
4849 |
IN KSSTREAM_POINTER_STATE State
|
4850 |
);
|
4851 |
|
4852 |
KSDDKAPI
|
4853 |
NTSTATUS
|
4854 |
NTAPI
|
4855 |
KsStreamPointerLock(
|
4856 |
IN PKSSTREAM_POINTER StreamPointer
|
4857 |
);
|
4858 |
|
4859 |
KSDDKAPI
|
4860 |
void
|
4861 |
NTAPI
|
4862 |
KsStreamPointerUnlock(
|
4863 |
IN PKSSTREAM_POINTER StreamPointer,
|
4864 |
IN BOOLEAN Eject
|
4865 |
);
|
4866 |
|
4867 |
KSDDKAPI
|
4868 |
void
|
4869 |
NTAPI
|
4870 |
KsStreamPointerAdvanceOffsetsAndUnlock(
|
4871 |
IN PKSSTREAM_POINTER StreamPointer,
|
4872 |
IN ULONG InUsed,
|
4873 |
IN ULONG OutUsed,
|
4874 |
IN BOOLEAN Eject
|
4875 |
);
|
4876 |
|
4877 |
KSDDKAPI
|
4878 |
void
|
4879 |
NTAPI
|
4880 |
KsStreamPointerDelete(
|
4881 |
IN PKSSTREAM_POINTER StreamPointer
|
4882 |
);
|
4883 |
|
4884 |
KSDDKAPI
|
4885 |
NTSTATUS
|
4886 |
NTAPI
|
4887 |
KsStreamPointerClone(
|
4888 |
IN PKSSTREAM_POINTER StreamPointer,
|
4889 |
IN PFNKSSTREAMPOINTER CancelCallback OPTIONAL,
|
4890 |
IN ULONG ContextSize,
|
4891 |
OUT PKSSTREAM_POINTER* CloneStreamPointer
|
4892 |
);
|
4893 |
|
4894 |
KSDDKAPI
|
4895 |
NTSTATUS
|
4896 |
NTAPI
|
4897 |
KsStreamPointerAdvanceOffsets(
|
4898 |
IN PKSSTREAM_POINTER StreamPointer,
|
4899 |
IN ULONG InUsed,
|
4900 |
IN ULONG OutUsed,
|
4901 |
IN BOOLEAN Eject
|
4902 |
);
|
4903 |
|
4904 |
KSDDKAPI
|
4905 |
NTSTATUS
|
4906 |
NTAPI
|
4907 |
KsStreamPointerAdvance(
|
4908 |
IN PKSSTREAM_POINTER StreamPointer
|
4909 |
);
|
4910 |
|
4911 |
KSDDKAPI
|
4912 |
PMDL
|
4913 |
NTAPI
|
4914 |
KsStreamPointerGetMdl(
|
4915 |
IN PKSSTREAM_POINTER StreamPointer
|
4916 |
);
|
4917 |
|
4918 |
KSDDKAPI
|
4919 |
PIRP
|
4920 |
NTAPI
|
4921 |
KsStreamPointerGetIrp(
|
4922 |
IN PKSSTREAM_POINTER StreamPointer,
|
4923 |
OUT PBOOLEAN FirstFrameInIrp OPTIONAL,
|
4924 |
OUT PBOOLEAN LastFrameInIrp OPTIONAL
|
4925 |
);
|
4926 |
|
4927 |
KSDDKAPI
|
4928 |
void
|
4929 |
NTAPI
|
4930 |
KsStreamPointerScheduleTimeout(
|
4931 |
IN PKSSTREAM_POINTER StreamPointer,
|
4932 |
IN PFNKSSTREAMPOINTER Callback,
|
4933 |
IN ULONGLONG Interval
|
4934 |
);
|
4935 |
|
4936 |
KSDDKAPI
|
4937 |
void
|
4938 |
NTAPI
|
4939 |
KsStreamPointerCancelTimeout(
|
4940 |
IN PKSSTREAM_POINTER StreamPointer
|
4941 |
);
|
4942 |
|
4943 |
KSDDKAPI
|
4944 |
PKSSTREAM_POINTER
|
4945 |
NTAPI
|
4946 |
KsPinGetFirstCloneStreamPointer(
|
4947 |
IN PKSPIN Pin
|
4948 |
);
|
4949 |
|
4950 |
KSDDKAPI
|
4951 |
PKSSTREAM_POINTER
|
4952 |
NTAPI
|
4953 |
KsStreamPointerGetNextClone(
|
4954 |
IN PKSSTREAM_POINTER StreamPointer
|
4955 |
);
|
4956 |
|
4957 |
KSDDKAPI
|
4958 |
NTSTATUS
|
4959 |
NTAPI
|
4960 |
KsPinHandshake(
|
4961 |
IN PKSPIN Pin,
|
4962 |
IN PKSHANDSHAKE In,
|
4963 |
OUT PKSHANDSHAKE Out
|
4964 |
);
|
4965 |
|
4966 |
KSDDKAPI
|
4967 |
void
|
4968 |
NTAPI
|
4969 |
KsCompletePendingRequest(
|
4970 |
IN PIRP Irp
|
4971 |
);
|
4972 |
|
4973 |
KSDDKAPI
|
4974 |
KSOBJECTTYPE
|
4975 |
NTAPI
|
4976 |
KsGetObjectTypeFromIrp(
|
4977 |
IN PIRP Irp
|
4978 |
);
|
4979 |
|
4980 |
KSDDKAPI
|
4981 |
PVOID
|
4982 |
NTAPI
|
4983 |
KsGetObjectFromFileObject(
|
4984 |
IN PFILE_OBJECT FileObject
|
4985 |
);
|
4986 |
|
4987 |
KSDDKAPI
|
4988 |
KSOBJECTTYPE
|
4989 |
NTAPI
|
4990 |
KsGetObjectTypeFromFileObject(
|
4991 |
IN PFILE_OBJECT FileObject
|
4992 |
);
|
4993 |
|
4994 |
PKSFILTER __inline
|
4995 |
KsGetFilterFromFileObject(
|
4996 |
IN PFILE_OBJECT FileObject
|
4997 |
)
|
4998 |
{
|
4999 |
return (PKSFILTER) KsGetObjectFromFileObject(FileObject);
|
5000 |
}
|
5001 |
|
5002 |
PKSPIN __inline
|
5003 |
KsGetPinFromFileObject(
|
5004 |
IN PFILE_OBJECT FileObject
|
5005 |
)
|
5006 |
{
|
5007 |
return (PKSPIN) KsGetObjectFromFileObject(FileObject);
|
5008 |
}
|
5009 |
|
5010 |
KSDDKAPI
|
5011 |
PKSGATE
|
5012 |
NTAPI
|
5013 |
KsFilterGetAndGate(
|
5014 |
IN PKSFILTER Filter
|
5015 |
);
|
5016 |
|
5017 |
KSDDKAPI
|
5018 |
void
|
5019 |
NTAPI
|
5020 |
KsFilterAcquireProcessingMutex(
|
5021 |
IN PKSFILTER Filter
|
5022 |
);
|
5023 |
|
5024 |
KSDDKAPI
|
5025 |
void
|
5026 |
NTAPI
|
5027 |
KsFilterReleaseProcessingMutex(
|
5028 |
IN PKSFILTER Filter
|
5029 |
);
|
5030 |
|
5031 |
KSDDKAPI
|
5032 |
void
|
5033 |
NTAPI
|
5034 |
KsFilterAttemptProcessing(
|
5035 |
IN PKSFILTER Filter,
|
5036 |
IN BOOLEAN Asynchronous
|
5037 |
);
|
5038 |
|
5039 |
KSDDKAPI
|
5040 |
PKSGATE
|
5041 |
NTAPI
|
5042 |
KsPinGetAndGate(
|
5043 |
IN PKSPIN Pin
|
5044 |
);
|
5045 |
|
5046 |
KSDDKAPI
|
5047 |
void
|
5048 |
NTAPI
|
5049 |
KsPinAttachAndGate(
|
5050 |
IN PKSPIN Pin,
|
5051 |
IN PKSGATE AndGate OPTIONAL
|
5052 |
);
|
5053 |
|
5054 |
KSDDKAPI
|
5055 |
void
|
5056 |
NTAPI
|
5057 |
KsPinAttachOrGate(
|
5058 |
IN PKSPIN Pin,
|
5059 |
IN PKSGATE OrGate OPTIONAL
|
5060 |
);
|
5061 |
|
5062 |
KSDDKAPI
|
5063 |
void
|
5064 |
NTAPI
|
5065 |
KsPinAcquireProcessingMutex(
|
5066 |
IN PKSPIN Pin
|
5067 |
);
|
5068 |
|
5069 |
KSDDKAPI
|
5070 |
void
|
5071 |
NTAPI
|
5072 |
KsPinReleaseProcessingMutex(
|
5073 |
IN PKSPIN Pin
|
5074 |
);
|
5075 |
|
5076 |
KSDDKAPI
|
5077 |
BOOLEAN
|
5078 |
NTAPI
|
5079 |
KsProcessPinUpdate(
|
5080 |
IN PKSPROCESSPIN ProcessPin
|
5081 |
);
|
5082 |
|
5083 |
KSDDKAPI
|
5084 |
void
|
5085 |
NTAPI
|
5086 |
KsPinAttemptProcessing(
|
5087 |
IN PKSPIN Pin,
|
5088 |
IN BOOLEAN Asynchronous
|
5089 |
);
|
5090 |
|
5091 |
KSDDKAPI
|
5092 |
PVOID
|
5093 |
NTAPI
|
5094 |
KsGetParent(
|
5095 |
IN PVOID Object
|
5096 |
);
|
5097 |
|
5098 |
PKSDEVICE __inline
|
5099 |
KsFilterFactoryGetParentDevice(
|
5100 |
IN PKSFILTERFACTORY FilterFactory
|
5101 |
)
|
5102 |
{
|
5103 |
return (PKSDEVICE) KsGetParent((PVOID) FilterFactory);
|
5104 |
}
|
5105 |
|
5106 |
PKSFILTERFACTORY __inline
|
5107 |
KsFilterGetParentFilterFactory(
|
5108 |
IN PKSFILTER Filter
|
5109 |
)
|
5110 |
{
|
5111 |
return (PKSFILTERFACTORY) KsGetParent((PVOID) Filter);
|
5112 |
}
|
5113 |
|
5114 |
KSDDKAPI
|
5115 |
PKSFILTER
|
5116 |
NTAPI
|
5117 |
KsPinGetParentFilter(
|
5118 |
IN PKSPIN Pin
|
5119 |
);
|
5120 |
|
5121 |
KSDDKAPI
|
5122 |
PVOID
|
5123 |
NTAPI
|
5124 |
KsGetFirstChild(
|
5125 |
IN PVOID Object
|
5126 |
);
|
5127 |
|
5128 |
PKSFILTERFACTORY __inline
|
5129 |
KsDeviceGetFirstChildFilterFactory(
|
5130 |
IN PKSDEVICE Device
|
5131 |
)
|
5132 |
{
|
5133 |
return (PKSFILTERFACTORY) KsGetFirstChild((PVOID) Device);
|
5134 |
}
|
5135 |
|
5136 |
PKSFILTER __inline
|
5137 |
KsFilterFactoryGetFirstChildFilter(
|
5138 |
IN PKSFILTERFACTORY FilterFactory
|
5139 |
)
|
5140 |
{
|
5141 |
return (PKSFILTER) KsGetFirstChild((PVOID) FilterFactory);
|
5142 |
}
|
5143 |
|
5144 |
KSDDKAPI
|
5145 |
ULONG
|
5146 |
NTAPI
|
5147 |
KsFilterGetChildPinCount(
|
5148 |
IN PKSFILTER Filter,
|
5149 |
IN ULONG PinId
|
5150 |
);
|
5151 |
|
5152 |
KSDDKAPI
|
5153 |
PKSPIN
|
5154 |
NTAPI
|
5155 |
KsFilterGetFirstChildPin(
|
5156 |
IN PKSFILTER Filter,
|
5157 |
IN ULONG PinId
|
5158 |
);
|
5159 |
|
5160 |
KSDDKAPI
|
5161 |
PVOID
|
5162 |
NTAPI
|
5163 |
KsGetNextSibling(
|
5164 |
IN PVOID Object
|
5165 |
);
|
5166 |
|
5167 |
KSDDKAPI
|
5168 |
PKSPIN
|
5169 |
NTAPI
|
5170 |
KsPinGetNextSiblingPin(
|
5171 |
IN PKSPIN Pin
|
5172 |
);
|
5173 |
|
5174 |
PKSFILTERFACTORY __inline
|
5175 |
KsFilterFactoryGetNextSiblingFilterFactory(
|
5176 |
IN PKSFILTERFACTORY FilterFactory
|
5177 |
)
|
5178 |
{
|
5179 |
return (PKSFILTERFACTORY) KsGetNextSibling((PVOID) FilterFactory);
|
5180 |
}
|
5181 |
|
5182 |
PKSFILTER __inline
|
5183 |
KsFilterGetNextSiblingFilter(
|
5184 |
IN PKSFILTER Filter
|
5185 |
)
|
5186 |
{
|
5187 |
return (PKSFILTER) KsGetNextSibling((PVOID) Filter);
|
5188 |
}
|
5189 |
|
5190 |
|
5191 |
KSDDKAPI
|
5192 |
PKSDEVICE
|
5193 |
NTAPI
|
5194 |
KsGetDevice(
|
5195 |
IN PVOID Object
|
5196 |
);
|
5197 |
|
5198 |
PKSDEVICE __inline
|
5199 |
KsFilterFactoryGetDevice(
|
5200 |
IN PKSFILTERFACTORY FilterFactory
|
5201 |
)
|
5202 |
{
|
5203 |
return KsGetDevice((PVOID) FilterFactory);
|
5204 |
}
|
5205 |
|
5206 |
PKSDEVICE __inline
|
5207 |
KsFilterGetDevice(
|
5208 |
IN PKSFILTER Filter
|
5209 |
)
|
5210 |
{
|
5211 |
return KsGetDevice((PVOID) Filter);
|
5212 |
}
|
5213 |
|
5214 |
PKSDEVICE __inline
|
5215 |
KsPinGetDevice(
|
5216 |
IN PKSPIN Pin
|
5217 |
)
|
5218 |
{
|
5219 |
return KsGetDevice((PVOID) Pin);
|
5220 |
}
|
5221 |
|
5222 |
KSDDKAPI
|
5223 |
PKSFILTER
|
5224 |
NTAPI
|
5225 |
KsGetFilterFromIrp(
|
5226 |
IN PIRP Irp
|
5227 |
);
|
5228 |
|
5229 |
KSDDKAPI
|
5230 |
PKSPIN
|
5231 |
NTAPI
|
5232 |
KsGetPinFromIrp(
|
5233 |
IN PIRP Irp
|
5234 |
);
|
5235 |
|
5236 |
KSDDKAPI
|
5237 |
ULONG
|
5238 |
NTAPI
|
5239 |
KsGetNodeIdFromIrp(
|
5240 |
IN PIRP Irp
|
5241 |
);
|
5242 |
|
5243 |
KSDDKAPI
|
5244 |
void
|
5245 |
NTAPI
|
5246 |
KsAcquireControl(
|
5247 |
IN PVOID Object
|
5248 |
);
|
5249 |
|
5250 |
KSDDKAPI
|
5251 |
void
|
5252 |
NTAPI
|
5253 |
KsReleaseControl(
|
5254 |
IN PVOID Object
|
5255 |
);
|
5256 |
|
5257 |
void __inline
|
5258 |
KsFilterAcquireControl(
|
5259 |
IN PKSFILTER Filter
|
5260 |
)
|
5261 |
{
|
5262 |
KsAcquireControl((PVOID) Filter);
|
5263 |
}
|
5264 |
|
5265 |
void __inline
|
5266 |
KsFilterReleaseControl(
|
5267 |
IN PKSFILTER Filter
|
5268 |
)
|
5269 |
{
|
5270 |
KsReleaseControl((PVOID) Filter);
|
5271 |
}
|
5272 |
|
5273 |
void __inline
|
5274 |
KsPinAcquireControl(
|
5275 |
IN PKSPIN Pin
|
5276 |
)
|
5277 |
{
|
5278 |
KsAcquireControl((PVOID) Pin);
|
5279 |
}
|
5280 |
|
5281 |
void __inline
|
5282 |
KsPinReleaseControl(
|
5283 |
IN PKSPIN Pin
|
5284 |
)
|
5285 |
{
|
5286 |
KsReleaseControl((PVOID) Pin);
|
5287 |
}
|
5288 |
|
5289 |
KSDDKAPI
|
5290 |
NTSTATUS
|
5291 |
NTAPI
|
5292 |
KsAddItemToObjectBag(
|
5293 |
IN KSOBJECT_BAG ObjectBag,
|
5294 |
IN PVOID Item,
|
5295 |
IN PFNKSFREE Free OPTIONAL
|
5296 |
);
|
5297 |
|
5298 |
KSDDKAPI
|
5299 |
ULONG
|
5300 |
NTAPI
|
5301 |
KsRemoveItemFromObjectBag(
|
5302 |
IN KSOBJECT_BAG ObjectBag,
|
5303 |
IN PVOID Item,
|
5304 |
IN BOOLEAN Free
|
5305 |
);
|
5306 |
|
5307 |
#define KsDiscard(Object,Pointer)\
|
5308 |
KsRemoveItemFromObjectBag(\
|
5309 |
(Object)->Bag,\
|
5310 |
(PVOID)(Pointer),\
|
5311 |
TRUE)
|
5312 |
|
5313 |
KSDDKAPI
|
5314 |
NTSTATUS
|
5315 |
NTAPI
|
5316 |
KsAllocateObjectBag(
|
5317 |
IN PKSDEVICE Device,
|
5318 |
OUT KSOBJECT_BAG* ObjectBag
|
5319 |
);
|
5320 |
|
5321 |
KSDDKAPI
|
5322 |
void
|
5323 |
NTAPI
|
5324 |
KsFreeObjectBag(
|
5325 |
IN KSOBJECT_BAG ObjectBag
|
5326 |
);
|
5327 |
|
5328 |
KSDDKAPI
|
5329 |
NTSTATUS
|
5330 |
NTAPI
|
5331 |
KsCopyObjectBagItems(
|
5332 |
IN KSOBJECT_BAG ObjectBagDestination,
|
5333 |
IN KSOBJECT_BAG ObjectBagSource
|
5334 |
);
|
5335 |
|
5336 |
KSDDKAPI
|
5337 |
NTSTATUS
|
5338 |
NTAPI
|
5339 |
_KsEdit(
|
5340 |
IN KSOBJECT_BAG ObjectBag,
|
5341 |
IN OUT PVOID* PointerToPointerToItem,
|
5342 |
IN ULONG NewSize,
|
5343 |
IN ULONG OldSize,
|
5344 |
IN ULONG Tag
|
5345 |
);
|
5346 |
|
5347 |
#define KsEdit(Object,PointerToPointer,Tag)\
|
5348 |
_KsEdit(\
|
5349 |
(Object)->Bag,\
|
5350 |
(PVOID*)(PointerToPointer),\
|
5351 |
sizeof(**(PointerToPointer)),\
|
5352 |
sizeof(**(PointerToPointer)),\
|
5353 |
(Tag))
|
5354 |
#define KsEditSized(Object,PointerToPointer,NewSize,OldSize,Tag)\
|
5355 |
_KsEdit((Object)->Bag,(PVOID*)(PointerToPointer),(NewSize),(OldSize),(Tag))
|
5356 |
|
5357 |
KSDDKAPI
|
5358 |
NTSTATUS
|
5359 |
NTAPI
|
5360 |
KsRegisterFilterWithNoKSPins(
|
5361 |
IN PDEVICE_OBJECT DeviceObject,
|
5362 |
IN const GUID * InterfaceClassGUID,
|
5363 |
IN ULONG PinCount,
|
5364 |
IN BOOL * PinDirection,
|
5365 |
IN KSPIN_MEDIUM * MediumList,
|
5366 |
IN OPTIONAL GUID * CategoryList
|
5367 |
);
|
5368 |
|
5369 |
KSDDKAPI
|
5370 |
NTSTATUS
|
5371 |
NTAPI
|
5372 |
KsFilterCreatePinFactory (
|
5373 |
IN PKSFILTER Filter,
|
5374 |
IN const KSPIN_DESCRIPTOR_EX *const PinDescriptor,
|
5375 |
OUT PULONG PinID
|
5376 |
);
|
5377 |
|
5378 |
KSDDKAPI
|
5379 |
NTSTATUS
|
5380 |
NTAPI
|
5381 |
KsFilterCreateNode (
|
5382 |
IN PKSFILTER Filter,
|
5383 |
IN const KSNODE_DESCRIPTOR *const NodeDescriptor,
|
5384 |
OUT PULONG NodeID
|
5385 |
);
|
5386 |
|
5387 |
KSDDKAPI
|
5388 |
NTSTATUS
|
5389 |
NTAPI
|
5390 |
KsFilterAddTopologyConnections (
|
5391 |
IN PKSFILTER Filter,
|
5392 |
IN ULONG NewConnectionsCount,
|
5393 |
IN const KSTOPOLOGY_CONNECTION *const NewTopologyConnections
|
5394 |
);
|
5395 |
|
5396 |
KSDDKAPI
|
5397 |
NTSTATUS
|
5398 |
NTAPI
|
5399 |
KsPinGetConnectedPinInterface(
|
5400 |
IN PKSPIN Pin,
|
5401 |
IN const GUID* InterfaceId,
|
5402 |
OUT PVOID* Interface
|
5403 |
);
|
5404 |
|
5405 |
KSDDKAPI
|
5406 |
PFILE_OBJECT
|
5407 |
NTAPI
|
5408 |
KsPinGetConnectedPinFileObject(
|
5409 |
IN PKSPIN Pin
|
5410 |
);
|
5411 |
|
5412 |
KSDDKAPI
|
5413 |
NTSTATUS
|
5414 |
NTAPI
|
5415 |
KsPinGetConnectedFilterInterface(
|
5416 |
IN PKSPIN Pin,
|
5417 |
IN const GUID* InterfaceId,
|
5418 |
OUT PVOID* Interface
|
5419 |
);
|
5420 |
|
5421 |
#if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
|
5422 |
|
5423 |
KSDDKAPI
|
5424 |
NTSTATUS
|
5425 |
NTAPI
|
5426 |
KsPinGetReferenceClockInterface(
|
5427 |
IN PKSPIN Pin,
|
5428 |
OUT PIKSREFERENCECLOCK* Interface
|
5429 |
);
|
5430 |
|
5431 |
#endif //defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
|
5432 |
|
5433 |
KSDDKAPI
|
5434 |
VOID
|
5435 |
NTAPI
|
5436 |
KsPinSetPinClockTime(
|
5437 |
IN PKSPIN Pin,
|
5438 |
IN LONGLONG Time
|
5439 |
);
|
5440 |
|
5441 |
KSDDKAPI
|
5442 |
NTSTATUS
|
5443 |
NTAPI
|
5444 |
KsPinSubmitFrame(
|
5445 |
IN PKSPIN Pin,
|
5446 |
IN PVOID Data OPTIONAL,
|
5447 |
IN ULONG Size OPTIONAL,
|
5448 |
IN PKSSTREAM_HEADER StreamHeader OPTIONAL,
|
5449 |
IN PVOID Context OPTIONAL
|
5450 |
);
|
5451 |
|
5452 |
KSDDKAPI
|
5453 |
NTSTATUS
|
5454 |
NTAPI
|
5455 |
KsPinSubmitFrameMdl(
|
5456 |
IN PKSPIN Pin,
|
5457 |
IN PMDL Mdl OPTIONAL,
|
5458 |
IN PKSSTREAM_HEADER StreamHeader OPTIONAL,
|
5459 |
IN PVOID Context OPTIONAL
|
5460 |
);
|
5461 |
|
5462 |
KSDDKAPI
|
5463 |
void
|
5464 |
NTAPI
|
5465 |
KsPinRegisterFrameReturnCallback(
|
5466 |
IN PKSPIN Pin,
|
5467 |
IN PFNKSPINFRAMERETURN FrameReturn
|
5468 |
);
|
5469 |
|
5470 |
KSDDKAPI
|
5471 |
void
|
5472 |
NTAPI
|
5473 |
KsPinRegisterHandshakeCallback(
|
5474 |
IN PKSPIN Pin,
|
5475 |
IN PFNKSPINHANDSHAKE Handshake
|
5476 |
);
|
5477 |
|
5478 |
KSDDKAPI
|
5479 |
void
|
5480 |
NTAPI
|
5481 |
KsFilterRegisterPowerCallbacks(
|
5482 |
IN PKSFILTER Filter,
|
5483 |
IN PFNKSFILTERPOWER Sleep OPTIONAL,
|
5484 |
IN PFNKSFILTERPOWER Wake OPTIONAL
|
5485 |
);
|
5486 |
|
5487 |
KSDDKAPI
|
5488 |
void
|
5489 |
NTAPI
|
5490 |
KsPinRegisterPowerCallbacks(
|
5491 |
IN PKSPIN Pin,
|
5492 |
IN PFNKSPINPOWER Sleep OPTIONAL,
|
5493 |
IN PFNKSPINPOWER Wake OPTIONAL
|
5494 |
);
|
5495 |
|
5496 |
#if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
|
5497 |
|
5498 |
KSDDKAPI
|
5499 |
PUNKNOWN
|
5500 |
NTAPI
|
5501 |
KsRegisterAggregatedClientUnknown(
|
5502 |
IN PVOID Object,
|
5503 |
IN PUNKNOWN ClientUnknown
|
5504 |
);
|
5505 |
|
5506 |
KSDDKAPI
|
5507 |
PUNKNOWN
|
5508 |
NTAPI
|
5509 |
KsGetOuterUnknown(
|
5510 |
IN PVOID Object
|
5511 |
);
|
5512 |
|
5513 |
PUNKNOWN __inline
|
5514 |
KsDeviceRegisterAggregatedClientUnknown(
|
5515 |
IN PKSDEVICE Device,
|
5516 |
IN PUNKNOWN ClientUnknown
|
5517 |
)
|
5518 |
{
|
5519 |
return KsRegisterAggregatedClientUnknown((PVOID) Device,ClientUnknown);
|
5520 |
}
|
5521 |
|
5522 |
PUNKNOWN __inline
|
5523 |
KsDeviceGetOuterUnknown(
|
5524 |
IN PKSDEVICE Device
|
5525 |
)
|
5526 |
{
|
5527 |
return KsGetOuterUnknown((PVOID) Device);
|
5528 |
}
|
5529 |
|
5530 |
PUNKNOWN __inline
|
5531 |
KsFilterFactoryRegisterAggregatedClientUnknown(
|
5532 |
IN PKSFILTERFACTORY FilterFactory,
|
5533 |
IN PUNKNOWN ClientUnknown
|
5534 |
)
|
5535 |
{
|
5536 |
return KsRegisterAggregatedClientUnknown((PVOID) FilterFactory,ClientUnknown);
|
5537 |
}
|
5538 |
|
5539 |
PUNKNOWN __inline
|
5540 |
KsFilterFactoryGetOuterUnknown(
|
5541 |
IN PKSFILTERFACTORY FilterFactory
|
5542 |
)
|
5543 |
{
|
5544 |
return KsGetOuterUnknown((PVOID) FilterFactory);
|
5545 |
}
|
5546 |
|
5547 |
PUNKNOWN __inline
|
5548 |
KsFilterRegisterAggregatedClientUnknown(
|
5549 |
IN PKSFILTER Filter,
|
5550 |
IN PUNKNOWN ClientUnknown
|
5551 |
)
|
5552 |
{
|
5553 |
return KsRegisterAggregatedClientUnknown((PVOID) Filter,ClientUnknown);
|
5554 |
}
|
5555 |
|
5556 |
PUNKNOWN __inline
|
5557 |
KsFilterGetOuterUnknown(
|
5558 |
IN PKSFILTER Filter
|
5559 |
)
|
5560 |
{
|
5561 |
return KsGetOuterUnknown((PVOID) Filter);
|
5562 |
}
|
5563 |
|
5564 |
PUNKNOWN __inline
|
5565 |
KsPinRegisterAggregatedClientUnknown(
|
5566 |
IN PKSPIN Pin,
|
5567 |
IN PUNKNOWN ClientUnknown
|
5568 |
)
|
5569 |
{
|
5570 |
return KsRegisterAggregatedClientUnknown((PVOID) Pin,ClientUnknown);
|
5571 |
}
|
5572 |
|
5573 |
PUNKNOWN __inline
|
5574 |
KsPinGetOuterUnknown(
|
5575 |
IN PKSPIN Pin
|
5576 |
)
|
5577 |
{
|
5578 |
return KsGetOuterUnknown((PVOID) Pin);
|
5579 |
}
|
5580 |
|
5581 |
#endif // defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
|
5582 |
|
5583 |
#else // !defined(_NTDDK_)
|
5584 |
|
5585 |
#if !defined( KS_NO_CREATE_FUNCTIONS )
|
5586 |
|
5587 |
KSDDKAPI
|
5588 |
DWORD
|
5589 |
WINAPI
|
5590 |
KsCreateAllocator(
|
5591 |
IN HANDLE ConnectionHandle,
|
5592 |
IN PKSALLOCATOR_FRAMING AllocatorFraming,
|
5593 |
OUT PHANDLE AllocatorHandle
|
5594 |
);
|
5595 |
|
5596 |
KSDDKAPI
|
5597 |
DWORD
|
5598 |
NTAPI
|
5599 |
KsCreateClock(
|
5600 |
IN HANDLE ConnectionHandle,
|
5601 |
IN PKSCLOCK_CREATE ClockCreate,
|
5602 |
OUT PHANDLE ClockHandle
|
5603 |
);
|
5604 |
|
5605 |
KSDDKAPI
|
5606 |
DWORD
|
5607 |
WINAPI
|
5608 |
KsCreatePin(
|
5609 |
IN HANDLE FilterHandle,
|
5610 |
IN PKSPIN_CONNECT Connect,
|
5611 |
IN ACCESS_MASK DesiredAccess,
|
5612 |
OUT PHANDLE ConnectionHandle
|
5613 |
);
|
5614 |
|
5615 |
KSDDKAPI
|
5616 |
DWORD
|
5617 |
WINAPI
|
5618 |
KsCreateTopologyNode(
|
5619 |
IN HANDLE ParentHandle,
|
5620 |
IN PKSNODE_CREATE NodeCreate,
|
5621 |
IN ACCESS_MASK DesiredAccess,
|
5622 |
OUT PHANDLE NodeHandle
|
5623 |
);
|
5624 |
|
5625 |
#endif
|
5626 |
|
5627 |
#endif // !defined(_NTDDK_)
|
5628 |
|
5629 |
#if defined(__cplusplus)
|
5630 |
}
|
5631 |
#endif // defined(__cplusplus)
|
5632 |
|
5633 |
#endif // !_KS_
|