IMiniportWaveRTOutputStream::GetPacketCount メソッド (portcls.h)
GetPacketCount は、WaveRT バッファーからハードウェアに完全に転送されたパケットの (1 ベースの) 数を返します。
構文
NTSTATUS GetPacketCount(
[out] ULONG *pPacketCount
);
パラメーター
[out] pPacketCount
pPacketCount は、WaveRT バッファーからハードウェアに完全に転送されたパケットの数を返します。
戻り値
GetPacketCount
は、呼び出しが成功した場合にSTATUS_SUCCESSを返します。 それ以外の場合、関数は適切なエラー状態コードを返します。
備考
パケット数から、OS は WaveRT バッファーに書き込むパケットのストリーム位置を派生させることができます。 OS は、次のパケットの WaveRT バッファー位置を派生して、WaveRT バッファー内に書き込むこともできます。 WaveRT ドライバーの場合、ドライバーは WaveRT バッファーの各パケットからデータを転送する際に、1 つの通知イベントを通知します。 そのため、イベントだけでは、WaveRT バッファー内のどのパケットが転送されているかを示すことはできません。 通常の操作では、これは問題ではありませんが、アンダーフローの場合は、OS が次に書き込むパケットを決定できるパケット数を照会することで、修正がより簡単に実現されます。
返された PacketCount は、WaveRT バッファーからハードウェアに完全に転送されたパケットの (1 ベースの) 数を示します。 これにより、OS は現在転送されているパケットの 0 から始まる数を決定し、そのパケットの前に書き込まれるようにすることができます。 たとえば、パケット数が 5 の場合、5 つのパケットが完全に転送されます。 つまり、パケット 0 から 4 が完全に転送されました。 したがって、パケット 5 は進行中であり、OS はパケット 6 を書き込む必要があります。 WaveRT バッファーの通知数が 2 の場合、パケット 6 は WaveRT バッファー内のオフセット 0 になります (6 剰余 2 が 0 で、パケット サイズが 0 の 0 倍であるため)。
OS は、このプロパティをいつでも取得できます。 ただし、通常、このプロパティは、定期的に、またはドライバーと再同期するために SetWritePacket() からデータフロー エラー (STATUS_DATA_LATE_ERROR、STATUS_DATA_OVERRUN) を返した後にのみ取得されます。
ストリームがKSSTATE_STOPされている場合、ドライバーはパケット数を 0 にリセットする必要があります。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 10 以降で使用できます。 |
ターゲット プラットフォーム の | ウィンドウズ |
ヘッダー | portcls.h |
IRQL | パッシブ レベル |
関連項目
IMiniportWaveRTOutputStream を する