FsRtlCopyWrite 関数 (ntifs.h)
FsRtlCopyWrite ルーチンは、ユーザー バッファーからキャッシュされたファイルにデータをコピーします。
構文
BOOLEAN FsRtlCopyWrite(
[in] PFILE_OBJECT FileObject,
[in] PLARGE_INTEGER FileOffset,
[in] ULONG Length,
[in] BOOLEAN Wait,
[in] ULONG LockKey,
[in] PVOID Buffer,
[out] PIO_STATUS_BLOCK IoStatus,
[in] PDEVICE_OBJECT DeviceObject
);
パラメーター
[in] FileObject
データの書き込み先となるキャッシュ されたファイルのファイル オブジェクトへのポインター。
[in] FileOffset
キャッシュされたファイル内の開始バイト オフセットを指定する変数へのポインター。
[in] Length
書き込むデータの長さ (バイト単位)。
[in] Wait
すべてのデータがコピーされるまで呼び出し元を待機状態にできる場合は TRUE に設定し、それ以外の場合は FALSE に設定します。
[in] LockKey
ロックするバイト範囲に関連付けられている値。 ロックする範囲が、既に非決定的ロックでロックされている別の範囲と重複している場合、または読み取る範囲が、既に非決定的にロックされている別の範囲のサブ範囲である場合、このパラメーターの値は、その非決定的ロックのキーである必要があります。ロックは、呼び出し元スレッドの親プロセスによって保持されている必要があります。 それ以外の場合、このパラメーターは無効です。
[in] Buffer
データのコピー元となるバッファーへのポインター。
[out] IoStatus
最終的な完了状態と操作に関する情報を受け取る呼び出し元によって割り当てられた構造体へのポインター。 データが正常にコピーされた場合、IoStatus.Status
[in] DeviceObject
ファイル データを保持するマウントされたボリュームのデバイス オブジェクトへのポインター。
戻り値
FsRtlCopyWrite
備考
ファイル システム固有の高速 I/O 書き込みルーチンを実装するのではなく、ファイル キャッシュをサポートするファイル システムの開発者は、高速 I/O 書き込み要求を処理するためのファイル システムのエントリ ポイントとして FsRtlCopyWrite を使用することを検討する必要があります。 そのためには、ファイル システムの DriverEntry ルーチンが、ファイル システム ドライバー オブジェクトのFAST_IO_DISPATCH構造で FastIoWrite エントリ ポイントを FsRtlCopyWrite に設定する必要があります。 さらに、ファイル システムは次の操作を行う必要があります。
高速 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 をするように設定する必要があります。
待機 が TRUE の場合、FsRtlCopyWrite はデータをコピーして TRUE を返す必要があります。 キャッシュされたファイルの必要なページが既にメモリに常駐している場合、データはすぐにコピーされ、ブロックは発生しません。 必要なページが常駐していない場合、呼び出し元は、必要なすべてのページが常駐状態になり、データをコピーできるようになるまで待機状態になります。
Wait が FALSE の場合、FsRtlCopyWrite はブロックを拒否し、ファイルのメイン リソースを取得できない場合、またはキャッシュされたファイルの必要なページがまだメモリに常駐していない場合は FALSE を返します。
ファイル システムの
ファイルをキャッシュするには、CcInitializeCacheMap ルーチンを使用します。
必要条件
要件 | 価値 |
---|---|
ターゲット プラットフォーム の |
万国 |
ヘッダー | ntifs.h (Ntifs.h を含む) |
ライブラリ | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI コンプライアンス規則 を |
HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm) |
関連項目
ccInitializeCacheMap の
FsRtlCopyRead の