CF_SYNC_POLICIES 構造体 (cfapi.h)

同期ルートによって使用される同期ポリシーを定義します。

構文

typedef struct CF_SYNC_POLICIES {
  ULONG                            StructSize;
  CF_HYDRATION_POLICY              Hydration;
  CF_POPULATION_POLICY             Population;
  CF_INSYNC_POLICY                 InSync;
  CF_HARDLINK_POLICY               HardLink;
  CF_PLACEHOLDER_MANAGEMENT_POLICY PlaceholderManagement;
} CF_SYNC_POLICIES;

メンバー

StructSize

構造体の CF_SYNC_POLICIES サイズ。

Hydration

ハイドレーション ポリシーを使用すると、同期プロバイダーは、プラットフォームによってプレースホルダー ファイルをハイドレートする方法を制御できます。 これは、プライマリ ポリシーと一連のポリシー修飾子で構成されます。

プライマリ ポリシーには、次の 4 つの可能な値があります。

ポリシー 説明
ALWAYS_FULL が選択されている場合ALWAYS_FULL、プラットフォームは失敗し、HRESULT ERROR_CLOUD_FILE_INVALID_REQUESTでは、完全にハイドレートされないプレースホルダーになる可能性のあるプレースホルダー操作 (CfCreatePlaceholdersCfDehydratePlaceholder、脱水オプション付きの CfUpdatePlaceholder脱水オプションを使用した CfConvertPlaceholder など) が含まれます。
FULL が選択されている場合 FULL 、プラットフォームではプレースホルダーを脱水できます。 プラットフォームが脱水プレースホルダーへのアクセスを検出すると、要求が 1 バイトのみを要求している場合でも、ユーザー IO 要求を完了する前に、プレースホルダーの完全なコンテンツをローカルで使用できるようになります。
プログレッシブ が選択されている場合 PROGRESSIVE 、プラットフォームではプレースホルダーを脱水できます。 プラットフォームが脱水プレースホルダーへのアクセスを検出すると、十分なデータが同期プロバイダーから受信されると判断されるとすぐに、ユーザー IO 要求が完了します。 ただし、プレースホルダーの完全なコンテンツがローカルで利用可能になるか、プレースホルダーの最後のユーザー ハンドルが閉じられるまで、プラットフォームはバックグラウンドで同期プロバイダーにプレースホルダー内の残りのコンテンツを要求し続けます。

オプトイン PROGRESSIVE する同期プロバイダーでは、ハイドレーション コールバックがオフセット 0 から順番に到着するとは想定されないことに注意してください。 言い換えると、ポリシーを使用 PROGRESSIVE した同期プロバイダーは、プレースホルダーのランダム シークを処理することが期待されます。
PARTIAL ポリシーは PARTIAL とよく似ています PROGRESSIVE。 2 つの唯一の違いは、ポリシーを使用したバックグラウンド PARTIAL での継続的なハイドレートの欠如です。

現在、および AUTO_DEHYDRATION_ALLOWEDの 3 つのポリシー修飾子がサポートされています。 VALIDATION_REQUIREDSTREAMING_ALLOWED 一般に、修飾子は、組み合わせが自己矛盾しない限り、任意のプライマリ ポリシーとその他のポリシー修飾子と混合して照合できます。

ポリシー修飾子 説明
VALIDATION_REQUIRED このポリシー修飾子は、同期プロバイダーに 2 つの保証を提供します。 最初に、同期プロバイダーによって返されたデータが、ユーザー アプリケーションに返される前に常にディスクに保持されることを保証します。 次に、同期プロバイダーは、以前にプラットフォームに返したのと同じデータを取得し、その整合性を検証できます。 同期プロバイダーによる整合性の確認が成功した場合にのみ、プラットフォームはユーザー IO 要求を完了します。 この修飾子は、余分なディスク IO を犠牲にして、エンドツーエンドのデータ整合性をサポートするのに役立ちます。
STREAMING_ALLOWED このポリシー修飾子は、同期プロバイダーによって返されたデータをローカル ディスクに格納しないアクセス許可をプラットフォームに付与します。 このポリシー修飾子は、 と VALIDATION_REQUIRED相互に排他的です。 両方のフラグが指定されている場合、API は で ERROR_INVALID_PARAMETER 失敗します。
AUTO_DEHYDRATION_ALLOWED このポリシー修飾子は、同期プロバイダーの助けを借りずに、同期中のクラウド ファイル プレースホルダーを退避するアクセス許可をプラットフォームに付与します。 このフラグがないと、プラットフォームは CfDehydratePlaceholder を直接呼び出すことはできません。 代わりに、クラウド ファイル プレースホルダーを退避する唯一の方法は、ファイルのピン留めされた属性をクリアし、ファイルのピン留めされていない属性を設定することです。 その後、実際の脱水は、2 つの属性のディレクトリ変更通知を受信した後、同期エンジンによって非同期的に実行されます。 このフラグを指定すると、プラットフォームは、同期中のクラウド ファイル プレースホルダーで CfDehydratePlaceholder を直接呼び出すことができます。 同期プロバイダーは、自動脱水をサポートすることをお勧めします。
ALLOW_FULL_RESTART_HYDRATION このポリシー修飾子は、AV フィルターによるファイルのスキャンの試行をインターセプトするときに、ファイルを完全にハイドレートするアクセス許可をプラットフォームに付与します。 RestartHydration を使用して FetchData コールバックから をfileSize変更する同期プロバイダーは、ファイルをスキャンしようとしているウイルス対策およびマルウェア対策ソフトウェアと、RestartHydration を使用して変更fileSizeしようとしているプロバイダーで発生する可能性のあるデッドロックを回避するために、ポリシーをオプトインALLOW_FULL_RESTART_HYDRATIONする必要があります。

