ClfsCreateMarshallingArea 関数 (wdm.h)

ClfsCreateMarshallingArea ルーチンは、CLFS ストリームのマーシャリング領域を作成し、新しいマーシャリング領域を表す不透明なコンテキストへのポインターを返します。

構文

CLFSUSER_API NTSTATUS ClfsCreateMarshallingArea(
  [in]           PLOG_FILE_OBJECT   plfoLog,
  [in]           POOL_TYPE          ePoolType,
  [in, optional] PALLOCATE_FUNCTION pfnAllocBuffer,
  [in, optional] PFREE_FUNCTION     pfnFreeBuffer,
  [in]           ULONG              cbMarshallingBuffer,
  [in]           ULONG              cMaxWriteBuffers,
  [in]           ULONG              cMaxReadBuffers,
  [out]          PVOID              *ppvMarshalContext
);

パラメーター

[in] plfoLog

CLFS ストリームを表す LOG_FILE_OBJECT 構造体へのポインター。 呼び出し元は、 以前に ClfsCreateLogFile を呼び出してこのポインターを取得しました。

[in] ePoolType

新しいマーシャリング領域がログ I/O ブロックに使用するメモリの種類 (ページ、ページなしなど) を指定するPOOL_TYPE値。

[in, optional] pfnAllocBuffer

マーシャリング領域にログ I/O ブロックを割り当てる呼び出し元が指定した関数への NULL またはポインター。 割り当て関数には、次のプロトタイプがあります。

PVOID
(*PALLOCATE_FUNCTION) (
    IN POOL_TYPE PoolType,
    IN SIZE_T NumberOfBytes,
    IN ULONG Tag
    );

割り当て関数の戻り値は、新しく割り当てられたログ I/O ブロックへのポインターです。

[in, optional] pfnFreeBuffer

null または pfnAllocBuffer によって以前に割り当てられたログ I/O ブロックを解放する呼び出し元から提供された関数へのポインター。 関数には、次のプロトタイプがあります。

VOID
(*PFREE_FUNCTION) (
    IN PVOID Buffer
    );

[in] cbMarshallingBuffer

新しいマーシャリング領域で使用される個々のログ I/O ブロックのサイズ (バイト単位)。 これは、安定したストレージ メディアのセクター サイズの倍数である必要があります。 セクター サイズは、GetDiskFreeSpace から返される lpBytesPerSector 値です。

[in] cMaxWriteBuffers

書き込み操作用に一度に割り当てることができる I/O ブロックの最大数。 このパラメーターは、データフラッシュの頻度に影響します。 データ フラッシュの頻度を制御する必要がない場合は、このパラメーターを INFINITE に設定します。

[in] cMaxReadBuffers

読み取り操作に対して一度に割り当てることができるログ I/O ブロックの最大数。

[out] ppvMarshalContext

新しいマーシャリング領域を表す不透明なコンテキストへのポインターを受け取る変数へのポインター。

戻り値

ClfsCreateMarshallingArea は、成功した場合STATUS_SUCCESSを返します。それ以外の場合は、Ntstatus.h で定義されているエラー コードのいずれかを返します。

注釈

pfnAllocBuffer パラメーターと pfnFreeBuffer パラメーターは、どちらも呼び出し元によって割り当てられた関数を指す必要があります。または、どちらも NULL である必要があります。 両方が NULL の場合、CLFS はログ I/O ブロックを割り当ておよび解放するための既定の関数を提供します。

ClfsCreateMarshallingArea を呼び出す前に、ClfsAddLogContainer または ClfsAddLogContainerSet を呼び出して、基になるログに少なくとも 2 つのコンテナー追加する必要があります。

CLFS の概念と用語の詳細については、「 共通ログ ファイル システム」を参照してください。

要件

要件
対象プラットフォーム デスクトップ
Header wdm.h (Wdm.h を含む)
Library Clfs.lib
[DLL] Clfs.sys
IRQL IRQL <= APC_LEVEL

こちらもご覧ください

ClfsAddLogContainer

ClfsAddLogContainerSet

ClfsCreateLogFile

ClfsDeleteMarshallingArea

LOG_FILE_OBJECT

POOL_TYPE