Структура KSPIN (ks.h)
Структура KSPIN описывает экземпляр пин-кода.
Синтаксис
typedef 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;
} KSPIN, *PKSPIN;
Члены
Descriptor
Указатель на дескриптор пин-кода для этого конкретного пин-кода. Дополнительные сведения см. в KSPIN_DESCRIPTOR_EX.
Bag
Этот элемент задает KSOBJECT_BAG (структура KSOBJECT_BAG эквивалентна типу PVOID) для этого конкретного экземпляра пин-кода. пакеты объектов — это структуры, используемые для связывания динамической памяти с определенным объектом AVStream. Все, что находится в контейнере объектов пин-кода, автоматически очищается при закрытии пин-кода.
Context
Указатель на буфер. Клиенты могут использовать context для связывания сведений о контексте с определенным экземпляром пин-кода. Как правило, это используется для расширений пин-кода или потока и выделяется в диспетчере создания, предоставленном в таблице отправки пин-кода. Обратите внимание, что любая динамическая память, выделенная для сведений о контексте, должна размещаться в контейнере объектов пин-экземпляра с помощью KsAddItemToObjectBag. контекст контекста инициализируется значением элемента контекста родительского KSFILTER во время создания пин-кода. См. иерархии объектов AVStream.
Id
Этот элемент задает идентификатор типа пин-кода. Это индекс в массив дескрипторов пин-кода, предоставленных для заданного типа фильтра.
Communication
Этот элемент задает KSPIN_COMMUNICATION_NONE, KSPIN_COMMUNICATION_SINK, KSPIN_COMMUNICATION_SOURCE, KSPIN_COMMUNICATION_BOTH или KSPIN_COMMUNICATION_BRIDGE. Сведения о значении каждого значения см. в KSPROPERTY_PIN_COMMUNICATION.
ConnectionIsExternal
Этот элемент задает логическое значение, которое, если TRUE, указывает, что подключенный пин-код не поддерживает подтверждение подключения AVStream. Если false, указывает, что подключенный пин-код поддерживает подтверждение подключения AVStream. Это указывает, является ли соединение между этим пин-кодом и закреплением, к которому он подключен, является соединением между двумя пин-кодами AVStream.
ConnectionInterface
Этот элемент содержит структуру KSPIN_INTERFACE, которая идентифицирует интерфейс, используемый для подключения. Эти сведения предоставляются построителем графов при создании пин-кода.
ConnectionMedium
Этот элемент содержит KSPIN_MEDIUM структуру, которая определяет среду подключения, которую следует использовать. Эти сведения предоставляются построителем графов при создании пин-кода.
ConnectionPriority
Этот элемент содержит структуру KSPRIORITY, указывающую приоритет подключения. Эти сведения предоставляются построителем графов при создании пин-кода.
ConnectionFormat
Указатель на структуру KSDATAFORMAT, указывающую формат данных подключения. Эти сведения изначально предоставляются построителем графов при создании пин-кода и могут быть изменены через доступ к свойствам или с помощью сообщений об изменении формата, вставленных в поток. Доступ к этому элементу синхронизируется с помощью мьютекса элемента управления фильтра. Этот элемент не должен быть изменен клиентом.
AttributeList
Указатель на структуру KSMULTIPLE_ITEM, указывающую список атрибутов, предоставленных во время создания пин-кода, для описания соединения. Указывает направление потока данных для этого пин-кода (KSPIN_DATAFLOW_IN или KSPIN_DATAFLOW_OUT). Эта информация является статическим атрибутом пин-кода и отображается в дескрипторе пин-кода. Он кэшируется здесь для доступа в IRQL выше PASSIVE_LEVEL.
StreamHeaderSize
Этот элемент указывает размер в байтах каждой KSSTREAM_HEADER структуры для этого пин-кода. Обычно используется для выходных закреплений, клиент может задать это значение, превышающее размер (KSSTREAM_HEADER) и иметь расширенные заголовки потоков (каждый заголовок потока будет StreamHeaderSize байт). Если клиент не задает этот элемент, это означает, что расширенная информация не соответствует заголовкам потоков. В такой ситуации каждый заголовок потока точно размер (KSSTREAM_HEADER). Клиенты могут задать это в диспетчере создания пин-кода.
DataFlow
Этот элемент задает направление потока данных для пин-кода. Возможные параметры KSPIN_DATAFLOW_IN и KSPIN_DATAFLOW_OUT. Эта информация является статическим атрибутом пин-кода и отображается в соответствующей KSPIN_DESCRIPTOR структуре. Он кэшируется здесь для доступа в IRQL выше PASSIVE_LEVEL.
DeviceState
Этот элемент содержит перечисление типа KSSTATE, определяющее состояние, в которое был сказано переходить пин-код. Не обязательно совпадает с состоянием канала, которое передается через AVStrStrMiniPinSetDeviceState. Первоначально KSSTATE_STOP этот элемент изменяется, когда AVStream получает набор свойств состояния подключения IOCTL. Доступ синхронизирован с помощью управления мьютексом фильтра. Мини-drivers не должны изменять этот элемент. См. примечание в разделе "Примечания" ниже. См. также элемент ClientState.
ResetState
Этот элемент содержит перечисление типа KSRESET, определяющего текущее состояние сброса пин-кода. Возможные параметры KSRESET_BEGIN и KSRESET_END. Этот элемент изначально имеет значение KSRESET_END и изменяется через доступ к свойствам. Доступ к этому элементу синхронизируется элементом управления мьютексом фильтра. Клиент не должен изменять этот элемент.
ClientState
Этот элемент задает KSSTATE, в которой в данный момент установлен пин-код. Обновляется непосредственно перед вызовом AVStrStrMiniPinSetDeviceStat e. Если эта подпрограмма обратного вызова завершается ошибкой, AVStream откатывает ClientState до предыдущего значения. Мини-drivers, которые завершаются переходами состояния сбоя и которые проверяют этот элемент во время обработки, должны учитывать эту последовательность событий.
Замечания
Во многих отношениях закрепление — это фокус поведения фильтра. Это отражается в том, что структура закреплений имеет большое количество элементов. Многие мини-накопители должны уточнить поведение пин-кода и поддерживать дополнительный контекст, связанный с пин-кодом. Для фильтров с довольно обычным поведением закреплений не требуется дополнительное уточнение или контекст. Во многих случаях поведение закреплений по умолчанию достаточно; Доступ к контактам выполняется с помощью Filter-Centric обработки.
В целях синхронизации время существования этого объекта — это интервал, начинающийся с вызова функции диспетчера preCreate мини-driver и заканчивающийся, когда функция закрытия мини-driver возвращается, если функция не возвращает STATUS_PENDING. Если он возвращает STATUS_PENDING, время существования объекта заканчивается, когда клиент указывает завершение закрытия запроса путем вызова KsCompletePendingRequest.
Если мини-driver должен определить, было ли сказано перейти к определенной KSSTATE, сравнивая значение DeviceState члена KSPIN с этим состоянием не является надежным методом. Вместо этого просмотрите элемент clientState или создайте переменную в обратном вызове SetDeviceState SetDeviceState, а затем проверьте эту переменную. SetDeviceState является членом KSPIN_DISPATCH.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Доступно в Операционных системах Microsoft Windows XP и более поздних версиях, а также в Microsoft DirectX 8.0 и более поздних версиях. |
заголовка | ks.h (include Ks.h) |