次の方法で共有


CcMapData 関数 (ntifs.h)

CcMapData ルーチンは、キャッシュされたファイルの指定されたバイト範囲をメモリ内のバッファーにマップします。

構文

BOOLEAN CcMapData(
  [in]  PFILE_OBJECT   FileObject,
  [in]  PLARGE_INTEGER FileOffset,
  [in]  ULONG          Length,
  [in]  ULONG          Flags,
  [out] PVOID          *Bcb,
  [out] PVOID          *Buffer
);

パラメーター

[in] FileObject

読み取りアクセス用にマップされるデータを持つファイルのファイル オブジェクトへのポインター。

[in] FileOffset

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

[in] Length

必要なデータの長さ (バイト単位)。

[in] Flags

マッピング操作の実行方法を指定するフラグのビットマスク。 これは、次の 1 つ以上の値のビットごとの OR の組み合わせです。

価値 意味
MAP_WAIT 呼び出し元は、データがマップされるまで待機状態にすることができます。
MAP_NO_READ 既にメモリに常駐しているページのみがマップされます。
 
Windows 2000 以前の では、このパラメーターは waitという名前 ブール値でした。
 

待つ

データ マップされるまで呼び出し元を待機状態にできる場合は TRUE に設定 、それ以外の場合は FALSE

[out] Bcb

最初の呼び出しでは、バッファー制御ブロック (BCB) 構造体へのポインターが返されます。 このポインターは、このバッファーの後続のすべての呼び出しで入力として指定する必要があります。

[out] Buffer

マップされたデータを含むバッファーへのポインター。

戻り値

ccMapData は、キャッシュされたファイル のデータが正常にマップされた場合は TRUE を返し、それ以外の場合は FALSE 返します。

備考

CcMapData は、読み取りアクセスのためにキャッシュされたファイル内のデータをマップします。 ccMapData 呼び出されると、データがマップされることに注意してください。ただし、ピン留めされていません。 この区別は重要です。 マップされているが固定されていないデータは、安全に変更できません。 データをピン留めするには、ccPinMappedDataCcPinRead、または ccPreparePinWrite使用します。

ccMapData 正常に呼び出されるたびに、後続の ccUnpinDataへの呼び出し 照合する必要があります。

CcMapData は、キャッシュ マネージャーのビュー境界を越えてデータをマップできません。 キャッシュ・マネージャーは、256 KB アライン・ビューでシステム内のファイルを管理します。 (キャッシュ マネージャーのビュー サイズは、システム定義の定数 VACB_MAPPING_GRANULARITYで指定されます。この定数は、ntifs.hで 256 KB に設定されます)。マップされた領域は、複数の 256 KB ビューにまたがることはできません。 そのため、マップできる最大の領域は 256 KB で、ファイル内の 256 KB で整列されたオフセットから始められます。

キャッシュされたファイル内のバイト範囲をマッピングしても、ページがメモリに常駐し続けるわけではありません。 ページがマップされている限り、バイト範囲はシステム キャッシュの仮想アドレス空間にマップされたままであることが保証されますが、メモリ マネージャーは、システムのメモリ要求に応じて物理ページをページングできます。

MAP_WAIT フラグが設定されている場合 (または 待機 が TRUE場合)、ccMapData マッピング要求が完了し、TRUE返されます。 キャッシュされたファイルの必要なページが既にメモリに常駐している場合、データはすぐにマップされ、ブロックは発生しません。 必要なページが常駐していない場合、呼び出し元は、必要なすべてのページが常駐状態になり、データをマップできるようになるまで待機状態になります。 MAP_WAIT フラグが設定されていない (または Wait が FALSE) 場合、データをすぐにマップできない場合、ccMapData は FALSE返します。

Buffer で返されるポインターは、ccUnpinData 呼び出されるまで有効です。 このポインターがまだ有効な間に ccPinMappedData が呼び出された場合、ポインターは ccPinMappedData 呼び出された後も有効なままです (ただし、ccUnpinData 呼び出されるまでのみ)。

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

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

必要条件

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

関連項目

ccInitializeCacheMap の

CcPinMappedData

CcPinRead

ccPreparePinWrite を する

ccUnpinData を する