Поделиться через


Структура 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

Указатель на буфер. Клиенты могут использовать контекст для связывания сведений о контексте с определенным экземпляром закрепления. Как правило, он используется для расширений пин-кода или потока и выделяется в диспетчере создания, предоставленном в таблице диспетчеризации контактов. Обратите внимание, что любая динамическая память, выделенная для контекстных сведений, должна помещаться в контейнер объектов экземпляра закреплений с помощью KsAddItemToObjectBag. Контекст инициализируется значением элемента Context родительского 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 структуры для этого контакта в байтах. Обычно для выходных контактов клиент может задать любое значение, превышающее sizeof (KSSTREAM_HEADER), и выделить расширенные заголовки потока (каждый заголовок потока будет иметь длину байтов StreamHeaderSize ). Если клиент не задает этот элемент, это означает, что никакие расширенные сведения не передаются за заголовками потока. В такой ситуации каждый заголовок потока имеет точное значение sizeof (KSSTREAM_HEADER). Клиенты могут задать его в диспетчере создания контактов.

DataFlow

Этот элемент задает направление потока данных для закрепления. Возможные параметры : KSPIN_DATAFLOW_IN и KSPIN_DATAFLOW_OUT. Эти сведения являются статическим атрибутом закрепления и отображаются в соответствующей KSPIN_DESCRIPTOR структуре. Он кэшируется здесь для доступа в IRQL выше PASSIVE_LEVEL.

DeviceState

Этот член содержит перечисление типа KSSTATE , которое определяет состояние, в которое было указано, что закрепление должно перейти. Не обязательно совпадает с состоянием канала, которое передается через AVStrMiniPinSetDeviceState. Изначально KSSTATE_STOP этот член изменяется, когда AVStream получает набор свойств состояния подключения IOCTL. Доступ синхронизируется с помощью мьютекса элемента управления фильтрами. Мини-накопители не должны изменять этот элемент. См. примечание в разделе "Примечания" ниже. См. также элемент ClientState .

ResetState

Этот элемент содержит перечисление типа KSRESET, определяющее текущее состояние сброса закрепления. Возможные параметры: KSRESET_BEGIN и KSRESET_END. Изначально этот элемент имеет значение KSRESET_END и изменяется с помощью доступа к свойству. Доступ к этому члену синхронизируется с помощью мьютекса элемента управления фильтрами. Клиент не должен изменять этот элемент.

ClientState

Этот элемент указывает KSSTATE , в котором в данный момент устанавливается закрепление. Обновляется непосредственно перед вызовом AVStrMiniPinSetDeviceState . Если эта подпрограмма обратного вызова завершается сбоем, AVStream выполняет откат ClientState до предыдущего значения. Мини-накопители, которые завершаются сбоем при переходе состояния и проверка этот элемент во время обработки, должны учитывать эту последовательность событий.

Комментарии

Во многих отношениях закрепление является основной частью поведения фильтра. Это выражается в том, что в структуре булавки имеется большое количество элементов. Многие мини-накопители должны совершенствовать поведение закрепления и поддерживать дополнительный контекст, связанный с закреплением. Для фильтров с довольно обычным поведением закрепления не требуется дополнительное уточнение или контекст. Во многих случаях достаточно поведения закрепления по умолчанию; доступ к контактам выполняется с помощью обработки, ориентированной на фильтр.

В целях синхронизации время существования этого объекта — это интервал, начинающийся при вызове функции диспетчера PreCreate мини-накопителя и заканчивающийся при возврате функции отправки Close мини-driver, при условии, что функция не возвращает STATUS_PENDING. Если он возвращает STATUS_PENDING, время существования объекта заканчивается, когда клиент указывает на завершение запроса закрытия путем вызова KsCompletePendingRequest.

Если мини-накопителю необходимо определить, было ли указано перейти к определенному KSSTATE, сравнение значения элемента DeviceState KSPIN с этим состоянием не является надежным методом. Вместо этого просмотрите элемент ClientState или создайте переменную в обратном вызове SetDeviceState, а затем проверка эту переменную. SetDeviceState является членом KSPIN_DISPATCH.

См. также раздел Контейнеры объектов.

Требования

Требование Значение
Минимальная версия клиента Доступно в операционных системах Microsoft Windows XP и более поздних версий, а также в Microsoft DirectX 8.0 и более поздних версиях.
Верхняя часть ks.h (включая Ks.h)

См. также раздел

KSPIN_DESCRIPTOR

KSPIN_DESCRIPTOR_EX

KSPIN_DISPATCH

KsAddItemToObjectBag

KsCompletePendingRequest