Estructura KSPIN (ks.h)
La estructura KSPIN describe una patilla con instancias.
Sintaxis
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;
Miembros
Descriptor
Puntero al descriptor de patilla para este pin determinado. Consulte KSPIN_DESCRIPTOR_EX para obtener más información.
Bag
Este miembro especifica el KSOBJECT_BAG (la estructura KSOBJECT_BAG es equivalente al tipo PVOID) para esta instancia de pin determinada. Las bolsas de objetos son estructuras que se usan para asociar la memoria dinámica a un objeto AVStream específico. Todo lo que se encuentra en el contenedor de objetos pin se limpia automáticamente cuando se cierra el pin.
Context
Puntero a un búfer. Los clientes pueden usar Context para asociar información de contexto a una instancia de pin específica. Normalmente, se usa para las extensiones de pin/stream y se asigna en el envío de creación proporcionado en la tabla de distribución de patillas. Tenga en cuenta que cualquier memoria dinámica asignada para la información de contexto debe colocarse en el contenedor de objetos de la instancia de anclaje mediante KsAddItemToObjectBag. El contexto se inicializa con el valor del miembro Context del KSFILTER primario en el momento en que se crea el pin. Consulte Jerarquía de objetos AVStream.
Id
Este miembro especifica el identificador de tipo de patilla. Este es el índice en la matriz de descriptores de anclaje proporcionados para el tipo de filtro especificado.
Communication
Este miembro especifica KSPIN_COMMUNICATION_NONE, KSPIN_COMMUNICATION_SINK, KSPIN_COMMUNICATION_SOURCE, KSPIN_COMMUNICATION_BOTH o KSPIN_COMMUNICATION_BRIDGE. Vea KSPROPERTY_PIN_COMMUNICATION para obtener el significado de cada valor.
ConnectionIsExternal
Este miembro especifica un valor booleano que, si es TRUE, indica que el pin conectado no admite el protocolo de enlace de conexión avStream. Si es FALSE, indica que el pin conectado admite el protocolo de enlace de conexión AVStream. Se trata de una indicación de si la conexión entre este pin y el pin al que está conectado es una conexión entre dos patillas AVStream.
ConnectionInterface
Este miembro contiene una estructura KSPIN_INTERFACE que identifica la interfaz que se usa para la conexión. El generador de grafos proporciona esta información cuando se crea la patilla.
ConnectionMedium
Este miembro contiene una estructura de KSPIN_MEDIUM que identifica el medio de conexión que debe usar este pin. El generador de grafos proporciona esta información cuando se crea la patilla.
ConnectionPriority
Este miembro contiene una estructura KSPRIORITY que especifica la prioridad de la conexión. El generador de grafos proporciona esta información cuando se crea la patilla.
ConnectionFormat
Puntero a una estructura KSDATAFORMAT que especifica el formato de datos de la conexión. Inicialmente, el generador de grafos proporciona esta información cuando se crea el pin y se puede cambiar a través del acceso a las propiedades o mediante el formato de los mensajes de cambio insertados en la secuencia. El acceso a este miembro se sincroniza mediante la exclusión mutua del control de filtro. El cliente no debe cambiar este miembro.
AttributeList
Puntero a una estructura KSMULTIPLE_ITEM que especifica la lista de atributos, proporcionada durante la creación de patillas, para describir la conexión. Especifica la dirección del flujo de datos para este pin (KSPIN_DATAFLOW_IN o KSPIN_DATAFLOW_OUT). Esta información es un atributo estático del pin y aparece en el descriptor de patillas. Aquí se almacena en caché para el acceso en IRQL anterior PASSIVE_LEVEL.
StreamHeaderSize
Este miembro indica el tamaño en bytes de cada estructura de KSSTREAM_HEADER para este pin. Normalmente se usa para las patillas de salida, un cliente puede establecerlo en cualquier valor mayor que sizeof (KSSTREAM_HEADER) y tener asignados encabezados de secuencia extendidos (cada encabezado de secuencia será StreamHeaderSize bytes long). Si un cliente no establece este miembro, esto indica que ninguna información extendida sigue los encabezados de secuencia. En tal situación, cada encabezado de secuencia es precisamente sizeof (KSSTREAM_HEADER) . Los clientes pueden establecer esto en el envío de creación de patillas.
DataFlow
Este miembro especifica la dirección del flujo de datos para el pin. Los valores posibles son KSPIN_DATAFLOW_IN y KSPIN_DATAFLOW_OUT. Esta información es un atributo estático del pin y aparece en la estructura KSPIN_DESCRIPTOR pertinente. Aquí se almacena en caché para el acceso en IRQL anterior PASSIVE_LEVEL.
DeviceState
Este miembro contiene una enumeración de tipo KSSTATE que identifica el estado al que se le ha dicho que la patilla realice la transición. No necesariamente igual que el estado de la canalización, que se notifica a través de AVStrMiniPinSetDeviceState. Inicialmente KSSTATE_STOP, este miembro se cambia cuando AVStream recibe una propiedad de estado de conexión establecida en IOCTL. El acceso se sincroniza mediante la exclusión mutua del control de filtro. Los minidrivers no deben cambiar este miembro. Vea la nota en la sección Comentarios a continuación. Consulte también el miembro ClientState .
ResetState
Este miembro contiene una enumeración de tipo KSRESET que identifica el estado de restablecimiento actual del pin. Los valores posibles son KSRESET_BEGIN y KSRESET_END. Este miembro se establece inicialmente en KSRESET_END y se cambia a través del acceso a propiedades. El acceso a este miembro se sincroniza mediante la exclusión mutua del control de filtro. El cliente no debe cambiar este miembro.
ClientState
Este miembro especifica el KSSTATE en el que está establecido actualmente el pin. Se actualiza inmediatamente antes de llamar a AVStrMiniPinSetDeviceState . Si se produce un error en esta rutina de devolución de llamada, AVStream revierte ClientState a su valor anterior. Los minicontroladores que producen un error en las transiciones de estado y que comprueban este miembro durante el procesamiento deben ser conscientes de esta secuencia de eventos.
Comentarios
De muchas maneras, las patillas son el foco del comportamiento del filtro. Esto se refleja en el hecho de que la estructura de patillas tiene un gran número de miembros. Muchos minidrivers necesitan refinar el comportamiento de las patillas y mantener el contexto asociado al pin adicional. En el caso de los filtros con un comportamiento de patilla bastante convencional, no se requiere ningún refinamiento ni contexto adicionales. En muchos casos, el comportamiento de patilla predeterminado es suficiente; Se tiene acceso a los pines mediante el procesamiento centrado en filtros.
Con fines de sincronización, la duración de este objeto es el intervalo que comienza cuando se llama a la función PreCreate dispatch del minidriver y finaliza cuando se devuelve la función Close dispatch del minidriver, suponiendo que la función no devuelve STATUS_PENDING. Si devuelve STATUS_PENDING, la duración del objeto finaliza cuando el cliente indica la finalización de la solicitud de cierre llamando a KsCompletePendingRequest.
Si el minidriver necesita determinar si se le ha dicho que vaya a un KSSTATE específico, comparando el valor del miembro DeviceState de KSPIN con ese estado no es un método confiable. En su lugar, examine el miembro ClientState o cree una variable en la devolución de llamada SetDeviceState y, a continuación, compruebe esta variable. SetDeviceState es miembro de KSPIN_DISPATCH.
Consulte también Bolsas de objetos.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Disponible en Microsoft Windows XP y en sistemas operativos posteriores y en Microsoft DirectX 8.0 y versiones posteriores. |
Encabezado | ks.h (incluye Ks.h) |