00001
00006 #ifndef _KS_
00007 #define _KS_
00008
00009 #if __GNUC__ >= 3
00010 #pragma GCC system_header
00011 #endif
00012
00013 #ifndef __MINGW_EXTENSION
00014 #if defined(__GNUC__) || defined(__GNUG__)
00015 #define __MINGW_EXTENSION __extension__
00016 #else
00017 #define __MINGW_EXTENSION
00018 #endif
00019 #endif
00020
00021 #ifdef __TCS__
00022 #define _KS_NO_ANONYMOUS_STRUCTURES_ 1
00023 #endif
00024
00025 #ifdef _KS_NO_ANONYMOUS_STRUCTURES_
00026 #define _KS_ANON_STRUCT(X) struct X
00027 #else
00028 #define _KS_ANON_STRUCT(X) __MINGW_EXTENSION struct
00029 #endif
00030
00031 #ifndef _NTRTL_
00032 #ifndef DEFINE_GUIDEX
00033 #define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name
00034 #endif
00035 #ifndef STATICGUIDOF
00036 #define STATICGUIDOF(guid) STATIC_##guid
00037 #endif
00038 #endif
00039
00040 #ifndef SIZEOF_ARRAY
00041 #define SIZEOF_ARRAY(ar) (sizeof(ar)/sizeof((ar)[0]))
00042 #endif
00043
00044 #define DEFINE_GUIDSTRUCT(g,n) DEFINE_GUIDEX(n)
00045 #define DEFINE_GUIDNAMED(n) n
00046
00047 #define STATIC_GUID_NULL \
00048 0x00000000L,0x0000,0x0000,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
00049
00050 DEFINE_GUIDSTRUCT("00000000-0000-0000-0000-000000000000",GUID_NULL);
00051 #define GUID_NULL DEFINE_GUIDNAMED(GUID_NULL)
00052
00053 #define IOCTL_KS_PROPERTY CTL_CODE(FILE_DEVICE_KS,0x000,METHOD_NEITHER,FILE_ANY_ACCESS)
00054 #define IOCTL_KS_ENABLE_EVENT CTL_CODE(FILE_DEVICE_KS,0x001,METHOD_NEITHER,FILE_ANY_ACCESS)
00055 #define IOCTL_KS_DISABLE_EVENT CTL_CODE(FILE_DEVICE_KS,0x002,METHOD_NEITHER,FILE_ANY_ACCESS)
00056 #define IOCTL_KS_METHOD CTL_CODE(FILE_DEVICE_KS,0x003,METHOD_NEITHER,FILE_ANY_ACCESS)
00057 #define IOCTL_KS_WRITE_STREAM CTL_CODE(FILE_DEVICE_KS,0x004,METHOD_NEITHER,FILE_WRITE_ACCESS)
00058 #define IOCTL_KS_READ_STREAM CTL_CODE(FILE_DEVICE_KS,0x005,METHOD_NEITHER,FILE_READ_ACCESS)
00059 #define IOCTL_KS_RESET_STATE CTL_CODE(FILE_DEVICE_KS,0x006,METHOD_NEITHER,FILE_ANY_ACCESS)
00060
00061 typedef enum {
00062 KSRESET_BEGIN,
00063 KSRESET_END
00064 } KSRESET;
00065
00066 typedef enum {
00067 KSSTATE_STOP,
00068 KSSTATE_ACQUIRE,
00069 KSSTATE_PAUSE,
00070 KSSTATE_RUN
00071 } KSSTATE,*PKSSTATE;
00072
00073 #define KSPRIORITY_LOW 0x00000001
00074 #define KSPRIORITY_NORMAL 0x40000000
00075 #define KSPRIORITY_HIGH 0x80000000
00076 #define KSPRIORITY_EXCLUSIVE 0xFFFFFFFF
00077
00078 typedef struct {
00079 ULONG PriorityClass;
00080 ULONG PrioritySubClass;
00081 } KSPRIORITY,*PKSPRIORITY;
00082
00083 typedef struct {
00084 __MINGW_EXTENSION union {
00085 _KS_ANON_STRUCT(_IDENTIFIER)
00086 {
00087 GUID Set;
00088 ULONG Id;
00089 ULONG Flags;
00090 };
00091 LONGLONG Alignment;
00092 };
00093 } KSIDENTIFIER,*PKSIDENTIFIER;
00094
00095 typedef KSIDENTIFIER KSPROPERTY,*PKSPROPERTY,KSMETHOD,*PKSMETHOD,KSEVENT,*PKSEVENT;
00096
00097 #define KSMETHOD_TYPE_NONE 0x00000000
00098 #define KSMETHOD_TYPE_READ 0x00000001
00099 #define KSMETHOD_TYPE_WRITE 0x00000002
00100 #define KSMETHOD_TYPE_MODIFY 0x00000003
00101 #define KSMETHOD_TYPE_SOURCE 0x00000004
00102
00103 #define KSMETHOD_TYPE_SEND 0x00000001
00104 #define KSMETHOD_TYPE_SETSUPPORT 0x00000100
00105 #define KSMETHOD_TYPE_BASICSUPPORT 0x00000200
00106
00107 #define KSMETHOD_TYPE_TOPOLOGY 0x10000000
00108
00109 #define KSPROPERTY_TYPE_GET 0x00000001
00110 #define KSPROPERTY_TYPE_SET 0x00000002
00111 #define KSPROPERTY_TYPE_SETSUPPORT 0x00000100
00112 #define KSPROPERTY_TYPE_BASICSUPPORT 0x00000200
00113 #define KSPROPERTY_TYPE_RELATIONS 0x00000400
00114 #define KSPROPERTY_TYPE_SERIALIZESET 0x00000800
00115 #define KSPROPERTY_TYPE_UNSERIALIZESET 0x00001000
00116 #define KSPROPERTY_TYPE_SERIALIZERAW 0x00002000
00117 #define KSPROPERTY_TYPE_UNSERIALIZERAW 0x00004000
00118 #define KSPROPERTY_TYPE_SERIALIZESIZE 0x00008000
00119 #define KSPROPERTY_TYPE_DEFAULTVALUES 0x00010000
00120
00121 #define KSPROPERTY_TYPE_TOPOLOGY 0x10000000
00122
00123 typedef struct {
00124 KSPROPERTY Property;
00125 ULONG NodeId;
00126 ULONG Reserved;
00127 } KSP_NODE,*PKSP_NODE;
00128
00129 typedef struct {
00130 KSMETHOD Method;
00131 ULONG NodeId;
00132 ULONG Reserved;
00133 } KSM_NODE,*PKSM_NODE;
00134
00135 typedef struct {
00136 KSEVENT Event;
00137 ULONG NodeId;
00138 ULONG Reserved;
00139 } KSE_NODE,*PKSE_NODE;
00140
00141 #define STATIC_KSPROPTYPESETID_General \
00142 0x97E99BA0L,0xBDEA,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
00143 DEFINE_GUIDSTRUCT("97E99BA0-BDEA-11CF-A5D6-28DB04C10000",KSPROPTYPESETID_General);
00144 #define KSPROPTYPESETID_General DEFINE_GUIDNAMED(KSPROPTYPESETID_General)
00145
00146 typedef struct {
00147 ULONG Size;
00148 ULONG Count;
00149 } KSMULTIPLE_ITEM,*PKSMULTIPLE_ITEM;
00150
00151 typedef struct {
00152 ULONG AccessFlags;
00153 ULONG DescriptionSize;
00154 KSIDENTIFIER PropTypeSet;
00155 ULONG MembersListCount;
00156 ULONG Reserved;
00157 } KSPROPERTY_DESCRIPTION,*PKSPROPERTY_DESCRIPTION;
00158
00159 #define KSPROPERTY_MEMBER_RANGES 0x00000001
00160 #define KSPROPERTY_MEMBER_STEPPEDRANGES 0x00000002
00161 #define KSPROPERTY_MEMBER_VALUES 0x00000003
00162
00163 #define KSPROPERTY_MEMBER_FLAG_DEFAULT 0x00000001
00164 #define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_MULTICHANNEL 0x00000002
00165 #define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_UNIFORM 0x00000004
00166
00167 typedef struct {
00168 ULONG MembersFlags;
00169 ULONG MembersSize;
00170 ULONG MembersCount;
00171 ULONG Flags;
00172 } KSPROPERTY_MEMBERSHEADER,*PKSPROPERTY_MEMBERSHEADER;
00173
00174 typedef union {
00175 _KS_ANON_STRUCT(_SIGNED)
00176 {
00177 LONG SignedMinimum;
00178 LONG SignedMaximum;
00179 };
00180 _KS_ANON_STRUCT(_UNSIGNED)
00181 {
00182 ULONG UnsignedMinimum;
00183 ULONG UnsignedMaximum;
00184 };
00185 } KSPROPERTY_BOUNDS_LONG,*PKSPROPERTY_BOUNDS_LONG;
00186
00187 typedef union {
00188 _KS_ANON_STRUCT(_SIGNED64)
00189 {
00190 LONGLONG SignedMinimum;
00191 LONGLONG SignedMaximum;
00192 };
00193 _KS_ANON_STRUCT(_UNSIGNED64)
00194 {
00195 DWORDLONG UnsignedMinimum;
00196 DWORDLONG UnsignedMaximum;
00197 };
00198 } KSPROPERTY_BOUNDS_LONGLONG,*PKSPROPERTY_BOUNDS_LONGLONG;
00199
00200 typedef struct {
00201 ULONG SteppingDelta;
00202 ULONG Reserved;
00203 KSPROPERTY_BOUNDS_LONG Bounds;
00204 } KSPROPERTY_STEPPING_LONG,*PKSPROPERTY_STEPPING_LONG;
00205
00206 typedef struct {
00207 DWORDLONG SteppingDelta;
00208 KSPROPERTY_BOUNDS_LONGLONG Bounds;
00209 } KSPROPERTY_STEPPING_LONGLONG,*PKSPROPERTY_STEPPING_LONGLONG;
00210
00211 #if defined(_NTDDK_)
00212 typedef struct _KSDEVICE_DESCRIPTOR KSDEVICE_DESCRIPTOR, *PKSDEVICE_DESCRIPTOR;
00213 typedef struct _KSDEVICE_DISPATCH KSDEVICE_DISPATCH, *PKSDEVICE_DISPATCH;
00214 typedef struct _KSDEVICE KSDEVICE, *PKSDEVICE;
00215 typedef struct _KSFILTERFACTORY KSFILTERFACTORY, *PKSFILTERFACTORY;
00216 typedef struct _KSFILTER_DESCRIPTOR KSFILTER_DESCRIPTOR, *PKSFILTER_DESCRIPTOR;
00217 typedef struct _KSFILTER_DISPATCH KSFILTER_DISPATCH, *PKSFILTER_DISPATCH;
00218 typedef struct _KSFILTER KSFILTER, *PKSFILTER;
00219 typedef struct _KSPIN_DESCRIPTOR_EX KSPIN_DESCRIPTOR_EX, *PKSPIN_DESCRIPTOR_EX;
00220 typedef struct _KSPIN_DISPATCH KSPIN_DISPATCH, *PKSPIN_DISPATCH;
00221 typedef struct _KSCLOCK_DISPATCH KSCLOCK_DISPATCH, *PKSCLOCK_DISPATCH;
00222 typedef struct _KSALLOCATOR_DISPATCH KSALLOCATOR_DISPATCH, *PKSALLOCATOR_DISPATCH;
00223 typedef struct _KSPIN KSPIN, *PKSPIN;
00224 typedef struct _KSNODE_DESCRIPTOR KSNODE_DESCRIPTOR, *PKSNODE_DESCRIPTOR;
00225 typedef struct _KSSTREAM_POINTER_OFFSET KSSTREAM_POINTER_OFFSET, *PKSSTREAM_POINTER_OFFSET;
00226 typedef struct _KSSTREAM_POINTER KSSTREAM_POINTER, *PKSSTREAM_POINTER;
00227 typedef struct _KSMAPPING KSMAPPING, *PKSMAPPING;
00228 typedef struct _KSPROCESSPIN KSPROCESSPIN, *PKSPROCESSPIN;
00229 typedef struct _KSPROCESSPIN_INDEXENTRY KSPROCESSPIN_INDEXENTRY, *PKSPROCESSPIN_INDEXENTRY;
00230 #endif
00231
00232 typedef PVOID PKSWORKER;
00233
00234
00235 typedef struct {
00236 ULONG NotificationType;
00237 __MINGW_EXTENSION union {
00238 struct {
00239 HANDLE Event;
00240 ULONG_PTR Reserved[2];
00241 } EventHandle;
00242 struct {
00243 HANDLE Semaphore;
00244 ULONG Reserved;
00245 LONG Adjustment;
00246 } SemaphoreHandle;
00247 #if defined(_NTDDK_)
00248 struct {
00249 PVOID Event;
00250 KPRIORITY Increment;
00251 ULONG_PTR Reserved;
00252 } EventObject;
00253 struct {
00254 PVOID Semaphore;
00255 KPRIORITY Increment;
00256 LONG Adjustment;
00257 } SemaphoreObject;
00258 struct {
00259 PKDPC Dpc;
00260 ULONG ReferenceCount;
00261 ULONG_PTR Reserved;
00262 } Dpc;
00263 struct {
00264 PWORK_QUEUE_ITEM WorkQueueItem;
00265 WORK_QUEUE_TYPE WorkQueueType;
00266 ULONG_PTR Reserved;
00267 } WorkItem;
00268 struct {
00269 PWORK_QUEUE_ITEM WorkQueueItem;
00270 PKSWORKER KsWorkerObject;
00271 ULONG_PTR Reserved;
00272 } KsWorkItem;
00273 #endif
00274 struct {
00275 PVOID Unused;
00276 LONG_PTR Alignment[2];
00277 } Alignment;
00278 };
00279 } KSEVENTDATA,*PKSEVENTDATA;
00280
00281 #define KSEVENTF_EVENT_HANDLE 0x00000001
00282 #define KSEVENTF_SEMAPHORE_HANDLE 0x00000002
00283 #if defined(_NTDDK_)
00284 #define KSEVENTF_EVENT_OBJECT 0x00000004
00285 #define KSEVENTF_SEMAPHORE_OBJECT 0x00000008
00286 #define KSEVENTF_DPC 0x00000010
00287 #define KSEVENTF_WORKITEM 0x00000020
00288 #define KSEVENTF_KSWORKITEM 0x00000080
00289 #endif
00290
00291 #define KSEVENT_TYPE_ENABLE 0x00000001
00292 #define KSEVENT_TYPE_ONESHOT 0x00000002
00293 #define KSEVENT_TYPE_ENABLEBUFFERED 0x00000004
00294 #define KSEVENT_TYPE_SETSUPPORT 0x00000100
00295 #define KSEVENT_TYPE_BASICSUPPORT 0x00000200
00296 #define KSEVENT_TYPE_QUERYBUFFER 0x00000400
00297
00298 #define KSEVENT_TYPE_TOPOLOGY 0x10000000
00299
00300 typedef struct {
00301 KSEVENT Event;
00302 PKSEVENTDATA EventData;
00303 PVOID Reserved;
00304 } KSQUERYBUFFER,*PKSQUERYBUFFER;
00305
00306 typedef struct {
00307 ULONG Size;
00308 ULONG Flags;
00309 __MINGW_EXTENSION union {
00310 HANDLE ObjectHandle;
00311 PVOID ObjectPointer;
00312 };
00313 PVOID Reserved;
00314 KSEVENT Event;
00315 KSEVENTDATA EventData;
00316 } KSRELATIVEEVENT;
00317
00318 #define KSRELATIVEEVENT_FLAG_HANDLE 0x00000001
00319 #define KSRELATIVEEVENT_FLAG_POINTER 0x00000002
00320
00321 typedef struct {
00322 KSEVENTDATA EventData;
00323 LONGLONG MarkTime;
00324 } KSEVENT_TIME_MARK,*PKSEVENT_TIME_MARK;
00325
00326 typedef struct {
00327 KSEVENTDATA EventData;
00328 LONGLONG TimeBase;
00329 LONGLONG Interval;
00330 } KSEVENT_TIME_INTERVAL,*PKSEVENT_TIME_INTERVAL;
00331
00332 typedef struct {
00333 LONGLONG TimeBase;
00334 LONGLONG Interval;
00335 } KSINTERVAL,*PKSINTERVAL;
00336
00337 #define STATIC_KSPROPSETID_General \
00338 0x1464EDA5L,0x6A8F,0x11D1,0x9A,0xA7,0x00,0xA0,0xC9,0x22,0x31,0x96
00339 DEFINE_GUIDSTRUCT("1464EDA5-6A8F-11D1-9AA7-00A0C9223196",KSPROPSETID_General);
00340 #define KSPROPSETID_General DEFINE_GUIDNAMED(KSPROPSETID_General)
00341
00342 typedef enum {
00343 KSPROPERTY_GENERAL_COMPONENTID
00344 } KSPROPERTY_GENERAL;
00345
00346 typedef struct {
00347 GUID Manufacturer;
00348 GUID Product;
00349 GUID Component;
00350 GUID Name;
00351 ULONG Version;
00352 ULONG Revision;
00353 } KSCOMPONENTID,*PKSCOMPONENTID;
00354
00355 #define DEFINE_KSPROPERTY_ITEM_GENERAL_COMPONENTID(Handler) \
00356 DEFINE_KSPROPERTY_ITEM( \
00357 KSPROPERTY_GENERAL_COMPONENTID, \
00358 (Handler), \
00359 sizeof(KSPROPERTY), \
00360 sizeof(KSCOMPONENTID), \
00361 NULL, NULL, 0, NULL, NULL, 0)
00362
00363 #define STATIC_KSMETHODSETID_StreamIo \
00364 0x65D003CAL,0x1523,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96
00365 DEFINE_GUIDSTRUCT("65D003CA-1523-11D2-B27A-00A0C9223196",KSMETHODSETID_StreamIo);
00366 #define KSMETHODSETID_StreamIo DEFINE_GUIDNAMED(KSMETHODSETID_StreamIo)
00367
00368 typedef enum {
00369 KSMETHOD_STREAMIO_READ,
00370 KSMETHOD_STREAMIO_WRITE
00371 } KSMETHOD_STREAMIO;
00372
00373 #define DEFINE_KSMETHOD_ITEM_STREAMIO_READ(Handler) \
00374 DEFINE_KSMETHOD_ITEM( \
00375 KSMETHOD_STREAMIO_READ, \
00376 KSMETHOD_TYPE_WRITE, \
00377 (Handler), \
00378 sizeof(KSMETHOD), \
00379 0, \
00380 NULL)
00381
00382 #define DEFINE_KSMETHOD_ITEM_STREAMIO_WRITE(Handler) \
00383 DEFINE_KSMETHOD_ITEM( \
00384 KSMETHOD_STREAMIO_WRITE, \
00385 KSMETHOD_TYPE_READ, \
00386 (Handler), \
00387 sizeof(KSMETHOD), \
00388 0, \
00389 NULL)
00390
00391 #define STATIC_KSPROPSETID_MediaSeeking \
00392 0xEE904F0CL,0xD09B,0x11D0,0xAB,0xE9,0x00,0xA0,0xC9,0x22,0x31,0x96
00393 DEFINE_GUIDSTRUCT("EE904F0C-D09B-11D0-ABE9-00A0C9223196",KSPROPSETID_MediaSeeking);
00394 #define KSPROPSETID_MediaSeeking DEFINE_GUIDNAMED(KSPROPSETID_MediaSeeking)
00395
00396 typedef enum {
00397 KSPROPERTY_MEDIASEEKING_CAPABILITIES,
00398 KSPROPERTY_MEDIASEEKING_FORMATS,
00399 KSPROPERTY_MEDIASEEKING_TIMEFORMAT,
00400 KSPROPERTY_MEDIASEEKING_POSITION,
00401 KSPROPERTY_MEDIASEEKING_STOPPOSITION,
00402 KSPROPERTY_MEDIASEEKING_POSITIONS,
00403 KSPROPERTY_MEDIASEEKING_DURATION,
00404 KSPROPERTY_MEDIASEEKING_AVAILABLE,
00405 KSPROPERTY_MEDIASEEKING_PREROLL,
00406 KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT
00407 } KSPROPERTY_MEDIASEEKING;
00408
00409 typedef enum {
00410 KS_SEEKING_NoPositioning,
00411 KS_SEEKING_AbsolutePositioning,
00412 KS_SEEKING_RelativePositioning,
00413 KS_SEEKING_IncrementalPositioning,
00414 KS_SEEKING_PositioningBitsMask = 0x3,
00415 KS_SEEKING_SeekToKeyFrame,
00416 KS_SEEKING_ReturnTime = 0x8
00417 } KS_SEEKING_FLAGS;
00418
00419 typedef enum {
00420 KS_SEEKING_CanSeekAbsolute = 0x1,
00421 KS_SEEKING_CanSeekForwards = 0x2,
00422 KS_SEEKING_CanSeekBackwards = 0x4,
00423 KS_SEEKING_CanGetCurrentPos = 0x8,
00424 KS_SEEKING_CanGetStopPos = 0x10,
00425 KS_SEEKING_CanGetDuration = 0x20,
00426 KS_SEEKING_CanPlayBackwards = 0x40
00427 } KS_SEEKING_CAPABILITIES;
00428
00429 typedef struct {
00430 LONGLONG Current;
00431 LONGLONG Stop;
00432 KS_SEEKING_FLAGS CurrentFlags;
00433 KS_SEEKING_FLAGS StopFlags;
00434 } KSPROPERTY_POSITIONS,*PKSPROPERTY_POSITIONS;
00435
00436 typedef struct {
00437 LONGLONG Earliest;
00438 LONGLONG Latest;
00439 } KSPROPERTY_MEDIAAVAILABLE,*PKSPROPERTY_MEDIAAVAILABLE;
00440
00441 typedef struct {
00442 KSPROPERTY Property;
00443 GUID SourceFormat;
00444 GUID TargetFormat;
00445 LONGLONG Time;
00446 } KSP_TIMEFORMAT,*PKSP_TIMEFORMAT;
00447
00448 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CAPABILITIES(Handler) \
00449 DEFINE_KSPROPERTY_ITEM( \
00450 KSPROPERTY_MEDIASEEKING_CAPABILITIES, \
00451 (Handler), \
00452 sizeof(KSPROPERTY), \
00453 sizeof(KS_SEEKING_CAPABILITIES), \
00454 NULL, NULL, 0, NULL, NULL, 0)
00455
00456 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_FORMATS(Handler) \
00457 DEFINE_KSPROPERTY_ITEM( \
00458 KSPROPERTY_MEDIASEEKING_FORMATS, \
00459 (Handler), \
00460 sizeof(KSPROPERTY), \
00461 0, \
00462 NULL, NULL, 0, NULL, NULL, 0)
00463
00464 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_TIMEFORMAT(GetHandler,SetHandler) \
00465 DEFINE_KSPROPERTY_ITEM( \
00466 KSPROPERTY_MEDIASEEKING_TIMEFORMAT, \
00467 (GetHandler), \
00468 sizeof(KSPROPERTY), \
00469 sizeof(GUID), \
00470 (SetHandler), \
00471 NULL, 0, NULL, NULL, 0)
00472
00473 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITION(Handler) \
00474 DEFINE_KSPROPERTY_ITEM( \
00475 KSPROPERTY_MEDIASEEKING_POSITION, \
00476 (Handler), \
00477 sizeof(KSPROPERTY), \
00478 sizeof(LONGLONG), \
00479 NULL, NULL, 0, NULL, NULL, 0)
00480
00481 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_STOPPOSITION(Handler) \
00482 DEFINE_KSPROPERTY_ITEM( \
00483 KSPROPERTY_MEDIASEEKING_STOPPOSITION, \
00484 (Handler), \
00485 sizeof(KSPROPERTY), \
00486 sizeof(LONGLONG), \
00487 NULL, NULL, 0, NULL, NULL, 0)
00488
00489 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITIONS(Handler) \
00490 DEFINE_KSPROPERTY_ITEM( \
00491 KSPROPERTY_MEDIASEEKING_POSITIONS, \
00492 NULL, \
00493 sizeof(KSPROPERTY), \
00494 sizeof(KSPROPERTY_POSITIONS), \
00495 (Handler), \
00496 NULL, 0, NULL, NULL, 0)
00497
00498 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_DURATION(Handler) \
00499 DEFINE_KSPROPERTY_ITEM( \
00500 KSPROPERTY_MEDIASEEKING_DURATION, \
00501 (Handler), \
00502 sizeof(KSPROPERTY), \
00503 sizeof(LONGLONG), \
00504 NULL, NULL, 0, NULL, NULL, 0)
00505
00506 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_AVAILABLE(Handler) \
00507 DEFINE_KSPROPERTY_ITEM( \
00508 KSPROPERTY_MEDIASEEKING_AVAILABLE, \
00509 (Handler), \
00510 sizeof(KSPROPERTY), \
00511 sizeof(KSPROPERTY_MEDIAAVAILABLE), \
00512 NULL, NULL, 0, NULL, NULL, 0)
00513
00514 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_PREROLL(Handler) \
00515 DEFINE_KSPROPERTY_ITEM( \
00516 KSPROPERTY_MEDIASEEKING_PREROLL, \
00517 (Handler), \
00518 sizeof(KSPROPERTY), \
00519 sizeof(LONGLONG), \
00520 NULL, NULL, 0, NULL, NULL, 0)
00521
00522 #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CONVERTTIMEFORMAT(Handler) \
00523 DEFINE_KSPROPERTY_ITEM( \
00524 KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT, \
00525 (Handler), \
00526 sizeof(KSP_TIMEFORMAT), \
00527 sizeof(LONGLONG), \
00528 NULL, NULL, 0, NULL, NULL, 0)
00529
00530 #define STATIC_KSPROPSETID_Topology \
00531 0x720D4AC0L,0x7533,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
00532 DEFINE_GUIDSTRUCT("720D4AC0-7533-11D0-A5D6-28DB04C10000",KSPROPSETID_Topology);
00533 #define KSPROPSETID_Topology DEFINE_GUIDNAMED(KSPROPSETID_Topology)
00534
00535 typedef enum {
00536 KSPROPERTY_TOPOLOGY_CATEGORIES,
00537 KSPROPERTY_TOPOLOGY_NODES,
00538 KSPROPERTY_TOPOLOGY_CONNECTIONS,
00539 KSPROPERTY_TOPOLOGY_NAME
00540 } KSPROPERTY_TOPOLOGY;
00541
00542 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler) \
00543 DEFINE_KSPROPERTY_ITEM( \
00544 KSPROPERTY_TOPOLOGY_CATEGORIES, \
00545 (Handler), \
00546 sizeof(KSPROPERTY), \
00547 0, \
00548 NULL, NULL, 0,NULL, NULL, 0)
00549
00550 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler) \
00551 DEFINE_KSPROPERTY_ITEM( \
00552 KSPROPERTY_TOPOLOGY_NODES, \
00553 (Handler), \
00554 sizeof(KSPROPERTY), \
00555 0, \
00556 NULL, NULL, 0, NULL, NULL, 0)
00557
00558 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler) \
00559 DEFINE_KSPROPERTY_ITEM( \
00560 KSPROPERTY_TOPOLOGY_CONNECTIONS, \
00561 (Handler), \
00562 sizeof(KSPROPERTY), \
00563 0, \
00564 NULL, NULL, 0, NULL, NULL, 0)
00565
00566 #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler) \
00567 DEFINE_KSPROPERTY_ITEM( \
00568 KSPROPERTY_TOPOLOGY_NAME, \
00569 (Handler), \
00570 sizeof(KSP_NODE), \
00571 0, \
00572 NULL, NULL, 0, NULL, NULL, 0)
00573
00574 #define DEFINE_KSPROPERTY_TOPOLOGYSET(TopologySet,Handler) \
00575 DEFINE_KSPROPERTY_TABLE(TopologySet) { \
00576 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler), \
00577 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler), \
00578 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler), \
00579 DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler) \
00580 }
00581
00582 #define STATIC_KSCATEGORY_BRIDGE \
00583 0x085AFF00L,0x62CE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
00584 DEFINE_GUIDSTRUCT("085AFF00-62CE-11CF-A5D6-28DB04C10000",KSCATEGORY_BRIDGE);
00585 #define KSCATEGORY_BRIDGE DEFINE_GUIDNAMED(KSCATEGORY_BRIDGE)
00586
00587 #define STATIC_KSCATEGORY_CAPTURE \
00588 0x65E8773DL,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96
00589 DEFINE_GUIDSTRUCT("65E8773D-8F56-11D0-A3B9-00A0C9223196",KSCATEGORY_CAPTURE);
00590 #define KSCATEGORY_CAPTURE DEFINE_GUIDNAMED(KSCATEGORY_CAPTURE)
00591
00592 #define STATIC_KSCATEGORY_RENDER \
00593 0x65E8773EL,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96
00594 DEFINE_GUIDSTRUCT("65E8773E-8F56-11D0-A3B9-00A0C9223196",KSCATEGORY_RENDER);
00595 #define KSCATEGORY_RENDER DEFINE_GUIDNAMED(KSCATEGORY_RENDER)
00596
00597 #define STATIC_KSCATEGORY_MIXER \
00598 0xAD809C00L,0x7B88,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
00599 DEFINE_GUIDSTRUCT("AD809C00-7B88-11D0-A5D6-28DB04C10000",KSCATEGORY_MIXER);
00600 #define KSCATEGORY_MIXER DEFINE_GUIDNAMED(KSCATEGORY_MIXER)
00601
00602 #define STATIC_KSCATEGORY_SPLITTER \
00603 0x0A4252A0L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
00604 DEFINE_GUIDSTRUCT("0A4252A0-7E70-11D0-A5D6-28DB04C10000",KSCATEGORY_SPLITTER);
00605 #define KSCATEGORY_SPLITTER DEFINE_GUIDNAMED(KSCATEGORY_SPLITTER)
00606
00607 #define STATIC_KSCATEGORY_DATACOMPRESSOR \
00608 0x1E84C900L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
00609 DEFINE_GUIDSTRUCT("1E84C900-7E70-11D0-A5D6-28DB04C10000",KSCATEGORY_DATACOMPRESSOR);
00610 #define KSCATEGORY_DATACOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATACOMPRESSOR)
00611
00612 #define STATIC_KSCATEGORY_DATADECOMPRESSOR \
00613 0x2721AE20L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
00614 DEFINE_GUIDSTRUCT("2721AE20-7E70-11D0-A5D6-28DB04C10000",KSCATEGORY_DATADECOMPRESSOR);
00615 #define KSCATEGORY_DATADECOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATADECOMPRESSOR)
00616
00617 #define STATIC_KSCATEGORY_DATATRANSFORM \
00618 0x2EB07EA0L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
00619 DEFINE_GUIDSTRUCT("2EB07EA0-7E70-11D0-A5D6-28DB04C10000",KSCATEGORY_DATATRANSFORM);
00620 #define KSCATEGORY_DATATRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_DATATRANSFORM)
00621
00622 #define STATIC_KSCATEGORY_COMMUNICATIONSTRANSFORM \
00623 0xCF1DDA2CL,0x9743,0x11D0,0xA3,0xEE,0x00,0xA0,0xC9,0x22,0x31,0x96
00624 DEFINE_GUIDSTRUCT("CF1DDA2C-9743-11D0-A3EE-00A0C9223196",KSCATEGORY_COMMUNICATIONSTRANSFORM);
00625 #define KSCATEGORY_COMMUNICATIONSTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_COMMUNICATIONSTRANSFORM)
00626
00627 #define STATIC_KSCATEGORY_INTERFACETRANSFORM \
00628 0xCF1DDA2DL,0x9743,0x11D0,0xA3,0xEE,0x00,0xA0,0xC9,0x22,0x31,0x96
00629 DEFINE_GUIDSTRUCT("CF1DDA2D-9743-11D0-A3EE-00A0C9223196",KSCATEGORY_INTERFACETRANSFORM);
00630 #define KSCATEGORY_INTERFACETRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_INTERFACETRANSFORM)
00631
00632 #define STATIC_KSCATEGORY_MEDIUMTRANSFORM \
00633 0xCF1DDA2EL,0x9743,0x11D0,0xA3,0xEE,0x00,0xA0,0xC9,0x22,0x31,0x96
00634 DEFINE_GUIDSTRUCT("CF1DDA2E-9743-11D0-A3EE-00A0C9223196",KSCATEGORY_MEDIUMTRANSFORM);
00635 #define KSCATEGORY_MEDIUMTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_MEDIUMTRANSFORM)
00636
00637 #define STATIC_KSCATEGORY_FILESYSTEM \
00638 0x760FED5EL,0x9357,0x11D0,0xA3,0xCC,0x00,0xA0,0xC9,0x22,0x31,0x96
00639 DEFINE_GUIDSTRUCT("760FED5E-9357-11D0-A3CC-00A0C9223196",KSCATEGORY_FILESYSTEM);
00640 #define KSCATEGORY_FILESYSTEM DEFINE_GUIDNAMED(KSCATEGORY_FILESYSTEM)
00641
00642 #define STATIC_KSCATEGORY_CLOCK \
00643 0x53172480L,0x4791,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
00644 DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000",KSCATEGORY_CLOCK);
00645 #define KSCATEGORY_CLOCK DEFINE_GUIDNAMED(KSCATEGORY_CLOCK)
00646
00647 #define STATIC_KSCATEGORY_PROXY \
00648 0x97EBAACAL,0x95BD,0x11D0,0xA3,0xEA,0x00,0xA0,0xC9,0x22,0x31,0x96
00649 DEFINE_GUIDSTRUCT("97EBAACA-95BD-11D0-A3EA-00A0C9223196",KSCATEGORY_PROXY);
00650 #define KSCATEGORY_PROXY DEFINE_GUIDNAMED(KSCATEGORY_PROXY)
00651
00652 #define STATIC_KSCATEGORY_QUALITY \
00653 0x97EBAACBL,0x95BD,0x11D0,0xA3,0xEA,0x00,0xA0,0xC9,0x22,0x31,0x96
00654 DEFINE_GUIDSTRUCT("97EBAACB-95BD-11D0-A3EA-00A0C9223196",KSCATEGORY_QUALITY);
00655 #define KSCATEGORY_QUALITY DEFINE_GUIDNAMED(KSCATEGORY_QUALITY)
00656
00657 typedef struct {
00658 ULONG FromNode;
00659 ULONG FromNodePin;
00660 ULONG ToNode;
00661 ULONG ToNodePin;
00662 } KSTOPOLOGY_CONNECTION,*PKSTOPOLOGY_CONNECTION;
00663
00664 typedef struct {
00665 ULONG CategoriesCount;
00666 const GUID *Categories;
00667 ULONG TopologyNodesCount;
00668 const GUID *TopologyNodes;
00669 ULONG TopologyConnectionsCount;
00670 const KSTOPOLOGY_CONNECTION *TopologyConnections;
00671 const GUID *TopologyNodesNames;
00672 ULONG Reserved;
00673 } KSTOPOLOGY,*PKSTOPOLOGY;
00674
00675 #define KSFILTER_NODE ((ULONG)-1)
00676 #define KSALL_NODES ((ULONG)-1)
00677
00678 typedef struct {
00679 ULONG CreateFlags;
00680 ULONG Node;
00681 } KSNODE_CREATE,*PKSNODE_CREATE;
00682
00683 #define STATIC_KSTIME_FORMAT_NONE STATIC_GUID_NULL
00684 #define KSTIME_FORMAT_NONE GUID_NULL
00685
00686 #define STATIC_KSTIME_FORMAT_FRAME \
00687 0x7b785570L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6
00688 DEFINE_GUIDSTRUCT("7b785570-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_FRAME);
00689 #define KSTIME_FORMAT_FRAME DEFINE_GUIDNAMED(KSTIME_FORMAT_FRAME)
00690
00691 #define STATIC_KSTIME_FORMAT_BYTE \
00692 0x7b785571L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6
00693 DEFINE_GUIDSTRUCT("7b785571-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_BYTE);
00694 #define KSTIME_FORMAT_BYTE DEFINE_GUIDNAMED(KSTIME_FORMAT_BYTE)
00695
00696 #define STATIC_KSTIME_FORMAT_SAMPLE \
00697 0x7b785572L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6
00698 DEFINE_GUIDSTRUCT("7b785572-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_SAMPLE);
00699 #define KSTIME_FORMAT_SAMPLE DEFINE_GUIDNAMED(KSTIME_FORMAT_SAMPLE)
00700
00701 #define STATIC_KSTIME_FORMAT_FIELD \
00702 0x7b785573L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6
00703 DEFINE_GUIDSTRUCT("7b785573-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_FIELD);
00704 #define KSTIME_FORMAT_FIELD DEFINE_GUIDNAMED(KSTIME_FORMAT_FIELD)
00705
00706 #define STATIC_KSTIME_FORMAT_MEDIA_TIME \
00707 0x7b785574L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6
00708 DEFINE_GUIDSTRUCT("7b785574-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_MEDIA_TIME);
00709 #define KSTIME_FORMAT_MEDIA_TIME DEFINE_GUIDNAMED(KSTIME_FORMAT_MEDIA_TIME)
00710
00711 typedef KSIDENTIFIER KSPIN_INTERFACE,*PKSPIN_INTERFACE;
00712
00713 #define STATIC_KSINTERFACESETID_Standard \
00714 0x1A8766A0L,0x62CE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
00715 DEFINE_GUIDSTRUCT("1A8766A0-62CE-11CF-A5D6-28DB04C10000",KSINTERFACESETID_Standard);
00716 #define KSINTERFACESETID_Standard DEFINE_GUIDNAMED(KSINTERFACESETID_Standard)
00717
00718 typedef enum {
00719 KSINTERFACE_STANDARD_STREAMING,
00720 KSINTERFACE_STANDARD_LOOPED_STREAMING,
00721 KSINTERFACE_STANDARD_CONTROL
00722 } KSINTERFACE_STANDARD;
00723
00724 #define STATIC_KSINTERFACESETID_FileIo \
00725 0x8C6F932CL,0xE771,0x11D0,0xB8,0xFF,0x00,0xA0,0xC9,0x22,0x31,0x96
00726 DEFINE_GUIDSTRUCT("8C6F932C-E771-11D0-B8FF-00A0C9223196",KSINTERFACESETID_FileIo);
00727 #define KSINTERFACESETID_FileIo DEFINE_GUIDNAMED(KSINTERFACESETID_FileIo)
00728
00729 typedef enum {
00730 KSINTERFACE_FILEIO_STREAMING
00731 } KSINTERFACE_FILEIO;
00732
00733 #define KSMEDIUM_TYPE_ANYINSTANCE 0
00734
00735 #define STATIC_KSMEDIUMSETID_Standard \
00736 0x4747B320L,0x62CE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
00737 DEFINE_GUIDSTRUCT("4747B320-62CE-11CF-A5D6-28DB04C10000",KSMEDIUMSETID_Standard);
00738 #define KSMEDIUMSETID_Standard DEFINE_GUIDNAMED(KSMEDIUMSETID_Standard)
00739
00740 #define KSMEDIUM_STANDARD_DEVIO KSMEDIUM_TYPE_ANYINSTANCE
00741
00742 #define STATIC_KSPROPSETID_Pin \
00743 0x8C134960L,0x51AD,0x11CF,0x87,0x8A,0x94,0xF8,0x01,0xC1,0x00,0x00
00744 DEFINE_GUIDSTRUCT("8C134960-51AD-11CF-878A-94F801C10000",KSPROPSETID_Pin);
00745 #define KSPROPSETID_Pin DEFINE_GUIDNAMED(KSPROPSETID_Pin)
00746
00747 typedef enum {
00748 KSPROPERTY_PIN_CINSTANCES,
00749 KSPROPERTY_PIN_CTYPES,
00750 KSPROPERTY_PIN_DATAFLOW,
00751 KSPROPERTY_PIN_DATARANGES,
00752 KSPROPERTY_PIN_DATAINTERSECTION,
00753 KSPROPERTY_PIN_INTERFACES,
00754 KSPROPERTY_PIN_MEDIUMS,
00755 KSPROPERTY_PIN_COMMUNICATION,
00756 KSPROPERTY_PIN_GLOBALCINSTANCES,
00757 KSPROPERTY_PIN_NECESSARYINSTANCES,
00758 KSPROPERTY_PIN_PHYSICALCONNECTION,
00759 KSPROPERTY_PIN_CATEGORY,
00760 KSPROPERTY_PIN_NAME,
00761 KSPROPERTY_PIN_CONSTRAINEDDATARANGES,
00762 KSPROPERTY_PIN_PROPOSEDATAFORMAT
00763 } KSPROPERTY_PIN;
00764
00765 typedef struct {
00766 KSPROPERTY Property;
00767 ULONG PinId;
00768 ULONG Reserved;
00769 } KSP_PIN,*PKSP_PIN;
00770
00771 #define KSINSTANCE_INDETERMINATE ((ULONG)-1)
00772
00773 typedef struct {
00774 ULONG PossibleCount;
00775 ULONG CurrentCount;
00776 } KSPIN_CINSTANCES,*PKSPIN_CINSTANCES;
00777
00778 typedef enum {
00779 KSPIN_DATAFLOW_IN = 1,
00780 KSPIN_DATAFLOW_OUT
00781 } KSPIN_DATAFLOW,*PKSPIN_DATAFLOW;
00782
00783 #define KSDATAFORMAT_BIT_TEMPORAL_COMPRESSION 0
00784 #define KSDATAFORMAT_TEMPORAL_COMPRESSION (1 << KSDATAFORMAT_BIT_TEMPORAL_COMPRESSION)
00785 #define KSDATAFORMAT_BIT_ATTRIBUTES 1
00786 #define KSDATAFORMAT_ATTRIBUTES (1 << KSDATAFORMAT_BIT_ATTRIBUTES)
00787
00788 #define KSDATARANGE_BIT_ATTRIBUTES 1
00789 #define KSDATARANGE_ATTRIBUTES (1 << KSDATARANGE_BIT_ATTRIBUTES)
00790 #define KSDATARANGE_BIT_REQUIRED_ATTRIBUTES 2
00791 #define KSDATARANGE_REQUIRED_ATTRIBUTES (1 << KSDATARANGE_BIT_REQUIRED_ATTRIBUTES)
00792
00793 typedef union {
00794 __MINGW_EXTENSION struct {
00795 ULONG FormatSize;
00796 ULONG Flags;
00797 ULONG SampleSize;
00798 ULONG Reserved;
00799 GUID MajorFormat;
00800 GUID SubFormat;
00801 GUID Specifier;
00802 };
00803 LONGLONG Alignment;
00804 } KSDATAFORMAT,*PKSDATAFORMAT,KSDATARANGE,*PKSDATARANGE;
00805
00806 #define KSATTRIBUTE_REQUIRED 0x00000001
00807
00808 typedef struct {
00809 ULONG Size;
00810 ULONG Flags;
00811 GUID Attribute;
00812 } KSATTRIBUTE,*PKSATTRIBUTE;
00813
00814 #if defined(_NTDDK_)
00815 typedef struct {
00816 ULONG Count;
00817 PKSATTRIBUTE *Attributes;
00818 } KSATTRIBUTE_LIST,*PKSATTRIBUTE_LIST;
00819 #endif
00820
00821 typedef enum {
00822 KSPIN_COMMUNICATION_NONE,
00823 KSPIN_COMMUNICATION_SINK,
00824 KSPIN_COMMUNICATION_SOURCE,
00825 KSPIN_COMMUNICATION_BOTH,
00826 KSPIN_COMMUNICATION_BRIDGE
00827 } KSPIN_COMMUNICATION,*PKSPIN_COMMUNICATION;
00828
00829 typedef KSIDENTIFIER KSPIN_MEDIUM,*PKSPIN_MEDIUM;
00830
00831 typedef struct {
00832 KSPIN_INTERFACE Interface;
00833 KSPIN_MEDIUM Medium;
00834 ULONG PinId;
00835 HANDLE PinToHandle;
00836 KSPRIORITY Priority;
00837 } KSPIN_CONNECT,*PKSPIN_CONNECT;
00838
00839 typedef struct {
00840 ULONG Size;
00841 ULONG Pin;
00842 WCHAR SymbolicLinkName[1];
00843 } KSPIN_PHYSICALCONNECTION,*PKSPIN_PHYSICALCONNECTION;
00844
00845 #if defined(_NTDDK_)
00846 typedef NTSTATUS (*PFNKSINTERSECTHANDLER) ( PIRP Irp, PKSP_PIN Pin,
00847 PKSDATARANGE DataRange,
00848 PVOID Data);
00849 typedef NTSTATUS (*PFNKSINTERSECTHANDLEREX)(PVOID Context, PIRP Irp,
00850 PKSP_PIN Pin,
00851 PKSDATARANGE DataRange,
00852 PKSDATARANGE MatchingDataRange,
00853 ULONG DataBufferSize,
00854 PVOID Data,
00855 PULONG DataSize);
00856 #endif
00857
00858 #define DEFINE_KSPIN_INTERFACE_TABLE(tablename) \
00859 const KSPIN_INTERFACE tablename[] =
00860
00861 #define DEFINE_KSPIN_INTERFACE_ITEM(guid,_interFace) \
00862 { \
00863 STATICGUIDOF(guid), \
00864 (_interFace), \
00865 0 \
00866 }
00867
00868 #define DEFINE_KSPIN_MEDIUM_TABLE(tablename) \
00869 const KSPIN_MEDIUM tablename[] =
00870
00871 #define DEFINE_KSPIN_MEDIUM_ITEM(guid,medium) \
00872 DEFINE_KSPIN_INTERFACE_ITEM(guid,medium)
00873
00874 #define DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(Handler) \
00875 DEFINE_KSPROPERTY_ITEM( \
00876 KSPROPERTY_PIN_CINSTANCES, \
00877 (Handler), \
00878 sizeof(KSP_PIN), \
00879 sizeof(KSPIN_CINSTANCES), \
00880 NULL, NULL, 0, NULL, NULL, 0)
00881
00882 #define DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(Handler) \
00883 DEFINE_KSPROPERTY_ITEM( \
00884 KSPROPERTY_PIN_CTYPES, \
00885 (Handler), \
00886 sizeof(KSPROPERTY), \
00887 sizeof(ULONG), \
00888 NULL, NULL, 0, NULL, NULL, 0)
00889
00890 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(Handler) \
00891 DEFINE_KSPROPERTY_ITEM( \
00892 KSPROPERTY_PIN_DATAFLOW, \
00893 (Handler), \
00894 sizeof(KSP_PIN), \
00895 sizeof(KSPIN_DATAFLOW), \
00896 NULL, NULL, 0, NULL, NULL, 0)
00897
00898 #define DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(Handler) \
00899 DEFINE_KSPROPERTY_ITEM( \
00900 KSPROPERTY_PIN_DATARANGES, \
00901 (Handler), \
00902 sizeof(KSP_PIN), \
00903 0, \
00904 NULL, NULL, 0, NULL, NULL, 0)
00905
00906 #define DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(Handler) \
00907 DEFINE_KSPROPERTY_ITEM( \
00908 KSPROPERTY_PIN_DATAINTERSECTION, \
00909 (Handler), \
00910 sizeof(KSP_PIN) + sizeof(KSMULTIPLE_ITEM),\
00911 0, \
00912 NULL, NULL, 0, NULL, NULL, 0)
00913
00914 #define DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(Handler) \
00915 DEFINE_KSPROPERTY_ITEM( \
00916 KSPROPERTY_PIN_INTERFACES, \
00917 (Handler), \
00918 sizeof(KSP_PIN), \
00919 0, \
00920 NULL, NULL, 0, NULL, NULL, 0)
00921
00922 #define DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(Handler) \
00923 DEFINE_KSPROPERTY_ITEM( \
00924 KSPROPERTY_PIN_MEDIUMS, \
00925 (Handler), \
00926 sizeof(KSP_PIN), \
00927 0, \
00928 NULL, NULL, 0, NULL, NULL, 0)
00929
00930 #define DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(Handler) \
00931 DEFINE_KSPROPERTY_ITEM( \
00932 KSPROPERTY_PIN_COMMUNICATION, \
00933 (Handler), \
00934 sizeof(KSP_PIN), \
00935 sizeof(KSPIN_COMMUNICATION), \
00936 NULL, NULL, 0, NULL, NULL, 0)
00937
00938 #define DEFINE_KSPROPERTY_ITEM_PIN_GLOBALCINSTANCES(Handler) \
00939 DEFINE_KSPROPERTY_ITEM( \
00940 KSPROPERTY_PIN_GLOBALCINSTANCES, \
00941 (Handler), \
00942 sizeof(KSP_PIN), \
00943 sizeof(KSPIN_CINSTANCES), \
00944 NULL, NULL, 0, NULL, NULL, 0)
00945
00946 #define DEFINE_KSPROPERTY_ITEM_PIN_NECESSARYINSTANCES(Handler) \
00947 DEFINE_KSPROPERTY_ITEM( \
00948 KSPROPERTY_PIN_NECESSARYINSTANCES, \
00949 (Handler), \
00950 sizeof(KSP_PIN), \
00951 sizeof(ULONG), \
00952 NULL, NULL, 0, NULL, NULL, 0)
00953
00954 #define DEFINE_KSPROPERTY_ITEM_PIN_PHYSICALCONNECTION(Handler) \
00955 DEFINE_KSPROPERTY_ITEM( \
00956 KSPROPERTY_PIN_PHYSICALCONNECTION, \
00957 (Handler), \
00958 sizeof(KSP_PIN), \
00959 0, \
00960 NULL, NULL, 0, NULL, NULL, 0)
00961
00962 #define DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(Handler) \
00963 DEFINE_KSPROPERTY_ITEM( \
00964 KSPROPERTY_PIN_CATEGORY, \
00965 (Handler), \
00966 sizeof(KSP_PIN), \
00967 sizeof(GUID), \
00968 NULL, NULL, 0, NULL, NULL, 0)
00969
00970 #define DEFINE_KSPROPERTY_ITEM_PIN_NAME(Handler) \
00971 DEFINE_KSPROPERTY_ITEM( \
00972 KSPROPERTY_PIN_NAME, \
00973 (Handler), \
00974 sizeof(KSP_PIN), \
00975 0, \
00976 NULL, NULL, 0, NULL, NULL, 0)
00977
00978 #define DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(Handler) \
00979 DEFINE_KSPROPERTY_ITEM( \
00980 KSPROPERTY_PIN_CONSTRAINEDDATARANGES, \
00981 (Handler), \
00982 sizeof(KSP_PIN), \
00983 0, \
00984 NULL, NULL, 0, NULL, NULL, 0)
00985
00986 #define DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(Handler) \
00987 DEFINE_KSPROPERTY_ITEM( \
00988 KSPROPERTY_PIN_PROPOSEDATAFORMAT, \
00989 NULL, \
00990 sizeof(KSP_PIN), \
00991 sizeof(KSDATAFORMAT), \
00992 (Handler), NULL, 0, NULL, NULL, 0)
00993
00994 #define DEFINE_KSPROPERTY_PINSET(PinSet,PropGeneral,PropInstances,PropIntersection) \
00995 DEFINE_KSPROPERTY_TABLE(PinSet) { \
00996 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances), \
00997 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral), \
00998 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral), \
00999 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral), \
01000 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection), \
01001 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral), \
01002 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral), \
01003 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral), \
01004 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral), \
01005 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral) \
01006 }
01007
01008 #define DEFINE_KSPROPERTY_PINSETCONSTRAINED(PinSet,PropGeneral,PropInstances,PropIntersection) \
01009 DEFINE_KSPROPERTY_TABLE(PinSet) { \
01010 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances), \
01011 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral), \
01012 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral), \
01013 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral), \
01014 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection), \
01015 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral), \
01016 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral), \
01017 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral), \
01018 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral), \
01019 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral), \
01020 DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral) \
01021 }
01022
01023 #define STATIC_KSNAME_Filter \
01024 0x9b365890L,0x165f,0x11d0,0xa1,0x95,0x00,0x20,0xaf,0xd1,0x56,0xe4
01025 DEFINE_GUIDSTRUCT("9b365890-165f-11d0-a195-0020afd156e4",KSNAME_Filter);
01026 #define KSNAME_Filter DEFINE_GUIDNAMED(KSNAME_Filter)
01027
01028 #define KSSTRING_Filter L"{9B365890-165F-11D0-A195-0020AFD156E4}"
01029
01030 #define STATIC_KSNAME_Pin \
01031 0x146F1A80L,0x4791,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
01032 DEFINE_GUIDSTRUCT("146F1A80-4791-11D0-A5D6-28DB04C10000",KSNAME_Pin);
01033 #define KSNAME_Pin DEFINE_GUIDNAMED(KSNAME_Pin)
01034
01035 #define KSSTRING_Pin L"{146F1A80-4791-11D0-A5D6-28DB04C10000}"
01036
01037 #define STATIC_KSNAME_Clock \
01038 0x53172480L,0x4791,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
01039 DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000",KSNAME_Clock);
01040 #define KSNAME_Clock DEFINE_GUIDNAMED(KSNAME_Clock)
01041
01042 #define KSSTRING_Clock L"{53172480-4791-11D0-A5D6-28DB04C10000}"
01043
01044 #define STATIC_KSNAME_Allocator \
01045 0x642F5D00L,0x4791,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
01046 DEFINE_GUIDSTRUCT("642F5D00-4791-11D0-A5D6-28DB04C10000",KSNAME_Allocator);
01047 #define KSNAME_Allocator DEFINE_GUIDNAMED(KSNAME_Allocator)
01048
01049 #define KSSTRING_Allocator L"{642F5D00-4791-11D0-A5D6-28DB04C10000}"
01050
01051 #define KSSTRING_AllocatorEx L"{091BB63B-603F-11D1-B067-00A0C9062802}"
01052
01053 #define STATIC_KSNAME_TopologyNode \
01054 0x0621061AL,0xEE75,0x11D0,0xB9,0x15,0x00,0xA0,0xC9,0x22,0x31,0x96
01055 DEFINE_GUIDSTRUCT("0621061A-EE75-11D0-B915-00A0C9223196",KSNAME_TopologyNode);
01056 #define KSNAME_TopologyNode DEFINE_GUIDNAMED(KSNAME_TopologyNode)
01057
01058 #define KSSTRING_TopologyNode L"{0621061A-EE75-11D0-B915-00A0C9223196}"
01059
01060 #if defined(_NTDDK_)
01061 typedef struct {
01062 ULONG InterfacesCount;
01063 const KSPIN_INTERFACE *Interfaces;
01064 ULONG MediumsCount;
01065 const KSPIN_MEDIUM *Mediums;
01066 ULONG DataRangesCount;
01067 const PKSDATARANGE *DataRanges;
01068 KSPIN_DATAFLOW DataFlow;
01069 KSPIN_COMMUNICATION Communication;
01070 const GUID *Category;
01071 const GUID *Name;
01072 __MINGW_EXTENSION union {
01073 LONGLONG Reserved;
01074 __MINGW_EXTENSION struct {
01075 ULONG ConstrainedDataRangesCount;
01076 PKSDATARANGE *ConstrainedDataRanges;
01077 };
01078 };
01079 } KSPIN_DESCRIPTOR, *PKSPIN_DESCRIPTOR;
01080 typedef const KSPIN_DESCRIPTOR *PCKSPIN_DESCRIPTOR;
01081
01082 #define DEFINE_KSPIN_DESCRIPTOR_TABLE(tablename) \
01083 const KSPIN_DESCRIPTOR tablename[] =
01084
01085 #define DEFINE_KSPIN_DESCRIPTOR_ITEM(InterfacesCount,Interfaces,MediumsCount, Mediums,DataRangesCount,DataRanges,DataFlow,Communication)\
01086 { \
01087 InterfacesCount, Interfaces, MediumsCount, Mediums, \
01088 DataRangesCount, DataRanges, DataFlow, Communication, \
01089 NULL, NULL, 0 \
01090 }
01091
01092 #define DEFINE_KSPIN_DESCRIPTOR_ITEMEX(InterfacesCount,Interfaces,MediumsCount,Mediums,DataRangesCount,DataRanges,DataFlow,Communication,Category,Name)\
01093 { \
01094 InterfacesCount, Interfaces, MediumsCount, Mediums, \
01095 DataRangesCount, DataRanges, DataFlow, Communication, \
01096 Category, Name, 0 \
01097 }
01098 #endif
01099
01100 #define STATIC_KSDATAFORMAT_TYPE_WILDCARD STATIC_GUID_NULL
01101 #define KSDATAFORMAT_TYPE_WILDCARD GUID_NULL
01102
01103 #define STATIC_KSDATAFORMAT_SUBTYPE_WILDCARD STATIC_GUID_NULL
01104 #define KSDATAFORMAT_SUBTYPE_WILDCARD GUID_NULL
01105
01106 #define STATIC_KSDATAFORMAT_TYPE_STREAM \
01107 0xE436EB83L,0x524F,0x11CE,0x9F,0x53,0x00,0x20,0xAF,0x0B,0xA7,0x70
01108 DEFINE_GUIDSTRUCT("E436EB83-524F-11CE-9F53-0020AF0BA770",KSDATAFORMAT_TYPE_STREAM);
01109 #define KSDATAFORMAT_TYPE_STREAM DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_STREAM)
01110
01111 #define STATIC_KSDATAFORMAT_SUBTYPE_NONE \
01112 0xE436EB8EL,0x524F,0x11CE,0x9F,0x53,0x00,0x20,0xAF,0x0B,0xA7,0x70
01113 DEFINE_GUIDSTRUCT("E436EB8E-524F-11CE-9F53-0020AF0BA770",KSDATAFORMAT_SUBTYPE_NONE);
01114 #define KSDATAFORMAT_SUBTYPE_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_NONE)
01115
01116 #define STATIC_KSDATAFORMAT_SPECIFIER_WILDCARD STATIC_GUID_NULL
01117 #define KSDATAFORMAT_SPECIFIER_WILDCARD GUID_NULL
01118
01119 #define STATIC_KSDATAFORMAT_SPECIFIER_FILENAME \
01120 0xAA797B40L,0xE974,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
01121 DEFINE_GUIDSTRUCT("AA797B40-E974-11CF-A5D6-28DB04C10000",KSDATAFORMAT_SPECIFIER_FILENAME);
01122 #define KSDATAFORMAT_SPECIFIER_FILENAME DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_FILENAME)
01123
01124 #define STATIC_KSDATAFORMAT_SPECIFIER_FILEHANDLE \
01125 0x65E8773CL,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96
01126 DEFINE_GUIDSTRUCT("65E8773C-8F56-11D0-A3B9-00A0C9223196",KSDATAFORMAT_SPECIFIER_FILEHANDLE);
01127 #define KSDATAFORMAT_SPECIFIER_FILEHANDLE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_FILEHANDLE)
01128
01129 #define STATIC_KSDATAFORMAT_SPECIFIER_NONE \
01130 0x0F6417D6L,0xC318,0x11D0,0xA4,0x3F,0x00,0xA0,0xC9,0x22,0x31,0x96
01131 DEFINE_GUIDSTRUCT("0F6417D6-C318-11D0-A43F-00A0C9223196",KSDATAFORMAT_SPECIFIER_NONE);
01132 #define KSDATAFORMAT_SPECIFIER_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_NONE)
01133
01134 #define STATIC_KSPROPSETID_Quality \
01135 0xD16AD380L,0xAC1A,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
01136 DEFINE_GUIDSTRUCT("D16AD380-AC1A-11CF-A5D6-28DB04C10000",KSPROPSETID_Quality);
01137 #define KSPROPSETID_Quality DEFINE_GUIDNAMED(KSPROPSETID_Quality)
01138
01139 typedef enum {
01140 KSPROPERTY_QUALITY_REPORT,
01141 KSPROPERTY_QUALITY_ERROR
01142 } KSPROPERTY_QUALITY;
01143
01144 #define DEFINE_KSPROPERTY_ITEM_QUALITY_REPORT(GetHandler,SetHandler) \
01145 DEFINE_KSPROPERTY_ITEM( \
01146 KSPROPERTY_QUALITY_REPORT, \
01147 (GetHandler), \
01148 sizeof(KSPROPERTY), \
01149 sizeof(KSQUALITY), \
01150 (SetHandler), \
01151 NULL, 0, NULL, NULL, 0)
01152
01153 #define DEFINE_KSPROPERTY_ITEM_QUALITY_ERROR(GetHandler,SetHandler) \
01154 DEFINE_KSPROPERTY_ITEM( \
01155 KSPROPERTY_QUALITY_ERROR, \
01156 (GetHandler), \
01157 sizeof(KSPROPERTY), \
01158 sizeof(KSERROR), \
01159 (SetHandler), \
01160 NULL, 0, NULL, NULL, 0)
01161
01162 #define STATIC_KSPROPSETID_Connection \
01163 0x1D58C920L,0xAC9B,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
01164 DEFINE_GUIDSTRUCT("1D58C920-AC9B-11CF-A5D6-28DB04C10000",KSPROPSETID_Connection);
01165 #define KSPROPSETID_Connection DEFINE_GUIDNAMED(KSPROPSETID_Connection)
01166
01167 typedef enum {
01168 KSPROPERTY_CONNECTION_STATE,
01169 KSPROPERTY_CONNECTION_PRIORITY,
01170 KSPROPERTY_CONNECTION_DATAFORMAT,
01171 KSPROPERTY_CONNECTION_ALLOCATORFRAMING,
01172 KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT,
01173 KSPROPERTY_CONNECTION_ACQUIREORDERING,
01174 KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,
01175 KSPROPERTY_CONNECTION_STARTAT
01176 } KSPROPERTY_CONNECTION;
01177
01178 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_STATE(GetHandler,SetHandler) \
01179 DEFINE_KSPROPERTY_ITEM( \
01180 KSPROPERTY_CONNECTION_STATE, \
01181 (GetHandler), \
01182 sizeof(KSPROPERTY), \
01183 sizeof(KSSTATE), \
01184 (SetHandler), \
01185 NULL, 0, NULL, NULL, 0)
01186
01187 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_PRIORITY(GetHandler,SetHandler) \
01188 DEFINE_KSPROPERTY_ITEM( \
01189 KSPROPERTY_CONNECTION_PRIORITY, \
01190 (GetHandler), \
01191 sizeof(KSPROPERTY), \
01192 sizeof(KSPRIORITY), \
01193 (SetHandler), \
01194 NULL, 0, NULL, NULL, 0)
01195
01196 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_DATAFORMAT(GetHandler,SetHandler)\
01197 DEFINE_KSPROPERTY_ITEM( \
01198 KSPROPERTY_CONNECTION_DATAFORMAT, \
01199 (GetHandler), \
01200 sizeof(KSPROPERTY), \
01201 0, \
01202 (SetHandler), \
01203 NULL, 0, NULL, NULL, 0)
01204
01205 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING(Handler) \
01206 DEFINE_KSPROPERTY_ITEM( \
01207 KSPROPERTY_CONNECTION_ALLOCATORFRAMING, \
01208 (Handler), \
01209 sizeof(KSPROPERTY), \
01210 sizeof(KSALLOCATOR_FRAMING), \
01211 NULL, NULL, 0, NULL, NULL, 0)
01212
01213 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING_EX(Handler) \
01214 DEFINE_KSPROPERTY_ITEM( \
01215 KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,\
01216 (Handler), \
01217 sizeof(KSPROPERTY), \
01218 0, \
01219 NULL, NULL, 0, NULL, NULL, 0)
01220
01221 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_PROPOSEDATAFORMAT(Handler) \
01222 DEFINE_KSPROPERTY_ITEM( \
01223 KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT,\
01224 NULL, \
01225 sizeof(KSPROPERTY), \
01226 sizeof(KSDATAFORMAT), \
01227 (Handler), \
01228 NULL, 0, NULL, NULL, 0)
01229
01230 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ACQUIREORDERING(Handler) \
01231 DEFINE_KSPROPERTY_ITEM( \
01232 KSPROPERTY_CONNECTION_ACQUIREORDERING, \
01233 (Handler), \
01234 sizeof(KSPROPERTY), \
01235 sizeof(int), \
01236 NULL, NULL, 0, NULL, NULL, 0)
01237
01238 #define DEFINE_KSPROPERTY_ITEM_CONNECTION_STARTAT(Handler) \
01239 DEFINE_KSPROPERTY_ITEM( \
01240 KSPROPERTY_CONNECTION_STARTAT, \
01241 NULL, \
01242 sizeof(KSPROPERTY), \
01243 sizeof(KSRELATIVEEVENT), \
01244 (Handler), \
01245 NULL, 0, NULL, NULL, 0)
01246
01247 #define KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER 0x00000001
01248 #define KSALLOCATOR_REQUIREMENTF_SYSTEM_MEMORY 0x00000002
01249 #define KSALLOCATOR_REQUIREMENTF_FRAME_INTEGRITY 0x00000004
01250 #define KSALLOCATOR_REQUIREMENTF_MUST_ALLOCATE 0x00000008
01251 #define KSALLOCATOR_REQUIREMENTF_PREFERENCES_ONLY 0x80000000
01252
01253 #define KSALLOCATOR_OPTIONF_COMPATIBLE 0x00000001
01254 #define KSALLOCATOR_OPTIONF_SYSTEM_MEMORY 0x00000002
01255 #define KSALLOCATOR_OPTIONF_VALID 0x00000003
01256
01257 #define KSALLOCATOR_FLAG_PARTIAL_READ_SUPPORT 0x00000010
01258 #define KSALLOCATOR_FLAG_DEVICE_SPECIFIC 0x00000020
01259 #define KSALLOCATOR_FLAG_CAN_ALLOCATE 0x00000040
01260 #define KSALLOCATOR_FLAG_INSIST_ON_FRAMESIZE_RATIO 0x00000080
01261 #define KSALLOCATOR_FLAG_NO_FRAME_INTEGRITY 0x00000100
01262 #define KSALLOCATOR_FLAG_MULTIPLE_OUTPUT 0x00000200
01263 #define KSALLOCATOR_FLAG_CYCLE 0x00000400
01264 #define KSALLOCATOR_FLAG_ALLOCATOR_EXISTS 0x00000800
01265 #define KSALLOCATOR_FLAG_INDEPENDENT_RANGES 0x00001000
01266 #define KSALLOCATOR_FLAG_ATTENTION_STEPPING 0x00002000
01267
01268 typedef struct {
01269 __MINGW_EXTENSION union {
01270 ULONG OptionsFlags;
01271 ULONG RequirementsFlags;
01272 };
01273 #if defined(_NTDDK_)
01274 POOL_TYPE PoolType;
01275 #else
01276 ULONG PoolType;
01277 #endif
01278 ULONG Frames;
01279 ULONG FrameSize;
01280 ULONG FileAlignment;
01281 ULONG Reserved;
01282 } KSALLOCATOR_FRAMING,*PKSALLOCATOR_FRAMING;
01283
01284 #if defined(_NTDDK_)
01285 typedef PVOID (*PFNKSDEFAULTALLOCATE)(PVOID Context);
01286 typedef VOID (*PFNKSDEFAULTFREE)(PVOID Context, PVOID Buffer);
01287 typedef NTSTATUS (*PFNKSINITIALIZEALLOCATOR)(PVOID InitialContext,
01288 PKSALLOCATOR_FRAMING AllocatorFraming,
01289 PVOID* Context);
01290 typedef VOID (*PFNKSDELETEALLOCATOR) (PVOID Context);
01291 #endif
01292
01293 typedef struct {
01294 ULONG MinFrameSize;
01295 ULONG MaxFrameSize;
01296 ULONG Stepping;
01297 } KS_FRAMING_RANGE,*PKS_FRAMING_RANGE;
01298
01299 typedef struct {
01300 KS_FRAMING_RANGE Range;
01301 ULONG InPlaceWeight;
01302 ULONG NotInPlaceWeight;
01303 } KS_FRAMING_RANGE_WEIGHTED,*PKS_FRAMING_RANGE_WEIGHTED;
01304
01305 typedef struct {
01306 ULONG RatioNumerator;
01307 ULONG RatioDenominator;
01308 ULONG RatioConstantMargin;
01309 } KS_COMPRESSION,*PKS_COMPRESSION;
01310
01311 typedef struct {
01312 GUID MemoryType;
01313 GUID BusType;
01314 ULONG MemoryFlags;
01315 ULONG BusFlags;
01316 ULONG Flags;
01317 ULONG Frames;
01318 ULONG FileAlignment;
01319 ULONG MemoryTypeWeight;
01320 KS_FRAMING_RANGE PhysicalRange;
01321 KS_FRAMING_RANGE_WEIGHTED FramingRange;
01322 } KS_FRAMING_ITEM,*PKS_FRAMING_ITEM;
01323
01324 typedef struct {
01325 ULONG CountItems;
01326 ULONG PinFlags;
01327 KS_COMPRESSION OutputCompression;
01328 ULONG PinWeight;
01329 KS_FRAMING_ITEM FramingItem[1];
01330 } KSALLOCATOR_FRAMING_EX,*PKSALLOCATOR_FRAMING_EX;
01331
01332 #define KSMEMORY_TYPE_WILDCARD GUID_NULL
01333 #define STATIC_KSMEMORY_TYPE_WILDCARD STATIC_GUID_NULL
01334
01335 #define KSMEMORY_TYPE_DONT_CARE GUID_NULL
01336 #define STATIC_KSMEMORY_TYPE_DONT_CARE STATIC_GUID_NULL
01337
01338 #define KS_TYPE_DONT_CARE GUID_NULL
01339 #define STATIC_KS_TYPE_DONT_CARE STATIC_GUID_NULL
01340
01341 #define STATIC_KSMEMORY_TYPE_SYSTEM \
01342 0x091bb638L,0x603f,0x11d1,0xb0,0x67,0x00,0xa0,0xc9,0x06,0x28,0x02
01343 DEFINE_GUIDSTRUCT("091bb638-603f-11d1-b067-00a0c9062802",KSMEMORY_TYPE_SYSTEM);
01344 #define KSMEMORY_TYPE_SYSTEM DEFINE_GUIDNAMED(KSMEMORY_TYPE_SYSTEM)
01345
01346 #define STATIC_KSMEMORY_TYPE_USER \
01347 0x8cb0fc28L,0x7893,0x11d1,0xb0,0x69,0x00,0xa0,0xc9,0x06,0x28,0x02
01348 DEFINE_GUIDSTRUCT("8cb0fc28-7893-11d1-b069-00a0c9062802",KSMEMORY_TYPE_USER);
01349 #define KSMEMORY_TYPE_USER DEFINE_GUIDNAMED(KSMEMORY_TYPE_USER)
01350
01351 #define STATIC_KSMEMORY_TYPE_KERNEL_PAGED \
01352 0xd833f8f8L,0x7894,0x11d1,0xb0,0x69,0x00,0xa0,0xc9,0x06,0x28,0x02
01353 DEFINE_GUIDSTRUCT("d833f8f8-7894-11d1-b069-00a0c9062802",KSMEMORY_TYPE_KERNEL_PAGED);
01354 #define KSMEMORY_TYPE_KERNEL_PAGED DEFINE_GUIDNAMED(KSMEMORY_TYPE_KERNEL_PAGED)
01355
01356 #define STATIC_KSMEMORY_TYPE_KERNEL_NONPAGED \
01357 0x4a6d5fc4L,0x7895,0x11d1,0xb0,0x69,0x00,0xa0,0xc9,0x06,0x28,0x02
01358 DEFINE_GUIDSTRUCT("4a6d5fc4-7895-11d1-b069-00a0c9062802",KSMEMORY_TYPE_KERNEL_NONPAGED);
01359 #define KSMEMORY_TYPE_KERNEL_NONPAGED DEFINE_GUIDNAMED(KSMEMORY_TYPE_KERNEL_NONPAGED)
01360
01361 #define STATIC_KSMEMORY_TYPE_DEVICE_UNKNOWN \
01362 0x091bb639L,0x603f,0x11d1,0xb0,0x67,0x00,0xa0,0xc9,0x06,0x28,0x02
01363 DEFINE_GUIDSTRUCT("091bb639-603f-11d1-b067-00a0c9062802",KSMEMORY_TYPE_DEVICE_UNKNOWN);
01364 #define KSMEMORY_TYPE_DEVICE_UNKNOWN DEFINE_GUIDNAMED(KSMEMORY_TYPE_DEVICE_UNKNOWN)
01365
01366 #define DECLARE_SIMPLE_FRAMING_EX(FramingExName,MemoryType,Flags,Frames,Alignment,MinFrameSize,MaxFrameSize) \
01367 const KSALLOCATOR_FRAMING_EX FramingExName = \
01368 { \
01369 1, \
01370 0, \
01371 { \
01372 1, \
01373 1, \
01374 0 \
01375 }, \
01376 0, \
01377 { \
01378 { \
01379 MemoryType, \
01380 STATIC_KS_TYPE_DONT_CARE, \
01381 0, \
01382 0, \
01383 Flags, \
01384 Frames, \
01385 Alignment, \
01386 0, \
01387 { \
01388 0, \
01389 (ULONG)-1, \
01390 1 \
01391 }, \
01392 { \
01393 { \
01394 MinFrameSize, \
01395 MaxFrameSize, \
01396 1 \
01397 }, \
01398 0, \
01399 0 \
01400 } \
01401 } \
01402 } \
01403 }
01404
01405 #define SetDefaultKsCompression(KsCompressionPointer) \
01406 { \
01407 KsCompressionPointer->RatioNumerator = 1; \
01408 KsCompressionPointer->RatioDenominator = 1; \
01409 KsCompressionPointer->RatioConstantMargin = 0; \
01410 }
01411
01412 #define SetDontCareKsFramingRange(KsFramingRangePointer) \
01413 { \
01414 KsFramingRangePointer->MinFrameSize = 0; \
01415 KsFramingRangePointer->MaxFrameSize = (ULONG) -1; \
01416 KsFramingRangePointer->Stepping = 1; \
01417 }
01418
01419 #define SetKsFramingRange(KsFramingRangePointer,P_MinFrameSize,P_MaxFrameSize) \
01420 { \
01421 KsFramingRangePointer->MinFrameSize = P_MinFrameSize; \
01422 KsFramingRangePointer->MaxFrameSize = P_MaxFrameSize; \
01423 KsFramingRangePointer->Stepping = 1; \
01424 }
01425
01426 #define SetKsFramingRangeWeighted(KsFramingRangeWeightedPointer,P_MinFrameSize,P_MaxFrameSize) \
01427 { \
01428 KS_FRAMING_RANGE *KsFramingRange = \
01429 &KsFramingRangeWeightedPointer->Range; \
01430 SetKsFramingRange(KsFramingRange,P_MinFrameSize,P_MaxFrameSize);\
01431 KsFramingRangeWeightedPointer->InPlaceWeight = 0; \
01432 KsFramingRangeWeightedPointer->NotInPlaceWeight = 0; \
01433 }
01434
01435 #define INITIALIZE_SIMPLE_FRAMING_EX(FramingExPointer,P_MemoryType,P_Flags,P_Frames,P_Alignment,P_MinFrameSize,P_MaxFrameSize) \
01436 { \
01437 KS_COMPRESSION *KsCompression = \
01438 &FramingExPointer->OutputCompression; \
01439 KS_FRAMING_RANGE *KsFramingRange = \
01440 &FramingExPointer->FramingItem[0].PhysicalRange;\
01441 KS_FRAMING_RANGE_WEIGHTED *KsFramingRangeWeighted = \
01442 &FramingExPointer->FramingItem[0].FramingRange; \
01443 FramingExPointer->CountItems = 1; \
01444 FramingExPointer->PinFlags = 0; \
01445 SetDefaultKsCompression(KsCompression); \
01446 FramingExPointer->PinWeight = 0; \
01447 FramingExPointer->FramingItem[0].MemoryType = P_MemoryType; \
01448 FramingExPointer->FramingItem[0].BusType = KS_TYPE_DONT_CARE; \
01449 FramingExPointer->FramingItem[0].MemoryFlags = 0; \
01450 FramingExPointer->FramingItem[0].BusFlags = 0; \
01451 FramingExPointer->FramingItem[0].Flags = P_Flags; \
01452 FramingExPointer->FramingItem[0].Frames = P_Frames; \
01453 FramingExPointer->FramingItem[0].FileAlignment = P_Alignment; \
01454 FramingExPointer->FramingItem[0].MemoryTypeWeight = 0; \
01455 SetDontCareKsFramingRange(KsFramingRange); \
01456 SetKsFramingRangeWeighted(KsFramingRangeWeighted, \
01457 P_MinFrameSize,P_MaxFrameSize); \
01458 }
01459
01460 #define STATIC_KSEVENTSETID_StreamAllocator \
01461 0x75d95571L,0x073c,0x11d0,0xa1,0x61,0x00,0x20,0xaf,0xd1,0x56,0xe4
01462 DEFINE_GUIDSTRUCT("75d95571-073c-11d0-a161-0020afd156e4",KSEVENTSETID_StreamAllocator);
01463 #define KSEVENTSETID_StreamAllocator DEFINE_GUIDNAMED(KSEVENTSETID_StreamAllocator)
01464
01465 typedef enum {
01466 KSEVENT_STREAMALLOCATOR_INTERNAL_FREEFRAME,
01467 KSEVENT_STREAMALLOCATOR_FREEFRAME
01468 } KSEVENT_STREAMALLOCATOR;
01469
01470 #define STATIC_KSMETHODSETID_StreamAllocator \
01471 0xcf6e4341L,0xec87,0x11cf,0xa1,0x30,0x00,0x20,0xaf,0xd1,0x56,0xe4
01472 DEFINE_GUIDSTRUCT("cf6e4341-ec87-11cf-a130-0020afd156e4",KSMETHODSETID_StreamAllocator);
01473 #define KSMETHODSETID_StreamAllocator DEFINE_GUIDNAMED(KSMETHODSETID_StreamAllocator)
01474
01475 typedef enum {
01476 KSMETHOD_STREAMALLOCATOR_ALLOC,
01477 KSMETHOD_STREAMALLOCATOR_FREE
01478 } KSMETHOD_STREAMALLOCATOR;
01479
01480 #define DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_ALLOC(Handler) \
01481 DEFINE_KSMETHOD_ITEM( \
01482 KSMETHOD_STREAMALLOCATOR_ALLOC, \
01483 KSMETHOD_TYPE_WRITE, \
01484 (Handler), \
01485 sizeof(KSMETHOD), \
01486 sizeof(PVOID), \
01487 NULL)
01488
01489 #define DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_FREE(Handler) \
01490 DEFINE_KSMETHOD_ITEM( \
01491 KSMETHOD_STREAMALLOCATOR_FREE, \
01492 KSMETHOD_TYPE_READ, \
01493 (Handler), \
01494 sizeof(KSMETHOD), \
01495 sizeof(PVOID), \
01496 NULL)
01497
01498 #define DEFINE_KSMETHOD_ALLOCATORSET(AllocatorSet,MethodAlloc,MethodFree)\
01499 DEFINE_KSMETHOD_TABLE(AllocatorSet) { \
01500 DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_ALLOC(MethodAlloc), \
01501 DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_FREE(MethodFree) \
01502 }
01503
01504 #define STATIC_KSPROPSETID_StreamAllocator \
01505 0xcf6e4342L,0xec87,0x11cf,0xa1,0x30,0x00,0x20,0xaf,0xd1,0x56,0xe4
01506 DEFINE_GUIDSTRUCT("cf6e4342-ec87-11cf-a130-0020afd156e4",KSPROPSETID_StreamAllocator);
01507 #define KSPROPSETID_StreamAllocator DEFINE_GUIDNAMED(KSPROPSETID_StreamAllocator)
01508
01509 #if defined(_NTDDK_)
01510 typedef enum {
01511 KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE,
01512 KSPROPERTY_STREAMALLOCATOR_STATUS
01513 } KSPROPERTY_STREAMALLOCATOR;
01514
01515 #define DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_FUNCTIONTABLE(Handler) \
01516 DEFINE_KSPROPERTY_ITEM( \
01517 KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE,\
01518 (Handler), \
01519 sizeof(KSPROPERTY), \
01520 sizeof(KSSTREAMALLOCATOR_FUNCTIONTABLE),\
01521 NULL, NULL, 0, NULL, NULL, 0)
01522
01523 #define DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_STATUS(Handler) \
01524 DEFINE_KSPROPERTY_ITEM( \
01525 KSPROPERTY_STREAMALLOCATOR_STATUS, \
01526 (Handler), \
01527 sizeof(KSPROPERTY), \
01528 sizeof(KSSTREAMALLOCATOR_STATUS), \
01529 NULL, NULL, 0, NULL, NULL, 0)
01530
01531 #define DEFINE_KSPROPERTY_ALLOCATORSET(AllocatorSet,PropFunctionTable,PropStatus)\
01532 DEFINE_KSPROPERTY_TABLE(AllocatorSet) { \
01533 DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_STATUS(PropStatus), \
01534 DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_FUNCTIONTABLE(PropFunctionTable)\
01535 }
01536
01537 typedef NTSTATUS (*PFNALLOCATOR_ALLOCATEFRAME) (PFILE_OBJECT FileObject,
01538 PVOID *Frame);
01539 typedef VOID (*PFNALLOCATOR_FREEFRAME) (PFILE_OBJECT FileObject, PVOID Frame);
01540
01541 typedef struct {
01542 PFNALLOCATOR_ALLOCATEFRAME AllocateFrame;
01543 PFNALLOCATOR_FREEFRAME FreeFrame;
01544 } KSSTREAMALLOCATOR_FUNCTIONTABLE, *PKSSTREAMALLOCATOR_FUNCTIONTABLE;
01545 #endif
01546
01547 typedef struct {
01548 KSALLOCATOR_FRAMING Framing;
01549 ULONG AllocatedFrames;
01550 ULONG Reserved;
01551 } KSSTREAMALLOCATOR_STATUS,*PKSSTREAMALLOCATOR_STATUS;
01552
01553 typedef struct {
01554 KSALLOCATOR_FRAMING_EX Framing;
01555 ULONG AllocatedFrames;
01556 ULONG Reserved;
01557 } KSSTREAMALLOCATOR_STATUS_EX,*PKSSTREAMALLOCATOR_STATUS_EX;
01558
01559 #define KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT 0x00000001
01560 #define KSSTREAM_HEADER_OPTIONSF_PREROLL 0x00000002
01561 #define KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY 0x00000004
01562 #define KSSTREAM_HEADER_OPTIONSF_TYPECHANGED 0x00000008
01563 #define KSSTREAM_HEADER_OPTIONSF_TIMEVALID 0x00000010
01564 #define KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY 0x00000040
01565 #define KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE 0x00000080
01566 #define KSSTREAM_HEADER_OPTIONSF_DURATIONVALID 0x00000100
01567 #define KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM 0x00000200
01568 #define KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA 0x80000000
01569
01570 typedef struct {
01571 LONGLONG Time;
01572 ULONG Numerator;
01573 ULONG Denominator;
01574 } KSTIME,*PKSTIME;
01575
01576 typedef struct {
01577 ULONG Size;
01578 ULONG TypeSpecificFlags;
01579 KSTIME PresentationTime;
01580 LONGLONG Duration;
01581 ULONG FrameExtent;
01582 ULONG DataUsed;
01583 PVOID Data;
01584 ULONG OptionsFlags;
01585 #ifdef _WIN64
01586 ULONG Reserved;
01587 #endif
01588 } KSSTREAM_HEADER,*PKSSTREAM_HEADER;
01589
01590 #define STATIC_KSPROPSETID_StreamInterface \
01591 0x1fdd8ee1L,0x9cd3,0x11d0,0x82,0xaa,0x00,0x00,0xf8,0x22,0xfe,0x8a
01592 DEFINE_GUIDSTRUCT("1fdd8ee1-9cd3-11d0-82aa-0000f822fe8a",KSPROPSETID_StreamInterface);
01593 #define KSPROPSETID_StreamInterface DEFINE_GUIDNAMED(KSPROPSETID_StreamInterface)
01594
01595 typedef enum {
01596 KSPROPERTY_STREAMINTERFACE_HEADERSIZE
01597 } KSPROPERTY_STREAMINTERFACE;
01598
01599 #define DEFINE_KSPROPERTY_ITEM_STREAMINTERFACE_HEADERSIZE(GetHandler) \
01600 DEFINE_KSPROPERTY_ITEM( \
01601 KSPROPERTY_STREAMINTERFACE_HEADERSIZE, \
01602 (GetHandler), \
01603 sizeof(KSPROPERTY), \
01604 sizeof(ULONG), \
01605 NULL,NULL,0,NULL,NULL,0)
01606
01607 #define DEFINE_KSPROPERTY_STREAMINTERFACESET(StreamInterfaceSet,HeaderSizeHandler) \
01608 DEFINE_KSPROPERTY_TABLE(StreamInterfaceSet) { \
01609 DEFINE_KSPROPERTY_ITEM_STREAMINTERFACE_HEADERSIZE(HeaderSizeHandler)\
01610 }
01611
01612 #define STATIC_KSPROPSETID_Stream \
01613 0x65aaba60L,0x98ae,0x11cf,0xa1,0x0d,0x00,0x20,0xaf,0xd1,0x56,0xe4
01614 DEFINE_GUIDSTRUCT("65aaba60-98ae-11cf-a10d-0020afd156e4",KSPROPSETID_Stream);
01615 #define KSPROPSETID_Stream DEFINE_GUIDNAMED(KSPROPSETID_Stream)
01616
01617 typedef enum {
01618 KSPROPERTY_STREAM_ALLOCATOR,
01619 KSPROPERTY_STREAM_QUALITY,
01620 KSPROPERTY_STREAM_DEGRADATION,
01621 KSPROPERTY_STREAM_MASTERCLOCK,
01622 KSPROPERTY_STREAM_TIMEFORMAT,
01623 KSPROPERTY_STREAM_PRESENTATIONTIME,
01624 KSPROPERTY_STREAM_PRESENTATIONEXTENT,
01625 KSPROPERTY_STREAM_FRAMETIME,
01626 KSPROPERTY_STREAM_RATECAPABILITY,
01627 KSPROPERTY_STREAM_RATE,
01628 KSPROPERTY_STREAM_PIPE_ID
01629 } KSPROPERTY_STREAM;
01630
01631 #define DEFINE_KSPROPERTY_ITEM_STREAM_ALLOCATOR(GetHandler,SetHandler) \
01632 DEFINE_KSPROPERTY_ITEM( \
01633 KSPROPERTY_STREAM_ALLOCATOR, \
01634 (GetHandler), \
01635 sizeof(KSPROPERTY), \
01636 sizeof(HANDLE), \
01637 (SetHandler), \
01638 NULL, 0, NULL, NULL, 0)
01639
01640 #define DEFINE_KSPROPERTY_ITEM_STREAM_QUALITY(Handler) \
01641 DEFINE_KSPROPERTY_ITEM( \
01642 KSPROPERTY_STREAM_QUALITY, \
01643 (Handler), \
01644 sizeof(KSPROPERTY), \
01645 sizeof(KSQUALITY_MANAGER), \
01646 NULL, NULL, 0, NULL, NULL, 0)
01647
01648 #define DEFINE_KSPROPERTY_ITEM_STREAM_DEGRADATION(GetHandler,SetHandler)\
01649 DEFINE_KSPROPERTY_ITEM( \
01650 KSPROPERTY_STREAM_DEGRADATION, \
01651 (GetHandler), \
01652 sizeof(KSPROPERTY), \
01653 0, \
01654 (SetHandler), \
01655 NULL, 0, NULL, NULL, 0)
01656
01657 #define DEFINE_KSPROPERTY_ITEM_STREAM_MASTERCLOCK(GetHandler,SetHandler)\
01658 DEFINE_KSPROPERTY_ITEM( \
01659 KSPROPERTY_STREAM_MASTERCLOCK, \
01660 (GetHandler), \
01661 sizeof(KSPROPERTY), \
01662 sizeof(HANDLE), \
01663 (SetHandler), \
01664 NULL, 0, NULL, NULL, 0)
01665
01666 #define DEFINE_KSPROPERTY_ITEM_STREAM_TIMEFORMAT(Handler) \
01667 DEFINE_KSPROPERTY_ITEM( \
01668 KSPROPERTY_STREAM_TIMEFORMAT, \
01669 (Handler), \
01670 sizeof(KSPROPERTY), \
01671 sizeof(GUID), \
01672 NULL, NULL, 0, NULL, NULL, 0)
01673
01674 #define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONTIME(GetHandler,SetHandler)\
01675 DEFINE_KSPROPERTY_ITEM( \
01676 KSPROPERTY_STREAM_PRESENTATIONTIME, \
01677 (GetHandler), \
01678 sizeof(KSPROPERTY), \
01679 sizeof(KSTIME), \
01680 (SetHandler), \
01681 NULL, 0, NULL, NULL, 0)
01682
01683 #define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONEXTENT(Handler) \
01684 DEFINE_KSPROPERTY_ITEM( \
01685 KSPROPERTY_STREAM_PRESENTATIONEXTENT, \
01686 (Handler), \
01687 sizeof(KSPROPERTY), \
01688 sizeof(LONGLONG), \
01689 NULL, NULL, 0, NULL, NULL, 0)
01690
01691 #define DEFINE_KSPROPERTY_ITEM_STREAM_FRAMETIME(Handler) \
01692 DEFINE_KSPROPERTY_ITEM( \
01693 KSPROPERTY_STREAM_FRAMETIME, \
01694 (Handler), \
01695 sizeof(KSPROPERTY), \
01696 sizeof(KSFRAMETIME), \
01697 NULL, NULL, 0, NULL, NULL, 0)
01698
01699 #define DEFINE_KSPROPERTY_ITEM_STREAM_RATECAPABILITY(Handler) \
01700 DEFINE_KSPROPERTY_ITEM( \
01701 KSPROPERTY_STREAM_RATECAPABILITY, \
01702 (Handler), \
01703 sizeof(KSRATE_CAPABILITY), \
01704 sizeof(KSRATE), \
01705 NULL, NULL, 0, NULL, NULL, 0)
01706
01707 #define DEFINE_KSPROPERTY_ITEM_STREAM_RATE(GetHandler,SetHandler) \
01708 DEFINE_KSPROPERTY_ITEM( \
01709 KSPROPERTY_STREAM_RATE, \
01710 (GetHandler), \
01711 sizeof(KSPROPERTY), \
01712 sizeof(KSRATE), \
01713 (SetHandler), \
01714 NULL, 0, NULL, NULL, 0)
01715
01716 #define DEFINE_KSPROPERTY_ITEM_STREAM_PIPE_ID(GetHandler,SetHandler) \
01717 DEFINE_KSPROPERTY_ITEM( \
01718 KSPROPERTY_STREAM_PIPE_ID, \
01719 (GetHandler), \
01720 sizeof(KSPROPERTY), \
01721 sizeof(HANDLE), \
01722 (SetHandler), \
01723 NULL, 0, NULL, NULL, 0)
01724
01725 typedef struct {
01726 HANDLE QualityManager;
01727 PVOID Context;
01728 } KSQUALITY_MANAGER,*PKSQUALITY_MANAGER;
01729
01730 typedef struct {
01731 LONGLONG Duration;
01732 ULONG FrameFlags;
01733 ULONG Reserved;
01734 } KSFRAMETIME,*PKSFRAMETIME;
01735
01736 #define KSFRAMETIME_VARIABLESIZE 0x00000001
01737
01738 typedef struct {
01739 LONGLONG PresentationStart;
01740 LONGLONG Duration;
01741 KSPIN_INTERFACE Interface;
01742 LONG Rate;
01743 ULONG Flags;
01744 } KSRATE,*PKSRATE;
01745
01746 #define KSRATE_NOPRESENTATIONSTART 0x00000001
01747 #define KSRATE_NOPRESENTATIONDURATION 0x00000002
01748
01749 typedef struct {
01750 KSPROPERTY Property;
01751 KSRATE Rate;
01752 } KSRATE_CAPABILITY,*PKSRATE_CAPABILITY;
01753
01754 #define STATIC_KSPROPSETID_Clock \
01755 0xDF12A4C0L,0xAC17,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
01756 DEFINE_GUIDSTRUCT("DF12A4C0-AC17-11CF-A5D6-28DB04C10000",KSPROPSETID_Clock);
01757 #define KSPROPSETID_Clock DEFINE_GUIDNAMED(KSPROPSETID_Clock)
01758
01759 #define NANOSECONDS 10000000
01760 #define KSCONVERT_PERFORMANCE_TIME(Frequency,PerformanceTime) \
01761 ((((ULONGLONG)(ULONG)(PerformanceTime).HighPart *NANOSECONDS / (Frequency)) << 32) + \
01762 ((((((ULONGLONG)(ULONG)(PerformanceTime).HighPart *NANOSECONDS) % (Frequency)) << 32) +\
01763 ((ULONGLONG)(PerformanceTime).LowPart *NANOSECONDS)) / (Frequency)))
01764
01765 typedef struct {
01766 ULONG CreateFlags;
01767 } KSCLOCK_CREATE,*PKSCLOCK_CREATE;
01768
01769 typedef struct {
01770 LONGLONG Time;
01771 LONGLONG SystemTime;
01772 } KSCORRELATED_TIME,*PKSCORRELATED_TIME;
01773
01774 typedef struct {
01775 LONGLONG Granularity;
01776 LONGLONG Error;
01777 } KSRESOLUTION,*PKSRESOLUTION;
01778
01779 typedef enum {
01780 KSPROPERTY_CLOCK_TIME,
01781 KSPROPERTY_CLOCK_PHYSICALTIME,
01782 KSPROPERTY_CLOCK_CORRELATEDTIME,
01783 KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME,
01784 KSPROPERTY_CLOCK_RESOLUTION,
01785 KSPROPERTY_CLOCK_STATE,
01786 #if defined(_NTDDK_)
01787 KSPROPERTY_CLOCK_FUNCTIONTABLE
01788 #endif
01789 } KSPROPERTY_CLOCK;
01790
01791 #if defined(_NTDDK_)
01792 typedef LONGLONG (FASTCALL *PFNKSCLOCK_GETTIME)(PFILE_OBJECT FileObject);
01793 typedef LONGLONG (FASTCALL *PFNKSCLOCK_CORRELATEDTIME)(PFILE_OBJECT FileObject,
01794 PLONGLONG SystemTime);
01795
01796 typedef struct {
01797 PFNKSCLOCK_GETTIME GetTime;
01798 PFNKSCLOCK_GETTIME GetPhysicalTime;
01799 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedTime;
01800 PFNKSCLOCK_CORRELATEDTIME GetCorrelatedPhysicalTime;
01801 } KSCLOCK_FUNCTIONTABLE, *PKSCLOCK_FUNCTIONTABLE;
01802
01803 typedef BOOLEAN (*PFNKSSETTIMER)(PVOID Context, PKTIMER Timer,
01804 LARGE_INTEGER DueTime, PKDPC Dpc);
01805 typedef BOOLEAN (*PFNKSCANCELTIMER) (PVOID Context, PKTIMER Timer);
01806 typedef LONGLONG (FASTCALL *PFNKSCORRELATEDTIME)(PVOID Context,
01807 PLONGLONG SystemTime);
01808
01809 typedef PVOID PKSDEFAULTCLOCK;
01810
01811 #define DEFINE_KSPROPERTY_ITEM_CLOCK_TIME(Handler) \
01812 DEFINE_KSPROPERTY_ITEM( \
01813 KSPROPERTY_CLOCK_TIME, \
01814 (Handler), \
01815 sizeof(KSPROPERTY), sizeof(LONGLONG), \
01816 NULL, NULL, 0, NULL, NULL, 0)
01817
01818 #define DEFINE_KSPROPERTY_ITEM_CLOCK_PHYSICALTIME(Handler) \
01819 DEFINE_KSPROPERTY_ITEM( \
01820 KSPROPERTY_CLOCK_PHYSICALTIME, \
01821 (Handler), \
01822 sizeof(KSPROPERTY), sizeof(LONGLONG), \
01823 NULL, NULL, 0, NULL, NULL, 0)
01824
01825 #define DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDTIME(Handler) \
01826 DEFINE_KSPROPERTY_ITEM( \
01827 KSPROPERTY_CLOCK_CORRELATEDTIME, \
01828 (Handler), \
01829 sizeof(KSPROPERTY), \
01830 sizeof(KSCORRELATED_TIME), \
01831 NULL, NULL, 0, NULL, NULL, 0)
01832
01833 #define DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDPHYSICALTIME(Handler) \
01834 DEFINE_KSPROPERTY_ITEM( \
01835 KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME,\
01836 (Handler), \
01837 sizeof(KSPROPERTY), \
01838 sizeof(KSCORRELATED_TIME), \
01839 NULL, NULL, 0, NULL, NULL, 0)
01840
01841 #define DEFINE_KSPROPERTY_ITEM_CLOCK_RESOLUTION(Handler) \
01842 DEFINE_KSPROPERTY_ITEM( \
01843 KSPROPERTY_CLOCK_RESOLUTION, \
01844 (Handler), \
01845 sizeof(KSPROPERTY),sizeof(KSRESOLUTION),\
01846 NULL, NULL, 0, NULL, NULL, 0)
01847
01848 #define DEFINE_KSPROPERTY_ITEM_CLOCK_STATE(Handler) \
01849 DEFINE_KSPROPERTY_ITEM( \
01850 KSPROPERTY_CLOCK_STATE, \
01851 (Handler), \
01852 sizeof(KSPROPERTY), sizeof(KSSTATE), \
01853 NULL, NULL, 0, NULL, NULL, 0)
01854
01855 #define DEFINE_KSPROPERTY_ITEM_CLOCK_FUNCTIONTABLE(Handler) \
01856 DEFINE_KSPROPERTY_ITEM( \
01857 KSPROPERTY_CLOCK_FUNCTIONTABLE, \
01858 (Handler), \
01859 sizeof(KSPROPERTY), \
01860 sizeof(KSCLOCK_FUNCTIONTABLE), \
01861 NULL, NULL, 0, NULL, NULL, 0)
01862
01863 #define DEFINE_KSPROPERTY_CLOCKSET(ClockSet,PropTime,PropPhysicalTime,PropCorrelatedTime,PropCorrelatedPhysicalTime,PropResolution,PropState,PropFunctionTable)\
01864 DEFINE_KSPROPERTY_TABLE(ClockSet) { \
01865 DEFINE_KSPROPERTY_ITEM_CLOCK_TIME(PropTime), \
01866 DEFINE_KSPROPERTY_ITEM_CLOCK_PHYSICALTIME(PropPhysicalTime), \
01867 DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDTIME(PropCorrelatedTime),\
01868 DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDPHYSICALTIME(PropCorrelatedPhysicalTime),\
01869 DEFINE_KSPROPERTY_ITEM_CLOCK_RESOLUTION(PropResolution), \
01870 DEFINE_KSPROPERTY_ITEM_CLOCK_STATE(PropState), \
01871 DEFINE_KSPROPERTY_ITEM_CLOCK_FUNCTIONTABLE(PropFunctionTable), \
01872 }
01873 #endif
01874
01875 #define STATIC_KSEVENTSETID_Clock \
01876 0x364D8E20L,0x62C7,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
01877 DEFINE_GUIDSTRUCT("364D8E20-62C7-11CF-A5D6-28DB04C10000",KSEVENTSETID_Clock);
01878 #define KSEVENTSETID_Clock DEFINE_GUIDNAMED(KSEVENTSETID_Clock)
01879
01880 typedef enum {
01881 KSEVENT_CLOCK_INTERVAL_MARK,
01882 KSEVENT_CLOCK_POSITION_MARK
01883 } KSEVENT_CLOCK_POSITION;
01884
01885 #define STATIC_KSEVENTSETID_Connection \
01886 0x7f4bcbe0L,0x9ea5,0x11cf,0xa5,0xd6,0x28,0xdb,0x04,0xc1,0x00,0x00
01887 DEFINE_GUIDSTRUCT("7f4bcbe0-9ea5-11cf-a5d6-28db04c10000",KSEVENTSETID_Connection);
01888 #define KSEVENTSETID_Connection DEFINE_GUIDNAMED(KSEVENTSETID_Connection)
01889
01890 typedef enum {
01891 KSEVENT_CONNECTION_POSITIONUPDATE,
01892 KSEVENT_CONNECTION_DATADISCONTINUITY,
01893 KSEVENT_CONNECTION_TIMEDISCONTINUITY,
01894 KSEVENT_CONNECTION_PRIORITY,
01895 KSEVENT_CONNECTION_ENDOFSTREAM
01896 } KSEVENT_CONNECTION;
01897
01898 typedef struct {
01899 PVOID Context;
01900 ULONG Proportion;
01901 LONGLONG DeltaTime;
01902 } KSQUALITY,*PKSQUALITY;
01903
01904 typedef struct {
01905 PVOID Context;
01906 ULONG Status;
01907 } KSERROR,*PKSERROR;
01908
01909 typedef KSIDENTIFIER KSDEGRADE,*PKSDEGRADE;
01910
01911 #define STATIC_KSDEGRADESETID_Standard \
01912 0x9F564180L,0x704C,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00
01913 DEFINE_GUIDSTRUCT("9F564180-704C-11D0-A5D6-28DB04C10000",KSDEGRADESETID_Standard);
01914 #define KSDEGRADESETID_Standard DEFINE_GUIDNAMED(KSDEGRADESETID_Standard)
01915
01916 typedef enum {
01917 KSDEGRADE_STANDARD_SAMPLE,
01918 KSDEGRADE_STANDARD_QUALITY,
01919 KSDEGRADE_STANDARD_COMPUTATION,
01920 KSDEGRADE_STANDARD_SKIP
01921 } KSDEGRADE_STANDARD;
01922
01923 #if defined(_NTDDK_)
01924
01925 #define KSPROBE_STREAMREAD 0x00000000
01926 #define KSPROBE_STREAMWRITE 0x00000001
01927 #define KSPROBE_ALLOCATEMDL 0x00000010
01928 #define KSPROBE_PROBEANDLOCK 0x00000020
01929 #define KSPROBE_SYSTEMADDRESS 0x00000040
01930 #define KSPROBE_MODIFY 0x00000200
01931 #define KSPROBE_STREAMWRITEMODIFY (KSPROBE_MODIFY | KSPROBE_STREAMWRITE)
01932 #define KSPROBE_ALLOWFORMATCHANGE 0x00000080
01933 #define KSSTREAM_READ KSPROBE_STREAMREAD
01934 #define KSSTREAM_WRITE KSPROBE_STREAMWRITE
01935 #define KSSTREAM_PAGED_DATA 0x00000000
01936 #define KSSTREAM_NONPAGED_DATA 0x00000100
01937 #define KSSTREAM_SYNCHRONOUS 0x00001000
01938 #define KSSTREAM_FAILUREEXCEPTION 0x00002000
01939
01940 typedef NTSTATUS (*PFNKSCONTEXT_DISPATCH)(PVOID Context, PIRP Irp);
01941 typedef NTSTATUS (*PFNKSHANDLER)(PIRP Irp, PKSIDENTIFIER Request, PVOID Data);
01942 typedef BOOLEAN (*PFNKSFASTHANDLER)(PFILE_OBJECT FileObject,
01943 PKSIDENTIFIER Request,
01944 ULONG RequestLength, PVOID Data,
01945 ULONG DataLength,
01946 PIO_STATUS_BLOCK IoStatus);
01947 typedef NTSTATUS (*PFNKSALLOCATOR) (PIRP Irp, ULONG BufferSize,
01948 BOOLEAN InputOperation);
01949
01950 typedef struct {
01951 KSPROPERTY_MEMBERSHEADER MembersHeader;
01952 const VOID *Members;
01953 } KSPROPERTY_MEMBERSLIST, *PKSPROPERTY_MEMBERSLIST;
01954
01955 typedef struct {
01956 KSIDENTIFIER PropTypeSet;
01957 ULONG MembersListCount;
01958 const KSPROPERTY_MEMBERSLIST *MembersList;
01959 } KSPROPERTY_VALUES, *PKSPROPERTY_VALUES;
01960
01961 #define DEFINE_KSPROPERTY_TABLE(tablename) \
01962 const KSPROPERTY_ITEM tablename[] =
01963
01964 #define DEFINE_KSPROPERTY_ITEM(PropertyId,GetHandler,MinProperty,MinData,SetHandler,Values,RelationsCount,Relations,SupportHandler,SerializedSize)\
01965 { \
01966 PropertyId, (PFNKSHANDLER)GetHandler, \
01967 MinProperty, MinData, \
01968 (PFNKSHANDLER)SetHandler, \
01969 (PKSPROPERTY_VALUES)Values, RelationsCount, \
01970 (PKSPROPERTY)Relations, \
01971 (PFNKSHANDLER)SupportHandler, \
01972 (ULONG)SerializedSize \
01973 }
01974
01975 typedef struct {
01976 ULONG PropertyId;
01977 __MINGW_EXTENSION union {
01978 PFNKSHANDLER GetPropertyHandler;
01979 BOOLEAN GetSupported;
01980 };
01981 ULONG MinProperty;
01982 ULONG MinData;
01983 __MINGW_EXTENSION union {
01984 PFNKSHANDLER SetPropertyHandler;
01985 BOOLEAN SetSupported;
01986 };
01987 const KSPROPERTY_VALUES *Values;
01988 ULONG RelationsCount;
01989 const KSPROPERTY *Relations;
01990 PFNKSHANDLER SupportHandler;
01991 ULONG SerializedSize;
01992 } KSPROPERTY_ITEM, *PKSPROPERTY_ITEM;
01993
01994 #define DEFINE_KSFASTPROPERTY_ITEM(PropertyId, GetHandler, SetHandler) \
01995 { \
01996 PropertyId, (PFNKSFASTHANDLER)GetHandler, \
01997 (PFNKSFASTHANDLER)SetHandler, 0 \
01998 }
01999
02000 typedef struct {
02001 ULONG PropertyId;
02002 __MINGW_EXTENSION union {
02003 PFNKSFASTHANDLER GetPropertyHandler;
02004 BOOLEAN GetSupported;
02005 };
02006 __MINGW_EXTENSION union {
02007 PFNKSFASTHANDLER SetPropertyHandler;
02008 BOOLEAN SetSupported;
02009 };
02010 ULONG Reserved;
02011 } KSFASTPROPERTY_ITEM, *PKSFASTPROPERTY_ITEM;
02012
02013 #define DEFINE_KSPROPERTY_SET(Set,PropertiesCount,PropertyItem,FastIoCount,FastIoTable)\
02014 { \
02015 Set, \
02016 PropertiesCount, PropertyItem, \
02017 FastIoCount, FastIoTable \
02018 }
02019
02020 #define DEFINE_KSPROPERTY_SET_TABLE(tablename) \
02021 const KSPROPERTY_SET tablename[] =
02022
02023 typedef struct {
02024 const GUID *Set;
02025 ULONG PropertiesCount;
02026 const KSPROPERTY_ITEM *PropertyItem;
02027 ULONG FastIoCount;
02028 const KSFASTPROPERTY_ITEM *FastIoTable;
02029 } KSPROPERTY_SET, *PKSPROPERTY_SET;
02030
02031 #define DEFINE_KSMETHOD_TABLE(tablename) \
02032 const KSMETHOD_ITEM tablename[] =
02033
02034 #define DEFINE_KSMETHOD_ITEM(MethodId,Flags,MethodHandler,MinMethod,MinData,SupportHandler)\
02035 { \
02036 MethodId, (PFNKSHANDLER)MethodHandler, \
02037 MinMethod, MinData, \
02038 SupportHandler, Flags \
02039 }
02040
02041 typedef struct {
02042 ULONG MethodId;
02043 __MINGW_EXTENSION union {
02044 PFNKSHANDLER MethodHandler;
02045 BOOLEAN MethodSupported;
02046 };
02047 ULONG MinMethod;
02048 ULONG MinData;
02049 PFNKSHANDLER SupportHandler;
02050 ULONG Flags;
02051 } KSMETHOD_ITEM, *PKSMETHOD_ITEM;
02052
02053 #define DEFINE_KSFASTMETHOD_ITEM(MethodId,MethodHandler) \
02054 { \
02055 MethodId, (PFNKSFASTHANDLER)MethodHandler \
02056 }
02057
02058 typedef struct {
02059 ULONG MethodId;
02060 __MINGW_EXTENSION union {
02061 PFNKSFASTHANDLER MethodHandler;
02062 BOOLEAN MethodSupported;
02063 };
02064 } KSFASTMETHOD_ITEM, *PKSFASTMETHOD_ITEM;
02065
02066 #define DEFINE_KSMETHOD_SET(Set,MethodsCount,MethodItem,FastIoCount,FastIoTable)\
02067 { \
02068 Set, \
02069 MethodsCount, MethodItem, \
02070 FastIoCount, FastIoTable \
02071 }
02072
02073 #define DEFINE_KSMETHOD_SET_TABLE(tablename) \
02074 const KSMETHOD_SET tablename[] =
02075
02076 typedef struct {
02077 const GUID *Set;
02078 ULONG MethodsCount;
02079 const KSMETHOD_ITEM *MethodItem;
02080 ULONG FastIoCount;
02081 const KSFASTMETHOD_ITEM *FastIoTable;
02082 } KSMETHOD_SET, *PKSMETHOD_SET;
02083
02084 typedef struct _KSEVENT_ENTRY KSEVENT_ENTRY, *PKSEVENT_ENTRY;
02085 typedef NTSTATUS (*PFNKSADDEVENT)(PIRP Irp, PKSEVENTDATA EventData,
02086 struct _KSEVENT_ENTRY* EventEntry);
02087 typedef VOID (*PFNKSREMOVEEVENT)(PFILE_OBJECT FileObject,
02088 struct _KSEVENT_ENTRY* EventEntry);
02089
02090 #define DEFINE_KSEVENT_TABLE(tablename) \
02091 const KSEVENT_ITEM tablename[] =
02092
02093 #define DEFINE_KSEVENT_ITEM(EventId,DataInput,ExtraEntryData,AddHandler,RemoveHandler,SupportHandler)\
02094 { \
02095 EventId, DataInput, ExtraEntryData, \
02096 AddHandler, RemoveHandler, SupportHandler \
02097 }
02098
02099 typedef struct {
02100 ULONG EventId;
02101 ULONG DataInput;
02102 ULONG ExtraEntryData;
02103 PFNKSADDEVENT AddHandler;
02104 PFNKSREMOVEEVENT RemoveHandler;
02105 PFNKSHANDLER SupportHandler;
02106 } KSEVENT_ITEM, *PKSEVENT_ITEM;
02107
02108 #define DEFINE_KSEVENT_SET(Set,EventsCount,EventItem) \
02109 { \
02110 Set, EventsCount, EventItem \
02111 }
02112
02113 #define DEFINE_KSEVENT_SET_TABLE(tablename) \
02114 const KSEVENT_SET tablename[] =
02115
02116 typedef struct {
02117 const GUID *Set;
02118 ULONG EventsCount;
02119 const KSEVENT_ITEM *EventItem;
02120 } KSEVENT_SET, *PKSEVENT_SET;
02121
02122 typedef struct {
02123 KDPC Dpc;
02124 ULONG ReferenceCount;
02125 KSPIN_LOCK AccessLock;
02126 } KSDPC_ITEM, *PKSDPC_ITEM;
02127
02128 typedef struct {
02129 KSDPC_ITEM DpcItem;
02130 LIST_ENTRY BufferList;
02131 } KSBUFFER_ITEM, *PKSBUFFER_ITEM;
02132
02133
02134 #define KSEVENT_ENTRY_DELETED 1
02135 #define KSEVENT_ENTRY_ONESHOT 2
02136 #define KSEVENT_ENTRY_BUFFERED 4
02137
02138 struct _KSEVENT_ENTRY {
02139 LIST_ENTRY ListEntry;
02140 PVOID Object;
02141 __MINGW_EXTENSION union {
02142 PKSDPC_ITEM DpcItem;
02143 PKSBUFFER_ITEM BufferItem;
02144 };
02145 PKSEVENTDATA EventData;
02146 ULONG NotificationType;
02147 const KSEVENT_SET *EventSet;
02148 const KSEVENT_ITEM *EventItem;
02149 PFILE_OBJECT FileObject;
02150 ULONG SemaphoreAdjustment;
02151 ULONG Reserved;
02152 ULONG Flags;
02153 };
02154
02155 typedef enum {
02156 KSEVENTS_NONE,
02157 KSEVENTS_SPINLOCK,
02158 KSEVENTS_MUTEX,
02159 KSEVENTS_FMUTEX,
02160 KSEVENTS_FMUTEXUNSAFE,
02161 KSEVENTS_INTERRUPT,
02162 KSEVENTS_ERESOURCE
02163 } KSEVENTS_LOCKTYPE;
02164
02165 #define KSDISPATCH_FASTIO 0x80000000
02166
02167 typedef struct {
02168 PDRIVER_DISPATCH Create;
02169 PVOID Context;
02170 UNICODE_STRING ObjectClass;
02171 PSECURITY_DESCRIPTOR SecurityDescriptor;
02172 ULONG Flags;
02173 } KSOBJECT_CREATE_ITEM, *PKSOBJECT_CREATE_ITEM;
02174
02175 typedef VOID (*PFNKSITEMFREECALLBACK)(PKSOBJECT_CREATE_ITEM CreateItem);
02176
02177 #define KSCREATE_ITEM_SECURITYCHANGED 0x00000001
02178 #define KSCREATE_ITEM_WILDCARD 0x00000002
02179 #define KSCREATE_ITEM_NOPARAMETERS 0x00000004
02180 #define KSCREATE_ITEM_FREEONSTOP 0x00000008
02181
02182 #define DEFINE_KSCREATE_DISPATCH_TABLE( tablename ) \
02183 KSOBJECT_CREATE_ITEM tablename[] =
02184
02185 #define DEFINE_KSCREATE_ITEM(DispatchCreate,TypeName,Context) \
02186 { \
02187 (DispatchCreate), (PVOID)(Context), \
02188 { \
02189 sizeof(TypeName) - sizeof(UNICODE_NULL),\
02190 sizeof(TypeName), \
02191 (PWCHAR)(TypeName) \
02192 }, \
02193 NULL, 0 \
02194 }
02195
02196 #define DEFINE_KSCREATE_ITEMEX(DispatchCreate,TypeName,Context,Flags) \
02197 { \
02198 (DispatchCreate), \
02199 (PVOID)(Context), \
02200 { \
02201 sizeof(TypeName) - sizeof(UNICODE_NULL),\
02202 sizeof(TypeName), \
02203 (PWCHAR)(TypeName) \
02204 }, \
02205 NULL, (Flags) \
02206 }
02207
02208 #define DEFINE_KSCREATE_ITEMNULL(DispatchCreate,Context) \
02209 { \
02210 DispatchCreate, Context, \
02211 { \
02212 0, 0, NULL, \
02213 }, \
02214 NULL, 0 \
02215 }
02216
02217 typedef struct {
02218 ULONG CreateItemsCount;
02219 PKSOBJECT_CREATE_ITEM CreateItemsList;
02220 } KSOBJECT_CREATE, *PKSOBJECT_CREATE;
02221
02222 typedef struct {
02223 PDRIVER_DISPATCH DeviceIoControl;
02224 PDRIVER_DISPATCH Read;
02225 PDRIVER_DISPATCH Write;
02226 PDRIVER_DISPATCH Flush;
02227 PDRIVER_DISPATCH Close;
02228 PDRIVER_DISPATCH QuerySecurity;
02229 PDRIVER_DISPATCH SetSecurity;
02230 PFAST_IO_DEVICE_CONTROL FastDeviceIoControl;
02231 PFAST_IO_READ FastRead;
02232 PFAST_IO_WRITE FastWrite;
02233 } KSDISPATCH_TABLE, *PKSDISPATCH_TABLE;
02234
02235 #define DEFINE_KSDISPATCH_TABLE(tablename,DeviceIoControl,Read,Write,Flush,Close,QuerySecurity,SetSecurity,FastDeviceIoControl,FastRead,FastWrite)\
02236 const KSDISPATCH_TABLE tablename = \
02237 { \
02238 DeviceIoControl, \
02239 Read, \
02240 Write, \
02241 Flush, \
02242 Close, \
02243 QuerySecurity, \
02244 SetSecurity, \
02245 FastDeviceIoControl, \
02246 FastRead, \
02247 FastWrite, \
02248 }
02249
02250 #define KSCREATE_ITEM_IRP_STORAGE(Irp) \
02251 (*(PKSOBJECT_CREATE_ITEM *)&(Irp)->Tail.Overlay.DriverContext[0])
02252 #define KSEVENT_SET_IRP_STORAGE(Irp) \
02253 (*(const KSEVENT_SET **)&(Irp)->Tail.Overlay.DriverContext[0])
02254 #define KSEVENT_ITEM_IRP_STORAGE(Irp) \
02255 (*(const KSEVENT_ITEM **)&(Irp)->Tail.Overlay.DriverContext[3])
02256 #define KSEVENT_ENTRY_IRP_STORAGE(Irp) \
02257 (*(PKSEVENT_ENTRY *)&(Irp)->Tail.Overlay.DriverContext[0])
02258 #define KSMETHOD_SET_IRP_STORAGE(Irp) \
02259 (*(const KSMETHOD_SET **)&(Irp)->Tail.Overlay.DriverContext[0])
02260 #define KSMETHOD_ITEM_IRP_STORAGE(Irp) \
02261 (*(const KSMETHOD_ITEM **)&(Irp)->Tail.Overlay.DriverContext[3])
02262 #define KSMETHOD_TYPE_IRP_STORAGE(Irp) \
02263 (*(ULONG_PTR *)(&(Irp)->Tail.Overlay.DriverContext[2]))
02264 #define KSQUEUE_SPINLOCK_IRP_STORAGE(Irp) \
02265 (*(PKSPIN_LOCK *)&(Irp)->Tail.Overlay.DriverContext[1])
02266 #define KSPROPERTY_SET_IRP_STORAGE(Irp) \
02267 (*(const KSPROPERTY_SET **)&(Irp)->Tail.Overlay.DriverContext[0])
02268 #define KSPROPERTY_ITEM_IRP_STORAGE(Irp) \
02269 (*(const KSPROPERTY_ITEM **)&(Irp)->Tail.Overlay.DriverContext[3])
02270 #define KSPROPERTY_ATTRIBUTES_IRP_STORAGE(Irp) \
02271 (*(PKSATTRIBUTE_LIST *)&(Irp)->Tail.Overlay.DriverContext[2])
02272
02273 typedef PVOID KSDEVICE_HEADER, KSOBJECT_HEADER;
02274
02275 typedef enum {
02276 KsInvokeOnSuccess = 1,
02277 KsInvokeOnError = 2,
02278 KsInvokeOnCancel = 4
02279 } KSCOMPLETION_INVOCATION;
02280
02281 typedef enum {
02282 KsListEntryTail,
02283 KsListEntryHead
02284 } KSLIST_ENTRY_LOCATION;
02285
02286 typedef enum {
02287 KsAcquireOnly,
02288 KsAcquireAndRemove,
02289 KsAcquireOnlySingleItem,
02290 KsAcquireAndRemoveOnlySingleItem
02291 } KSIRP_REMOVAL_OPERATION;
02292
02293 typedef enum {
02294 KsStackCopyToNewLocation,
02295 KsStackReuseCurrentLocation,
02296 KsStackUseNewLocation
02297 } KSSTACK_USE;
02298
02299 typedef enum {
02300 KSTARGET_STATE_DISABLED,
02301 KSTARGET_STATE_ENABLED
02302 } KSTARGET_STATE;
02303
02304 typedef NTSTATUS (*PFNKSIRPLISTCALLBACK)(PIRP Irp, PVOID Context);
02305 typedef VOID (*PFNREFERENCEDEVICEOBJECT)(PVOID Context);
02306 typedef VOID (*PFNDEREFERENCEDEVICEOBJECT)(PVOID Context);
02307 typedef NTSTATUS (*PFNQUERYREFERENCESTRING)(PVOID Context, PWCHAR *String);
02308
02309 #define BUS_INTERFACE_REFERENCE_VERSION 0x100
02310
02311 typedef struct {
02312 INTERFACE Interface;
02313
02314 PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject;
02315 PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject;
02316 PFNQUERYREFERENCESTRING QueryReferenceString;
02317 } BUS_INTERFACE_REFERENCE, *PBUS_INTERFACE_REFERENCE;
02318
02319 #define STATIC_REFERENCE_BUS_INTERFACE STATIC_KSMEDIUMSETID_Standard
02320 #define REFERENCE_BUS_INTERFACE KSMEDIUMSETID_Standard
02321
02322 #endif
02323
02324 #ifndef PACK_PRAGMAS_NOT_SUPPORTED
02325 #include <pshpack1.h>
02326 #endif
02327
02328 typedef struct {
02329 GUID PropertySet;
02330 ULONG Count;
02331 } KSPROPERTY_SERIALHDR,*PKSPROPERTY_SERIALHDR;
02332
02333 #ifndef PACK_PRAGMAS_NOT_SUPPORTED
02334 #include <poppack.h>
02335 #endif
02336
02337 typedef struct {
02338 KSIDENTIFIER PropTypeSet;
02339 ULONG Id;
02340 ULONG PropertyLength;
02341 } KSPROPERTY_SERIAL,*PKSPROPERTY_SERIAL;
02342
02343
02344 #if defined(_NTDDK_)
02345
02346 #define IOCTL_KS_HANDSHAKE \
02347 CTL_CODE(FILE_DEVICE_KS, 0x007, METHOD_NEITHER, FILE_ANY_ACCESS)
02348
02349 typedef struct {
02350 GUID ProtocolId;
02351 PVOID Argument1;
02352 PVOID Argument2;
02353 } KSHANDSHAKE, *PKSHANDSHAKE;
02354
02355 typedef struct _KSGATE KSGATE, *PKSGATE;
02356
02357 struct _KSGATE {
02358 LONG Count;
02359 PKSGATE NextGate;
02360 };
02361
02362 typedef PVOID KSOBJECT_BAG;
02363
02364
02365 typedef BOOLEAN (*PFNKSGENERATEEVENTCALLBACK)(PVOID Context,
02366 PKSEVENT_ENTRY EventEntry);
02367
02368 typedef NTSTATUS (*PFNKSDEVICECREATE)(PKSDEVICE Device);
02369
02370 typedef NTSTATUS (*PFNKSDEVICEPNPSTART)(PKSDEVICE Device,PIRP Irp,
02371 PCM_RESOURCE_LIST TranslatedResourceList,
02372 PCM_RESOURCE_LIST UntranslatedResourceList);
02373
02374 typedef NTSTATUS (*PFNKSDEVICE)(PKSDEVICE Device);
02375
02376 typedef NTSTATUS (*PFNKSDEVICEIRP)(PKSDEVICE Device,PIRP Irp);
02377
02378 typedef void (*PFNKSDEVICEIRPVOID)(PKSDEVICE Device,PIRP Irp);
02379
02380 typedef NTSTATUS (*PFNKSDEVICEQUERYCAPABILITIES)(PKSDEVICE Device,PIRP Irp,
02381 PDEVICE_CAPABILITIES Capabilities);
02382
02383 typedef NTSTATUS (*PFNKSDEVICEQUERYPOWER)(PKSDEVICE Device,PIRP Irp,
02384 DEVICE_POWER_STATE DeviceTo,
02385 DEVICE_POWER_STATE DeviceFrom,
02386 SYSTEM_POWER_STATE SystemTo,
02387 SYSTEM_POWER_STATE SystemFrom,
02388 POWER_ACTION Action);
02389
02390 typedef void (*PFNKSDEVICESETPOWER)(PKSDEVICE Device,PIRP Irp,
02391 DEVICE_POWER_STATE To,
02392 DEVICE_POWER_STATE From);
02393
02394 typedef NTSTATUS (*PFNKSFILTERFACTORYVOID)(PKSFILTERFACTORY FilterFactory);
02395
02396 typedef void (*PFNKSFILTERFACTORYPOWER)(PKSFILTERFACTORY FilterFactory,
02397 DEVICE_POWER_STATE State);
02398
02399 typedef NTSTATUS (*PFNKSFILTERIRP)(PKSFILTER Filter,PIRP Irp);
02400
02401 typedef NTSTATUS (*PFNKSFILTERPROCESS)(PKSFILTER Filter,
02402 PKSPROCESSPIN_INDEXENTRY Index);
02403
02404 typedef NTSTATUS (*PFNKSFILTERVOID)(PKSFILTER Filter);
02405
02406 typedef void (*PFNKSFILTERPOWER)(PKSFILTER Filter,DEVICE_POWER_STATE State);
02407
02408 typedef NTSTATUS (*PFNKSPINIRP)(PKSPIN Pin,PIRP Irp);
02409
02410 typedef NTSTATUS (*PFNKSPINSETDEVICESTATE)(PKSPIN Pin,KSSTATE ToState,
02411 KSSTATE FromState);
02412
02413 typedef NTSTATUS (*PFNKSPINSETDATAFORMAT)(PKSPIN Pin,PKSDATAFORMAT OldFormat,
02414 PKSMULTIPLE_ITEM OldAttributeList,
02415 const KSDATARANGE *DataRange,
02416 const KSATTRIBUTE_LIST *AttributeRange);
02417
02418 typedef NTSTATUS (*PFNKSPINHANDSHAKE)(PKSPIN Pin,PKSHANDSHAKE In,
02419 PKSHANDSHAKE Out);
02420
02421 typedef NTSTATUS (*PFNKSPIN)(PKSPIN Pin);
02422
02423 typedef void (*PFNKSPINVOID)(PKSPIN Pin);
02424
02425 typedef void (*PFNKSPINPOWER)(PKSPIN Pin,DEVICE_POWER_STATE State);
02426
02427 typedef BOOLEAN (*PFNKSPINSETTIMER)(PKSPIN Pin,PKTIMER Timer,
02428 LARGE_INTEGER DueTime,PKDPC Dpc);
02429
02430 typedef BOOLEAN (*PFNKSPINCANCELTIMER)(PKSPIN Pin,PKTIMER Timer);
02431
02432 typedef LONGLONG (FASTCALL *PFNKSPINCORRELATEDTIME)(PKSPIN Pin,
02433 PLONGLONG SystemTime);
02434
02435 typedef void (*PFNKSPINRESOLUTION)(PKSPIN Pin,PKSRESOLUTION Resolution);
02436
02437 typedef NTSTATUS (*PFNKSPININITIALIZEALLOCATOR)(PKSPIN Pin,
02438 PKSALLOCATOR_FRAMING AllocatorFraming,
02439 PVOID *Context);
02440
02441 typedef void (*PFNKSSTREAMPOINTER)(PKSSTREAM_POINTER StreamPointer);
02442
02443
02444 typedef struct KSAUTOMATION_TABLE_ KSAUTOMATION_TABLE,*PKSAUTOMATION_TABLE;
02445
02446 struct KSAUTOMATION_TABLE_ {
02447 ULONG PropertySetsCount;
02448 ULONG PropertyItemSize;
02449 const KSPROPERTY_SET *PropertySets;
02450 ULONG MethodSetsCount;
02451 ULONG MethodItemSize;
02452 const KSMETHOD_SET *MethodSets;
02453 ULONG EventSetsCount;
02454 ULONG EventItemSize;
02455 const KSEVENT_SET *EventSets;
02456 #ifndef _WIN64
02457 PVOID Alignment;
02458 #endif
02459 };
02460
02461 #define DEFINE_KSAUTOMATION_TABLE(table) \
02462 const KSAUTOMATION_TABLE table =
02463
02464 #define DEFINE_KSAUTOMATION_PROPERTIES(table) \
02465 SIZEOF_ARRAY(table), \
02466 sizeof(KSPROPERTY_ITEM), \
02467 table
02468
02469 #define DEFINE_KSAUTOMATION_METHODS(table) \
02470 SIZEOF_ARRAY(table), \
02471 sizeof(KSMETHOD_ITEM), \
02472 table
02473
02474 #define DEFINE_KSAUTOMATION_EVENTS(table) \
02475 SIZEOF_ARRAY(table), \
02476 sizeof(KSEVENT_ITEM), \
02477 table
02478
02479 #define DEFINE_KSAUTOMATION_PROPERTIES_NULL \
02480 0, \
02481 sizeof(KSPROPERTY_ITEM), \
02482 NULL
02483
02484 #define DEFINE_KSAUTOMATION_METHODS_NULL \
02485 0, \
02486 sizeof(KSMETHOD_ITEM), \
02487 NULL
02488
02489 #define DEFINE_KSAUTOMATION_EVENTS_NULL \
02490 0, \
02491 sizeof(KSEVENT_ITEM), \
02492 NULL
02493
02494 #define MIN_DEV_VER_FOR_QI (0x100)
02495
02496 struct _KSDEVICE_DISPATCH {
02497 PFNKSDEVICECREATE Add;
02498 PFNKSDEVICEPNPSTART Start;
02499 PFNKSDEVICE PostStart;
02500 PFNKSDEVICEIRP QueryStop;
02501 PFNKSDEVICEIRPVOID CancelStop;
02502 PFNKSDEVICEIRPVOID Stop;
02503 PFNKSDEVICEIRP QueryRemove;
02504 PFNKSDEVICEIRPVOID CancelRemove;
02505 PFNKSDEVICEIRPVOID Remove;
02506 PFNKSDEVICEQUERYCAPABILITIES QueryCapabilities;
02507 PFNKSDEVICEIRPVOID SurpriseRemoval;
02508 PFNKSDEVICEQUERYPOWER QueryPower;
02509 PFNKSDEVICESETPOWER SetPower;
02510 PFNKSDEVICEIRP QueryInterface;
02511 };
02512
02513 struct _KSFILTER_DISPATCH {
02514 PFNKSFILTERIRP Create;
02515 PFNKSFILTERIRP Close;
02516 PFNKSFILTERPROCESS Process;
02517 PFNKSFILTERVOID Reset;
02518 };
02519
02520 struct _KSPIN_DISPATCH {
02521 PFNKSPINIRP Create;
02522 PFNKSPINIRP Close;
02523 PFNKSPIN Process;
02524 PFNKSPINVOID Reset;
02525 PFNKSPINSETDATAFORMAT SetDataFormat;
02526 PFNKSPINSETDEVICESTATE SetDeviceState;
02527 PFNKSPIN Connect;
02528 PFNKSPINVOID Disconnect;
02529 const KSCLOCK_DISPATCH *Clock;
02530 const KSALLOCATOR_DISPATCH *Allocator;
02531 };
02532
02533 struct _KSCLOCK_DISPATCH {
02534 PFNKSPINSETTIMER SetTimer;
02535 PFNKSPINCANCELTIMER CancelTimer;
02536 PFNKSPINCORRELATEDTIME CorrelatedTime;
02537 PFNKSPINRESOLUTION Resolution;
02538 };
02539
02540 struct _KSALLOCATOR_DISPATCH {
02541 PFNKSPININITIALIZEALLOCATOR InitializeAllocator;
02542 PFNKSDELETEALLOCATOR DeleteAllocator;
02543 PFNKSDEFAULTALLOCATE Allocate;
02544 PFNKSDEFAULTFREE Free;
02545 };
02546
02547 #define KSDEVICE_DESCRIPTOR_VERSION (0x100)
02548
02549 struct _KSDEVICE_DESCRIPTOR {
02550 const KSDEVICE_DISPATCH *Dispatch;
02551 ULONG FilterDescriptorsCount;
02552 const KSFILTER_DESCRIPTOR*const *FilterDescriptors;
02553 ULONG Version;
02554 };
02555
02556 struct _KSFILTER_DESCRIPTOR {
02557 const KSFILTER_DISPATCH *Dispatch;
02558 const KSAUTOMATION_TABLE *AutomationTable;
02559 ULONG Version;
02560 #define KSFILTER_DESCRIPTOR_VERSION ((ULONG)-1)
02561 ULONG Flags;
02562 #define KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING 0x00000001
02563 #define KSFILTER_FLAG_CRITICAL_PROCESSING 0x00000002
02564 #define KSFILTER_FLAG_HYPERCRITICAL_PROCESSING 0x00000004
02565 #define KSFILTER_FLAG_RECEIVE_ZERO_LENGTH_SAMPLES 0x00000008
02566 #define KSFILTER_FLAG_DENY_USERMODE_ACCESS 0x80000000
02567 const GUID *ReferenceGuid;
02568 ULONG PinDescriptorsCount;
02569 ULONG PinDescriptorSize;
02570 const KSPIN_DESCRIPTOR_EX *PinDescriptors;
02571 ULONG CategoriesCount;
02572 const GUID *Categories;
02573 ULONG NodeDescriptorsCount;
02574 ULONG NodeDescriptorSize;
02575 const KSNODE_DESCRIPTOR *NodeDescriptors;
02576 ULONG ConnectionsCount;
02577 const KSTOPOLOGY_CONNECTION *Connections;
02578 const KSCOMPONENTID *ComponentId;
02579 };
02580
02581 #define DEFINE_KSFILTER_DESCRIPTOR(descriptor) \
02582 const KSFILTER_DESCRIPTOR descriptor =
02583
02584 #define DEFINE_KSFILTER_PIN_DESCRIPTORS(table) \
02585 SIZEOF_ARRAY(table), \
02586 sizeof(table[0]), \
02587 table
02588
02589 #define DEFINE_KSFILTER_CATEGORIES(table) \
02590 SIZEOF_ARRAY(table), \
02591 table
02592
02593 #define DEFINE_KSFILTER_CATEGORY(category) \
02594 1, \
02595 &(category)
02596
02597 #define DEFINE_KSFILTER_CATEGORIES_NULL \
02598 0, \
02599 NULL
02600
02601 #define DEFINE_KSFILTER_NODE_DESCRIPTORS(table) \
02602 SIZEOF_ARRAY(table), \
02603 sizeof(table[0]), \
02604 table
02605
02606 #define DEFINE_KSFILTER_NODE_DESCRIPTORS_NULL \
02607 0, \
02608 sizeof(KSNODE_DESCRIPTOR), \
02609 NULL
02610
02611 #define DEFINE_KSFILTER_CONNECTIONS(table) \
02612 SIZEOF_ARRAY(table), \
02613 table
02614
02615 #define DEFINE_KSFILTER_DEFAULT_CONNECTIONS \
02616 0, \
02617 NULL
02618
02619 #define DEFINE_KSFILTER_DESCRIPTOR_TABLE(table) \
02620 const KSFILTER_DESCRIPTOR*const table[] =
02621
02622 struct _KSPIN_DESCRIPTOR_EX {
02623 const KSPIN_DISPATCH *Dispatch;
02624 const KSAUTOMATION_TABLE *AutomationTable;
02625 KSPIN_DESCRIPTOR PinDescriptor;
02626 ULONG Flags;
02627 #define KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING
02628 #define KSPIN_FLAG_CRITICAL_PROCESSING KSFILTER_FLAG_CRITICAL_PROCESSING
02629 #define KSPIN_FLAG_HYPERCRITICAL_PROCESSING KSFILTER_FLAG_HYPERCRITICAL_PROCESSING
02630 #define KSPIN_FLAG_ASYNCHRONOUS_PROCESSING 0x00000008
02631 #define KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING 0x00000010
02632 #define KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL 0x00000020
02633 #define KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING 0x00000040
02634 #define KSPIN_FLAG_ENFORCE_FIFO 0x00000080
02635 #define KSPIN_FLAG_GENERATE_MAPPINGS 0x00000100
02636 #define KSPIN_FLAG_DISTINCT_TRAILING_EDGE 0x00000200
02637 #define KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY 0x00010000
02638 #define KSPIN_FLAG_SPLITTER 0x00020000
02639 #define KSPIN_FLAG_USE_STANDARD_TRANSPORT 0x00040000
02640 #define KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT 0x00080000
02641 #define KSPIN_FLAG_FIXED_FORMAT 0x00100000
02642 #define KSPIN_FLAG_GENERATE_EOS_EVENTS 0x00200000
02643 #define KSPIN_FLAG_RENDERER (KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY|KSPIN_FLAG_GENERATE_EOS_EVENTS)
02644 #define KSPIN_FLAG_IMPLEMENT_CLOCK 0x00400000
02645 #define KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING 0x00800000
02646 #define KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE 0x01000000
02647 #define KSPIN_FLAG_DENY_USERMODE_ACCESS 0x80000000
02648 ULONG InstancesPossible;
02649 ULONG InstancesNecessary;
02650 const KSALLOCATOR_FRAMING_EX *AllocatorFraming;
02651 PFNKSINTERSECTHANDLEREX IntersectHandler;
02652 };
02653
02654 #define DEFINE_KSPIN_DEFAULT_INTERFACES \
02655 0, \
02656 NULL
02657
02658 #define DEFINE_KSPIN_DEFAULT_MEDIUMS \
02659 0, \
02660 NULL
02661
02662 struct _KSNODE_DESCRIPTOR {
02663 const KSAUTOMATION_TABLE *AutomationTable;
02664 const GUID *Type;
02665 const GUID *Name;
02666 #ifndef _WIN64
02667 PVOID Alignment;
02668 #endif
02669 };
02670
02671 #ifndef _WIN64
02672 #define DEFINE_NODE_DESCRIPTOR(automation,type,name) \
02673 { (automation), (type), (name), NULL }
02674 #else
02675 #define DEFINE_NODE_DESCRIPTOR(automation,type,name) \
02676 { (automation), (type), (name) }
02677 #endif
02678
02679 struct _KSDEVICE {
02680 const KSDEVICE_DESCRIPTOR *Descriptor;
02681 KSOBJECT_BAG Bag;
02682 PVOID Context;
02683 PDEVICE_OBJECT FunctionalDeviceObject;
02684 PDEVICE_OBJECT PhysicalDeviceObject;
02685 PDEVICE_OBJECT NextDeviceObject;
02686 BOOLEAN Started;
02687 SYSTEM_POWER_STATE SystemPowerState;
02688 DEVICE_POWER_STATE DevicePowerState;
02689 };
02690
02691 struct _KSFILTERFACTORY {
02692 const KSFILTER_DESCRIPTOR *FilterDescriptor;
02693 KSOBJECT_BAG Bag;
02694 PVOID Context;
02695 };
02696
02697 struct _KSFILTER {
02698 const KSFILTER_DESCRIPTOR *Descriptor;
02699 KSOBJECT_BAG Bag;
02700 PVOID Context;
02701 };
02702
02703 struct _KSPIN {
02704 const KSPIN_DESCRIPTOR_EX *Descriptor;
02705 KSOBJECT_BAG Bag;
02706 PVOID Context;
02707 ULONG Id;
02708 KSPIN_COMMUNICATION Communication;
02709 BOOLEAN ConnectionIsExternal;
02710 KSPIN_INTERFACE ConnectionInterface;
02711 KSPIN_MEDIUM ConnectionMedium;
02712 KSPRIORITY ConnectionPriority;
02713 PKSDATAFORMAT ConnectionFormat;
02714 PKSMULTIPLE_ITEM AttributeList;
02715 ULONG StreamHeaderSize;
02716 KSPIN_DATAFLOW DataFlow;
02717 KSSTATE DeviceState;
02718 KSRESET ResetState;
02719 KSSTATE ClientState;
02720 };
02721
02722 struct _KSMAPPING {
02723 PHYSICAL_ADDRESS PhysicalAddress;
02724 ULONG ByteCount;
02725 ULONG Alignment;
02726 };
02727
02728 struct _KSSTREAM_POINTER_OFFSET
02729 {
02730 #if defined(_NTDDK_)
02731 __MINGW_EXTENSION union {
02732 PUCHAR Data;
02733 PKSMAPPING Mappings;
02734 };
02735 #else
02736 PUCHAR Data;
02737 #endif
02738 #ifndef _WIN64
02739 PVOID Alignment;
02740 #endif
02741 ULONG Count;
02742 ULONG Remaining;
02743 };
02744
02745 struct _KSSTREAM_POINTER
02746 {
02747 PVOID Context;
02748 PKSPIN Pin;
02749 PKSSTREAM_HEADER StreamHeader;
02750 PKSSTREAM_POINTER_OFFSET Offset;
02751 KSSTREAM_POINTER_OFFSET OffsetIn;
02752 KSSTREAM_POINTER_OFFSET OffsetOut;
02753 };
02754
02755 struct _KSPROCESSPIN {
02756 PKSPIN Pin;
02757 PKSSTREAM_POINTER StreamPointer;
02758 PKSPROCESSPIN InPlaceCounterpart;
02759 PKSPROCESSPIN DelegateBranch;
02760 PKSPROCESSPIN CopySource;
02761 PVOID Data;
02762 ULONG BytesAvailable;
02763 ULONG BytesUsed;
02764 ULONG Flags;
02765 BOOLEAN Terminate;
02766 };
02767
02768 struct _KSPROCESSPIN_INDEXENTRY {
02769 PKSPROCESSPIN *Pins;
02770 ULONG Count;
02771 };
02772
02773 typedef enum {
02774 KsObjectTypeDevice,
02775 KsObjectTypeFilterFactory,
02776 KsObjectTypeFilter,
02777 KsObjectTypePin
02778 } KSOBJECTTYPE;
02779
02780
02781 typedef void (*PFNKSFREE)(PVOID Data);
02782
02783 typedef void (*PFNKSPINFRAMERETURN)(PKSPIN Pin,PVOID Data,ULONG Size,PMDL Mdl,
02784 PVOID Context,NTSTATUS Status);
02785
02786 typedef void (*PFNKSPINIRPCOMPLETION)(PKSPIN Pin,PIRP Irp);
02787
02788
02789 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
02790 #ifndef _IKsControl_
02791 #define _IKsControl_
02792
02793 typedef struct IKsControl *PIKSCONTROL;
02794
02795 #ifndef DEFINE_ABSTRACT_UNKNOWN
02796 #define DEFINE_ABSTRACT_UNKNOWN() \
02797 STDMETHOD_(NTSTATUS,QueryInterface) (THIS_ \
02798 REFIID InterfaceId, \
02799 PVOID *Interface \
02800 ) PURE; \
02801 STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
02802 STDMETHOD_(ULONG,Release)(THIS) PURE;
02803 #endif
02804
02805 #undef INTERFACE
02806 #define INTERFACE IKsControl
02807 DECLARE_INTERFACE_(IKsControl,IUnknown)
02808 {
02809 DEFINE_ABSTRACT_UNKNOWN()
02810 STDMETHOD_(NTSTATUS,KsProperty)(THIS_
02811 PKSPROPERTY Property,
02812 ULONG PropertyLength,
02813 PVOID PropertyData,
02814 ULONG DataLength,
02815 ULONG *BytesReturned
02816 ) PURE;
02817 STDMETHOD_(NTSTATUS,KsMethod) (THIS_
02818 PKSMETHOD Method,
02819 ULONG MethodLength,
02820 PVOID MethodData,
02821 ULONG DataLength,
02822 ULONG *BytesReturned
02823 ) PURE;
02824 STDMETHOD_(NTSTATUS,KsEvent) (THIS_
02825 PKSEVENT Event,
02826 ULONG EventLength,
02827 PVOID EventData,
02828 ULONG DataLength,
02829 ULONG *BytesReturned
02830 ) PURE;
02831 };
02832 typedef struct IKsReferenceClock *PIKSREFERENCECLOCK;
02833
02834 #undef INTERFACE
02835 #define INTERFACE IKsReferenceClock
02836 DECLARE_INTERFACE_(IKsReferenceClock,IUnknown)
02837 {
02838 DEFINE_ABSTRACT_UNKNOWN()
02839 STDMETHOD_(LONGLONG,GetTime) (THIS) PURE;
02840 STDMETHOD_(LONGLONG,GetPhysicalTime) (THIS) PURE;
02841 STDMETHOD_(LONGLONG,GetCorrelatedTime)(THIS_
02842 PLONGLONG SystemTime
02843 ) PURE;
02844 STDMETHOD_(LONGLONG,GetCorrelatedPhysicalTime)(THIS_
02845 PLONGLONG SystemTime
02846 ) PURE;
02847 STDMETHOD_(NTSTATUS,GetResolution) (THIS_
02848 PKSRESOLUTION Resolution
02849 ) PURE;
02850 STDMETHOD_(NTSTATUS,GetState) (THIS_
02851 PKSSTATE State
02852 ) PURE;
02853 };
02854 #undef INTERFACE
02855
02856 #define INTERFACE IKsDeviceFunctions
02857 DECLARE_INTERFACE_(IKsDeviceFunctions,IUnknown)
02858 {
02859 DEFINE_ABSTRACT_UNKNOWN()
02860 STDMETHOD_(NTSTATUS,RegisterAdapterObjectEx) (THIS_
02861 PADAPTER_OBJECT AdapterObject,
02862 PDEVICE_DESCRIPTION DeviceDescription,
02863 ULONG NumberOfMapRegisters,
02864 ULONG MaxMappingsByteCount,
02865 ULONG MappingTableStride
02866 ) PURE;
02867 };
02868
02869 #undef INTERFACE
02870 #define STATIC_IID_IKsControl \
02871 0x28F54685L,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96
02872 DEFINE_GUID(IID_IKsControl,
02873 0x28F54685L,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96);
02874 #define STATIC_IID_IKsFastClock \
02875 0xc9902485,0xc180,0x11d2,0x84,0x73,0xd4,0x23,0x94,0x45,0x9e,0x5e
02876 DEFINE_GUID(IID_IKsFastClock,
02877 0xc9902485,0xc180,0x11d2,0x84,0x73,0xd4,0x23,0x94,0x45,0x9e,0x5e);
02878 #define STATIC_IID_IKsDeviceFunctions \
02879 0xe234f2e2,0xbd69,0x4f8c,0xb3,0xf2,0x7c,0xd7,0x9e,0xd4,0x66,0xbd
02880 DEFINE_GUID(IID_IKsDeviceFunctions,
02881 0xe234f2e2,0xbd69,0x4f8c,0xb3,0xf2,0x7c,0xd7,0x9e,0xd4,0x66,0xbd);
02882 #endif
02883 #endif
02884
02885 #endif
02886
02887
02888 #ifdef __cplusplus
02889 extern "C" {
02890 #endif
02891
02892 #ifdef _KSDDK_
02893 #define KSDDKAPI
02894 #else
02895 #define KSDDKAPI DECLSPEC_IMPORT
02896 #endif
02897
02898 #if defined(_NTDDK_)
02899
02900 KSDDKAPI NTSTATUS NTAPI KsEnableEvent
02901 (PIRP Irp, ULONG EventSetsCount, const KSEVENT_SET *EventSet,
02902 PLIST_ENTRY EventsList, KSEVENTS_LOCKTYPE EventsFlags,
02903 PVOID EventsLock);
02904
02905 KSDDKAPI NTSTATUS NTAPI KsEnableEventWithAllocator
02906 (PIRP Irp, ULONG EventSetsCount, const KSEVENT_SET *EventSet,
02907 PLIST_ENTRY EventsList, KSEVENTS_LOCKTYPE EventsFlags,
02908 PVOID EventsLock, PFNKSALLOCATOR Allocator, ULONG EventItemSize);
02909
02910 KSDDKAPI NTSTATUS NTAPI KsDisableEvent
02911 (PIRP Irp, PLIST_ENTRY EventsList, KSEVENTS_LOCKTYPE EventsFlags,
02912 PVOID EventsLock);
02913
02914 KSDDKAPI VOID NTAPI KsDiscardEvent (PKSEVENT_ENTRY EventEntry);
02915
02916 KSDDKAPI VOID NTAPI KsFreeEventList
02917 (PFILE_OBJECT FileObject, PLIST_ENTRY EventsList,
02918 KSEVENTS_LOCKTYPE EventsFlags, PVOID EventsLock);
02919
02920 KSDDKAPI NTSTATUS NTAPI KsGenerateEvent (PKSEVENT_ENTRY EventEntry);
02921
02922 KSDDKAPI NTSTATUS NTAPI KsGenerateDataEvent
02923 (PKSEVENT_ENTRY EventEntry, ULONG DataSize, PVOID Data);
02924
02925 KSDDKAPI VOID NTAPI KsGenerateEventList
02926 (GUID *Set, ULONG EventId, PLIST_ENTRY EventsList,
02927 KSEVENTS_LOCKTYPE EventsFlags, PVOID EventsLock);
02928
02929 KSDDKAPI NTSTATUS NTAPI KsPropertyHandler
02930 (PIRP Irp, ULONG PropertySetsCount,
02931 const KSPROPERTY_SET *PropertySet);
02932
02933 KSDDKAPI NTSTATUS NTAPI KsPropertyHandlerWithAllocator
02934 (PIRP Irp, ULONG PropertySetsCount,
02935 const KSPROPERTY_SET *PropertySet, PFNKSALLOCATOR Allocator,
02936 ULONG PropertyItemSize);
02937
02938 KSDDKAPI BOOLEAN NTAPI KsFastPropertyHandler
02939 (PFILE_OBJECT FileObject, PKSPROPERTY Property,
02940 ULONG PropertyLength, PVOID Data, ULONG DataLength,
02941 PIO_STATUS_BLOCK IoStatus, ULONG PropertySetsCount,
02942 const KSPROPERTY_SET *PropertySet);
02943
02944 KSDDKAPI NTSTATUS NTAPI KsMethodHandler
02945 (PIRP Irp, ULONG MethodSetsCount,
02946 const KSMETHOD_SET *MethodSet);
02947
02948 KSDDKAPI NTSTATUS NTAPI KsMethodHandlerWithAllocator
02949 (PIRP Irp, ULONG MethodSetsCount,
02950 const KSMETHOD_SET *MethodSet, PFNKSALLOCATOR Allocator,
02951 ULONG MethodItemSize);
02952
02953 KSDDKAPI BOOLEAN NTAPI KsFastMethodHandler
02954 (PFILE_OBJECT FileObject, PKSMETHOD Method, ULONG MethodLength,
02955 PVOID Data, ULONG DataLength, PIO_STATUS_BLOCK IoStatus,
02956 ULONG MethodSetsCount, const KSMETHOD_SET *MethodSet);
02957
02958 KSDDKAPI NTSTATUS NTAPI KsCreateDefaultAllocator (PIRP Irp);
02959
02960 KSDDKAPI NTSTATUS NTAPI KsCreateDefaultAllocatorEx
02961 (PIRP Irp, PVOID InitializeContext,
02962 PFNKSDEFAULTALLOCATE DefaultAllocate,
02963 PFNKSDEFAULTFREE DefaultFree,
02964 PFNKSINITIALIZEALLOCATOR InitializeAllocator,
02965 PFNKSDELETEALLOCATOR DeleteAllocator);
02966
02967 KSDDKAPI NTSTATUS NTAPI KsCreateAllocator
02968 (HANDLE ConnectionHandle, PKSALLOCATOR_FRAMING AllocatorFraming,
02969 PHANDLE AllocatorHandle);
02970
02971 KSDDKAPI NTSTATUS NTAPI KsValidateAllocatorCreateRequest
02972 (PIRP Irp, PKSALLOCATOR_FRAMING *AllocatorFraming);
02973
02974 KSDDKAPI NTSTATUS NTAPI KsValidateAllocatorFramingEx
02975 (PKSALLOCATOR_FRAMING_EX Framing, ULONG BufferSize,
02976 const KSALLOCATOR_FRAMING_EX *PinFraming);
02977
02978 KSDDKAPI NTSTATUS NTAPI KsAllocateDefaultClock (PKSDEFAULTCLOCK *DefaultClock);
02979
02980 KSDDKAPI NTSTATUS NTAPI KsAllocateDefaultClockEx
02981 (PKSDEFAULTCLOCK *DefaultClock, PVOID Context,
02982 PFNKSSETTIMER SetTimer, PFNKSCANCELTIMER CancelTimer,
02983 PFNKSCORRELATEDTIME CorrelatedTime,
02984 const KSRESOLUTION *Resolution, ULONG Flags);
02985
02986 KSDDKAPI VOID NTAPI KsFreeDefaultClock (PKSDEFAULTCLOCK DefaultClock);
02987 KSDDKAPI NTSTATUS NTAPI KsCreateDefaultClock (PIRP Irp, PKSDEFAULTCLOCK DefaultClock);
02988
02989 KSDDKAPI NTSTATUS NTAPI KsCreateClock
02990 (HANDLE ConnectionHandle, PKSCLOCK_CREATE ClockCreate,
02991 PHANDLE ClockHandle);
02992
02993 KSDDKAPI NTSTATUS NTAPI KsValidateClockCreateRequest
02994 (PIRP Irp, PKSCLOCK_CREATE *ClockCreate);
02995
02996 KSDDKAPI KSSTATE NTAPI KsGetDefaultClockState (PKSDEFAULTCLOCK DefaultClock);
02997 KSDDKAPI VOID NTAPI KsSetDefaultClockState(PKSDEFAULTCLOCK DefaultClock, KSSTATE State);
02998 KSDDKAPI LONGLONG NTAPI KsGetDefaultClockTime (PKSDEFAULTCLOCK DefaultClock);
02999 KSDDKAPI VOID NTAPI KsSetDefaultClockTime(PKSDEFAULTCLOCK DefaultClock, LONGLONG Time);
03000
03001 KSDDKAPI NTSTATUS NTAPI KsCreatePin
03002 (HANDLE FilterHandle, PKSPIN_CONNECT Connect,
03003 ACCESS_MASK DesiredAccess, PHANDLE ConnectionHandle);
03004
03005 KSDDKAPI NTSTATUS NTAPI KsValidateConnectRequest
03006 (PIRP Irp, ULONG DescriptorsCount,
03007 const KSPIN_DESCRIPTOR *Descriptor, PKSPIN_CONNECT *Connect);
03008
03009 KSDDKAPI NTSTATUS NTAPI KsPinPropertyHandler
03010 (PIRP Irp, PKSPROPERTY Property, PVOID Data,
03011 ULONG DescriptorsCount, const KSPIN_DESCRIPTOR *Descriptor);
03012
03013 KSDDKAPI NTSTATUS NTAPI KsPinDataIntersection
03014 (PIRP Irp, PKSP_PIN Pin, PVOID Data, ULONG DescriptorsCount,
03015 const KSPIN_DESCRIPTOR *Descriptor,
03016 PFNKSINTERSECTHANDLER IntersectHandler);
03017
03018 KSDDKAPI NTSTATUS NTAPI KsPinDataIntersectionEx
03019 (PIRP Irp, PKSP_PIN Pin, PVOID Data, ULONG DescriptorsCount,
03020 const KSPIN_DESCRIPTOR *Descriptor, ULONG DescriptorSize,
03021 PFNKSINTERSECTHANDLEREX IntersectHandler, PVOID HandlerContext);
03022
03023 KSDDKAPI NTSTATUS NTAPI KsHandleSizedListQuery
03024 (PIRP Irp, ULONG DataItemsCount, ULONG DataItemSize,
03025 const VOID *DataItems);
03026
03027 #ifndef MAKEINTRESOURCE
03028 #define MAKEINTRESOURCE(r) ((ULONG_PTR) (USHORT) r)
03029 #endif
03030 #ifndef RT_STRING
03031 #define RT_STRING MAKEINTRESOURCE(6)
03032 #define RT_RCDATA MAKEINTRESOURCE(10)
03033 #endif
03034
03035 KSDDKAPI NTSTATUS NTAPI KsLoadResource
03036 (PVOID ImageBase, POOL_TYPE PoolType, ULONG_PTR ResourceName,
03037 ULONG ResourceType, PVOID *Resource, PULONG ResourceSize);
03038
03039 KSDDKAPI NTSTATUS NTAPI KsGetImageNameAndResourceId
03040 (HANDLE RegKey, PUNICODE_STRING ImageName, PULONG_PTR ResourceId,
03041 PULONG ValueType);
03042
03043 KSDDKAPI NTSTATUS NTAPI KsMapModuleName
03044 (PDEVICE_OBJECT PhysicalDeviceObject, PUNICODE_STRING ModuleName,
03045 PUNICODE_STRING ImageName, PULONG_PTR ResourceId,
03046 PULONG ValueType);
03047
03048 KSDDKAPI NTSTATUS NTAPI KsReferenceBusObject (KSDEVICE_HEADER Header);
03049 KSDDKAPI VOID NTAPI KsDereferenceBusObject (KSDEVICE_HEADER Header);
03050 KSDDKAPI NTSTATUS NTAPI KsDispatchQuerySecurity (PDEVICE_OBJECT DeviceObject, PIRP Irp);
03051 KSDDKAPI NTSTATUS NTAPI KsDispatchSetSecurity (PDEVICE_OBJECT DeviceObject, PIRP Irp);
03052 KSDDKAPI NTSTATUS NTAPI KsDispatchSpecificProperty (PIRP Irp, PFNKSHANDLER Handler);
03053 KSDDKAPI NTSTATUS NTAPI KsDispatchSpecificMethod (PIRP Irp, PFNKSHANDLER Handler);
03054
03055 KSDDKAPI NTSTATUS NTAPI KsReadFile
03056 (PFILE_OBJECT FileObject, PKEVENT Event, PVOID PortContext,
03057 PIO_STATUS_BLOCK IoStatusBlock, PVOID Buffer, ULONG Length,
03058 ULONG Key, KPROCESSOR_MODE RequestorMode);
03059
03060 KSDDKAPI NTSTATUS NTAPI KsWriteFile
03061 (PFILE_OBJECT FileObject, PKEVENT Event, PVOID PortContext,
03062 PIO_STATUS_BLOCK IoStatusBlock, PVOID Buffer, ULONG Length,
03063 ULONG Key, KPROCESSOR_MODE RequestorMode);
03064
03065 KSDDKAPI NTSTATUS NTAPI KsQueryInformationFile
03066 (PFILE_OBJECT FileObject, PVOID FileInformation, ULONG Length,
03067 FILE_INFORMATION_CLASS FileInformationClass);
03068
03069 KSDDKAPI NTSTATUS NTAPI KsSetInformationFile
03070 (PFILE_OBJECT FileObject, PVOID FileInformation, ULONG Length,
03071 FILE_INFORMATION_CLASS FileInformationClass);
03072
03073 KSDDKAPI NTSTATUS NTAPI KsStreamIo
03074 (PFILE_OBJECT FileObject, PKEVENT Event, PVOID PortContext,
03075 PIO_COMPLETION_ROUTINE CompletionRoutine, PVOID CompletionContext,
03076 KSCOMPLETION_INVOCATION CompletionInvocationFlags,
03077 PIO_STATUS_BLOCK IoStatusBlock, PVOID StreamHeaders, ULONG Length,
03078 ULONG Flags, KPROCESSOR_MODE RequestorMode);
03079
03080 KSDDKAPI NTSTATUS NTAPI KsProbeStreamIrp(PIRP Irp, ULONG ProbeFlags, ULONG HeaderSize);
03081 KSDDKAPI NTSTATUS NTAPI KsAllocateExtraData(PIRP Irp, ULONG ExtraSize, PVOID *ExtraBuffer);
03082 KSDDKAPI VOID NTAPI KsNullDriverUnload (PDRIVER_OBJECT DriverObject);
03083
03084 KSDDKAPI NTSTATUS NTAPI KsSetMajorFunctionHandler
03085 (PDRIVER_OBJECT DriverObject, ULONG MajorFunction);
03086
03087 KSDDKAPI NTSTATUS NTAPI KsDispatchInvalidDeviceRequest
03088 (PDEVICE_OBJECT DeviceObject, PIRP Irp);
03089
03090 KSDDKAPI NTSTATUS NTAPI KsDefaultDeviceIoCompletion
03091 (PDEVICE_OBJECT DeviceObject, PIRP Irp);
03092
03093 KSDDKAPI NTSTATUS NTAPI KsDispatchIrp(PDEVICE_OBJECT DeviceObject, PIRP Irp);
03094
03095 KSDDKAPI BOOLEAN NTAPI KsDispatchFastIoDeviceControlFailure
03096 (PFILE_OBJECT FileObject, BOOLEAN Wait, PVOID InputBuffer,
03097 ULONG InputBufferLength, PVOID OutputBuffer,
03098 ULONG OutputBufferLength, ULONG IoControlCode,
03099 PIO_STATUS_BLOCK IoStatus, PDEVICE_OBJECT DeviceObject);
03100
03101 KSDDKAPI BOOLEAN NTAPI KsDispatchFastReadFailure
03102 (PFILE_OBJECT FileObject, PLARGE_INTEGER FileOffset,
03103 ULONG Length, BOOLEAN Wait, ULONG LockKey, PVOID Buffer,
03104 PIO_STATUS_BLOCK IoStatus, PDEVICE_OBJECT DeviceObject);
03105
03106 #define KsDispatchFastWriteFailure KsDispatchFastReadFailure
03107
03108 KSDDKAPI VOID NTAPI KsCancelRoutine(PDEVICE_OBJECT DeviceObject, PIRP Irp);
03109 KSDDKAPI VOID NTAPI KsCancelIo(PLIST_ENTRY QueueHead, PKSPIN_LOCK SpinLock);
03110 KSDDKAPI VOID NTAPI KsReleaseIrpOnCancelableQueue(PIRP Irp, PDRIVER_CANCEL DriverCancel);
03111
03112 KSDDKAPI PIRP NTAPI KsRemoveIrpFromCancelableQueue
03113 (PLIST_ENTRY QueueHead, PKSPIN_LOCK SpinLock,
03114 KSLIST_ENTRY_LOCATION ListLocation,
03115 KSIRP_REMOVAL_OPERATION RemovalOperation);
03116
03117 KSDDKAPI NTSTATUS NTAPI KsMoveIrpsOnCancelableQueue
03118 (PLIST_ENTRY SourceList, PKSPIN_LOCK SourceLock,
03119 PLIST_ENTRY DestinationList, PKSPIN_LOCK DestinationLock,
03120 KSLIST_ENTRY_LOCATION ListLocation,
03121 PFNKSIRPLISTCALLBACK ListCallback, PVOID Context);
03122
03123 KSDDKAPI VOID NTAPI KsRemoveSpecificIrpFromCancelableQueue (PIRP Irp);
03124
03125 KSDDKAPI VOID NTAPI KsAddIrpToCancelableQueue
03126 (PLIST_ENTRY QueueHead, PKSPIN_LOCK SpinLock, PIRP Irp,
03127 KSLIST_ENTRY_LOCATION ListLocation, PDRIVER_CANCEL DriverCancel);
03128
03129 KSDDKAPI NTSTATUS NTAPI KsAcquireResetValue(PIRP Irp, KSRESET *ResetValue);
03130
03131 KSDDKAPI NTSTATUS NTAPI KsTopologyPropertyHandler
03132 (PIRP Irp, PKSPROPERTY Property, PVOID Data,
03133 const KSTOPOLOGY *Topology);
03134
03135 KSDDKAPI VOID NTAPI KsAcquireDeviceSecurityLock(KSDEVICE_HEADER Header, BOOLEAN Exclusive);
03136 KSDDKAPI VOID NTAPI KsReleaseDeviceSecurityLock (KSDEVICE_HEADER Header);
03137 KSDDKAPI NTSTATUS NTAPI KsDefaultDispatchPnp(PDEVICE_OBJECT DeviceObject, PIRP Irp);
03138 KSDDKAPI NTSTATUS NTAPI KsDefaultDispatchPower(PDEVICE_OBJECT DeviceObject, PIRP Irp);
03139 KSDDKAPI NTSTATUS NTAPI KsDefaultForwardIrp(PDEVICE_OBJECT DeviceObject, PIRP Irp);
03140
03141 KSDDKAPI VOID NTAPI KsSetDevicePnpAndBaseObject
03142 (KSDEVICE_HEADER Header, PDEVICE_OBJECT PnpDeviceObject,
03143 PDEVICE_OBJECT BaseObject);
03144
03145 KSDDKAPI PDEVICE_OBJECT NTAPI KsQueryDevicePnpObject (KSDEVICE_HEADER Header);
03146 KSDDKAPI ACCESS_MASK NTAPI KsQueryObjectAccessMask (KSOBJECT_HEADER Header);
03147
03148 KSDDKAPI VOID NTAPI KsRecalculateStackDepth
03149 (KSDEVICE_HEADER Header, BOOLEAN ReuseStackLocation);
03150
03151 KSDDKAPI VOID NTAPI KsSetTargetState
03152 (KSOBJECT_HEADER Header, KSTARGET_STATE TargetState);
03153
03154 KSDDKAPI VOID NTAPI KsSetTargetDeviceObject
03155 (KSOBJECT_HEADER Header, PDEVICE_OBJECT TargetDevice);
03156
03157 KSDDKAPI VOID NTAPI KsSetPowerDispatch
03158 (KSOBJECT_HEADER Header, PFNKSCONTEXT_DISPATCH PowerDispatch,
03159 PVOID PowerContext);
03160
03161 KSDDKAPI PKSOBJECT_CREATE_ITEM NTAPI KsQueryObjectCreateItem (KSOBJECT_HEADER Header);
03162
03163 KSDDKAPI NTSTATUS NTAPI KsAllocateDeviceHeader
03164 (KSDEVICE_HEADER *Header, ULONG ItemsCount,
03165 PKSOBJECT_CREATE_ITEM ItemsList);
03166
03167 KSDDKAPI VOID NTAPI KsFreeDeviceHeader (KSDEVICE_HEADER Header);
03168
03169 KSDDKAPI NTSTATUS NTAPI KsAllocateObjectHeader
03170 (KSOBJECT_HEADER *Header, ULONG ItemsCount,
03171 PKSOBJECT_CREATE_ITEM ItemsList, PIRP Irp,
03172 const KSDISPATCH_TABLE *Table);
03173
03174 KSDDKAPI VOID NTAPI KsFreeObjectHeader (KSOBJECT_HEADER Header);
03175
03176 KSDDKAPI NTSTATUS NTAPI KsAddObjectCreateItemToDeviceHeader
03177 (KSDEVICE_HEADER Header, PDRIVER_DISPATCH Create, PVOID Context,
03178 PWSTR ObjectClass, PSECURITY_DESCRIPTOR SecurityDescriptor);
03179
03180 KSDDKAPI NTSTATUS NTAPI KsAddObjectCreateItemToObjectHeader
03181 (KSOBJECT_HEADER Header, PDRIVER_DISPATCH Create, PVOID Context,
03182 PWSTR ObjectClass, PSECURITY_DESCRIPTOR SecurityDescriptor);
03183
03184 KSDDKAPI NTSTATUS NTAPI KsAllocateObjectCreateItem
03185 (KSDEVICE_HEADER Header, PKSOBJECT_CREATE_ITEM CreateItem,
03186 BOOLEAN AllocateEntry, PFNKSITEMFREECALLBACK ItemFreeCallback);
03187
03188 KSDDKAPI NTSTATUS NTAPI KsFreeObjectCreateItem
03189 (KSDEVICE_HEADER Header, PUNICODE_STRING CreateItem);
03190
03191 KSDDKAPI NTSTATUS NTAPI KsFreeObjectCreateItemsByContext
03192 (KSDEVICE_HEADER Header, PVOID Context);
03193
03194 KSDDKAPI NTSTATUS NTAPI KsCreateDefaultSecurity
03195 (PSECURITY_DESCRIPTOR ParentSecurity,
03196 PSECURITY_DESCRIPTOR *DefaultSecurity);
03197
03198 KSDDKAPI NTSTATUS NTAPI KsForwardIrp
03199 (PIRP Irp, PFILE_OBJECT FileObject, BOOLEAN ReuseStackLocation);
03200
03201 KSDDKAPI NTSTATUS NTAPI KsForwardAndCatchIrp
03202 (PDEVICE_OBJECT DeviceObject, PIRP Irp, PFILE_OBJECT FileObject,
03203 KSSTACK_USE StackUse);
03204
03205 KSDDKAPI NTSTATUS NTAPI KsSynchronousIoControlDevice
03206 (PFILE_OBJECT FileObject, KPROCESSOR_MODE RequestorMode,
03207 ULONG IoControl, PVOID InBuffer, ULONG InSize, PVOID OutBuffer,
03208 ULONG OutSize, PULONG BytesReturned);
03209
03210 KSDDKAPI NTSTATUS NTAPI KsUnserializeObjectPropertiesFromRegistry
03211 (PFILE_OBJECT FileObject, HANDLE ParentKey,
03212 PUNICODE_STRING RegistryPath);
03213
03214 KSDDKAPI NTSTATUS NTAPI KsCacheMedium
03215 (PUNICODE_STRING SymbolicLink, PKSPIN_MEDIUM Medium,
03216 ULONG PinDirection);
03217
03218 KSDDKAPI NTSTATUS NTAPI KsRegisterWorker
03219 (WORK_QUEUE_TYPE WorkQueueType, PKSWORKER *Worker);
03220
03221 KSDDKAPI NTSTATUS NTAPI KsRegisterCountedWorker
03222 (WORK_QUEUE_TYPE WorkQueueType, PWORK_QUEUE_ITEM CountedWorkItem,
03223 PKSWORKER *Worker);
03224
03225 KSDDKAPI VOID NTAPI KsUnregisterWorker (PKSWORKER Worker);
03226 KSDDKAPI NTSTATUS NTAPI KsQueueWorkItem(PKSWORKER Worker, PWORK_QUEUE_ITEM WorkItem);
03227 KSDDKAPI ULONG NTAPI KsIncrementCountedWorker (PKSWORKER Worker);
03228 KSDDKAPI ULONG NTAPI KsDecrementCountedWorker (PKSWORKER Worker);
03229
03230 KSDDKAPI NTSTATUS NTAPI KsCreateTopologyNode
03231 (HANDLE ParentHandle, PKSNODE_CREATE NodeCreate,
03232 ACCESS_MASK DesiredAccess, PHANDLE NodeHandle);
03233
03234 KSDDKAPI NTSTATUS NTAPI KsValidateTopologyNodeCreateRequest
03235 (PIRP Irp, PKSTOPOLOGY Topology, PKSNODE_CREATE *NodeCreate);
03236
03237 KSDDKAPI NTSTATUS NTAPI KsMergeAutomationTables
03238 (PKSAUTOMATION_TABLE *AutomationTableAB,
03239 PKSAUTOMATION_TABLE AutomationTableA,
03240 PKSAUTOMATION_TABLE AutomationTableB,
03241 KSOBJECT_BAG Bag);
03242
03243 KSDDKAPI NTSTATUS NTAPI KsInitializeDriver
03244 (PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPathName,
03245 const KSDEVICE_DESCRIPTOR *Descriptor);
03246
03247 KSDDKAPI NTSTATUS NTAPI KsAddDevice
03248 (PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT PhysicalDeviceObject);
03249
03250 KSDDKAPI NTSTATUS NTAPI KsCreateDevice
03251 (PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT PhysicalDeviceObject,
03252 const KSDEVICE_DESCRIPTOR *Descriptor, ULONG ExtensionSize,
03253 PKSDEVICE *Device);
03254
03255 KSDDKAPI NTSTATUS NTAPI KsInitializeDevice
03256 (PDEVICE_OBJECT FunctionalDeviceObject,
03257 PDEVICE_OBJECT PhysicalDeviceObject,
03258 PDEVICE_OBJECT NextDeviceObject,
03259 const KSDEVICE_DESCRIPTOR *Descriptor);
03260
03261 KSDDKAPI void NTAPI KsTerminateDevice (PDEVICE_OBJECT DeviceObject);
03262 KSDDKAPI PKSDEVICE NTAPI KsGetDeviceForDeviceObject (PDEVICE_OBJECT FunctionalDeviceObject);
03263 KSDDKAPI void NTAPI KsAcquireDevice (PKSDEVICE Device);
03264 KSDDKAPI void NTAPI KsReleaseDevice (PKSDEVICE Device);
03265
03266 KSDDKAPI void NTAPI KsDeviceRegisterAdapterObject
03267 (PKSDEVICE Device, PADAPTER_OBJECT AdapterObject,
03268 ULONG MaxMappingsByteCount, ULONG MappingTableStride);
03269
03270 KSDDKAPI ULONG NTAPI KsDeviceGetBusData
03271 (PKSDEVICE Device, ULONG DataType, PVOID Buffer, ULONG Offset,
03272 ULONG Length);
03273
03274 KSDDKAPI ULONG NTAPI KsDeviceSetBusData
03275 (PKSDEVICE Device, ULONG DataType, PVOID Buffer, ULONG Offset,
03276 ULONG Length);
03277
03278 KSDDKAPI NTSTATUS NTAPI KsCreateFilterFactory
03279 (PDEVICE_OBJECT DeviceObject, const KSFILTER_DESCRIPTOR *Descriptor,
03280 PWSTR RefString, PSECURITY_DESCRIPTOR SecurityDescriptor,
03281 ULONG CreateItemFlags, PFNKSFILTERFACTORYPOWER SleepCallback,
03282 PFNKSFILTERFACTORYPOWER WakeCallback,
03283 PKSFILTERFACTORY *FilterFactory);
03284
03285 #define KsDeleteFilterFactory(FilterFactory) \
03286 KsFreeObjectCreateItemsByContext( *(KSDEVICE_HEADER *)( \
03287 KsFilterFactoryGetParentDevice(FilterFactory)->FunctionalDeviceObject->DeviceExtension),\
03288 FilterFactory)
03289
03290 KSDDKAPI NTSTATUS NTAPI KsFilterFactoryUpdateCacheData
03291 (PKSFILTERFACTORY FilterFactory,
03292 const KSFILTER_DESCRIPTOR *FilterDescriptor);
03293
03294 KSDDKAPI NTSTATUS NTAPI KsFilterFactoryAddCreateItem
03295 (PKSFILTERFACTORY FilterFactory, PWSTR RefString,
03296 PSECURITY_DESCRIPTOR SecurityDescriptor, ULONG CreateItemFlags);
03297
03298 KSDDKAPI NTSTATUS NTAPI KsFilterFactorySetDeviceClassesState
03299 (PKSFILTERFACTORY FilterFactory, BOOLEAN NewState);
03300
03301 KSDDKAPI PUNICODE_STRING NTAPI KsFilterFactoryGetSymbolicLink
03302 (PKSFILTERFACTORY FilterFactory);
03303
03304 KSDDKAPI void NTAPI KsAddEvent(PVOID Object, PKSEVENT_ENTRY EventEntry);
03305
03306 void __forceinline KsFilterAddEvent (PKSFILTER Filter, PKSEVENT_ENTRY EventEntry)
03307 {
03308 KsAddEvent(Filter, EventEntry);
03309 }
03310
03311 void __forceinline KsPinAddEvent (PKSPIN Pin, PKSEVENT_ENTRY EventEntry)
03312 {
03313 KsAddEvent(Pin, EventEntry);
03314 }
03315
03316 KSDDKAPI NTSTATUS NTAPI KsDefaultAddEventHandler
03317 (PIRP Irp, PKSEVENTDATA EventData, PKSEVENT_ENTRY EventEntry);
03318
03319 KSDDKAPI void NTAPI KsGenerateEvents
03320 (PVOID Object, const GUID *EventSet, ULONG EventId,
03321 ULONG DataSize, PVOID Data, PFNKSGENERATEEVENTCALLBACK CallBack,
03322 PVOID CallBackContext);
03323
03324 void __forceinline KsFilterGenerateEvents
03325 (PKSFILTER Filter, const GUID *EventSet, ULONG EventId,
03326 ULONG DataSize, PVOID Data, PFNKSGENERATEEVENTCALLBACK CallBack,
03327 PVOID CallBackContext)
03328 {
03329 KsGenerateEvents(Filter, EventSet, EventId, DataSize, Data, CallBack,
03330 CallBackContext);
03331 }
03332
03333 void __forceinline KsPinGenerateEvents
03334 (PKSPIN Pin, const GUID *EventSet, ULONG EventId,
03335 ULONG DataSize, PVOID Data, PFNKSGENERATEEVENTCALLBACK CallBack,
03336 PVOID CallBackContext)
03337 {
03338 KsGenerateEvents(Pin, EventSet, EventId, DataSize, Data, CallBack,
03339 CallBackContext);
03340 }
03341
03342 typedef enum {
03343 KSSTREAM_POINTER_STATE_UNLOCKED = 0,
03344 KSSTREAM_POINTER_STATE_LOCKED
03345 } KSSTREAM_POINTER_STATE;
03346
03347 KSDDKAPI NTSTATUS NTAPI KsPinGetAvailableByteCount
03348 (PKSPIN Pin, PLONG InputDataBytes, PLONG OutputBufferBytes);
03349
03350 KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetLeadingEdgeStreamPointer
03351 (PKSPIN Pin, KSSTREAM_POINTER_STATE State);
03352
03353 KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetTrailingEdgeStreamPointer
03354 (PKSPIN Pin, KSSTREAM_POINTER_STATE State);
03355
03356 KSDDKAPI NTSTATUS NTAPI KsStreamPointerSetStatusCode
03357 (PKSSTREAM_POINTER StreamPointer, NTSTATUS Status);
03358
03359 KSDDKAPI NTSTATUS NTAPI KsStreamPointerLock (PKSSTREAM_POINTER StreamPointer);
03360 KSDDKAPI void NTAPI KsStreamPointerUnlock(PKSSTREAM_POINTER StreamPointer, BOOLEAN Eject);
03361
03362 KSDDKAPI void NTAPI KsStreamPointerAdvanceOffsetsAndUnlock
03363 (PKSSTREAM_POINTER StreamPointer, ULONG InUsed, ULONG OutUsed,
03364 BOOLEAN Eject);
03365
03366 KSDDKAPI void NTAPI KsStreamPointerDelete (PKSSTREAM_POINTER StreamPointer);
03367
03368 KSDDKAPI NTSTATUS NTAPI KsStreamPointerClone
03369 (PKSSTREAM_POINTER StreamPointer, PFNKSSTREAMPOINTER CancelCallback,
03370 ULONG ContextSize, PKSSTREAM_POINTER *CloneStreamPointer);
03371
03372 KSDDKAPI NTSTATUS NTAPI KsStreamPointerAdvanceOffsets
03373 (PKSSTREAM_POINTER StreamPointer, ULONG InUsed, ULONG OutUsed,
03374 BOOLEAN Eject);
03375
03376 KSDDKAPI NTSTATUS NTAPI KsStreamPointerAdvance (PKSSTREAM_POINTER StreamPointer);
03377 KSDDKAPI PMDL NTAPI KsStreamPointerGetMdl (PKSSTREAM_POINTER StreamPointer);
03378
03379 KSDDKAPI PIRP NTAPI KsStreamPointerGetIrp
03380 (PKSSTREAM_POINTER StreamPointer, PBOOLEAN FirstFrameInIrp,
03381 PBOOLEAN LastFrameInIrp);
03382
03383 KSDDKAPI void NTAPI KsStreamPointerScheduleTimeout
03384 (PKSSTREAM_POINTER StreamPointer, PFNKSSTREAMPOINTER Callback,
03385 ULONGLONG Interval);
03386
03387 KSDDKAPI void NTAPI KsStreamPointerCancelTimeout (PKSSTREAM_POINTER StreamPointer);
03388 KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetFirstCloneStreamPointer (PKSPIN Pin);
03389
03390 KSDDKAPI PKSSTREAM_POINTER NTAPI KsStreamPointerGetNextClone
03391 (PKSSTREAM_POINTER StreamPointer);
03392
03393 KSDDKAPI NTSTATUS NTAPI KsPinHandshake(PKSPIN Pin, PKSHANDSHAKE In, PKSHANDSHAKE Out);
03394 KSDDKAPI void NTAPI KsCompletePendingRequest (PIRP Irp);
03395 KSDDKAPI KSOBJECTTYPE NTAPI KsGetObjectTypeFromIrp (PIRP Irp);
03396 KSDDKAPI PVOID NTAPI KsGetObjectFromFileObject (PFILE_OBJECT FileObject);
03397 KSDDKAPI KSOBJECTTYPE NTAPI KsGetObjectTypeFromFileObject (PFILE_OBJECT FileObject);
03398
03399 PKSFILTER __forceinline KsGetFilterFromFileObject (PFILE_OBJECT FileObject)
03400 {
03401 return (PKSFILTER) KsGetObjectFromFileObject(FileObject);
03402 }
03403
03404 PKSPIN __forceinline KsGetPinFromFileObject (PFILE_OBJECT FileObject)
03405 {
03406 return (PKSPIN) KsGetObjectFromFileObject(FileObject);
03407 }
03408
03409 KSDDKAPI PKSGATE NTAPI KsFilterGetAndGate (PKSFILTER Filter);
03410 KSDDKAPI void NTAPI KsFilterAcquireProcessingMutex (PKSFILTER Filter);
03411 KSDDKAPI void NTAPI KsFilterReleaseProcessingMutex (PKSFILTER Filter);
03412 KSDDKAPI void NTAPI KsFilterAttemptProcessing(PKSFILTER Filter, BOOLEAN Asynchronous);
03413 KSDDKAPI PKSGATE NTAPI KsPinGetAndGate(PKSPIN Pin);
03414 KSDDKAPI void NTAPI KsPinAttachAndGate(PKSPIN Pin, PKSGATE AndGate);
03415 KSDDKAPI void NTAPI KsPinAttachOrGate (PKSPIN Pin, PKSGATE OrGate);
03416 KSDDKAPI void NTAPI KsPinAcquireProcessingMutex (PKSPIN Pin);
03417 KSDDKAPI void NTAPI KsPinReleaseProcessingMutex (PKSPIN Pin);
03418 KSDDKAPI BOOLEAN NTAPI KsProcessPinUpdate (PKSPROCESSPIN ProcessPin);
03419
03420 KSDDKAPI void NTAPI KsPinGetCopyRelationships
03421 (PKSPIN Pin, PKSPIN *CopySource, PKSPIN *DelegateBranch);
03422
03423 KSDDKAPI void NTAPI KsPinAttemptProcessing(PKSPIN Pin, BOOLEAN Asynchronous);
03424 KSDDKAPI PVOID NTAPI KsGetParent (PVOID Object);
03425
03426 PKSDEVICE __forceinline KsFilterFactoryGetParentDevice (PKSFILTERFACTORY FilterFactory)
03427 {
03428 return (PKSDEVICE) KsGetParent((PVOID) FilterFactory);
03429 }
03430
03431 PKSFILTERFACTORY __forceinline KsFilterGetParentFilterFactory (PKSFILTER Filter)
03432 {
03433 return (PKSFILTERFACTORY) KsGetParent((PVOID) Filter);
03434 }
03435
03436 KSDDKAPI PKSFILTER NTAPI KsPinGetParentFilter (PKSPIN Pin);
03437 KSDDKAPI PVOID NTAPI KsGetFirstChild (PVOID Object);
03438
03439 PKSFILTERFACTORY __forceinline KsDeviceGetFirstChildFilterFactory (PKSDEVICE Device)
03440 {
03441 return (PKSFILTERFACTORY) KsGetFirstChild((PVOID) Device);
03442 }
03443
03444 PKSFILTER __forceinline KsFilterFactoryGetFirstChildFilter (PKSFILTERFACTORY FilterFactory)
03445 {
03446 return (PKSFILTER) KsGetFirstChild((PVOID) FilterFactory);
03447 }
03448
03449 KSDDKAPI ULONG NTAPI KsFilterGetChildPinCount(PKSFILTER Filter, ULONG PinId);
03450 KSDDKAPI PKSPIN NTAPI KsFilterGetFirstChildPin(PKSFILTER Filter, ULONG PinId);
03451 KSDDKAPI PVOID NTAPI KsGetNextSibling (PVOID Object);
03452 KSDDKAPI PKSPIN NTAPI KsPinGetNextSiblingPin (PKSPIN Pin);
03453
03454 PKSFILTERFACTORY __forceinline KsFilterFactoryGetNextSiblingFilterFactory
03455 (PKSFILTERFACTORY FilterFactory)
03456 {
03457 return (PKSFILTERFACTORY) KsGetNextSibling((PVOID) FilterFactory);
03458 }
03459
03460 PKSFILTER __forceinline KsFilterGetNextSiblingFilter (PKSFILTER Filter)
03461 {
03462 return (PKSFILTER) KsGetNextSibling((PVOID) Filter);
03463 }
03464
03465 KSDDKAPI PKSDEVICE NTAPI KsGetDevice (PVOID Object);
03466
03467 PKSDEVICE __forceinline KsFilterFactoryGetDevice (PKSFILTERFACTORY FilterFactory)
03468 {
03469 return KsGetDevice((PVOID) FilterFactory);
03470 }
03471
03472 PKSDEVICE __forceinline KsFilterGetDevice (PKSFILTER Filter)
03473 {
03474 return KsGetDevice((PVOID) Filter);
03475 }
03476
03477 PKSDEVICE __forceinline KsPinGetDevice (PKSPIN Pin)
03478 {
03479 return KsGetDevice((PVOID) Pin);
03480 }
03481
03482 KSDDKAPI PKSFILTER NTAPI KsGetFilterFromIrp (PIRP Irp);
03483 KSDDKAPI PKSPIN NTAPI KsGetPinFromIrp (PIRP Irp);
03484 KSDDKAPI ULONG NTAPI KsGetNodeIdFromIrp (PIRP Irp);
03485 KSDDKAPI void NTAPI KsAcquireControl (PVOID Object);
03486 KSDDKAPI void NTAPI KsReleaseControl (PVOID Object);
03487
03488 void __forceinline KsFilterAcquireControl (PKSFILTER Filter)
03489 {
03490 KsAcquireControl((PVOID) Filter);
03491 }
03492
03493 void __forceinline KsFilterReleaseControl (PKSFILTER Filter)
03494 {
03495 KsReleaseControl((PVOID) Filter);
03496 }
03497
03498 void __forceinline KsPinAcquireControl (PKSPIN Pin)
03499 {
03500 KsAcquireControl((PVOID) Pin);
03501 }
03502
03503 void __forceinline KsPinReleaseControl (PKSPIN Pin)
03504 {
03505 KsReleaseControl((PVOID) Pin);
03506 }
03507
03508 KSDDKAPI NTSTATUS NTAPI KsAddItemToObjectBag
03509 (KSOBJECT_BAG ObjectBag, PVOID Item, PFNKSFREE Free);
03510
03511 KSDDKAPI ULONG NTAPI KsRemoveItemFromObjectBag
03512 (KSOBJECT_BAG ObjectBag, PVOID Item, BOOLEAN Free);
03513
03514 #define KsDiscard(Object,Pointer) \
03515 KsRemoveItemFromObjectBag((Object)->Bag, (PVOID)(Pointer), TRUE)
03516
03517 KSDDKAPI NTSTATUS NTAPI KsAllocateObjectBag(PKSDEVICE Device, KSOBJECT_BAG *ObjectBag);
03518 KSDDKAPI void NTAPI KsFreeObjectBag (KSOBJECT_BAG ObjectBag);
03519
03520 KSDDKAPI NTSTATUS NTAPI KsCopyObjectBagItems
03521 (KSOBJECT_BAG ObjectBagDestination, KSOBJECT_BAG ObjectBagSource);
03522
03523 KSDDKAPI NTSTATUS NTAPI _KsEdit
03524 (KSOBJECT_BAG ObjectBag, PVOID *PointerToPointerToItem,
03525 ULONG NewSize, ULONG OldSize, ULONG Tag);
03526
03527 #define KsEdit(Object, PointerToPointer, Tag) \
03528 _KsEdit((Object)->Bag, (PVOID*)(PointerToPointer), \
03529 sizeof(**(PointerToPointer)), sizeof(**(PointerToPointer)), (Tag))
03530
03531 #define KsEditSized(Object, PointerToPointer, NewSize, OldSize, Tag) \
03532 _KsEdit((Object)->Bag, (PVOID*)(PointerToPointer), (NewSize), (OldSize), (Tag))
03533
03534 KSDDKAPI NTSTATUS NTAPI KsRegisterFilterWithNoKSPins
03535 (PDEVICE_OBJECT DeviceObject, const GUID *InterfaceClassGUID,
03536 ULONG PinCount, WINBOOL *PinDirection, KSPIN_MEDIUM *MediumList,
03537 GUID *CategoryList);
03538
03539 KSDDKAPI NTSTATUS NTAPI KsFilterCreatePinFactory
03540 (PKSFILTER Filter, const KSPIN_DESCRIPTOR_EX *const PinDescriptor,
03541 PULONG PinID);
03542
03543 KSDDKAPI NTSTATUS NTAPI KsFilterCreateNode
03544 (PKSFILTER Filter, const KSNODE_DESCRIPTOR *const NodeDescriptor,
03545 PULONG NodeID);
03546
03547 KSDDKAPI NTSTATUS NTAPI KsFilterAddTopologyConnections
03548 (PKSFILTER Filter, ULONG NewConnectionsCount,
03549 const KSTOPOLOGY_CONNECTION *const NewTopologyConnections);
03550
03551 KSDDKAPI NTSTATUS NTAPI KsPinGetConnectedPinInterface
03552 (PKSPIN Pin, const GUID *InterfaceId, PVOID *Interface);
03553
03554 KSDDKAPI PFILE_OBJECT NTAPI KsPinGetConnectedPinFileObject (PKSPIN Pin);
03555 KSDDKAPI PDEVICE_OBJECT NTAPI KsPinGetConnectedPinDeviceObject (PKSPIN Pin);
03556
03557 KSDDKAPI NTSTATUS NTAPI KsPinGetConnectedFilterInterface
03558 (PKSPIN Pin, const GUID *InterfaceId, PVOID *Interface);
03559
03560 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
03561 KSDDKAPI NTSTATUS NTAPI KsPinGetReferenceClockInterface
03562 (PKSPIN Pin, PIKSREFERENCECLOCK *Interface);
03563 #endif
03564
03565 KSDDKAPI VOID NTAPI KsPinSetPinClockTime(PKSPIN Pin, LONGLONG Time);
03566
03567 KSDDKAPI NTSTATUS NTAPI KsPinSubmitFrame
03568 (PKSPIN Pin, PVOID Data, ULONG Size,
03569 PKSSTREAM_HEADER StreamHeader, PVOID Context);
03570
03571 KSDDKAPI NTSTATUS NTAPI KsPinSubmitFrameMdl
03572 (PKSPIN Pin, PMDL Mdl, PKSSTREAM_HEADER StreamHeader,
03573 PVOID Context);
03574
03575 KSDDKAPI void NTAPI KsPinRegisterFrameReturnCallback
03576 (PKSPIN Pin, PFNKSPINFRAMERETURN FrameReturn);
03577
03578 KSDDKAPI void NTAPI KsPinRegisterIrpCompletionCallback
03579 (PKSPIN Pin, PFNKSPINIRPCOMPLETION IrpCompletion);
03580
03581 KSDDKAPI void NTAPI KsPinRegisterHandshakeCallback
03582 (PKSPIN Pin, PFNKSPINHANDSHAKE Handshake);
03583
03584 KSDDKAPI void NTAPI KsFilterRegisterPowerCallbacks
03585 (PKSFILTER Filter, PFNKSFILTERPOWER Sleep, PFNKSFILTERPOWER Wake);
03586
03587 KSDDKAPI void NTAPI KsPinRegisterPowerCallbacks
03588 (PKSPIN Pin, PFNKSPINPOWER Sleep, PFNKSPINPOWER Wake);
03589
03590 #if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
03591 KSDDKAPI PUNKNOWN NTAPI KsRegisterAggregatedClientUnknown
03592 (PVOID Object, PUNKNOWN ClientUnknown);
03593
03594 KSDDKAPI PUNKNOWN NTAPI KsGetOuterUnknown (PVOID Object);
03595
03596 PUNKNOWN __forceinline KsDeviceRegisterAggregatedClientUnknown
03597 (PKSDEVICE Device, PUNKNOWN ClientUnknown)
03598 {
03599 return KsRegisterAggregatedClientUnknown((PVOID)Device, ClientUnknown);
03600 }
03601
03602 PUNKNOWN __forceinline KsDeviceGetOuterUnknown (PKSDEVICE Device)
03603 {
03604 return KsGetOuterUnknown((PVOID) Device);
03605 }
03606
03607 PUNKNOWN __forceinline KsFilterFactoryRegisterAggregatedClientUnknown
03608 (PKSFILTERFACTORY FilterFactory, PUNKNOWN ClientUnknown)
03609 {
03610 return KsRegisterAggregatedClientUnknown((PVOID)FilterFactory, ClientUnknown);
03611 }
03612
03613 PUNKNOWN __forceinline KsFilterFactoryGetOuterUnknown (PKSFILTERFACTORY FilterFactory)
03614 {
03615 return KsGetOuterUnknown((PVOID)FilterFactory);
03616 }
03617
03618 PUNKNOWN __forceinline KsFilterRegisterAggregatedClientUnknown
03619 (PKSFILTER Filter, PUNKNOWN ClientUnknown)
03620 {
03621 return KsRegisterAggregatedClientUnknown((PVOID)Filter, ClientUnknown);
03622 }
03623
03624 PUNKNOWN __forceinline KsFilterGetOuterUnknown (PKSFILTER Filter)
03625 {
03626 return KsGetOuterUnknown((PVOID)Filter);
03627 }
03628
03629 PUNKNOWN __forceinline KsPinRegisterAggregatedClientUnknown
03630 (PKSPIN Pin, PUNKNOWN ClientUnknown)
03631 {
03632 return KsRegisterAggregatedClientUnknown((PVOID)Pin, ClientUnknown);
03633 }
03634
03635 PUNKNOWN __forceinline KsPinGetOuterUnknown (PKSPIN Pin)
03636 {
03637 return KsGetOuterUnknown((PVOID)Pin);
03638 }
03639 #endif
03640
03641 #else
03642
03643 #ifndef KS_NO_CREATE_FUNCTIONS
03644 KSDDKAPI DWORD WINAPI KsCreateAllocator(HANDLE ConnectionHandle,PKSALLOCATOR_FRAMING AllocatorFraming,PHANDLE AllocatorHandle);
03645 KSDDKAPI DWORD NTAPI KsCreateClock(HANDLE ConnectionHandle,PKSCLOCK_CREATE ClockCreate,PHANDLE ClockHandle);
03646 KSDDKAPI DWORD WINAPI KsCreatePin(HANDLE FilterHandle,PKSPIN_CONNECT Connect,ACCESS_MASK DesiredAccess,PHANDLE ConnectionHandle);
03647 KSDDKAPI DWORD WINAPI KsCreateTopologyNode(HANDLE ParentHandle,PKSNODE_CREATE NodeCreate,ACCESS_MASK DesiredAccess,PHANDLE NodeHandle);
03648 #endif
03649
03650 #endif
03651
03652 #ifdef __cplusplus
03653 }
03654 #endif
03655
03656 #define DENY_USERMODE_ACCESS(pIrp,CompleteRequest) \
03657 if(pIrp->RequestorMode!=KernelMode) { \
03658 pIrp->IoStatus.Information = 0; \
03659 pIrp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; \
03660 if(CompleteRequest) \
03661 IoCompleteRequest (pIrp,IO_NO_INCREMENT); \
03662 return STATUS_INVALID_DEVICE_REQUEST; \
03663 }
03664
03665 #endif
03666