2418 lines
85 KiB
C
2418 lines
85 KiB
C
/*
|
|
* ks.h Kernel streaming functions
|
|
*
|
|
* =========================================================================
|
|
*
|
|
* Open Watcom Project
|
|
*
|
|
* Copyright (c) 2004-2010 The Open Watcom Contributors. All Rights Reserved.
|
|
*
|
|
* This file is automatically generated. Do not edit directly.
|
|
*
|
|
* =========================================================================
|
|
*/
|
|
|
|
#ifndef _KS_
|
|
#define _KS_
|
|
|
|
#ifndef _ENABLE_AUTODEPEND
|
|
#pragma read_only_file;
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* Macro to specify kernel streaming functions */
|
|
#define KSDDKAPI DECLSPEC_IMPORT
|
|
|
|
/* Kernel streaming primitive data types */
|
|
typedef PVOID PKSWORKER;
|
|
#ifdef _NTDDK_
|
|
typedef PVOID PKSDEFAULTCLOCK;
|
|
typedef PVOID KSDEVICE_HEADER;
|
|
typedef PVOID KSOBJECT_HEADER;
|
|
typedef PVOID KSOBJECT_BAG;
|
|
#endif
|
|
|
|
/* Forward declarations */
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
typedef struct _KSDEVICE_DESCRIPTOR KSDEVICE_DESCRIPTOR;
|
|
typedef struct _KSDEVICE_DESCRIPTOR *PKSDEVICE_DESCRIPTOR;
|
|
typedef struct _KSDEVICE_DISPATCH KSDEVICE_DISPATCH;
|
|
typedef struct _KSDEVICE_DISPATCH *PKSDEVICE_DISPATCH;
|
|
typedef struct _KSDEVICE KSDEVICE;
|
|
typedef struct _KSDEVICE *PKSDEVICE;
|
|
typedef struct _KSFILTERFACTORY KSFILTERFACTORY;
|
|
typedef struct _KSFILTERFACTORY *PKSFILTERFACTORY;
|
|
typedef struct _KSFILTER_DESCRIPTOR KSFILTER_DESCRIPTOR;
|
|
typedef struct _KSFILTER_DESCRIPTOR *PKSFILTER_DESCRIPTOR;
|
|
typedef struct _KSFILTER_DISPATCH KSFILTER_DISPATCH;
|
|
typedef struct _KSFILTER_DISPATCH *PKSFILTER_DISPATCH;
|
|
typedef struct _KSFILTER KSFILTER;
|
|
typedef struct _KSFILTER *PKSFILTER;
|
|
typedef struct _KSPIN_DESCRIPTOR_EX KSPIN_DESCRIPTOR_EX;
|
|
typedef struct _KSPIN_DESCRIPTOR_EX *PKSPIN_DESCRIPTOR_EX;
|
|
typedef struct _KSPIN_DISPATCH KSPIN_DISPATCH;
|
|
typedef struct _KSPIN_DISPATCH *PKSPIN_DISPATCH;
|
|
typedef struct _KSCLOCK_DISPATCH KSCLOCK_DISPATCH;
|
|
typedef struct _KSCLOCK_DISPATCH *PKSCLOCK_DISPATCH;
|
|
typedef struct _KSALLOCATOR_DISPATCH KSALLOCATOR_DISPATCH;
|
|
typedef struct _KSALLOCATOR_DISPATCH *PKSALLOCATOR_DISPATCH;
|
|
typedef struct _KSPIN KSPIN;
|
|
typedef struct _KSPIN *PKSPIN;
|
|
typedef struct _KSNODE_DESCRIPTOR KSNODE_DESCRIPTOR;
|
|
typedef struct _KSNODE_DESCRIPTOR *PKSNODE_DESCRIPTOR;
|
|
typedef struct _KSSTREAM_POINTER_OFFSET KSSTREAM_POINTER_OFFSET;
|
|
typedef struct _KSSTREAM_POINTER_OFFSET *PKSSTREAM_POINTER_OFFSET;
|
|
typedef struct _KSSTREAM_POINTER KSSTREAM_POINTER;
|
|
typedef struct _KSSTREAM_POINTER *PKSSTREAM_POINTER;
|
|
typedef struct _KSMAPPING KSMAPPING;
|
|
typedef struct _KSMAPPING *PKSMAPPING;
|
|
typedef struct _KSPROCESSPIN KSPROCESSPIN;
|
|
typedef struct _KSPROCESSPIN *PKSPROCESSPIN;
|
|
typedef struct _KSPROCESSPIN_INDEXENTRY KSPROCESSPIN_INDEXENTRY;
|
|
typedef struct _KSPROCESSPIN_INDEXENTRY *PKSPROCESSPIN_INDEXENTRY;
|
|
#endif
|
|
#endif
|
|
|
|
/* Kernel streaming I/O control codes */
|
|
#define IOCTL_KS_PROPERTY \
|
|
CTL_CODE( FILE_DEVICE_KS, 0x0000, METHOD_NEITHER, FILE_ANY_ACCESS )
|
|
#define IOCTL_KS_ENABLE_EVENT \
|
|
CTL_CODE( FILE_DEVICE_KS, 0x0001, METHOD_NEITHER, FILE_ANY_ACCESS )
|
|
#define IOCTL_KS_DISABLE_EVENT \
|
|
CTL_CODE( FILE_DEVICE_KS, 0x0002, METHOD_NEITHER, FILE_ANY_ACCESS )
|
|
#define IOCTL_KS_METHOD \
|
|
CTL_CODE( FILE_DEVICE_KS, 0x0003, METHOD_NEITHER, FILE_ANY_ACCESS )
|
|
#define IOCTL_KS_WRITE_STREAM \
|
|
CTL_CODE( FILE_DEVICE_KS, 0x0004, METHOD_NEITHER, FILE_WRITE_ACCESS )
|
|
#define IOCTL_KS_READ_STREAM \
|
|
CTL_CODE( FILE_DEVICE_KS, 0x0005, METHOD_NEITHER, FILE_READ_ACCESS )
|
|
#define IOCTL_KS_RESET_STATE \
|
|
CTL_CODE( FILE_DEVICE_KS, 0x0006, METHOD_NEITHER, FILE_ANY_ACCESS )
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
#define IOCTL_KS_HANDSHAKE \
|
|
CTL_CODE( FILE_DEVICE_KS, 0x0007, METHOD_NEITHER, FILE_ANY_ACCESS )
|
|
#endif
|
|
#endif
|
|
|
|
/* Kernel streaming priority values */
|
|
#define KSPRIORITY_LOW 0x00000001L
|
|
#define KSPRIORITY_NORMAL 0x40000000L
|
|
#define KSPRIORITY_HIGH 0x80000000L
|
|
#define KSPRIORITY_EXCLUSIVE 0xFFFFFFFFL
|
|
|
|
/* Kernel streaming method types */
|
|
#define KSMETHOD_TYPE_NONE 0x00000000L
|
|
#define KSMETHOD_TYPE_READ 0x00000001L
|
|
#define KSMETHOD_TYPE_WRITE 0x00000002L
|
|
#define KSMETHOD_TYPE_MODIFY 0x00000003L
|
|
#define KSMETHOD_TYPE_SOURCE 0x00000004L
|
|
#define KSMETHOD_TYPE_SEND 0x00000001L
|
|
#define KSMETHOD_TYPE_SETSUPPORT 0x00000100L
|
|
#define KSMETHOD_TYPE_BASICSUPPORT 0x00000200L
|
|
#define KSMETHOD_TYPE_TOPOLOGY 0x10000000L
|
|
|
|
/* Kernel streaming property types */
|
|
#define KSPROPERTY_TYPE_GET 0x00000001L
|
|
#define KSPROPERTY_TYPE_SET 0x00000002L
|
|
#define KSPROPERTY_TYPE_SETSUPPORT 0x00000100L
|
|
#define KSPROPERTY_TYPE_BASICSUPPORT 0x00000200L
|
|
#define KSPROPERTY_TYPE_RELATIONS 0x00000400L
|
|
#define KSPROPERTY_TYPE_SERIALIZESET 0x00000800L
|
|
#define KSPROPERTY_TYPE_UNSERIALIZESET 0x00001000L
|
|
#define KSPROPERTY_TYPE_SERIALIZERAW 0x00002000L
|
|
#define KSPROPERTY_TYPE_UNSERIALIZERAW 0x00004000L
|
|
#define KSPROPERTY_TYPE_SERIALIZESIZE 0x00008000L
|
|
#define KSPROPERTY_TYPE_DEFAULTVALUES 0x00010000L
|
|
#define KSPROPERTY_TYPE_TOPOLOGY 0x10000000L
|
|
|
|
/* Kernel streaming property member flags */
|
|
#define KSPROPERTY_MEMBER_RANGES 0x00000001L
|
|
#define KSPROPERTY_MEMBER_STEPPEDRANGES 0x00000002L
|
|
#define KSPROPERTY_MEMBER_VALUES 0x00000003L
|
|
|
|
/* Kernel streaming property members header flags */
|
|
#define KSPROPERTY_MEMBER_FLAG_DEFAULT 0x00000001L
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
#define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_MULTICHANNEL 0x00000002L
|
|
#define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_UNIFORM 0x00000004L
|
|
#endif
|
|
|
|
/* Kernel streaming event flags */
|
|
#define KSEVENTF_EVENT_HANDLE 0x00000001L
|
|
#define KSEVENTF_SEMAPHORE_HANDLE 0x00000002L
|
|
#ifdef _NTDDK_
|
|
#define KSEVENTF_EVENT_OBJECT 0x00000004L
|
|
#define KSEVENTF_SEMAPHORE_OBJECT 0x00000008L
|
|
#define KSEVENTF_DPC 0x00000010L
|
|
#define KSEVENTF_WORKITEM 0x00000020L
|
|
#define KSEVENTF_KSWORKITEM 0x00000080L
|
|
#endif
|
|
|
|
/* Kernel streaming event types */
|
|
#define KSEVENT_TYPE_ENABLE 0x00000001L
|
|
#define KSEVENT_TYPE_ONESHOT 0x00000002L
|
|
#define KSEVENT_TYPE_ENABLEBUFFERED 0x00000004L
|
|
#define KSEVENT_TYPE_SETSUPPORT 0x00000100L
|
|
#define KSEVENT_TYPE_BASICSUPPORT 0x00000200L
|
|
#define KSEVENT_TYPE_QUERYBUFFER 0x00000400L
|
|
#define KSEVENT_TYPE_TOPOLOGY 0x10000000L
|
|
|
|
/* Kernel streaming relative event flags */
|
|
#define KSRELATIVEEVENT_FLAG_HANDLE 0x00000001L
|
|
#define KSRELATIVEEVENT_FLAG_POINTER 0x00000002L
|
|
|
|
/* Kernel streaming node special values */
|
|
#define KSFILTER_NODE 0xFFFFFFFFL
|
|
#define KSALL_NODES 0xFFFFFFFFL
|
|
|
|
/* Kernel streaming media types */
|
|
#define KSMEDIUM_TYPE_ANYINSTANCE 0L
|
|
#define KSMEDIUM_STANDARD_DEVIO KSMEDIUM_TYPE_ANYINSTANCE
|
|
|
|
/* Kernel streaming instance special value */
|
|
#define KSINSTANCE_INDETERMINATE 0xFFFFFFFFL
|
|
|
|
/* Kernel streaming data format bits */
|
|
#define KSDATAFORMAT_BIT_TEMPORAL_COMPRESSION 0
|
|
#define KSDATAFORMAT_BIT_ATTRIBUTES 1
|
|
|
|
/* Kernel streaming data format flags */
|
|
#define KSDATAFORMAT_TEMPORAL_COMPRESSION 0x00000001L
|
|
#define KSDATAFORMAT_ATTRIBUTES 0x00000002L
|
|
|
|
/* Kernel streaming data range bits */
|
|
#define KSDATARANGE_BIT_ATTRIBUTES 1
|
|
#define KSDATARANGE_BIT_REQUIRED_ATTRIBUTES 2
|
|
|
|
/* Kernel streaming data range flags */
|
|
#define KSDATARANGE_ATTRIBUTES 0x00000001L
|
|
#define KSDATARANGE_REQUIRED_ATTRIBUTES 0x00000002L
|
|
|
|
/* Kernel streaming attributes */
|
|
#define KSATTRIBUTE_REQUIRED 0x00000001L
|
|
|
|
/* Kernel streaming allocator requirement flags */
|
|
#define KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER 0x00000001L
|
|
#define KSALLOCATOR_REQUIREMENTF_SYSTEM_MEMORY 0x00000002L
|
|
#define KSALLOCATOR_REQUIREMENTF_FRAME_INTEGRITY 0x00000004L
|
|
#define KSALLOCATOR_REQUIREMENTF_MUST_ALLOCATE 0x00000008L
|
|
#define KSALLOCATOR_REQUIREMENTF_PREFERENCES_ONLY 0x80000000L
|
|
|
|
/* Kernel streaming allocator option flags */
|
|
#define KSALLOCATOR_OPTIONF_COMPATIBLE 0x00000001L
|
|
#define KSALLOCATOR_OPTIONF_SYSTEM_MEMORY 0x00000002L
|
|
#define KSALLOCATOR_OPTIONF_VALID 0x00000003L
|
|
|
|
/* Kernel streaming allocator flags */
|
|
#define KSALLOCATOR_FLAG_PARTIAL_READ_SUPPORT 0x00000010L
|
|
#define KSALLOCATOR_FLAG_DEVICE_SPECIFIC 0x00000020L
|
|
#define KSALLOCATOR_FLAG_CAN_ALLOCATE 0x00000040L
|
|
#define KSALLOCATOR_FLAG_INSIST_ON_FRAMESIZE_RATIO 0x00000080L
|
|
#define KSALLOCATOR_FLAG_NO_FRAME_INTEGRITY 0x00000100L
|
|
#define KSALLOCATOR_FLAG_MULTIPLE_OUTPUT 0x00000200L
|
|
#define KSALLOCATOR_FLAG_CYCLE 0x00000400L
|
|
#define KSALLOCATOR_FLAG_ALLOCATOR_EXISTS 0x00000800L
|
|
#define KSALLOCATOR_FLAG_INDEPENDENT_RANGES 0x00001000L
|
|
#define KSALLOCATOR_FLAG_ATTENTION_STEPPING 0x00002000L
|
|
|
|
/* Kernel streaming stream header options flags */
|
|
#define KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT 0x00000001L
|
|
#define KSSTREAM_HEADER_OPTIONSF_PREROLL 0x00000002L
|
|
#define KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY 0x00000004L
|
|
#define KSSTREAM_HEADER_OPTIONSF_TYPECHANGED 0x00000008L
|
|
#define KSSTREAM_HEADER_OPTIONSF_TIMEVALID 0x00000010L
|
|
#define KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY 0x00000040L
|
|
#define KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE 0x00000080L
|
|
#define KSSTREAM_HEADER_OPTIONSF_DURATIONVALID 0x00000100L
|
|
#define KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM 0x00000200L
|
|
#define KSSTREAM_HEADER_OPTIONSF_BUFFEREDTRANSFER 0x00000400L
|
|
#define KSSTREAM_HEADER_OPTIONSF_VRAM_DATA_TRANSFER 0x00000800L
|
|
#define KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA 0x80000000L
|
|
|
|
/* Kernel streaming frame time flags */
|
|
#define KSFRAMETIME_VARIABLESIZE 0x00000001L
|
|
|
|
/* Kernel streaming rate flags */
|
|
#define KSRATE_NOPRESENTATIONSTART 0x00000001L
|
|
#define KSRATE_NOPRESENTATIONDURATION 0x00000002L
|
|
|
|
/* Kernel streaming probe flags */
|
|
#ifdef _NTDDK_
|
|
#define KSPROBE_STREAMREAD 0x00000000L
|
|
#define KSPROBE_STREAMWRITE 0x00000001L
|
|
#define KSPROBE_ALLOCATEMDL 0x00000010L
|
|
#define KSPROBE_PROBEANDLOCK 0x00000020L
|
|
#define KSPROBE_SYSTEMADDRESS 0x00000040L
|
|
#define KSPROBE_ALLOWFORMATCHANGE 0x00000080L
|
|
#define KSPROBE_MODIFY 0x00000200L
|
|
#define KSPROBE_STREAMWRITEMODIFY (KSPROBE_MODIFY | KSPROBE_STREAMWRITE)
|
|
#endif
|
|
|
|
/* Kernel streaming stream flags */
|
|
#ifdef _NTDDK_
|
|
#define KSSTREAM_READ KSPROBE_STREAMREAD
|
|
#define KSSTREAM_WRITE KSPROBE_STREAMWRITE
|
|
#define KSSTREAM_PAGED_DATA 0x00000000L
|
|
#define KSSTREAM_NONPAGED_DATA 0x00000100L
|
|
#define KSSTREAM_SYNCHRONOUS 0x00001000L
|
|
#define KSSTREAM_FAILUREEXCEPTION 0x00002000L
|
|
#endif
|
|
|
|
/* Kernel streaming event entry flags */
|
|
#ifdef _NTDDK_
|
|
#define KSEVENT_ENTRY_DELETED 0x00000001L
|
|
#define KSEVENT_ENTRY_ONESHOT 0x00000002L
|
|
#define KSEVENT_ENTRY_BUFFERED 0x00000004L
|
|
#endif
|
|
|
|
/* Kernel streaming dispatch flags */
|
|
#ifdef _NTDDK_
|
|
#define KSDISPATCH_FASTIO 0x80000000L
|
|
#endif
|
|
|
|
/* Kernel streaming object create item flags */
|
|
#ifdef _NTDDK_
|
|
#define KSCREATE_ITEM_SECURITYCHANGED 0x00000001L
|
|
#define KSCREATE_ITEM_WILDCARD 0x00000002L
|
|
#define KSCREATE_ITEM_NOPARAMETERS 0x00000004L
|
|
#define KSCREATE_ITEM_FREEONSTOP 0x00000008L
|
|
#endif
|
|
|
|
/* Bus interface reference version number */
|
|
#ifdef _NTDDK_
|
|
#define BUS_INTERFACE_REFERENCE_VERSION 0x0100
|
|
#endif
|
|
|
|
/* Kernel streaming device descriptor version numbers */
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
#define KSDEVICE_DESCRIPTOR_VERSION 0x00000100L
|
|
#endif
|
|
#if (NTDDI_VERSION >= 0x06000000)
|
|
#define KSDEVICE_DESCRIPTOR_VERSION_2 0x00000110L
|
|
#endif
|
|
#endif
|
|
|
|
/* Kernel streaming device flags */
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x06000000)
|
|
#define KSDEVICE_FLAG_ENABLE_REMOTE_WAKEUP 0x00000001L
|
|
#define KSDEVICE_FLAG_LOWPOWER_PASSTHROUGH 0x00000002L
|
|
#endif
|
|
#endif
|
|
|
|
/* Kernel streaming filter descriptor version number */
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
#define KSFILTER_DESCRIPTOR_VERSION 0xFFFFFFFFL
|
|
#endif
|
|
#endif
|
|
|
|
/* Kernel streaming filter flags */
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
#define KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING 0x00000001L
|
|
#define KSFILTER_FLAG_CRITICAL_PROCESSING 0x00000002L
|
|
#define KSFILTER_FLAG_HYPERCRITICAL_PROCESSING 0x00000004L
|
|
#define KSFILTER_FLAG_RECEIVE_ZERO_LENGTH_SAMPLES 0x00000008L
|
|
#endif
|
|
#if (NTDDI_VERSION >= 0x06000000)
|
|
#define KSFILTER_FLAG_DENY_USERMODE_ACCESS 0x80000000L
|
|
#endif
|
|
#endif
|
|
|
|
/* Kernel streaming pin flags */
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
#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 0x00000008L
|
|
#define KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING 0x00000010L
|
|
#define KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL 0x00000020L
|
|
#define KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING 0x00000040L
|
|
#define KSPIN_FLAG_ENFORCE_FIFO 0x00000080L
|
|
#define KSPIN_FLAG_GENERATE_MAPPINGS 0x00000100L
|
|
#define KSPIN_FLAG_DISTINCT_TRAILING_EDGE 0x00000200L
|
|
#define KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY 0x00010000L
|
|
#define KSPIN_FLAG_SPLITTER 0x00020000L
|
|
#define KSPIN_FLAG_USE_STANDARD_TRANSPORT 0x00040000L
|
|
#define KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT 0x00080000L
|
|
#define KSPIN_FLAG_FIXED_FORMAT 0x00100000L
|
|
#define KSPIN_FLAG_GENERATE_EOS_EVENTS 0x00200000L
|
|
#define KSPIN_FLAG_RENDERER \
|
|
(KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY | KSPIN_FLAG_GENERATE_EOS_EVENTS)
|
|
#define KSPIN_FLAG_IMPLEMENT_CLOCK 0x00400000L
|
|
#define KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING 0x00800000L
|
|
#define KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE 0x01000000L
|
|
#endif
|
|
#if (NTDDI_VERSION >= 0x05010200)
|
|
#define KSPIN_FLAG_DENY_USERMODE_ACCESS 0x80000000L
|
|
#endif
|
|
#endif
|
|
|
|
/* Definitions from winuser.h for device drivers */
|
|
#ifdef _NTDDK_
|
|
#define MAKEINTRESOURCE( x ) ((ULONG_PTR)(USHORT)x)
|
|
#define RT_STRING MAKEINTRESOURCE( 6 )
|
|
#define RT_RCDATA MAKEINTRESOURCE( 10 )
|
|
#endif
|
|
|
|
/* Kernel streaming reset constants */
|
|
typedef enum {
|
|
KSRESET_BEGIN = 0,
|
|
KSRESET_END = 1
|
|
} KSRESET;
|
|
|
|
/* Kernel streaming states */
|
|
typedef enum {
|
|
KSSTATE_STOP = 0,
|
|
KSSTATE_ACQUIRE = 1,
|
|
KSSTATE_PAUSE = 2,
|
|
KSSTATE_RUN = 3
|
|
} KSSTATE;
|
|
typedef KSSTATE *PKSSTATE;
|
|
|
|
/* Kernel streaming priority */
|
|
typedef struct {
|
|
ULONG PriorityClass;
|
|
ULONG PrioritySubClass;
|
|
} KSPRIORITY;
|
|
typedef KSPRIORITY *PKSPRIORITY;
|
|
|
|
/* Kernel streaming identifier */
|
|
typedef struct {
|
|
union {
|
|
struct {
|
|
GUID Set;
|
|
ULONG Id;
|
|
ULONG Flags;
|
|
};
|
|
LONGLONG Alignment;
|
|
};
|
|
} KSIDENTIFIER;
|
|
typedef KSIDENTIFIER *PKSIDENTIFIER;
|
|
typedef KSIDENTIFIER KSPROPERTY;
|
|
typedef KSIDENTIFIER *PKSPROPERTY;
|
|
typedef KSIDENTIFIER KSMETHOD;
|
|
typedef KSIDENTIFIER *PKSMETHOD;
|
|
typedef KSIDENTIFIER KSEVENT;
|
|
typedef KSIDENTIFIER *PKSEVENT;
|
|
typedef KSIDENTIFIER KSPIN_INTERFACE;
|
|
typedef KSIDENTIFIER *PKSPIN_INTERFACE;
|
|
typedef KSIDENTIFIER KSPIN_MEDIUM;
|
|
typedef KSIDENTIFIER *PKSPIN_MEDIUM;
|
|
typedef KSIDENTIFIER KSDEGRADE;
|
|
typedef KSIDENTIFIER *PKSDEGRADE;
|
|
|
|
/* Kernel streaming property node */
|
|
typedef struct {
|
|
KSPROPERTY Property;
|
|
ULONG NodeId;
|
|
ULONG Reserved;
|
|
} KSP_NODE;
|
|
typedef KSP_NODE *PKSP_NODE;
|
|
|
|
/* Kernel streaming method node */
|
|
typedef struct {
|
|
KSMETHOD Method;
|
|
ULONG NodeId;
|
|
ULONG Reserved;
|
|
} KSM_NODE;
|
|
typedef KSM_NODE *PKSM_NODE;
|
|
|
|
/* Kernel streaming event node */
|
|
typedef struct {
|
|
KSEVENT Event;
|
|
ULONG NodeId;
|
|
ULONG Reserved;
|
|
} KSE_NODE;
|
|
typedef KSE_NODE *PKSE_NODE;
|
|
|
|
/* Variant types */
|
|
#ifndef __wtypes_h__
|
|
enum VARENUM {
|
|
VT_EMPTY = 0,
|
|
VT_NULL = 1,
|
|
VT_I2 = 2,
|
|
VT_I4 = 3,
|
|
VT_R4 = 4,
|
|
VT_R8 = 5,
|
|
VT_CY = 6,
|
|
VT_DATE = 7,
|
|
VT_BSTR = 8,
|
|
VT_DISPATCH = 9,
|
|
VT_ERROR = 10,
|
|
VT_BOOL = 11,
|
|
VT_VARIANT = 12,
|
|
VT_UNKNOWN = 13,
|
|
VT_DECIMAL = 14,
|
|
VT_I1 = 16,
|
|
VT_UI1 = 17,
|
|
VT_UI2 = 18,
|
|
VT_UI4 = 19,
|
|
VT_I8 = 20,
|
|
VT_UI8 = 21,
|
|
VT_INT = 22,
|
|
VT_UINT = 23,
|
|
VT_VOID = 24,
|
|
VT_HRESULT = 25,
|
|
VT_PTR = 26,
|
|
VT_SAFEARRAY = 27,
|
|
VT_CARRAY = 28,
|
|
VT_USERDEFINED = 29,
|
|
VT_LPSTR = 30,
|
|
VT_LPWSTR = 31,
|
|
VT_RECORD = 36,
|
|
VT_INT_PTR = 37,
|
|
VT_UINT_PTR = 38,
|
|
VT_FILETIME = 64,
|
|
VT_BLOB = 65,
|
|
VT_STREAM = 66,
|
|
VT_STORAGE = 67,
|
|
VT_STREAMED_OBJECT = 68,
|
|
VT_STORED_OBJECT = 69,
|
|
VT_BLOB_OBJECT = 70,
|
|
VT_CF = 71,
|
|
VT_CLSID = 72,
|
|
VT_VERSIONED_STREAM = 73,
|
|
VT_BSTR_BLOB = 0x0FFF,
|
|
VT_VECTOR = 0x1000,
|
|
VT_ARRAY = 0x2000,
|
|
VT_BYREF = 0x4000,
|
|
VT_RESERVED = 0x8000,
|
|
VT_ILLEGAL = 0xFFFF,
|
|
VT_ILLEGALMASKED = 0x0FFF,
|
|
VT_TYPEMASK = 0x0FFF
|
|
};
|
|
#endif
|
|
|
|
/* Kernel streaming multiple item */
|
|
typedef struct {
|
|
ULONG Size;
|
|
ULONG Count;
|
|
} KSMULTIPLE_ITEM;
|
|
typedef KSMULTIPLE_ITEM *PKSMULTIPLE_ITEM;
|
|
|
|
/* Kernel streaming property description */
|
|
typedef struct {
|
|
ULONG AccessFlags;
|
|
ULONG DescriptionSize;
|
|
KSIDENTIFIER PropTypeSet;
|
|
ULONG MembersListCount;
|
|
ULONG Reserved;
|
|
} KSPROPERTY_DESCRIPTION;
|
|
typedef KSPROPERTY_DESCRIPTION *PKSPROPERTY_DESCRIPTION;
|
|
|
|
/* Kernel streaming property members header */
|
|
typedef struct {
|
|
ULONG MembersFlags;
|
|
ULONG MembersSize;
|
|
ULONG MembersCount;
|
|
ULONG Flags;
|
|
} KSPROPERTY_MEMBERSHEADER;
|
|
typedef KSPROPERTY_MEMBERSHEADER *PKSPROPERTY_MEMBERSHEADER;
|
|
|
|
/* Kernel streaming property bounds (32-bit version) */
|
|
typedef union {
|
|
struct {
|
|
LONG SignedMinimum;
|
|
LONG SignedMaximum;
|
|
};
|
|
struct {
|
|
ULONG UnsignedMinimum;
|
|
ULONG UnsignedMaximum;
|
|
};
|
|
} KSPROPERTY_BOUNDS_LONG;
|
|
typedef KSPROPERTY_BOUNDS_LONG *PKSPROPERTY_BOUNDS_LONG;
|
|
|
|
/* Kernel streaming property bounds (64-bit version) */
|
|
typedef union {
|
|
struct {
|
|
LONGLONG SignedMinimum;
|
|
LONGLONG SignedMaximum;
|
|
};
|
|
struct {
|
|
#ifdef _NTDDK_
|
|
ULONGLONG UnsignedMinimum;
|
|
ULONGLONG UnsignedMaximum;
|
|
#else
|
|
DWORDLONG UnsignedMinimum;
|
|
DWORDLONG UnsignedMaximum;
|
|
#endif
|
|
};
|
|
} KSPROPERTY_BOUNDS_LONGLONG;
|
|
typedef KSPROPERTY_BOUNDS_LONGLONG *PKSPROPERTY_BOUNDS_LONGLONG;
|
|
|
|
/* Kernel streaming property stepping (32-bit version) */
|
|
typedef struct {
|
|
ULONG SteppingDelta;
|
|
ULONG Reserved;
|
|
KSPROPERTY_BOUNDS_LONG Bounds;
|
|
} KSPROPERTY_STEPPING_LONG;
|
|
typedef KSPROPERTY_STEPPING_LONG *PKSPROPERTY_STEPPING_LONG;
|
|
|
|
/* Kernel streaming property stepping (64-bit version) */
|
|
typedef struct {
|
|
#ifdef _NTDDK_
|
|
ULONGLONG SteppingDelta;
|
|
#else
|
|
DWORDLONG SteppingDelta;
|
|
#endif
|
|
KSPROPERTY_BOUNDS_LONGLONG Bounds;
|
|
} KSPROPERTY_STEPPING_LONGLONG;
|
|
typedef KSPROPERTY_STEPPING_LONGLONG *PKSPROPERTY_STEPPING_LONGLONG;
|
|
|
|
/* Kernel streaming event data */
|
|
typedef struct {
|
|
ULONG NotificationType;
|
|
union {
|
|
struct {
|
|
HANDLE Event;
|
|
ULONG_PTR Reserved[2];
|
|
} EventHandle;
|
|
struct {
|
|
HANDLE Semaphore;
|
|
ULONG Reserved;
|
|
LONG Adjustment;
|
|
} SemaphoreHandle;
|
|
#ifdef _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
|
|
struct {
|
|
PVOID Unused;
|
|
LONG_PTR Alignment[2];
|
|
} Alignment;
|
|
};
|
|
} KSEVENTDATA;
|
|
typedef KSEVENTDATA *PKSEVENTDATA;
|
|
|
|
/* Kernel streaming query buffer */
|
|
typedef struct {
|
|
KSEVENT Event;
|
|
PKSEVENTDATA EventData;
|
|
PVOID Reserved;
|
|
} KSQUERYBUFFER;
|
|
typedef KSQUERYBUFFER *PKSQUERYBUFFER;
|
|
|
|
/* Kernel streaming relative event */
|
|
typedef struct {
|
|
ULONG Size;
|
|
ULONG Flags;
|
|
union {
|
|
HANDLE ObjectHandle;
|
|
PVOID ObjectPointer;
|
|
};
|
|
PVOID Reserved;
|
|
KSEVENT Event;
|
|
KSEVENTDATA EventData;
|
|
} KSRELATIVEEVENT;
|
|
|
|
/* Kernel streaming event time mark */
|
|
typedef struct {
|
|
KSEVENTDATA EventData;
|
|
LONGLONG MarkTime;
|
|
} KSEVENT_TIME_MARK;
|
|
typedef KSEVENT_TIME_MARK *PKSEVENT_TIME_MARK;
|
|
|
|
/* Kernel streaming event time interval */
|
|
typedef struct {
|
|
KSEVENTDATA EventData;
|
|
LONGLONG TimeBase;
|
|
LONGLONG Interval;
|
|
} KSEVENT_TIME_INTERVAL;
|
|
typedef KSEVENT_TIME_INTERVAL *PKSEVENT_TIME_INTERVAL;
|
|
|
|
/* Kernel streaming interval */
|
|
typedef struct {
|
|
LONGLONG TimeBase;
|
|
LONGLONG Interval;
|
|
} KSINTERVAL;
|
|
|
|
/* Kernel streaming general properties */
|
|
typedef enum {
|
|
KSPROPERTY_GENERAL_COMPONENTID = 0
|
|
} KSPROPERTY_GENERAL;
|
|
|
|
/* Kernel streaming component identifier */
|
|
typedef struct {
|
|
GUID Manufacturer;
|
|
GUID Product;
|
|
GUID Component;
|
|
GUID Name;
|
|
ULONG Version;
|
|
ULONG Revision;
|
|
} KSCOMPONENTID;
|
|
typedef KSCOMPONENTID *PKSCOMPONENTID;
|
|
|
|
/* Kernel streaming stream I/O methods */
|
|
typedef enum {
|
|
KSMETHOD_STREAMIO_READ = 0,
|
|
KSMETHOD_STREAMIO_WRITE = 1
|
|
} KSMETHOD_STREAMIO;
|
|
|
|
/* Kernel streaming media seeking properties */
|
|
typedef enum {
|
|
KSPROPERTY_MEDIASEEKING_CAPABILITIES = 0,
|
|
KSPROPERTY_MEDIASEEKING_FORMATS = 1,
|
|
KSPROPERTY_MEDIASEEKING_TIMEFORMAT = 2,
|
|
KSPROPERTY_MEDIASEEKING_POSITION = 3,
|
|
KSPROPERTY_MEDIASEEKING_STEPPOSITION = 4,
|
|
KSPROPERTY_MEDIASEEKING_POSITIONS = 5,
|
|
KSPROPERTY_MEDIASEEKING_DURATION = 6,
|
|
KSPROPERTY_MEDIASEEKING_AVAILABLE = 7,
|
|
KSPROPERTY_MEDIASEEKING_PREROLL = 8,
|
|
KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT = 9
|
|
} KSPROPERTY_MEDIASEEKING;
|
|
|
|
/* Kernel streaming seeking flags */
|
|
typedef enum {
|
|
KS_SEEKING_NoPositioning = 0x00000000,
|
|
KS_SEEKING_AbsolutePositioning = 0x00000001,
|
|
KS_SEEKING_RelativePositioning = 0x00000002,
|
|
KS_SEEKING_IncrementalPositioning = 0x00000003,
|
|
KS_SEEKING_PositioningBitsMask = 0x00000003,
|
|
KS_SEEKING_SeekToKeyFrame = 0x00000004,
|
|
KS_SEEKING_ReturnTime = 0x00000008
|
|
} KS_SEEKING_FLAGS;
|
|
|
|
/* Kernel streaming seeking capabilities */
|
|
typedef enum {
|
|
KS_SEEKING_CanSeekAbsolute = 0x00000001,
|
|
KS_SEEKING_CanSeekForwards = 0x00000002,
|
|
KS_SEEKING_CanSeekBackwards = 0x00000004,
|
|
KS_SEEKING_CanGetCurrentPos = 0x00000008,
|
|
KS_SEEKING_CanGetStopPos = 0x00000010,
|
|
KS_SEEKING_CanGetDuration = 0x00000020,
|
|
KS_SEEKING_CanPlayBackwards = 0x00000040
|
|
} KS_SEEKING_CAPABILITIES;
|
|
|
|
/* Kernel streaming positions property */
|
|
typedef struct {
|
|
LONGLONG Current;
|
|
LONGLONG Stop;
|
|
KS_SEEKING_FLAGS CurrentFlags;
|
|
KS_SEEKING_FLAGS StopFlags;
|
|
} KSPROPERTY_POSITIONS;
|
|
typedef KSPROPERTY_POSITIONS *PKSPROPERTY_POSITIONS;
|
|
|
|
/* Kernel streaming media available property */
|
|
typedef struct {
|
|
LONGLONG Earliest;
|
|
LONGLONG Latest;
|
|
} KSPROPERTY_MEDIAAVAILABLE;
|
|
typedef KSPROPERTY_MEDIAAVAILABLE *PKSPROPERTY_MEDIAAVAILABLE;
|
|
|
|
/* Kernel streaming property time format */
|
|
typedef struct {
|
|
KSPROPERTY Property;
|
|
GUID SourceFormat;
|
|
GUID TargetFormat;
|
|
LONGLONG Time;
|
|
} KSP_TIMEFORMAT;
|
|
typedef KSP_TIMEFORMAT *PKSP_TIMEFORMAT;
|
|
|
|
/* Kernel streaming topology properties */
|
|
typedef enum {
|
|
KSPROPERTY_TOPOLOGY_CATEGORIES = 0,
|
|
KSPROPERTY_TOPOLOGY_NODES = 1,
|
|
KSPROPERTY_TOPOLOGY_CONNECTIONS = 2,
|
|
KSPROPERTY_TOPOLOGY_NAME = 3
|
|
} KSPROPERTY_TOPOLOGY;
|
|
|
|
/* Kernel streaming graph manager notification callback */
|
|
#ifdef _NTDDK_
|
|
typedef VOID (NTAPI *PFNKSGRAPHMANAGER_NOTIFY)( PFILE_OBJECT, ULONG, PVOID, PVOID, PVOID, ULONG );
|
|
#endif
|
|
|
|
/* Kernel streaming graph manager function table */
|
|
#ifdef _NTDDK_
|
|
typedef struct KSGRAPHMANAGER_FUNCTIONTABLE {
|
|
PFNKSGRAPHMANAGER_NOTIFY NotifyEvent;
|
|
} KSGRAPHMANAGER_FUNCTIONTABLE;
|
|
typedef KSGRAPHMANAGER_FUNCTIONTABLE *PKSGRAPHMANAGER_FUNCTIONTABLE;
|
|
#endif
|
|
|
|
/* Kernel streaming graph manager interface property */
|
|
#ifdef _NTDDK_
|
|
typedef struct _KSPROPERTY_GRAPHMANAGER_INTERFACE {
|
|
PFILE_OBJECT GraphManager;
|
|
PKSGRAPHMANAGER_FUNCTIONTABLE FunctionTable;
|
|
} KSPROPERTY_GRAPHMANAGER_INTERFACE;
|
|
typedef KSPROPERTY_GRAPHMANAGER_INTERFACE *PKSPROPERTY_GRAPHMANAGER_INTERFACE;
|
|
#endif
|
|
|
|
/* Kernel streaming graph manager commands */
|
|
#ifdef _NTDDK_
|
|
typedef enum {
|
|
KSPROPERTY_GM_GRAPHMANAGER = 0,
|
|
KSPROPERTY_GM_TIMESTAMP_CLOCK = 1,
|
|
KSPROPERTY_GM_RATEMATCH = 2,
|
|
KSPROPERTY_GM_RENDER_CLOCK = 3
|
|
} KSPROPERTY_GM;
|
|
#endif
|
|
|
|
/* Kernel streaming topology connection */
|
|
typedef struct {
|
|
ULONG FromNode;
|
|
ULONG FromNodePin;
|
|
ULONG ToNode;
|
|
ULONG ToNodePin;
|
|
} KSTOPOLOGY_CONNECTION;
|
|
typedef KSTOPOLOGY_CONNECTION *PKSTOPOLOGY_CONNECTION;
|
|
|
|
/* Kernel streaming topology */
|
|
typedef struct {
|
|
ULONG CategoriesCount;
|
|
const GUID *Categories;
|
|
ULONG TopologyNodesCount;
|
|
const GUID *TopologyNodes;
|
|
ULONG TopologyConnectionsCount;
|
|
const KSTOPOLOGY_CONNECTION *TopologyConnections;
|
|
const GUID *TopologyNodesNames;
|
|
ULONG Reserved;
|
|
} KSTOPOLOGY;
|
|
typedef KSTOPOLOGY *PKSTOPOLOGY;
|
|
|
|
/* Kernel streaming node creation parameters */
|
|
typedef struct {
|
|
ULONG CreateFlags;
|
|
ULONG Node;
|
|
} KSNODE_CREATE;
|
|
typedef KSNODE_CREATE *PKSNODE_CREATE;
|
|
|
|
/* Kernel streaming standard interfaces */
|
|
typedef enum {
|
|
KSINTERFACE_STANDARD_STREAMING = 0,
|
|
KSINTERFACE_STANDARD_LOOPED_STREAMING = 1,
|
|
KSINTERFACE_STANDARD_CONTROL = 2
|
|
} KSINTERFACE_STANDARD;
|
|
|
|
/* Kernel streaming file I/O interfaces */
|
|
typedef enum {
|
|
KSINTERFACE_FILEIO_STREAMING = 0
|
|
} KSINTERFACE_FILEIO;
|
|
|
|
/* Kernel streaming pin properties */
|
|
typedef enum {
|
|
KSPROPERTY_PIN_CINSTANCES = 0,
|
|
KSPROPERTY_PIN_CTYPES = 1,
|
|
KSPROPERTY_PIN_DATAFLOW = 2,
|
|
KSPROPERTY_PIN_DATARANGES = 3,
|
|
KSPROPERTY_PIN_DATAINTERSECTION = 4,
|
|
KSPROPERTY_PIN_INTERFACES = 5,
|
|
KSPROPERTY_PIN_MEDIUMS = 6,
|
|
KSPROPERTY_PIN_COMMUNICATIONS = 7,
|
|
KSPROPERTY_PIN_GLOBALCINSTANCES = 8,
|
|
KSPROPERTY_PIN_NECESSARYINSTANCES = 9,
|
|
KSPROPERTY_PIN_PHYSICALCONNECTION = 10,
|
|
KSPROPERTY_PIN_CATEGORY = 11,
|
|
KSPROPERTY_PIN_NAME = 12,
|
|
KSPROPERTY_PIN_CONSTRAINEDDATARANGES = 13,
|
|
KSPROPERTY_PIN_PROPOSEDATAFORMAT = 14
|
|
} KSPROPERTY_PIN;
|
|
|
|
/* Kernel streaming pin property */
|
|
typedef struct {
|
|
KSPROPERTY Property;
|
|
ULONG PinId;
|
|
ULONG Reserved;
|
|
} KSP_PIN;
|
|
typedef KSP_PIN *PKSP_PIN;
|
|
|
|
/* Kernel stream pin event */
|
|
typedef struct {
|
|
KSEVENT Event;
|
|
ULONG PinId;
|
|
ULONG Reserved;
|
|
} KSE_PIN;
|
|
typedef KSE_PIN *PKSE_PIN;
|
|
|
|
/* Kernel streaming pin instance count property */
|
|
typedef struct {
|
|
ULONG PossibleCount;
|
|
ULONG CurrentCount;
|
|
} KSPIN_CINSTANCES;
|
|
typedef KSPIN_CINSTANCES *PKSPIN_CINSTANCES;
|
|
|
|
/* Kernel streaming pin dataflow property */
|
|
typedef enum {
|
|
KSPIN_DATAFLOW_IN = 1,
|
|
KSPIN_DATAFLOW_OUT = 2
|
|
} KSPIN_DATAFLOW;
|
|
typedef KSPIN_DATAFLOW *PKSPIN_DATAFLOW;
|
|
|
|
/* Kernel streaming data format */
|
|
typedef union {
|
|
struct {
|
|
ULONG FormatSize;
|
|
ULONG Flags;
|
|
ULONG SampleSize;
|
|
ULONG Reserved;
|
|
GUID MajorFormat;
|
|
GUID SubFormat;
|
|
GUID Specifier;
|
|
};
|
|
LONGLONG Alignment;
|
|
} KSDATAFORMAT;
|
|
typedef KSDATAFORMAT *PKSDATAFORMAT;
|
|
typedef KSDATAFORMAT KSDATARANGE;
|
|
typedef KSDATAFORMAT *PKSDATARANGE;
|
|
|
|
/* Kernel streaming attribute */
|
|
typedef struct {
|
|
ULONG Size;
|
|
ULONG Flags;
|
|
GUID Attribute;
|
|
} KSATTRIBUTE;
|
|
typedef KSATTRIBUTE *PKSATTRIBUTE;
|
|
|
|
/* Kernel streaming attribute list */
|
|
#ifdef _NTDDK_
|
|
typedef struct {
|
|
ULONG Count;
|
|
PKSATTRIBUTE *Attributes;
|
|
} KSATTRIBUTE_LIST;
|
|
typedef KSATTRIBUTE_LIST *PKSATTRIBUTE_LIST;
|
|
#endif
|
|
|
|
/* Kernel streaming pin communication constants */
|
|
typedef enum {
|
|
KSPIN_COMMUNICATION_NONE = 0,
|
|
KSPIN_COMMUNICATION_SINK = 1,
|
|
KSPIN_COMMUNICATION_SOURCE = 2,
|
|
KSPIN_COMMUNICATION_BOTH = 3,
|
|
KSPIN_COMMUNICATION_BRIDGE = 4,
|
|
} KSPIN_COMMUNICATION;
|
|
typedef KSPIN_COMMUNICATION *PKSPIN_COMMUNICATION;
|
|
|
|
/* Kernel streaming pin connect information */
|
|
typedef struct {
|
|
KSPIN_INTERFACE Interface;
|
|
KSPIN_MEDIUM Medium;
|
|
ULONG PinId;
|
|
HANDLE PinToHandle;
|
|
KSPRIORITY Priority;
|
|
} KSPIN_CONNECT;
|
|
typedef KSPIN_CONNECT *PKSPIN_CONNECT;
|
|
|
|
/* Kernel streaming pin physical connection */
|
|
typedef struct {
|
|
ULONG Size;
|
|
ULONG Pin;
|
|
WCHAR SymbolicLinkName[1];
|
|
} KSPIN_PHYSICALCONNECTION;
|
|
typedef KSPIN_PHYSICALCONNECTION *PKSPIN_PHYSICALCONNECTION;
|
|
|
|
/* Kernel streaming intersect handler callback */
|
|
#ifdef _NTDDK_
|
|
typedef NTSTATUS (NTAPI *PFNKSINTERSECTHANDLER)( PIRP, PKSP_PIN, PKSDATARANGE, PVOID );
|
|
typedef NTSTATUS (NTAPI *PFNKSINTERSECTHANDLEREX)( PVOID, PIRP, PKSP_PIN, PKSDATARANGE, PKSDATARANGE, ULONG, PVOID, PULONG );
|
|
#endif
|
|
|
|
/* Kernel streaming pin capabilities change notifications */
|
|
typedef enum {
|
|
KSEVENT_PINCAPS_FORMATCHANGE = 0,
|
|
KSEVENT_PINCAPS_JACKINFOCHANGE = 1
|
|
} KSEVENT_PINCAPS_CHANGENOTIFICATIONS;
|
|
|
|
/* Kernel streaming pin descriptor */
|
|
#ifdef _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;
|
|
typedef KSPIN_DESCRIPTOR *PKSPIN_DESCRIPTOR;
|
|
typedef const KSPIN_DESCRIPTOR *PCKSPIN_DESCRIPTOR;
|
|
#endif
|
|
|
|
/* Kernel streaming quality properties */
|
|
typedef enum {
|
|
KSPROPERTY_QUALITY_REPORT = 0,
|
|
KSPROPERTY_QUALITY_ERROR = 1
|
|
} KSPROPERTY_QUALITY;
|
|
|
|
/* Kernel streaming connection properties */
|
|
typedef enum {
|
|
KSPROPERTY_CONNECTION_STATE = 0,
|
|
KSPROPERTY_CONNECTION_PRIORITY = 1,
|
|
KSPROPERTY_CONNECTION_DATAFORMAT = 2,
|
|
KSPROPERTY_CONNECTION_ALLOCATORFRAMING = 3,
|
|
KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT = 4,
|
|
KSPROPERTY_CONNECTION_ACQUIREORDERING = 5,
|
|
KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX = 6,
|
|
KSPROPERTY_CONNECTION_STARTAT = 7
|
|
} KSPROPERTY_CONNECTION;
|
|
|
|
/* Kernel streaming memory transport properties */
|
|
enum {
|
|
KSPROPERTY_MEMORY_TRANSPORT = 1
|
|
};
|
|
|
|
/* Kernel streaming allocator framing */
|
|
typedef struct {
|
|
union {
|
|
ULONG OptionsFlags;
|
|
ULONG RequirementsFlags;
|
|
};
|
|
#ifdef _NTDDK_
|
|
POOL_TYPE PoolType;
|
|
#else
|
|
ULONG PoolType;
|
|
#endif
|
|
ULONG Frames;
|
|
ULONG FrameSize;
|
|
ULONG FileAlignment;
|
|
ULONG Reserved;
|
|
} KSALLOCATOR_FRAMING;
|
|
typedef KSALLOCATOR_FRAMING *PKSALLOCATOR_FRAMING;
|
|
|
|
/* Kernel streaming allocator callbacks */
|
|
#ifdef _NTDDK_
|
|
typedef PVOID (NTAPI *PFNKSDEFAULTALLOCATE)( PVOID );
|
|
typedef VOID (NTAPI *PFNKSDEFAULTFREE)( PVOID, PVOID );
|
|
typedef NTSTATUS (NTAPI *PFNKSINITIALIZEALLOCATOR)( PVOID, PKSALLOCATOR_FRAMING, PVOID * );
|
|
typedef VOID (NTAPI *PFNKSDELETEALLOCATOR)( PVOID );
|
|
#endif
|
|
|
|
/* Kernel streaming framing range */
|
|
typedef struct {
|
|
ULONG MinFrameSize;
|
|
ULONG MaxFrameSize;
|
|
ULONG Stepping;
|
|
} KS_FRAMING_RANGE;
|
|
typedef KS_FRAMING_RANGE *PKS_FRAMING_RANGE;
|
|
|
|
/* Kernel streaming weighted framing range */
|
|
typedef struct {
|
|
KS_FRAMING_RANGE Range;
|
|
ULONG InPlaceWeight;
|
|
ULONG NotInPlaceWeight;
|
|
} KS_FRAMING_RANGE_WEIGHTED;
|
|
typedef KS_FRAMING_RANGE_WEIGHTED *PKS_FRAMING_RANGE_WEIGHTED;
|
|
|
|
/* Kernel streaming compression */
|
|
typedef struct {
|
|
ULONG RatioNumerator;
|
|
ULONG RatioDenominator;
|
|
ULONG RatioConstantMargin;
|
|
} KS_COMPRESSION;
|
|
typedef KS_COMPRESSION *PKS_COMPRESSION;
|
|
|
|
/* Kernel streaming framing item */
|
|
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;
|
|
typedef KS_FRAMING_ITEM *PKS_FRAMING_ITEM;
|
|
|
|
/* Kernel streaming allocator framing (extended version) */
|
|
typedef struct {
|
|
ULONG CountItems;
|
|
ULONG PinFlags;
|
|
KS_COMPRESSION OutputCompression;
|
|
ULONG PinWeight;
|
|
KS_FRAMING_ITEM FramingItem[1];
|
|
} KSALLOCATOR_FRAMING_EX;
|
|
typedef KSALLOCATOR_FRAMING_EX *PKSALLOCATOR_FRAMING_EX;
|
|
|
|
/* Kernel streaming stream allocator events */
|
|
typedef enum {
|
|
KSEVENT_STREAMALLOCATOR_INTERNAL_FREEFRAME = 0,
|
|
KSEVENT_STREAMALLOCATOR_FREEFRAME = 1
|
|
} KSEVENT_STREAMALLOCATOR;
|
|
|
|
/* Kernel streaming stream allocator methods */
|
|
typedef enum {
|
|
KSMETHOD_STREAMALLOCATOR_ALLOC = 0,
|
|
KSMETHOD_STREAMALLOCATOR_FREE = 1
|
|
} KSMETHOD_STREAMALLOCATOR;
|
|
|
|
/* Kernel streaming stream allocator properties */
|
|
#ifdef _NTDDK_
|
|
typedef enum {
|
|
KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE = 0,
|
|
KSPROPERTY_STREAMALLOCATOR_STATUS = 1
|
|
} KSPROPERTY_STREAMALLOCATOR;
|
|
#endif
|
|
|
|
/* Kernel streaming stream allocator callbacks */
|
|
#ifdef _NTDDK_
|
|
typedef NTSTATUS (NTAPI *PFNALLOCATOR_ALLOCATEFRAME)( PFILE_OBJECT, PVOID * );
|
|
typedef VOID (NTAPI *PFNALLOCATOR_FREEFRAME)( PFILE_OBJECT, PVOID );
|
|
#endif
|
|
|
|
/* Kernel streaming stream allocator function table */
|
|
#ifdef _NTDDK_
|
|
typedef struct {
|
|
PFNALLOCATOR_ALLOCATEFRAME AllocateFrame;
|
|
PFNALLOCATOR_FREEFRAME FreeFrame;
|
|
} KSSTREAMALLOCATOR_FUNCTIONTABLE;
|
|
typedef KSSTREAMALLOCATOR_FUNCTIONTABLE *PKSSTREAMALLOCATOR_FUNCTIONTABLE;
|
|
#endif
|
|
|
|
/* Kernel streaming stream allocator status */
|
|
typedef struct {
|
|
KSALLOCATOR_FRAMING Framing;
|
|
ULONG AllocatedFrames;
|
|
ULONG Reserved;
|
|
} KSSTREAMALLOCATOR_STATUS;
|
|
typedef KSSTREAMALLOCATOR_STATUS *PKSSTREAMALLOCATOR_STATUS;
|
|
|
|
/* Kernel streaming stream allocator status (extended version) */
|
|
typedef struct {
|
|
KSALLOCATOR_FRAMING_EX Framing;
|
|
ULONG AllocatedFrames;
|
|
ULONG Reserved;
|
|
} KSSTREAMALLOCATOR_STATUS_EX;
|
|
typedef KSSTREAMALLOCATOR_STATUS_EX *PKSSTREAMALLOCATOR_STATUS_EX;
|
|
|
|
/* Kernel streaming time */
|
|
typedef struct {
|
|
LONGLONG Time;
|
|
ULONG Numerator;
|
|
ULONG Denominator;
|
|
} KSTIME;
|
|
typedef KSTIME *PKSTIME;
|
|
|
|
/* Kernel streaming stream header */
|
|
typedef struct {
|
|
ULONG Size;
|
|
ULONG TypeSpecificFlags;
|
|
KSTIME PresentationTime;
|
|
LONGLONG Duration;
|
|
ULONG FrameExtent;
|
|
ULONG DataUsed;
|
|
PVOID Data;
|
|
ULONG OptionsFlags;
|
|
} KSSTREAM_HEADER;
|
|
typedef KSSTREAM_HEADER *PKSSTREAM_HEADER;
|
|
|
|
/* Kernel streaming stream interface properties */
|
|
typedef enum {
|
|
KSPROPERTY_STREAMINTERFACE_HEADERSIZE = 0
|
|
} KSPROPERTY_STREAMINTERFACE;
|
|
|
|
/* Kernel streaming stream properties */
|
|
typedef enum {
|
|
KSPROPERTY_STREAM_ALLOCATOR = 0,
|
|
KSPROPERTY_STREAM_QUALITY = 1,
|
|
KSPROPERTY_STREAM_DEGRADATION = 2,
|
|
KSPROPERTY_STREAM_MASTERCLOCK = 3,
|
|
KSPROPERTY_STREAM_TIMEFORMAT = 4,
|
|
KSPROPERTY_STREAM_PRESENTATIONTIME = 5,
|
|
KSPROPERTY_STREAM_PRESENTATIONEXTENT = 6,
|
|
KSPROPERTY_STREAM_FRAMETIME = 7,
|
|
KSPROPERTY_STREAM_RATECAPABILITY = 8,
|
|
KSPROPERTY_STREAM_RATE = 9,
|
|
KSPROPERTY_STREAM_PIPE_ID = 10
|
|
} KSPROPERTY_STREAM;
|
|
|
|
/* Kernel streaming quality manager */
|
|
typedef struct {
|
|
HANDLE QualityManager;
|
|
PVOID Context;
|
|
} KSQUALITY_MANAGER;
|
|
typedef KSQUALITY_MANAGER *PKSQUALITY_MANAGER;
|
|
|
|
/* Kernel streaming frame time */
|
|
typedef struct {
|
|
LONGLONG Duration;
|
|
ULONG FrameFlags;
|
|
ULONG Reserved;
|
|
} KSFRAMETIME;
|
|
typedef KSFRAMETIME *PKSFRAMETIME;
|
|
|
|
/* Kernel streaming rate */
|
|
typedef struct {
|
|
LONGLONG PresentationStart;
|
|
LONGLONG Duration;
|
|
KSPIN_INTERFACE Interface;
|
|
LONG Rate;
|
|
ULONG Flags;
|
|
} KSRATE;
|
|
typedef KSRATE *PKSRATE;
|
|
|
|
/* Kernel streaming rate capability */
|
|
typedef struct {
|
|
KSPROPERTY Property;
|
|
KSRATE Rate;
|
|
} KSRATE_CAPABILITY;
|
|
typedef KSRATE_CAPABILITY *PKSRATE_CAPABILITY;
|
|
|
|
/* Kernel streaming clock creation information */
|
|
typedef struct {
|
|
ULONG CreateFlags;
|
|
} KSCLOCK_CREATE;
|
|
typedef KSCLOCK_CREATE *PKSCLOCK_CREATE;
|
|
|
|
/* Kernel streaming correlated time */
|
|
typedef struct {
|
|
LONGLONG Time;
|
|
LONGLONG SystemTime;
|
|
} KSCORRELATED_TIME;
|
|
typedef KSCORRELATED_TIME *PKSCORRELATED_TIME;
|
|
|
|
/* Kernel streaming resolution */
|
|
typedef struct {
|
|
LONGLONG Granularity;
|
|
LONGLONG Error;
|
|
} KSRESOLUTION;
|
|
typedef KSRESOLUTION *PKSRESOLUTION;
|
|
|
|
/* Kernel streaming clock properties */
|
|
typedef enum {
|
|
KSPROPERTY_CLOCK_TIME = 0,
|
|
KSPROPERTY_CLOCK_PHYSICALTIME = 1,
|
|
KSPROPERTY_CLOCK_CORRELATEDTIME = 2,
|
|
KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME = 3,
|
|
KSPROPERTY_CLOCK_RESOLUTION = 4,
|
|
#ifdef _NTDDK_
|
|
KSPROPERTY_CLOCK_STATE = 5,
|
|
KSPROPERTY_CLOCK_FUNCTIONTABLE = 6
|
|
#else
|
|
KSPROPERTY_CLOCK_STATE = 5
|
|
#endif
|
|
} KSPROPERTY_CLOCK;
|
|
|
|
/* Kernel streaming clock callbacks */
|
|
#ifdef _NTDDK_
|
|
typedef LONGLONG (FASTCALL *PFNKSCLOCK_GETTIME)( PFILE_OBJECT );
|
|
typedef LONGLONG (FASTCALL *PFNKSCLOCK_CORRELATEDTIME)( PFILE_OBJECT, PLONGLONG );
|
|
#endif
|
|
|
|
/* Kernel streaming clock function table */
|
|
#ifdef _NTDDK_
|
|
typedef struct {
|
|
PFNKSCLOCK_GETTIME GetTime;
|
|
PFNKSCLOCK_GETTIME GetPhysicalTime;
|
|
PFNKSCLOCK_CORRELATEDTIME GetCorrelatedTime;
|
|
PFNKSCLOCK_CORRELATEDTIME GetCorrelatedPhysicalTime;
|
|
} KSCLOCK_FUNCTIONTABLE;
|
|
typedef KSCLOCK_FUNCTIONTABLE *PKSCLOCK_FUNCTIONTABLE;
|
|
#endif
|
|
|
|
/* Kernel streaming timer callbacks */
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
typedef BOOLEAN (NTAPI *PFNKSSETTIMER)( PVOID, PKTIMER, LARGE_INTEGER, PKDPC );
|
|
typedef BOOLEAN (NTAPI *PFNKSCANCELTIMER)( PVOID, PKTIMER );
|
|
typedef LONGLONG (FASTCALL *PFNKSCORRELATEDTIME)( PVOID, PLONGLONG );
|
|
#endif
|
|
#endif
|
|
|
|
/* Kernel streaming clock position events */
|
|
typedef enum {
|
|
KSEVENT_CLOCK_INTERVAL_MARK = 0,
|
|
KSEVENT_CLOCK_POSITION_MARK = 1
|
|
} KSEVENT_CLOCK_POSITION;
|
|
|
|
/* Kernel streaming connection events */
|
|
typedef enum {
|
|
KSEVENT_CONNECTION_POSITIONUPDATE = 0,
|
|
KSEVENT_CONNECTION_DATADISCONTINUITY = 1,
|
|
KSEVENT_CONNECTION_TIMEDISCONTINUITY = 2,
|
|
KSEVENT_CONNECTION_PRIORITY = 3,
|
|
KSEVENT_CONNECTION_ENDOFSTREAM = 4
|
|
} KSEVENT_CONNECTION;
|
|
|
|
/* Kernel streaming quality */
|
|
typedef struct {
|
|
PVOID Context;
|
|
ULONG Proportion;
|
|
LONGLONG DeltaTime;
|
|
} KSQUALITY;
|
|
typedef KSQUALITY *PKSQUALITY;
|
|
|
|
/* Kernel streaming error */
|
|
typedef struct {
|
|
PVOID Context;
|
|
ULONG Status;
|
|
} KSERROR;
|
|
typedef KSERROR *PKSERROR;
|
|
|
|
/* Kernel streaming standard degrades */
|
|
typedef enum {
|
|
KSDEGRADE_STANDARD_SIMPLE = 0,
|
|
KSDEGRADE_STANDARD_QUALITY = 1,
|
|
KSDEGRADE_STANDARD_COMPUTATION = 2,
|
|
KSDEGRADE_STANDARD_SKIP = 3
|
|
} KSDEGRADE_STANDARD;
|
|
|
|
/* Kernel streaming callbacks */
|
|
#ifdef _NTDDK_
|
|
typedef NTSTATUS (NTAPI *PFNKSCONTEXT_DISPATCH)( PVOID, PIRP );
|
|
typedef NTSTATUS (NTAPI *PFNKSHANDLER)( PIRP, PKSIDENTIFIER, PVOID );
|
|
typedef BOOLEAN (NTAPI *PFNKSFASTHANDLER)( PFILE_OBJECT, PKSIDENTIFIER, ULONG, PVOID, ULONG, PIO_STATUS_BLOCK );
|
|
typedef NTSTATUS (NTAPI *PFNKSALLOCATOR)( PIRP, ULONG, BOOLEAN );
|
|
#endif
|
|
|
|
/* Kernel streaming property members list */
|
|
#ifdef _NTDDK_
|
|
typedef struct {
|
|
KSPROPERTY_MEMBERSHEADER MembersHeader;
|
|
const VOID *Members;
|
|
} KSPROPERTY_MEMBERSLIST;
|
|
typedef KSPROPERTY_MEMBERSLIST *PKSPROPERTY_MEMBERSLIST;
|
|
#endif
|
|
|
|
/* Kernel streaming property values */
|
|
#ifdef _NTDDK_
|
|
typedef struct {
|
|
KSIDENTIFIER PropTypeSet;
|
|
ULONG MembersListCount;
|
|
const KSPROPERTY_MEMBERSLIST *MembersList;
|
|
} KSPROPERTY_VALUES;
|
|
typedef KSPROPERTY_VALUES *PKSPROPERTY_VALUES;
|
|
#endif
|
|
|
|
/* Kernel streaming property item */
|
|
#ifdef _NTDDK_
|
|
typedef struct {
|
|
ULONG PropertyId;
|
|
union {
|
|
PFNKSHANDLER GetPropertyHandler;
|
|
BOOLEAN GetSupported;
|
|
};
|
|
ULONG MinProperty;
|
|
ULONG MinData;
|
|
union {
|
|
PFNKSHANDLER SetPropertyHandler;
|
|
BOOLEAN SetSupported;
|
|
};
|
|
const KSPROPERTY_VALUES *Values;
|
|
ULONG RelationsCount;
|
|
const KSPROPERTY *Relations;
|
|
PFNKSHANDLER SupportHandler;
|
|
ULONG SerializedSize;
|
|
} KSPROPERTY_ITEM;
|
|
typedef KSPROPERTY_ITEM *PKSPROPERTY_ITEM;
|
|
#endif
|
|
|
|
/* Kernel streaming fast property item */
|
|
#ifdef _NTDDK_
|
|
typedef struct {
|
|
ULONG PropertyId;
|
|
union {
|
|
PFNKSFASTHANDLER GetPropertyHandler;
|
|
BOOLEAN GetSupported;
|
|
};
|
|
union {
|
|
PFNKSFASTHANDLER SetPropertyHandler;
|
|
BOOLEAN SetSupported;
|
|
};
|
|
ULONG Reserved;
|
|
} KSFASTPROPERTY_ITEM;
|
|
typedef KSFASTPROPERTY_ITEM *PKSFASTPROPERTY_ITEM;
|
|
#endif
|
|
|
|
/* Kernel streaming property set */
|
|
#ifdef _NTDDK_
|
|
typedef struct {
|
|
const GUID *Set;
|
|
ULONG PropertiesCount;
|
|
const KSPROPERTY_ITEM *PropertyItem;
|
|
ULONG FastIoCount;
|
|
const KSFASTPROPERTY_ITEM *FastIoTable;
|
|
} KSPROPERTY_SET;
|
|
typedef KSPROPERTY_SET *PKSPROPERTY_SET;
|
|
#endif
|
|
|
|
/* Kernel streaming method item */
|
|
#ifdef _NTDDK_
|
|
typedef struct {
|
|
ULONG MethodId;
|
|
union {
|
|
PFNKSHANDLER MethodHandler;
|
|
BOOLEAN MethodSupported;
|
|
};
|
|
ULONG MinMethod;
|
|
ULONG MinData;
|
|
PFNKSHANDLER SupportHandler;
|
|
ULONG Flags;
|
|
} KSMETHOD_ITEM;
|
|
typedef KSMETHOD_ITEM *PKSMETHOD_ITEM;
|
|
#endif
|
|
|
|
/* Kernel streaming fast method item */
|
|
#ifdef _NTDDK_
|
|
typedef struct {
|
|
ULONG MethodId;
|
|
union {
|
|
PFNKSFASTHANDLER MethodHandler;
|
|
BOOLEAN MethodSupported;
|
|
};
|
|
} KSFASTMETHOD_ITEM;
|
|
typedef KSFASTMETHOD_ITEM *PKSFASTMETHOD_ITEM;
|
|
#endif
|
|
|
|
/* Kernel streaming method set */
|
|
#ifdef _NTDDK_
|
|
typedef struct {
|
|
const GUID *Set;
|
|
ULONG MethodsCount;
|
|
const KSMETHOD_ITEM *MethodItem;
|
|
ULONG FastIoCount;
|
|
const KSFASTMETHOD_ITEM *FastIoTable;
|
|
} KSMETHOD_SET;
|
|
typedef KSMETHOD_SET *PKSMETHOD_SET;
|
|
#endif
|
|
|
|
/* Kernel streaming event callbacks */
|
|
#ifdef _NTDDK_
|
|
typedef NTSTATUS (NTAPI *PFNKSADDEVENT)( PIRP, PKSEVENTDATA, struct _KSEVENT_ENTRY * );
|
|
typedef VOID (NTAPI *PFNKSREMOVEEVENT)( PFILE_OBJECT, struct _KSEVENT_ENTRY * );
|
|
#endif
|
|
|
|
/* Kernel streaming event item */
|
|
#ifdef _NTDDK_
|
|
typedef struct {
|
|
ULONG EventId;
|
|
ULONG DataInput;
|
|
ULONG ExtraEntryData;
|
|
PFNKSADDEVENT AddHandler;
|
|
PFNKSREMOVEEVENT RemoveHandler;
|
|
PFNKSHANDLER SupportHandler;
|
|
} KSEVENT_ITEM;
|
|
typedef KSEVENT_ITEM *PKSEVENT_ITEM;
|
|
#endif
|
|
|
|
/* Kernel streaming event set */
|
|
#ifdef _NTDDK_
|
|
typedef struct {
|
|
const GUID *Set;
|
|
ULONG EventsCount;
|
|
const KSEVENT_ITEM *EventItem;
|
|
} KSEVENT_SET;
|
|
typedef KSEVENT_SET *PKSEVENT_SET;
|
|
#endif
|
|
|
|
/* Kernel streaming DPC item */
|
|
#ifdef _NTDDK_
|
|
typedef struct {
|
|
KDPC Dpc;
|
|
ULONG ReferenceCount;
|
|
KSPIN_LOCK AccessLock;
|
|
} KSDPC_ITEM;
|
|
typedef KSDPC_ITEM *PKSDPC_ITEM;
|
|
#endif
|
|
|
|
/* Kernel streaming buffer item */
|
|
#ifdef _NTDDK_
|
|
typedef struct {
|
|
KSDPC_ITEM DpcItem;
|
|
LIST_ENTRY BufferList;
|
|
} KSBUFFER_ITEM;
|
|
typedef KSBUFFER_ITEM *PKSBUFFER_ITEM;
|
|
#endif
|
|
|
|
/* Kernel streaming event entry */
|
|
#ifdef _NTDDK_
|
|
typedef struct _KSEVENT_ENTRY {
|
|
LIST_ENTRY ListEntry;
|
|
PVOID Object;
|
|
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;
|
|
} KSEVENT_ENTRY;
|
|
typedef KSEVENT_ENTRY *PKSEVENT_ENTRY;
|
|
#endif
|
|
|
|
/* Kernel streaming events lock types */
|
|
#ifdef _NTDDK_
|
|
typedef enum {
|
|
KSEVENTS_NONE = 0,
|
|
KSEVENTS_SPINLOCK = 1,
|
|
KSEVENTS_MUTEX = 2,
|
|
KSEVENTS_FMUTEX = 3,
|
|
KSEVENTS_FMUTEXUNSAFE = 4,
|
|
KSEVENTS_INTERRUPT = 5,
|
|
KSEVENTS_ERESOURCE = 6
|
|
} KSEVENTS_LOCKTYPE;
|
|
#endif
|
|
|
|
/* Kernel streaming object create item */
|
|
#ifdef _NTDDK_
|
|
typedef struct {
|
|
PDRIVER_DISPATCH Create;
|
|
PVOID Context;
|
|
UNICODE_STRING ObjectClass;
|
|
PSECURITY_DESCRIPTOR SecurityDescriptor;
|
|
ULONG Flags;
|
|
} KSOBJECT_CREATE_ITEM;
|
|
typedef KSOBJECT_CREATE_ITEM *PKSOBJECT_CREATE_ITEM;
|
|
#endif
|
|
|
|
/* Kernel streaming item free callback */
|
|
#ifdef _NTDDK_
|
|
typedef VOID (NTAPI *PFNKSITEMFREECALLBACK)( PKSOBJECT_CREATE_ITEM );
|
|
#endif
|
|
|
|
/* Kernel streaming object create information */
|
|
#ifdef _NTDDK_
|
|
typedef struct {
|
|
ULONG CreateItemsCount;
|
|
PKSOBJECT_CREATE_ITEM CreateItemsList;
|
|
} KSOBJECT_CREATE;
|
|
typedef KSOBJECT_CREATE *PKSOBJECT_CREATE;
|
|
#endif
|
|
|
|
/* Kernel streaming dispatch table */
|
|
#ifdef _NTDDK_
|
|
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;
|
|
typedef KSDISPATCH_TABLE *PKSDISPATCH_TABLE;
|
|
#endif
|
|
|
|
/* Kernel streaming completion invocations */
|
|
#ifdef _NTDDK_
|
|
typedef enum {
|
|
KsInvokeOnSuccess = 1,
|
|
KsInvokeOnError = 2,
|
|
KsInvokeOnCancel = 4
|
|
} KSCOMPLETION_INVOCATION;
|
|
#endif
|
|
|
|
/* Kernel streaming list entry locations */
|
|
#ifdef _NTDDK_
|
|
typedef enum {
|
|
KsListEntryTail = 1,
|
|
KsListEntryHead = 2
|
|
} KSLIST_ENTRY_LOCATION;
|
|
#endif
|
|
|
|
/* Kernel streaming IRP removal operation */
|
|
#ifdef _NTDDK_
|
|
typedef enum {
|
|
KsAcquireOnly = 0,
|
|
KsAcquireAndRemove = 1,
|
|
KsAcquireOnlySingleItem = 2,
|
|
KsAcquireAndRemoveOnlySingleItem = 3
|
|
} KSIRP_REMOVAL_OPERATION;
|
|
#endif
|
|
|
|
/* Kernel streaming stack uses */
|
|
#ifdef _NTDDK_
|
|
typedef enum {
|
|
KsStackCopyToNewLocation = 0,
|
|
KsStackReuseCurrentLocation = 1,
|
|
KsStackUseNewLocation = 2
|
|
} KSSTACK_USE;
|
|
#endif
|
|
|
|
/* Kernel streaming target states */
|
|
#ifdef _NTDDK_
|
|
typedef enum {
|
|
KSTARGET_STATE_DISABLED = 0,
|
|
KSTARGET_STATE_ENABLED = 1
|
|
} KSTARGET_STATE;
|
|
#endif
|
|
|
|
/* Reference callbacks */
|
|
#ifdef _NTDDK_
|
|
typedef NTSTATUS (NTAPI *PFNKSIRPLISTCALLBACK)( PIRP, PVOID );
|
|
typedef VOID (NTAPI *PFNREFERENCEDEVICEOBJECT)( PVOID );
|
|
typedef VOID (NTAPI *PFNDEREFERENCEDEVICEOBJECT)( PVOID );
|
|
typedef NTSTATUS (NTAPI *PFNQUERYREFERENCESTRING)( PVOID, PWCHAR * );
|
|
#endif
|
|
|
|
/* Bus interface reference */
|
|
#ifdef _NTDDK_
|
|
typedef struct {
|
|
INTERFACE Interface;
|
|
PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject;
|
|
PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject;
|
|
PFNQUERYREFERENCESTRING QueryReferenceString;
|
|
} BUS_INTERFACE_REFERENCE;
|
|
typedef BUS_INTERFACE_REFERENCE *PBUS_INTERFACE_REFERENCE;
|
|
#endif
|
|
|
|
/* Query mediums list callback */
|
|
#ifdef _NTDDK_
|
|
typedef NTSTATUS (NTAPI *PFNQUERYMEDIUMSLIST)( PVOID, ULONG *, KSPIN_MEDIUM * );
|
|
#endif
|
|
|
|
/* Bus interface mediums */
|
|
#ifdef _NTDDK_
|
|
typedef struct {
|
|
INTERFACE Interface;
|
|
PFNQUERYMEDIUMSLIST QueryMediumsList;
|
|
} BUS_INTERFACE_MEDIUMS;
|
|
typedef BUS_INTERFACE_MEDIUMS *PBUS_INTERFACE_MEDIUMS;
|
|
#endif
|
|
|
|
/* Kernel streaming property serial header */
|
|
#include <pshpack1.h>
|
|
typedef struct {
|
|
GUID PropertySet;
|
|
ULONG Count;
|
|
} KSPROPERTY_SERIALHDR;
|
|
typedef KSPROPERTY_SERIALHDR *PKSPROPERTY_SERIALHDR;
|
|
#include <poppack.h>
|
|
|
|
/* Kernel streaming property serial */
|
|
typedef struct {
|
|
KSIDENTIFIER PropTypeSet;
|
|
ULONG Id;
|
|
ULONG PropertyLength;
|
|
} KSPROPERTY_SERIAL;
|
|
typedef KSPROPERTY_SERIAL *PKSPROPERTY_SERIAL;
|
|
|
|
/* Kernel streaming handshake */
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
typedef struct {
|
|
GUID ProtocolId;
|
|
PVOID Argument1;
|
|
PVOID Argument2;
|
|
} KSHANDSHAKE;
|
|
typedef KSHANDSHAKE *PKSHANDSHAKE;
|
|
#endif
|
|
#endif
|
|
|
|
/* Kernel streaming gate */
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
typedef struct _KSGATE {
|
|
LONG Count;
|
|
struct _KSGATE *NextGate;
|
|
} KSGATE;
|
|
typedef KSGATE *PKSGATE;
|
|
#endif
|
|
#endif
|
|
|
|
/* Kernel streaming dispatch callbacks */
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
typedef BOOLEAN (NTAPI *PFNKSGENERATEEVENTCALLBACK)( PVOID, PKSEVENT_ENTRY );
|
|
typedef NTSTATUS (NTAPI *PFNKSDEVICECREATE)( PKSDEVICE );
|
|
typedef NTSTATUS (NTAPI *PFNKSDEVICEPNPSTART)( PKSDEVICE, PIRP, PCM_RESOURCE_LIST, PCM_RESOURCE_LIST );
|
|
typedef NTSTATUS (NTAPI *PFNKSDEVICE)( PKSDEVICE );
|
|
typedef NTSTATUS (NTAPI *PFNKSDEVICEIRP)( PKSDEVICE, PIRP );
|
|
typedef void (NTAPI *PFNKSDEVICEIRPVOID)( PKSDEVICE, PIRP );
|
|
typedef NTSTATUS (NTAPI *PFNKSDEVICEQUERYCAPABILITIES)( PKSDEVICE, PIRP, PDEVICE_CAPABILITIES );
|
|
typedef NTSTATUS (NTAPI *PFNKSDEVICEQUERYPOWER)( PKSDEVICE, PIRP, DEVICE_POWER_STATE, DEVICE_POWER_STATE, SYSTEM_POWER_STATE, SYSTEM_POWER_STATE, POWER_ACTION );
|
|
typedef void (NTAPI *PFNKSDEVICESETPOWER)( PKSDEVICE, PIRP, DEVICE_POWER_STATE, DEVICE_POWER_STATE );
|
|
typedef NTSTATUS (NTAPI *PFNKSFILTERFACTORYVOID)( PKSFILTERFACTORY );
|
|
typedef void (NTAPI *PFNKSFILTERFACTORYPOWER)( PKSFILTERFACTORY, DEVICE_POWER_STATE );
|
|
typedef NTSTATUS (NTAPI *PFNKSFILTERIRP)( PKSFILTER, PIRP );
|
|
typedef NTSTATUS (NTAPI *PFNKSFILTERPROCESS)( PKSFILTER, PKSPROCESSPIN_INDEXENTRY );
|
|
typedef NTSTATUS (NTAPI *PFNKSFILTERVOID)( PKSFILTER );
|
|
typedef void (NTAPI *PFNKSFILTERPOWER)( PKSFILTER, DEVICE_POWER_STATE );
|
|
typedef NTSTATUS (NTAPI *PFNKSPINIRP )( PKSPIN, PIRP );
|
|
typedef NTSTATUS (NTAPI *PFNKSPINSETDEVICESTATE)( PKSPIN, KSSTATE, KSSTATE );
|
|
typedef NTSTATUS (NTAPI *PFNKSPINSETDATAFORMAT)( PKSPIN, PKSDATAFORMAT, PKSMULTIPLE_ITEM, const KSDATARANGE *, const KSATTRIBUTE_LIST * );
|
|
typedef NTSTATUS (NTAPI *PFNKSPINHANDSHAKE)( PKSPIN, PKSHANDSHAKE, PKSHANDSHAKE );
|
|
typedef NTSTATUS (NTAPI *PFNKSPIN)( PKSPIN );
|
|
typedef void (NTAPI *PFNKSPINVOID)( PKSPIN );
|
|
typedef void (NTAPI *PFNKSPINPOWER)( PKSPIN, DEVICE_POWER_STATE );
|
|
typedef BOOLEAN (NTAPI *PFNKSPINSETTIMER)( PKSPIN, PKTIMER, LARGE_INTEGER, PKDPC );
|
|
typedef BOOLEAN (NTAPI *PFNKSPINCANCELTIMER)( PKSPIN, PKTIMER );
|
|
typedef LONGLONG (FASTCALL *PFNKSPINCORRELATEDTIME)( PKSPIN, PLONGLONG );
|
|
typedef void (NTAPI *PFNKSPINRESOLUTION)( PKSPIN, PKSRESOLUTION );
|
|
typedef NTSTATUS (NTAPI *PFNKSPININITIALIZEALLOCATOR)( KSPIN, PKSALLOCATOR_FRAMING, PVOID * );
|
|
typedef void (NTAPI *PFNKSSTREAMPOINTER)( PKSSTREAM_POINTER );
|
|
#endif
|
|
#endif
|
|
|
|
/* Kernel streaming automation table */
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
typedef 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;
|
|
PVOID Alignment;
|
|
} KSAUTOMATION_TABLE;
|
|
typedef KSAUTOMATION_TABLE *PKSAUTOMATION_TABLE;
|
|
#endif
|
|
#endif
|
|
|
|
/* Kernel streaming device dispatch */
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
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;
|
|
};
|
|
#endif
|
|
#endif
|
|
|
|
/* Kernel streaming filter dispatch */
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
struct _KSFILTER_DISPATCH {
|
|
PFNKSFILTERIRP Create;
|
|
PFNKSFILTERIRP Close;
|
|
PFNKSFILTERPROCESS Process;
|
|
PFNKSFILTERVOID Reset;
|
|
};
|
|
#endif
|
|
#endif
|
|
|
|
/* Kernel streaming pin dispatch */
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
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;
|
|
};
|
|
#endif
|
|
#endif
|
|
|
|
/* Kernel streaming clock dispatch */
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
struct _KSCLOCK_DISPATCH {
|
|
PFNKSPINSETTIMER SetTimer;
|
|
PFNKSPINCANCELTIMER CancelTimer;
|
|
PFNKSPINCORRELATEDTIME CorrelatedTime;
|
|
PFNKSPINRESOLUTION Resolution;
|
|
};
|
|
#endif
|
|
#endif
|
|
|
|
/* Kernel streaming allocator dispatch */
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
struct _KSALLOCATOR_DISPATCH {
|
|
PFNKSPININITIALIZEALLOCATOR InitializeAllocator;
|
|
PFNKSDELETEALLOCATOR DeleteAllocator;
|
|
PFNKSDEFAULTALLOCATE Allocate;
|
|
PFNKSDEFAULTFREE Free;
|
|
};
|
|
#endif
|
|
#endif
|
|
|
|
/* Kernel streaming device descriptor */
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
struct _KSDEVICE_DESCRIPTOR {
|
|
const KSDEVICE_DISPATCH *Dispatch;
|
|
ULONG FilterDescriptorsCount;
|
|
const KSFILTER_DESCRIPTOR **FilterDescriptors;
|
|
ULONG Version;
|
|
#if (NTDDI_VERSION >= 0x06000000)
|
|
ULONG Flags;
|
|
PVOID Alignment;
|
|
#endif
|
|
};
|
|
#endif
|
|
#endif
|
|
|
|
/* Kernel streaming filter descriptor */
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
struct _KSFILTER_DESCRIPTOR {
|
|
const KSFILTER_DISPATCH *Dispatch;
|
|
const KSAUTOMATION_TABLE *AutomationTable;
|
|
ULONG Version;
|
|
ULONG Flags;
|
|
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;
|
|
};
|
|
#endif
|
|
#endif
|
|
|
|
/* Kernel streaming pin descriptor (extended version) */
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
struct _KSPIN_DESCRIPTOR_EX {
|
|
const KSPIN_DISPATCH *Dispatch;
|
|
const KSAUTOMATION_TABLE *AutomationTable;
|
|
KSPIN_DESCRIPTOR PinDescriptor;
|
|
ULONG Flags;
|
|
ULONG InstancesPossible;
|
|
ULONG InstancesNecessary;
|
|
const KSALLOCATOR_FRAMING_EX *AllocatorFraming;
|
|
PFNKSINTERSECTHANDLEREX IntersectHandler;
|
|
};
|
|
#endif
|
|
#endif
|
|
|
|
/* Kernel streaming node descriptor */
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
struct _KSNODE_DESCRIPTOR {
|
|
const KSAUTOMATION_TABLE *AutomationTable;
|
|
const GUID *Type;
|
|
const GUID *Name;
|
|
PVOID Alignment;
|
|
};
|
|
#endif
|
|
#endif
|
|
|
|
/* Kernel streaming device */
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
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;
|
|
};
|
|
#endif
|
|
#endif
|
|
|
|
/* Kernel streaming filter factory */
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
struct _KSFILTERFACTORY {
|
|
const KSFILTER_DESCRIPTOR *FilterDescriptor;
|
|
KSOBJECT_BAG Bag;
|
|
PVOID Context;
|
|
};
|
|
#endif
|
|
#endif
|
|
|
|
/* Kernel streaming filter */
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
struct _KSFILTER {
|
|
const KSFILTER_DESCRIPTOR *Descriptor;
|
|
KSOBJECT_BAG Bag;
|
|
PVOID Context;
|
|
};
|
|
#endif
|
|
#endif
|
|
|
|
/* Kernel streaming pin */
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
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;
|
|
};
|
|
#endif
|
|
#endif
|
|
|
|
/* Kernel streaming mapping */
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
struct _KSMAPPING {
|
|
PHYSICAL_ADDRESS PhysicalAddress;
|
|
ULONG ByteCount;
|
|
ULONG Alignment;
|
|
};
|
|
#endif
|
|
#endif
|
|
|
|
/* Kernel streaming stream pointer offset */
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
struct _KSSTREAM_POINTER_OFFSET {
|
|
union {
|
|
PUCHAR Data;
|
|
PKSMAPPING Mappings;
|
|
};
|
|
PVOID Alignment;
|
|
ULONG Count;
|
|
ULONG Remaining;
|
|
};
|
|
#endif
|
|
#endif
|
|
|
|
/* Kernel streaming stream pointer */
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
struct _KSSTREAM_POINTER {
|
|
PVOID Context;
|
|
PKSPIN Pin;
|
|
PKSSTREAM_HEADER StreamHeader;
|
|
PKSSTREAM_POINTER_OFFSET Offset;
|
|
KSSTREAM_POINTER_OFFSET OffsetIn;
|
|
KSSTREAM_POINTER_OFFSET OffsetOut;
|
|
};
|
|
#endif
|
|
#endif
|
|
|
|
/* Kernel streaming process pin */
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
struct _KSPROCESSPIN {
|
|
PKSPIN Pin;
|
|
PKSSTREAM_POINTER StreamPointer;
|
|
PKSPROCESSPIN InPlaceCounterpart;
|
|
PKSPROCESSPIN DelegateBranch;
|
|
PKSPROCESSPIN CopySource;
|
|
PVOID Data;
|
|
ULONG BytesAvailable;
|
|
ULONG BytesUsed;
|
|
ULONG Flags;
|
|
BOOLEAN Terminate;
|
|
};
|
|
#endif
|
|
#endif
|
|
|
|
/* Kernel streaming process pin index entry */
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
struct _KSPROCESSPIN_INDEXENTRY {
|
|
PKSPROCESSPIN *Pins;
|
|
ULONG Count;
|
|
};
|
|
#endif
|
|
#endif
|
|
|
|
/* Kernel streaming object types */
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
typedef enum {
|
|
KsObjectTypeDevice = 0,
|
|
KsObjectTypeFilterFactory = 1,
|
|
KsObjectTypeFilter = 2,
|
|
KsObjectTypePin = 3
|
|
} KSOBJECTTYPE;
|
|
#endif
|
|
#endif
|
|
|
|
/* More kernel streaming callbacks */
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
typedef void (NTAPI *PFNKSFREE)( PVOID );
|
|
typedef void (NTAPI *PFNKSPINFRAMERETURN)( PKSPIN, PVOID, ULONG, PMDL, PVOID, NTSTATUS );
|
|
typedef void (NTAPI *PFNKSPINIRPCOMPLETION)( PKSPIN, PIRP );
|
|
#endif
|
|
#endif
|
|
|
|
/* Kernel streaming stream pointer states */
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
typedef enum {
|
|
KSSTREAM_POINTER_STATE_UNLOCKED = 0,
|
|
KSSTREAM_POINTER_STATE_LOCKED = 1
|
|
} KSSTREAM_POINTER_STATE;
|
|
#endif
|
|
#endif
|
|
|
|
/* Macro to define IUnknown methods */
|
|
#ifdef _NTDDK_
|
|
#ifdef _UNKNOWN_H_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
#define DEFINE_ABSTRACT_UNKNOWN() \
|
|
STDMETHOD_( NTSTATUS, QueryInterface )( THIS_ REFIID, PVOID * ) PURE; \
|
|
STDMETHOD_( ULONG, AddRef )( THIS ) PURE; \
|
|
STDMETHOD_( ULONG, Release )( THIS ) PURE;
|
|
#endif
|
|
#endif
|
|
#endif
|
|
|
|
/* IKsControl interface */
|
|
#ifdef _NTDDK_
|
|
#ifdef _UNKNOWN_H_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
#undef INTERFACE
|
|
#define INTERFACE IKsControl
|
|
DECLARE_INTERFACE_( IKsControl, IUnknown ) {
|
|
/* IUnknown methods */
|
|
DEFINE_ABSTRACT_UNKNOWN()
|
|
|
|
/* IKsControl methods */
|
|
STDMETHOD_( NTSTATUS, KsProperty )( THIS_ PKSPROPERTY, ULONG, PVOID, ULONG, ULONG * ) PURE;
|
|
STDMETHOD_( NTSTATUS, KsMethod )( THIS_ PKSMETHOD, ULONG, PVOID, ULONG, ULONG * ) PURE;
|
|
STDMETHOD_( NTSTATUS, KsEvent )( THIS_ PKSEVENT, ULONG, PVOID, ULONG, ULONG * ) PURE;
|
|
};
|
|
typedef IKsControl *PIKSCONTROL;
|
|
#endif
|
|
#endif
|
|
#endif
|
|
|
|
/* IKsReferenceClock interface */
|
|
#ifdef _NTDDK_
|
|
#ifdef _UNKNOWN_H_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
#undef INTERFACE
|
|
#define INTERFACE IKsReferenceClock
|
|
DECLARE_INTERFACE_( IKsReferenceClock, IUnknown ) {
|
|
/* IUnknown methods */
|
|
DEFINE_ABSTRACT_UNKNOWN()
|
|
|
|
/* IKsReferenceClock methods */
|
|
STDMETHOD_( LONGLONG, GetTime )( THIS ) PURE;
|
|
STDMETHOD_( LONGLONG, GetPhysicalTime )( THIS ) PURE;
|
|
STDMETHOD_( LONGLONG, GetCorrelatedTime )( THIS_ PLONGLONG ) PURE;
|
|
STDMETHOD_( LONGLONG, GetCorrelatedPhysicalTime )( THIS_ PLONGLONG ) PURE;
|
|
STDMETHOD_( NTSTATUS, GetResolution )( THIS_ PKSRESOLUTION ) PURE;
|
|
STDMETHOD_( NTSTATUS, GetState )( THIS_ PKSSTATE ) PURE;
|
|
};
|
|
typedef IKsReferenceClock *PIKSREFERENCECLOCK;
|
|
#endif
|
|
#endif
|
|
#endif
|
|
|
|
/* IKsDeviceFunctions interface */
|
|
#ifdef _NTDDK_
|
|
#ifdef _UNKNOWN_H_
|
|
#if (NTDDI_VERSION >= 0x05020100)
|
|
#undef INTERFACE
|
|
#define INTERFACE IKsDeviceFunctions
|
|
DECLARE_INTERFACE_( IKsDeviceFunctions, IUnknown ) {
|
|
/* IUnknown methods */
|
|
DEFINE_ABSTRACT_UNKNOWN()
|
|
|
|
/* IKsDeviceFunctions methods */
|
|
STDMETHOD_( NTSTATUS, RegisterAdapterObjectEx )( THIS_ PADAPTER_OBJECT, PDEVICE_DESCRIPTION, ULONG, ULONG, ULONG ) PURE;
|
|
};
|
|
#endif
|
|
#endif
|
|
#endif
|
|
|
|
/* The name INTERFACE is used for a structure in ntddk.h, so if it was defined in order
|
|
* to declare a COM interface, undefine it so that the structure is accessible.
|
|
*/
|
|
#ifdef _NTDDK_
|
|
#ifdef _UNKNOWN_H_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
#undef INTERFACE
|
|
#endif
|
|
#endif
|
|
#endif
|
|
|
|
/* Variables in KS.SYS */
|
|
#ifdef _NTDDK_
|
|
KSDDKAPI DRIVER_CANCEL KsCancelRoutine;
|
|
#endif
|
|
|
|
/* Functions in KS.SYS */
|
|
#ifdef _NTDDK_
|
|
KSDDKAPI VOID NTAPI KsAcquireDeviceSecurityLock( KSDEVICE_HEADER, BOOLEAN );
|
|
KSDDKAPI NTSTATUS NTAPI KsAcquireResetValue( PIRP, KSRESET * );
|
|
KSDDKAPI VOID NTAPI KsAddIrpToCancelableQueue( PLIST_ENTRY, PKSPIN_LOCK, PIRP, KSLIST_ENTRY_LOCATION, PDRIVER_CANCEL );
|
|
KSDDKAPI NTSTATUS NTAPI KsAddObjectCreateItemToDeviceHeader( KSDEVICE_HEADER, PDRIVER_DISPATCH, PVOID, PWSTR, PSECURITY_DESCRIPTOR );
|
|
KSDDKAPI NTSTATUS NTAPI KsAddObjectCreateItemToObjectHeader( KSOBJECT_HEADER, PDRIVER_DISPATCH, PVOID, PWSTR, PSECURITY_DESCRIPTOR );
|
|
KSDDKAPI NTSTATUS NTAPI KsAllocateDefaultClock( PKSDEFAULT_CLOCK * );
|
|
KSDDKAPI NTSTATUS NTAPI KsAllocateDeviceHeader( KSDEVICE_HEADER *, ULONG, PKSOBJECT_CREATE_ITEM );
|
|
KSDDKAPI NTSTATUS NTAPI KsAllocateExtraData( PIRP, ULONG, PVOID * );
|
|
KSDDKAPI NTSTATUS NTAPI KsAllocateObjectCreateItem( KSDEVICE_HEADER, PKSOBJECT_CREATE_ITEM, BOOLEAN, PFNKSITEMFREECALLBACK );
|
|
KSDDKAPI NTSTATUS NTAPI KsAllocateObjectHeader( KSOBJECT_HEADER *, ULONG, PKSOBJECT_CREATE_ITEM, PIRP, const KSDISPATCH_TABLE * );
|
|
KSDDKAPI VOID NTAPI KsCancelIo( PLIST_ENTRY, PKSPIN_LOCK );
|
|
KSDDKAPI NTSTATUS NTAPI KsCreateAllocator( HANDLE, PKSALLOCATOR_FRAMING, PHANDLE );
|
|
KSDDKAPI NTSTATUS NTAPI KsCreateClock( HANDLE, PKSCLOCK_CREATE, PHANDLE );
|
|
KSDDKAPI NTSTATUS NTAPI KsCreateDefaultAllocator( PIRP );
|
|
KSDDKAPI NTSTATUS NTAPI KsCreateDefaultAllocatorEx( PIRP, PVOID, PFNKSDEFAULTALLOCATE, PFNKSDEFAULTFREE, PFNKSINITIALIZEALLOCATOR, PFNKSDELETEALLOCATOR );
|
|
KSDDKAPI NTSTATUS NTAPI KsCreateDefaultClock( PIRP, PKSDEFAULTCLOCK );
|
|
KSDDKAPI NTSTATUS NTAPI KsCreateDefaultSecurity( PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR * );
|
|
KSDDKAPI NTSTATUS NTAPI KsCreatePin( HANDLE, PKSPIN_CONNECT, ACCESS_MASK, PHANDLE );
|
|
KSDDKAPI NTSTATUS NTAPI KsCreateTopologyNode( HANDLE, PKSNODE_CREATE, ACCESS_MASK, PHANDLE );
|
|
KSDDKAPI ULONG NTAPI KsDecrementCountedWorker( PKSWORKER );
|
|
KSDDKAPI NTSTATUS NTAPI KsDefaultDeviceIoCompletion( PDEVICE_OBJECT, PIRP );
|
|
KSDDKAPI NTSTATUS NTAPI KsDefaultDispatchPnp( PDEVICE_OBJECT, PIRP );
|
|
KSDDKAPI NTSTATUS NTAPI KsDefaultDispatchPower( PDEVICE_OBJECT, PIRP );
|
|
KSDDKAPI NTSTATUS NTAPI KsDefaultForwardIrp( PDEVICE_OBJECT, PIRP );
|
|
KSDDKAPI VOID NTAPI KsDereferenceBusObject( KSDEVICE_HEADER );
|
|
KSDDKAPI NTSTATUS NTAPI KsDisableEvent( PIRP, PLIST_ENTRY, KSEVENTS_LOCKTYPE, PVOID );
|
|
KSDDKAPI VOID NTAPI KsDiscardEvent( PKSEVENT_ENTRY );
|
|
KSDDKAPI BOOLEAN NTAPI KsDispatchFastIoDeviceControlFailure( PFILE_OBJECT, BOOLEAN, PVOID, ULONG, PVOID, ULONG, ULONG, PIO_STATUS_BLOCK, PDEVICE_OBJECT );
|
|
KSDDKAPI BOOLEAN NTAPI KsDispatchFastReadFailure( PFILE_OBJECT, PLARGE_INTEGER, ULONG, BOOLEAN, ULONG, PVOID, PIO_STATUS_BLOCK, PDEVICE_OBJECT );
|
|
KSDDKAPI NTSTATUS NTAPI KsDispatchInvalidDeviceRequest( PDEVICE_OBJECT, PIRP );
|
|
KSDDKAPI NTSTATUS NTAPI KsDispatchIrp( PDEVICE_OBJECT, PIRP );
|
|
KSDDKAPI NTSTATUS NTAPI KsDispatchQuerySecurity( PDEVICE_OBJECT, PIRP );
|
|
KSDDKAPI NTSTATUS NTAPI KsDispatchSetSecurity( PDEVICE_OBJECT, PIRP );
|
|
KSDDKAPI NTSTATUS NTAPI KsDispatchSpecificMethod( PIRP, PFNKSHANDLER );
|
|
KSDDKAPI NTSTATUS NTAPI KsDispatchSpecificProperty( PIRP, PFNKSHANDLER );
|
|
KSDDKAPI NTSTATUS NTAPI KsEnableEvent( PIRP, ULONG, const KSEVENT_SET *, PLIST_ENTRY, KSEVENTS_LOCKTYPE, PVOID );
|
|
KSDDKAPI NTSTATUS NTAPI KsEnableEventWithAllocator( PIRP, ULONG, const KSEVENT_SET *, PLIST_ENTRY, KSEVENTS_LOCKTYPE, PVOID, PFNKSALLOCATOR, ULONG );
|
|
KSDDKAPI BOOLEAN NTAPI KsFastMethodHandler( PFILE_OBJECT, PKSMETHOD, ULONG, PVOID, ULONG, PIO_STATUS_BLOCK, ULONG, const KSMETHOD_SET * );
|
|
KSDDKAPI BOOLEAN NTAPI KsFastPropertyHandler( PFILE_OBJECT, PKSPROPERTY, ULONG, PVOID, ULONG, PIO_STATUS_BLOCK, ULONG, const KSPROPERTY_SET * );
|
|
KSDDKAPI NTSTATUS NTAPI KsForwardAndCatchIrp( PDEVICE_OBJECT, PIRP, PFILE_OBJECT, KSSTACK_USE );
|
|
KSDDKAPI NTSTATUS NTAPI KsForwardIrp( PIRP, PFILE_OBJECT, BOOLEAN );
|
|
KSDDKAPI VOID NTAPI KsFreeDefaultClock( PKSDEFAULTCLOCK );
|
|
KSDDKAPI VOID NTAPI KsFreeDeviceHeader( KSDEVICE_HEADER );
|
|
KSDDKAPI VOID NTAPI KsFreeEventList( PFILE_OBJECT, PLIST_ENTRY, KSEVENTS_LOCKTYPE, PVOID );
|
|
KSDDKAPI NTSTATUS NTAPI KsFreeObjectCreateItem( KSDEVICE_HEADER, PUNICODE_STRING );
|
|
KSDDKAPI NTSTATUS NTAPI KsFreeObjectCreateItemsByContext( KSDEVICE_HEADER, PVOID );
|
|
KSDDKAPI VOID NTAPI KsFreeObjectHeader( KSOBJECT_HEADER );
|
|
KSDDKAPI NTSTATUS NTAPI KsGenerateDataEvent( PKSEVENT_ENTRY, ULONG, PVOID );
|
|
KSDDKAPI NTSTATUS NTAPI KsGenerateEvent( PKSEVENT_ENTRY );
|
|
KSDDKAPI VOID NTAPI KsGenerateEventList( GUID *, ULONG, PLIST_ENTRY, KSEVENTS_LOCKTYPE, PVOID );
|
|
KSDDKAPI KSSTATE NTAPI KsGetDefaultClockState( PKSDEFAULTCLOCK );
|
|
KSDDKAPI LONGLONG NTAPI KsGetDefaultClockTime( PKSDEFAULTCLOCK );
|
|
KSDDKAPI NTSTATUS NTAPI KsGetImageNameAndResourceId( HANDLE, PUNICODE_STRING, PULONG_PTR, PULONG );
|
|
KSDDKAPI NTSTATUS NTAPI KsHandleSizedListQuery( PIRP, ULONG, ULONG, const VOID * );
|
|
KSDDKAPI ULONG NTAPI KsIncrementCountedWorker( PKSWORKER );
|
|
KSDDKAPI NTSTATUS NTAPI KsLoadResource( PVOID, POOL_TYPE, ULONG_PTR, ULONG, PVOID *, PULONG );
|
|
KSDDKAPI NTSTATUS NTAPI KsMapModuleName( PDEVICE_OBJECT, PUNICODE_STRING, PUNICODE_STRING, PULONG_PTR, PULONG );
|
|
KSDDKAPI NTSTATUS NTAPI KsMethodHandler( PIRP, ULONG, const KSMETHOD_SET * );
|
|
KSDDKAPI NTSTATUS NTAPI KsMethodHandlerWithAllocator( PIRP, ULONG, const KSMETHOD_SET *, PFNKSALLOCATOR, ULONG );
|
|
KSDDKAPI NTSTATUS NTAPI KsMoveIrpsOnCancelableQueue( PLIST_ENTRY, PKSPIN_LOCK, PLIST_ENTRY, PKSPIN_LOCK, KSLIST_ENTRY_LOCATION, PFNKSIRPLISTCALLBACK, PVOID );
|
|
KSDDKAPI VOID NTAPI KsNullDriverUnload( PDRIVER_OBJECT );
|
|
KSDDKAPI NTSTATUS NTAPI KsPinDataIntersection( PIRP, PKSP_PIN, PVOID, ULONG, const KSPIN_DESCRIPTOR *, PFNKSINTERSECTHANDLER );
|
|
KSDDKAPI NTSTATUS NTAPI KsPinPropertyHandler( PIRP, PKSPROPERTY, PVOID, ULONG, const KSPIN_DESCRIPTOR * );
|
|
KSDDKAPI NTSTATUS NTAPI KsProbeStreamIrp( PIRP, ULONG, ULONG );
|
|
KSDDKAPI NTSTATUS NTAPI KsPropertyHandler( PIRP, ULONG, const KSPROPERTY_SET * );
|
|
KSDDKAPI NTSTATUS NTAPI KsPropertyHandlerWithAllocator( PIRP, ULONG, const KSPROPERTY_SET *, PFNKSALLOCATOR, ULONG );
|
|
KSDDKAPI PDEVICE_OBJECT NTAPI KsQueryDevicePnpObject( KSDEVICE_HEADER );
|
|
KSDDKAPI NTSTATUS NTAPI KsQueryInformationFile( PFILE_OBJECT, PVOID, ULONG, FILE_INFORMATION_CLASS );
|
|
KSDDKAPI ACCESS_MASK NTAPI KsQueryObjectAccessMask( KSOBJECT_HEADER );
|
|
KSDDKAPI PKSOBJECT_CREATE_ITEM KsQueryObjectCreateItem( KSOBJECT_HEADER );
|
|
KSDDKAPI NTSTATUS NTAPI KsQueueWorkItem( PKSWORKER, PWORK_QUEUE_ITEM );
|
|
KSDDKAPI NTSTATUS NTAPI KsReadFile( PFILE_OBJECT, PKEVENT, PVOID, PIO_STATUS_BLOCK, PVOID, ULONG, ULONG, KPROCESSOR_MODE );
|
|
KSDDKAPI VOID NTAPI KsRecalculateStackDepth( KSDEVICE_HEADER, BOOLEAN );
|
|
KSDDKAPI NTSTATUS NTAPI KsReferenceBusObject( KSDEVICE_HEADER );
|
|
KSDDKAPI NTSTATUS NTAPI KsRegisterCountedWorker( WORK_QUEUE_TYPE, PWORK_QUEUE_ITEM, PKSWORKER * );
|
|
KSDDKAPI NTSTATUS NTAPI KsRegisterWorker( WORK_QUEUE_TYPE, PKSWORKER * );
|
|
KSDDKAPI VOID NTAPI KsReleaseDeviceSecurityLock( KSDEVICE_HEADER );
|
|
KSDDKAPI VOID NTAPI KsReleaseIrpOnCancelableQueue( PIRP, PDRIVER_CANCEL );
|
|
KSDDKAPI PIRP NTAPI KsRemoveIrpFromCancelableQueue( PLIST_ENTRY, PKSPIN_LOCK, KSLIST_ENTRY_LOCATION, PSIRP_REMOVAL_OPERATION );
|
|
KSDDKAPI VOID NTAPI KsRemoveSpecificIrpFromCancelableQueue( PIRP );
|
|
KSDDKAPI VOID NTAPI KsSetDefaultClockState( PKSDEFAULTCLOCK, KSSTATE );
|
|
KSDDKAPI VOID NTAPI KsSetDefaultClockTime( PKSDEFAULTCLOCK, LONGLONG );
|
|
KSDDKAPI VOID NTAPI KsSetDevicePnpAndBaseObject( KSDEVICE_HEADER, PDEVICE_OBJECT, PDEVICE_OBJECT );
|
|
KSDDKAPI NTSTATUS NTAPI KsSetInformationFile( PFILE_OBJECT, PVOID, ULONG, FILE_INFORMATION_CLASS );
|
|
KSDDKAPI NTSTATUS NTAPI KsSetMajorFunctionHandler( PDRIVER_OBJECT, ULONG );
|
|
KSDDKAPI VOID NTAPI KsSetPowerDispatch( KSOBJECT_HEADER, PFNKSCONTEXT_DISPATCH, PVOID );
|
|
KSDDKAPI VOID NTAPI KsSetTargetDeviceObject( KSOBJECT_HEADER, PDEVICE_OBJECT );
|
|
KSDDKAPI VOID NTAPI KsSetTargetState( KSOBJECT_HEADER, KSTARGET_STATE );
|
|
KSDDKAPI NTSTATUS NTAPI KsStreamIo( PFILE_OBJECT, PKEVENT, PVOID, PIO_COMPLETION_ROUTINE, PVOID, KSCOMPLETION_INVOCATION, PIO_STATUS_BLOCK, PVOID, ULONG, ULONG, KPROCESSOR_MODE );
|
|
KSDDKAPI NTSTATUS NTAPI KsSynchronousIoControlDevice( PFILE_OBJECT, KPROCESSOR_MODE, ULONG, PVOID, ULONG, PVOID, ULONG, PULONG );
|
|
KSDDKAPI NTSTATUS NTAPI KsTopologyPropertyHandler( PIRP, PKSPROPERTY, PVOID, const KSTOPOLOGY * );
|
|
KSDDKAPI VOID NTAPI KsUnregisterWorker( PKSWORKER );
|
|
KSDDKAPI NTSTATUS NTAPI KsUnserializeObjectPropertiesFromRegistry( PFILE_OBJECT, HANDLE, PUNICODE_STRING );
|
|
KSDDKAPI NTSTATUS NTAPI KsValidateAllocatorCreateRequest( PIRP, PKSALLOCATOR_FRAMING * );
|
|
KSDDKAPI NTSTATUS NTAPI KsValidateAllocatorFramingEx( PKSALLOCATOR_FRAMING_EX, ULONG, const KSALLOCATOR_FRAMING_EX * );
|
|
KSDDKAPI NTSTATUS NTAPI KsValidateClockCreateRequest( PIRP, PKSCLOCK_CREATE * );
|
|
KSDDKAPI NTSTATUS NTAPI KsValidateConnectRequest( PIRP, ULONG, const KSPIN_DESCRIPTOR *, PKSPIN_CONNECT * );
|
|
KSDDKAPI NTSTATUS NTAPI KsValidateTopologyNodeCreateRequest( PIRP, PKSTOPOLOGY, PKSNODE_CREATE * );
|
|
KSDDKAPI NTSTATUS NTAPI KsWriteFile( PFILE_OBJECT, PKEVENT, PVOID, PIO_STATUS_BLOCK, PVOID, ULONG, ULONG, KPROCESSOR_MODE );
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
KSDDKAPI void NTAPI KsAcquireControl( PVOID );
|
|
KSDDKAPI void NTAPI KsAcquireDevice( PKSDEVICE );
|
|
KSDDKAPI NTSTATUS NTAPI KsAddDevice( PDRIVER_OBJECT, PDEVICE_OBJECT );
|
|
KSDDKAPI void NTAPI KsAddEvent( PVOID, PKSEVENT_ENTRY );
|
|
KSDDKAPI NTSTATUS NTAPI KsAddItemToObjectBag( KSOBJECT_BAG, PVOID, PFNKSFREE );
|
|
KSDDKAPI NTSTATUS NTAPI KsAllocateDefaultClockEx( PKSDEFAULTCLOCK *, PVOID, PFNKSSETTIMER, PFNKSCANCELTIMER, PFNKSCORRELATEDTIME, const KSRESOLUTION *, ULONG );
|
|
KSDDKAPI NTSTATUS NTAPI KsAllocateObjectBag( PKSDEVICE, KSOBJECT_BAG * );
|
|
KSDDKAPI NTSTATUS NTAPI KsCacheMedium( PUNICODE_STRING, PKSPIN_MEDIUM, ULONG );
|
|
KSDDKAPI void NTAPI KsCompletePendingRequest( PIRP );
|
|
KSDDKAPI NTSTATUS NTAPI KsCopyObjectBagItems( KSOBJECT_BAG, KSOBJECT_BAG );
|
|
KSDDKAPI NTSTATUS NTAPI KsCreateDevice( PDRIVER_OBJECT, PDEVICE_OBJECT, const KSDEVICE_DESCRIPTOR *, ULONG, PKSDEVICE * );
|
|
KSDDKAPI NTSTATUS NTAPI KsCreateFilterFactory( PDEVICE_OBJECT, const KSFILTER_DESCRIPTOR *, PWSTR, PSECURITY_DESCRIPTOR, ULONG, PFNKSFILTERFACTORYPOWER, PFNKSFILTERFACTORYPOWER, PKSFILTERFACTORY * );
|
|
KSDDKAPI NTSTATUS NTAPI KsDefaultAddEventHandler( PIRP, PKSEVENTDATA, PKSEVENT_ENTRY );
|
|
KSDDKAPI ULONG NTAPI KsDeviceGetBusData( PKSDEVICE, ULONG, PVOID, ULONG, ULONG );
|
|
KSDDKAPI void NTAPI KsDeviceRegisterAdapterObject( PKSDEVICE, PADAPTER_OBJECT, ULONG, ULONG );
|
|
KSDDKAPI ULONG NTAPI KsDeviceSetBusData( PKSDEVICE, ULONG, PVOID, ULONG, ULONG );
|
|
KSDDKAPI void NTAPI KsFilterAcquireProcessingMutex( PKSFILTER );
|
|
KSDDKAPI NTSTATUS NTAPI KsFilterAddTopologyConnections( PKSFILTER, ULONG, const KSTOPOLOGY_CONNECTION * );
|
|
KSDDKAPI void NTAPI KsFilterAttemptProcessing( PKSFILTER, BOOLEAN );
|
|
KSDDKAPI NTSTATUS NTAPI KsFilterCreateNode( PKSFILTER, const KSNODE_DESCRIPTOR *, PULONG );
|
|
KSDDKAPI NTSTATUS NTAPI KsFilterCreatePinFactory( PKSFILTER, const KSPIN_DESCRIPTOR_EX *, PULONG );
|
|
KSDDKAPI NTSTATUS NTAPI KsFilterFactoryAddCreateItem( PKSFILTERFACTORY, PWSTR, PSECURITY_DESCRIPTOR, ULONG );
|
|
KSDDKAPI PUNICODE_STRING NTAPI KsFilterFactoryGetSymbolicLink( PKSFILTERFACTORY );
|
|
KSDDKAPI NTSTATUS NTAPI KsFilterFactorySetDeviceClassesState( PKSFILTERFACTORY, BOOLEAN );
|
|
KSDDKAPI NTSTATUS NTAPI KsFilterFactoryUpdateCacheData( PKSFILTERFACTORY, const KSFILTER_DESCRIPTOR * );
|
|
KSDDKAPI PKSGATE NTAPI KsFilterGetAndGate( PKSFILTER );
|
|
KSDDKAPI ULONG NTAPI KsFilterGetChildPinCount( PKSFILTER, ULONG );
|
|
KSDDKAPI PKSPIN NTAPI KsFilterGetFirstChildPin( PKSFILTER, ULONG );
|
|
KSDDKAPI void NTAPI KsFilterRegisterPowerCallbacks( PKSFILTER, PFNKSFILTERPOWER, PFNKSFILTERPOWER );
|
|
KSDDKAPI void NTAPI KsFilterReleaseProcessingMutex( PKSFILTER );
|
|
KSDDKAPI void NTAPI KsFreeObjectBag( KSOBJECT_BAG );
|
|
KSDDKAPI void NTAPI KsGenerateEvents( PVOID, const GUID *, ULONG, ULONG, PVOID, PFNKSGENERATEEVENTCALLBACK, PVOID );
|
|
KSDDKAPI PKSDEVICE NTAPI KsGetDevice( PVOID );
|
|
KSDDKAPI PKSDEVICE NTAPI KsGetDeviceForDeviceObject( PDEVICE_OBJECT );
|
|
KSDDKAPI PKSFILTER NTAPI KsGetFilterFromIrp( PIRP );
|
|
KSDDKAPI PVOID NTAPI KsGetFirstChild( PVOID );
|
|
KSDDKAPI PVOID NTAPI KsGetNextSibling( PVOID );
|
|
KSDDKAPI ULONG NTAPI KsGetNodeIdFromIrp( PIRP );
|
|
KSDDKAPI PVOID NTAPI KsGetObjectFromFileObject( PFILE_OBJECT );
|
|
KSDDKAPI KSOBJECTTYPE NTAPI KsGetObjectTypeFromFileObject( PFILE_OBJECT );
|
|
KSDDKAPI KSOBJECTTYPE NTAPI KsGetObjectTypeFromIrp( PIRP );
|
|
KSDDKAPI PVOID NTAPI KsGetParent( PVOID );
|
|
KSDDKAPI PKSPIN NTAPI KsGetPinFromIrp( PIRP );
|
|
KSDDKAPI NTSTATUS NTAPI KsInitializeDevice( PDEVICE_OBJECT, PDEVICE_OBJECT, PDEVICE_OBJECT, const KSDEVICE_DESCRIPTOR * );
|
|
KSDDKAPI NTSTATUS NTAPI KsInitializeDriver( PDRIVER_OBJECT, PUNICODE_STRING, const KSDEVICE_DESCRIPTOR * );
|
|
KSDDKAPI NTSTATUS NTAPI KsMergeAutomationTables( PKSAUTOMATION_TABLE *, PKSAUTOMATION_TABLE, PKSAUTOMATION_TABLE, KSOBJECT_BAG );
|
|
KSDDKAPI void NTAPI KsPinAcquireProcessingMutex( PKSPIN );
|
|
KSDDKAPI void NTAPI KsPinAttachAndGate( PKSPIN, PKSGATE );
|
|
KSDDKAPI void NTAPI KsPinAttachOrGate( PKSPIN, PKSGATE );
|
|
KSDDKAPI void NTAPI KsPinAttemptProcessing( PKSPIN, BOOLEAN );
|
|
KSDDKAPI PKSGATE NTAPI KsPinGetAndGate( PKSPIN );
|
|
KSDDKAPI NTSTATUS NTAPI KsPinGetAvailableByteCount( PKSPIN, PLONG, PLONG );
|
|
KSDDKAPI PDEVICE_OBJECT NTAPI KsPinGetConnectedPinDeviceObject( PKSPIN );
|
|
KSDDKAPI PFILE_OBJECT NTAPI KsPinGetConnectedPinFileObject( PKSPIN );
|
|
KSDDKAPI NTSTATUS NTAPI KsPinGetConnettedPinFilterInterface( PKSPIN, const GUID *, PVOID * );
|
|
KSDDKAPI NTSTATUS NTAPI KsPinGetConnectedPinInterface( PKSPIN, const GUID *, PVOID * );
|
|
KSDDKAPI void NTAPI KsPinGetCopyRelationships( PKSPIN, PKSPIN *, PKSPIN * );
|
|
KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetFirstCloneStreamPointer( PKSPIN );
|
|
KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetLeadingEdgeStreamPointer( PKSPIN, KSSTREAM_POINTER_STATE );
|
|
KSDDKAPI PKSPIN NTAPI KsPinGetNextSiblingPin( PKSPIN );
|
|
KSDDKAPI PKSFILTER NTAPI KsPinGetParentFilter( PKSPIN );
|
|
KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetTrailingEdgeStreamPointer( PKSPIN, KSSTREAM_POINTER_STATE );
|
|
KSDDKAPI void NTAPI KsPinRegisterFrameReturnCallback( PKSPIN, PFNKSPINFRAMERETURN );
|
|
KSDDKAPI void NTAPI KsPinRegisterHandshakeCallback( PKSPIN, PFNKSPINHANDSHAKE );
|
|
KSDDKAPI void NTAPI KsPinRegisterIrpCompletionCallback( PKSPIN, PFNKSPINIRPCOMPLETION );
|
|
KSDDKAPI void NTAPI KsPinRegisterPowerCallbacks( PKSPIN, PFNKSPINPOWER, PFNKSPINPOWER );
|
|
KSDDKAPI void NTAPI KsPinReleaseProcessingMutex( PKSPIN );
|
|
KSDDKAPI VOID NTAPI KsPinSetPinClockTime( PKSPIN, LONGLONG );
|
|
KSDDKAPI NTSTATUS NTAPI KsPinSubmitFrame( PKSPIN, PVOID, ULONG, PKSSTREAM_HEADER, PVOID );
|
|
KSDDKAPI NTSTATUS NTAPI KsPinSubmitFrameMdl( PKSPIN, PMDL, KSSTREAM_HEADER, PVOID );
|
|
KSDDKAPI BOOLEAN NTAPI KsProcessPinUpdate( PKSPROCESSPIN );
|
|
KSDDKAPI NTSTATUS NTAPI KsRegisterFilterWithNoKSPins( PDEVICE_OBJECT, const GUID *, ULONG, BOOL *, KSPIN_MEDIUM *, GUID * );
|
|
KSDDKAPI void NTAPI KsReleaseControl( PVOID );
|
|
KSDDKAPI void NTAPI KsReleaseDevice( PKSDEVICE );
|
|
KSDDKAPI ULONG NTAPI KsRemoveItemFromObjectBag( KSOBJECT_BAG, PVOID, BOOLEAN );
|
|
KSDDKAPI NTSTATUS NTAPI KsStreamPointerAdvance( PKSSTREAM_POINTER );
|
|
KSDDKAPI NTSTATUS NTAPI KsStreamPointerAdvanceOffsets( PKSSTREAM_POINTER, ULONG, ULONG, BOOLEAN );
|
|
KSDDKAPI void NTAPI KsStreamPointerAdvanceOffsetsAndUnlock( PKSSTREAM_POINTER, ULONG, ULONG, BOOLEAN );
|
|
KSDDKAPI void NTAPI KsStreamPointerCancelTimeout( PKSSTREAM_POINTER );
|
|
KSDDKAPI NTSTATUS NTAPI KsStreamPointerClone( PKSSTREAM_POINTER, PFNKSSTREAMPOINTER, ULONG, PKSSTREAM_POINTER * );
|
|
KSDDKAPI void NTAPI KsStreamPointerDelete( PKSSTREAM_POINTER );
|
|
KSDDKAPI PIRP NTAPI KsStreamPointerGetIrp( PKSSTREAM_POINTER, PBOOLEAN, PBOOLEAN );
|
|
KSDDKAPI PMDL NTAPI KsStreamPointerGetMdl( PKSSTREAM_POINTER );
|
|
KSDDKAPI PKSSTREAM_POINTER NTAPI KsStreamPointerGetNextClone( PKSSTREAM_POINTER );
|
|
KSDDKAPI NTSTATUS NTAPI KsStreamPointerLock( PKSSTREAM_POINTER );
|
|
KSDDKAPI void NTAPI KsStreamPointerScheduleTimeout( PKSSTREAM_POINTER, PFNKSSTREAMPOINTER, ULONGLONG );
|
|
KSDDKAPI NTSTATUS NTAPI KsStreamPointerSetStatusCode( PKSSTREAM_POINTER, NTSTATUS );
|
|
KSDDKAPI void NTAPI KsStreamPointerUnlock( PKSSTREAM_POINTER, BOOLEAN );
|
|
KSDDKAPI void NTAPI KsTerminateDevice( PDEVICE_OBJECT );
|
|
KSDDKAPI NTSTATUS NTAPI _KsEdit( KSOBJECT_BAG, PVOID *, ULONG, ULONG, ULONG );
|
|
#ifdef _UNKNOWN_H_
|
|
KSDDKAPI PUNKNOWN NTAPI KsGetOuterUnknown( PVOID );
|
|
KSDDKAPI NTSTATUS NTAPI KsGetReferenceClockInterface( PKSPIN, PIKSREFERENCECLOCK * );
|
|
KSDDKAPI PUNKNOWN NTAPI KsRegisterAggregatedClientUnknown( PVOID, PUNKNOWN );
|
|
#endif
|
|
#endif
|
|
#endif
|
|
|
|
/* Functions in KSUSER.DLL */
|
|
#ifndef _NTDDK_
|
|
KSDDKAPI DWORD WINAPI KsCreateAllocator( HANDLE, PKSALLOCATOR_FRAMING, PHANDLE );
|
|
KSDDKAPI DWORD WINAPI KsCreateClock( HANDLE, PKSCLOCK_CREATE, PHANDLE );
|
|
KSDDKAPI DWORD WINAPI KsCreatePin( HANDLE, PKSPIN_CONNECT, ACCESS_MASK, PHANDLE );
|
|
KSDDKAPI DWORD WINAPI KsCreateTopologyNode( HANDLE, PKSNODE_CREATE, ACCESS_MASK, PHANDLE );
|
|
#endif
|
|
|
|
/* Functions implemented as macros */
|
|
#define SetDefaultKsCompression( x ) \
|
|
{ \
|
|
(x)->RatioNumerator = 1; \
|
|
(x)->RatioDenominator = 1; \
|
|
(x)->RatioConstantMargin = 0; \
|
|
}
|
|
#define SetDontCareKsFramingRange( x ) \
|
|
{ \
|
|
(x)->MinFrameSize = 0; \
|
|
(x)->MaxFrameSize = 0xFFFFFFFFL; \
|
|
(x)->Stepping = 1; \
|
|
}
|
|
#define SetKsFramingRange( x, p1, p2 ) \
|
|
{ \
|
|
(x)->MinFrameSize = p1; \
|
|
(x)->MaxFrameSize = p2; \
|
|
(x)->Stepping = 1; \
|
|
}
|
|
#define SetKsFramingRangeWeighted( x, p1, p2 ) \
|
|
{ \
|
|
KS_FRAMING_RANGE *unweighted = &(x)->Range; \
|
|
SetKsFramingRange( unweighted, p1, p2 ); \
|
|
(x)->InPlaceWeight = 0; \
|
|
(x)->NotInPlaceWeight = 0; \
|
|
}
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
#define KsDeleteFilterFactory( x ) \
|
|
KsFreeObjectCreateItemsByContext( *(KSDEVICE_HEADER *) \
|
|
(KsFilterFactoryGetParentDevice( x )->FunctionalDeviceObject-> \
|
|
DeviceExtension), x )
|
|
#define KsGetFilterFromFileObject( x ) \
|
|
((PKSFILTER)KsGetObjectFromFileObject( x ))
|
|
#define KsGetPinFromFileObject( x ) \
|
|
((PKSPIN)KsGetObjectFromFileObject( x ))
|
|
#define KsFilterFactoryGetParentDevice( x ) \
|
|
((PKSDEVICE)KsGetParent( (PVOID)(x) ))
|
|
#define KsFilterGetParentFilterFactory( x ) \
|
|
((PKSFILTERFACTORY)KsGetParent( (PVOID)(x) ))
|
|
#define KsDeviceGetFirstChildFilterFactory( x ) \
|
|
((PKSFILTERFACTORY)KsGetFirstChild( (PVOID)(x) ))
|
|
#define KsFilterFactoryGetFirstChildFilter( x ) \
|
|
((PKSFILTER)KsGetFirstChild( (PVOID)(x) ))
|
|
#define KsFilterFactoryGetNextSiblingFilterFactory( x ) \
|
|
((PKSFILTERFACTORY)KsGetNextSibling( (PVOID)(x) ))
|
|
#define KsFilterGetNextSiblingFilter( x ) \
|
|
((PKSFILTER)KsGetNextSibling( (PVOID)(x) ))
|
|
#define KsFilterFactoryGetDevice( x ) \
|
|
KsGetDevice( (PVOID)(x) )
|
|
#define KsFilterGetDevice( x ) \
|
|
KsGetDevice( (PVOID)(x) )
|
|
#define KsPinGetDevice( x ) \
|
|
KsGetDevice( (PVOID)(x) )
|
|
#define KsFilterAcquireControl( x ) \
|
|
KsAcquireControl( (PVOID)(x) )
|
|
#define KsFilterReleaseControl( x ) \
|
|
KsReleaseControl( (PVOID)(x) )
|
|
#define KsPinAcquireControl( x ) \
|
|
KsAcquireControl( (PVOID)(x) )
|
|
#define KsPinReleaseControl( x ) \
|
|
KsReleaseControl( (PVOID)(x) )
|
|
#define KsDiscard( p1, p2 ) \
|
|
KsRemoveItemFromObjectBag( (p1)->Bag, (PVOID)(p2), TRUE )
|
|
#define KsEdit( p1, p2, p3 ) \
|
|
_KsEdit( (p1)->Bag, (PVOID *)(p2), sizeof( **(p2) ), sizeof( **(p2) ), p3 )
|
|
#define KsEditSized( p1, p2, p3, p4, p5 ) \
|
|
_KsEdit( (p1)->Bag, (PVOID *)(p2), p3, p4, p5 )
|
|
#ifdef _UNKNOWN_H_
|
|
#define KsDeviceRegisterAggregatedClientUnknown( p1, p2 ) \
|
|
KsRegisterAggregatedClientUnknown( (PVOID)(p1), p2 )
|
|
#define KsDeviceGetOuterUnknown( x ) \
|
|
KsGetOuterUnknown( (PVOID)(x) )
|
|
#define KsFilterFactoryRegisterAggregatedClientUnknown( p1, p2 ) \
|
|
KsRegisterAggregatedClientUnknown( (PVOID)(p1), p2 )
|
|
#define KsFilterFactoryGetOuterUnknown( x ) \
|
|
KsGetOuterUnknown( (PVOID)(x) )
|
|
#define KsFilterRegisterAggregatedClientUnknown( p1, p2 ) \
|
|
KsRegisterAggregatedClientUnknown( (PVOID)(p1), p2 )
|
|
#define KsFilterGetOuterUnknown( x ) \
|
|
KsGetOuterUnknown( (PVOID)(x) )
|
|
#define KsPinRegisterAggregatedClientUnknown( p1, p2 ) \
|
|
KsRegisterAggregatedClientUnknown( (PVOID)(p1), p2 )
|
|
#define KsPinGetOuterUnknown( x ) \
|
|
KsGetOuterUnknown( (PVOID)(x) )
|
|
#endif
|
|
#endif
|
|
#endif
|
|
|
|
/* Aliases */
|
|
#define KsDispatchFastWriteFailure KsDispatchFastReadFailure
|
|
#ifdef _NTDDK_
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
#define KsFilterAddEvent KsAddEvent
|
|
#define KsFilterGenerateEvents KsGenerateEvents
|
|
#define KsPinAddEvent KsAddEvent
|
|
#define KsPinGenerateEvents KsGenerateEvents
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
} /* extern "C" */
|
|
#endif
|
|
|
|
#endif /* _KS_ */
|