Объектная модель VDS

[Начиная с Windows 8 и Windows Server 2012, COM-интерфейс службы виртуальных дисков замечается API управления хранилищем Windows.]

VDS предоставляет косвенный доступ к устройствам хранения на основе узла, таким как диски и устройства компакт-дисков, а также к дисковым массивам, управляемым аппаратными RAID-контроллерами. В то время как некоторые сущности хранилища моделировают физические устройства, другие моделировают виртуальные конструкции: тома, секции и т. д. Объекты, описанные в этом разделе, представляют как физические, так и виртуальные сущности VDS.

Приложения вызывают методы, предоставляемые этими объектами, а VDS вызывает соответствующего поставщика для выполнения запрошенных операций хранения. Приложение никогда не вызывает программу поставщика напрямую.

Классификация объектов

Как показано на следующем рисунке, программы поставщика программного обеспечения реализуют объекты, моделировающие сущности на основе узла; программы поставщика оборудования реализуют объекты, моделировающие внутренние и внешние аппаратные RAID-устройства; остальные общие объекты являются независимыми от поставщика или реализуются службой VDS. Шпиндель, который не является объектом VDS, — это термин для универсального носителя хранилища, который состоит из экстентов диска или диска.

Схема, на которую показана классификация объектов, определенных как

Чтобы узнать больше о поведении каждого объекта, выберите один из следующих разделов:

Создание объектов

Выполнение операций конфигурации и запросов, связанных с созданием объекта, может занять значительное время; Таким образом, VDS вызывает все методы асинхронно. Поставщик обнаружения возвращает все события завершения, ошибки или изменения состояния. Поставщики программного обеспечения также регистрируют все ошибки и значительные изменения состояния.

Удаление объекта

Несколько методов VDS удаляют или преобразуют объекты VDS. Вызывающий объект может содержать ссылку с помощью указателя интерфейса на удаленный объект после возврата метода. Когда вызывающий объект освобождает интерфейс, VDS удаляет объект .

Что касается удаления объектов, вызывающие объекты должны воздерживаться от вызова чего-либо, кроме метода IUnknown::Release в этих интерфейсах. Поставщик должен быть достаточно надежным, чтобы иметь дело с ошибочными абонентами; Если вызывающий объект вызывает метод для удаленного объекта, поставщик должен вернуть VDS_E_OBJECT_DELETED.

Инициализация службы

VDS предоставляет идентификатор класса (Clsid) для загрузчика службы и объектов службы, но только загрузчик службы Clsid является общедоступным. Инициализация службы происходит, когда поставщики, вызывающее приложение и служба выполняют следующие задачи:

  • Каждый новый поставщик вызывает метод IVdsAdmin::RegisterProvider во время установки для регистрации в VDS. Вызов создает раздел реестра в кусте SYSTEM, определяемый идентификатором GUID объекта поставщика. Этот ключ содержит clsid объекта поставщика, имя, версию и GUID версии поставщика.

    Примечание

    Идентификаторы GUID объекта поставщика являются постоянными; идентификаторы GUID объектов программного обеспечения и оборудования не являются.

     

  • Приложение вызывает функцию CoCreateInstance , передавая загрузчик службы Clsid в качестве аргумента. С помощью указателя на объект загрузчика службы приложение может запускать VDS локально или удаленно, передав имя нужного компьютера в качестве параметра в метод IVdsServiceLoader::LoadService .

  • Когда начальное приложение подключается к службе, VDS сначала вызывает CoCreateInstance для каждого clsid, найденного в разделе реестра, а затем вызывает метод IVdsProviderPrivate::OnLoad для каждого поставщика для инициализации программ.

Сведения о виртуальных дисках

IVdsAdmin::RegisterProvider

IVdsServiceLoader::LoadService

IVdsProviderPrivate::OnLoad