PFNKSHANDLER コールバック関数 (ks.h)
カーネル ストリーミングが IOCTL_KS_METHODの get/set プロパティ要求を受信すると、ミニドライバーによって提供されるルーチンが呼び出されます。 関連する KSMETHOD_ITEM KSPROPERTY_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を返します。 メソッドがサポートされていないか、パラメーター エラーが発生したことを示すその他のエラー メッセージを返します。
注釈
ミニドライバーは、KSMETHOD_ITEM構造体の MethodHandler メンバーでこのルーチンのアドレスを指定します。
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 に使用されるハンドラー宣言は、同じパラメーターと戻り値を持つプロパティとイベント セットのハンドラーにも使用されます。
要件
要件 | 値 |
---|---|
対象プラットフォーム | デスクトップ |
Header | ks.h (Ks.h を含む) |