PortAudio  2.0
ks.h
Go to the documentation of this file.
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 /* _NTRTL_ */
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 /* _NTDDK_ */
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 /* _NTDDK_ */
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 /* _NTDDK_ */
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 /* _NTDDK_ */
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 /* _NTDDK_ */
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 /* _NTDDK_ */
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 /* _NTDDK_ */
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 /* _NTDDK_ */
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 /* _NTDDK_ */
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 /* _NTDDK_ */
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 /* _NTDDK_ */
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 /* _NTDDK_ */
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 /* _NTDDK_ */
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 /* _IKsControl_ */
02883 #endif /* defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) */
02884 
02885 #endif /* _NTDDK_ */
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 /* defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) */
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 /* defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) */
03640 
03641 #else /* _NTDDK_ */
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 /* _NTDDK_ */
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 /* _KS_ */
03666 

Generated for PortAudio by  doxygen1.7.6.1