Patillas KS

El minidriver proporciona una estructura de KSPIN_DESCRIPTOR para cada tipo de patilla que se va a crear una instancia. Una estructura de descriptor de anclaje se conoce como generador de patillas. Cada generador de patillas puede crear una instancia de una o varias instancias de patillas de un tipo determinado. Un generador de patillas contiene varias matrices que describen el tipo de patilla que este descriptor crea instancias.

El minidriver especifica una o varias categorías KS a las que pertenecen los pines creados por este descriptor en el miembro Categories de KSPIN_DESCRIPTOR. KS usa categorías para conectar instancias de anclaje cuando crea un grafo de filtro. La propiedad KSPROPERTY_TOPOLOGY_CATEGORIES consulta la matriz de categorías funcionales que admite un controlador.

Un minidriver proporciona un archivo INF que registra uno o varios nombres de dispositivo de anclaje. En la instalación, el sistema operativo carga los nombres y las categorías correspondientes en el registro del sistema. A continuación, los clientes pueden realizar llamadas de creación de archivos con estos nombres de dispositivo para crear instancias de pins.

Los clientes en modo de usuario llaman a la función CreateFile de Win32 con el nombre del dispositivo. Por ejemplo, "\\.\filters\audio\default renderer" podría ser un vínculo al dispositivo de audio configurado para la salida predeterminada. Los clientes en modo kernel llaman a ZwCreateFile desde el modo kernel. Una vez que la rutina create-file devuelve un identificador de archivo, los clientes de KS se comunican con instancias de anclaje a través de las propiedades de KS.

En las estructuras del descriptor de anclaje, el minidriver diseña matrices de estructuras de KSPIN_INTERFACE y estructuras KSPIN_MEDIUM que especifican las interfaces y los medios admitidos por ese generador de patillas. KSPIN_DESCRIPTOR también es donde el minidriver especifica los intervalos de datos válidos para las patillas creadas por ese generador. Para ello, proporciona un puntero a una matriz de estructuras KSDATARANGE . El minidriver también especifica las direcciones de los datos y el flujo de comunicación para los nuevos pines creados por este generador de patillas.

Un minidriver permite la detección en tiempo de ejecución de fábricas de patillas al admitir el conjunto de propiedades de KSPROPSETID_Pin .

Para crear una conexión de anclaje, llame a la rutina KsCreatePin . En esta llamada, el minidriver pasa un puntero a una estructura de tipo KSPIN_CONNECT que describe la conexión solicitada. Cuando se crea un pin, el filtro ve el nuevo pin como un objeto de archivo subordinado al objeto de archivo para ese filtro.

El minidriver llama a KsValidateConnectRequest con las estructuras descriptores proporcionadas en el IRP_MJ_CREATE resultante. Esta rutina valida estas estructuras y devuelve un puntero a la estructura de conexión y al objeto de archivo raíz.

Los minidrivers usan los miembros de flujo de datos y comunicación de las estructuras de KSPIN_DESCRIPTOR para definir los siguientes detalles de patillas:

  • Patilla de origen irP frente a anclaje receptor IRP

    Un pin de origen irP emite IRP ; un pin receptor IRP los recibe. Un cliente en modo de usuario envía solicitudes de E/S directamente a un anclaje receptor IRP a través del identificador de archivo correspondiente. Los clientes usan KSPROPERTY_PIN_COMMUNICATION para comprobar si los datos fluyen dentro o fuera de un tipo de patilla.

  • Pin del origen de datos frente al anclaje del receptor de datos

    Un pin de origen de datos es un pin de salida en un filtro; un pin receptor de datos es un pin de entrada. La propiedad de ser un origen de datos o receptor es independiente de ser un origen o receptor irP. Por ejemplo, el cliente puede conectar un origen de datos, un anclaje receptor IRP a un receptor de datos, un pin de origen irP. Los clientes usan KSPROPERTY_PIN_DATAFLOW para comprobar si los datos fluyen dentro o fuera de un tipo de patilla.

Al finalizar una conexión, el identificador del pin de origen debe cerrarse antes de que se destruya el objeto de archivo subyacente. Si el pin de origen se basa en los recursos proporcionados por el pin receptor, es responsabilidad del pin receptor notificar al origen cuando finaliza la conexión.

Un cliente interactúa con un pin de streaming del kernel llamando a la rutina DeviceIoControl (descrita en la documentación de Microsoft Windows SDK) con IRP_MJ_DEVICE_CONTROL. El autor de la llamada identifica su solicitud por el código de control de E/S que coloca en Parameters.DeviceIoControl.IoControlCode en la estructura de ubicación de la pila de E/S.

Para admitir solicitudes, el minidriver proporciona un puntero a una estructura de KSDISPATCH_TABLE en una llamada a KsAllocateObjectHeader.

Las solicitudes de escritura contienen un puntero a una matriz de estructuras de KSSTREAM_HEADER que, a su vez, contienen punteros para transmitir datos. Las solicitudes de lectura contienen un puntero a una matriz de estructuras de encabezado vacías donde se deben devolver los datos de lectura.