Compartir a través de


DIF_INSTALLDEVICE

Una solicitud de DIF_INSTALLDEVICE permite que un instalador realice tareas antes o después de instalar el dispositivo.

Cuándo se envió

Después de seleccionar el controlador, registrar cualquier co-instalador de dispositivo y registrar cualquier interfaz de dispositivo.

Quién controla

Coinserción de clase

Puede controlar

Instalador conjunta del dispositivo

Puede controlar

Instalador de clase

Puede controlar

Entrada del instalador

DeviceInfoSet
Proporciona un identificador al conjunto de información del dispositivo que contiene el dispositivo que se va a instalar.

DeviceInfoData
Proporciona un puntero a una estructura de SP_DEVINFO_DATA para el dispositivo en el conjunto de información del dispositivo.

Parámetros de instalación de dispositivos
Hay parámetros de instalación de dispositivos (SP_DEVINSTALL_PARAMS) asociados a DeviceInfoData.

Parámetros de instalación de clases
Ninguno

Salida del instalador

Parámetros de instalación de dispositivos
Un instalador puede modificar los parámetros de instalación del dispositivo para DeviceInfoData. Por ejemplo, un instalador podría establecer la marca DI_NEEDREBOOT o podría establecer la marca de DI_DONOTCALLCONFIGMG para impedir que Windows conecte dinámicamente el dispositivo con su controlador y configuración recién instalados.

Valor devuelto del instalador

Normalmente, un co-instalador devuelve NO_ERROR o ERROR_DI_POSTPROCESSING_REQUIRED. Un coinserable también puede devolver un código de error win32.

Si un instalador de clase controla correctamente esta solicitud y SetupDiCallClassInstaller debe llamar posteriormente al controlador predeterminado, el instalador de clase devuelve ERROR_DI_DO_DEFAULT.

Si el instalador de clase controla correctamente esta solicitud, incluida la llamada directa al controlador predeterminado, el instalador de clase debe devolver NO_ERROR y SetupDiCallClassInstaller no volverá a llamar al controlador predeterminado.

Nota El instalador de clase puede llamar directamente al controlador predeterminado, pero el instalador de clase nunca debe intentar reemplazar las operaciones del controlador predeterminado. Para obtener más información sobre cómo llamar a un controlador de código DIF predeterminado, vea Llamar a controladores de código DIF predeterminados.

Si el instalador de clase encuentra un error, el instalador debe devolver un código de error win32 adecuado y SetupDiCallClassInstaller no llamará posteriormente al controlador predeterminado.

Controlador de código DIF predeterminado

SetupDiInstallDevice

Operación del instalador

En respuesta a una DIF_INSTALLDEVICE solicitud de un instalador normalmente realiza las operaciones de instalación finales antes de que el controlador predeterminado instale el dispositivo. Por ejemplo, un instalador puede comprobar y, posiblemente, modificar los controladores de filtro superior y los controladores de filtro inferior para el dispositivo que aparece en el registro.

A menos que la marca de DI_NOFILECOPY esté establecida en los parámetros de instalación del dispositivo, un instalador que controle esta solicitud DIF debe copiar los archivos necesarios para el dispositivo, como los archivos de controlador y los archivos del panel de control.

Si la marca de DI_NOFILECOPY está desactivada, pero la marca de DI_NOVCP está establecida, el instalador debe poner en cola las operaciones de archivo en la cola de archivos proporcionada, pero no debe confirmar la cola.

Un co-instalador puede controlar esta solicitud DIF en su paso de preprocesamiento o en su paso posterior al procesamiento. En su paso de preprocesamiento, un co-instalador realiza las operaciones que deben producirse antes de que Windows cargue los controladores e inicie el dispositivo.

En su paso de postprocesamiento, el dispositivo está en funcionamiento a menos que se haya establecido la marca de DI_NEEDREBOOT. Si se establece esta marca, Windows no pudo poner el dispositivo en línea dinámicamente.

Si el instalador devuelve un código de error win32, Windows abandona la instalación.

Si Windows no encuentra un archivo INF para un nuevo dispositivo, envía DIF_INSTALLDEVICE en un intento de instalar un controlador NULL. El controlador predeterminado (SetupDiInstallDevice) comprueba si el dispositivo admite el modo sin procesar o es un dispositivo que no es PnP (notificado por IoReportDetectedDevice), En este último caso, Windows instala un controlador NULL para el dispositivo.

Si se produce un error en este intento, Windows envía DIF_INSTALLDEVICE de nuevo, esta vez con la marca DI_FLAGSEX_SETFAILEDINSTALL establecida en la estructura de SP_DEVINSTALL_PARAMS . En este caso, el controlador predeterminado simplemente establece la marca FAILEDINSTALL en el valor del registro ConfigFlags del dispositivo. Si se establece la marca de DI_FLAGSEX_SETFAILEDINSTALL, los instaladores de clase deben devolver NO_ERROR o ERROR_DI_DO_DEFAULT y coinser instaladores deben devolver NO_ERROR.

Para obtener más información sobre los códigos DIF, consulte Control de códigos DIF.

Llamar al controlador predeterminado SetupDiInstallDevice

Para obtener información general sobre cuándo y cómo llamar a un SetupDiInstallDevice, vea Llamar a controladores de código DIF predeterminados.

En la rara situación en la que el instalador de clase debe realizar operaciones después de que todas las operaciones SetupDiInstallDevice , excepto para iniciar un dispositivo, se hayan completado, el instalador de clase debe:

  1. Realice operaciones que se deben realizar antes de llamar a SetupDiInstallDevice.

  2. Establezca la marca DI_DONOTCALLCONFIGMGR en el SP_DEVINSTALL_PARAMS. Marca el miembro del dispositivo. Si se establece esta marca, SetupDiInstallDevice realiza todas las operaciones de instalación predeterminadas, excepto para iniciar el dispositivo.

  3. Llame a SetupDiInstallDevice para realizar todas las operaciones de instalación predeterminadas, excepto para iniciar el dispositivo.

  4. Realice las operaciones que deben realizarse después de que se hayan completado todas las operaciones de instalación predeterminadas, excepto para iniciar el dispositivo.

  5. Llame a SetupDiRestartDevices para iniciar el dispositivo.

  6. Devuelve NO_ERROR si el instalador de clase completó correctamente la operación de instalación o devuelve un error win32 si se produjo un error en la operación de instalación.

Requisitos

Versión

Compatible con Microsoft Windows 2000 y versiones posteriores de Windows.

Encabezado

Setupapi.h (incluya Setupapi.h)

Consulte también

DIF_INSTALLDEVICEFILES

SetupDiInstallDevice

SP_DEVINFO_DATA

SP_DEVINSTALL_PARAMS