次の方法で共有


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

書き込むデータを含むバッファーへのポインター。 バッファーは、長さパラメーターの値 (バイト単位) 以上である必要があります。 プロバイダーは、バッファーがストレージ デバイスの配置要件を満たしていることを確認するために 、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 の詳細については、「ファイル バッファリング」トピック 参照してください。

Requirements

Requirement 価値
サポートされる最小クライアント Windows 10 バージョン 1809 [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server [デスクトップ アプリのみ]
ターゲット プラットフォーム ウィンドウズ
Header projectedfslib.h
Library ProjectedFSLib.lib