Compartir a través de


Driver-Created frente a objetos de archivo de Application-Created

Advertencia

UMDF 2 es la versión más reciente de UMDF y sustituye a UMDF 1. Todos los controladores UMDF nuevos deben escribirse con UMDF 2. No se agregan nuevas características a UMDF 1 y hay compatibilidad limitada con UMDF 1 en versiones más recientes de Windows 10. Los controladores universales de Windows deben usar UMDF 2.

Los ejemplos de UMDF 1 archivados se pueden encontrar en la actualización de ejemplos de controladores de Windows 11, versión 22H2 - mayo de 2022.

Para obtener más información, consulta Introducción con UMDF.

Cuando una aplicación abre un identificador en un dispositivo, el marco llama al método IQueueCallbackCreate::OnCreateFile del controlador y proporciona un puntero a la interfaz IWDFFile del objeto de archivo asociado al dispositivo. Las solicitudes de E/S que la aplicación envía al identificador abierto están asociadas al objeto de archivo creado. Cuando llegan estas solicitudes, el marco llama al método adecuado desde una de las interfaces de objeto de cola de UMDF proporcionadas por el controlador. A continuación, el controlador puede llamar a IWDFIoRequest::GetFileObject para determinar el objeto de archivo asociado a la solicitud. El controlador puede llamar a AssignContext en el objeto de archivo para asociar el contexto específico de la sesión de E/S.

En la tabla siguiente se muestran las llamadas que realiza la aplicación y las notificaciones resultantes que recibe el controlador.

Inicios de la aplicación El controlador recibe

Una llamada a la función CreateFile de Microsoft Win32.

Una llamada a su método IQueueCallbackCreate::OnCreateFile .

Una llamada a la función ReadFileEx, WriteFileEx o DeviceIoControl de Win32.

Una llamada a su método IQueueCallbackRead::OnRead, IQueueCallbackWrite::OnWrite o IQueueCallbackDeviceIoControl::OnDeviceIoControl .

Una llamada a la función CloseHandle de Win32 para el último identificador abierto en el objeto de archivo.

Una llamada a su método IFileCallbackCleanup::OnCleanupFile .

El controlador cancela o completa todas las solicitudes de E/S asociadas al objeto de archivo.

Después de que el controlador vuelva de la notificación de limpieza, UMDF cancela las solicitudes de E/S pendientes.

Una vez completada la limpieza y UMDF cancela las solicitudes de E/S pendientes, el controlador recibe una llamada a su método IFileCallbackClose::OnCloseFile .

Un componente del sistema puede emitir una solicitud de creación en nombre de una aplicación universal de Windows. Si el controlador necesita determinar el identificador de proceso de la aplicación que emitió la solicitud de creación, puede llamar al método IWDFFile3::GetInitiatorProcessId .

Objetos de archivo creados por el controlador

Si el controlador necesita crear y enviar una solicitud de E/S independiente de la aplicación al siguiente controlador de la pila (el destino de E/S predeterminado), el controlador debe llamar a IWDFDevice::CreateWdfFile para recuperar un puntero a una interfaz IWDFDriverCreatedFile . En este caso, el siguiente controlador recibe las mismas notificaciones que recibe el controlador cuando la aplicación genera la solicitud.

En la tabla siguiente se muestran las llamadas que realiza el controlador y las notificaciones resultantes al siguiente controlador de la pila.

El controlador inicia El siguiente controlador de la pila recibe

Una llamada al método IWDFDevice::CreateWdfFile .

El objeto de archivo que crea UMDF representa una sesión de E/S entre el dispositivo y el siguiente dispositivo de la pila.

Una llamada a su método IQueueCallbackCreate::OnCreateFile .

Una llamada al método IWDFDevice::CreateRequest .

Una llamada para dar formato a la solicitud (por ejemplo, una llamada al método IWDFIoTarget::FormatRequestForIoctl ).

Una llamada al método IWDFIoRequest::Send .

Una llamada a su método IQueueCallbackRead::OnRead, IQueueCallbackWrite::OnWrite o IQueueCallbackDeviceIoControl::OnDeviceIoControl .

Una llamada al método IWDFDriverCreatedFile::Close .

Una llamada a su método IFileCallbackCleanup::OnCleanupFile .

El controlador cancela o completa todas las solicitudes de E/S asociadas al objeto de archivo.

Después de que el controlador vuelva de la notificación de limpieza, UMDF cancela las solicitudes de E/S pendientes.

Una vez completada la limpieza y UMDF cancela las solicitudes de E/S pendientes, el controlador recibe una llamada a su método IFileCallbackClose::OnCloseFile .

Para el siguiente dispositivo de la pila, no existe ninguna diferencia entre el objeto de archivo creado por una aplicación y el objeto de archivo creado por un dispositivo de capa superior.