Función DiRollbackDriver (newdev.h)

La función DiRollbackDriver revierte el controlador instalado en un dispositivo especificado.

Sintaxis

BOOL DiRollbackDriver(
  [in]            HDEVINFO         DeviceInfoSet,
  [in]            PSP_DEVINFO_DATA DeviceInfoData,
  [in, optional]  HWND             hwndParent,
  [in]            DWORD            Flags,
  [out, optional] PBOOL            NeedReboot
);

Parámetros

[in] DeviceInfoSet

Identificador del conjunto de información del dispositivo que contiene un elemento de información del dispositivo que representa el dispositivo para el que se realiza la reversión del controlador.

[in] DeviceInfoData

Puntero a una estructura de SP_DEVINFO_DATA que representa el dispositivo específico en el conjunto de información del dispositivo especificado para el que se realiza la reversión del controlador.

[in, optional] hwndParent

Identificador de la ventana de nivel superior que DiRollbackDriver usa para mostrar cualquier componente de interfaz de usuario asociado a una reversión de controladores para el dispositivo especificado. Este parámetro es opcional y se puede establecer en NULL.

[in] Flags

Valor de tipo DWORD que se puede establecer en cero o ROLLBACK_FLAG_NO_UI.

Normalmente, esta marca debe establecerse en cero, en cuyo caso DiRollbackDriver no suprime los componentes de la interfaz de usuario predeterminados asociados a una reversión del controlador. Sin embargo, si esta marca se establece en ROLLBACK_FLAG_NO_UI, DiRollbackDriver suprime la visualización de los componentes de la interfaz de usuario asociados a una reversión del controlador.

[out, optional] NeedReboot

Puntero a un valor de tipo BOOL que DiRollbackDriver establece para indicar si se requiere un reinicio del sistema para completar la reversión. Este parámetro es opcional y puede ser NULL.

Si se proporciona el parámetro y se requiere un reinicio del sistema para completar la reversión, DiRollbackDriver establece el valor en TRUE. En este caso, el autor de la llamada debe pedir al usuario que reinicie el sistema. Si se proporciona este parámetro y no es necesario reiniciar el sistema para completar la instalación, DiRollbackDriver establece el valor en FALSE.

Si el parámetro es NULL y se requiere un reinicio del sistema para completar la reversión, DiRollbackDriver muestra un cuadro de diálogo de reinicio del sistema.

Para obtener más información sobre este parámetro, vea la siguiente sección Comentarios .

Valor devuelto

DiRollbackDriver devuelve TRUE si la función revierte correctamente el controlador del dispositivo; De lo contrario, DiRollbackDriver devuelve FALSE y el error registrado se puede recuperar realizando una llamada a GetLastError. Algunos de los valores de error más comunes que GetLastError podrían devolver son los siguientes:

Código devuelto Descripción
ERROR_ACCESS_DENIED
El autor de la llamada no tiene privilegios de administrador. De forma predeterminada, Windows requiere que el autor de la llamada tenga privilegios de administrador para revertir un paquete de controladores.
ERROR_IN_WOW64
La aplicación que realiza la llamada es una aplicación de 32 bits que intenta ejecutarse en un entorno de 64 bits, que no está permitido. Para obtener más información, consulte Instalación de dispositivos en sistemas de 64 bits.
ERROR_INVALID_FLAGS
El valor especificado para Flags no es igual a cero o ROLLBACK_FLAG_NO_UI.
ERROR_NO_MORE_ITEMS
No se establece un controlador de copia de seguridad para el dispositivo.

Comentarios

Si se establece un controlador de copia de seguridad instalado anteriormente para un dispositivo, una reversión de controladores para el dispositivo reemplaza al controlador que está instalado actualmente en el dispositivo por el controlador de copia de seguridad. Windows mantiene como máximo un controlador de copia de seguridad para un dispositivo. Windows establece un controlador como controlador de copia de seguridad para un dispositivo inmediatamente después de que el controlador esté instalado correctamente en el dispositivo y Windows determina que el dispositivo funciona correctamente. Sin embargo, si un controlador no se instala correctamente en un dispositivo o el dispositivo no funciona correctamente después de la instalación, Windows no establece el controlador como controlador de copia de seguridad para el dispositivo. Para obtener más información sobre la reversión de controladores, consulte información sobre Administrador de dispositivos en el Centro de ayuda y soporte técnico.

Si el dispositivo especificado tiene un controlador de copia de seguridad, DiRollbackDriver realiza las siguientes operaciones:

  1. Si Flags está establecido en cero, DiRollbackDriver solicita al usuario que confirme si se debe instalar el controlador de copia de seguridad. De lo contrario, si Flags está establecido en ROLLBACK_FLAG_NO_UI, DiRollbackDriver instala el controlador de copia de seguridad sin pedir al usuario que confirme la instalación del controlador de copia de seguridad.
  2. DiRollbackDriver instala el controlador de copia de seguridad. El controlador se instala si el controlador de copia de seguridad es una coincidencia mejor para el dispositivo que el controlador que está instalado actualmente en el dispositivo.
  3. Si el controlador reemplazado por el controlador de copia de seguridad no es un controlador de bandeja de entrada y no está instalado en ningún otro dispositivo del sistema, DiRollbackDriver quita el controlador del sistema. DiRollbackDriver quita el controlador del sistema porque se supone que un usuario reemplazará un controlador solo si hay un problema con el controlador.
Si el dispositivo especificado no tiene un controlador de copia de seguridad, DiRollbackDriver llama a SetLastError para establecer el error ERROR_NO_MORE_ITEMS, no quita el controlador instalado actualmente y devuelve FALSE.

En general, las aplicaciones de instalación deben establecer NeedReboot en NULL para que el sistema inicie automáticamente un reinicio del sistema si se requiere un reinicio para completar la reversión. Una aplicación debe proporcionar un puntero NeedReboot solo en los casos siguientes:

  • La aplicación debe llamar a DiRollbackDriver varias veces para completar una instalación. En este caso, la aplicación debe registrar si alguna de las llamadas a DiRollbackDriver devuelve un valor TRUE NeedReboot y, si es así, pide al usuario que reinicie el sistema después de la llamada final a DiRollbackDriver.
  • La aplicación debe realizar operaciones necesarias, aparte de llamar a DiRollbackDriver, antes de que se produzca un reinicio del sistema. Si se requiere un reinicio del sistema, la aplicación debe finalizar las operaciones necesarias y, a continuación, pedir al usuario que reinicie el sistema.
Para instalar un nuevo controlador para un dispositivo en lugar de revertir el controlador del dispositivo, llame a DiInstallDriver o UpdateDriverForPlugAndPlayDevices.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible en Windows Vista y versiones posteriores de Windows.
Plataforma de destino Escritorio
Encabezado newdev.h (incluya Newdev.h)
Library Newdev.lib
Archivo DLL Newdev.dll

Consulte también

DiInstallDriver

UpdateDriverForPlugAndPlayDevices