Método IMiniportWaveRTOutputStream::GetPacketCount (portcls.h)
GetPacketCount devuelve el recuento (basado en 1) de paquetes transferidos completamente desde el búfer de WaveRT al hardware.
Sintaxis
NTSTATUS GetPacketCount(
[out] ULONG *pPacketCount
);
Parámetros
[out] pPacketCount
pPacketCount devuelve el número de paquetes transferidos completamente desde el búfer de WaveRT al hardware.
Valor devuelto
GetPacketCount
devuelve STATUS_SUCCESS si la llamada se realizó correctamente. De lo contrario, la función devuelve un código de estado de error adecuado.
Comentarios
Desde el recuento de paquetes, el sistema operativo puede derivar la posición de flujo de los paquetes que escribe en el búfer de WaveRT. El sistema operativo también puede derivar la posición del búfer de WaveRT del siguiente paquete para escribir en el búfer de WaveRT. En el caso de los controladores waveRT, el controlador señala un único evento de notificación a medida que transfiere datos de cada paquete del búfer de WaveRT. Por lo tanto, el evento por sí solo no puede indicar qué paquete dentro del búfer de WaveRT se está transfiriendo. En el funcionamiento normal, esto no es un problema, pero en la corrección de casos de subflujo se consigue más fácilmente consultando el recuento de paquetes desde el que el sistema operativo puede determinar qué paquete escribir a continuación.
El PacketCount devuelto indica el recuento (basado en 1) de paquetes transferidos completamente desde el búfer de WaveRT al hardware. A partir de esto, el sistema operativo puede determinar el número basado en 0 del paquete que se está transfiriendo actualmente y asegurarse de que escribe delante de ese paquete. Por ejemplo, si el número de paquetes es 5, 5 paquetes se han transferido por completo. Es decir, los paquetes 0-4 se han transferido completamente. Por lo tanto, el paquete 5 está en curso y el sistema operativo debe escribir el paquete 6. Si el recuento de notificaciones del búfer de WaveRT es 2, el paquete 6 estaría en el desplazamiento 0 dentro del búfer de WaveRT (porque el módulo 2 es 0 y 0 veces el tamaño del paquete es 0).
El sistema operativo puede obtener esta propiedad en cualquier momento. Sin embargo, normalmente obtiene esta propiedad solo periódicamente o después de que el controlador devuelva un error de flujo de datos (STATUS_DATA_LATE_ERROR, STATUS_DATA_OVERRUN) de SetWritePacket() para volver a sincronizar con el controlador.
El controlador debe restablecer el número de paquetes a 0 cuando la secuencia está en KSSTATE_STOP.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Disponible en Windows 10 y versiones posteriores. |
Plataforma de destino | Windows |
Encabezado | portcls.h |
IRQL | Nivel pasivo |