DXGKDDI_NOTIFY_SURPRISE_REMOVAL función de devolución de llamada (dispmprt.h)
el sistema operativo llama a DXGKDDI_NOTIFY_SURPRISE_REMOVAL cuando un usuario desconecta un dispositivo de pantalla externo sin notificar al sistema.
Sintaxis
DXGKDDI_NOTIFY_SURPRISE_REMOVAL DxgkddiNotifySurpriseRemoval;
NTSTATUS DxgkddiNotifySurpriseRemoval(
[in] PVOID MiniportDeviceContext,
[in] DXGK_SURPRISE_REMOVAL_TYPE RemovalType
)
{...}
Parámetros
[in] MiniportDeviceContext
Identificador de un bloque de contexto asociado a un adaptador de pantalla. La función DxgkDdiAddDevice del controlador de minipuerto de pantalla proporcionó anteriormente este identificador al subsistema del kernel de gráficos de DirectX.
[in] RemovalType
Valor de tipo DXGK_SURPRISE_REMOVAL_TYPE que identifica el tipo de evento de eliminación sorpresa.
Valor devuelto
Devuelve STATUS_SUCCESS si se limpiaron los recursos de software para RemovalType = DxgkRemovalHibernation. Si el controlador devuelve en su lugar un código de error, el sistema operativo intentará reiniciar el sistema, como se describe en la sección Comentarios siguiente.
Comentarios
Esta devolución de llamada se puede implementar opcionalmente mediante el modelo de controlador de pantalla de Windows (WDDM) 1.2 y los controladores de minipuerto de pantalla posteriores.
Nota
El sistema operativo llama a DxgkDdiNotifySurpriseRemoval solo si el controlador de miniporte de pantalla indica compatibilidad estableciendo el miembro SupportSurpriseRemovalInHibernation de la estructura de DXGK_DRIVERCAPS en 1.
Cuando el sistema operativo detecta una eliminación sorpresa, notifica al controlador lo antes posible. DxgkDdiNotifySurpriseRemoval es una función DDI de nivel cero , lo que significa que se puede llamar cuando un controlador tiene una carga de trabajo de GPU pendiente o se ejecuta dentro de otras funciones DDI. Dado que una llamada a esta función indica que el hardware gráfico se ha quitado físicamente o ha desaparecido del sistema, cualquier intento adicional de acceder al hardware puede causar problemas como un bloqueo duro.
El sistema operativo clasifica la eliminación sorpresa de la siguiente manera:
La eliminación sorpresa se produce cuando el sistema y el dispositivo gráfico están en un estado de bajo consumo, como suspensión o hibernación. Cuando el sistema operativo se reanuda desde el estado de baja potencia, detecta esta eliminación sorpresa y llama inmediatamente a la devolución de llamada DxgkDdiNotifySurpriseRemoval del controlador con RemovalType = DxgkRemovalHibernation. Es probable que no haya ninguna llamada DDI o trabajo pendiente de GPU en este caso, por lo que debe ser relativamente segura y fácil para que el controlador lo controle. Los detalles de estado de devolución son los siguientes:
- El sistema operativo espera que el controlador controle la llamada DxgkDdiNotifySurpriseRemoval correctamente y devuelva STATUS_SUCCESS.
- Si el dispositivo gráfico quitado es el dispositivo de prueba automática (POST), el sistema operativo intentará reiniciar el sistema correctamente, independientemente del estado devuelto.
- En el caso de un dispositivo que no sea POST, si el controlador produce un error en la llamada y solo admite SupportSurpriseRemovalInHibernation en su DXGK_DRIVERCAPS, el sistema operativo reiniciará el sistema correctamente. Si admite SupportSurpriseRemoval en DXGK_DRIVERCAPS, el sistema operativo omitirá el estado de retorno y continuará deteniendo el dispositivo gráfico. Consulte las notas de devolución adicionales a continuación.
El dispositivo gráfico se quita o desconecta cuando se sigue ejecutando. Cuando el sistema operativo detecta este tipo de eliminación sorpresa, llama inmediatamente a la devolución de llamada DxgkDdiNotifySurpriseRemoval del controlador con RemovalType = DxgkRemovalPnPNotify. En este caso, puede haber algunas llamadas DDI o de trabajo de GPU pendientes para completarse. Cuando el controlador recibe esta notificación y puede controlar esta eliminación sorpresa, el controlador debe marcar inmediatamente este dispositivo como eliminación sorpresa en su propio contexto de dispositivo para evitar cualquier acceso de hardware y luego devolver STATUS_SUCCESS al sistema operativo. El sistema operativo seguirá llamando a otras funciones DDI para limpiar los recursos y detener el dispositivo gráfico. Como se indicó a continuación, el controlador solo debe liberar o limpiar los recursos de software y no debe tocar ni tener acceso a ningún hardware en estas llamadas DDI. Si el controlador no puede controlar esta eliminación sorpresa, debe devolver un error adecuado al sistema operativo. Para cualquier error, el sistema operativo comprobará el sistema inmediatamente para evitar daños adicionales en el hardware o los datos.
Si el controlador de minipuerto de pantalla devuelve STATUS_SUCCESS, el subsistema del kernel de gráficos directX seguirá quitando el adaptador de pantalla externo de la pila de gráficos y llamará a otras funciones de modo kernel DxgkDdiXxx implementadas por el controlador para liberar todos los recursos. En este caso, el controlador debe completar su limpieza de los recursos de software en respuesta a las llamadas desde el sistema operativo, pero no debe tocar ni limpiar ninguna configuración de hardware. Si ningún otro hardware usa el controlador, el sistema operativo descargará el controlador.
Si el controlador devuelve un código de error, no establece DXGK_DRIVERCAPS. SupportSurpriseRemovalInHibernation, o no implementa esta función, el subsistema del kernel de gráficos directX no llamará a más funciones dxgkDdiXxx implementadas por el controlador e intentará reiniciar el sistema. En este caso, no se liberará el recurso asignado antes de que se desconecte el dispositivo de visualización externo.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows 8 |
Servidor mínimo compatible | Windows Server 2012 |
Plataforma de destino | Escritorio |
Encabezado | dispmprt.h |
IRQL | PASSIVE_LEVEL |