メモ:この修飾子は、CfGetPlatformInfo から取得した PlatformVersion.IntegrationNumber が以上の0x500場合にのみサポートされます。

Population

作成ポリシーを使用すると、同期プロバイダーは、プラットフォームによってディレクトリとファイルの両方のプレースホルダー名前空間を作成する方法を制御できます。 現在、修飾子が定義されていない 3 つの主要なポリシーがあります。

ポリシー 説明
ALWAYS_FULL が選択されている場合 ALWAYS_FULL 、プラットフォームでは、完全なネーム スペースが常にローカルで使用できるものとします。 ディレクトリ列挙要求は同期プロバイダーに転送されません。
FULL 作成ポリシーでは FULL 、プラットフォームが完全に設定されていないディレクトリへのアクセスを検出すると、ユーザー要求を完了する前に、同期プロバイダーがディレクトリの下のすべてのエントリを返すように要求します。
PARTIAL 作成ポリシーでは PARTIAL 、プラットフォームが完全に設定されていないディレクトリへのアクセスを検出すると、ユーザー アプリケーションに必要なエントリのみを同期プロバイダーに要求します。

InSync

このポリシーにより、同期プロバイダーは InSync 、プラットフォームがプレースホルダーの同期中の状態をいつクリアするかを制御できます。 プラットフォームは、データ変更で常に同期中をクリアするだけでなく、現在、3 つのファイル属性 (ReadOnlySystemHidden) と 2 つのファイル時刻 (CreateTimeLastWriteTime) の任意の組み合わせの変更に対する同期をクリアできます。 これらのポリシーは、ファイルとディレクトリに個別に適用できます。

HardLink

既定では、プラットフォームでは、プレースホルダーにハード リンクを作成できません。 ただし、ハード リンクを処理できる同期プロバイダーは、ポリシーを使用してサポートを有効にするようにプラットフォームに ALLOWED 指示できます。 このポリシーを使用すると、同じ同期ルートまたは同期ルートがない限り、アプリケーションはファイル システムがサポートする限り多くのハード リンクを作成できます。 プラットフォームは、最初の out-of-sync-root リンクが導入されたときにプレースホルダーを強制的にハイドレートし、最後の同期ルート内リンクが削除されたときにプレースホルダーを通常のファイルに戻します。 ポリシーと互換性のないハードリンクの作成は、HRESULT ERROR_CLOUD_FILES_INCOMPATIBLE_HARDLINKSで失敗します。 ポリシーと互換性のないプレースホルダー操作も で ERROR_CLOUD_FILES_INCOMPATIBLE_HARDLINKS失敗します。

PlaceholderManagement

既定では、同期プロバイダーのみが同期ルートでプレースホルダー管理操作を実行できます。 同期プロバイダー以外のプロセスは、同期ルートが非アクティブな場合 (つまり、同期プロバイダーが同期ルートに接続されていない場合) にのみプレースホルダー管理操作を実行できます。これらのポリシーを有効にすると、同期プロバイダー以外のプロセスがアクティブな同期ルートでそれぞれのプレースホルダー管理操作を実行できるようになります。 CF_PLACEHOLDER_MANAGEMENT_POLICY_DEFAULT は既定のポリシーであり、接続されている同期プロバイダーのみがプレースホルダー管理操作を実行できるようにします。 以下の 3 つのポリシーは、任意の組み合わせで指定できます。

ポリシー 説明
CF_PLACEHOLDER_MANAGEMENT_POLICY_CREATE_UNRESTRICTED 登録中にこのポリシーを指定すると、 CfCreatePlaceholders を呼び出すことによって、任意のプロセスでアクティブな同期ルート内にプレースホルダーを作成できます。
CF_PLACEHOLDER_MANAGEMENT_POLICY_CONVERT_UNRESTRICTED 登録時にこのポリシーを指定すると、どのプロセスでも 、CfConvertToPlaceholder を呼び出すことによって、アクティブな同期ルート内のファイルまたはディレクトリをプレースホルダーに変換できます。
CF_PLACEHOLDER_MANAGEMENT_POLICY_UPDATE_UNRESTRICTED 登録中にこのポリシーを指定すると、すべてのプロセスで、API CfUpdatePlaceholder を使用してアクティブな同期ルート内のプレースホルダーを更新できます。

注意

これらのフラグは、CfGetPlatformInfo から取得した PlatformVersion.IntegrationNumber が以上の0x310場合にのみサポートされます。

要件

要件
サポートされている最小のクライアント Windows 10バージョン 1709 [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2016 [デスクトップ アプリのみ]
Header cfapi.h

こちらもご覧ください

CfCreatePlaceholders

CfConvertToPlaceholder

CfGetPlatformInfo