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返します。 メソッドがサポートされていないか、パラメーター エラーが発生したことを示すその他のエラー メッセージを返します。
備考
ミニドライバーは、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 を含む) |