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

SetWritePacket informa ao driver que o sistema operacional gravou dados válidos no buffer WaveRT.

Sintaxe

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

Parâmetros

[in] PacketNumber

O número do pacote gravado pelo sistema operacional no buffer WaveRT.

[in] Flags

Atributos adicionais relacionados ao pacote ou fluxo.

KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM - Esse sinalizador indica que esse pacote representa o final do fluxo de dados.

[in] EosPacketLength

O comprimento do pacote EOS se KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM for especificado em Sinalizadores. Zero é um valor válido. Se KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM não for especificado em Sinalizadores, esse parâmetro será ignorado.

Retornar valor

SetWritePacket retornará STATUS_SUCCESS se a chamada tiver sido bem-sucedida. Caso contrário, a função retornará um erro apropriado status código.

STATUS_DATA_LATE_ERROR – o driver retornará esse erro se o sistema operacional passar um número de pacote que já foi transferido ou está sendo transferido no momento. Nesse caso, ocorreu uma condição de falha. Opcionalmente, o driver pode usar alguns dos dados do pacote ou continuar reproduzindo os dados gravados anteriormente nesse número de pacote.

STATUS_DATA_OVERRUN – o driver retornará esse erro se o sistema operacional passar um número de pacote maior do que pode ser armazenado no buffer WaveRT. Nesse caso, ocorreu uma condição de falha. Opcionalmente, o driver pode ignorar os dados no pacote.

STATUS_INVALID_DEVICE_STATE – o driver retornará esse erro se o sistema operacional chamar essa rotina após uma configuração anterior do sinalizador KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM.

STATUS_INVALID_PARAMETER – o driver retornará esse erro se encontrar qualquer outro parâmetro inválido, além dos casos específicos para outros status de erro. Isso inclui quaisquer valores de sinalizador não definidos especificamente acima.

Comentários

Depois que o sistema operacional chama essa rotina, o driver pode, opcionalmente, usar as informações fornecidas para otimizar a transferência de hardware. Por exemplo, o driver pode otimizar transferências de DMA ou o hardware do programa para interromper a transferência no final do pacote especificado caso o sistema operacional não chame essa rotina novamente para informar o driver de outro pacote. Isso pode atenuar os efeitos audíveis do fluxo inferior, por exemplo, introduzindo uma lacuna audível em vez de repetir um buffer circular. No entanto, o driver ainda é obrigado a aumentar seu contador de pacotes interno e sinalizar eventos de notificação a uma taxa nominal em tempo real.

Exceto quando o sistema operacional especifica o sinalizador KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM, o tamanho do pacote é o tamanho do buffer WaveRT dividido pela NotificationCount passada para IMiniportWaveRTStreamNotification::AllocateBufferWithNotification.

Dependendo dos recursos de hardware, se o sinalizador KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM for especificado, o driver poderá silenciar e preencher uma parte do buffer WaveRT que segue o pacote EOS caso o hardware transfira dados para além da posição do EOS.

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível em Windows 10 e posterior.
Plataforma de Destino Windows
Cabeçalho portcls.h
IRQL Nível passivo

Confira também

IMiniportWaveRTOutputStream