次の方法で共有


IMiniportWavePciStream::RevokeMappings メソッド (portcls.h)

メソッドは RevokeMappings以前に IPortWavePciStream::GetMapping によって取得されたマッピングを取り消します。

構文

NTSTATUS RevokeMappings(
  [in]  PVOID  FirstTag,
  [in]  PVOID  LastTag,
  [out] PULONG MappingsRevoked
);

パラメーター

[in] FirstTag

取り消される最初のマッピングを識別するタグ値を指定します。

[in] LastTag

取り消される最後のマッピングを識別するタグ値を指定します。

[out] MappingsRevoked

取り消されたマッピングの数を示す出力ポインター。 このパラメーターは、メソッドが呼び出しによって実際に取り消されたマッピングの数を書き込む ULONG 変数を指します。 この数値は、ミニポート ドライバーが既に解放されている LastTag への FirstTag の範囲内のすべてのマッピングを除外します。 同期の問題により、ポート ドライバーが取り消すマッピングの一覧と への呼び出し RevokeMappingsの間に、範囲内のマッピングの一部が解放される可能性があります。 詳細については、「解説」を参照してください。

戻り値

RevokeMappings は、呼び出しが成功した場合にSTATUS_SUCCESSを返します。 それ以外の場合、メソッドは適切なエラー コードを返します。

注釈

ポート ドライバーは、 を呼び出 RevokeMappings して、次の場合にストリームのマッピングを取り消します。

  • I/O 要求 (IRP) が取り消され、以前にマップされたメモリが使用できなくなる可能性があります。
  • ストリームの状態がKSSTATE_STOPに変わり ( KSSTATE を参照)、デバイスはマッピングを必要としなくなりました。
ミニポート ドライバーは、 IPortWavePciStream::GetMapping への呼び出しからマッピングを取得する順序を追跡します。 メソッドは RevokeMappingFirstTag で識別されるマッピングで始まり、 LastTag で識別されるマッピングで終わるシーケンス内のすべてのマッピングを取り消します。 これには、 FirstTagLastTag によって識別されるマッピングと、その間のすべてのマッピングが含まれます。 ミニポート ドライバーは、使用可能なマッピングの一覧から削除することによって、各マッピングを取り消します。

メソッドを RevokeMapping 使用すると、 FirstTagLastTag を同じ値に設定することで、1 つのマッピングを削除できます。

ポート ドライバーは、DMA コントローラーの散布/収集転送キューでのミニポート ドライバーのメンテナンス操作に関して非同期的にを呼び出 RevokeMappings すことができます。 このキューへのアクセスは、同期プリミティブによって保護する必要があります。 たとえば、Microsoft Windows Driver Kit (WDK) の ac97 サンプル オーディオ ドライバーでは、 これは KeAcquireSpinLock 呼び出しと KeReleaseSpinLock 呼び出しで重要なコード セクションを囲むことで行われます。 ミニポート ドライバーは へのポート ドライバーの呼び出しに関して非同期的にマッピングを RevokeMappings解放できるため、ミニポート ドライバーは以前にリリースされている可能性があります ( 「IPortWavePciStream::ReleaseMapping」を参照) 呼び出しで RevokeMappings 指定された 1 つ以上のマッピング。

マッピングの詳細については、「 WavePci 待機時間」を参照してください。

要件

要件
対象プラットフォーム ユニバーサル
Header portcls.h (Portcls.h を含む)
IRQL DISPATCH_LEVEL

こちらもご覧ください

IMiniportWavePciStream

IPortWavePciStream::GetMapping

IPortWavePciStream::ReleaseMapping

KSSTATE

KeAcquireSpinLock

KeReleaseSpinLock