KSSTREAM_POINTER结构体
struct _KSPSTREAM_POINTER {
LIST_ENTRY ListEntry;//挂入CKsQueue::m_StreamPointers
LIST_ENTRY TimeoutListEntry;
LONGLONG TimeoutTime;
PFNKSSTREAMPOINTER CancelCallback;
PFNKSSTREAMPOINTER TimeoutCallback;
KSPSTREAM_POINTER_STATE State;
KSPSTREAM_POINTER_TYPE Type;
ULONG Stride;
PIKSQUEUE Queue;
PKSPFRAME_HEADER FrameHeader;
PKSPFRAME_HEADER FrameHeaderStarted;
KSSTREAM_POINTER Public;
};
State
typedef enum { KSPSTREAM_POINTER_STATE_UNLOCKED, KSPSTREAM_POINTER_STATE_LOCKED, KSPSTREAM_POINTER_STATE_CANCELLED, KSPSTREAM_POINTER_STATE_DELETED, KSPSTREAM_POINTER_STATE_CANCEL_PENDING, KSPSTREAM_POINTER_STATE_DEAD, KSPSTREAM_POINTER_STATE_TIMED_OUT, KSPSTREAM_POINTER_STATE_TIMER_RESCHEDULE } KSPSTREAM_POINTER_STATE;
FrameHeader/FrameHeaderStarted
```
typedef struct KSPIRPFRAMING
{
ULONG OutputBufferLength;
LONG RefCount; //引用计数
LONG QueuedFrameHeaderCount;
PKSPFRAME_HEADER FrameHeaders;
} KSPIRP_FRAMING, *PKSPIRP_FRAMING;
struct _KSPFRAME_HEADER
{
LIST_ENTRY ListEntry;
PKSPFRAME_HEADER NextFrameHeaderInIrp;
PVOID Queue;
PIRP OriginalIrp;
PMDL Mdl;
PIRP Irp;
PKSPIRP_FRAMING IrpFraming;
PKSSTREAM_HEADER StreamHeader;
PVOID FrameBuffer;
PKSPMAPPINGS_TABLE MappingsTable;
ULONG StreamHeaderSize;
ULONG FrameBufferSize;
PVOID Context;
LONG RefCount;
PVOID OriginalData;
NTSTATUS Status;
BOOLEAN DismissalCall;
KSPFRAME_HEADER_TYPE Type;
PKSPSTREAM_POINTER FrameHolder;
//PKSPFRAME_HEADER ParentFrameHeader;
//PKSSPLITPIN SplitPins;
//ULONG ChildrenOut;
};
- Public
struct _KSSTREAM_POINTER
{
PVOID Context;
PKSPIN Pin;
PKSSTREAM_HEADER StreamHeader;
PKSSTREAM_POINTER_OFFSET Offset;
KSSTREAM_POINTER_OFFSET OffsetIn;
KSSTREAM_POINTER_OFFSET OffsetOut;
};
```