次の方法で共有


KsMoveIrpsOnCancelableQueue 関数 (ks.h)

KsMoveIrpsOnCancelableQueue 関数は、ミニドライバー定義の KStrIrpListCallback 関数から返される値に応じて、指定された IRP を SourceList パラメーターから DestinationList パラメーターに移動します。

構文

KSDDKAPI NTSTATUS KsMoveIrpsOnCancelableQueue(
  [in, out]      PLIST_ENTRY           SourceList,
  [in]           PKSPIN_LOCK           SourceLock,
  [in, out]      PLIST_ENTRY           DestinationList,
  [in, optional] PKSPIN_LOCK           DestinationLock,
  [in]           KSLIST_ENTRY_LOCATION ListLocation,
  [in]           PFNKSIRPLISTCALLBACK  ListCallback,
  [in]           PVOID                 Context
);

パラメーター

[in, out] SourceList

IRP を削除するキューの先頭を指定します。

[in] SourceLock

ソース キュー アクセス用のドライバーのスピン ロックへのポインター。

[in, out] DestinationList

IRP を追加するキューの先頭を指定します。

[in, optional] DestinationLock

必要に応じて、宛先キュー へのアクセスに対するドライバーのスピン ロックへのポインターが含まれます。 これが指定されていない場合、 SourceLock パラメーターは両方のキューを制御するものと見なされます。 指定した場合、このロックは 常に SourceLock パラメーターの後に取得されます。 宛先リストに個別のスピン ロックがある場合は、IRP を移動し、KSQUEUE_SPINLOCK_IRP_STORAGE() スピン ロックを更新できるようにするために、システム全体のスピン ロックの取り消しが最初に取得されます。

[in] ListLocation

IRP をソース キューの先頭または末尾から列挙する必要があるかどうかを示します。 移動されるすべての IRP は、順序が維持されるように、宛先キューの反対側の端に配置されます。

[in] ListCallback

特定の IRP を SourceList から DestinationList に移動するか、列挙を終了するかを示すために呼び出すミニドライバー定義の KStrIrpListCallback 関数を指定します。

[in] Context

ListCallback に渡されるコンテキスト。

戻り値

リストが完全に列挙された場合は、STATUS_SUCCESSを返します。それ以外の場合は、列挙を中断したミニドライバー定義 の KStrIrpListCallback コールバック関数によって返された警告またはエラーを返します。

注釈

現在取得されているかどうかに関係なく、 KStrIrpListCallback 関数が移動する必要があることを示している場合、IRP は移動されます。 KStrIrpListCallback がSTATUS_SUCCESSを返す場合、IRP は移動されます。 STATUS_NO_MATCHを返す場合、IRP は移動されません。 その他の戻り値の警告またはエラー値は列挙を終了し、 関数によって返されます。 STATUS_NO_MATCH値は 、KStrIrpListCallback によってエラーとして返されるべきではありません。 KStrIrpListCallback は、DISPATCH_LEVELで呼び出されます。 KStrIrpListCallback は常に、リスト列挙を完了するために NULL IRP 値を使用して、最後に少なくとも 1 回呼び出されます。

KsMoveIrpsOnCancelableQueue は、コールバック関数が検索を終了する必要があることを示すか、リストの末尾に達するまでリストを続行します。 KsMoveIrpsOnCancelableQueue は、可能な限り、提供されたスピン ロックを使用してアクセスを同期することで、システム全体の Cancel Spin Lock の使用を最小限に抑えます。 KsMoveIrpsOnCancelableQueue では、IRP の移動中にキャンセル ルーチンを変更することはできません。

関数は、DISPATCH_LEVEL以下で呼び出すことができます。

要件

要件
対象プラットフォーム ユニバーサル
Header ks.h (Ks.h を含む)
Library Ks.lib

こちらもご覧ください

KStrIrpListCallback