Поделиться через


Driver-Created и объекты файлов Application-Created

Предупреждение

UMDF 2 является последней версией UMDF и заменяет UMDF 1. Все новые драйверы UMDF должны быть написаны с помощью UMDF 2. Новые функции не добавляются в UMDF 1, а поддержка UMDF 1 в более новых версиях Windows 10 ограничена. Универсальные драйверы Windows должны использовать UMDF 2.

Архивные примеры UMDF 1 можно найти в Windows 11 версии 22H2 — обновление примеров драйверов за май 2022 г.

Дополнительные сведения см. в разделе начало работы с помощью UMDF.

Когда приложение открывает дескриптор устройства, платформа вызывает метод IQueueCallbackCreate::OnCreateFile драйвера и предоставляет указатель на интерфейс IWDFFile для объекта файла, связанного с устройством. Все запросы ввода-вывода, отправляемые приложением в открытый дескриптор, связаны с созданным объектом файла. При поступлении таких запросов платформа вызывает соответствующий метод из одного из предоставленных драйвером интерфейсов объектов очереди UMDF. Затем драйвер может вызвать IWDFIoRequest::GetFileObject , чтобы определить объект файла, связанный с запросом. Драйвер может вызывать AssignContext для объекта файла, чтобы связать контекст, характерный для сеанса ввода-вывода.

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

Инициирует приложение Драйвер получает

Вызов функции Microsoft Win32 CreateFile .

Вызов метода IQueueCallbackCreate::OnCreateFile .

Вызов функции Win32 ReadFileEx, WriteFileEx или DeviceIoControl .

Вызов метода IQueueCallbackRead::OnRead, IQueueCallbackWrite::OnWrite или IQueueCallbackDeviceIoControl::OnDeviceIoControl .

Вызов функции Win32 CloseHandle для последнего открытого дескриптора объекта файла.

Вызов метода IFileCallbackCleanup::OnCleanupFile .

Драйвер отменяет или завершает все запросы ввода-вывода, связанные с объектом файла.

После возврата драйвера из уведомления о очистке UMDF отменяет все ожидающие запросы ввода-вывода.

После завершения очистки и отмены UMDF ожидающих запросов ввода-вывода драйвер получает вызов метода IFileCallbackClose::OnCloseFile .

Системный компонент может выдать запрос на создание от имени универсального приложения для Windows. Если драйверу необходимо определить идентификатор процесса приложения, выдавшего запрос на создание, он может вызвать метод IWDFFile3::GetInitiatorProcessId .

Созданные драйвером объекты файлов

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

В следующей таблице показаны вызовы, которые выполняет драйвер, и полученные уведомления следующему драйверу в стеке.

Драйвер инициирует Следующий драйвер в стеке получает

Вызов метода IWDFDevice::CreateWdfFile .

Файловый объект, создаваемый UMDF, представляет сеанс ввода-вывода между устройством и следующим устройством в стеке.

Вызов метода IQueueCallbackCreate::OnCreateFile .

Вызов метода IWDFDevice::CreateRequest .

Вызов для форматирования запроса (например, вызов метода IWDFIoTarget::FormatRequestForIoctl ).

Вызов метода IWDFIoRequest::Send .

Вызов метода IQueueCallbackRead::OnRead, IQueueCallbackWrite::OnWrite или IQueueCallbackDeviceIoControl::OnDeviceIoControl .

Вызов метода IWDFDriverCreatedFile::Close .

Вызов метода IFileCallbackCleanup::OnCleanupFile .

Драйвер отменяет или завершает все запросы ввода-вывода, связанные с объектом файла.

После возврата драйвера из уведомления о очистке UMDF отменяет все ожидающие запросы ввода-вывода.

После завершения очистки и отмены UMDF ожидающих запросов ввода-вывода драйвер получает вызов метода IFileCallbackClose::OnCloseFile .

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