次の方法で共有


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

ミニドライバー提供のルーチンは、カーネル ストリーミングが IOCTL_KS_METHOD、get/set プロパティ要求を受け取ったときに呼び出されます。 関連する KSMETHOD_ITEMKSPROPERTY_ITEM 構造体で、このハンドラーへのポインターを指定します。

構文

PFNKSHANDLER Pfnkshandler;

NTSTATUS Pfnkshandler(
  [in]      PIRP Irp,
  [in]      PKSIDENTIFIER Request,
  [in, out] PVOID Data
)
{...}

パラメーター

[in] Irp

メソッドまたはプロパティ要求を含む IRP を指定します。

[in] Request

メソッド パラメーターの配置されたコピーを指定します。 これは通常、KSMETHOD または KSPROPERTY構造体へのポインターです。

[in, out] Data

メソッドの KSMETHOD_ITEM 構造体で指定されたフラグに応じて、メソッド データ パラメーターまたは元のデータ パラメーターのシステム アドレスのアラインコピーを指定します。

戻り値

メソッドが処理され、KSMETHOD_ITEMで指定されたフラグに従ってデータ バッファーが入力されている場合は、STATUS_SUCCESSを返します。 データを返す場合、ドライバーは Irp->IoStatus.Information フィールドを設定する必要がありますが、Irp->IoStatus.Status フィールドを設定しないでください。また、IRP を完了する必要もありません。 非同期的に完了する場合は、保留中の IRP をマークします。

または、メソッドが処理されているが、特定の要求が完了していないため、呼び出し元のヘルパー関数によって完了する必要がある場合は、STATUS_SOME_NOT_MAPPED返します。 メソッドがサポートされていないか、パラメーター エラーが発生したことを示すその他のエラー メッセージを返します。

備考

ミニドライバーは、MethodHandlerKSMETHOD_ITEM 構造体のメンバーで、このルーチンのアドレスを指定します。

KStrMethodHandler KStrSupportHandler に使用されるハンドラー宣言は、同じパラメーターと戻り値を持つプロパティとイベント セットのハンドラーにも使用されます。

KsMethodHandler などのヘルパー関数が、データ バッファーが書き込みバッファーまたは変更バッファーとして定義されているメソッド ハンドラーを呼び出す場合、メソッド ハンドラーは、IRP (Irp パラメーター) 内の IoStatus メンバーの IO_STATUS_BLOCK 構造体の Information メンバーを、そのデータ バッファーのサイズに設定する必要があります。 ミニドライバーは、メソッドの KSMETHOD_ITEM 構造体の Flags メンバーをKSMETHOD_TYPE_WRITEまたはKSMETHOD_TYPE_MODIFYに設定して、メソッド ハンドラーのデータ バッファーをそれぞれ書き込みまたは変更として定義します。

次のコード スニペットは、IRP で返されるデータ バッファーのサイズを設定するメソッド ハンドラーの実装の例を示しています。

NTSTATUS
  MethodHandler(PIRP pIrp, PKSIDENTIFIER Request, PVOID Data) {
    NTSTATUS Status = STATUS_UNSUCCESSFUL;
    // Pointer to hold the position on the Irp stack
    PIO_STACK_LOCATION  pIrpStack  = NULL;
    ASSERT(pIrp);
    if(Data) {
        // Modify data here
    }
    // Find the current Irp stack.
    pIrpStack = IoGetCurrentIrpStackLocation(pIrp);
    if(pIrpStack) {
        // Set the size of the returning Irp data.
        pIrp->IoStatus.Information =
          pIrpStack->Parameters.DeviceIoControl.OutputBufferLength;
        Status = STATUS_SUCCESS;
    }
    return(Status);
}

ミニドライバーは、KSPROPERTY_ITEM 構造体の GetPropertyHandler メンバーで、このルーチンのアドレスを指定します。

ミニドライバーは、KSPROPERTY_ITEM 構造体の SetPropertyHandler メンバーで、このルーチンのアドレスを指定します。

ミニドライバーは、KSMETHOD_ITEM 構造体の SupportHandler メンバーで、このルーチンのアドレスを指定します。

KStrMethodHandler KStrSupportHandler に使用されるハンドラー宣言は、同じパラメーターと戻り値を持つプロパティとイベント セットのハンドラーにも使用されます。

必要条件

要件 価値
ターゲット プラットフォーム デスクトップ
ヘッダー ks.h (Ks.h を含む)

関連項目

KSMETHOD

KSMETHOD_ITEM

KSMETHOD_SET

KsMethodHandler