| 
							- /**
 -  * This file has no copyright assigned and is placed in the Public Domain.
 -  * This file is part of the w64 mingw-runtime package.
 -  * No warranty is given.
 -  */
 - #ifndef _KS_
 - #define _KS_
 - 
 - #include <winioctl.h>
 - 
 - #if __GNUC__ >= 3
 -  # pragma GCC system_header
 - #endif
 - 
 - #ifndef __MINGW_EXTENSION
 -  # if defined(__GNUC__) || defined(__GNUG__)
 -   #  define __MINGW_EXTENSION __extension__
 -  # else
 -   #  define __MINGW_EXTENSION
 -  # endif
 - #endif
 - 
 - #ifdef __TCS__
 -  # define _KS_NO_ANONYMOUS_STRUCTURES_ 1
 - #endif
 - 
 - #ifdef  _KS_NO_ANONYMOUS_STRUCTURES_
 -  # define _KS_ANON_STRUCT(X) struct X
 - #else
 -  # define _KS_ANON_STRUCT(X) __MINGW_EXTENSION struct
 - #endif
 - 
 - #ifndef _NTRTL_
 -  # ifndef DEFINE_GUIDEX
 -   #  define DEFINE_GUIDEX(name) EXTERN_C const GUID name
 -  # endif
 -  # ifndef STATICGUIDOF
 -   #  define STATICGUIDOF(guid) STATIC_ ## guid
 -  # endif
 - #endif /* _NTRTL_ */
 - 
 - #ifndef SIZEOF_ARRAY
 -  # define SIZEOF_ARRAY(ar) (sizeof(ar) / sizeof((ar)[0]))
 - #endif
 - 
 - #define DEFINE_GUIDSTRUCT(g, n) DEFINE_GUIDEX(n)
 - #define DEFINE_GUIDNAMED(n) n
 - 
 - #define STATIC_GUID_NULL                        \
 -   0x00000000L, 0x0000, 0x0000, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
 - 
 - DEFINE_GUIDSTRUCT("00000000-0000-0000-0000-000000000000", GUID_NULL);
 - #define GUID_NULL DEFINE_GUIDNAMED(GUID_NULL)
 - 
 - #define IOCTL_KS_PROPERTY CTL_CODE(FILE_DEVICE_KS, 0x000, METHOD_NEITHER, FILE_ANY_ACCESS)
 - #define IOCTL_KS_ENABLE_EVENT CTL_CODE(FILE_DEVICE_KS, 0x001, METHOD_NEITHER, FILE_ANY_ACCESS)
 - #define IOCTL_KS_DISABLE_EVENT CTL_CODE(FILE_DEVICE_KS, 0x002, METHOD_NEITHER, FILE_ANY_ACCESS)
 - #define IOCTL_KS_METHOD CTL_CODE(FILE_DEVICE_KS, 0x003, METHOD_NEITHER, FILE_ANY_ACCESS)
 - #define IOCTL_KS_WRITE_STREAM CTL_CODE(FILE_DEVICE_KS, 0x004, METHOD_NEITHER, FILE_WRITE_ACCESS)
 - #define IOCTL_KS_READ_STREAM CTL_CODE(FILE_DEVICE_KS, 0x005, METHOD_NEITHER, FILE_READ_ACCESS)
 - #define IOCTL_KS_RESET_STATE CTL_CODE(FILE_DEVICE_KS, 0x006, METHOD_NEITHER, FILE_ANY_ACCESS)
 - 
 - typedef enum
 - {
 -   KSRESET_BEGIN,
 -   KSRESET_END
 - }KSRESET;
 - 
 - typedef enum
 - {
 -   KSSTATE_STOP,
 -   KSSTATE_ACQUIRE,
 -   KSSTATE_PAUSE,
 -   KSSTATE_RUN
 - }KSSTATE, * PKSSTATE;
 - 
 - #define KSPRIORITY_LOW 0x00000001
 - #define KSPRIORITY_NORMAL 0x40000000
 - #define KSPRIORITY_HIGH 0x80000000
 - #define KSPRIORITY_EXCLUSIVE 0xFFFFFFFF
 - 
 - typedef struct
 - {
 -   ULONG PriorityClass;
 -   ULONG PrioritySubClass;
 - }KSPRIORITY, * PKSPRIORITY;
 - 
 - typedef struct
 - {
 -   __MINGW_EXTENSION union
 -   {
 -     _KS_ANON_STRUCT(_IDENTIFIER)
 -     {
 -       GUID Set;
 -       ULONG Id;
 -       ULONG Flags;
 -     };
 -     LONGLONG Alignment;
 -   };
 - }KSIDENTIFIER, * PKSIDENTIFIER;
 - 
 - typedef KSIDENTIFIER KSPROPERTY, * PKSPROPERTY, KSMETHOD, * PKSMETHOD, KSEVENT, * PKSEVENT;
 - 
 - #define KSMETHOD_TYPE_NONE 0x00000000
 - #define KSMETHOD_TYPE_READ 0x00000001
 - #define KSMETHOD_TYPE_WRITE 0x00000002
 - #define KSMETHOD_TYPE_MODIFY 0x00000003
 - #define KSMETHOD_TYPE_SOURCE 0x00000004
 - 
 - #define KSMETHOD_TYPE_SEND 0x00000001
 - #define KSMETHOD_TYPE_SETSUPPORT 0x00000100
 - #define KSMETHOD_TYPE_BASICSUPPORT 0x00000200
 - 
 - #define KSMETHOD_TYPE_TOPOLOGY 0x10000000
 - 
 - #define KSPROPERTY_TYPE_GET 0x00000001
 - #define KSPROPERTY_TYPE_SET 0x00000002
 - #define KSPROPERTY_TYPE_SETSUPPORT 0x00000100
 - #define KSPROPERTY_TYPE_BASICSUPPORT 0x00000200
 - #define KSPROPERTY_TYPE_RELATIONS 0x00000400
 - #define KSPROPERTY_TYPE_SERIALIZESET 0x00000800
 - #define KSPROPERTY_TYPE_UNSERIALIZESET 0x00001000
 - #define KSPROPERTY_TYPE_SERIALIZERAW 0x00002000
 - #define KSPROPERTY_TYPE_UNSERIALIZERAW 0x00004000
 - #define KSPROPERTY_TYPE_SERIALIZESIZE 0x00008000
 - #define KSPROPERTY_TYPE_DEFAULTVALUES 0x00010000
 - 
 - #define KSPROPERTY_TYPE_TOPOLOGY 0x10000000
 - 
 - typedef struct
 - {
 -   KSPROPERTY Property;
 -   ULONG NodeId;
 -   ULONG Reserved;
 - }KSP_NODE, * PKSP_NODE;
 - 
 - typedef struct
 - {
 -   KSMETHOD Method;
 -   ULONG NodeId;
 -   ULONG Reserved;
 - }KSM_NODE, * PKSM_NODE;
 - 
 - typedef struct
 - {
 -   KSEVENT Event;
 -   ULONG NodeId;
 -   ULONG Reserved;
 - }KSE_NODE, * PKSE_NODE;
 - 
 - #define STATIC_KSPROPTYPESETID_General                  \
 -   0x97E99BA0L, 0xBDEA, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
 - DEFINE_GUIDSTRUCT("97E99BA0-BDEA-11CF-A5D6-28DB04C10000", KSPROPTYPESETID_General);
 - #define KSPROPTYPESETID_General DEFINE_GUIDNAMED(KSPROPTYPESETID_General)
 - 
 - typedef struct
 - {
 -   ULONG Size;
 -   ULONG Count;
 - }KSMULTIPLE_ITEM, * PKSMULTIPLE_ITEM;
 - 
 - typedef struct
 - {
 -   ULONG AccessFlags;
 -   ULONG DescriptionSize;
 -   KSIDENTIFIER PropTypeSet;
 -   ULONG MembersListCount;
 -   ULONG Reserved;
 - }KSPROPERTY_DESCRIPTION, * PKSPROPERTY_DESCRIPTION;
 - 
 - #define KSPROPERTY_MEMBER_RANGES 0x00000001
 - #define KSPROPERTY_MEMBER_STEPPEDRANGES 0x00000002
 - #define KSPROPERTY_MEMBER_VALUES 0x00000003
 - 
 - #define KSPROPERTY_MEMBER_FLAG_DEFAULT 0x00000001
 - #define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_MULTICHANNEL 0x00000002
 - #define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_UNIFORM 0x00000004
 - 
 - typedef struct
 - {
 -   ULONG MembersFlags;
 -   ULONG MembersSize;
 -   ULONG MembersCount;
 -   ULONG Flags;
 - }KSPROPERTY_MEMBERSHEADER, * PKSPROPERTY_MEMBERSHEADER;
 - 
 - typedef union
 - {
 -   _KS_ANON_STRUCT(_SIGNED)
 -   {
 -     LONG SignedMinimum;
 -     LONG SignedMaximum;
 -   };
 -   _KS_ANON_STRUCT(_UNSIGNED)
 -   {
 -     ULONG UnsignedMinimum;
 -     ULONG UnsignedMaximum;
 -   };
 - }KSPROPERTY_BOUNDS_LONG, * PKSPROPERTY_BOUNDS_LONG;
 - 
 - typedef union
 - {
 -   _KS_ANON_STRUCT(_SIGNED64)
 -   {
 -     LONGLONG SignedMinimum;
 -     LONGLONG SignedMaximum;
 -   };
 -   _KS_ANON_STRUCT(_UNSIGNED64)
 -   {
 -     DWORDLONG UnsignedMinimum;
 -     DWORDLONG UnsignedMaximum;
 -   };
 - }KSPROPERTY_BOUNDS_LONGLONG, * PKSPROPERTY_BOUNDS_LONGLONG;
 - 
 - typedef struct
 - {
 -   ULONG SteppingDelta;
 -   ULONG Reserved;
 -   KSPROPERTY_BOUNDS_LONG Bounds;
 - }KSPROPERTY_STEPPING_LONG, * PKSPROPERTY_STEPPING_LONG;
 - 
 - typedef struct
 - {
 -   DWORDLONG SteppingDelta;
 -   KSPROPERTY_BOUNDS_LONGLONG Bounds;
 - }KSPROPERTY_STEPPING_LONGLONG, * PKSPROPERTY_STEPPING_LONGLONG;
 - 
 - #if defined(_NTDDK_)
 - typedef struct _KSDEVICE_DESCRIPTOR KSDEVICE_DESCRIPTOR, * PKSDEVICE_DESCRIPTOR;
 - typedef struct _KSDEVICE_DISPATCH KSDEVICE_DISPATCH, * PKSDEVICE_DISPATCH;
 - typedef struct _KSDEVICE KSDEVICE, * PKSDEVICE;
 - typedef struct _KSFILTERFACTORY KSFILTERFACTORY, * PKSFILTERFACTORY;
 - typedef struct _KSFILTER_DESCRIPTOR KSFILTER_DESCRIPTOR, * PKSFILTER_DESCRIPTOR;
 - typedef struct _KSFILTER_DISPATCH KSFILTER_DISPATCH, * PKSFILTER_DISPATCH;
 - typedef struct _KSFILTER KSFILTER, * PKSFILTER;
 - typedef struct _KSPIN_DESCRIPTOR_EX KSPIN_DESCRIPTOR_EX, * PKSPIN_DESCRIPTOR_EX;
 - typedef struct _KSPIN_DISPATCH KSPIN_DISPATCH, * PKSPIN_DISPATCH;
 - typedef struct _KSCLOCK_DISPATCH KSCLOCK_DISPATCH, * PKSCLOCK_DISPATCH;
 - typedef struct _KSALLOCATOR_DISPATCH KSALLOCATOR_DISPATCH, * PKSALLOCATOR_DISPATCH;
 - typedef struct _KSPIN KSPIN, * PKSPIN;
 - typedef struct _KSNODE_DESCRIPTOR KSNODE_DESCRIPTOR, * PKSNODE_DESCRIPTOR;
 - typedef struct _KSSTREAM_POINTER_OFFSET KSSTREAM_POINTER_OFFSET, * PKSSTREAM_POINTER_OFFSET;
 - typedef struct _KSSTREAM_POINTER KSSTREAM_POINTER, * PKSSTREAM_POINTER;
 - typedef struct _KSMAPPING KSMAPPING, * PKSMAPPING;
 - typedef struct _KSPROCESSPIN KSPROCESSPIN, * PKSPROCESSPIN;
 - typedef struct _KSPROCESSPIN_INDEXENTRY KSPROCESSPIN_INDEXENTRY, * PKSPROCESSPIN_INDEXENTRY;
 - #endif /* _NTDDK_ */
 - 
 - typedef PVOID PKSWORKER;
 - 
 - typedef struct
 - {
 -   ULONG NotificationType;
 -   __MINGW_EXTENSION union
 -   {
 -     struct
 -     {
 -       HANDLE Event;
 -       ULONG_PTR Reserved[2];
 -     }EventHandle;
 -     struct
 -     {
 -       HANDLE Semaphore;
 -       ULONG Reserved;
 -       LONG Adjustment;
 -     }SemaphoreHandle;
 - #if defined(_NTDDK_)
 -     struct
 -     {
 -       PVOID Event;
 -       KPRIORITY Increment;
 -       ULONG_PTR Reserved;
 -     }EventObject;
 -     struct
 -     {
 -       PVOID Semaphore;
 -       KPRIORITY Increment;
 -       LONG Adjustment;
 -     }SemaphoreObject;
 -     struct
 -     {
 -       PKDPC Dpc;
 -       ULONG ReferenceCount;
 -       ULONG_PTR Reserved;
 -     }Dpc;
 -     struct
 -     {
 -       PWORK_QUEUE_ITEM WorkQueueItem;
 -       WORK_QUEUE_TYPE WorkQueueType;
 -       ULONG_PTR Reserved;
 -     }WorkItem;
 -     struct
 -     {
 -       PWORK_QUEUE_ITEM WorkQueueItem;
 -       PKSWORKER KsWorkerObject;
 -       ULONG_PTR Reserved;
 -     }KsWorkItem;
 - #endif /* _NTDDK_ */
 -     struct
 -     {
 -       PVOID Unused;
 -       LONG_PTR Alignment[2];
 -     }Alignment;
 -   };
 - }KSEVENTDATA, * PKSEVENTDATA;
 - 
 - #define KSEVENTF_EVENT_HANDLE 0x00000001
 - #define KSEVENTF_SEMAPHORE_HANDLE 0x00000002
 - #if defined(_NTDDK_)
 -  # define KSEVENTF_EVENT_OBJECT 0x00000004
 -  # define KSEVENTF_SEMAPHORE_OBJECT 0x00000008
 -  # define KSEVENTF_DPC 0x00000010
 -  # define KSEVENTF_WORKITEM 0x00000020
 -  # define KSEVENTF_KSWORKITEM 0x00000080
 - #endif /* _NTDDK_ */
 - 
 - #define KSEVENT_TYPE_ENABLE 0x00000001
 - #define KSEVENT_TYPE_ONESHOT 0x00000002
 - #define KSEVENT_TYPE_ENABLEBUFFERED 0x00000004
 - #define KSEVENT_TYPE_SETSUPPORT 0x00000100
 - #define KSEVENT_TYPE_BASICSUPPORT 0x00000200
 - #define KSEVENT_TYPE_QUERYBUFFER 0x00000400
 - 
 - #define KSEVENT_TYPE_TOPOLOGY 0x10000000
 - 
 - typedef struct
 - {
 -   KSEVENT Event;
 -   PKSEVENTDATA EventData;
 -   PVOID Reserved;
 - }KSQUERYBUFFER, * PKSQUERYBUFFER;
 - 
 - typedef struct
 - {
 -   ULONG Size;
 -   ULONG Flags;
 -   __MINGW_EXTENSION union
 -   {
 -     HANDLE ObjectHandle;
 -     PVOID ObjectPointer;
 -   };
 -   PVOID Reserved;
 -   KSEVENT Event;
 -   KSEVENTDATA EventData;
 - }KSRELATIVEEVENT;
 - 
 - #define KSRELATIVEEVENT_FLAG_HANDLE 0x00000001
 - #define KSRELATIVEEVENT_FLAG_POINTER 0x00000002
 - 
 - typedef struct
 - {
 -   KSEVENTDATA EventData;
 -   LONGLONG MarkTime;
 - }KSEVENT_TIME_MARK, * PKSEVENT_TIME_MARK;
 - 
 - typedef struct
 - {
 -   KSEVENTDATA EventData;
 -   LONGLONG TimeBase;
 -   LONGLONG Interval;
 - }KSEVENT_TIME_INTERVAL, * PKSEVENT_TIME_INTERVAL;
 - 
 - typedef struct
 - {
 -   LONGLONG TimeBase;
 -   LONGLONG Interval;
 - }KSINTERVAL, * PKSINTERVAL;
 - 
 - #define STATIC_KSPROPSETID_General                  \
 -   0x1464EDA5L, 0x6A8F, 0x11D1, 0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
 - DEFINE_GUIDSTRUCT("1464EDA5-6A8F-11D1-9AA7-00A0C9223196", KSPROPSETID_General);
 - #define KSPROPSETID_General DEFINE_GUIDNAMED(KSPROPSETID_General)
 - 
 - typedef enum
 - {
 -   KSPROPERTY_GENERAL_COMPONENTID
 - }KSPROPERTY_GENERAL;
 - 
 - typedef struct
 - {
 -   GUID Manufacturer;
 -   GUID Product;
 -   GUID Component;
 -   GUID Name;
 -   ULONG Version;
 -   ULONG Revision;
 - }KSCOMPONENTID, * PKSCOMPONENTID;
 - 
 - #define DEFINE_KSPROPERTY_ITEM_GENERAL_COMPONENTID(Handler)     \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_GENERAL_COMPONENTID,     \
 -     (Handler),              \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(KSCOMPONENTID),          \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define STATIC_KSMETHODSETID_StreamIo   \
 -   0x65D003CAL, 0x1523, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
 - DEFINE_GUIDSTRUCT("65D003CA-1523-11D2-B27A-00A0C9223196", KSMETHODSETID_StreamIo);
 - #define KSMETHODSETID_StreamIo DEFINE_GUIDNAMED(KSMETHODSETID_StreamIo)
 - 
 - typedef enum
 - {
 -   KSMETHOD_STREAMIO_READ,
 -   KSMETHOD_STREAMIO_WRITE
 - }KSMETHOD_STREAMIO;
 - 
 - #define DEFINE_KSMETHOD_ITEM_STREAMIO_READ(Handler)         \
 -   DEFINE_KSMETHOD_ITEM(                       \
 -     KSMETHOD_STREAMIO_READ,         \
 -     KSMETHOD_TYPE_WRITE,            \
 -     (Handler),              \
 -     sizeof(KSMETHOD),           \
 -     0,                  \
 -     NULL)
 - 
 - #define DEFINE_KSMETHOD_ITEM_STREAMIO_WRITE(Handler)            \
 -   DEFINE_KSMETHOD_ITEM(                       \
 -     KSMETHOD_STREAMIO_WRITE,        \
 -     KSMETHOD_TYPE_READ,         \
 -     (Handler),              \
 -     sizeof(KSMETHOD),           \
 -     0,                  \
 -     NULL)
 - 
 - #define STATIC_KSPROPSETID_MediaSeeking                 \
 -   0xEE904F0CL, 0xD09B, 0x11D0, 0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
 - DEFINE_GUIDSTRUCT("EE904F0C-D09B-11D0-ABE9-00A0C9223196", KSPROPSETID_MediaSeeking);
 - #define KSPROPSETID_MediaSeeking DEFINE_GUIDNAMED(KSPROPSETID_MediaSeeking)
 - 
 - typedef enum
 - {
 -   KSPROPERTY_MEDIASEEKING_CAPABILITIES,
 -   KSPROPERTY_MEDIASEEKING_FORMATS,
 -   KSPROPERTY_MEDIASEEKING_TIMEFORMAT,
 -   KSPROPERTY_MEDIASEEKING_POSITION,
 -   KSPROPERTY_MEDIASEEKING_STOPPOSITION,
 -   KSPROPERTY_MEDIASEEKING_POSITIONS,
 -   KSPROPERTY_MEDIASEEKING_DURATION,
 -   KSPROPERTY_MEDIASEEKING_AVAILABLE,
 -   KSPROPERTY_MEDIASEEKING_PREROLL,
 -   KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT
 - }KSPROPERTY_MEDIASEEKING;
 - 
 - typedef enum
 - {
 -   KS_SEEKING_NoPositioning,
 -   KS_SEEKING_AbsolutePositioning,
 -   KS_SEEKING_RelativePositioning,
 -   KS_SEEKING_IncrementalPositioning,
 -   KS_SEEKING_PositioningBitsMask = 0x3,
 -   KS_SEEKING_SeekToKeyFrame,
 -   KS_SEEKING_ReturnTime = 0x8
 - }KS_SEEKING_FLAGS;
 - 
 - typedef enum
 - {
 -   KS_SEEKING_CanSeekAbsolute = 0x1,
 -   KS_SEEKING_CanSeekForwards = 0x2,
 -   KS_SEEKING_CanSeekBackwards = 0x4,
 -   KS_SEEKING_CanGetCurrentPos = 0x8,
 -   KS_SEEKING_CanGetStopPos = 0x10,
 -   KS_SEEKING_CanGetDuration = 0x20,
 -   KS_SEEKING_CanPlayBackwards = 0x40
 - }KS_SEEKING_CAPABILITIES;
 - 
 - typedef struct
 - {
 -   LONGLONG Current;
 -   LONGLONG Stop;
 -   KS_SEEKING_FLAGS CurrentFlags;
 -   KS_SEEKING_FLAGS StopFlags;
 - }KSPROPERTY_POSITIONS, * PKSPROPERTY_POSITIONS;
 - 
 - typedef struct
 - {
 -   LONGLONG Earliest;
 -   LONGLONG Latest;
 - }KSPROPERTY_MEDIAAVAILABLE, * PKSPROPERTY_MEDIAAVAILABLE;
 - 
 - typedef struct
 - {
 -   KSPROPERTY Property;
 -   GUID SourceFormat;
 -   GUID TargetFormat;
 -   LONGLONG Time;
 - }KSP_TIMEFORMAT, * PKSP_TIMEFORMAT;
 - 
 - #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CAPABILITIES(Handler)   \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_MEDIASEEKING_CAPABILITIES,   \
 -     (Handler),              \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(KS_SEEKING_CAPABILITIES),    \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_FORMATS(Handler)        \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_MEDIASEEKING_FORMATS,    \
 -     (Handler),              \
 -     sizeof(KSPROPERTY),         \
 -     0,                  \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_TIMEFORMAT(GetHandler, SetHandler) \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_MEDIASEEKING_TIMEFORMAT, \
 -     (GetHandler),               \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(GUID),               \
 -     (SetHandler),               \
 -     NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITION(Handler)       \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_MEDIASEEKING_POSITION,   \
 -     (Handler),              \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(LONGLONG),           \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_STOPPOSITION(Handler)   \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_MEDIASEEKING_STOPPOSITION,   \
 -     (Handler),              \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(LONGLONG),           \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITIONS(Handler)      \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_MEDIASEEKING_POSITIONS,  \
 -     NULL,                   \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(KSPROPERTY_POSITIONS),       \
 -     (Handler),              \
 -     NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_DURATION(Handler)       \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_MEDIASEEKING_DURATION,   \
 -     (Handler),              \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(LONGLONG),           \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_AVAILABLE(Handler)      \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_MEDIASEEKING_AVAILABLE,  \
 -     (Handler),              \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(KSPROPERTY_MEDIAAVAILABLE),  \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_PREROLL(Handler)        \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_MEDIASEEKING_PREROLL,    \
 -     (Handler),              \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(LONGLONG),           \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CONVERTTIMEFORMAT(Handler)  \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT, \
 -     (Handler),              \
 -     sizeof(KSP_TIMEFORMAT),         \
 -     sizeof(LONGLONG),           \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define STATIC_KSPROPSETID_Topology                 \
 -   0x720D4AC0L, 0x7533, 0x11D0, { 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 }
 - DEFINE_GUIDSTRUCT("720D4AC0-7533-11D0-A5D6-28DB04C10000", KSPROPSETID_Topology);
 - #define KSPROPSETID_Topology DEFINE_GUIDNAMED(KSPROPSETID_Topology)
 - 
 - typedef enum
 - {
 -   KSPROPERTY_TOPOLOGY_CATEGORIES,
 -   KSPROPERTY_TOPOLOGY_NODES,
 -   KSPROPERTY_TOPOLOGY_CONNECTIONS,
 -   KSPROPERTY_TOPOLOGY_NAME
 - }KSPROPERTY_TOPOLOGY;
 - 
 - #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler)     \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_TOPOLOGY_CATEGORIES,     \
 -     (Handler),              \
 -     sizeof(KSPROPERTY),         \
 -     0,                  \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler)          \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_TOPOLOGY_NODES,      \
 -     (Handler),              \
 -     sizeof(KSPROPERTY),         \
 -     0,                  \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler)        \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_TOPOLOGY_CONNECTIONS,    \
 -     (Handler),              \
 -     sizeof(KSPROPERTY),         \
 -     0,                  \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)           \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_TOPOLOGY_NAME,       \
 -     (Handler),              \
 -     sizeof(KSP_NODE),           \
 -     0,                  \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_TOPOLOGYSET(TopologySet, Handler)      \
 -   DEFINE_KSPROPERTY_TABLE(TopologySet) {                  \
 -     DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler),        \
 -     DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler),         \
 -     DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler),       \
 -     DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)           \
 -   }
 - 
 - #define STATIC_KSCATEGORY_BRIDGE                    \
 -   0x085AFF00L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
 - DEFINE_GUIDSTRUCT("085AFF00-62CE-11CF-A5D6-28DB04C10000", KSCATEGORY_BRIDGE);
 - #define KSCATEGORY_BRIDGE DEFINE_GUIDNAMED(KSCATEGORY_BRIDGE)
 - 
 - #define STATIC_KSCATEGORY_CAPTURE                   \
 -   0x65E8773DL, 0x8F56, 0x11D0, { 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 }
 - DEFINE_GUIDSTRUCT("65E8773D-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_CAPTURE);
 - #define KSCATEGORY_CAPTURE DEFINE_GUIDNAMED(KSCATEGORY_CAPTURE)
 - 
 - #define STATIC_KSCATEGORY_RENDER                    \
 -   0x65E8773EL, 0x8F56, 0x11D0, { 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 }
 - DEFINE_GUIDSTRUCT("65E8773E-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_RENDER);
 - #define KSCATEGORY_RENDER DEFINE_GUIDNAMED(KSCATEGORY_RENDER)
 - 
 - #define STATIC_KSCATEGORY_MIXER                     \
 -   0xAD809C00L, 0x7B88, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
 - DEFINE_GUIDSTRUCT("AD809C00-7B88-11D0-A5D6-28DB04C10000", KSCATEGORY_MIXER);
 - #define KSCATEGORY_MIXER DEFINE_GUIDNAMED(KSCATEGORY_MIXER)
 - 
 - #define STATIC_KSCATEGORY_SPLITTER                  \
 -   0x0A4252A0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
 - DEFINE_GUIDSTRUCT("0A4252A0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_SPLITTER);
 - #define KSCATEGORY_SPLITTER DEFINE_GUIDNAMED(KSCATEGORY_SPLITTER)
 - 
 - #define STATIC_KSCATEGORY_DATACOMPRESSOR                \
 -   0x1E84C900L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
 - DEFINE_GUIDSTRUCT("1E84C900-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATACOMPRESSOR);
 - #define KSCATEGORY_DATACOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATACOMPRESSOR)
 - 
 - #define STATIC_KSCATEGORY_DATADECOMPRESSOR              \
 -   0x2721AE20L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
 - DEFINE_GUIDSTRUCT("2721AE20-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATADECOMPRESSOR);
 - #define KSCATEGORY_DATADECOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATADECOMPRESSOR)
 - 
 - #define STATIC_KSCATEGORY_DATATRANSFORM                 \
 -   0x2EB07EA0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
 - DEFINE_GUIDSTRUCT("2EB07EA0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATATRANSFORM);
 - #define KSCATEGORY_DATATRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_DATATRANSFORM)
 - 
 - #define STATIC_KSCATEGORY_COMMUNICATIONSTRANSFORM           \
 -   0xCF1DDA2CL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
 - DEFINE_GUIDSTRUCT("CF1DDA2C-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_COMMUNICATIONSTRANSFORM);
 - #define KSCATEGORY_COMMUNICATIONSTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_COMMUNICATIONSTRANSFORM)
 - 
 - #define STATIC_KSCATEGORY_INTERFACETRANSFORM                \
 -   0xCF1DDA2DL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
 - DEFINE_GUIDSTRUCT("CF1DDA2D-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_INTERFACETRANSFORM);
 - #define KSCATEGORY_INTERFACETRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_INTERFACETRANSFORM)
 - 
 - #define STATIC_KSCATEGORY_MEDIUMTRANSFORM               \
 -   0xCF1DDA2EL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
 - DEFINE_GUIDSTRUCT("CF1DDA2E-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_MEDIUMTRANSFORM);
 - #define KSCATEGORY_MEDIUMTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_MEDIUMTRANSFORM)
 - 
 - #define STATIC_KSCATEGORY_FILESYSTEM                    \
 -   0x760FED5EL, 0x9357, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
 - DEFINE_GUIDSTRUCT("760FED5E-9357-11D0-A3CC-00A0C9223196", KSCATEGORY_FILESYSTEM);
 - #define KSCATEGORY_FILESYSTEM DEFINE_GUIDNAMED(KSCATEGORY_FILESYSTEM)
 - 
 - #define STATIC_KSCATEGORY_CLOCK                     \
 -   0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
 - DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000", KSCATEGORY_CLOCK);
 - #define KSCATEGORY_CLOCK DEFINE_GUIDNAMED(KSCATEGORY_CLOCK)
 - 
 - #define STATIC_KSCATEGORY_PROXY                     \
 -   0x97EBAACAL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
 - DEFINE_GUIDSTRUCT("97EBAACA-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_PROXY);
 - #define KSCATEGORY_PROXY DEFINE_GUIDNAMED(KSCATEGORY_PROXY)
 - 
 - #define STATIC_KSCATEGORY_QUALITY                   \
 -   0x97EBAACBL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
 - DEFINE_GUIDSTRUCT("97EBAACB-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_QUALITY);
 - #define KSCATEGORY_QUALITY DEFINE_GUIDNAMED(KSCATEGORY_QUALITY)
 - 
 - typedef struct
 - {
 -   ULONG FromNode;
 -   ULONG FromNodePin;
 -   ULONG ToNode;
 -   ULONG ToNodePin;
 - }KSTOPOLOGY_CONNECTION, * PKSTOPOLOGY_CONNECTION;
 - 
 - typedef struct
 - {
 -   ULONG CategoriesCount;
 -   const GUID* Categories;
 -   ULONG TopologyNodesCount;
 -   const GUID* TopologyNodes;
 -   ULONG TopologyConnectionsCount;
 -   const KSTOPOLOGY_CONNECTION* TopologyConnections;
 -   const GUID* TopologyNodesNames;
 -   ULONG Reserved;
 - }KSTOPOLOGY, * PKSTOPOLOGY;
 - 
 - #define KSFILTER_NODE ((ULONG)-1)
 - #define KSALL_NODES ((ULONG)-1)
 - 
 - typedef struct
 - {
 -   ULONG CreateFlags;
 -   ULONG Node;
 - }KSNODE_CREATE, * PKSNODE_CREATE;
 - 
 - #define STATIC_KSTIME_FORMAT_NONE STATIC_GUID_NULL
 - #define KSTIME_FORMAT_NONE GUID_NULL
 - 
 - #define STATIC_KSTIME_FORMAT_FRAME                  \
 -   0x7b785570L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
 - DEFINE_GUIDSTRUCT("7b785570-8c82-11cf-bc0c-00aa00ac74f6", KSTIME_FORMAT_FRAME);
 - #define KSTIME_FORMAT_FRAME DEFINE_GUIDNAMED(KSTIME_FORMAT_FRAME)
 - 
 - #define STATIC_KSTIME_FORMAT_BYTE                   \
 -   0x7b785571L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
 - DEFINE_GUIDSTRUCT("7b785571-8c82-11cf-bc0c-00aa00ac74f6", KSTIME_FORMAT_BYTE);
 - #define KSTIME_FORMAT_BYTE DEFINE_GUIDNAMED(KSTIME_FORMAT_BYTE)
 - 
 - #define STATIC_KSTIME_FORMAT_SAMPLE                 \
 -   0x7b785572L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
 - DEFINE_GUIDSTRUCT("7b785572-8c82-11cf-bc0c-00aa00ac74f6", KSTIME_FORMAT_SAMPLE);
 - #define KSTIME_FORMAT_SAMPLE DEFINE_GUIDNAMED(KSTIME_FORMAT_SAMPLE)
 - 
 - #define STATIC_KSTIME_FORMAT_FIELD                  \
 -   0x7b785573L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
 - DEFINE_GUIDSTRUCT("7b785573-8c82-11cf-bc0c-00aa00ac74f6", KSTIME_FORMAT_FIELD);
 - #define KSTIME_FORMAT_FIELD DEFINE_GUIDNAMED(KSTIME_FORMAT_FIELD)
 - 
 - #define STATIC_KSTIME_FORMAT_MEDIA_TIME                 \
 -   0x7b785574L, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6
 - DEFINE_GUIDSTRUCT("7b785574-8c82-11cf-bc0c-00aa00ac74f6", KSTIME_FORMAT_MEDIA_TIME);
 - #define KSTIME_FORMAT_MEDIA_TIME DEFINE_GUIDNAMED(KSTIME_FORMAT_MEDIA_TIME)
 - 
 - typedef KSIDENTIFIER KSPIN_INTERFACE, * PKSPIN_INTERFACE;
 - 
 - #define STATIC_KSINTERFACESETID_Standard                \
 -   0x1A8766A0L, 0x62CE, 0x11CF, { 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 }
 - DEFINE_GUIDSTRUCT("1A8766A0-62CE-11CF-A5D6-28DB04C10000", KSINTERFACESETID_Standard);
 - #define KSINTERFACESETID_Standard DEFINE_GUIDNAMED(KSINTERFACESETID_Standard)
 - 
 - typedef enum
 - {
 -   KSINTERFACE_STANDARD_STREAMING,
 -   KSINTERFACE_STANDARD_LOOPED_STREAMING,
 -   KSINTERFACE_STANDARD_CONTROL
 - }KSINTERFACE_STANDARD;
 - 
 - #define STATIC_KSINTERFACESETID_FileIo                  \
 -   0x8C6F932CL, 0xE771, 0x11D0, 0xB8, 0xFF, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
 - DEFINE_GUIDSTRUCT("8C6F932C-E771-11D0-B8FF-00A0C9223196", KSINTERFACESETID_FileIo);
 - #define KSINTERFACESETID_FileIo DEFINE_GUIDNAMED(KSINTERFACESETID_FileIo)
 - 
 - typedef enum
 - {
 -   KSINTERFACE_FILEIO_STREAMING
 - }KSINTERFACE_FILEIO;
 - 
 - #define KSMEDIUM_TYPE_ANYINSTANCE 0
 - 
 - #define STATIC_KSMEDIUMSETID_Standard                   \
 -   0x4747B320L, 0x62CE, 0x11CF, { 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 }
 - DEFINE_GUIDSTRUCT("4747B320-62CE-11CF-A5D6-28DB04C10000", KSMEDIUMSETID_Standard);
 - #define KSMEDIUMSETID_Standard DEFINE_GUIDNAMED(KSMEDIUMSETID_Standard)
 - 
 - #define KSMEDIUM_STANDARD_DEVIO KSMEDIUM_TYPE_ANYINSTANCE
 - 
 - #define STATIC_KSPROPSETID_Pin                      \
 -   0x8C134960L, 0x51AD, 0x11CF, { 0x87, 0x8A, 0x94, 0xF8, 0x01, 0xC1, 0x00, 0x00 }
 - DEFINE_GUIDSTRUCT("8C134960-51AD-11CF-878A-94F801C10000", KSPROPSETID_Pin);
 - #define KSPROPSETID_Pin DEFINE_GUIDNAMED(KSPROPSETID_Pin)
 - 
 - typedef enum
 - {
 -   KSPROPERTY_PIN_CINSTANCES,
 -   KSPROPERTY_PIN_CTYPES,
 -   KSPROPERTY_PIN_DATAFLOW,
 -   KSPROPERTY_PIN_DATARANGES,
 -   KSPROPERTY_PIN_DATAINTERSECTION,
 -   KSPROPERTY_PIN_INTERFACES,
 -   KSPROPERTY_PIN_MEDIUMS,
 -   KSPROPERTY_PIN_COMMUNICATION,
 -   KSPROPERTY_PIN_GLOBALCINSTANCES,
 -   KSPROPERTY_PIN_NECESSARYINSTANCES,
 -   KSPROPERTY_PIN_PHYSICALCONNECTION,
 -   KSPROPERTY_PIN_CATEGORY,
 -   KSPROPERTY_PIN_NAME,
 -   KSPROPERTY_PIN_CONSTRAINEDDATARANGES,
 -   KSPROPERTY_PIN_PROPOSEDATAFORMAT
 - }KSPROPERTY_PIN;
 - 
 - typedef struct
 - {
 -   KSPROPERTY Property;
 -   ULONG PinId;
 -   ULONG Reserved;
 - }KSP_PIN, * PKSP_PIN;
 - 
 - #define KSINSTANCE_INDETERMINATE ((ULONG)-1)
 - 
 - typedef struct
 - {
 -   ULONG PossibleCount;
 -   ULONG CurrentCount;
 - }KSPIN_CINSTANCES, * PKSPIN_CINSTANCES;
 - 
 - typedef enum
 - {
 -   KSPIN_DATAFLOW_IN = 1,
 -   KSPIN_DATAFLOW_OUT
 - }KSPIN_DATAFLOW, * PKSPIN_DATAFLOW;
 - 
 - #define KSDATAFORMAT_BIT_TEMPORAL_COMPRESSION 0
 - #define KSDATAFORMAT_TEMPORAL_COMPRESSION (1 << KSDATAFORMAT_BIT_TEMPORAL_COMPRESSION)
 - #define KSDATAFORMAT_BIT_ATTRIBUTES 1
 - #define KSDATAFORMAT_ATTRIBUTES (1 << KSDATAFORMAT_BIT_ATTRIBUTES)
 - 
 - #define KSDATARANGE_BIT_ATTRIBUTES 1
 - #define KSDATARANGE_ATTRIBUTES (1 << KSDATARANGE_BIT_ATTRIBUTES)
 - #define KSDATARANGE_BIT_REQUIRED_ATTRIBUTES 2
 - #define KSDATARANGE_REQUIRED_ATTRIBUTES (1 << KSDATARANGE_BIT_REQUIRED_ATTRIBUTES)
 - 
 - typedef union
 - {
 -   __MINGW_EXTENSION struct
 -   {
 -     ULONG FormatSize;
 -     ULONG Flags;
 -     ULONG SampleSize;
 -     ULONG Reserved;
 -     GUID MajorFormat;
 -     GUID SubFormat;
 -     GUID Specifier;
 -   };
 -   LONGLONG Alignment;
 - }KSDATAFORMAT, * PKSDATAFORMAT, KSDATARANGE, * PKSDATARANGE;
 - 
 - #define KSATTRIBUTE_REQUIRED 0x00000001
 - 
 - typedef struct
 - {
 -   ULONG Size;
 -   ULONG Flags;
 -   GUID Attribute;
 - }KSATTRIBUTE, * PKSATTRIBUTE;
 - 
 - #if defined(_NTDDK_)
 - typedef struct
 - {
 -   ULONG Count;
 -   PKSATTRIBUTE* Attributes;
 - }KSATTRIBUTE_LIST, * PKSATTRIBUTE_LIST;
 - #endif /* _NTDDK_ */
 - 
 - typedef enum
 - {
 -   KSPIN_COMMUNICATION_NONE,
 -   KSPIN_COMMUNICATION_SINK,
 -   KSPIN_COMMUNICATION_SOURCE,
 -   KSPIN_COMMUNICATION_BOTH,
 -   KSPIN_COMMUNICATION_BRIDGE
 - }KSPIN_COMMUNICATION, * PKSPIN_COMMUNICATION;
 - 
 - typedef KSIDENTIFIER KSPIN_MEDIUM, * PKSPIN_MEDIUM;
 - 
 - typedef struct
 - {
 -   KSPIN_INTERFACE Interface;
 -   KSPIN_MEDIUM Medium;
 -   ULONG PinId;
 -   HANDLE PinToHandle;
 -   KSPRIORITY Priority;
 - }KSPIN_CONNECT, * PKSPIN_CONNECT;
 - 
 - typedef struct
 - {
 -   ULONG Size;
 -   ULONG Pin;
 -   WCHAR SymbolicLinkName[1];
 - }KSPIN_PHYSICALCONNECTION, * PKSPIN_PHYSICALCONNECTION;
 - 
 - #if defined(_NTDDK_)
 - typedef NTSTATUS (*PFNKSINTERSECTHANDLER)(PIRP Irp, PKSP_PIN Pin,
 -                                           PKSDATARANGE DataRange,
 -                                           PVOID Data);
 - typedef NTSTATUS (*PFNKSINTERSECTHANDLEREX)(PVOID Context, PIRP Irp,
 -                                             PKSP_PIN Pin,
 -                                             PKSDATARANGE DataRange,
 -                                             PKSDATARANGE MatchingDataRange,
 -                                             ULONG DataBufferSize,
 -                                             PVOID Data,
 -                                             PULONG DataSize);
 - #endif /* _NTDDK_ */
 - 
 - #define DEFINE_KSPIN_INTERFACE_TABLE(tablename)             \
 -   const KSPIN_INTERFACE tablename[] =
 - 
 - #define DEFINE_KSPIN_INTERFACE_ITEM(guid, _interFace)            \
 -   {                               \
 -     STATICGUIDOF(guid),                 \
 -     (_interFace),                       \
 -     0                           \
 -   }
 - 
 - #define DEFINE_KSPIN_MEDIUM_TABLE(tablename)                \
 -   const KSPIN_MEDIUM tablename[] =
 - 
 - #define DEFINE_KSPIN_MEDIUM_ITEM(guid, medium)               \
 -   DEFINE_KSPIN_INTERFACE_ITEM(guid, medium)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(Handler)          \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_PIN_CINSTANCES,      \
 -     (Handler),              \
 -     sizeof(KSP_PIN),            \
 -     sizeof(KSPIN_CINSTANCES),       \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(Handler)          \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_PIN_CTYPES,          \
 -     (Handler),              \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(ULONG),              \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(Handler)            \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_PIN_DATAFLOW,        \
 -     (Handler),              \
 -     sizeof(KSP_PIN),            \
 -     sizeof(KSPIN_DATAFLOW),         \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(Handler)          \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_PIN_DATARANGES,      \
 -     (Handler),              \
 -     sizeof(KSP_PIN),            \
 -     0,                  \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(Handler)        \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_PIN_DATAINTERSECTION,    \
 -     (Handler),              \
 -     sizeof(KSP_PIN) + sizeof(KSMULTIPLE_ITEM), \
 -     0,                  \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(Handler)          \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_PIN_INTERFACES,      \
 -     (Handler),              \
 -     sizeof(KSP_PIN),            \
 -     0,                  \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(Handler)         \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_PIN_MEDIUMS,         \
 -     (Handler),              \
 -     sizeof(KSP_PIN),            \
 -     0,                  \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(Handler)       \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_PIN_COMMUNICATION,       \
 -     (Handler),              \
 -     sizeof(KSP_PIN),            \
 -     sizeof(KSPIN_COMMUNICATION),        \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_PIN_GLOBALCINSTANCES(Handler)        \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_PIN_GLOBALCINSTANCES,    \
 -     (Handler),              \
 -     sizeof(KSP_PIN),            \
 -     sizeof(KSPIN_CINSTANCES),       \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_PIN_NECESSARYINSTANCES(Handler)      \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_PIN_NECESSARYINSTANCES,  \
 -     (Handler),              \
 -     sizeof(KSP_PIN),            \
 -     sizeof(ULONG),              \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_PIN_PHYSICALCONNECTION(Handler)      \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_PIN_PHYSICALCONNECTION,  \
 -     (Handler),              \
 -     sizeof(KSP_PIN),            \
 -     0,                  \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(Handler)            \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_PIN_CATEGORY,        \
 -     (Handler),              \
 -     sizeof(KSP_PIN),            \
 -     sizeof(GUID),               \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_PIN_NAME(Handler)            \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_PIN_NAME,            \
 -     (Handler),              \
 -     sizeof(KSP_PIN),            \
 -     0,                  \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(Handler)   \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_PIN_CONSTRAINEDDATARANGES,   \
 -     (Handler),              \
 -     sizeof(KSP_PIN),            \
 -     0,                  \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(Handler)       \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_PIN_PROPOSEDATAFORMAT,   \
 -     NULL,                   \
 -     sizeof(KSP_PIN),            \
 -     sizeof(KSDATAFORMAT),           \
 -     (Handler), NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_PINSET(PinSet, PropGeneral, PropInstances, PropIntersection) \
 -   DEFINE_KSPROPERTY_TABLE(PinSet) {                   \
 -     DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),       \
 -     DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),         \
 -     DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),       \
 -     DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),     \
 -     DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),  \
 -     DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),     \
 -     DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),        \
 -     DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),      \
 -     DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),       \
 -     DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral)            \
 -   }
 - 
 - #define DEFINE_KSPROPERTY_PINSETCONSTRAINED(PinSet, PropGeneral, PropInstances, PropIntersection) \
 -   DEFINE_KSPROPERTY_TABLE(PinSet) {                   \
 -     DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),       \
 -     DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),         \
 -     DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),       \
 -     DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),     \
 -     DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),  \
 -     DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),     \
 -     DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),        \
 -     DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),      \
 -     DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),       \
 -     DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral),           \
 -     DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral)   \
 -   }
 - 
 - #define STATIC_KSNAME_Filter                        \
 -   0x9b365890L, 0x165f, 0x11d0, 0xa1, 0x95, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
 - DEFINE_GUIDSTRUCT("9b365890-165f-11d0-a195-0020afd156e4", KSNAME_Filter);
 - #define KSNAME_Filter DEFINE_GUIDNAMED(KSNAME_Filter)
 - 
 - #define KSSTRING_Filter L"{9B365890-165F-11D0-A195-0020AFD156E4}"
 - 
 - #define STATIC_KSNAME_Pin                       \
 -   0x146F1A80L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
 - DEFINE_GUIDSTRUCT("146F1A80-4791-11D0-A5D6-28DB04C10000", KSNAME_Pin);
 - #define KSNAME_Pin DEFINE_GUIDNAMED(KSNAME_Pin)
 - 
 - #define KSSTRING_Pin L"{146F1A80-4791-11D0-A5D6-28DB04C10000}"
 - 
 - #define STATIC_KSNAME_Clock                     \
 -   0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
 - DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000", KSNAME_Clock);
 - #define KSNAME_Clock DEFINE_GUIDNAMED(KSNAME_Clock)
 - 
 - #define KSSTRING_Clock L"{53172480-4791-11D0-A5D6-28DB04C10000}"
 - 
 - #define STATIC_KSNAME_Allocator                     \
 -   0x642F5D00L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
 - DEFINE_GUIDSTRUCT("642F5D00-4791-11D0-A5D6-28DB04C10000", KSNAME_Allocator);
 - #define KSNAME_Allocator DEFINE_GUIDNAMED(KSNAME_Allocator)
 - 
 - #define KSSTRING_Allocator L"{642F5D00-4791-11D0-A5D6-28DB04C10000}"
 - 
 - #define KSSTRING_AllocatorEx L"{091BB63B-603F-11D1-B067-00A0C9062802}"
 - 
 - #define STATIC_KSNAME_TopologyNode                  \
 -   0x0621061AL, 0xEE75, 0x11D0, 0xB9, 0x15, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
 - DEFINE_GUIDSTRUCT("0621061A-EE75-11D0-B915-00A0C9223196", KSNAME_TopologyNode);
 - #define KSNAME_TopologyNode DEFINE_GUIDNAMED(KSNAME_TopologyNode)
 - 
 - #define KSSTRING_TopologyNode L"{0621061A-EE75-11D0-B915-00A0C9223196}"
 - 
 - #if defined(_NTDDK_)
 - typedef struct
 - {
 -   ULONG InterfacesCount;
 -   const KSPIN_INTERFACE* Interfaces;
 -   ULONG MediumsCount;
 -   const KSPIN_MEDIUM* Mediums;
 -   ULONG DataRangesCount;
 -   const PKSDATARANGE* DataRanges;
 -   KSPIN_DATAFLOW DataFlow;
 -   KSPIN_COMMUNICATION Communication;
 -   const GUID* Category;
 -   const GUID* Name;
 -   __MINGW_EXTENSION union
 -   {
 -     LONGLONG Reserved;
 -     __MINGW_EXTENSION struct
 -     {
 -       ULONG ConstrainedDataRangesCount;
 -       PKSDATARANGE* ConstrainedDataRanges;
 -     };
 -   };
 - }KSPIN_DESCRIPTOR, * PKSPIN_DESCRIPTOR;
 - typedef const KSPIN_DESCRIPTOR* PCKSPIN_DESCRIPTOR;
 - 
 -  # define DEFINE_KSPIN_DESCRIPTOR_TABLE(tablename)            \
 -   const KSPIN_DESCRIPTOR tablename[] =
 - 
 -  # define DEFINE_KSPIN_DESCRIPTOR_ITEM(InterfacesCount, Interfaces, MediumsCount, Mediums, DataRangesCount, DataRanges, DataFlow, Communication) \
 -   {                                   \
 -     InterfacesCount, Interfaces, MediumsCount, Mediums, \
 -     DataRangesCount, DataRanges, DataFlow, Communication,   \
 -     NULL, NULL, 0                       \
 -   }
 - 
 -  # define DEFINE_KSPIN_DESCRIPTOR_ITEMEX(InterfacesCount, Interfaces, MediumsCount, Mediums, DataRangesCount, DataRanges, DataFlow, Communication, Category, Name) \
 -   {                                   \
 -     InterfacesCount, Interfaces, MediumsCount, Mediums, \
 -     DataRangesCount, DataRanges, DataFlow, Communication,   \
 -     Category, Name, 0                   \
 -   }
 - #endif /* _NTDDK_ */
 - 
 - #define STATIC_KSDATAFORMAT_TYPE_WILDCARD STATIC_GUID_NULL
 - #define KSDATAFORMAT_TYPE_WILDCARD GUID_NULL
 - 
 - #define STATIC_KSDATAFORMAT_SUBTYPE_WILDCARD STATIC_GUID_NULL
 - #define KSDATAFORMAT_SUBTYPE_WILDCARD GUID_NULL
 - 
 - #define STATIC_KSDATAFORMAT_TYPE_STREAM                 \
 -   0xE436EB83L, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70
 - DEFINE_GUIDSTRUCT("E436EB83-524F-11CE-9F53-0020AF0BA770", KSDATAFORMAT_TYPE_STREAM);
 - #define KSDATAFORMAT_TYPE_STREAM DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_STREAM)
 - 
 - #define STATIC_KSDATAFORMAT_SUBTYPE_NONE                \
 -   0xE436EB8EL, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70
 - DEFINE_GUIDSTRUCT("E436EB8E-524F-11CE-9F53-0020AF0BA770", KSDATAFORMAT_SUBTYPE_NONE);
 - #define KSDATAFORMAT_SUBTYPE_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_NONE)
 - 
 - #define STATIC_KSDATAFORMAT_SPECIFIER_WILDCARD STATIC_GUID_NULL
 - #define KSDATAFORMAT_SPECIFIER_WILDCARD GUID_NULL
 - 
 - #define STATIC_KSDATAFORMAT_SPECIFIER_FILENAME              \
 -   0xAA797B40L, 0xE974, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
 - DEFINE_GUIDSTRUCT("AA797B40-E974-11CF-A5D6-28DB04C10000", KSDATAFORMAT_SPECIFIER_FILENAME);
 - #define KSDATAFORMAT_SPECIFIER_FILENAME DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_FILENAME)
 - 
 - #define STATIC_KSDATAFORMAT_SPECIFIER_FILEHANDLE            \
 -   0x65E8773CL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
 - DEFINE_GUIDSTRUCT("65E8773C-8F56-11D0-A3B9-00A0C9223196", KSDATAFORMAT_SPECIFIER_FILEHANDLE);
 - #define KSDATAFORMAT_SPECIFIER_FILEHANDLE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_FILEHANDLE)
 - 
 - #define STATIC_KSDATAFORMAT_SPECIFIER_NONE              \
 -   0x0F6417D6L, 0xC318, 0x11D0, { 0xA4, 0x3F, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96 }
 - DEFINE_GUIDSTRUCT("0F6417D6-C318-11D0-A43F-00A0C9223196", KSDATAFORMAT_SPECIFIER_NONE);
 - #define KSDATAFORMAT_SPECIFIER_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_NONE)
 - 
 - #define STATIC_KSPROPSETID_Quality                  \
 -   0xD16AD380L, 0xAC1A, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
 - DEFINE_GUIDSTRUCT("D16AD380-AC1A-11CF-A5D6-28DB04C10000", KSPROPSETID_Quality);
 - #define KSPROPSETID_Quality DEFINE_GUIDNAMED(KSPROPSETID_Quality)
 - 
 - typedef enum
 - {
 -   KSPROPERTY_QUALITY_REPORT,
 -   KSPROPERTY_QUALITY_ERROR
 - }KSPROPERTY_QUALITY;
 - 
 - #define DEFINE_KSPROPERTY_ITEM_QUALITY_REPORT(GetHandler, SetHandler)    \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_QUALITY_REPORT,      \
 -     (GetHandler),               \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(KSQUALITY),          \
 -     (SetHandler),               \
 -     NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_QUALITY_ERROR(GetHandler, SetHandler) \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_QUALITY_ERROR,       \
 -     (GetHandler),               \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(KSERROR),            \
 -     (SetHandler),               \
 -     NULL, 0, NULL, NULL, 0)
 - 
 - #define STATIC_KSPROPSETID_Connection                   \
 -   0x1D58C920L, 0xAC9B, 0x11CF, { 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00 }
 - DEFINE_GUIDSTRUCT("1D58C920-AC9B-11CF-A5D6-28DB04C10000", KSPROPSETID_Connection);
 - #define KSPROPSETID_Connection DEFINE_GUIDNAMED(KSPROPSETID_Connection)
 - 
 - typedef enum
 - {
 -   KSPROPERTY_CONNECTION_STATE,
 -   KSPROPERTY_CONNECTION_PRIORITY,
 -   KSPROPERTY_CONNECTION_DATAFORMAT,
 -   KSPROPERTY_CONNECTION_ALLOCATORFRAMING,
 -   KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT,
 -   KSPROPERTY_CONNECTION_ACQUIREORDERING,
 -   KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,
 -   KSPROPERTY_CONNECTION_STARTAT
 - }KSPROPERTY_CONNECTION;
 - 
 - #define DEFINE_KSPROPERTY_ITEM_CONNECTION_STATE(GetHandler, SetHandler)  \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_CONNECTION_STATE,        \
 -     (GetHandler),               \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(KSSTATE),            \
 -     (SetHandler),               \
 -     NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_CONNECTION_PRIORITY(GetHandler, SetHandler) \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_CONNECTION_PRIORITY,     \
 -     (GetHandler),               \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(KSPRIORITY),         \
 -     (SetHandler),               \
 -     NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_CONNECTION_DATAFORMAT(GetHandler, SetHandler) \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_CONNECTION_DATAFORMAT,   \
 -     (GetHandler),               \
 -     sizeof(KSPROPERTY),         \
 -     0,                  \
 -     (SetHandler),               \
 -     NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING(Handler) \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_CONNECTION_ALLOCATORFRAMING, \
 -     (Handler),              \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(KSALLOCATOR_FRAMING),        \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING_EX(Handler)  \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX, \
 -     (Handler),              \
 -     sizeof(KSPROPERTY),         \
 -     0,                  \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_CONNECTION_PROPOSEDATAFORMAT(Handler)    \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT, \
 -     NULL,                   \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(KSDATAFORMAT),           \
 -     (Handler),              \
 -     NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_CONNECTION_ACQUIREORDERING(Handler)  \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_CONNECTION_ACQUIREORDERING,  \
 -     (Handler),              \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(int),                \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_CONNECTION_STARTAT(Handler)      \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_CONNECTION_STARTAT,      \
 -     NULL,                   \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(KSRELATIVEEVENT),        \
 -     (Handler),              \
 -     NULL, 0, NULL, NULL, 0)
 - 
 - #define KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER 0x00000001
 - #define KSALLOCATOR_REQUIREMENTF_SYSTEM_MEMORY 0x00000002
 - #define KSALLOCATOR_REQUIREMENTF_FRAME_INTEGRITY 0x00000004
 - #define KSALLOCATOR_REQUIREMENTF_MUST_ALLOCATE 0x00000008
 - #define KSALLOCATOR_REQUIREMENTF_PREFERENCES_ONLY 0x80000000
 - 
 - #define KSALLOCATOR_OPTIONF_COMPATIBLE 0x00000001
 - #define KSALLOCATOR_OPTIONF_SYSTEM_MEMORY 0x00000002
 - #define KSALLOCATOR_OPTIONF_VALID 0x00000003
 - 
 - #define KSALLOCATOR_FLAG_PARTIAL_READ_SUPPORT 0x00000010
 - #define KSALLOCATOR_FLAG_DEVICE_SPECIFIC 0x00000020
 - #define KSALLOCATOR_FLAG_CAN_ALLOCATE 0x00000040
 - #define KSALLOCATOR_FLAG_INSIST_ON_FRAMESIZE_RATIO 0x00000080
 - #define KSALLOCATOR_FLAG_NO_FRAME_INTEGRITY 0x00000100
 - #define KSALLOCATOR_FLAG_MULTIPLE_OUTPUT 0x00000200
 - #define KSALLOCATOR_FLAG_CYCLE 0x00000400
 - #define KSALLOCATOR_FLAG_ALLOCATOR_EXISTS 0x00000800
 - #define KSALLOCATOR_FLAG_INDEPENDENT_RANGES 0x00001000
 - #define KSALLOCATOR_FLAG_ATTENTION_STEPPING 0x00002000
 - 
 - typedef struct
 - {
 -   __MINGW_EXTENSION union
 -   {
 -     ULONG OptionsFlags;
 -     ULONG RequirementsFlags;
 -   };
 - #if defined(_NTDDK_)
 -   POOL_TYPE PoolType;
 - #else
 -   ULONG PoolType;
 - #endif /* _NTDDK_ */
 -   ULONG Frames;
 -   ULONG FrameSize;
 -   ULONG FileAlignment;
 -   ULONG Reserved;
 - }KSALLOCATOR_FRAMING, * PKSALLOCATOR_FRAMING;
 - 
 - #if defined(_NTDDK_)
 - typedef PVOID (*PFNKSDEFAULTALLOCATE)(PVOID Context);
 - typedef VOID (*PFNKSDEFAULTFREE)(PVOID Context, PVOID Buffer);
 - typedef NTSTATUS (*PFNKSINITIALIZEALLOCATOR)(PVOID InitialContext,
 -                                              PKSALLOCATOR_FRAMING AllocatorFraming,
 -                                              PVOID* Context);
 - typedef VOID (*PFNKSDELETEALLOCATOR)(PVOID Context);
 - #endif /* _NTDDK_ */
 - 
 - typedef struct
 - {
 -   ULONG MinFrameSize;
 -   ULONG MaxFrameSize;
 -   ULONG Stepping;
 - }KS_FRAMING_RANGE, * PKS_FRAMING_RANGE;
 - 
 - typedef struct
 - {
 -   KS_FRAMING_RANGE Range;
 -   ULONG InPlaceWeight;
 -   ULONG NotInPlaceWeight;
 - }KS_FRAMING_RANGE_WEIGHTED, * PKS_FRAMING_RANGE_WEIGHTED;
 - 
 - typedef struct
 - {
 -   ULONG RatioNumerator;
 -   ULONG RatioDenominator;
 -   ULONG RatioConstantMargin;
 - }KS_COMPRESSION, * PKS_COMPRESSION;
 - 
 - typedef struct
 - {
 -   GUID MemoryType;
 -   GUID BusType;
 -   ULONG MemoryFlags;
 -   ULONG BusFlags;
 -   ULONG Flags;
 -   ULONG Frames;
 -   ULONG FileAlignment;
 -   ULONG MemoryTypeWeight;
 -   KS_FRAMING_RANGE PhysicalRange;
 -   KS_FRAMING_RANGE_WEIGHTED FramingRange;
 - }KS_FRAMING_ITEM, * PKS_FRAMING_ITEM;
 - 
 - typedef struct
 - {
 -   ULONG CountItems;
 -   ULONG PinFlags;
 -   KS_COMPRESSION OutputCompression;
 -   ULONG PinWeight;
 -   KS_FRAMING_ITEM FramingItem[1];
 - }KSALLOCATOR_FRAMING_EX, * PKSALLOCATOR_FRAMING_EX;
 - 
 - #define KSMEMORY_TYPE_WILDCARD GUID_NULL
 - #define STATIC_KSMEMORY_TYPE_WILDCARD STATIC_GUID_NULL
 - 
 - #define KSMEMORY_TYPE_DONT_CARE GUID_NULL
 - #define STATIC_KSMEMORY_TYPE_DONT_CARE STATIC_GUID_NULL
 - 
 - #define KS_TYPE_DONT_CARE GUID_NULL
 - #define STATIC_KS_TYPE_DONT_CARE STATIC_GUID_NULL
 - 
 - #define STATIC_KSMEMORY_TYPE_SYSTEM                 \
 -   0x091bb638L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
 - DEFINE_GUIDSTRUCT("091bb638-603f-11d1-b067-00a0c9062802", KSMEMORY_TYPE_SYSTEM);
 - #define KSMEMORY_TYPE_SYSTEM DEFINE_GUIDNAMED(KSMEMORY_TYPE_SYSTEM)
 - 
 - #define STATIC_KSMEMORY_TYPE_USER                   \
 -   0x8cb0fc28L, 0x7893, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
 - DEFINE_GUIDSTRUCT("8cb0fc28-7893-11d1-b069-00a0c9062802", KSMEMORY_TYPE_USER);
 - #define KSMEMORY_TYPE_USER DEFINE_GUIDNAMED(KSMEMORY_TYPE_USER)
 - 
 - #define STATIC_KSMEMORY_TYPE_KERNEL_PAGED               \
 -   0xd833f8f8L, 0x7894, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
 - DEFINE_GUIDSTRUCT("d833f8f8-7894-11d1-b069-00a0c9062802", KSMEMORY_TYPE_KERNEL_PAGED);
 - #define KSMEMORY_TYPE_KERNEL_PAGED DEFINE_GUIDNAMED(KSMEMORY_TYPE_KERNEL_PAGED)
 - 
 - #define STATIC_KSMEMORY_TYPE_KERNEL_NONPAGED                \
 -   0x4a6d5fc4L, 0x7895, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
 - DEFINE_GUIDSTRUCT("4a6d5fc4-7895-11d1-b069-00a0c9062802", KSMEMORY_TYPE_KERNEL_NONPAGED);
 - #define KSMEMORY_TYPE_KERNEL_NONPAGED DEFINE_GUIDNAMED(KSMEMORY_TYPE_KERNEL_NONPAGED)
 - 
 - #define STATIC_KSMEMORY_TYPE_DEVICE_UNKNOWN             \
 -   0x091bb639L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
 - DEFINE_GUIDSTRUCT("091bb639-603f-11d1-b067-00a0c9062802", KSMEMORY_TYPE_DEVICE_UNKNOWN);
 - #define KSMEMORY_TYPE_DEVICE_UNKNOWN DEFINE_GUIDNAMED(KSMEMORY_TYPE_DEVICE_UNKNOWN)
 - 
 - #define DECLARE_SIMPLE_FRAMING_EX(FramingExName, MemoryType, Flags, Frames, Alignment, MinFrameSize, MaxFrameSize) \
 -   const KSALLOCATOR_FRAMING_EX FramingExName =                \
 -   {                                   \
 -     1,                              \
 -     0,                              \
 -     {                               \
 -       1,                          \
 -       1,                          \
 -       0                           \
 -     },                              \
 -     0,                              \
 -     {                               \
 -       {                           \
 -         MemoryType,                 \
 -         STATIC_KS_TYPE_DONT_CARE,           \
 -         0,                      \
 -         0,                      \
 -         Flags,                      \
 -         Frames,                     \
 -         Alignment,                  \
 -         0,                      \
 -         {                       \
 -           0,                  \
 -           (ULONG)-1,              \
 -           1                   \
 -         },                      \
 -         {                       \
 -           {                   \
 -             MinFrameSize,           \
 -             MaxFrameSize,           \
 -             1               \
 -           },                  \
 -           0,                  \
 -           0                   \
 -         }                       \
 -       }                           \
 -     }                               \
 -   }
 - 
 - #define SetDefaultKsCompression(KsCompressionPointer)           \
 -   {                                   \
 -     KsCompressionPointer->RatioNumerator = 1;           \
 -     KsCompressionPointer->RatioDenominator = 1;         \
 -     KsCompressionPointer->RatioConstantMargin = 0;          \
 -   }
 - 
 - #define SetDontCareKsFramingRange(KsFramingRangePointer)        \
 -   {                                   \
 -     KsFramingRangePointer->MinFrameSize = 0;            \
 -     KsFramingRangePointer->MaxFrameSize = (ULONG)-1;       \
 -     KsFramingRangePointer->Stepping = 1;                \
 -   }
 - 
 - #define SetKsFramingRange(KsFramingRangePointer, P_MinFrameSize, P_MaxFrameSize) \
 -   {                                   \
 -     KsFramingRangePointer->MinFrameSize = P_MinFrameSize;       \
 -     KsFramingRangePointer->MaxFrameSize = P_MaxFrameSize;       \
 -     KsFramingRangePointer->Stepping = 1;                \
 -   }
 - 
 - #define SetKsFramingRangeWeighted(KsFramingRangeWeightedPointer, P_MinFrameSize, P_MaxFrameSize) \
 -   {                                   \
 -     KS_FRAMING_RANGE* KsFramingRange =              \
 -       &KsFramingRangeWeightedPointer->Range;  \
 -     SetKsFramingRange(KsFramingRange, P_MinFrameSize, P_MaxFrameSize); \
 -     KsFramingRangeWeightedPointer->InPlaceWeight = 0;       \
 -     KsFramingRangeWeightedPointer->NotInPlaceWeight = 0;        \
 -   }
 - 
 - #define INITIALIZE_SIMPLE_FRAMING_EX(FramingExPointer, P_MemoryType, P_Flags, P_Frames, P_Alignment, P_MinFrameSize, P_MaxFrameSize) \
 -   {                                   \
 -     KS_COMPRESSION* KsCompression =                 \
 -       &FramingExPointer->OutputCompression;       \
 -     KS_FRAMING_RANGE* KsFramingRange =              \
 -       &FramingExPointer->FramingItem[0].PhysicalRange; \
 -     KS_FRAMING_RANGE_WEIGHTED* KsFramingRangeWeighted =     \
 -       &FramingExPointer->FramingItem[0].FramingRange; \
 -     FramingExPointer->CountItems = 1;               \
 -     FramingExPointer->PinFlags = 0;                 \
 -     SetDefaultKsCompression(KsCompression);             \
 -     FramingExPointer->PinWeight = 0;                \
 -     FramingExPointer->FramingItem[0].MemoryType = P_MemoryType; \
 -     FramingExPointer->FramingItem[0].BusType = KS_TYPE_DONT_CARE;   \
 -     FramingExPointer->FramingItem[0].MemoryFlags = 0;       \
 -     FramingExPointer->FramingItem[0].BusFlags = 0;          \
 -     FramingExPointer->FramingItem[0].Flags = P_Flags;       \
 -     FramingExPointer->FramingItem[0].Frames = P_Frames;     \
 -     FramingExPointer->FramingItem[0].FileAlignment = P_Alignment;   \
 -     FramingExPointer->FramingItem[0].MemoryTypeWeight = 0;      \
 -     SetDontCareKsFramingRange(KsFramingRange);          \
 -     SetKsFramingRangeWeighted(KsFramingRangeWeighted,       \
 -                               P_MinFrameSize, P_MaxFrameSize);   \
 -   }
 - 
 - #define STATIC_KSEVENTSETID_StreamAllocator             \
 -   0x75d95571L, 0x073c, 0x11d0, 0xa1, 0x61, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
 - DEFINE_GUIDSTRUCT("75d95571-073c-11d0-a161-0020afd156e4", KSEVENTSETID_StreamAllocator);
 - #define KSEVENTSETID_StreamAllocator DEFINE_GUIDNAMED(KSEVENTSETID_StreamAllocator)
 - 
 - typedef enum
 - {
 -   KSEVENT_STREAMALLOCATOR_INTERNAL_FREEFRAME,
 -   KSEVENT_STREAMALLOCATOR_FREEFRAME
 - }KSEVENT_STREAMALLOCATOR;
 - 
 - #define STATIC_KSMETHODSETID_StreamAllocator                \
 -   0xcf6e4341L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
 - DEFINE_GUIDSTRUCT("cf6e4341-ec87-11cf-a130-0020afd156e4", KSMETHODSETID_StreamAllocator);
 - #define KSMETHODSETID_StreamAllocator DEFINE_GUIDNAMED(KSMETHODSETID_StreamAllocator)
 - 
 - typedef enum
 - {
 -   KSMETHOD_STREAMALLOCATOR_ALLOC,
 -   KSMETHOD_STREAMALLOCATOR_FREE
 - }KSMETHOD_STREAMALLOCATOR;
 - 
 - #define DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_ALLOC(Handler)     \
 -   DEFINE_KSMETHOD_ITEM(                       \
 -     KSMETHOD_STREAMALLOCATOR_ALLOC,     \
 -     KSMETHOD_TYPE_WRITE,            \
 -     (Handler),              \
 -     sizeof(KSMETHOD),           \
 -     sizeof(PVOID),              \
 -     NULL)
 - 
 - #define DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_FREE(Handler)      \
 -   DEFINE_KSMETHOD_ITEM(                       \
 -     KSMETHOD_STREAMALLOCATOR_FREE,      \
 -     KSMETHOD_TYPE_READ,         \
 -     (Handler),              \
 -     sizeof(KSMETHOD),           \
 -     sizeof(PVOID),              \
 -     NULL)
 - 
 - #define DEFINE_KSMETHOD_ALLOCATORSET(AllocatorSet, MethodAlloc, MethodFree) \
 -   DEFINE_KSMETHOD_TABLE(AllocatorSet) {                   \
 -     DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_ALLOC(MethodAlloc),    \
 -     DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_FREE(MethodFree)       \
 -   }
 - 
 - #define STATIC_KSPROPSETID_StreamAllocator              \
 -   0xcf6e4342L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
 - DEFINE_GUIDSTRUCT("cf6e4342-ec87-11cf-a130-0020afd156e4", KSPROPSETID_StreamAllocator);
 - #define KSPROPSETID_StreamAllocator DEFINE_GUIDNAMED(KSPROPSETID_StreamAllocator)
 - 
 - #if defined(_NTDDK_)
 - typedef enum
 - {
 -   KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE,
 -   KSPROPERTY_STREAMALLOCATOR_STATUS
 - }KSPROPERTY_STREAMALLOCATOR;
 - 
 -  # define DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_FUNCTIONTABLE(Handler)   \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE, \
 -     (Handler),              \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(KSSTREAMALLOCATOR_FUNCTIONTABLE), \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 -  # define DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_STATUS(Handler)      \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_STREAMALLOCATOR_STATUS,  \
 -     (Handler),              \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(KSSTREAMALLOCATOR_STATUS),   \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 -  # define DEFINE_KSPROPERTY_ALLOCATORSET(AllocatorSet, PropFunctionTable, PropStatus) \
 -   DEFINE_KSPROPERTY_TABLE(AllocatorSet) {                 \
 -     DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_STATUS(PropStatus),  \
 -     DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_FUNCTIONTABLE(PropFunctionTable) \
 -   }
 - 
 - typedef NTSTATUS (*PFNALLOCATOR_ALLOCATEFRAME)(PFILE_OBJECT FileObject,
 -                                                PVOID* Frame);
 - typedef VOID (*PFNALLOCATOR_FREEFRAME)(PFILE_OBJECT FileObject, PVOID Frame);
 - 
 - typedef struct
 - {
 -   PFNALLOCATOR_ALLOCATEFRAME AllocateFrame;
 -   PFNALLOCATOR_FREEFRAME FreeFrame;
 - }KSSTREAMALLOCATOR_FUNCTIONTABLE, * PKSSTREAMALLOCATOR_FUNCTIONTABLE;
 - #endif /* _NTDDK_ */
 - 
 - typedef struct
 - {
 -   KSALLOCATOR_FRAMING Framing;
 -   ULONG AllocatedFrames;
 -   ULONG Reserved;
 - }KSSTREAMALLOCATOR_STATUS, * PKSSTREAMALLOCATOR_STATUS;
 - 
 - typedef struct
 - {
 -   KSALLOCATOR_FRAMING_EX Framing;
 -   ULONG AllocatedFrames;
 -   ULONG Reserved;
 - }KSSTREAMALLOCATOR_STATUS_EX, * PKSSTREAMALLOCATOR_STATUS_EX;
 - 
 - #define KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT 0x00000001
 - #define KSSTREAM_HEADER_OPTIONSF_PREROLL 0x00000002
 - #define KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY 0x00000004
 - #define KSSTREAM_HEADER_OPTIONSF_TYPECHANGED 0x00000008
 - #define KSSTREAM_HEADER_OPTIONSF_TIMEVALID 0x00000010
 - #define KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY 0x00000040
 - #define KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE 0x00000080
 - #define KSSTREAM_HEADER_OPTIONSF_DURATIONVALID 0x00000100
 - #define KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM 0x00000200
 - #define KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA 0x80000000
 - 
 - typedef struct
 - {
 -   LONGLONG Time;
 -   ULONG Numerator;
 -   ULONG Denominator;
 - }KSTIME, * PKSTIME;
 - 
 - typedef struct
 - {
 -   ULONG Size;
 -   ULONG TypeSpecificFlags;
 -   KSTIME PresentationTime;
 -   LONGLONG Duration;
 -   ULONG FrameExtent;
 -   ULONG DataUsed;
 -   PVOID Data;
 -   ULONG OptionsFlags;
 - #ifdef _WIN64
 -   ULONG Reserved;
 - #endif
 - }KSSTREAM_HEADER, * PKSSTREAM_HEADER;
 - 
 - #define STATIC_KSPROPSETID_StreamInterface              \
 -   0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
 - DEFINE_GUIDSTRUCT("1fdd8ee1-9cd3-11d0-82aa-0000f822fe8a", KSPROPSETID_StreamInterface);
 - #define KSPROPSETID_StreamInterface DEFINE_GUIDNAMED(KSPROPSETID_StreamInterface)
 - 
 - typedef enum
 - {
 -   KSPROPERTY_STREAMINTERFACE_HEADERSIZE
 - }KSPROPERTY_STREAMINTERFACE;
 - 
 - #define DEFINE_KSPROPERTY_ITEM_STREAMINTERFACE_HEADERSIZE(GetHandler)   \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_STREAMINTERFACE_HEADERSIZE,  \
 -     (GetHandler),               \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(ULONG),              \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_STREAMINTERFACESET(StreamInterfaceSet, HeaderSizeHandler) \
 -   DEFINE_KSPROPERTY_TABLE(StreamInterfaceSet) {               \
 -     DEFINE_KSPROPERTY_ITEM_STREAMINTERFACE_HEADERSIZE(HeaderSizeHandler) \
 -   }
 - 
 - #define STATIC_KSPROPSETID_Stream                   \
 -   0x65aaba60L, 0x98ae, 0x11cf, 0xa1, 0x0d, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
 - DEFINE_GUIDSTRUCT("65aaba60-98ae-11cf-a10d-0020afd156e4", KSPROPSETID_Stream);
 - #define KSPROPSETID_Stream DEFINE_GUIDNAMED(KSPROPSETID_Stream)
 - 
 - typedef enum
 - {
 -   KSPROPERTY_STREAM_ALLOCATOR,
 -   KSPROPERTY_STREAM_QUALITY,
 -   KSPROPERTY_STREAM_DEGRADATION,
 -   KSPROPERTY_STREAM_MASTERCLOCK,
 -   KSPROPERTY_STREAM_TIMEFORMAT,
 -   KSPROPERTY_STREAM_PRESENTATIONTIME,
 -   KSPROPERTY_STREAM_PRESENTATIONEXTENT,
 -   KSPROPERTY_STREAM_FRAMETIME,
 -   KSPROPERTY_STREAM_RATECAPABILITY,
 -   KSPROPERTY_STREAM_RATE,
 -   KSPROPERTY_STREAM_PIPE_ID
 - }KSPROPERTY_STREAM;
 - 
 - #define DEFINE_KSPROPERTY_ITEM_STREAM_ALLOCATOR(GetHandler, SetHandler)  \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_STREAM_ALLOCATOR,        \
 -     (GetHandler),               \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(HANDLE),             \
 -     (SetHandler),               \
 -     NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_STREAM_QUALITY(Handler)          \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_STREAM_QUALITY,      \
 -     (Handler),              \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(KSQUALITY_MANAGER),      \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_STREAM_DEGRADATION(GetHandler, SetHandler) \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_STREAM_DEGRADATION,      \
 -     (GetHandler),               \
 -     sizeof(KSPROPERTY),         \
 -     0,                  \
 -     (SetHandler),               \
 -     NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_STREAM_MASTERCLOCK(GetHandler, SetHandler) \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_STREAM_MASTERCLOCK,      \
 -     (GetHandler),               \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(HANDLE),             \
 -     (SetHandler),               \
 -     NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_STREAM_TIMEFORMAT(Handler)       \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_STREAM_TIMEFORMAT,       \
 -     (Handler),              \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(GUID),               \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONTIME(GetHandler, SetHandler) \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_STREAM_PRESENTATIONTIME, \
 -     (GetHandler),               \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(KSTIME),             \
 -     (SetHandler),               \
 -     NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONEXTENT(Handler)   \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_STREAM_PRESENTATIONEXTENT,   \
 -     (Handler),              \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(LONGLONG),           \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_STREAM_FRAMETIME(Handler)        \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_STREAM_FRAMETIME,        \
 -     (Handler),              \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(KSFRAMETIME),            \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_STREAM_RATECAPABILITY(Handler)       \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_STREAM_RATECAPABILITY,   \
 -     (Handler),              \
 -     sizeof(KSRATE_CAPABILITY),      \
 -     sizeof(KSRATE),             \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_STREAM_RATE(GetHandler, SetHandler)   \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_STREAM_RATE,         \
 -     (GetHandler),               \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(KSRATE),             \
 -     (SetHandler),               \
 -     NULL, 0, NULL, NULL, 0)
 - 
 - #define DEFINE_KSPROPERTY_ITEM_STREAM_PIPE_ID(GetHandler, SetHandler)    \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_STREAM_PIPE_ID,      \
 -     (GetHandler),               \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(HANDLE),             \
 -     (SetHandler),               \
 -     NULL, 0, NULL, NULL, 0)
 - 
 - typedef struct
 - {
 -   HANDLE QualityManager;
 -   PVOID Context;
 - }KSQUALITY_MANAGER, * PKSQUALITY_MANAGER;
 - 
 - typedef struct
 - {
 -   LONGLONG Duration;
 -   ULONG FrameFlags;
 -   ULONG Reserved;
 - }KSFRAMETIME, * PKSFRAMETIME;
 - 
 - #define KSFRAMETIME_VARIABLESIZE 0x00000001
 - 
 - typedef struct
 - {
 -   LONGLONG PresentationStart;
 -   LONGLONG Duration;
 -   KSPIN_INTERFACE Interface;
 -   LONG Rate;
 -   ULONG Flags;
 - }KSRATE, * PKSRATE;
 - 
 - #define KSRATE_NOPRESENTATIONSTART 0x00000001
 - #define KSRATE_NOPRESENTATIONDURATION 0x00000002
 - 
 - typedef struct
 - {
 -   KSPROPERTY Property;
 -   KSRATE Rate;
 - }KSRATE_CAPABILITY, * PKSRATE_CAPABILITY;
 - 
 - #define STATIC_KSPROPSETID_Clock                    \
 -   0xDF12A4C0L, 0xAC17, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
 - DEFINE_GUIDSTRUCT("DF12A4C0-AC17-11CF-A5D6-28DB04C10000", KSPROPSETID_Clock);
 - #define KSPROPSETID_Clock DEFINE_GUIDNAMED(KSPROPSETID_Clock)
 - 
 - #define NANOSECONDS 10000000
 - #define KSCONVERT_PERFORMANCE_TIME(Frequency, PerformanceTime)       \
 -   ((((ULONGLONG)(ULONG)(PerformanceTime).HighPart * NANOSECONDS / (Frequency)) << 32) +    \
 -    ((((((ULONGLONG)(ULONG)(PerformanceTime).HighPart * NANOSECONDS) % (Frequency)) << 32) + \
 -      ((ULONGLONG)(PerformanceTime).LowPart * NANOSECONDS)) / (Frequency)))
 - 
 - typedef struct
 - {
 -   ULONG CreateFlags;
 - }KSCLOCK_CREATE, * PKSCLOCK_CREATE;
 - 
 - typedef struct
 - {
 -   LONGLONG Time;
 -   LONGLONG SystemTime;
 - }KSCORRELATED_TIME, * PKSCORRELATED_TIME;
 - 
 - typedef struct
 - {
 -   LONGLONG Granularity;
 -   LONGLONG Error;
 - }KSRESOLUTION, * PKSRESOLUTION;
 - 
 - typedef enum
 - {
 -   KSPROPERTY_CLOCK_TIME,
 -   KSPROPERTY_CLOCK_PHYSICALTIME,
 -   KSPROPERTY_CLOCK_CORRELATEDTIME,
 -   KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME,
 -   KSPROPERTY_CLOCK_RESOLUTION,
 -   KSPROPERTY_CLOCK_STATE,
 - #if defined(_NTDDK_)
 -   KSPROPERTY_CLOCK_FUNCTIONTABLE
 - #endif /* _NTDDK_ */
 - }KSPROPERTY_CLOCK;
 - 
 - #if defined(_NTDDK_)
 - typedef LONGLONG (FASTCALL * PFNKSCLOCK_GETTIME)(PFILE_OBJECT FileObject);
 - typedef LONGLONG (FASTCALL * PFNKSCLOCK_CORRELATEDTIME)(PFILE_OBJECT FileObject,
 -                                                         PLONGLONG SystemTime);
 - 
 - typedef struct
 - {
 -   PFNKSCLOCK_GETTIME GetTime;
 -   PFNKSCLOCK_GETTIME GetPhysicalTime;
 -   PFNKSCLOCK_CORRELATEDTIME GetCorrelatedTime;
 -   PFNKSCLOCK_CORRELATEDTIME GetCorrelatedPhysicalTime;
 - }KSCLOCK_FUNCTIONTABLE, * PKSCLOCK_FUNCTIONTABLE;
 - 
 - typedef BOOLEAN (*PFNKSSETTIMER)(PVOID Context, PKTIMER Timer,
 -                                  LARGE_INTEGER DueTime, PKDPC Dpc);
 - typedef BOOLEAN (*PFNKSCANCELTIMER)(PVOID Context, PKTIMER Timer);
 - typedef LONGLONG (FASTCALL * PFNKSCORRELATEDTIME)(PVOID Context,
 -                                                   PLONGLONG SystemTime);
 - 
 - typedef PVOID PKSDEFAULTCLOCK;
 - 
 -  # define DEFINE_KSPROPERTY_ITEM_CLOCK_TIME(Handler)          \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_CLOCK_TIME,          \
 -     (Handler),              \
 -     sizeof(KSPROPERTY), sizeof(LONGLONG),   \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 -  # define DEFINE_KSPROPERTY_ITEM_CLOCK_PHYSICALTIME(Handler)      \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_CLOCK_PHYSICALTIME,      \
 -     (Handler),              \
 -     sizeof(KSPROPERTY), sizeof(LONGLONG),   \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 -  # define DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDTIME(Handler)        \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_CLOCK_CORRELATEDTIME,    \
 -     (Handler),              \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(KSCORRELATED_TIME),      \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 -  # define DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDPHYSICALTIME(Handler)    \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME, \
 -     (Handler),              \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(KSCORRELATED_TIME),      \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 -  # define DEFINE_KSPROPERTY_ITEM_CLOCK_RESOLUTION(Handler)        \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_CLOCK_RESOLUTION,        \
 -     (Handler),              \
 -     sizeof(KSPROPERTY), sizeof(KSRESOLUTION), \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 -  # define DEFINE_KSPROPERTY_ITEM_CLOCK_STATE(Handler)         \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_CLOCK_STATE,         \
 -     (Handler),              \
 -     sizeof(KSPROPERTY), sizeof(KSSTATE),    \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 -  # define DEFINE_KSPROPERTY_ITEM_CLOCK_FUNCTIONTABLE(Handler)     \
 -   DEFINE_KSPROPERTY_ITEM(                     \
 -     KSPROPERTY_CLOCK_FUNCTIONTABLE,     \
 -     (Handler),              \
 -     sizeof(KSPROPERTY),         \
 -     sizeof(KSCLOCK_FUNCTIONTABLE),      \
 -     NULL, NULL, 0, NULL, NULL, 0)
 - 
 -  # define DEFINE_KSPROPERTY_CLOCKSET(ClockSet, PropTime, PropPhysicalTime, PropCorrelatedTime, PropCorrelatedPhysicalTime, PropResolution, PropState, PropFunctionTable) \
 -   DEFINE_KSPROPERTY_TABLE(ClockSet) {                 \
 -     DEFINE_KSPROPERTY_ITEM_CLOCK_TIME(PropTime),            \
 -     DEFINE_KSPROPERTY_ITEM_CLOCK_PHYSICALTIME(PropPhysicalTime),    \
 -     DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDTIME(PropCorrelatedTime), \
 -     DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDPHYSICALTIME(PropCorrelatedPhysicalTime), \
 -     DEFINE_KSPROPERTY_ITEM_CLOCK_RESOLUTION(PropResolution),    \
 -     DEFINE_KSPROPERTY_ITEM_CLOCK_STATE(PropState),          \
 -     DEFINE_KSPROPERTY_ITEM_CLOCK_FUNCTIONTABLE(PropFunctionTable),  \
 -   }
 - #endif /* _NTDDK_ */
 - 
 - #define STATIC_KSEVENTSETID_Clock                   \
 -   0x364D8E20L, 0x62C7, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
 - DEFINE_GUIDSTRUCT("364D8E20-62C7-11CF-A5D6-28DB04C10000", KSEVENTSETID_Clock);
 - #define KSEVENTSETID_Clock DEFINE_GUIDNAMED(KSEVENTSETID_Clock)
 - 
 - typedef enum
 - {
 -   KSEVENT_CLOCK_INTERVAL_MARK,
 -   KSEVENT_CLOCK_POSITION_MARK
 - }KSEVENT_CLOCK_POSITION;
 - 
 - #define STATIC_KSEVENTSETID_Connection                  \
 -   0x7f4bcbe0L, 0x9ea5, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00
 - DEFINE_GUIDSTRUCT("7f4bcbe0-9ea5-11cf-a5d6-28db04c10000", KSEVENTSETID_Connection);
 - #define KSEVENTSETID_Connection DEFINE_GUIDNAMED(KSEVENTSETID_Connection)
 - 
 - typedef enum
 - {
 -   KSEVENT_CONNECTION_POSITIONUPDATE,
 -   KSEVENT_CONNECTION_DATADISCONTINUITY,
 -   KSEVENT_CONNECTION_TIMEDISCONTINUITY,
 -   KSEVENT_CONNECTION_PRIORITY,
 -   KSEVENT_CONNECTION_ENDOFSTREAM
 - }KSEVENT_CONNECTION;
 - 
 - typedef struct
 - {
 -   PVOID Context;
 -   ULONG Proportion;
 -   LONGLONG DeltaTime;
 - }KSQUALITY, * PKSQUALITY;
 - 
 - typedef struct
 - {
 -   PVOID Context;
 -   ULONG Status;
 - }KSERROR, * PKSERROR;
 - 
 - typedef KSIDENTIFIER KSDEGRADE, * PKSDEGRADE;
 - 
 - #define STATIC_KSDEGRADESETID_Standard                  \
 -   0x9F564180L, 0x704C, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
 - DEFINE_GUIDSTRUCT("9F564180-704C-11D0-A5D6-28DB04C10000", KSDEGRADESETID_Standard);
 - #define KSDEGRADESETID_Standard DEFINE_GUIDNAMED(KSDEGRADESETID_Standard)
 - 
 - typedef enum
 - {
 -   KSDEGRADE_STANDARD_SAMPLE,
 -   KSDEGRADE_STANDARD_QUALITY,
 -   KSDEGRADE_STANDARD_COMPUTATION,
 -   KSDEGRADE_STANDARD_SKIP
 - }KSDEGRADE_STANDARD;
 - 
 - #if defined(_NTDDK_)
 - 
 -  # define KSPROBE_STREAMREAD 0x00000000
 -  # define KSPROBE_STREAMWRITE 0x00000001
 -  # define KSPROBE_ALLOCATEMDL 0x00000010
 -  # define KSPROBE_PROBEANDLOCK 0x00000020
 -  # define KSPROBE_SYSTEMADDRESS 0x00000040
 -  # define KSPROBE_MODIFY 0x00000200
 -  # define KSPROBE_STREAMWRITEMODIFY (KSPROBE_MODIFY | KSPROBE_STREAMWRITE)
 -  # define KSPROBE_ALLOWFORMATCHANGE 0x00000080
 -  # define KSSTREAM_READ KSPROBE_STREAMREAD
 -  # define KSSTREAM_WRITE KSPROBE_STREAMWRITE
 -  # define KSSTREAM_PAGED_DATA 0x00000000
 -  # define KSSTREAM_NONPAGED_DATA 0x00000100
 -  # define KSSTREAM_SYNCHRONOUS 0x00001000
 -  # define KSSTREAM_FAILUREEXCEPTION 0x00002000
 - 
 - typedef NTSTATUS (*PFNKSCONTEXT_DISPATCH)(PVOID Context, PIRP Irp);
 - typedef NTSTATUS (*PFNKSHANDLER)(PIRP Irp, PKSIDENTIFIER Request, PVOID Data);
 - typedef BOOLEAN (*PFNKSFASTHANDLER)(PFILE_OBJECT FileObject,
 -                                     PKSIDENTIFIER Request,
 -                                     ULONG RequestLength, PVOID Data,
 -                                     ULONG DataLength,
 -                                     PIO_STATUS_BLOCK IoStatus);
 - typedef NTSTATUS (*PFNKSALLOCATOR)(PIRP Irp, ULONG BufferSize,
 -                                    BOOLEAN InputOperation);
 - 
 - typedef struct
 - {
 -   KSPROPERTY_MEMBERSHEADER MembersHeader;
 -   const VOID* Members;
 - }KSPROPERTY_MEMBERSLIST, * PKSPROPERTY_MEMBERSLIST;
 - 
 - typedef struct
 - {
 -   KSIDENTIFIER PropTypeSet;
 -   ULONG MembersListCount;
 -   const KSPROPERTY_MEMBERSLIST* MembersList;
 - }KSPROPERTY_VALUES, * PKSPROPERTY_VALUES;
 - 
 -  # define DEFINE_KSPROPERTY_TABLE(tablename)              \
 -   const KSPROPERTY_ITEM tablename[] =
 - 
 -  # define DEFINE_KSPROPERTY_ITEM(PropertyId, GetHandler, MinProperty, MinData, SetHandler, Values, RelationsCount, Relations, SupportHandler, SerializedSize) \
 -   {                                   \
 -     PropertyId, (PFNKSHANDLER)GetHandler,       \
 -     MinProperty, MinData,               \
 -     (PFNKSHANDLER)SetHandler,           \
 -     (PKSPROPERTY_VALUES)Values, RelationsCount, \
 -     (PKSPROPERTY)Relations,             \
 -     (PFNKSHANDLER)SupportHandler,           \
 -     (ULONG)SerializedSize               \
 -   }
 - 
 - typedef struct
 - {
 -   ULONG PropertyId;
 -   __MINGW_EXTENSION union
 -   {
 -     PFNKSHANDLER GetPropertyHandler;
 -     BOOLEAN GetSupported;
 -   };
 -   ULONG MinProperty;
 -   ULONG MinData;
 -   __MINGW_EXTENSION union
 -   {
 -     PFNKSHANDLER SetPropertyHandler;
 -     BOOLEAN SetSupported;
 -   };
 -   const KSPROPERTY_VALUES* Values;
 -   ULONG RelationsCount;
 -   const KSPROPERTY* Relations;
 -   PFNKSHANDLER SupportHandler;
 -   ULONG SerializedSize;
 - }KSPROPERTY_ITEM, * PKSPROPERTY_ITEM;
 - 
 -  # define DEFINE_KSFASTPROPERTY_ITEM(PropertyId, GetHandler, SetHandler)  \
 -   {                                   \
 -     PropertyId, (PFNKSFASTHANDLER)GetHandler,   \
 -     (PFNKSFASTHANDLER)SetHandler, 0         \
 -   }
 - 
 - typedef struct
 - {
 -   ULONG PropertyId;
 -   __MINGW_EXTENSION union
 -   {
 -     PFNKSFASTHANDLER GetPropertyHandler;
 -     BOOLEAN GetSupported;
 -   };
 -   __MINGW_EXTENSION union
 -   {
 -     PFNKSFASTHANDLER SetPropertyHandler;
 -     BOOLEAN SetSupported;
 -   };
 -   ULONG Reserved;
 - }KSFASTPROPERTY_ITEM, * PKSFASTPROPERTY_ITEM;
 - 
 -  # define DEFINE_KSPROPERTY_SET(Set, PropertiesCount, PropertyItem, FastIoCount, FastIoTable) \
 -   {                                   \
 -     Set,                        \
 -     PropertiesCount, PropertyItem,          \
 -     FastIoCount, FastIoTable            \
 -   }
 - 
 -  # define DEFINE_KSPROPERTY_SET_TABLE(tablename)              \
 -   const KSPROPERTY_SET tablename[] =
 - 
 - typedef struct
 - {
 -   const GUID* Set;
 -   ULONG PropertiesCount;
 -   const KSPROPERTY_ITEM* PropertyItem;
 -   ULONG FastIoCount;
 -   const KSFASTPROPERTY_ITEM* FastIoTable;
 - }KSPROPERTY_SET, * PKSPROPERTY_SET;
 - 
 -  # define DEFINE_KSMETHOD_TABLE(tablename)                \
 -   const KSMETHOD_ITEM tablename[] =
 - 
 -  # define DEFINE_KSMETHOD_ITEM(MethodId, Flags, MethodHandler, MinMethod, MinData, SupportHandler) \
 -   {                                   \
 -     MethodId, (PFNKSHANDLER)MethodHandler,      \
 -     MinMethod, MinData,             \
 -     SupportHandler, Flags               \
 -   }
 - 
 - typedef struct
 - {
 -   ULONG MethodId;
 -   __MINGW_EXTENSION union
 -   {
 -     PFNKSHANDLER MethodHandler;
 -     BOOLEAN MethodSupported;
 -   };
 -   ULONG MinMethod;
 -   ULONG MinData;
 -   PFNKSHANDLER SupportHandler;
 -   ULONG Flags;
 - }KSMETHOD_ITEM, * PKSMETHOD_ITEM;
 - 
 -  # define DEFINE_KSFASTMETHOD_ITEM(MethodId, MethodHandler)        \
 -   {                                   \
 -     MethodId, (PFNKSFASTHANDLER)MethodHandler   \
 -   }
 - 
 - typedef struct
 - {
 -   ULONG MethodId;
 -   __MINGW_EXTENSION union
 -   {
 -     PFNKSFASTHANDLER MethodHandler;
 -     BOOLEAN MethodSupported;
 -   };
 - }KSFASTMETHOD_ITEM, * PKSFASTMETHOD_ITEM;
 - 
 -  # define DEFINE_KSMETHOD_SET(Set, MethodsCount, MethodItem, FastIoCount, FastIoTable) \
 -   {                                   \
 -     Set,                        \
 -     MethodsCount, MethodItem,           \
 -     FastIoCount, FastIoTable            \
 -   }
 - 
 -  # define DEFINE_KSMETHOD_SET_TABLE(tablename)                \
 -   const KSMETHOD_SET tablename[] =
 - 
 - typedef struct
 - {
 -   const GUID* Set;
 -   ULONG MethodsCount;
 -   const KSMETHOD_ITEM* MethodItem;
 -   ULONG FastIoCount;
 -   const KSFASTMETHOD_ITEM* FastIoTable;
 - }KSMETHOD_SET, * PKSMETHOD_SET;
 - 
 - typedef struct _KSEVENT_ENTRY KSEVENT_ENTRY, * PKSEVENT_ENTRY;
 - typedef NTSTATUS (*PFNKSADDEVENT)(PIRP Irp, PKSEVENTDATA EventData,
 -                                   struct _KSEVENT_ENTRY* EventEntry);
 - typedef VOID (*PFNKSREMOVEEVENT)(PFILE_OBJECT FileObject,
 -                                  struct _KSEVENT_ENTRY* EventEntry);
 - 
 -  # define DEFINE_KSEVENT_TABLE(tablename)                 \
 -   const KSEVENT_ITEM tablename[] =
 - 
 -  # define DEFINE_KSEVENT_ITEM(EventId, DataInput, ExtraEntryData, AddHandler, RemoveHandler, SupportHandler) \
 -   {                                   \
 -     EventId, DataInput, ExtraEntryData,     \
 -     AddHandler, RemoveHandler, SupportHandler   \
 -   }
 - 
 - typedef struct
 - {
 -   ULONG EventId;
 -   ULONG DataInput;
 -   ULONG ExtraEntryData;
 -   PFNKSADDEVENT AddHandler;
 -   PFNKSREMOVEEVENT RemoveHandler;
 -   PFNKSHANDLER SupportHandler;
 - }KSEVENT_ITEM, * PKSEVENT_ITEM;
 - 
 -  # define DEFINE_KSEVENT_SET(Set, EventsCount, EventItem)           \
 -   {                                   \
 -     Set, EventsCount, EventItem         \
 -   }
 - 
 -  # define DEFINE_KSEVENT_SET_TABLE(tablename)             \
 -   const KSEVENT_SET tablename[] =
 - 
 - typedef struct
 - {
 -   const GUID* Set;
 -   ULONG EventsCount;
 -   const KSEVENT_ITEM* EventItem;
 - }KSEVENT_SET, * PKSEVENT_SET;
 - 
 - typedef struct
 - {
 -   KDPC Dpc;
 -   ULONG ReferenceCount;
 -   KSPIN_LOCK AccessLock;
 - }KSDPC_ITEM, * PKSDPC_ITEM;
 - 
 - typedef struct
 - {
 -   KSDPC_ITEM DpcItem;
 -   LIST_ENTRY BufferList;
 - }KSBUFFER_ITEM, * PKSBUFFER_ITEM;
 - 
 -  # define KSEVENT_ENTRY_DELETED 1
 -  # define KSEVENT_ENTRY_ONESHOT 2
 -  # define KSEVENT_ENTRY_BUFFERED 4
 - 
 - struct _KSEVENT_ENTRY
 - {
 -   LIST_ENTRY ListEntry;
 -   PVOID Object;
 -   __MINGW_EXTENSION union
 -   {
 -     PKSDPC_ITEM DpcItem;
 -     PKSBUFFER_ITEM BufferItem;
 -   };
 -   PKSEVENTDATA EventData;
 -   ULONG NotificationType;
 -   const KSEVENT_SET* EventSet;
 -   const KSEVENT_ITEM* EventItem;
 -   PFILE_OBJECT FileObject;
 -   ULONG SemaphoreAdjustment;
 -   ULONG Reserved;
 -   ULONG Flags;
 - };
 - 
 - typedef enum
 - {
 -   KSEVENTS_NONE,
 -   KSEVENTS_SPINLOCK,
 -   KSEVENTS_MUTEX,
 -   KSEVENTS_FMUTEX,
 -   KSEVENTS_FMUTEXUNSAFE,
 -   KSEVENTS_INTERRUPT,
 -   KSEVENTS_ERESOURCE
 - }KSEVENTS_LOCKTYPE;
 - 
 -  # define KSDISPATCH_FASTIO 0x80000000
 - 
 - typedef struct
 - {
 -   PDRIVER_DISPATCH Create;
 -   PVOID Context;
 -   UNICODE_STRING ObjectClass;
 -   PSECURITY_DESCRIPTOR SecurityDescriptor;
 -   ULONG Flags;
 - }KSOBJECT_CREATE_ITEM, * PKSOBJECT_CREATE_ITEM;
 - 
 - typedef VOID (*PFNKSITEMFREECALLBACK)(PKSOBJECT_CREATE_ITEM CreateItem);
 - 
 -  # define KSCREATE_ITEM_SECURITYCHANGED 0x00000001
 -  # define KSCREATE_ITEM_WILDCARD 0x00000002
 -  # define KSCREATE_ITEM_NOPARAMETERS 0x00000004
 -  # define KSCREATE_ITEM_FREEONSTOP 0x00000008
 - 
 -  # define DEFINE_KSCREATE_DISPATCH_TABLE(tablename)         \
 -   KSOBJECT_CREATE_ITEM tablename[] =
 - 
 -  # define DEFINE_KSCREATE_ITEM(DispatchCreate, TypeName, Context)       \
 -   {                                   \
 -     (DispatchCreate), (PVOID)(Context),     \
 -     {                       \
 -       sizeof(TypeName) - sizeof(UNICODE_NULL), \
 -       sizeof(TypeName),           \
 -       (PWCHAR)(TypeName)          \
 -     },                      \
 -     NULL, 0                     \
 -   }
 - 
 -  # define DEFINE_KSCREATE_ITEMEX(DispatchCreate, TypeName, Context, Flags)   \
 -   {                                   \
 -     (DispatchCreate),               \
 -     (PVOID)(Context),               \
 -     {                       \
 -       sizeof(TypeName) - sizeof(UNICODE_NULL), \
 -       sizeof(TypeName),           \
 -       (PWCHAR)(TypeName)          \
 -     },                      \
 -     NULL, (Flags)                   \
 -   }
 - 
 -  # define DEFINE_KSCREATE_ITEMNULL(DispatchCreate, Context)        \
 -   {                                   \
 -     DispatchCreate, Context,            \
 -     {                       \
 -       0, 0, NULL,             \
 -     },                      \
 -     NULL, 0                     \
 -   }
 - 
 - typedef struct
 - {
 -   ULONG CreateItemsCount;
 -   PKSOBJECT_CREATE_ITEM CreateItemsList;
 - }KSOBJECT_CREATE, * PKSOBJECT_CREATE;
 - 
 - typedef struct
 - {
 -   PDRIVER_DISPATCH DeviceIoControl;
 -   PDRIVER_DISPATCH Read;
 -   PDRIVER_DISPATCH Write;
 -   PDRIVER_DISPATCH Flush;
 -   PDRIVER_DISPATCH Close;
 -   PDRIVER_DISPATCH QuerySecurity;
 -   PDRIVER_DISPATCH SetSecurity;
 -   PFAST_IO_DEVICE_CONTROL FastDeviceIoControl;
 -   PFAST_IO_READ FastRead;
 -   PFAST_IO_WRITE FastWrite;
 - }KSDISPATCH_TABLE, * PKSDISPATCH_TABLE;
 - 
 -  # define DEFINE_KSDISPATCH_TABLE(tablename, DeviceIoControl, Read, Write, Flush, Close, QuerySecurity, SetSecurity, FastDeviceIoControl, FastRead, FastWrite) \
 -   const KSDISPATCH_TABLE tablename =              \
 -   {                               \
 -     DeviceIoControl,                    \
 -     Read,                           \
 -     Write,                          \
 -     Flush,                          \
 -     Close,                          \
 -     QuerySecurity,                      \
 -     SetSecurity,                        \
 -     FastDeviceIoControl,                    \
 -     FastRead,                       \
 -     FastWrite,                      \
 -   }
 - 
 -  # define KSCREATE_ITEM_IRP_STORAGE(Irp)                  \
 -   (*(PKSOBJECT_CREATE_ITEM*)&(Irp)->Tail.Overlay.DriverContext[0])
 -  # define KSEVENT_SET_IRP_STORAGE(Irp)                    \
 -   (*(const KSEVENT_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
 -  # define KSEVENT_ITEM_IRP_STORAGE(Irp)                   \
 -   (*(const KSEVENT_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
 -  # define KSEVENT_ENTRY_IRP_STORAGE(Irp)                  \
 -   (*(PKSEVENT_ENTRY*)&(Irp)->Tail.Overlay.DriverContext[0])
 -  # define KSMETHOD_SET_IRP_STORAGE(Irp)                   \
 -   (*(const KSMETHOD_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
 -  # define KSMETHOD_ITEM_IRP_STORAGE(Irp)                  \
 -   (*(const KSMETHOD_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
 -  # define KSMETHOD_TYPE_IRP_STORAGE(Irp)                  \
 -   (*(ULONG_PTR*)(&(Irp)->Tail.Overlay.DriverContext[2]))
 -  # define KSQUEUE_SPINLOCK_IRP_STORAGE(Irp)               \
 -   (*(PKSPIN_LOCK*)&(Irp)->Tail.Overlay.DriverContext[1])
 -  # define KSPROPERTY_SET_IRP_STORAGE(Irp)                 \
 -   (*(const KSPROPERTY_SET**)&(Irp)->Tail.Overlay.DriverContext[0])
 -  # define KSPROPERTY_ITEM_IRP_STORAGE(Irp)                \
 -   (*(const KSPROPERTY_ITEM**)&(Irp)->Tail.Overlay.DriverContext[3])
 -  # define KSPROPERTY_ATTRIBUTES_IRP_STORAGE(Irp)              \
 -   (*(PKSATTRIBUTE_LIST*)&(Irp)->Tail.Overlay.DriverContext[2])
 - 
 - typedef PVOID KSDEVICE_HEADER, KSOBJECT_HEADER;
 - 
 - typedef enum
 - {
 -   KsInvokeOnSuccess = 1,
 -   KsInvokeOnError = 2,
 -   KsInvokeOnCancel = 4
 - }KSCOMPLETION_INVOCATION;
 - 
 - typedef enum
 - {
 -   KsListEntryTail,
 -   KsListEntryHead
 - }KSLIST_ENTRY_LOCATION;
 - 
 - typedef enum
 - {
 -   KsAcquireOnly,
 -   KsAcquireAndRemove,
 -   KsAcquireOnlySingleItem,
 -   KsAcquireAndRemoveOnlySingleItem
 - }KSIRP_REMOVAL_OPERATION;
 - 
 - typedef enum
 - {
 -   KsStackCopyToNewLocation,
 -   KsStackReuseCurrentLocation,
 -   KsStackUseNewLocation
 - }KSSTACK_USE;
 - 
 - typedef enum
 - {
 -   KSTARGET_STATE_DISABLED,
 -   KSTARGET_STATE_ENABLED
 - }KSTARGET_STATE;
 - 
 - typedef NTSTATUS (*PFNKSIRPLISTCALLBACK)(PIRP Irp, PVOID Context);
 - typedef VOID (*PFNREFERENCEDEVICEOBJECT)(PVOID Context);
 - typedef VOID (*PFNDEREFERENCEDEVICEOBJECT)(PVOID Context);
 - typedef NTSTATUS (*PFNQUERYREFERENCESTRING)(PVOID Context, PWCHAR* String);
 - 
 -  # define BUS_INTERFACE_REFERENCE_VERSION 0x100
 - 
 - typedef struct
 - {
 -   INTERFACE Interface;
 - 
 -   PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject;
 -   PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject;
 -   PFNQUERYREFERENCESTRING QueryReferenceString;
 - }BUS_INTERFACE_REFERENCE, * PBUS_INTERFACE_REFERENCE;
 - 
 -  # define STATIC_REFERENCE_BUS_INTERFACE STATIC_KSMEDIUMSETID_Standard
 -  # define REFERENCE_BUS_INTERFACE KSMEDIUMSETID_Standard
 - 
 - #endif /* _NTDDK_ */
 - 
 - #ifndef PACK_PRAGMAS_NOT_SUPPORTED
 -  # include <pshpack1.h>
 - #endif
 - 
 - typedef struct
 - {
 -   GUID PropertySet;
 -   ULONG Count;
 - }KSPROPERTY_SERIALHDR, * PKSPROPERTY_SERIALHDR;
 - 
 - #ifndef PACK_PRAGMAS_NOT_SUPPORTED
 -  # include <poppack.h>
 - #endif
 - 
 - typedef struct
 - {
 -   KSIDENTIFIER PropTypeSet;
 -   ULONG Id;
 -   ULONG PropertyLength;
 - }KSPROPERTY_SERIAL, * PKSPROPERTY_SERIAL;
 - 
 - #if defined(_NTDDK_)
 - 
 -  # define IOCTL_KS_HANDSHAKE                      \
 -   CTL_CODE(FILE_DEVICE_KS, 0x007, METHOD_NEITHER, FILE_ANY_ACCESS)
 - 
 - typedef struct
 - {
 -   GUID ProtocolId;
 -   PVOID Argument1;
 -   PVOID Argument2;
 - }KSHANDSHAKE, * PKSHANDSHAKE;
 - 
 - typedef struct _KSGATE KSGATE, * PKSGATE;
 - 
 - struct _KSGATE
 - {
 -   LONG Count;
 -   PKSGATE NextGate;
 - };
 - 
 - typedef PVOID KSOBJECT_BAG;
 - 
 - typedef BOOLEAN (*PFNKSGENERATEEVENTCALLBACK)(PVOID Context,
 -                                               PKSEVENT_ENTRY EventEntry);
 - 
 - typedef NTSTATUS (*PFNKSDEVICECREATE)(PKSDEVICE Device);
 - 
 - typedef NTSTATUS (*PFNKSDEVICEPNPSTART)(PKSDEVICE Device, PIRP Irp,
 -                                         PCM_RESOURCE_LIST TranslatedResourceList,
 -                                         PCM_RESOURCE_LIST UntranslatedResourceList);
 - 
 - typedef NTSTATUS (*PFNKSDEVICE)(PKSDEVICE Device);
 - 
 - typedef NTSTATUS (*PFNKSDEVICEIRP)(PKSDEVICE Device, PIRP Irp);
 - 
 - typedef void (*PFNKSDEVICEIRPVOID)(PKSDEVICE Device, PIRP Irp);
 - 
 - typedef NTSTATUS (*PFNKSDEVICEQUERYCAPABILITIES)(PKSDEVICE Device, PIRP Irp,
 -                                                  PDEVICE_CAPABILITIES Capabilities);
 - 
 - typedef NTSTATUS (*PFNKSDEVICEQUERYPOWER)(PKSDEVICE Device, PIRP Irp,
 -                                           DEVICE_POWER_STATE DeviceTo,
 -                                           DEVICE_POWER_STATE DeviceFrom,
 -                                           SYSTEM_POWER_STATE SystemTo,
 -                                           SYSTEM_POWER_STATE SystemFrom,
 -                                           POWER_ACTION Action);
 - 
 - typedef void (*PFNKSDEVICESETPOWER)(PKSDEVICE Device, PIRP Irp,
 -                                     DEVICE_POWER_STATE To,
 -                                     DEVICE_POWER_STATE From);
 - 
 - typedef NTSTATUS (*PFNKSFILTERFACTORYVOID)(PKSFILTERFACTORY FilterFactory);
 - 
 - typedef void (*PFNKSFILTERFACTORYPOWER)(PKSFILTERFACTORY FilterFactory,
 -                                         DEVICE_POWER_STATE State);
 - 
 - typedef NTSTATUS (*PFNKSFILTERIRP)(PKSFILTER Filter, PIRP Irp);
 - 
 - typedef NTSTATUS (*PFNKSFILTERPROCESS)(PKSFILTER Filter,
 -                                        PKSPROCESSPIN_INDEXENTRY Index);
 - 
 - typedef NTSTATUS (*PFNKSFILTERVOID)(PKSFILTER Filter);
 - 
 - typedef void (*PFNKSFILTERPOWER)(PKSFILTER Filter, DEVICE_POWER_STATE State);
 - 
 - typedef NTSTATUS (*PFNKSPINIRP)(PKSPIN Pin, PIRP Irp);
 - 
 - typedef NTSTATUS (*PFNKSPINSETDEVICESTATE)(PKSPIN Pin, KSSTATE ToState,
 -                                            KSSTATE FromState);
 - 
 - typedef NTSTATUS (*PFNKSPINSETDATAFORMAT)(PKSPIN Pin, PKSDATAFORMAT OldFormat,
 -                                           PKSMULTIPLE_ITEM OldAttributeList,
 -                                           const KSDATARANGE* DataRange,
 -                                           const KSATTRIBUTE_LIST* AttributeRange);
 - 
 - typedef NTSTATUS (*PFNKSPINHANDSHAKE)(PKSPIN Pin, PKSHANDSHAKE In,
 -                                       PKSHANDSHAKE Out);
 - 
 - typedef NTSTATUS (*PFNKSPIN)(PKSPIN Pin);
 - 
 - typedef void (*PFNKSPINVOID)(PKSPIN Pin);
 - 
 - typedef void (*PFNKSPINPOWER)(PKSPIN Pin, DEVICE_POWER_STATE State);
 - 
 - typedef BOOLEAN (*PFNKSPINSETTIMER)(PKSPIN Pin, PKTIMER Timer,
 -                                     LARGE_INTEGER DueTime, PKDPC Dpc);
 - 
 - typedef BOOLEAN (*PFNKSPINCANCELTIMER)(PKSPIN Pin, PKTIMER Timer);
 - 
 - typedef LONGLONG (FASTCALL * PFNKSPINCORRELATEDTIME)(PKSPIN Pin,
 -                                                      PLONGLONG SystemTime);
 - 
 - typedef void (*PFNKSPINRESOLUTION)(PKSPIN Pin, PKSRESOLUTION Resolution);
 - 
 - typedef NTSTATUS (*PFNKSPININITIALIZEALLOCATOR)(PKSPIN Pin,
 -                                                 PKSALLOCATOR_FRAMING AllocatorFraming,
 -                                                 PVOID* Context);
 - 
 - typedef void (*PFNKSSTREAMPOINTER)(PKSSTREAM_POINTER StreamPointer);
 - 
 - typedef struct KSAUTOMATION_TABLE_ KSAUTOMATION_TABLE, * PKSAUTOMATION_TABLE;
 - 
 - struct KSAUTOMATION_TABLE_
 - {
 -   ULONG PropertySetsCount;
 -   ULONG PropertyItemSize;
 -   const KSPROPERTY_SET* PropertySets;
 -   ULONG MethodSetsCount;
 -   ULONG MethodItemSize;
 -   const KSMETHOD_SET* MethodSets;
 -   ULONG EventSetsCount;
 -   ULONG EventItemSize;
 -   const KSEVENT_SET* EventSets;
 -  # ifndef _WIN64
 -   PVOID Alignment;
 -  # endif
 - };
 - 
 -  # define DEFINE_KSAUTOMATION_TABLE(table)                \
 -   const KSAUTOMATION_TABLE table =
 - 
 -  # define DEFINE_KSAUTOMATION_PROPERTIES(table)               \
 -   SIZEOF_ARRAY(table),                    \
 -   sizeof(KSPROPERTY_ITEM),                \
 -   table
 - 
 -  # define DEFINE_KSAUTOMATION_METHODS(table)              \
 -   SIZEOF_ARRAY(table),                    \
 -   sizeof(KSMETHOD_ITEM),                  \
 -   table
 - 
 -  # define DEFINE_KSAUTOMATION_EVENTS(table)               \
 -   SIZEOF_ARRAY(table),                    \
 -   sizeof(KSEVENT_ITEM),                   \
 -   table
 - 
 -  # define DEFINE_KSAUTOMATION_PROPERTIES_NULL             \
 -   0,                          \
 -   sizeof(KSPROPERTY_ITEM),                \
 -   NULL
 - 
 -  # define DEFINE_KSAUTOMATION_METHODS_NULL                \
 -   0,                          \
 -   sizeof(KSMETHOD_ITEM),                  \
 -   NULL
 - 
 -  # define DEFINE_KSAUTOMATION_EVENTS_NULL                 \
 -   0,                          \
 -   sizeof(KSEVENT_ITEM),                   \
 -   NULL
 - 
 -  # define MIN_DEV_VER_FOR_QI (0x100)
 - 
 - struct _KSDEVICE_DISPATCH
 - {
 -   PFNKSDEVICECREATE Add;
 -   PFNKSDEVICEPNPSTART Start;
 -   PFNKSDEVICE PostStart;
 -   PFNKSDEVICEIRP QueryStop;
 -   PFNKSDEVICEIRPVOID CancelStop;
 -   PFNKSDEVICEIRPVOID Stop;
 -   PFNKSDEVICEIRP QueryRemove;
 -   PFNKSDEVICEIRPVOID CancelRemove;
 -   PFNKSDEVICEIRPVOID Remove;
 -   PFNKSDEVICEQUERYCAPABILITIES QueryCapabilities;
 -   PFNKSDEVICEIRPVOID SurpriseRemoval;
 -   PFNKSDEVICEQUERYPOWER QueryPower;
 -   PFNKSDEVICESETPOWER SetPower;
 -   PFNKSDEVICEIRP QueryInterface;
 - };
 - 
 - struct _KSFILTER_DISPATCH
 - {
 -   PFNKSFILTERIRP Create;
 -   PFNKSFILTERIRP Close;
 -   PFNKSFILTERPROCESS Process;
 -   PFNKSFILTERVOID Reset;
 - };
 - 
 - struct _KSPIN_DISPATCH
 - {
 -   PFNKSPINIRP Create;
 -   PFNKSPINIRP Close;
 -   PFNKSPIN Process;
 -   PFNKSPINVOID Reset;
 -   PFNKSPINSETDATAFORMAT SetDataFormat;
 -   PFNKSPINSETDEVICESTATE SetDeviceState;
 -   PFNKSPIN Connect;
 -   PFNKSPINVOID Disconnect;
 -   const KSCLOCK_DISPATCH* Clock;
 -   const KSALLOCATOR_DISPATCH* Allocator;
 - };
 - 
 - struct _KSCLOCK_DISPATCH
 - {
 -   PFNKSPINSETTIMER SetTimer;
 -   PFNKSPINCANCELTIMER CancelTimer;
 -   PFNKSPINCORRELATEDTIME CorrelatedTime;
 -   PFNKSPINRESOLUTION Resolution;
 - };
 - 
 - struct _KSALLOCATOR_DISPATCH
 - {
 -   PFNKSPININITIALIZEALLOCATOR InitializeAllocator;
 -   PFNKSDELETEALLOCATOR DeleteAllocator;
 -   PFNKSDEFAULTALLOCATE Allocate;
 -   PFNKSDEFAULTFREE Free;
 - };
 - 
 -  # define KSDEVICE_DESCRIPTOR_VERSION (0x100)
 - 
 - struct _KSDEVICE_DESCRIPTOR
 - {
 -   const KSDEVICE_DISPATCH* Dispatch;
 -   ULONG FilterDescriptorsCount;
 -   const KSFILTER_DESCRIPTOR* const* FilterDescriptors;
 -   ULONG Version;
 - };
 - 
 - struct _KSFILTER_DESCRIPTOR
 - {
 -   const KSFILTER_DISPATCH* Dispatch;
 -   const KSAUTOMATION_TABLE* AutomationTable;
 -   ULONG Version;
 -  # define KSFILTER_DESCRIPTOR_VERSION ((ULONG)-1)
 -   ULONG Flags;
 -  # define KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING 0x00000001
 -  # define KSFILTER_FLAG_CRITICAL_PROCESSING 0x00000002
 -  # define KSFILTER_FLAG_HYPERCRITICAL_PROCESSING 0x00000004
 -  # define KSFILTER_FLAG_RECEIVE_ZERO_LENGTH_SAMPLES 0x00000008
 -  # define KSFILTER_FLAG_DENY_USERMODE_ACCESS 0x80000000
 -   const GUID* ReferenceGuid;
 -   ULONG PinDescriptorsCount;
 -   ULONG PinDescriptorSize;
 -   const KSPIN_DESCRIPTOR_EX* PinDescriptors;
 -   ULONG CategoriesCount;
 -   const GUID* Categories;
 -   ULONG NodeDescriptorsCount;
 -   ULONG NodeDescriptorSize;
 -   const KSNODE_DESCRIPTOR* NodeDescriptors;
 -   ULONG ConnectionsCount;
 -   const KSTOPOLOGY_CONNECTION* Connections;
 -   const KSCOMPONENTID* ComponentId;
 - };
 - 
 -  # define DEFINE_KSFILTER_DESCRIPTOR(descriptor)              \
 -   const KSFILTER_DESCRIPTOR descriptor =
 - 
 -  # define DEFINE_KSFILTER_PIN_DESCRIPTORS(table)              \
 -   SIZEOF_ARRAY(table),                        \
 -   sizeof(table[0]),                       \
 -   table
 - 
 -  # define DEFINE_KSFILTER_CATEGORIES(table)               \
 -   SIZEOF_ARRAY(table),                        \
 -   table
 - 
 -  # define DEFINE_KSFILTER_CATEGORY(category)              \
 -   1,                              \
 -   &(category)
 - 
 -  # define DEFINE_KSFILTER_CATEGORIES_NULL                 \
 -   0,                              \
 -   NULL
 - 
 -  # define DEFINE_KSFILTER_NODE_DESCRIPTORS(table)             \
 -   SIZEOF_ARRAY(table),                        \
 -   sizeof(table[0]),                       \
 -   table
 - 
 -  # define DEFINE_KSFILTER_NODE_DESCRIPTORS_NULL               \
 -   0,                              \
 -   sizeof(KSNODE_DESCRIPTOR),                  \
 -   NULL
 - 
 -  # define DEFINE_KSFILTER_CONNECTIONS(table)              \
 -   SIZEOF_ARRAY(table),                        \
 -   table
 - 
 -  # define DEFINE_KSFILTER_DEFAULT_CONNECTIONS             \
 -   0,                              \
 -   NULL
 - 
 -  # define DEFINE_KSFILTER_DESCRIPTOR_TABLE(table)             \
 -   const KSFILTER_DESCRIPTOR * const table[] =
 - 
 - struct _KSPIN_DESCRIPTOR_EX
 - {
 -   const KSPIN_DISPATCH* Dispatch;
 -   const KSAUTOMATION_TABLE* AutomationTable;
 -   KSPIN_DESCRIPTOR PinDescriptor;
 -   ULONG Flags;
 -  # define KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING
 -  # define KSPIN_FLAG_CRITICAL_PROCESSING KSFILTER_FLAG_CRITICAL_PROCESSING
 -  # define KSPIN_FLAG_HYPERCRITICAL_PROCESSING KSFILTER_FLAG_HYPERCRITICAL_PROCESSING
 -  # define KSPIN_FLAG_ASYNCHRONOUS_PROCESSING 0x00000008
 -  # define KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING 0x00000010
 -  # define KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL 0x00000020
 -  # define KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING 0x00000040
 -  # define KSPIN_FLAG_ENFORCE_FIFO 0x00000080
 -  # define KSPIN_FLAG_GENERATE_MAPPINGS 0x00000100
 -  # define KSPIN_FLAG_DISTINCT_TRAILING_EDGE 0x00000200
 -  # define KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY 0x00010000
 -  # define KSPIN_FLAG_SPLITTER 0x00020000
 -  # define KSPIN_FLAG_USE_STANDARD_TRANSPORT 0x00040000
 -  # define KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT 0x00080000
 -  # define KSPIN_FLAG_FIXED_FORMAT 0x00100000
 -  # define KSPIN_FLAG_GENERATE_EOS_EVENTS 0x00200000
 -  # define KSPIN_FLAG_RENDERER (KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY | KSPIN_FLAG_GENERATE_EOS_EVENTS)
 -  # define KSPIN_FLAG_IMPLEMENT_CLOCK 0x00400000
 -  # define KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING 0x00800000
 -  # define KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE 0x01000000
 -  # define KSPIN_FLAG_DENY_USERMODE_ACCESS 0x80000000
 -   ULONG InstancesPossible;
 -   ULONG InstancesNecessary;
 -   const KSALLOCATOR_FRAMING_EX* AllocatorFraming;
 -   PFNKSINTERSECTHANDLEREX IntersectHandler;
 - };
 - 
 -  # define DEFINE_KSPIN_DEFAULT_INTERFACES                 \
 -   0,                              \
 -   NULL
 - 
 -  # define DEFINE_KSPIN_DEFAULT_MEDIUMS                    \
 -   0,                              \
 -   NULL
 - 
 - struct _KSNODE_DESCRIPTOR
 - {
 -   const KSAUTOMATION_TABLE* AutomationTable;
 -   const GUID* Type;
 -   const GUID* Name;
 -  # ifndef _WIN64
 -   PVOID Alignment;
 -  # endif
 - };
 - 
 -  # ifndef _WIN64
 -   #  define DEFINE_NODE_DESCRIPTOR(automation, type, name)            \
 -   { (automation), (type), (name), NULL }
 -  # else
 -   #  define DEFINE_NODE_DESCRIPTOR(automation, type, name)            \
 -   { (automation), (type), (name) }
 -  # endif
 - 
 - struct _KSDEVICE
 - {
 -   const KSDEVICE_DESCRIPTOR* Descriptor;
 -   KSOBJECT_BAG Bag;
 -   PVOID Context;
 -   PDEVICE_OBJECT FunctionalDeviceObject;
 -   PDEVICE_OBJECT PhysicalDeviceObject;
 -   PDEVICE_OBJECT NextDeviceObject;
 -   BOOLEAN Started;
 -   SYSTEM_POWER_STATE SystemPowerState;
 -   DEVICE_POWER_STATE DevicePowerState;
 - };
 - 
 - struct _KSFILTERFACTORY
 - {
 -   const KSFILTER_DESCRIPTOR* FilterDescriptor;
 -   KSOBJECT_BAG Bag;
 -   PVOID Context;
 - };
 - 
 - struct _KSFILTER
 - {
 -   const KSFILTER_DESCRIPTOR* Descriptor;
 -   KSOBJECT_BAG Bag;
 -   PVOID Context;
 - };
 - 
 - struct _KSPIN
 - {
 -   const KSPIN_DESCRIPTOR_EX* Descriptor;
 -   KSOBJECT_BAG Bag;
 -   PVOID Context;
 -   ULONG Id;
 -   KSPIN_COMMUNICATION Communication;
 -   BOOLEAN ConnectionIsExternal;
 -   KSPIN_INTERFACE ConnectionInterface;
 -   KSPIN_MEDIUM ConnectionMedium;
 -   KSPRIORITY ConnectionPriority;
 -   PKSDATAFORMAT ConnectionFormat;
 -   PKSMULTIPLE_ITEM AttributeList;
 -   ULONG StreamHeaderSize;
 -   KSPIN_DATAFLOW DataFlow;
 -   KSSTATE DeviceState;
 -   KSRESET ResetState;
 -   KSSTATE ClientState;
 - };
 - 
 - struct _KSMAPPING
 - {
 -   PHYSICAL_ADDRESS PhysicalAddress;
 -   ULONG ByteCount;
 -   ULONG Alignment;
 - };
 - 
 - struct _KSSTREAM_POINTER_OFFSET
 - {
 -  # if defined(_NTDDK_)
 -   __MINGW_EXTENSION union
 -   {
 -     PUCHAR Data;
 -     PKSMAPPING Mappings;
 -   };
 -  # else
 -   PUCHAR Data;
 -  # endif /* _NTDDK_ */
 -  # ifndef _WIN64
 -   PVOID Alignment;
 -  # endif
 -   ULONG Count;
 -   ULONG Remaining;
 - };
 - 
 - struct _KSSTREAM_POINTER
 - {
 -   PVOID Context;
 -   PKSPIN Pin;
 -   PKSSTREAM_HEADER StreamHeader;
 -   PKSSTREAM_POINTER_OFFSET Offset;
 -   KSSTREAM_POINTER_OFFSET OffsetIn;
 -   KSSTREAM_POINTER_OFFSET OffsetOut;
 - };
 - 
 - struct _KSPROCESSPIN
 - {
 -   PKSPIN Pin;
 -   PKSSTREAM_POINTER StreamPointer;
 -   PKSPROCESSPIN InPlaceCounterpart;
 -   PKSPROCESSPIN DelegateBranch;
 -   PKSPROCESSPIN CopySource;
 -   PVOID Data;
 -   ULONG BytesAvailable;
 -   ULONG BytesUsed;
 -   ULONG Flags;
 -   BOOLEAN Terminate;
 - };
 - 
 - struct _KSPROCESSPIN_INDEXENTRY
 - {
 -   PKSPROCESSPIN* Pins;
 -   ULONG Count;
 - };
 - 
 - typedef enum
 - {
 -   KsObjectTypeDevice,
 -   KsObjectTypeFilterFactory,
 -   KsObjectTypeFilter,
 -   KsObjectTypePin
 - }KSOBJECTTYPE;
 - 
 - typedef void (*PFNKSFREE)(PVOID Data);
 - 
 - typedef void (*PFNKSPINFRAMERETURN)(PKSPIN Pin, PVOID Data, ULONG Size, PMDL Mdl,
 -                                     PVOID Context, NTSTATUS Status);
 - 
 - typedef void (*PFNKSPINIRPCOMPLETION)(PKSPIN Pin, PIRP Irp);
 - 
 -  # if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
 -   #  ifndef _IKsControl_
 -    #   define _IKsControl_
 - 
 - typedef struct IKsControl* PIKSCONTROL;
 - 
 -    #   ifndef DEFINE_ABSTRACT_UNKNOWN
 -     #    define DEFINE_ABSTRACT_UNKNOWN()                   \
 -   STDMETHOD_(NTSTATUS, QueryInterface) (THIS_          \
 -                                         REFIID InterfaceId, \
 -                                         PVOID * Interface    \
 -                                         )PURE;         \
 -   STDMETHOD_(ULONG, AddRef) (THIS)PURE;                \
 -   STDMETHOD_(ULONG, Release) (THIS)PURE;
 -    #   endif
 - 
 -    #   undef INTERFACE
 -    #   define INTERFACE IKsControl
 - DECLARE_INTERFACE_(IKsControl, IUnknown)
 - {
 -   DEFINE_ABSTRACT_UNKNOWN()
 -   STDMETHOD_(NTSTATUS, KsProperty) (THIS_
 -                                     PKSPROPERTY Property,
 -                                     ULONG PropertyLength,
 -                                     PVOID PropertyData,
 -                                     ULONG DataLength,
 -                                     ULONG * BytesReturned
 -                                     ) PURE;
 -   STDMETHOD_(NTSTATUS, KsMethod) (THIS_
 -                                   PKSMETHOD Method,
 -                                   ULONG MethodLength,
 -                                   PVOID MethodData,
 -                                   ULONG DataLength,
 -                                   ULONG * BytesReturned
 -                                   ) PURE;
 -   STDMETHOD_(NTSTATUS, KsEvent)  (THIS_
 -                                   PKSEVENT Event,
 -                                   ULONG EventLength,
 -                                   PVOID EventData,
 -                                   ULONG DataLength,
 -                                   ULONG * BytesReturned
 -                                   ) PURE;
 - };
 - typedef struct IKsReferenceClock* PIKSREFERENCECLOCK;
 - 
 -    #   undef INTERFACE
 -    #   define INTERFACE IKsReferenceClock
 - DECLARE_INTERFACE_(IKsReferenceClock, IUnknown)
 - {
 -   DEFINE_ABSTRACT_UNKNOWN()
 -   STDMETHOD_(LONGLONG, GetTime)      (THIS) PURE;
 -   STDMETHOD_(LONGLONG, GetPhysicalTime)  (THIS) PURE;
 -   STDMETHOD_(LONGLONG, GetCorrelatedTime) (THIS_
 -                                            PLONGLONG SystemTime
 -                                            ) PURE;
 -   STDMETHOD_(LONGLONG, GetCorrelatedPhysicalTime) (THIS_
 -                                                    PLONGLONG SystemTime
 -                                                    ) PURE;
 -   STDMETHOD_(NTSTATUS, GetResolution)    (THIS_
 -                                           PKSRESOLUTION Resolution
 -                                           ) PURE;
 -   STDMETHOD_(NTSTATUS, GetState)     (THIS_
 -                                       PKSSTATE State
 -                                       ) PURE;
 - };
 -    #   undef INTERFACE
 - 
 -    #   define INTERFACE IKsDeviceFunctions
 - DECLARE_INTERFACE_(IKsDeviceFunctions, IUnknown)
 - {
 -   DEFINE_ABSTRACT_UNKNOWN()
 -   STDMETHOD_(NTSTATUS, RegisterAdapterObjectEx)  (THIS_
 -                                                   PADAPTER_OBJECT AdapterObject,
 -                                                   PDEVICE_DESCRIPTION DeviceDescription,
 -                                                   ULONG NumberOfMapRegisters,
 -                                                   ULONG MaxMappingsByteCount,
 -                                                   ULONG MappingTableStride
 -                                                   ) PURE;
 - };
 - 
 -    #   undef INTERFACE
 -    #   define STATIC_IID_IKsControl                       \
 -   0x28F54685L, 0x06FD, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
 - DEFINE_GUID(IID_IKsControl,
 -             0x28F54685L, 0x06FD, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96);
 -    #   define STATIC_IID_IKsFastClock                     \
 -   0xc9902485, 0xc180, 0x11d2, 0x84, 0x73, 0xd4, 0x23, 0x94, 0x45, 0x9e, 0x5e
 - DEFINE_GUID(IID_IKsFastClock,
 -             0xc9902485, 0xc180, 0x11d2, 0x84, 0x73, 0xd4, 0x23, 0x94, 0x45, 0x9e, 0x5e);
 -    #   define STATIC_IID_IKsDeviceFunctions                   \
 -   0xe234f2e2, 0xbd69, 0x4f8c, 0xb3, 0xf2, 0x7c, 0xd7, 0x9e, 0xd4, 0x66, 0xbd
 - DEFINE_GUID(IID_IKsDeviceFunctions,
 -             0xe234f2e2, 0xbd69, 0x4f8c, 0xb3, 0xf2, 0x7c, 0xd7, 0x9e, 0xd4, 0x66, 0xbd);
 -   #  endif /* _IKsControl_ */
 -  # endif /* defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) */
 - 
 - #endif /* _NTDDK_ */
 - 
 - #ifdef __cplusplus
 - extern "C" {
 - #endif
 - 
 - #ifdef _KSDDK_
 -  # define KSDDKAPI
 - #else
 -  # define KSDDKAPI DECLSPEC_IMPORT
 - #endif
 - 
 - #if defined(_NTDDK_)
 - 
 - KSDDKAPI NTSTATUS NTAPI KsEnableEvent(PIRP Irp, ULONG EventSetsCount, const KSEVENT_SET* EventSet, PLIST_ENTRY EventsList, KSEVENTS_LOCKTYPE EventsFlags, PVOID EventsLock);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsEnableEventWithAllocator(PIRP Irp, ULONG EventSetsCount, const KSEVENT_SET* EventSet, PLIST_ENTRY EventsList, KSEVENTS_LOCKTYPE EventsFlags, PVOID EventsLock, PFNKSALLOCATOR Allocator, ULONG EventItemSize);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsDisableEvent(PIRP Irp, PLIST_ENTRY EventsList, KSEVENTS_LOCKTYPE EventsFlags, PVOID EventsLock);
 - 
 - KSDDKAPI VOID NTAPI KsDiscardEvent(PKSEVENT_ENTRY EventEntry);
 - 
 - KSDDKAPI VOID NTAPI KsFreeEventList(PFILE_OBJECT FileObject, PLIST_ENTRY EventsList, KSEVENTS_LOCKTYPE EventsFlags, PVOID EventsLock);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsGenerateEvent(PKSEVENT_ENTRY EventEntry);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsGenerateDataEvent(PKSEVENT_ENTRY EventEntry, ULONG DataSize, PVOID Data);
 - 
 - KSDDKAPI VOID NTAPI KsGenerateEventList(GUID* Set, ULONG EventId, PLIST_ENTRY EventsList, KSEVENTS_LOCKTYPE EventsFlags, PVOID EventsLock);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsPropertyHandler(PIRP Irp, ULONG PropertySetsCount, const KSPROPERTY_SET* PropertySet);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsPropertyHandlerWithAllocator(PIRP Irp, ULONG PropertySetsCount, const KSPROPERTY_SET* PropertySet, PFNKSALLOCATOR Allocator, ULONG PropertyItemSize);
 - 
 - KSDDKAPI BOOLEAN NTAPI KsFastPropertyHandler(PFILE_OBJECT FileObject, PKSPROPERTY Property, ULONG PropertyLength, PVOID Data, ULONG DataLength, PIO_STATUS_BLOCK IoStatus, ULONG PropertySetsCount, const KSPROPERTY_SET* PropertySet);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsMethodHandler(PIRP Irp, ULONG MethodSetsCount, const KSMETHOD_SET* MethodSet);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsMethodHandlerWithAllocator(PIRP Irp, ULONG MethodSetsCount, const KSMETHOD_SET* MethodSet, PFNKSALLOCATOR Allocator, ULONG MethodItemSize);
 - 
 - KSDDKAPI BOOLEAN NTAPI KsFastMethodHandler(PFILE_OBJECT FileObject, PKSMETHOD Method, ULONG MethodLength, PVOID Data, ULONG DataLength, PIO_STATUS_BLOCK IoStatus, ULONG MethodSetsCount, const KSMETHOD_SET* MethodSet);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsCreateDefaultAllocator(PIRP Irp);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsCreateDefaultAllocatorEx(PIRP Irp, PVOID InitializeContext, PFNKSDEFAULTALLOCATE DefaultAllocate, PFNKSDEFAULTFREE DefaultFree, PFNKSINITIALIZEALLOCATOR InitializeAllocator, PFNKSDELETEALLOCATOR DeleteAllocator);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsCreateAllocator(HANDLE ConnectionHandle, PKSALLOCATOR_FRAMING AllocatorFraming, PHANDLE AllocatorHandle);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsValidateAllocatorCreateRequest(PIRP Irp, PKSALLOCATOR_FRAMING* AllocatorFraming);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsValidateAllocatorFramingEx(PKSALLOCATOR_FRAMING_EX Framing, ULONG BufferSize, const KSALLOCATOR_FRAMING_EX* PinFraming);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsAllocateDefaultClock(PKSDEFAULTCLOCK* DefaultClock);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsAllocateDefaultClockEx(PKSDEFAULTCLOCK* DefaultClock, PVOID Context, PFNKSSETTIMER SetTimer, PFNKSCANCELTIMER CancelTimer, PFNKSCORRELATEDTIME CorrelatedTime, const KSRESOLUTION* Resolution, ULONG Flags);
 - 
 - KSDDKAPI VOID NTAPI KsFreeDefaultClock(PKSDEFAULTCLOCK DefaultClock);
 - KSDDKAPI NTSTATUS NTAPI KsCreateDefaultClock(PIRP Irp, PKSDEFAULTCLOCK DefaultClock);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsCreateClock(HANDLE ConnectionHandle, PKSCLOCK_CREATE ClockCreate, PHANDLE ClockHandle);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsValidateClockCreateRequest(PIRP Irp, PKSCLOCK_CREATE* ClockCreate);
 - 
 - KSDDKAPI KSSTATE NTAPI KsGetDefaultClockState(PKSDEFAULTCLOCK DefaultClock);
 - KSDDKAPI VOID NTAPI KsSetDefaultClockState(PKSDEFAULTCLOCK DefaultClock, KSSTATE State);
 - KSDDKAPI LONGLONG NTAPI KsGetDefaultClockTime(PKSDEFAULTCLOCK DefaultClock);
 - KSDDKAPI VOID NTAPI KsSetDefaultClockTime(PKSDEFAULTCLOCK DefaultClock, LONGLONG Time);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsCreatePin(HANDLE FilterHandle, PKSPIN_CONNECT Connect, ACCESS_MASK DesiredAccess, PHANDLE ConnectionHandle);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsValidateConnectRequest(PIRP Irp, ULONG DescriptorsCount, const KSPIN_DESCRIPTOR* Descriptor, PKSPIN_CONNECT* Connect);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsPinPropertyHandler(PIRP Irp, PKSPROPERTY Property, PVOID Data, ULONG DescriptorsCount, const KSPIN_DESCRIPTOR* Descriptor);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsPinDataIntersection(PIRP Irp, PKSP_PIN Pin, PVOID Data, ULONG DescriptorsCount, const KSPIN_DESCRIPTOR* Descriptor, PFNKSINTERSECTHANDLER IntersectHandler);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsPinDataIntersectionEx(PIRP Irp, PKSP_PIN Pin, PVOID Data, ULONG DescriptorsCount, const KSPIN_DESCRIPTOR* Descriptor, ULONG DescriptorSize, PFNKSINTERSECTHANDLEREX IntersectHandler, PVOID HandlerContext);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsHandleSizedListQuery(PIRP Irp, ULONG DataItemsCount, ULONG DataItemSize, const VOID* DataItems);
 - 
 -  # ifndef MAKEINTRESOURCE
 -   #  define MAKEINTRESOURCE(r) ((ULONG_PTR)(USHORT)r)
 -  # endif
 -  # ifndef RT_STRING
 -   #  define RT_STRING MAKEINTRESOURCE(6)
 -   #  define RT_RCDATA MAKEINTRESOURCE(10)
 -  # endif
 - 
 - KSDDKAPI NTSTATUS NTAPI KsLoadResource(PVOID ImageBase, POOL_TYPE PoolType, ULONG_PTR ResourceName, ULONG ResourceType, PVOID* Resource, PULONG ResourceSize);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsGetImageNameAndResourceId(HANDLE RegKey, PUNICODE_STRING ImageName, PULONG_PTR ResourceId, PULONG ValueType);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsMapModuleName(PDEVICE_OBJECT PhysicalDeviceObject, PUNICODE_STRING ModuleName, PUNICODE_STRING ImageName, PULONG_PTR ResourceId, PULONG ValueType);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsReferenceBusObject(KSDEVICE_HEADER Header);
 - KSDDKAPI VOID NTAPI KsDereferenceBusObject(KSDEVICE_HEADER Header);
 - KSDDKAPI NTSTATUS NTAPI KsDispatchQuerySecurity(PDEVICE_OBJECT DeviceObject, PIRP Irp);
 - KSDDKAPI NTSTATUS NTAPI KsDispatchSetSecurity(PDEVICE_OBJECT DeviceObject, PIRP Irp);
 - KSDDKAPI NTSTATUS NTAPI KsDispatchSpecificProperty(PIRP Irp, PFNKSHANDLER Handler);
 - KSDDKAPI NTSTATUS NTAPI KsDispatchSpecificMethod(PIRP Irp, PFNKSHANDLER Handler);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsReadFile(PFILE_OBJECT FileObject, PKEVENT Event, PVOID PortContext, PIO_STATUS_BLOCK IoStatusBlock, PVOID Buffer, ULONG Length, ULONG Key, KPROCESSOR_MODE RequestorMode);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsWriteFile(PFILE_OBJECT FileObject, PKEVENT Event, PVOID PortContext, PIO_STATUS_BLOCK IoStatusBlock, PVOID Buffer, ULONG Length, ULONG Key, KPROCESSOR_MODE RequestorMode);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsQueryInformationFile(PFILE_OBJECT FileObject, PVOID FileInformation, ULONG Length, FILE_INFORMATION_CLASS FileInformationClass);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsSetInformationFile(PFILE_OBJECT FileObject, PVOID FileInformation, ULONG Length, FILE_INFORMATION_CLASS FileInformationClass);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsStreamIo(PFILE_OBJECT FileObject, PKEVENT Event, PVOID PortContext, PIO_COMPLETION_ROUTINE CompletionRoutine, PVOID CompletionContext, KSCOMPLETION_INVOCATION CompletionInvocationFlags, PIO_STATUS_BLOCK IoStatusBlock, PVOID StreamHeaders, ULONG Length, ULONG Flags, KPROCESSOR_MODE RequestorMode);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsProbeStreamIrp(PIRP Irp, ULONG ProbeFlags, ULONG HeaderSize);
 - KSDDKAPI NTSTATUS NTAPI KsAllocateExtraData(PIRP Irp, ULONG ExtraSize, PVOID* ExtraBuffer);
 - KSDDKAPI VOID NTAPI KsNullDriverUnload(PDRIVER_OBJECT DriverObject);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsSetMajorFunctionHandler(PDRIVER_OBJECT DriverObject, ULONG MajorFunction);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsDispatchInvalidDeviceRequest(PDEVICE_OBJECT DeviceObject, PIRP Irp);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsDefaultDeviceIoCompletion(PDEVICE_OBJECT DeviceObject, PIRP Irp);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsDispatchIrp(PDEVICE_OBJECT DeviceObject, PIRP Irp);
 - 
 - KSDDKAPI BOOLEAN NTAPI KsDispatchFastIoDeviceControlFailure(PFILE_OBJECT FileObject, BOOLEAN Wait, PVOID InputBuffer, ULONG InputBufferLength, PVOID OutputBuffer, ULONG OutputBufferLength, ULONG IoControlCode, PIO_STATUS_BLOCK IoStatus, PDEVICE_OBJECT DeviceObject);
 - 
 - KSDDKAPI BOOLEAN NTAPI KsDispatchFastReadFailure(PFILE_OBJECT FileObject, PLARGE_INTEGER FileOffset, ULONG Length, BOOLEAN Wait, ULONG LockKey, PVOID Buffer, PIO_STATUS_BLOCK IoStatus, PDEVICE_OBJECT DeviceObject);
 - 
 -  # define KsDispatchFastWriteFailure KsDispatchFastReadFailure
 - 
 - KSDDKAPI VOID NTAPI KsCancelRoutine(PDEVICE_OBJECT DeviceObject, PIRP Irp);
 - KSDDKAPI VOID NTAPI KsCancelIo(PLIST_ENTRY QueueHead, PKSPIN_LOCK SpinLock);
 - KSDDKAPI VOID NTAPI KsReleaseIrpOnCancelableQueue(PIRP Irp, PDRIVER_CANCEL DriverCancel);
 - 
 - KSDDKAPI PIRP NTAPI KsRemoveIrpFromCancelableQueue(PLIST_ENTRY QueueHead, PKSPIN_LOCK SpinLock, KSLIST_ENTRY_LOCATION ListLocation, KSIRP_REMOVAL_OPERATION RemovalOperation);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsMoveIrpsOnCancelableQueue(PLIST_ENTRY SourceList, PKSPIN_LOCK SourceLock, PLIST_ENTRY DestinationList, PKSPIN_LOCK DestinationLock, KSLIST_ENTRY_LOCATION ListLocation, PFNKSIRPLISTCALLBACK ListCallback, PVOID Context);
 - 
 - KSDDKAPI VOID NTAPI KsRemoveSpecificIrpFromCancelableQueue(PIRP Irp);
 - 
 - KSDDKAPI VOID NTAPI KsAddIrpToCancelableQueue(PLIST_ENTRY QueueHead, PKSPIN_LOCK SpinLock, PIRP Irp, KSLIST_ENTRY_LOCATION ListLocation, PDRIVER_CANCEL DriverCancel);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsAcquireResetValue(PIRP Irp, KSRESET* ResetValue);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsTopologyPropertyHandler(PIRP Irp, PKSPROPERTY Property, PVOID Data, const KSTOPOLOGY* Topology);
 - 
 - KSDDKAPI VOID NTAPI KsAcquireDeviceSecurityLock(KSDEVICE_HEADER Header, BOOLEAN Exclusive);
 - KSDDKAPI VOID NTAPI KsReleaseDeviceSecurityLock(KSDEVICE_HEADER Header);
 - KSDDKAPI NTSTATUS NTAPI KsDefaultDispatchPnp(PDEVICE_OBJECT DeviceObject, PIRP Irp);
 - KSDDKAPI NTSTATUS NTAPI KsDefaultDispatchPower(PDEVICE_OBJECT DeviceObject, PIRP Irp);
 - KSDDKAPI NTSTATUS NTAPI KsDefaultForwardIrp(PDEVICE_OBJECT DeviceObject, PIRP Irp);
 - 
 - KSDDKAPI VOID NTAPI KsSetDevicePnpAndBaseObject(KSDEVICE_HEADER Header, PDEVICE_OBJECT PnpDeviceObject, PDEVICE_OBJECT BaseObject);
 - 
 - KSDDKAPI PDEVICE_OBJECT NTAPI KsQueryDevicePnpObject(KSDEVICE_HEADER Header);
 - KSDDKAPI ACCESS_MASK NTAPI KsQueryObjectAccessMask(KSOBJECT_HEADER Header);
 - 
 - KSDDKAPI VOID NTAPI KsRecalculateStackDepth(KSDEVICE_HEADER Header, BOOLEAN ReuseStackLocation);
 - 
 - KSDDKAPI VOID NTAPI KsSetTargetState(KSOBJECT_HEADER Header, KSTARGET_STATE TargetState);
 - 
 - KSDDKAPI VOID NTAPI KsSetTargetDeviceObject(KSOBJECT_HEADER Header, PDEVICE_OBJECT TargetDevice);
 - 
 - KSDDKAPI VOID NTAPI KsSetPowerDispatch(KSOBJECT_HEADER Header, PFNKSCONTEXT_DISPATCH PowerDispatch, PVOID PowerContext);
 - 
 - KSDDKAPI PKSOBJECT_CREATE_ITEM NTAPI KsQueryObjectCreateItem(KSOBJECT_HEADER Header);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsAllocateDeviceHeader(KSDEVICE_HEADER* Header, ULONG ItemsCount, PKSOBJECT_CREATE_ITEM ItemsList);
 - 
 - KSDDKAPI VOID NTAPI KsFreeDeviceHeader(KSDEVICE_HEADER Header);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsAllocateObjectHeader(KSOBJECT_HEADER* Header, ULONG ItemsCount, PKSOBJECT_CREATE_ITEM ItemsList, PIRP Irp, const KSDISPATCH_TABLE* Table);
 - 
 - KSDDKAPI VOID NTAPI KsFreeObjectHeader(KSOBJECT_HEADER Header);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsAddObjectCreateItemToDeviceHeader(KSDEVICE_HEADER Header, PDRIVER_DISPATCH Create, PVOID Context, PWSTR ObjectClass, PSECURITY_DESCRIPTOR SecurityDescriptor);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsAddObjectCreateItemToObjectHeader(KSOBJECT_HEADER Header, PDRIVER_DISPATCH Create, PVOID Context, PWSTR ObjectClass, PSECURITY_DESCRIPTOR SecurityDescriptor);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsAllocateObjectCreateItem(KSDEVICE_HEADER Header, PKSOBJECT_CREATE_ITEM CreateItem, BOOLEAN AllocateEntry, PFNKSITEMFREECALLBACK ItemFreeCallback);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsFreeObjectCreateItem(KSDEVICE_HEADER Header, PUNICODE_STRING CreateItem);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsFreeObjectCreateItemsByContext(KSDEVICE_HEADER Header, PVOID Context);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsCreateDefaultSecurity(PSECURITY_DESCRIPTOR ParentSecurity, PSECURITY_DESCRIPTOR* DefaultSecurity);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsForwardIrp(PIRP Irp, PFILE_OBJECT FileObject, BOOLEAN ReuseStackLocation);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsForwardAndCatchIrp(PDEVICE_OBJECT DeviceObject, PIRP Irp, PFILE_OBJECT FileObject, KSSTACK_USE StackUse);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsSynchronousIoControlDevice(PFILE_OBJECT FileObject, KPROCESSOR_MODE RequestorMode, ULONG IoControl, PVOID InBuffer, ULONG InSize, PVOID OutBuffer, ULONG OutSize, PULONG BytesReturned);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsUnserializeObjectPropertiesFromRegistry(PFILE_OBJECT FileObject, HANDLE ParentKey, PUNICODE_STRING RegistryPath);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsCacheMedium(PUNICODE_STRING SymbolicLink, PKSPIN_MEDIUM Medium, ULONG PinDirection);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsRegisterWorker(WORK_QUEUE_TYPE WorkQueueType, PKSWORKER* Worker);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsRegisterCountedWorker(WORK_QUEUE_TYPE WorkQueueType, PWORK_QUEUE_ITEM CountedWorkItem, PKSWORKER* Worker);
 - 
 - KSDDKAPI VOID NTAPI KsUnregisterWorker(PKSWORKER Worker);
 - KSDDKAPI NTSTATUS NTAPI KsQueueWorkItem(PKSWORKER Worker, PWORK_QUEUE_ITEM WorkItem);
 - KSDDKAPI ULONG NTAPI KsIncrementCountedWorker(PKSWORKER Worker);
 - KSDDKAPI ULONG NTAPI KsDecrementCountedWorker(PKSWORKER Worker);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsCreateTopologyNode(HANDLE ParentHandle, PKSNODE_CREATE NodeCreate, ACCESS_MASK DesiredAccess, PHANDLE NodeHandle);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsValidateTopologyNodeCreateRequest(PIRP Irp, PKSTOPOLOGY Topology, PKSNODE_CREATE* NodeCreate);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsMergeAutomationTables(PKSAUTOMATION_TABLE* AutomationTableAB, PKSAUTOMATION_TABLE AutomationTableA, PKSAUTOMATION_TABLE AutomationTableB, KSOBJECT_BAG Bag);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsInitializeDriver(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPathName, const KSDEVICE_DESCRIPTOR* Descriptor);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsAddDevice(PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT PhysicalDeviceObject);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsCreateDevice(PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT PhysicalDeviceObject, const KSDEVICE_DESCRIPTOR* Descriptor, ULONG ExtensionSize, PKSDEVICE* Device);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsInitializeDevice(PDEVICE_OBJECT FunctionalDeviceObject, PDEVICE_OBJECT PhysicalDeviceObject, PDEVICE_OBJECT NextDeviceObject, const KSDEVICE_DESCRIPTOR* Descriptor);
 - 
 - KSDDKAPI void NTAPI KsTerminateDevice(PDEVICE_OBJECT DeviceObject);
 - KSDDKAPI PKSDEVICE NTAPI KsGetDeviceForDeviceObject(PDEVICE_OBJECT FunctionalDeviceObject);
 - KSDDKAPI void NTAPI KsAcquireDevice(PKSDEVICE Device);
 - KSDDKAPI void NTAPI KsReleaseDevice(PKSDEVICE Device);
 - 
 - KSDDKAPI void NTAPI KsDeviceRegisterAdapterObject(PKSDEVICE Device, PADAPTER_OBJECT AdapterObject, ULONG MaxMappingsByteCount, ULONG MappingTableStride);
 - 
 - KSDDKAPI ULONG NTAPI KsDeviceGetBusData(PKSDEVICE Device, ULONG DataType, PVOID Buffer, ULONG Offset, ULONG Length);
 - 
 - KSDDKAPI ULONG NTAPI KsDeviceSetBusData(PKSDEVICE Device, ULONG DataType, PVOID Buffer, ULONG Offset, ULONG Length);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsCreateFilterFactory(PDEVICE_OBJECT DeviceObject, const KSFILTER_DESCRIPTOR* Descriptor, PWSTR RefString, PSECURITY_DESCRIPTOR SecurityDescriptor, ULONG CreateItemFlags, PFNKSFILTERFACTORYPOWER SleepCallback, PFNKSFILTERFACTORYPOWER WakeCallback, PKSFILTERFACTORY* FilterFactory);
 - 
 -  # define KsDeleteFilterFactory(FilterFactory)                                                \
 -   KsFreeObjectCreateItemsByContext(*(KSDEVICE_HEADER*)(                                     \
 -                                      KsFilterFactoryGetParentDevice(FilterFactory)->FunctionalDeviceObject->DeviceExtension), \
 -                                    FilterFactory)
 - 
 - KSDDKAPI NTSTATUS NTAPI KsFilterFactoryUpdateCacheData(PKSFILTERFACTORY FilterFactory, const KSFILTER_DESCRIPTOR* FilterDescriptor);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsFilterFactoryAddCreateItem(PKSFILTERFACTORY FilterFactory, PWSTR RefString, PSECURITY_DESCRIPTOR SecurityDescriptor, ULONG CreateItemFlags);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsFilterFactorySetDeviceClassesState(PKSFILTERFACTORY FilterFactory, BOOLEAN NewState);
 - 
 - KSDDKAPI PUNICODE_STRING NTAPI KsFilterFactoryGetSymbolicLink(PKSFILTERFACTORY FilterFactory);
 - 
 - KSDDKAPI void NTAPI KsAddEvent(PVOID Object, PKSEVENT_ENTRY EventEntry);
 - 
 - void __forceinline KsFilterAddEvent(PKSFILTER Filter, PKSEVENT_ENTRY EventEntry)
 - {
 -   KsAddEvent(Filter, EventEntry);
 - }
 - 
 - void __forceinline KsPinAddEvent(PKSPIN Pin, PKSEVENT_ENTRY EventEntry)
 - {
 -   KsAddEvent(Pin, EventEntry);
 - }
 - 
 - KSDDKAPI NTSTATUS NTAPI KsDefaultAddEventHandler(PIRP Irp, PKSEVENTDATA EventData, PKSEVENT_ENTRY EventEntry);
 - 
 - KSDDKAPI void NTAPI KsGenerateEvents(PVOID Object, const GUID* EventSet, ULONG EventId, ULONG DataSize, PVOID Data, PFNKSGENERATEEVENTCALLBACK CallBack, PVOID CallBackContext);
 - 
 - void __forceinline KsFilterGenerateEvents(PKSFILTER Filter, const GUID* EventSet, ULONG EventId, ULONG DataSize, PVOID Data, PFNKSGENERATEEVENTCALLBACK CallBack, PVOID CallBackContext)
 - {
 -   KsGenerateEvents(Filter, EventSet, EventId, DataSize, Data, CallBack,
 -                    CallBackContext);
 - }
 - 
 - void __forceinline KsPinGenerateEvents(PKSPIN Pin, const GUID* EventSet, ULONG EventId, ULONG DataSize, PVOID Data, PFNKSGENERATEEVENTCALLBACK CallBack, PVOID CallBackContext)
 - {
 -   KsGenerateEvents(Pin, EventSet, EventId, DataSize, Data, CallBack,
 -                    CallBackContext);
 - }
 - 
 - typedef enum
 - {
 -   KSSTREAM_POINTER_STATE_UNLOCKED = 0,
 -   KSSTREAM_POINTER_STATE_LOCKED
 - }KSSTREAM_POINTER_STATE;
 - 
 - KSDDKAPI NTSTATUS NTAPI KsPinGetAvailableByteCount(PKSPIN Pin, PLONG InputDataBytes, PLONG OutputBufferBytes);
 - 
 - KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetLeadingEdgeStreamPointer(PKSPIN Pin, KSSTREAM_POINTER_STATE State);
 - 
 - KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetTrailingEdgeStreamPointer(PKSPIN Pin, KSSTREAM_POINTER_STATE State);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsStreamPointerSetStatusCode(PKSSTREAM_POINTER StreamPointer, NTSTATUS Status);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsStreamPointerLock(PKSSTREAM_POINTER StreamPointer);
 - KSDDKAPI void NTAPI KsStreamPointerUnlock(PKSSTREAM_POINTER StreamPointer, BOOLEAN Eject);
 - 
 - KSDDKAPI void NTAPI KsStreamPointerAdvanceOffsetsAndUnlock(PKSSTREAM_POINTER StreamPointer, ULONG InUsed, ULONG OutUsed, BOOLEAN Eject);
 - 
 - KSDDKAPI void NTAPI KsStreamPointerDelete(PKSSTREAM_POINTER StreamPointer);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsStreamPointerClone(PKSSTREAM_POINTER StreamPointer, PFNKSSTREAMPOINTER CancelCallback, ULONG ContextSize, PKSSTREAM_POINTER* CloneStreamPointer);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsStreamPointerAdvanceOffsets(PKSSTREAM_POINTER StreamPointer, ULONG InUsed, ULONG OutUsed, BOOLEAN Eject);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsStreamPointerAdvance(PKSSTREAM_POINTER StreamPointer);
 - KSDDKAPI PMDL NTAPI KsStreamPointerGetMdl(PKSSTREAM_POINTER StreamPointer);
 - 
 - KSDDKAPI PIRP NTAPI KsStreamPointerGetIrp(PKSSTREAM_POINTER StreamPointer, PBOOLEAN FirstFrameInIrp, PBOOLEAN LastFrameInIrp);
 - 
 - KSDDKAPI void NTAPI KsStreamPointerScheduleTimeout(PKSSTREAM_POINTER StreamPointer, PFNKSSTREAMPOINTER Callback, ULONGLONG Interval);
 - 
 - KSDDKAPI void NTAPI KsStreamPointerCancelTimeout(PKSSTREAM_POINTER StreamPointer);
 - KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetFirstCloneStreamPointer(PKSPIN Pin);
 - 
 - KSDDKAPI PKSSTREAM_POINTER NTAPI KsStreamPointerGetNextClone(PKSSTREAM_POINTER StreamPointer);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsPinHandshake(PKSPIN Pin, PKSHANDSHAKE In, PKSHANDSHAKE Out);
 - KSDDKAPI void NTAPI KsCompletePendingRequest(PIRP Irp);
 - KSDDKAPI KSOBJECTTYPE NTAPI KsGetObjectTypeFromIrp(PIRP Irp);
 - KSDDKAPI PVOID NTAPI KsGetObjectFromFileObject(PFILE_OBJECT FileObject);
 - KSDDKAPI KSOBJECTTYPE NTAPI KsGetObjectTypeFromFileObject(PFILE_OBJECT FileObject);
 - 
 - PKSFILTER __forceinline KsGetFilterFromFileObject(PFILE_OBJECT FileObject)
 - {
 -   return (PKSFILTER)KsGetObjectFromFileObject(FileObject);
 - }
 - 
 - PKSPIN __forceinline KsGetPinFromFileObject(PFILE_OBJECT FileObject)
 - {
 -   return (PKSPIN)KsGetObjectFromFileObject(FileObject);
 - }
 - 
 - KSDDKAPI PKSGATE NTAPI KsFilterGetAndGate(PKSFILTER Filter);
 - KSDDKAPI void NTAPI KsFilterAcquireProcessingMutex(PKSFILTER Filter);
 - KSDDKAPI void NTAPI KsFilterReleaseProcessingMutex(PKSFILTER Filter);
 - KSDDKAPI void NTAPI KsFilterAttemptProcessing(PKSFILTER Filter, BOOLEAN Asynchronous);
 - KSDDKAPI PKSGATE NTAPI KsPinGetAndGate(PKSPIN Pin);
 - KSDDKAPI void NTAPI KsPinAttachAndGate(PKSPIN Pin, PKSGATE AndGate);
 - KSDDKAPI void NTAPI KsPinAttachOrGate(PKSPIN Pin, PKSGATE OrGate);
 - KSDDKAPI void NTAPI KsPinAcquireProcessingMutex(PKSPIN Pin);
 - KSDDKAPI void NTAPI KsPinReleaseProcessingMutex(PKSPIN Pin);
 - KSDDKAPI BOOLEAN NTAPI KsProcessPinUpdate(PKSPROCESSPIN ProcessPin);
 - 
 - KSDDKAPI void NTAPI KsPinGetCopyRelationships(PKSPIN Pin, PKSPIN* CopySource, PKSPIN* DelegateBranch);
 - 
 - KSDDKAPI void NTAPI KsPinAttemptProcessing(PKSPIN Pin, BOOLEAN Asynchronous);
 - KSDDKAPI PVOID NTAPI KsGetParent(PVOID Object);
 - 
 - PKSDEVICE __forceinline KsFilterFactoryGetParentDevice(PKSFILTERFACTORY FilterFactory)
 - {
 -   return (PKSDEVICE)KsGetParent((PVOID)FilterFactory);
 - }
 - 
 - PKSFILTERFACTORY __forceinline KsFilterGetParentFilterFactory(PKSFILTER Filter)
 - {
 -   return (PKSFILTERFACTORY)KsGetParent((PVOID)Filter);
 - }
 - 
 - KSDDKAPI PKSFILTER NTAPI KsPinGetParentFilter(PKSPIN Pin);
 - KSDDKAPI PVOID NTAPI KsGetFirstChild(PVOID Object);
 - 
 - PKSFILTERFACTORY __forceinline KsDeviceGetFirstChildFilterFactory(PKSDEVICE Device)
 - {
 -   return (PKSFILTERFACTORY)KsGetFirstChild((PVOID)Device);
 - }
 - 
 - PKSFILTER __forceinline KsFilterFactoryGetFirstChildFilter(PKSFILTERFACTORY FilterFactory)
 - {
 -   return (PKSFILTER)KsGetFirstChild((PVOID)FilterFactory);
 - }
 - 
 - KSDDKAPI ULONG NTAPI KsFilterGetChildPinCount(PKSFILTER Filter, ULONG PinId);
 - KSDDKAPI PKSPIN NTAPI KsFilterGetFirstChildPin(PKSFILTER Filter, ULONG PinId);
 - KSDDKAPI PVOID NTAPI KsGetNextSibling(PVOID Object);
 - KSDDKAPI PKSPIN NTAPI KsPinGetNextSiblingPin(PKSPIN Pin);
 - 
 - PKSFILTERFACTORY __forceinline KsFilterFactoryGetNextSiblingFilterFactory(PKSFILTERFACTORY FilterFactory)
 - {
 -   return (PKSFILTERFACTORY)KsGetNextSibling((PVOID)FilterFactory);
 - }
 - 
 - PKSFILTER __forceinline KsFilterGetNextSiblingFilter(PKSFILTER Filter)
 - {
 -   return (PKSFILTER)KsGetNextSibling((PVOID)Filter);
 - }
 - 
 - KSDDKAPI PKSDEVICE NTAPI KsGetDevice(PVOID Object);
 - 
 - PKSDEVICE __forceinline KsFilterFactoryGetDevice(PKSFILTERFACTORY FilterFactory)
 - {
 -   return KsGetDevice((PVOID)FilterFactory);
 - }
 - 
 - PKSDEVICE __forceinline KsFilterGetDevice(PKSFILTER Filter)
 - {
 -   return KsGetDevice((PVOID)Filter);
 - }
 - 
 - PKSDEVICE __forceinline KsPinGetDevice(PKSPIN Pin)
 - {
 -   return KsGetDevice((PVOID)Pin);
 - }
 - 
 - KSDDKAPI PKSFILTER NTAPI KsGetFilterFromIrp(PIRP Irp);
 - KSDDKAPI PKSPIN NTAPI KsGetPinFromIrp(PIRP Irp);
 - KSDDKAPI ULONG NTAPI KsGetNodeIdFromIrp(PIRP Irp);
 - KSDDKAPI void NTAPI KsAcquireControl(PVOID Object);
 - KSDDKAPI void NTAPI KsReleaseControl(PVOID Object);
 - 
 - void __forceinline KsFilterAcquireControl(PKSFILTER Filter)
 - {
 -   KsAcquireControl((PVOID)Filter);
 - }
 - 
 - void __forceinline KsFilterReleaseControl(PKSFILTER Filter)
 - {
 -   KsReleaseControl((PVOID)Filter);
 - }
 - 
 - void __forceinline KsPinAcquireControl(PKSPIN Pin)
 - {
 -   KsAcquireControl((PVOID)Pin);
 - }
 - 
 - void __forceinline KsPinReleaseControl(PKSPIN Pin)
 - {
 -   KsReleaseControl((PVOID)Pin);
 - }
 - 
 - KSDDKAPI NTSTATUS NTAPI KsAddItemToObjectBag(KSOBJECT_BAG ObjectBag, PVOID Item, PFNKSFREE Free);
 - 
 - KSDDKAPI ULONG NTAPI KsRemoveItemFromObjectBag(KSOBJECT_BAG ObjectBag, PVOID Item, BOOLEAN Free);
 - 
 -  # define KsDiscard(Object, Pointer)                   \
 -   KsRemoveItemFromObjectBag((Object)->Bag, (PVOID)(Pointer), TRUE)
 - 
 - KSDDKAPI NTSTATUS NTAPI KsAllocateObjectBag(PKSDEVICE Device, KSOBJECT_BAG* ObjectBag);
 - KSDDKAPI void NTAPI KsFreeObjectBag(KSOBJECT_BAG ObjectBag);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsCopyObjectBagItems(KSOBJECT_BAG ObjectBagDestination, KSOBJECT_BAG ObjectBagSource);
 - 
 - KSDDKAPI NTSTATUS NTAPI _KsEdit(KSOBJECT_BAG ObjectBag, PVOID* PointerToPointerToItem, ULONG NewSize, ULONG OldSize, ULONG Tag);
 - 
 -  # define KsEdit(Object, PointerToPointer, Tag)                       \
 -   _KsEdit((Object)->Bag, (PVOID*)(PointerToPointer),              \
 -           sizeof(**(PointerToPointer)), sizeof(**(PointerToPointer)), (Tag))
 - 
 -  # define KsEditSized(Object, PointerToPointer, NewSize, OldSize, Tag)            \
 -   _KsEdit((Object)->Bag, (PVOID*)(PointerToPointer), (NewSize), (OldSize), (Tag))
 - 
 - KSDDKAPI NTSTATUS NTAPI KsRegisterFilterWithNoKSPins(PDEVICE_OBJECT DeviceObject, const GUID* InterfaceClassGUID, ULONG PinCount, WINBOOL* PinDirection, KSPIN_MEDIUM* MediumList, GUID* CategoryList);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsFilterCreatePinFactory(PKSFILTER Filter, const KSPIN_DESCRIPTOR_EX* const PinDescriptor, PULONG PinID);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsFilterCreateNode(PKSFILTER Filter, const KSNODE_DESCRIPTOR* const NodeDescriptor, PULONG NodeID);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsFilterAddTopologyConnections(PKSFILTER Filter, ULONG NewConnectionsCount, const KSTOPOLOGY_CONNECTION* const NewTopologyConnections);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsPinGetConnectedPinInterface(PKSPIN Pin, const GUID* InterfaceId, PVOID* Interface);
 - 
 - KSDDKAPI PFILE_OBJECT NTAPI KsPinGetConnectedPinFileObject(PKSPIN Pin);
 - KSDDKAPI PDEVICE_OBJECT NTAPI KsPinGetConnectedPinDeviceObject(PKSPIN Pin);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsPinGetConnectedFilterInterface(PKSPIN Pin, const GUID* InterfaceId, PVOID* Interface);
 - 
 -  # if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
 - KSDDKAPI NTSTATUS NTAPI KsPinGetReferenceClockInterface(PKSPIN Pin, PIKSREFERENCECLOCK* Interface);
 -  # endif /* defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) */
 - 
 - KSDDKAPI VOID NTAPI KsPinSetPinClockTime(PKSPIN Pin, LONGLONG Time);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsPinSubmitFrame(PKSPIN Pin, PVOID Data, ULONG Size, PKSSTREAM_HEADER StreamHeader, PVOID Context);
 - 
 - KSDDKAPI NTSTATUS NTAPI KsPinSubmitFrameMdl(PKSPIN Pin, PMDL Mdl, PKSSTREAM_HEADER StreamHeader, PVOID Context);
 - 
 - KSDDKAPI void NTAPI KsPinRegisterFrameReturnCallback(PKSPIN Pin, PFNKSPINFRAMERETURN FrameReturn);
 - 
 - KSDDKAPI void NTAPI KsPinRegisterIrpCompletionCallback(PKSPIN Pin, PFNKSPINIRPCOMPLETION IrpCompletion);
 - 
 - KSDDKAPI void NTAPI KsPinRegisterHandshakeCallback(PKSPIN Pin, PFNKSPINHANDSHAKE Handshake);
 - 
 - KSDDKAPI void NTAPI KsFilterRegisterPowerCallbacks(PKSFILTER Filter, PFNKSFILTERPOWER Sleep, PFNKSFILTERPOWER Wake);
 - 
 - KSDDKAPI void NTAPI KsPinRegisterPowerCallbacks(PKSPIN Pin, PFNKSPINPOWER Sleep, PFNKSPINPOWER Wake);
 - 
 -  # if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)
 - KSDDKAPI PUNKNOWN NTAPI KsRegisterAggregatedClientUnknown(PVOID Object, PUNKNOWN ClientUnknown);
 - 
 - KSDDKAPI PUNKNOWN NTAPI KsGetOuterUnknown(PVOID Object);
 - 
 - PUNKNOWN __forceinline KsDeviceRegisterAggregatedClientUnknown(PKSDEVICE Device, PUNKNOWN ClientUnknown)
 - {
 -   return KsRegisterAggregatedClientUnknown((PVOID)Device, ClientUnknown);
 - }
 - 
 - PUNKNOWN __forceinline KsDeviceGetOuterUnknown(PKSDEVICE Device)
 - {
 -   return KsGetOuterUnknown((PVOID)Device);
 - }
 - 
 - PUNKNOWN __forceinline KsFilterFactoryRegisterAggregatedClientUnknown(PKSFILTERFACTORY FilterFactory, PUNKNOWN ClientUnknown)
 - {
 -   return KsRegisterAggregatedClientUnknown((PVOID)FilterFactory, ClientUnknown);
 - }
 - 
 - PUNKNOWN __forceinline KsFilterFactoryGetOuterUnknown(PKSFILTERFACTORY FilterFactory)
 - {
 -   return KsGetOuterUnknown((PVOID)FilterFactory);
 - }
 - 
 - PUNKNOWN __forceinline KsFilterRegisterAggregatedClientUnknown(PKSFILTER Filter, PUNKNOWN ClientUnknown)
 - {
 -   return KsRegisterAggregatedClientUnknown((PVOID)Filter, ClientUnknown);
 - }
 - 
 - PUNKNOWN __forceinline KsFilterGetOuterUnknown(PKSFILTER Filter)
 - {
 -   return KsGetOuterUnknown((PVOID)Filter);
 - }
 - 
 - PUNKNOWN __forceinline KsPinRegisterAggregatedClientUnknown(PKSPIN Pin, PUNKNOWN ClientUnknown)
 - {
 -   return KsRegisterAggregatedClientUnknown((PVOID)Pin, ClientUnknown);
 - }
 - 
 - PUNKNOWN __forceinline KsPinGetOuterUnknown(PKSPIN Pin)
 - {
 -   return KsGetOuterUnknown((PVOID)Pin);
 - }
 - 
 -  # endif /* defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) */
 - 
 - #else /* _NTDDK_ */
 - 
 -  # ifndef KS_NO_CREATE_FUNCTIONS
 - KSDDKAPI DWORD WINAPI KsCreateAllocator(HANDLE ConnectionHandle, PKSALLOCATOR_FRAMING AllocatorFraming, PHANDLE AllocatorHandle);
 - KSDDKAPI DWORD NTAPI KsCreateClock(HANDLE ConnectionHandle, PKSCLOCK_CREATE ClockCreate, PHANDLE ClockHandle);
 - KSDDKAPI DWORD WINAPI KsCreatePin(HANDLE FilterHandle, PKSPIN_CONNECT Connect, ACCESS_MASK DesiredAccess, PHANDLE ConnectionHandle);
 - KSDDKAPI DWORD WINAPI KsCreateTopologyNode(HANDLE ParentHandle, PKSNODE_CREATE NodeCreate, ACCESS_MASK DesiredAccess, PHANDLE NodeHandle);
 -  # endif
 - 
 - #endif /* _NTDDK_ */
 - 
 - #ifdef __cplusplus
 - }
 - #endif
 - 
 - #define DENY_USERMODE_ACCESS(pIrp, CompleteRequest)          \
 -   if(pIrp->RequestorMode != KernelMode){               \
 -     pIrp->IoStatus.Information = 0;             \
 -     pIrp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;  \
 -     if(CompleteRequest){                 \
 -       IoCompleteRequest(pIrp, IO_NO_INCREMENT); }   \
 -     return STATUS_INVALID_DEVICE_REQUEST;           \
 -   }
 - 
 - #endif /* _KS_ */
 
 
  |