次の方法で共有


PFNKSFILTERIRP コールバック関数 (ks.h)

フィルターが IRP を受信すると、AVStream ミニドライバーの AVStrMiniFilterCreate ルーチンが呼び出されます。

IRP_MJ_CREATE

IRP_MJ_CLOSE

構文

PFNKSFILTERIRP Pfnksfilterirp;

NTSTATUS Pfnksfilterirp(
  [in] PKSFILTER Filter,
  [in] PIRP Irp
)
{...}

パラメーター

[in] Filter

KSFILTER へのポインター。

[in] Irp

フィルターの IRP へのポインター。

戻り値

ルーチンが成功した場合は、STATUS_SUCCESSまたはエラー コードを返します。

注釈

IRP 説明
IRP_MJ_CREATE 通常、このルーチンは、フィルターに関連付けられているコンテキストとリソースを初期化するミニドライバーによって使用されます。 ミニドライバーは、そのKSFILTER_DISPATCH構造体の Create メンバーで、このルーチンのアドレスを指定します。 ルーチンが呼び出される時点で、ファイル オブジェクトには関連するコンテキストがあり、KS オブジェクト ヘッダーが割り当てられています。 このルーチンは、IRQL = PASSIVE_LEVELで呼び出され、デバイス ミューテックスが保持されます。 ルーチンが成功した場合、作成操作は成功することが保証されます。 STATUS_SUCCESSを返すか、フィルターの作成試行から返されたエラー コードを返します。 STATUS_PENDINGは、法的リターン コードでもあります。 ミニドライバーがSTATUS_PENDINGを返した場合、AVStream は IRP_MJ_CREATE をすぐに完了しません。 STATUS_PENDINGを返す前に、ミニドライバーは IoMarkIrpPending を呼び出す必要があります。 作成の処理が完了したら、ミニドライバーは IRP の状態コードを設定し、 KsCompletePendingRequest を呼び出す必要があります。 このルーチンは省略可能です。
IRP_MJ_CLOSE ミニドライバーは、そのKSFILTER_DISPATCH構造体の Close メンバーで、このルーチンのアドレスを指定します。 ルーチンが呼び出される時点で、フィルターに登録されているイベントはすべて解放されますが、それ以外の場合はオブジェクトはそのままです。 このルーチンは、IRQL = PASSIVE_LEVELで呼び出され、デバイス ミューテックスが保持されます。 ミューテックスの詳細については、「 AVStream のミューテックス」を参照してください。 このルーチンは省略可能です。 STATUS_SUCCESSまたはSTATUS_PENDINGを返します。 ミニドライバーがSTATUS_PENDINGを返した場合、AVStream は IRP_MJ_CLOSE をすぐに完了しません。 ただし、STATUS_PENDINGを返す前に、ミニドライバーは IoMarkIrpPending を呼び出す必要があります。 閉じるの処理が完了したら、ミニドライバーは IRP の状態コードを設定し、 KsCompletePendingRequest を呼び出す必要があります。

要件

要件
対象プラットフォーム デスクトップ
Header ks.h (Ks.h を含む)
IRQL PASSIVE_LEVEL (「解説」セクションを参照)

こちらもご覧ください

IoMarkIrpPending

KSFILTER_DISPATCHKsCompletePendingRequest