Windows 7 тепер всі пристрої доступні в два клацання
Тепер всі пристрої зібрані в одному місці і доступні в два клацання: "Пуск" -> "Пристрої та принтери". Пристрої відображаються фотореалістичними іконками, так що нам навіть не треба знати, як вони називаються. Подвійне клацання по іконці відкриє сторінку Device Stage, на якій представлені основні функції і параметри пристрою. Відзначимо, що папка "Пристрої та принтери" і Device Stage - це саме дві (а не одна) можливості, що доповнюють один одного. Майже все обладнання відображається в "Пристрої та принтери", але не в кожного є сторінка Device Stage.
Для знайомства з нововведеннями будемо використовувати звичайну флешку. За чотири кроки, поступово ускладнюючи приклад, ми створимо повноцінну сторінку Device Stage. Кожен крок - це готове до використання, реально працююче рішення. До статті додаються чотири папки, по одній на крок.
Як це працює
Звідки Windows бере інформацію про пристрій
devicemetadata-ms-файли автоматично завантажуються з сервера Microsoft, але їх можна покласти в папку% PROGRAMDATA% \ Microsoft \ Windows \ DeviceMetadataStore і вручну.
Файли опису створюються розробниками пристроїв і передаються Microsoft. Перед розміщенням на сервері Microsoft перевіряє, позначає і підписує отримані файли.
Зверніть увагу, Microsoft позначає і підписує файли опису. Пізніше ми до цього повернемося.
Як Windows зіставляє файл опису і пристрій
Який саме файл відповідає Цей пристрій, система визначає за допомогою:
Hardware ID
Будь-яке обладнання, сумісне з Windows, при підключенні повідомляє системі один або кілька ідентифікаторів Hardware ID. За допомогою цих ідентифікаторів Windows визначає, який драйвер потрібно використовувати для пристрою. Тепер Hardware ID застосовується і для пошуку відповідного devicemetadata-ms-файлу.
Model ID - це новий спосіб ідентифікації пристроїв, що з'явився в Windows 7. Model ID не використовується для пошуку драйверів, а значить, не служить заміною Hardware ID. Пристрою можна призначити тільки один Model ID. Звичайно, старі пристрої не мають Model ID і не повідомляють його при підключенні, але в нові моделі виробники можуть додати цю можливість.
Ще один приклад того, наскільки сильно Windows 7 відрізняється від попередників. Нова система ідентифікації пристроїв, яка зачіпає виробників - це не жарти.
Залежно від вибору розробника, в файлі опису вказується або список Model ID, або список Hardware ID тих пристроїв, до яких відноситься файл.
Крок 0: Підготовчі роботи
Підіб'ємо проміжний підсумок і накидаємо короткий план дій. Зараз наша флешка відображається в папці "Пристрої та принтери" іконкою за замовчуванням, ніякої специфічної інформації про будову не виводиться (рисунок 1).

Малюнок 1. Відображення флешки в папці "Пристрої та принтери" за замовчуванням
Щоб Windows могла показати більш повні дані про флешці, потрібно:
- дізнатися Hardware ID (або Model ID) флешки;
- підготувати файл опису;
- скопіювати файл опису в папку DeviceMetadataStore.
Дізнаємося Hardware ID флешки
У нашому випадку вибір між Hardware ID або Model ID абсолютно непринциповий. Візьмемо Hardware ID, так як у будь-якої флешки він точно є.
Щоб дізнатися Hardware ID, потрібно: в папці "Пристрої та принтери" натиснути правою кнопкою миші по іконці флешки -> Властивості -> вкладка Обладнання -> тип Дискові пристрої -> кнопка Властивості -> в новому вікні вкладка Відомості -> в випадаючому списку Властивість . ВД обладнання (рисунок 2).

