Установка компонента .NET Framework в ОС Windows Server

Антон Белов

24 октября 2019

Обновлено 23 июня 2022

Windows

Программная платформа .NET Framework была разработана компанией Microsoft для того, чтобы дать возможность разработчикам абстрагироваться от системного окружения конкретного компьютера, на котором будет исполняться их программа. В этом случае не будет иметь значения какая операционная система установлена, какой процессор и другое аппаратное обеспечение используется — главное, чтобы на компьютере была установлена среда .NET Framework, которая обеспечивает исполнение кода и взаимодействие с необходимыми компонентами окружения. Для работы с этой платформой были разработаны или адаптированы специальные языки программирования C#.NET, VB.NET, C++.NET, J#.NET, F#.NET и т.д.

Достаточно большое количество программ написано под эту платформу, поэтому нужно знать, как установить ее на сервер.

.NET Framework актуальной версии (4.x) уже включен на серверах Windows, развернутых из наших шаблонов. Если требуется включить предыдущую версию (3.5) или же сервер развернут из собственного шаблона/установлен из дистрибутива, можно воспользоваться нижеследующей инструкцией.

Установка компонента .NET Framework в ОС Windows Server

Включение компонента .NET Framework в OC Windows Server возможно с использованием Windows Update или с использованием локального хранилища компонентов (потребуются файлы с дистрибутива ОС). Рассмотрим оба варианта.

Вариант 1

Самый простой и быстрый способ, при наличии подключения к сети Интернет, это установка компонента .NET Framework 3.5 с сервера Microsoft Windows Update (актуально для Windows Server 2008R2/2012R2/2016/2019).

Запускаем PowerShell с правами администратора: Пуск — правый клик по ярлыку Windows Powershell — Запуск от имени Администратора (Run as Administrator):

В открывшемся окне PowerShell набираем команду:
DISM /Online /Enable-Feature /FeatureName:NetFx3 /All

Eсли установка производится на Windows Server 2008R2:
DISM /Online /Enable-Feature /FeatureName:NetFx3

Нажимаем Enter и ожидаем завершения установки:

Вариант 2

Для установки с использованием локального хранилища (или дистрибутива ОС Windows) через графический интерфейс (Windows Server 2012R2/2016/2019 ):

Запускаем Диспетчер серверов (Server Manager), нажимаем Управление (Manage) – Добавить роли и компоненты (Add Roles and Features):

В появившемся окне нажимаем Далее (Next):

В окне Выбор типа установки (Select installation type) убеждаемся, что выбран пункт установка ролей и компонентов (Role-based or feature-based installation), нажимаем Далее (Next):

Выбор целевого сервера (Select destination server) – проверяем, что в списке выбран требуемый сервер, нажимаем Далее (Next):

Пропускаем Выбор ролей сервера (Select server roles), нажимаем Далее (Next):

В окне Выбор компонентов (Select features) находим в списке требуемую версию . NET Framework и отмечаем галкой, нажимаем Далее (Next):

В случае установки актуальной версии .NET Framework (4.x) в данном окне можно нажимать кнопку Установить (Install), после чего начнется процесс инсталляции из локального хранилища. Если же мы устанавливаем предыдущую версию (3.5), то появится предупреждение, что необходимые для установки файлы отсутствуют и нужно указать путь к данным файлам. Понадобится либо дистрибутив установленной версии дистрибутива ОС Windows, либо копия папки SourcesSxS с этого дистрибутива. Нажимаем на ссылку Указать альтернативный исходный путь (Specify an alternate source path):

В открывшейся форме указываем путь к папке SourcesSxS дистрибутива текущей версии (или копии этой папки – в нашем примере папка скопирована на локальный диск в c:tempsxs), нажимаем ОК:

Вернувшись на форму Подтверждение компонентов установки (Confirm installation selections) нажимаем Установить (Install) и ожидаем окончания установки. Закрываем форму:

Установка на Windows server 2008R2 также производится через Диспетчер серверов:

Запускаем Диспетчер серверов, переходим в раздел Компоненты, нажимаем Добавить компоненты:

В списке компонентов находим и ставим галку на . NET Framework, нажимаем Далее:

В следующем окне нажимаем кнопку Установить:

Дожидаемся успешного окончания установки и закрываем окно:

