Обзор поставщика
Поставщик — это приложение в пользовательском режиме, которое поддерживает и понимает резервное хранилище данных. Поставщик реализует обратные вызовы ProjFS и использует API ProjFS для проецировать это хранилище данных в файловую систему, где оно отображается для пользователя в виде файлов и каталогов. Резервное хранилище поставщика может быть локальным для системы пользователя или находиться удаленно.
Проекция данных
Часть файловой системы, принадлежащей поставщику, в которой проецируются его данные, находится в каталоге, который называется корневым каталогом виртуализации. Когда поставщик хочет начать проецировать свои данные, он запускает "экземпляр виртуализации", который представляет собой объект, который управляет взаимодействием между поставщиком и ProjFS для набора файлов и каталогов, расположенных в определенном корне виртуализации. Все файлы и каталоги, которые являются потомками корневого каталога виртуализации, которые не были созданы локально пользователем, материализуются поставщиком через API ProjFS. Эти элементы начинаются как виртуальные файлы и каталоги, а это означает, что они не существуют на локальном устройстве хранения пользователя, а внедряются в результаты перечисления с помощью ProjFS. При открытии и чтении элементов ProjFS вызывает обратные вызовы, реализованные поставщиком для запроса данных, и поставщик использует API ProjFS для отправки данных в локальное хранилище, где они кэшируются для последующего доступа. Если представление пользователя резервного хранилища данных необходимо изменить, например, если содержимое хранилища данных изменилось, поставщик может использовать API ProjFS для обновления или удаления локальных элементов для отражения нового представления хранилища данных.
Коды возврата обратного вызова
Каждый обратный вызов содержит ряд возможных возвращаемых значений, относящихся к такому обратному вызову. В дополнение к возвращаемым значениям, перечисленным для данного обратного вызова, обратный вызов может также возвращать некоторые другие коды ошибок. Ниже приведен полный список кодов ошибок, которые может возвращать обратный вызов:
Код ошибки | Значение |
---|---|
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) | Поставщик хочет предотвратить выполнение операции, например переименования или удаления. |
Обратные вызовы также могут возвращать любые ошибки, которые они могут получать от вызовов API ProjFS. Если обратный вызов возвращает код ошибки, который отсутствует в предыдущем списке или не поступил из API ProjFS, ProjFS вернет его в файловую систему как STATUS_INTERNAL_ERROR.