提供者概觀
提供者是一種使用者模式應用程式,可維護及瞭解備份資料存放區。 提供者會實作 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) | 回呼引數無效。 例如,列舉識別碼不會對應至使用中的列舉會話。 |
HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED) | 提供者想要防止發生重新命名或刪除等作業。 |
回呼也可能傳回任何可能從對 ProjFS API 的呼叫收到的錯誤。 如果回呼傳回的錯誤碼不在上述清單上,或不是來自 ProjFS API,ProjFS 會以STATUS_INTERNAL_ERROR的形式傳回檔案系統。