Compartir a través de


Filtrar asignadores específicos

Los filtros que requieren asignadores para la memoria incorporada u otros métodos de almacenamiento dependientes del dispositivo pueden proporcionar un asignador específico admitiendo métodos y propiedades del asignador. Para obtener más información, consulte KSPROPERTY_STREAM_ALLOCATOR.

Un filtro recibe un IRP_MJ_CREATE de tipo KSCREATE_REQUEST_ALLOCATOR especificando las opciones de marco para el asignador. La rutina de creación del asignador del minidriver valida la solicitud de creación mediante una llamada a KsValidateAllocatorCreateRequest. Si la llamada se realiza correctamente, esta rutina devuelve un puntero a la estructura KSALLOCATOR_FRAMING pertinente.

Si el filtro no puede satisfacer los requisitos de trama, devuelve un código de error en respuesta al IRP. De lo contrario, el filtro adjunta un puntero a una estructura al miembro FsContext del objeto de archivo y a los servicios de las solicitudes de asignador resultantes.

Si el filtro debe modificar los búferes pasados a la interfaz de streaming en contexto, el cliente en modo de usuario establece la marca KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER en la estructura KSALLOCATOR_FRAMING pertinente.

Hay dos interfaces disponibles para el asignador. En primer lugar, todos los asignadores deben admitir el KSMETHODSETID_StreamAllocator basado en IRP. Los asignadores que usan este mecanismo se limitan a un número máximo de fotogramas asignados. Las solicitudes para asignar fotogramas más allá de este límite se marcarán como pendientes.

En segundo lugar, el minidriver puede admitir el acceso a la tabla de funciones si el tipo de grupo de asignación se puede atender en DISPATCH_LEVEL. Proporcionar acceso a la tabla de funciones es opcional. Para ello, admita las propiedades de KSPROPSETID_StreamAllocator.

La interfaz DISPATCH_LEVEL funciona de la siguiente manera:

Cuando se envía una solicitud de asignación al asignador, el asignador devuelve un puntero a un marco si hay uno disponible. Si no es así, devuelve inmediatamente NULL.

Cuando se envía una solicitud gratuita al asignador, el asignador indica al asignador de secuencia el evento "fotograma libre" que notifica al cliente que hay disponible un fotograma libre. Además, si hay IRP de solicitud de asignación a la espera de completarse, el asignador debe programar un elemento de trabajo (si el IRQL actual no está PASSIVE_LEVEL) y completar la solicitud con el marco libre.

Es posible que tanto la interfaz DISPATCH_LEVEL como la interfaz basada en IRP compita por fotogramas libres. KS sincroniza esta cola mediante el bloqueo de número de cancelación.