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