Библиотека Windows 7 Libraries .NET Sample Library (ч.3)

Автор: Topol Четверг, Май 3rd, 2012 Нет комментариев

Рубрика: Операционные системы

Итак, теперь вы знаете, что такое библиотеки, для чего они предназначены и как их наличие помогает пользователям и разработчикам. Это третья по счету статья в серии статей, посвященных библиотекам. В предыдущей статье мы рассказали, что они из себя представляют и насколько важную роль играют в повседневной работе пользователей. В сегодняшней статье мы расскажем о низкоуровневой архитектуре библиотек.

Начнём с обзора предшественников библиотек Windows 7 Windows Vista  обеспечивала новый способ хранения пользовательских данных и новые пространства имён в пользовательском профиле, известные как «Known Folders«. Это был следующий, эволюционный, шаг от стандартных папок, основанных на списке постоянных специальных идентификаторов (CSIDL). Значения в списке обеспечивали независимый от конкретной системы способ идентификации специальных папок, часто используемых различными приложениями. В Windows Vista мы заменили эти значения системой «Known Folders», где постоянная KNOWNFOLDERID идентифицирует каждую папку.

Оба варианта, CSIDL и Known Folders, включают поддержку специальных типов пользовательского содержимого: Документы, Музыка, Изображения и Видео, — эти папки являются частью профиля каждого пользователя. Библиотеки Windows 7 расширяют Known Folders каждого пользователя, например, папку документов, до библиотеки документов. Если вы посмотрите на KNOWNFOLDERID в SDK бета-версии Windows 7, вы увидите, что устанавливые по умолчанию библиотеки — это и есть Known Folders, что, безусловно, имеет смысл, поскольку мы хотим унифицировать способы программирования доступа к пользовательскому контенту. По определению, каждая библиотека содержит две «физических» папки:

  • Личные папки пользователя, отсортированные по типу (документы, изображения и т.д.) представленные по умолчанию папками Known Folder, которые включены в состав библиотек и хранятся в определяемом по умолчанию месте.
  • Папки общего доступа, отсортированные по типу

Для библиотек, создаваемых пользователем, этим местом хранения будет первая добавленная в библиотеку папка.

В каком-то смысле библиотека похожа на обычную папку. С пользовательской точки зрения библиотека выглядит и ведёт себя как папка. Но, в отличии от папки, библиотека собирает файлы, разбросанные по иным местам хранения, и представляет их в одном месте. Это небольшое, но очень важное отличие. Библиотеки не хранят пользовательские данные, они лишь наблюдают за папками с объектами и предоставляют пользователю доступ к ним, организуя их разными способами. Они также предоставляют пользователям и авторам программ доступ к списку папок и их содержимому. Например, вы пытаетесь сохранить текстовый документ из Notepad прямиком в библиотеку документов, но файл сохранён не будет. Что же произойдёт в таком случае? Текстовый документ будет сохранён в определённое по умолчанию место сохранения файлов для библиотеки документов, которым, опять же по умолчанию, является папка с документами, известная также, как папка «Мои Документы», и являющаяся элементом пользовательского профиля. Пользователь полностью контролирует это определённое по умолчанию место сохранения файлов так же, как и все остальные места, являющиеся частями библиотеки. Как показано на рисунке ниже, диалог управления библиотекой изображений (доступный прямо из пользовательского интерфейса Windows Explorer) содержит несколько папок на локальном жёстком диске моего ПК с одной из папок, определённых в качестве места хранения по умолчанию.


Диалог управления библиотекой

Важно знать, что библиотека документов не подменяет папку «Мои Документы» в Windows Vista. Она включает в себя эту папку как одно из мест хранения в библиотеке изображений. Имейте ввиду, что система CSIDL и её API поддерживаются из соображений сохранения совместимости. Однако мы не рекомендуем использовать их при создании новых программ. Предпочтительно использовать систему Known Folders.

Библиотеки в Windows 7 представляют собой XML-файлы с расширением «.library-ms». Имя файла — это имя библиотеки. Например, библиотека документов представлена файлом Documents.library-ms. Описания библиотек сохраняются в папке %appdata% RoamingMicrosoftWindowsLibraries (также известной как FOLDERID_Libraries). Вы можете использовать файлы для наблюдения за изменениями в библиотеках. Но об этом в следующих статьях.

Давайте углубимся в архитектуру библиотеки документов. Структура XML говорит сама за себя, но всё же необходимо пояснить некоторые элементы. Наверху располагается «заголовок», как мы его называем, с информацией:

Код:
<libraryDescription xmlns=»http://schemas.microsoft.com/windows/2009/library»>
<name>@shell32.dll,-34575</name>
<ownerSID>S-1-5-21-2127521184-1604012920-1887927527-4897363</ownerSID>
<version>4</version>
<isLibraryPinned>true</isLibraryPinned>
<iconReference>imageres.dll,-1002</iconReference>
<templateInfo>
<folderType>{7D49D726-3C21-4F05-99AA-FDC2C9474656}</folderType>
</templateInfo>

Корневой XML-элемент — libraryDescription, содержащий дочерние элементы, определяющие библиотеку:

  • <ownerSID> — элемент, определяющий идентификатор безопасности пользователя, создавшего библиотеку, чтобы изолировать библиотеку и защитить данные пользователя от несанкционированного доступа
  • <isLibraryPinned> — булева переменная, определяющая, прикреплен ли ярлык библиотеки к левой панели Windows Explorer, но не к панели задач
  • <version> — определяет версию содержимого библиотеки, отражающий число изменений файла определения библиотеки
  • <templateInfo> — необязательный контейнерный элемент, позволяющий автору указывать тип папки (документы, изображения и т.д.) для контроля организации представлений в Windows Explorer
  • <iconReference> определяет файл, из которого берутся изображения для ярлыков, используя стандартный стиль Windows Shell; например, <iconReference> C:Windowssystem32imageres.dll,-65 </iconReference>. Эта иконка представляет библиотеку

Пользователь не может поменять иконку библиотеки по умолчанию с помощью Windows Explorer и не может ассоциировать иконку с определённой пользователем библиотекой. Это можно сделать программно с помощью API. Но об этом в одной из следующей статей.

Ключевая часть XML — список мест хранения, представленных через библиотеку:

Код:
<searchConnectorDescriptionList>
<searchConnectorDescription publisher=»Microsoft» product=»Windows»>
<description>@shell32.dll,-34577</description>
<isDefaultSaveLocation>true</isDefaultSaveLocation>
<isSupported>true</isSupported>
<simpleLocation>
<url>knownfolder:{FDD39AD0-238F-46AF-ADB4-6C85480369C7}</url>
<serialized>MBAAAE…. </serialized>
</simpleLocation>
</searchConnectorDescription>
  • <searchConnectorDescriptionList> — содержит одну или больше поисковых меток, прикреплённых к действительным местам хранения, включённым в библиотеку
  • <searchConnectorDescription> содержит элемент <simpleLocation> описывающий место хранения, включённое в библиотеку
  • <url> определяет URL этого места хранения и предназначен для облегчения интерпретации человеком, разработчиками использоваться не может, поскольку по большей части эта информация быстро устаревает
  • <serialized> — это актуальное представление (Base64) места хранения, являющееся серийным объектом ShellLink

И еще однозамечание: программы ни в коем случае не должны открывать или изменять файлы описания библиотек. Вместо этого программам всегда следует использовать Shell-модель программирования или IShellLibrary API для использования и управления содержимым библиотек. Ну а в следующей статье мы рассмотрим Shell-модель программирования.

Источник: thevista.ru

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты