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 . |
Для следующего устройства в стеке нет различий между объектом файла, созданным приложением, и объектом файла, созданным устройством более высокого уровня.