プロバイダーの概要
プロバイダーは、バッキング データ ストアを維持および理解するユーザー モード アプリケーションです。 プロバイダーは 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としてファイル システムに返します。