IMiniportWaveRTOutputStream::SetWritePacket 메서드(portcls.h)
SetWritePacket은 OS가 유효한 데이터를 WaveRT 버퍼에 작성했음을 드라이버에 알릴 수 있습니다.
통사론
NTSTATUS SetWritePacket(
[in] ULONG PacketNumber,
[in] DWORD Flags,
[in] ULONG EosPacketLength
);
매개 변수
[in] PacketNumber
OS에서 WaveRT 버퍼에 쓴 패킷의 수입니다.
[in] Flags
패킷 또는 스트림과 관련된 추가 특성입니다.
KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM - 이 플래그는 이 패킷이 데이터 스트림의 끝을 나타낸다는 것을 나타냅니다.
[in] EosPacketLength
플래그에 KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM 지정된 경우 EOS 패킷의 길이입니다. 0은 유효한 값입니다. 플래그에 KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM 지정되지 않은 경우 이 매개 변수는 무시됩니다.
반환 값
SetWritePacket
호출에 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 함수는 적절한 오류 상태 코드를 반환합니다.
STATUS_DATA_LATE_ERROR – OS가 이미 전송되었거나 현재 전송 중인 패킷 번호를 전달하면 드라이버가 이 오류를 반환합니다. 이 경우 결함이 발생했습니다. 드라이버는 필요에 따라 패킷의 일부 데이터를 사용하거나 이전에 이 패킷 번호에 기록된 데이터를 계속 재생할 수 있습니다.
STATUS_DATA_OVERRUN – OS가 WaveRT 버퍼에 저장할 수 있는 것보다 높은 패킷 번호를 전달하면 드라이버가 이 오류를 반환합니다. 이 경우 결함이 발생했습니다. 드라이버는 필요에 따라 패킷의 데이터를 무시할 수 있습니다.
STATUS_INVALID_DEVICE_STATE – OS가 이전에 KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM 플래그를 설정한 후 이 루틴을 호출하면 드라이버가 이 오류를 반환합니다.
STATUS_INVALID_PARAMETER – 드라이버가 다른 오류 상태에 대한 특정 사례 외에 잘못된 다른 매개 변수를 찾으면 이 오류를 반환합니다. 여기에는 위에서 구체적으로 정의되지 않은 플래그 값이 포함됩니다.
발언
OS에서 이 루틴을 호출한 후 드라이버는 필요에 따라 제공된 정보를 사용하여 하드웨어 전송을 최적화할 수 있습니다. 예를 들어 드라이버는 DMA 전송을 최적화하거나 OS가 이 루틴을 다시 호출하여 다른 패킷을 드라이버에 알리지 않는 경우 지정된 패킷의 끝에서 전송을 중지하도록 프로그램 하드웨어를 최적화할 수 있습니다. 예를 들어 순환 버퍼를 반복하는 대신 가청 간격을 도입하는 등 언더플로의 가청 효과를 완화할 수 있습니다. 그러나 드라이버는 여전히 명목상 실시간 속도로 내부 패킷 카운터 및 신호 알림 이벤트를 늘릴 의무가 있습니다.
OS가 KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM 플래그를 지정하는 경우를 제외하고 패킷 크기는 IMiniportWaveRTStreamNotification::AllocateBufferWithNotification 전달된 NotificationCount로 나눈 WaveRT 버퍼 크기입니다.
하드웨어 기능에 따라 KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM 플래그가 지정된 경우 하드웨어가 EOS 위치 이상으로 데이터를 전송하는 경우 드라이버가 EOS 패킷 뒤에 있는 WaveRT 버퍼의 일부를 무음으로 채울 수 있습니다.
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 10 이상에서 사용할 수 있습니다. |
대상 플랫폼 | Windows |
헤더 | portcls.h |
IRQL | 수동 수준 |