次の方法で共有


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

ミニドライバーは必要に応じて、KsEnableEventWithAllocator KsPropertyHandlerWithAllocator、およびKsMethodHandlerWithAllocator の呼び出しで、PFNKSALLOCATOR 型のコールバック関数をパラメーターとして指定できます。

構文

PFNKSALLOCATOR Pfnksallocator;

NTSTATUS Pfnksallocator(
  [in] PIRP Irp,
  [in] ULONG BufferSize,
  [in] BOOLEAN InputOperation
)
{...}

パラメーター

[in] Irp

バッファー割り当て要求を行う IRP を指定します。

[in] BufferSize

必要なバッファーのサイズを指定します。 このサイズは、要求内のすべてのパラメーターを対象とします。

[in] InputOperation

TRUE に設定すると、入力操作が正常に返された場合、Irp->IoStatus.Information フィールドには、元の入力バッファーにコピーバックするバイト数が含まれます。

戻り値

要求が処理された場合にSTATUS_SUCCESSを返します。 それ以外の場合は、適切なエラー コードが返されます。

備考

通常、プール メモリはバッファー割り当てに使用されます。 これにより、イベント、プロパティ、メソッドのクエリをハードウェアに直接渡すフィルターを使用して、標準の処理関数によってそのようなデータが配置されるバッファーを提供できるようにすることで、追加のデータ コピーを回避できます。 そのため、フィルターには、バッファー割り当てが発生するアダプターに既にマップされているメモリ ブロックが含まれている可能性があります。

このメモリは、通常のプール割り当てメモリではないため、フィルターは Irp の完了時にバッファークリーンアップを実行する必要があります。 つまり、同期ではないユーザー モードからの入力操作の場合、アロケーターは宛先バッファーに MDL を割り当て、プローブしてロックし、システム アドレスを取得する必要があります。 これは、戻りデータを元のバッファーにコピーできるようにするために行う必要があります。

必要条件

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