CcCopyReadEx 関数 (ntifs.h)

CcCopyReadEx ルーチンは、キャッシュされたファイルからユーザー バッファーにデータをコピーします。 操作の I/O バイト数は、発行スレッドに対して課金されます。

構文

BOOLEAN CcCopyReadEx(
  [in]  PFILE_OBJECT     FileObject,
  [in]  PLARGE_INTEGER   FileOffset,
  [in]  ULONG            Length,
  [in]  BOOLEAN          Wait,
  [out] PVOID            Buffer,
  [out] PIO_STATUS_BLOCK IoStatus,
  [in]  PETHREAD         IoIssuerThread
);

パラメーター

[in] FileObject

データの読み取り元となるキャッシュされたファイルのファイル オブジェクトへのポインター。

[in] FileOffset

キャッシュされたファイル内の開始バイト オフセットを指定する変数へのポインター。

[in] Length

読み取るデータの長さ (バイト単位)。

[in] Wait

すべてのデータがコピーされるまで呼び出し元を待機状態にできる場合は TRUE、それ以外の場合は FALSE に設定します。

[out] Buffer

データのコピー先となるバッファーへのポインター。

[out] IoStatus

最終的な完了状態と操作に関する情報を受け取る呼び出し元によって割り当てられた構造体へのポインター。 すべてのデータが正常にコピーされない場合、 IoStatus.Information にはコピーされた実際のバイト数が含まれます。

[in] IoIssuerThread

読み取り要求を発行するスレッド。 ディスク I/O アカウンティングが有効になっているファイル システムの場合、これは I/O が課金されるスレッドです。 IoIssuerThread が NULL の場合、I/O は現在のスレッドに対して課金されます。

戻り値

CcCopyReadEx ルーチンは、データが正常にコピーされた場合は TRUE、それ以外の場合は FALSE を返します。

注釈

Wait が TRUE の場合、CcCopyReadEx はコピー要求を完了し、TRUE を返す保証があります。 キャッシュされたファイルの必要なページが既にメモリに存在する場合、データはすぐにコピーされ、ブロックは行われません。 必要なページが常駐していない場合、呼び出し元は、必要なすべてのページが常駐し、データをコピーできるようになるまで待機状態になります。

Wait が FALSE の場合、CcCopyReadEx はブロックを拒否し、キャッシュされたファイルの必要なページがまだメモリに存在していない場合は FALSE を返します。

FileOffsetLength は 、キャッシュされたファイルのサイズ以下である必要があります。そうしないと、アサーションエラーが発生します。

エラーが発生した場合、 CcCopyReadEx は特定のエラーの状態例外を発生させます。 たとえば、プール割り当てエラーが発生した場合、 CcCopyReadExSTATUS_INSUFFICIENT_RESOURCES 状態の例外を発生させます。I/O エラーが発生した場合、 CcCopyReadEx は I/O エラーの状態例外を発生させます。 そのため、エラーが発生したかどうかを制御するには、ドライバーは、CcCopyReadEx の呼び出しを try-except ステートメントまたは try-finally ステートメントでラップする必要があります。

ファイルをキャッシュするには、 CcInitializeCacheMap を使用します。

要件

要件
サポートされている最小のクライアント Windows 8
対象プラットフォーム ユニバーサル
Header ntifs.h (Ntifs.h、FltKernel.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL <= APC_LEVEL

こちらもご覧ください

CcFastCopyRead

CcInitializeCacheMap

CcReadAhead

CcScheduleReadAhead

CcSetAdditionalCacheAttributes

CcSetReadAheadGranularity