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 では、完全にハイドレートされないプレースホルダーになる可能性のあるプレースホルダー操作 (CfCreatePlaceholders、CfDehydratePlaceholder、脱水オプション付きの CfUpdatePlaceholder、脱水オプションを使用した CfConvertPlaceholder など) が含まれます。 |
FULL | が選択されている場合 FULL 、プラットフォームではプレースホルダーを脱水できます。 プラットフォームが脱水プレースホルダーへのアクセスを検出すると、要求が 1 バイトのみを要求している場合でも、ユーザー IO 要求を完了する前に、プレースホルダーの完全なコンテンツをローカルで使用できるようになります。 |
プログレッシブ | が選択されている場合 PROGRESSIVE 、プラットフォームではプレースホルダーを脱水できます。 プラットフォームが脱水プレースホルダーへのアクセスを検出すると、十分なデータが同期プロバイダーから受信されると判断されるとすぐに、ユーザー IO 要求が完了します。 ただし、プレースホルダーの完全なコンテンツがローカルで利用可能になるか、プレースホルダーの最後のユーザー ハンドルが閉じられるまで、プラットフォームはバックグラウンドで同期プロバイダーにプレースホルダー内の残りのコンテンツを要求し続けます。オプトイン PROGRESSIVE する同期プロバイダーでは、ハイドレーション コールバックがオフセット 0 から順番に到着するとは想定されないことに注意してください。 言い換えると、ポリシーを使用 PROGRESSIVE した同期プロバイダーは、プレースホルダーのランダム シークを処理することが期待されます。 |
PARTIAL | ポリシーは PARTIAL とよく似ています PROGRESSIVE 。 2 つの唯一の違いは、ポリシーを使用したバックグラウンド PARTIAL での継続的なハイドレートの欠如です。 |
現在、および AUTO_DEHYDRATION_ALLOWED
の 3 つのポリシー修飾子がサポートされています。 VALIDATION_REQUIRED
STREAMING_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 つのファイル属性 (ReadOnly、 System、 Hidden) と 2 つのファイル時刻 (CreateTime と LastWriteTime) の任意の組み合わせの変更に対する同期をクリアできます。 これらのポリシーは、ファイルとディレクトリに個別に適用できます。
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 |