Установка актуальной версии .NET Framework (4.x) в ОС Windows Server 2008R2 через добавление компонентов не работает. Для инсталляции потребуется скачать автономный установщик с сайта Microsoft (например, по ссылке https://www.microsoft.com/ru-RU/download/details.aspx?id=55167) и установить как обычную программу.

Оценка:

2 из 5

Аverage rating : 2.9

Оценок: 7

220140 Минск ул. Домбровская, д. 9

+375 (173) 88-72-49

700 300

ООО «ИТГЛОБАЛКОМ БЕЛ»

220140 Минск ул. Домбровская, д. 9

+375 (173) 88-72-49

700 300

ООО «ИТГЛОБАЛКОМ БЕЛ»

700 300

Включить .NET Framework 3.5 на Windows Server 2012 R2

  • 4 апреля 2018

Инструкция CMD

  1. Вставляем винду в D:
  2. Выполняем команду под админом:
    dism /online /enable-feature /featurename:NetFX3 /all /Source:d:\sources\sxs /LimitAccess

Инструкция GUI

  1. Вставляем винду в D:
  2. Открываем Add Roles and Features.

     
  3. В оснастке Add Roles and Features отмечаем нужную галку .NET Framework 3.5 Features.

     
  4. Next. Открывается окно, где нам предлагают указать alternate path.

     
  5. Кликаем на ссылку Specify an alternate source path.

     
  6. Указываем путь d:\sources\sxs:

     
  7. Ok. Идёт установка.

Если не ставится с ошибкой

The source files could not be found.

Значит, локализация Windows не соответствует локализации дистрибутива. Найдите родной дистрибутив. Если вы уверены, что дистрибутив нормальный, значит, кто-то поставил вторую локализацию — снесите её.

Control Panel > Clock, Language, and Region > Language

На фото видно, что для русского языка Windows display language: Available. Значит, его кто-то заинсталлил. (Я себе сам ставил, помню.) Жмакаем Option напротив русского языка:

Кликаем Uninstall language pack.

Ждём. Сервер попросит перезагрузку.

После перезагрузки снова пробуем установить Framework 3.5 — теперь операция проходит успешно.

Теги

  • Windows
  • cmd

💰 Поддержать проект

Похожие материалы

Олег
  • 5 апреля 2019
  • Подробнее о MySQL 8 — mysqldump в командной строке

Разрешаем запускать mysqldump в командной строке. MySQL 8 установлен в Windows Server 2016. Понадобилось мне как-то написать скрипт для резервного копирование баз mysql. Всё что нужно сделать, это отредактировать переменную PATH.

Теги

  • sql
  • Windows
  • cmd
Олег
  • 7 февраля 2018
  • Подробнее о Port-forwarding перенаправление портов в Windows

Начиная с Windows XP в операционной системе Windows имеется встроенная возможность перенаправления сетевых портов — port-forwarding.

Более того, любое входящее TCP соединение можно перенаправить не только на другой порт, но и на другой IP адрес.

Теги

  • Windows
  • cmd
  • network
Олег
  • 5 апреля 2019
  • Подробнее о MySQL 8 — резервное копирование BAT файлом

Накидал маленький BAT скрипт для резервного копирование MySQL баз. Внесите свои данные и через scheduler настройте расписание резервного копирования.

Теги

  • sql
  • Windows
  • cmd
  • special

Почитать

Установка Windows 10 на ноутбук Framework DIY Edition

  • Ноутбук BackFramework 13
  • Полный экран
  • Опции
  • Скачать PDF
  • Встроить это руководство

Автор: Нирав Патель (и 4 других участника)

  • Избранное: 2
  • Завершено: 20

Сложность

Easy

Шаги

8

Требуемое время

00:10:00 — 00:20:00

Секции

1

  • Установка Windows 10 на ноутбук Framework DIY Edition 8 шагов

Флаги

0

  • Ноутбук BackFramework 13
  • Полный экран
  • Опции
  • Скачать PDF
  • Встроить это руководство

Введение

Мы рекомендуем установить Windows 11 для обеспечения максимальной производительности и долгосрочной поддержки Microsoft, но Windows 10 также поддерживается на ноутбуках Framework с процессорами Intel Core 11-го поколения. Для процессоров Intel Core 12-го поколения мы настоятельно рекомендуем использовать Windows 11, поскольку именно ее мы тщательно протестировали и поддерживаем. Вы можете использовать ключи продукта Windows 10 для активации Windows 11.

    Детали не указаны.

      • Перед установкой Windows 10 Home или Pro на свой ноутбук Framework DIY Edition убедитесь, что вы установили память, хранилище и WiFi. Вот ссылка на руководство по быстрому запуску Framework Laptop DIY Edition, где мы рассмотрим все шаги, чтобы начать работу.

      • Ключ продукта для Windows 10 Home или Pro

      • org/HowToDirection»>

        Флэш-накопитель USB размером не менее 8 ГБ

      • Другой компьютер для загрузки установщика Windows 10 с

      • Комплект драйверов для ноутбуков Framework

      • Не забудьте установить пакет драйверов после завершения установки Windows 10. Поскольку аппаратное обеспечение ноутбука Framework настолько новое, в новой установке Windows нет необходимых драйверов.

      • org/HowToDirection»>

        Если вы приобрели Windows 10 Home или Pro в Framework, войдите в свою учетную запись Framework и перейдите в раздел «Цифровые покупки», чтобы активировать ключ продукта для Windows 10 Home или Pro.

      • После того как вы погасите ключ продукта для Windows 10 Home или Pro, вы не сможете вернуть его для возврата средств.

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

      • org/HowToDirection»>

        Загрузите и запустите Microsoft Windows 10 Media Creation Tool.

      • Если вы перейдете на эту страницу из системы Linux или Mac, вам будет предложено загрузить Windows .iso вместо Media Creation Tool. Вместо этого мы рекомендуем найти компьютер с Windows, чтобы создать программу установки, чтобы избежать каких-либо проблем.

      • На веб-странице Microsoft нажмите Использование инструмента для создания установочного носителя (USB-накопитель, DVD-диск или файл ISO) для установки Windows 10 на другой ПК и выполните перечисленные там шаги, чтобы завершить создание установочного носителя .

      • org/HowToDirection»>

        Выключите ноутбук Framework.

      • Подключите загрузочный USB-накопитель к ноутбуку Framework.

      • Включите ноутбук Framework. Если устройство хранения, установленное на вашем ноутбуке, пустое, оно загрузится непосредственно в установщик Windows 10.

      • (необязательно) Если на вашем ноутбуке установлена ​​операционная система, вам нужно несколько раз нажать F12 во время загрузки, чтобы выбрать загрузочное устройство.

      • org/HowToDirection»>

        Вы попадете в меню выбора загрузки BIOS, показанное на снимке экрана. Используйте клавиши со стрелками, чтобы выбрать вариант загрузки для USB-накопителя, а затем нажмите Enter.

      • Выберите соответствующие параметры в раскрывающемся меню на первом экране, а затем нажмите «Установить сейчас» на втором экране.

      • Установщик Windows 10 использует резервный драйвер для сенсорной панели, поэтому сенсорная панель может работать несколько нестабильно. После завершения установки и установки пакета драйверов ноутбука Framework тачпад будет работать нормально.

      • org/HowToDirection»>

        Курсор может появиться только после касания сенсорной панели в течение нескольких секунд. Если курсор по-прежнему не появляется, резко выключите ноутбук, удерживая кнопку питания, пока система не выключится. Затем подождите 15 секунд и снова включите питание. Вы также можете использовать внешнюю USB-мышь для завершения установки.

      • Вы можете ввести ключ продукта сейчас или нажать «У меня нет ключа продукта», чтобы ввести его после завершения установки.

      • Если вы вводите ключ продукта позже, выберите версию Windows 10, которую вы хотите установить. Обычно это «Windows 10 Домашняя» или «Windows 10 Pro».

      • org/HowToDirection»>

        После этого вы можете принять условия лицензии. На следующей странице выберите вариант «Выборочная установка: установить только Windows (дополнительно)», и теперь Windows начнет процесс установки. Ваш ноутбук должен перезагрузиться после завершения.

      • Если ваш USB-накопитель большой, программа установки может предложить вам выбрать, на какой диск установить Windows 10. Выберите внутренний диск (обычно это диск 0), а не тот, который помечен как «ESD».

      • Программа установки перезагрузится и проведет вас через процесс установки Windows 10.

      • org/HowToDirection»>

        Если вы используете модуль Intel® Wi-Fi 6E AX210 в своем ноутбуке Framework DIY Edition, Windows 10 не поставляется с драйвером по умолчанию. Вы можете пропустить экран настройки сети, нажав «У меня нет Интернета», а затем подключиться к сети после установки пакета драйверов для ноутбуков Framework.

      • Обратите внимание: если вы хотите создать локальную учетную запись пользователя вместо входа в учетную запись Microsoft, вам необходимо выбрать «У меня нет Интернета» на экране выбора сети. Если вы подключаетесь к сети, установщик вместо этого попросит вас войти в учетную запись Microsoft.

      • Если вы продолжите без Интернета, вы выберете «Продолжить с ограниченной настройкой» на следующем экране.

      • Продолжайте следовать инструкциям на экране для завершения установки.

      • После этого на ноутбуке загрузится новая установка Windows 10.

      • Теперь вам нужно установить пакет драйверов ноутбука Framework, чтобы ваш ноутбук работал в полную силу.

      • Сначала загрузите пакет драйверов для ноутбуков Framework на флэш-накопитель USB. Вы можете использовать тот же, который вы ранее использовали для установки Windows 10. Вам нужно будет использовать другой компьютер для загрузки, если у вас еще нет доступа к сети на вашем ноутбуке Framework.

      • Вставьте флэш-накопитель USB с комплектом драйверов Framework для ноутбука в свой ноутбук Framework.

      • Перейдите в папку, в которой находится пакет драйверов ноутбука Framework, и дважды щелкните его. Нажмите «Да» на «Вы хотите разрешить этому приложению вносить изменения в ваше устройство?» подсказка, которая появляется.

      • Пакет драйверов ноутбука Framework автоматически установит все драйверы, необходимые для использования ноутбука Framework. Установка займет несколько минут. В конце установки вам будет предложено нажать любую клавишу для перезагрузки. Нажмите любую клавишу.

      • После перезагрузки ноутбука все готово! Вы можете подключиться к сети, если вы не сделали этого ранее, а также активировать Windows, если вы не ввели ключ продукта во время установки.

      • Обязательно запустите Центр обновления Windows после подключения к сети, чтобы убедиться, что у вас установлены последние обновления безопасности. В будущем вы также сможете получать обновления драйверов и встроенного ПО через Центр обновления Windows.

      • Обязательно обновите прошивку вашего ноутбука до последней доступной версии, чтобы обеспечить оптимальную производительность и стабильность. Мы также рекомендуем обновить прошивку вашего твердотельного накопителя, так как мы видели проблемы в некоторых версиях SN850. Инструкции по обновлению встроенного ПО Western Digital SSD доступны здесь.

    Почти готово!

    • Чтобы приобрести ноутбук Framework, посетите веб-сайт Framework
    • Хотите узнать больше о ноутбуке Framework? Загляните в наш блог
    • Если у вас есть какие-либо вопросы или сомнения, обращайтесь в службу поддержки Framework

    Заключение

    • Чтобы приобрести ноутбук Framework, посетите веб-сайт Framework
    • Хотите узнать больше о Framework Ноутбук? Загляните в наш блог
    • Если у вас есть какие-либо вопросы или проблемы, не стесняйтесь обращаться в службу поддержки Framework

    Отменить: я не завершил это руководство.

    20 других людей завершили это руководство.

    Автор

    с 4 другими участниками

    Команда

    Представляем платформу модулей драйверов — блог разработчиков Windows

    Команда Microsoft Devices рада объявить о выпуске платформы с открытым исходным кодом для разработчиков драйверов Windows — Driver Module Framework (DMF) . С DMF вы можете не только легко разрабатывать простые и структурированные драйверы Windows Driver Framework (WDF), но и совместно использовать код среди своих драйверов.

    История вопроса

    За прошедшие годы организация Surface разработала множество продуктов, таких как Pro, Studio, Laptop, Book, с уникальными, инновационными аппаратными возможностями. Чтобы осветить эти возможности, нам часто приходилось писать драйвера и прошивки. Несмотря на то, что эти продукты имели общие черты с точки зрения того, как они взаимодействуют с оборудованием, отдельные группы разработчиков работали изолированно и создавали свои собственные драйверы с нуля или копировали их на основе своего знания существующего кода и модифицировали в соответствии со своими потребностями. Это действительно помогло решить их непосредственные бизнес-задачи, но привело к огромному дублированию кода и накладным расходам на обслуживание. Разработчики с разным уровнем опыта часто создавали множество разных решений для решения одной и той же проблемы, а коду не хватало структуры и качества.

    Около трех лет назад команда решила комплексно взглянуть на драйверы, написанные для различных продуктов Surface, и начала работу по структурированию кода таким образом, чтобы обеспечить максимальное повторное использование кода с целью повышения эффективности, удобства обслуживания и масштабируемости. команд для создания новых продуктов.

    Мы начали с того, что разбили отдельные функции драйверов на общую кодовую базу. Эта повторяющаяся работа привела к созданию DMF: расширения WDF, которое предоставляет вам библиотеку новых объектов WDF, называемых модулями DMF. Модули позволяют структурированно взаимодействовать друг с другом, WDF и оборудованием.

    Сегодня все драйверы WDF в команде написаны с использованием DMF. Модули хорошо протестированы и могут быть повторно использованы или расширены позже для соответствия новым требованиям. Помимо преимуществ хорошо спроектированных драйверов, исправления ошибок теперь эффективны. Исправление ошибки в модуле автоматически применяется ко всем драйверам, созданным с использованием модуля.

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

    Архитектура ДМФ

    Начнем с типичной конструкции драйвера WDF.

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

    Если вы хотите повторно использовать, например, код FIFO в другом драйвере. Вам необходимо понять сложное взаимодействие между модулями, прежде чем извлекать код и поля, используемые для хранения состояния. Часто это чревато ошибками.

    Теперь давайте улучшим архитектуру с помощью DMF. Здесь драйвер создается с использованием клиентского модуля и нескольких готовых универсальных служебных модулей. Мы будем ссылаться на код, который использует модуль в качестве клиентского драйвера. Между WDF и отдельными модулями существует тонкий уровень арбитража (DMF) для привязки модулей и отправки событий WDF каждому модулю. Теперь модули взаимодействуют друг с другом и с клиентским драйвером четко определенным образом, как показано стрелками. Вместо того, чтобы все модули совместно использовали контекст устройства, каждый из них использует свою собственную область контекста для поддержания своего состояния.

    Вот некоторые ключевые различия между традиционным драйвером WDF и драйвером WDF на основе DMF:

    • WDF взаимодействует с DMF, а DMF взаимодействует с драйвером.
    • Контекст устройства (показан зеленым цветом) существует независимо в каждом модуле и в коде драйвера клиента. Каждый меньший контекст устройства содержит только те элементы, которые необходимы для этого модуля. Ни один модуль не может получить доступ к контексту устройства другого модуля.
    • Обратные вызовы WDF (показаны красным) теперь существуют независимо в каждом модуле и в клиентском коде. WDF обращается к драйверу клиента. DMF перехватывает этот вызов и отправляет его каждому модулю в дереве созданных модулей. Каждый модуль обрабатывает каждый обратный вызов по своему усмотрению. Наконец, DMF отправляет обратные вызовы обратным вызовам клиентского драйвера.
    • Наконец, обратите внимание на стрелки. Стрелки конкретно показывают поток между модулями и клиентским кодом. В этом примере клиентский код может взаимодействовать только с тремя модулями: ACPI, Button и Stream. Он не может взаимодействовать с GPIO, FIFO, List или Thread. ACPI не может обмениваться данными с FIFO и т. д. Даже не глядя на исходный код, мы хорошо понимаем, как данные передаются в этом драйвере.

    Подводя итог, можно сказать, что каждый модуль представляет собой автономный единый блок. У него есть собственный код, контекст и обратные вызовы. Это упрощает повторное использование кода. Такая организация водителей решает многие проблемы.

    Дизайн модулей DMF

    DMF следует дизайну и схемам взаимодействия WDF. DMF не заменяет WDF и не запрещает драйверу напрямую использовать интерфейсы ОС. DMF упрощает разбиение задач, которые должен выполнять драйвер устройства, на более мелкие блоки. Затем эти меньшие автономные единицы, выполняющие одну задачу, могут быть записаны как модули.

    1. Модули DMF используют шаблоны взаимодействия, совместимые с существующими объектами WDF. Как и любой объект WDF, модуль DMF:

    • Имеет структуру CONFIG, методы и обратные вызовы событий.
    • Может быть связан с другими объектами WDF для управления сроком службы.

    2. Модули в клиентском драйвере организованы в древовидную структуру, которая поддерживается ядром DMF. Ядро отвечает за создание, открытие, закрытие и уничтожение модулей. В свою очередь, каждый модуль отвечает за выделение и освобождение своих собственных ресурсов.

    3. Модули, являющиеся родственными друг другу, не могут обмениваться данными напрямую. Только модули в отношениях родитель-потомок могут общаться друг с другом; только родительские модули могут взаимодействовать со своими дочерними модулями (за исключением обратных вызовов).

    4. Модули могут быть расширены для удовлетворения новых требований, или новый модуль может быть создан путем объединения нескольких модулей.

    5. Дизайн модуля аналогичен классу в шаблоне объектно-ориентированного программирования. Если вы знакомы со средой выполнения драйверов (DXE) универсального расширяемого интерфейса прошивки (UEFI), вы найдете сходство с модулями.)

    Модуль DMF

    Аналогичная концепция C++
    Модуль С++ Объект
    Контекст модуля Частные данные объекта C++ (члены). Кроме того, что важно, это аналогично «контексту устройства» драйверов WDF.
    Конфигурация модуля Параметры конструктора объекта C++
    Публичные методы модуля Публичные функции объекта C++
    Частные методы модуля Частные функции объекта C++
    Рукоятка модуля С++ указатель «этот»
    Драйвер клиента Код, который создает экземпляр объекта C++.

    6. Каждый модуль имеет свои замки. Каждый модуль отвечает за блокировку своего собственного частного контекста. Таким образом, блокировка детализирована, но в то же время эффективна и проста для понимания.

    7. Модули могут использоваться драйвером клиента или другими модулями; не зависят от кода, который их использует.

    8. Модули могут использовать любое количество дочерних модулей. Дочерние модули, в свою очередь, могут использовать любое количество дочерних модулей.

    9. DMF предоставляет реализации по умолчанию для многих подпрограмм драйверов, таких как DriverEntry, AddDevice, создание очереди WDF, поэтому простой драйвер (также известный как драйвер контейнера) можно создать с минимальным количеством кода.

    10. Драйверу клиента нужно только создать экземпляр модуля, который ему нужен. Требуемые дочерние модули (если они есть) автоматически создаются DMF от имени драйвера.

    11. Модули поддерживают наследование. Если вы хотите изменить или добавить возможности в существующий модуль X, легко создать модуль Y, который является родительским для X. Затем Y повторно использует X, но при необходимости предоставляет другие функции.

    12. Модули могут напрямую получать все обратные вызовы WDF, полученные драйвером клиента.

    13. DMF поддерживает все драйверы WDF: KMDF/UMDF, драйверы шины/фильтра/функции, драйверы минипорта, драйверы C/C++.

    14. Вы можете легко интегрировать DMF в свои существующие драйверы или легко написать новые драйверы с нуля.

    Модули DMF

    Текущая версия DMF включает следующие модули:

    Модули для управления буфером

    Описание
    DMF_BufferPool                                 Предоставляет список из нуля или более предварительно выделенных буферов с проверкой границ и логикой таймера для управления временем жизни буферов. Это фундаментальный блок, используемый многими другими модулями.
    DMF_BufferQueue Эта структура данных состоит из двух экземпляров DMF_BufferPool, обеспечивающих шаблон использования производителя/потребителя.
    DMF_PingPongBuffer Обеспечивает «пинг-понговый» буфер, который позволяет Клиенту считывать из одной части буфера, которая содержит полностью переданные/обработанные данные, в то время как другая часть кода Клиента продолжает заполнять новый частично заполненный буфер.
    DMF_RingBuffer Обеспечивает классическую структуру данных кольцевого буфера.
    DMF_ThreadedBufferQueue Позволяет клиенту ставить работу в очередь. Затем эта работа обрабатывается синхронно. Клиент может дополнительно дождаться завершения работы. Это хороший пример того, как модули могут использовать другие модули для создания более сложных модулей.

     

    Модули для управления задачами

    Описание
    DMF_QueuedWorkitem Этот модуль расширяет примитив WDFWORKITEM двумя способами: 1. Позволяет клиенту ставить в очередь рабочие элементы, даже если они уже поставлены в очередь. 2. Позволяет поставить в очередь конкретный контекст вызова.
    DMF_ScheduledTask Позволяет клиенту указать, что операция должна выполняться один раз либо за время существования машины, либо за текущий цикл загрузки.
    DMF_Thread Этот модуль создает поток и связанное с ним событие «остановка», событие «готовность к работе» и предоставляет функцию обратного вызова для клиента. Внутренняя функция обратного вызова ожидает вышеуказанных событий и вызывает обратный вызов клиента, когда установлено событие «готовность к работе».

     

    Модули для уведомлений

    Описание
    DMF_NotifyUserWithEvent Позволяет драйверу клиента легко настроить событие в режиме ядра, которое также доступно в пользовательском режиме.
    DMF_NotifyUserWithRequest Позволяет клиенту уведомлять пользовательский режим о событиях, используя классический шаблон IOCTL из пользовательского режима. Данные могут быть отправлены вместе с событием.

     

    Модули для доступа к различным целям ввода-вывода

    Описание
    Самоцель DMF Позволяет драйверу клиента отправлять WDFREQUEST в собственный стек.
    DMF_AcpiTarget Позволяет драйверу клиента запрашивать ACPI различными способами. Это позволяет клиенту легко запрашивать/вызывать/оценивать методы DSM.
    DMF_ContinuousRequestTarget Позволяет клиенту непрерывно отправлять запросы к WDFIOTARGET. Он похож на объект WDF UsbContinuousReader, но работает для всех WDFIOTARGETS.
    DMF_DeviceInterfaceTarget Позволяет клиенту зарегистрировать интерфейс уведомления PnP и автоматически управлять прибытием и удалением связанного устройства. Это также позволяет клиенту отправлять запросы непрерывно, используя DMF_ContinuousRequestTarget в качестве дочернего модуля.
    DMF_GpioTarget Позволяет драйверу клиента обмениваться данными с контактами GPIO, открытыми GPIO WDFIOTARGET. Этот модуль автоматически ищет ресурсы GPIO и открывает соответствующие цели на основе настроек, установленных клиентом.
    DMF_HidTarget Позволяет драйверу клиента обмениваться данными с базовым HID WDFIOTARGET. Предоставляются методы, которые позволяют Клиенту работать с отчетами ввода/вывода/характеристик.
    DMF_I2cTarget Позволяет клиенту взаимодействовать с шиной I2C, доступной для SPB. Этот модуль автоматически ищет ресурсы I2C и открывает соответствующие цели на основе настроек, установленных клиентом.
    DMF_RequestTarget Содержит код, который создает и отправляет запросы. Его можно использовать с любым файлом WDFIOTARGET.
    DMF_ResourceHub Позволяет драйверу клиента обмениваться данными с концентратором ресурсов WDFIOTARGET. Модуль содержит весь код, необходимый для разбора ресурса типа и другой информации.
    DMF_SerialTarget Позволяет драйверу клиента открывать цель Serial IO Stream и отправлять запросы.
    DMF_SpiTarget Позволяет драйверу клиента обмениваться данными с шиной SPI, доступной для SPB.

     

    Прочие вспомогательные модули

    Описание
    DMF_AcpiNotification Позволяет драйверу клиента регистрироваться и получать асинхронные уведомления через ACPI.
    DMF_AlertableSleep Позволяет драйверу клиента перевести поток в спящий режим и отменить его в любое время.
    DMF_ButtonTargetViaMsGpio Позволяет драйверу клиента взаимодействовать с интерфейсами устройств, предоставленными MSGPIOWIN32. Эти интерфейсы позволяют водителю вводить сообщения, связанные с кнопками и планшетами.
    DMF_CrashDump Позволяет драйверу клиента легко записывать данные в файл аварийного дампа Windows при сбое системы.
    DMF_IoctlHandler Позволяет клиенту более легко обрабатывать IOCTL. Клиент предоставляет таблицу поддерживаемых IOCTLS, требуемого типа доступа и минимальных/максимальных размеров входных/выходных буферов, а также обратный вызов, обрабатывающий IOCTL.
    ДМФ_Пдо Позволяет драйверу клиента легко создавать PDO для перечисления виртуальных устройств.
    DMF_Registry Предоставляет функции, которые позволяют драйверу клиента легко работать с реестром.
    DMF_SmbiosWmi Позволяет драйверу клиента читать данные SMBIOS, которые модуль извлекает с помощью WMI.
    DMF_VirtualHidDeviceVhf Этот модуль представляет собой оболочку VHF API. Модули используют этот модуль как дочерний модуль для создания виртуальных HID-устройств. Эти родительские модули предоставляют методы, специфичные для этого виртуального HID-устройства.
    DMF_VirtualHidKeyboard Предоставляет пример создания виртуального устройства HID с помощью DMF_VirtualHidDeviceVhf.
    ДМФ_Вми Позволяет драйверу клиента легко работать с WMI API.

    Ресурсы DMF

    DMF и его модули, шаблоны и примеры кода были опубликованы для общего пользования на Github.