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


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

См. также

KSPIN_DESCRIPTOR

KSPIN_DESCRIPTOR_EX

KSPIN_DISPATCH

KsAddItemToObjectBag

KsCompletePendingRequest