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


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.

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