📄 ks.h
字号:
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;
union {
LONGLONG Reserved;
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 // defined(_NTDDK_)
//===========================================================================
// MEDIATYPE_NULL
#define STATIC_KSDATAFORMAT_TYPE_WILDCARD STATIC_GUID_NULL
#define KSDATAFORMAT_TYPE_WILDCARD GUID_NULL
// MEDIASUBTYPE_NULL
#define STATIC_KSDATAFORMAT_SUBTYPE_WILDCARD STATIC_GUID_NULL
#define KSDATAFORMAT_SUBTYPE_WILDCARD GUID_NULL
// MEDIATYPE_Stream
#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)
// MEDIASUBTYPE_None
#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)
// FORMAT_None
#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),\
sizeof(KSALLOCATOR_FRAMING_EX),\
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)
//===========================================================================
//
// pins flags
//
#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
//
// pins extended framing flags
//
#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
//
// allocator pipes flags
//
// there is at least one data modification in a pipe
#define KSALLOCATOR_FLAG_NO_FRAME_INTEGRITY 0x00000100
#define KSALLOCATOR_FLAG_MULTIPLE_OUTPUT 0x00000200
#define KSALLOCATOR_FLAG_CYCLE 0x00000400
#define KSALLOCATOR_FLAG_ALLOCATOR_EXISTS 0x00000800
// there is no framing dependency between neighbouring pipes.
#define KSALLOCATOR_FLAG_INDEPENDENT_RANGES 0x00001000
#define KSALLOCATOR_FLAG_ATTENTION_STEPPING 0x00002000
//
// old Framing structure
//
typedef struct {
union {
ULONG OptionsFlags; // allocator options (create)
ULONG RequirementsFlags; // allocation requirements (query)
};
#if defined(_NTDDK_)
POOL_TYPE PoolType;
#else // !_NTDDK_
ULONG PoolType;
#endif // !_NTDDK_
ULONG Frames; // total number of allowable outstanding frames
ULONG FrameSize; // total size of frame
ULONG FileAlignment;
ULONG Reserved;
} KSALLOCATOR_FRAMING, *PKSALLOCATOR_FRAMING;
#if defined(_NTDDK_)
typedef
PVOID
(*PFNKSDEFAULTALLOCATE)(
IN PVOID Context
);
typedef
VOID
(*PFNKSDEFAULTFREE)(
IN PVOID Context,
IN PVOID Buffer
);
typedef
NTSTATUS
(*PFNKSINITIALIZEALLOCATOR)(
IN PVOID InitialContext,
IN PKSALLOCATOR_FRAMING AllocatorFraming,
OUT PVOID* Context
);
typedef
VOID
(*PFNKSDELETEALLOCATOR)(
IN PVOID Context
);
#endif // !_NTDDK_
//
// new Framing structure, eventually will replace KSALLOCATOR_FRAMING.
//
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; // compression/expansion ratio
ULONG RatioDenominator;
ULONG RatioConstantMargin;
} KS_COMPRESSION, *PKS_COMPRESSION;
//
// Memory Types and Buses are repeated in each entry.
// Easiest to use but takes a little more memory than the varsize layout Pin\Memories\Buses\Ranges.
//
typedef struct {
GUID MemoryType;
GUID BusType;
ULONG MemoryFlags;
ULONG BusFlags;
ULONG Flags;
ULONG Frames; // total number of allowable outstanding frames
ULONG FileAlignment;
ULONG MemoryTypeWeight; // this memory type Weight pin-wide
KS_FRAMING_RANGE PhysicalRange;
KS_FRAMING_RANGE_WEIGHTED FramingRange;
} KS_FRAMING_ITEM, *PKS_FRAMING_ITEM;
typedef struct {
ULONG CountItems; // count of FramingItem-s below.
ULONG PinFlags;
KS_COMPRESSION OutputCompression;
ULONG PinWeight; // this pin framing's Weight graph-wide
KS_FRAMING_ITEM FramingItem[1];
} KSALLOCATOR_FRAMING_EX, *PKSALLOCATOR_FRAMING_EX;
//
// define memory type GUIDs
//
#define KSMEMORY_TYPE_WILDCARD GUID_NULL
#define STATIC_KSMEMORY_TYPE_WILDCARD STATIC_GUID_NULL
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -