次の方法で共有


CcPrepareMdlWrite 関数 (ntifs.h)

ccPrepareMdlWrite ルーチン は、呼び出し元がファイルにデータを書き込むことができるように、キャッシュされたファイル メモリへの直接アクセスを提供します。

構文

void CcPrepareMdlWrite(
  [in]  PFILE_OBJECT     FileObject,
  [in]  PLARGE_INTEGER   FileOffset,
  [in]  ULONG            Length,
  [out] PMDL             *MdlChain,
  [out] PIO_STATUS_BLOCK IoStatus
);

パラメーター

[in] FileObject

キャッシュされたファイルのファイル オブジェクトへのポインター。

[in] FileOffset

データが書き込まれるキャッシュ ファイル内の開始バイト オフセットを指定する変数へのポインター。

[in] Length

システム キャッシュに書き込まれるデータの長さ (バイト単位)。

[out] MdlChain

データの書き込み先ページを記述する 1 つ以上のメモリ記述子リスト (MDL) のチェーン。

[out] IoStatus

IO_STATUS_BLOCK構造体へのポインター。 CcPrepareMdlWrite の呼び出しが成功した場合、IoStatus.Status は STATUS_SUCCESS に設定されます。 それ以外の場合は、適切な NTSTATUS エラー コードに設定されます。 IoStatus.Information は、MDL チェーンで正常にロックダウンされた実際のバイト数に設定されます。

戻り値

何一つ

備考

ccPrepareMdlWrite は、キャッシュされたファイルにデータがコピーされないことを除き、ccCopyWriteに似ています。 代わりに、システム キャッシュで上書きされる物理ページはメモリ内でロックされ、ccPrepareMdlWrite は、指定されたバイト範囲を記述する 1 つ以上のメモリ記述子リスト (MDL) を返します。 これらのページは、ccMdlWriteComplete または ccMdlWriteAbort が呼び出されるまで、メモリ内 ロックされたままになります。 したがって、ccPrepareMdlWriteする各呼び出しの後に、ccMdlWriteComplete または ccMdlWriteAbortを 呼び出す必要があります。

MDL によって記述されたページはメモリ内でロックされていますが、システム空間にはマップされないことに注意してください。 呼び出し元は、mmGetSystemAddressForMdlSafe呼び出すことによって、このマッピングを実行できます。

ccPrepareMdlWrite 呼び出しが失敗した場合でも、1 つ以上の MDL が割り当てられている可能性があることに注意してください。 呼び出し元は、IoStatus.Information の値を調べて、これが発生したかどうかを判断できます。 存在する場合、呼び出し元は ccMdlWriteComplete 呼び出して、割り当てられた MDL を解放する必要があります。

エラーが発生した場合、ccPrepareMdlWrite 、その特定のエラーの状態例外が発生します。 たとえば、プールの割り当てエラーが発生した場合、ccPrepareMdlWrite STATUS_INSUFFICIENT_RESOURCES例外が発生します。I/O エラーが発生した場合、ccPrepareMdlWrite I/O エラーの状態例外が発生します。 したがって、エラーが発生した場合に制御を取得するには、ドライバーは、ccPrepareMdlWrite への呼び出しを try-except または try-finally ステートメント ラップする必要があります。

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

必要条件

要件 価値
ターゲット プラットフォーム の 万国
ヘッダー ntifs.h (Ntifs.h を含む)
ライブラリ NtosKrnl.lib
DLL NtosKrnl.exe
IRQL < DISPATCH_LEVEL

関連項目

ccCopyWrite の

ccInitializeCacheMap の

ccMdlWriteAbort を する

ccMdlWriteComplete を する

IoAllocateMdl の

IoBuildPartialMdl

MmGetMdlByteCount

mmGetMdlByteOffset の

mmGetMdlPfnArray を する

MmGetMdlVirtualAddress

mmGetSystemAddressForMdl の

mmGetSystemAddressForMdlSafe の

mmInitializeMdl の

MmMapLockedPages

mmPrepareMdlForReuse の

MmProbeAndLockPages

MmUnlockPages

MmUnmapLockedPages