次の方法で共有


PrjWriteFileData 関数 (projectedfslib.h)

PRJ_GET_FILE_DATA_CB コールバックの呼び出しで要求されたデータを提供します。

構文

HRESULT PrjWriteFileData(
  [in] PRJ_NAMESPACE_VIRTUALIZATION_CONTEXT namespaceVirtualizationContext,
  [in] const GUID                           *dataStreamId,
  [in] void                                 *buffer,
  [in] UINT64                               byteOffset,
  [in] UINT32                               length
);

パラメーター

[in] namespaceVirtualizationContext

仮想化インスタンスの不透明なハンドル。

プロバイダーが PRJ_GET_FILE_DATA_CB コールバックを処理している場合、これはコールバックでプロバイダーに渡される callbackData の VirtualizationInstanceHandle メンバーの値である必要があります。

[in] dataStreamId

書き込むデータ ストリームの識別子。

プロバイダーが PRJ_GET_FILE_DATA_CB コールバックを処理している場合、これはコールバックでプロバイダーに渡される callbackData の DataStreamId メンバーの値である必要があります。

[in] buffer

書き込むデータを含むバッファーへのポインター。 バッファーは、length パラメーターの値 (バイト単位) 以上である必要があります。 プロバイダーは、バッファーがストレージ デバイスの配置要件を満たしていることを確認するために 、PrjAllocateAlignedBuffer を使用する必要があります。

[in] byteOffset

データを書き込むファイルの先頭からのバイト オフセット。

[in] length

ファイルに書き込むバイト数。

戻り値

HRESULT_FROM_WIN32(ERROR_OFFSET_ALIGNMENT_VIOLATION) は、バッファーされていない I/O に対してユーザーのハンドルが開き、byteOffset がストレージ デバイスのセクター サイズに合わせられていないことを示します。

注釈

プロバイダーは、このルーチンを使用して、 PRJ_GET_FILE_DATA_CB コールバックの呼び出しで要求されたデータを提供します。

プロバイダーの PRJ_GET_FILE_DATA_CB コールバックは、システムがファイルにデータが含まれていることを確認する必要がある場合に呼び出されます。 プロバイダーが PrjWriteFileData を呼び出して要求されたデータを提供すると、システムはユーザーのFILE_OBJECTを使用してそのデータをファイルに書き込みます。 ただし、そのFILE_OBJECTがバッファー処理された I/O に対して開かれたか、バッファーされていない I/O に対して開かれたかをシステムは制御できません。 バッファーされていない I/O 用にFILE_OBJECTを開いた場合、ファイルへの読み取りと書き込みは、特定のアラインメント要件に準拠している必要があります。 プロバイダーは、次の 2 つの操作を行うことで、これらのアラインメント要件を満たすことができます。

  • バッファーに渡すバッファーを割り当てるには、 PrjAllocateAlignedBuffer を使用します。
  • byteOffset と length がストレージ デバイスのアラインメント要件の整数倍数であることを確認します (byteOffset + length がファイルの末尾と等しい場合、長さはこの要件を満たす必要はありません)。 プロバイダーは 、PrjGetVirtualizationInstanceInfo を使用して、ストレージ デバイスの配置要件を取得できます。

PRJ_GET_FILE_DATA_CB コールバックを 処理する場合、プロバイダーは複数の PrjWriteFileData 呼び出しで要求されたデータを返し、要求された合計データの一部を返す場合があるため、システムはそれをプロバイダーに残して適切な配置を計算します。

プロバイダーが PrjWriteFileData の 1 回の呼び出しでファイル全体を書き込む場合 (つまり、byteOffset = 0 から長さ = ファイルのサイズまで)、プロバイダーはアラインメント計算を行う必要はありません。 ただし、バッファーがストレージ デバイスの配置要件を満たしていることを確認するには、 PrjAllocateAlignedBuffer を引き続き使用する必要があります。 バッファー処理された I/O とバッファーされていない I/O の詳細については、「 ファイル バッファリング」トピックを参照してください。

要件

要件
サポートされている最小のクライアント Windows 10 Version 1809 [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー projectedfslib.h