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 バッファーの各パケットからデータを転送する際に、単一の通知イベントを通知します。 そのため、イベントだけでは、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以降で使用できます。 |
対象プラットフォーム | Windows |
ヘッダー | portcls.h |
IRQL | パッシブ レベル |