プロバイダーの概要

プロバイダーは、バッキング データ ストアを維持および理解するユーザー モード アプリケーションです。 プロバイダーは ProjFS コールバックを実装し、ProjFS API を使用して、このデータ ストアをファイル とディレクトリとしてユーザーに表示されるファイル システムに投影します。 プロバイダーのバッキング ストアは、ユーザーのシステムに対してローカルであるか、リモートに配置されている可能性があります。

データプロジェクション

プロバイダーが所有するファイル システムの部分 (データが投影される場所) は、"仮想化ルート" と呼ばれるディレクトリにルート化されます。 プロバイダーがデータの投影を開始すると、"仮想化インスタンス" が開始されます。これは、特定の仮想化ルートの下にある一連のファイルとディレクトリのプロバイダーと ProjFS 間の通信を管理するオブジェクトです。 ユーザーによってローカルに作成されていない仮想化ルートの子孫であるファイルとディレクトリは、ProjFS API を介してプロバイダーによって具体化されます。 これらの項目は、仮想ファイルとディレクトリとして開始されます。つまり、ユーザーのローカル ストレージ デバイスには存在しませんが、ProjFS によって列挙結果に挿入されます。 アイテムを開いて読み取ると、ProjFS はプロバイダーによって実装されたコールバックを呼び出してデータを要求し、プロバイダーは ProjFS API を使用して、そのデータを後続のアクセス用にキャッシュされたローカル ストレージに送信します。 たとえば、データ ストアの内容が変更された場合など、バッキング データ ストアのユーザーのビューを変更する必要がある場合、プロバイダーは ProjFS API を使用してローカル アイテムを更新または削除して、データ ストアの新しいビューを反映できます。

コールバックリターンコード

各コールバックには、そのコールバックに固有の可能な戻り値の数が一覧表示されます。 コールバックは、特定のコールバックに対して一覧表示されている戻り値に加えて、他の特定のエラー コードも返す場合があります。 これは、コールバックが返す可能性があるエラー コードの完全な一覧です。

エラー コード 説明
S_OK 操作が成功しました
E_OUTOFMEMORY 必要なメモリを割り当てませんでした。
HRESULT_FROM_WIN32(ERROR_IO_PENDING) プロバイダーは、後で操作を完了することを望みます。
HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER) コールバックに渡されたバッファーが小さすぎます。
HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) ファイルはプロバイダーのバッキング ストアに存在しません。
HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER) コールバック引数が無効です。 たとえば、列挙 ID はアクティブな列挙セッションに対応していません。
HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED) プロバイダーは、名前の変更や削除などの操作が行われるのを防ぐことを望みます。

コールバックは、ProjFS API への呼び出しから受け取る可能性のあるエラーも返す場合があります。 コールバックが、前の一覧にないエラー コード、または ProjFS API から取得されていないエラー コードを返す場合、ProjFS はSTATUS_INTERNAL_ERRORとしてファイル システムに返します。