FsRtlCopyRead 関数 (ntifs.h)
FsRtlCopyRead ルーチンは、キャッシュされたファイルからユーザー バッファーにデータをコピーします。
構文
BOOLEAN FsRtlCopyRead(
[in] PFILE_OBJECT FileObject,
[in] PLARGE_INTEGER FileOffset,
[in] ULONG Length,
[in] BOOLEAN Wait,
[in] ULONG LockKey,
[out] PVOID Buffer,
[out] PIO_STATUS_BLOCK IoStatus,
[in] PDEVICE_OBJECT DeviceObject
);
パラメーター
[in] FileObject
データの読み取り元となるキャッシュされたファイルのファイル オブジェクトへのポインター。
[in] FileOffset
キャッシュされたファイル内でのバイト オフセットの開始。
[in] Length
読み取るデータの長さ (バイト単位)。
[in] Wait
すべてのデータがコピーされるまで呼び出し元を待機状態にできる場合は TRUE に設定し、それ以外の場合は FALSE に設定します。
[in] LockKey
ロックするバイト範囲に関連付けられている値。 ロックする範囲が、既に非決定的ロックでロックされている別の範囲と重複している場合、または読み取る範囲が、既に非決定的にロックされている別の範囲のサブ範囲である場合、このパラメーターの値は、その非決定的ロックのキーである必要があります。ロックは、呼び出し元スレッドの親プロセスによって保持されている必要があります。 それ以外の場合、このパラメーターは無効です。
[out] Buffer
データのコピー先となるバッファーへのポインター。
[out] IoStatus
最終的な完了状態と操作に関する情報を受け取る呼び出し元によって割り当てられた構造体へのポインター。 データが正常にコピーされた場合、IoStatus.Status
[in] DeviceObject
ファイル データを保持するデバイスのデバイス オブジェクト。
戻り値
FsRtlCopyRead
備考
ファイル システム固有の高速 I/O 読み取りルーチンを実装するのではなく、ファイル キャッシュをサポートするファイル システムの開発者は、高速 I/O 読み取り要求を処理するためのファイル システムのエントリ ポイントとして FsRtlCopyRead を使用することを検討する必要があります。 そのためには、ファイル システムの DriverEntry ルーチンで、FastIoRead エントリ ポイントを、ファイル システム ドライバー オブジェクトのFAST_IO_DISPATCH構造の FsRtlCopyRead に設定する必要があります。 さらに、ファイル システムは次の操作を行う必要があります。
高速 I/O を実行するファイルごとに、ファイル システムはFSRTL_COMMON_FCB_HEADER構造体を割り当てて初期化する必要があります。
ほとんどのファイル システムでは、ファイル制御ブロック (FCB) にFSRTL_COMMON_FCB_HEADER構造を含めるか、または開いているファイルの状態を維持するために使用される同等の構造を含めることで、これを実現します。
FSRTL_COMMON_FCB_HEADER構造体の記憶域は、通常、ページング されたプールから割り当てられます。
高速 I/O が実行されるファイルごとに、ファイル・システムはファイルのファイル・オブジェクトをFSRTL_COMMON_FCB_HEADER構造にリンクする必要があります。 これを行うには、各ファイル オブジェクトの FsContext メンバーがこの構造体 (または FCB またはFSRTL_COMMON_FCB_HEADER構造体を含む他の構造体) を指すように設定します。
ファイルをキャッシュする場合、ファイル システムは、ファイルのFSRTL_COMMON_FCB_HEADER構造体の IsFastIoPossible メンバーを適切な値に設定する必要があります。 この値は、ファイルがキャッシュされている限り、必要に応じて更新する必要があります。
特に、ファイル システムは、キャッシュされたファイルの排他的なバイト範囲ロックが存在するとすぐに、FSRTL_COMMON_FCB_HEADER構造体の
IsFastIoPossible メンバーを FastIoIsQuestionable をするように設定する必要があります。
ファイル システムの
ファイルをキャッシュするには、CcInitializeCacheMap ルーチンを使用します。
必要条件
要件 | 価値 |
---|---|
ターゲット プラットフォーム の |
万国 |
ヘッダー | ntifs.h (Ntifs.h を含む) |
ライブラリ | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI コンプライアンス規則 を |
PowerIrpDDis(wdm) |
関連項目
ccInitializeCacheMap の