提供者概觀
提供者是運行在使用者模式的應用程式,負責維護和理解底層資料存放區。 提供者會實作 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。