Малюнок 2. Список Hardware ID
Вгорі знаходиться ідентифікатор, найточніше визначає пристрій, далі йдуть більш загальні ідентифікатори. Для наших цілей краще взяти самий верхній.
Як вже говорилося, файл .devicemetadata-ms - це насправді архів. Цей архів містить тільки XML-файли і картинки, розкладені по підпапках. Все описується за допомогою XML, так що нам доведеться багато з ним працювати. Залишимо метушню з різними видами блокнотів школярам і любителям "альтернативних рішень". Ми-то знаємо, що нічого кращого Visual Studio не придумали - залишається тільки додати потрібні XSD схеми в папку. \ Visual Studio \ Xml \ Schemas
Що б отримати XSD-схеми, потрібно встановити "Microsoft Device Experience Development Kit" (див. Посилання в кінці статті). Схеми знаходяться в каталозі. \ Microsoft Device Experience Development Kit 7R2 \ General \ XML Schemas \
CABARC.EXE
Для створення файлів .devicemetadata-ms потрібна утиліта CABARC.EXE. Окремо її скачати можна, вона йде в комплекті з "Device Stage Visual Editor Tool". Так, так, для виготовлення сторінок Device Stage є GUI-додаток. Але його ми використовувати не будемо. І не тому, що нам чужий комфорт, або ми зневажаємо все, чим можуть користуватися необізнані непрограмістів (як це часто роблять затяті войовничі прихильники не-Windows-систем). Просто робота "вручну" дасть нам більше гнучкості і краще розуміння процесу.
Крок 1: Міняємо іконку в папці "Пристрої та принтери"
У першому кроці ми створимо найпростіший файл опису, який не використовує можливості Device Stage. Немає ніякої необхідності приводити в тексті статті повні листинги XML-файлів - файли для першого кроку можна знайти в папці "example1", що додається до статті. Тому в лістингах будуть показані тільки ті частини, на які потрібно звернути увагу, найголовніше виділено.
Структура архіву .devicemetadata-ms
На малюнку 3 представлена структура архіву .devicemetadata-ms. Як назва архіву повинен використовуватися глобальний унікальний ідентифікатор (GUID). Наприклад: 0055f9a7-ffef-4017-be40-e1e118fa4e86.devicemetadata-ms.

Малюнок 3. Структура архіву .devicemetadata-ms, який не підтримує Device Stage
З малюнка 3 видно, що потрібно створити три XML-файла (PackageInfo.xml, DeviceInfo.xml, WindowsInfo.xml) і одну іконку.
PackageInfo.xml
Як і випливає з назви, цей файл використовується для опису .devicemetadata-ms-пакета (файлу опису). У ньому вказується така інформація, як час створення пакету, використовувані XML-схеми, локалізація за замовчуванням. Але найголовніше - там вказується список Hardware ID (або список Model ID), c якими пов'язаний пакет.
Зверніть увагу на приставку "DOID", яку потрібно вказати перед Hardware ID. Є ще приставка "SFDOID" (Single Function Device), але вона зараз не використовується і зарезервована для майбутніх версій Windows. Ці приставки вказують на те, скільки функцій виконує пристрій - одну або кілька. Наприклад, часто зустрічаються багатофункціональні пристрої, що поєднують в собі принтер, факс і сканер. Трохи пізніше ми ще раз поговоримо про функції пристрою.
WindowsInfo.xml
Тут описуються правила відображення іконки і сторінки Device Stage.
ShowDeviceInDisconnectedState - показувати пристрій в папці "Пристрої та принтери", коли пристрій не підключений. Іконка непідключеного пристрою буде більш блідою (див. Малюнок 1). До речі, задати свою окрему іконку для відключеного стану обладнання не можна.
LaunchDeviceStageOnDeviceConnect - відкривати сторінку Device Stage автоматично при підключенні пристрою.
LaunchDeviceStageFromExplorer - відкривати Device Stage за подвійним клацанням по іконці.
DeviceInfo.xml
Краще один раз побачити, ніж сто разів почути (рисунок 4).

Малюнок 4. Опис DeviceInfo.xml
Створення архіву .devicemetadata-ms
Тепер у нас є всі необхідні файли (опустимо процес отримання іконки). Створимо наступну структуру директорій (лістинг 3):
Перераховувати можливі типи команд (атрибут type вузла command) ми не будемо - адже у нас є Visual Studio з підключеними XSD-схемами, яка виводить підказки. Начебто додаткових пояснень лістинг 12 не вимагає.
Все готово, залишається тільки додати завдання в behavior.xml. З лістингу 13 видно, що саморобна завдання додається точно так же, як вбудована в Windows.
Що далі
Це дійсно дуже сумно. Чому у нас немає можливості використовувати свої сторінки Device Stage? Зрозуміло, що причина цього є. Але, напевно, можна знайти і компроміс. Якщо ви знаєте, як повідомити Microsoft таку пропозицію, зв'яжіться зі мною.
За найскромнішими прикидками, за бортом залишилися:
- Створення контекстних завдань, що відкриваються по кліку правої кнопки миші по іконці пристрою в папці "Пристрої та принтери", а також створення своїх сторінок з властивостями. Дані питання розглянуті в "Devices and Printers - Extensibility Guide".
- Питання локалізації.
- Створення своїх саморобних статусів пристрою. Почати вивчення можна з документа "Microsoft Device Experience Development Kit 7R2 \ Portable Devices \ Documentation \ Windows 7 Device Stage Portable Device Class Development Guide.docx"
- Найцікавіша тема: взаємодія з пристроєм з web-сайту через Device Stage (див. Той же документ, що і пунктом вище).
Не можна не відзначити високу якість навчальних матеріалів Microsoft. Опис дуже повне, добре структуроване і написано зрозумілою мовою.