Método IMiniportWaveRTOutputStream::SetWritePacket (portcls.h)

SetWritePacket informa al controlador de que el sistema operativo ha escrito datos válidos en el búfer de WaveRT.

Sintaxis

NTSTATUS SetWritePacket(
  [in] ULONG PacketNumber,
  [in] DWORD Flags,
  [in] ULONG EosPacketLength
);

Parámetros

[in] PacketNumber

Número del paquete escrito por el sistema operativo en el búfer de WaveRT.

[in] Flags

Atributos adicionales relacionados con el paquete o flujo.

KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM: esta marca indica que este paquete representa el final del flujo de datos.

[in] EosPacketLength

Longitud del paquete EOS si KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM se especifica en Flags. Cero es un valor válido. Si no se especifica KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM en Flags, este parámetro se omite.

Valor devuelto

SetWritePacket devuelve STATUS_SUCCESS si la llamada se realizó correctamente. De lo contrario, la función devuelve un código de estado de error adecuado.

STATUS_DATA_LATE_ERROR: el controlador devuelve este error si el sistema operativo pasa un número de paquete que ya se ha transferido o está transfiriendo actualmente. En este caso, se ha producido una condición de error. Opcionalmente, el controlador puede usar algunos de los datos del paquete o seguir reproduciendo los datos escritos anteriormente en este número de paquete.

STATUS_DATA_OVERRUN: el controlador devuelve este error si el sistema operativo pasa un número de paquete superior al que se puede almacenar en el búfer waveRT. En este caso, se ha producido una condición de error. El controlador puede omitir opcionalmente los datos del paquete.

STATUS_INVALID_DEVICE_STATE: el controlador devuelve este error si el sistema operativo llama a esta rutina después de establecer previamente la marca KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM.

STATUS_INVALID_PARAMETER: el controlador devuelve este error si encuentra algún otro parámetro no válido, aparte de los casos específicos para otro estado de error. Esto incluye los valores flag que no se han definido específicamente anteriormente.

Comentarios

Después de que el sistema operativo llame a esta rutina, el controlador puede usar opcionalmente la información proporcionada para optimizar la transferencia de hardware. Por ejemplo, el controlador podría optimizar las transferencias DMA o programar hardware para detener la transferencia al final del paquete especificado en caso de que el sistema operativo no llame a esta rutina de nuevo para informar al controlador de otro paquete. Esto puede mitigar los efectos audibles del subdesbordamiento, por ejemplo, introducir una brecha audible en lugar de repetir un búfer circular. Sin embargo, el conductor todavía está obligado a aumentar su contador de paquetes interno y los eventos de notificación de señal a una velocidad nominal en tiempo real.

Excepto cuando el sistema operativo especifica la marca KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM, el tamaño del paquete es el tamaño del búfer de WaveRT dividido por notificationCount pasado a IMiniportWaveRTStreamNotification::AllocateBufferWithNotification.

Dependiendo de las funcionalidades de hardware, si se especifica la marca KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM, el controlador puede silenciar una parte del búfer waveRT que sigue al paquete EOS en caso de que el hardware transfiera datos más allá de la posición EOS.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible en Windows 10 y versiones posteriores.
Plataforma de destino Windows
Encabezado portcls.h
IRQL Nivel pasivo

Consulte también

IMiniportWaveRTOutputStream