提供程序是维护并理解后备数据存储的用户模式应用程序。 提供程序实现 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返回到文件系统。