DIF_SELECTDEVICE

Una solicitud de DIF_SELECTDEVICE permite que un instalador participe en la selección del controlador de un dispositivo.

Cuándo se envió

Al elegir un controlador para un dispositivo recién enumerado o un nuevo controlador para un dispositivo existente (controlador de cambio). Por ejemplo, cuando un usuario selecciona Agregar o quitar hardware y selecciona la clase módem. O bien, un usuario inserta un dispositivo PnP y selecciona "Elegir un controlador de una lista" en el Asistente para nuevo hardware encontrado.

Quién controla

Co-instalador de clase

Puede controlar

Instalador co-instalador del dispositivo

No controla

Instalador de clase

Puede controlar

Entrada del instalador

DeviceInfoSet
Proporciona un identificador al conjunto de información del dispositivo que contiene el dispositivo para el que se va a seleccionar un controlador. Hay una clase de configuración de dispositivo asociada a DeviceInfoSet.

DeviceInfoData
Opcionalmente, proporciona un puntero a una estructura de SP_DEVINFO_DATA que identifica el dispositivo en el conjunto de información del dispositivo.

Si DeviceInfoData es NULL, esta solicitud consiste en seleccionar un controlador para la clase de configuración del dispositivo asociada a DeviceInfoSet.

Parámetros de instalación de dispositivos
Si DeviceInfoData no es NULL, hay parámetros de instalación de dispositivos (SP_DEVINSTALL_PARAMS) asociados a DeviceInfoData. Si DeviceInfoData es NULL, hay parámetros de instalación de dispositivos asociados a DeviceInfoSet.

De particular interés es DriverPath, que contiene la ubicación de INF(s) que se usará al compilar la lista de controladores.

Parámetros de instalación de clases
Una estructura de SP_SELECTDEVICE_PARAMS está asociada a DeviceInfoData si DeviceInfoData no es NULL. De lo contrario, los parámetros de instalación de clase están asociados al conjunto de información del dispositivo en su conjunto.

Salida del instalador

Parámetros de instalación de dispositivos
Un instalador puede modificar los parámetros de instalación del dispositivo. Sin embargo, no debe modificar el campo DriverPath .

Parámetros de instalación de clases
Un instalador puede modificar el SP_SELECTDEVICE_PARAMS. Por ejemplo, un instalador puede especificar un título o instrucciones para que Windows lo use en el cuadro de diálogo que pide al usuario que seleccione un controlador.

Si un instalador establece nuevos parámetros select-device, frente a modificar los parámetros establecidos por un instalador anterior, el instalador debe cero los campos que no establece.

Valor devuelto del instalador

Si un co-instalador no hace nada para este código DIF, devuelve NO_ERROR de su paso de preprocesamiento. Si un co-instalador controla este código DIF, debe hacerlo en su paso de preprocesamiento y devolver NO_ERROR o un código de error win32. En el momento en que se llama a un co-instalador para el posprocesamiento, el controlador ya se ha seleccionado.

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 al controlador 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.

Un instalador de clase devuelve ERROR_DI_BAD_PATH si el miembro DriverPath de la estructura de SP_DEVINSTALL_PARAMS correspondiente no es igual a NULL, pero no hay controladores válidos en la ubicación de ruta de acceso especificada. Esto puede ocurrir si no hay controladores en la ubicación de la ruta de acceso o si hay controladores, pero el miembro Flags de la estructura SP_DRVINSTALL_PARAMS de cada controlador se estableció con la marca DN_BAD_DRIVER. En respuesta a este código de error, Windows muestra un error al usuario.

Controlador de código DIF predeterminado

SetupDiSelectDevice

Operación del instalador

En respuesta a una solicitud de DIF_SELECTDEVICE, un instalador realiza las operaciones de selección necesarias para su dispositivo o clase de dispositivo, además de lo que hace el controlador predeterminado. Normalmente, un instalador responde a esta solicitud DIF de una de las siguientes maneras:

  • No haga nada.

    Si un instalador no tiene requisitos especiales de selección, no hace nada en respuesta a este código DIF. Un instalador de clase devuelve ERROR_DI_DO_DEFAULT y un co-instalador devuelve NO_ERROR.

  • Proporcione cadenas de selección que Windows mostrará en la interfaz de usuario de selección.

    Un instalador puede proporcionar cadenas de selección en los parámetros de instalación de clase (SP_SELECTDEVICE_PARAMS). Por ejemplo, un instalador puede modificar las instrucciones o el encabezado de ventana Title.

    Un instalador de clase no debe proporcionar cadenas de selección si ya se han proporcionado cadenas de selección de un co-instalador. El co-instalador probablemente tiene información más relevante.

    Si un instalador modifica el SP_SELECTDEVICE_PARAMS, el instalador también debe establecer la marca DI_USECI_SELECTSTRINGS en el SP_DEVINSTALL_PARAMS.

    Si un instalador proporciona correctamente cadenas de selección, Windows todavía tiene que llamar al controlador predeterminado. Por lo tanto, en este caso, un co-instalador devuelve NO_ERROR y un instalador de clase devuelve ERROR_DI_DO_DEFAULT.

  • Modifique los parámetros de instalación del dispositivo.

    Un instalador puede modificar los parámetros de instalación del dispositivo (SP_DEVINSTALL_PARAMS). Por ejemplo, un instalador podría establecer la marca DI_SHOWOEM para que Windows muestre el botón Tener disco .

    Si un instalador de clase modifica correctamente los parámetros de instalación del dispositivo, el instalador de clase devuelve ERROR_DI_DO_DEFAULT.

  • Modifique la lista de controladores desde los que el usuario puede seleccionar.

    Esta acción es menos común, pero posible. Un instalador que modifique la lista de controladores podría, o no, proporcionar cadenas de selección.

    Un instalador que modifica la lista de controladores normalmente marca los controladores que no son adecuados para el dispositivo. Un instalador marca estos controladores con la marca DNF_BAD_DRIVER. Windows omite estos controladores de la lista que muestra al usuario.

    Un instalador marca controladores incorrectos siguiendo estos pasos:

    1. Compile la lista de controladores llamando a SetupDiBuildDriverInfoList con un driverType de SPDIT_CLASSDRIVER.
    2. Obtenga la información sobre el primer controlador de la lista llamando a SetupDiEnumDriverInfo y SetupDiGetDriverInstallParams. Si el controlador no es adecuado para el dispositivo, establezca la marca DNF_BAD_DRIVER en el campo Marcas de los parámetros. Aplique el cambio a los parámetros mediante una llamada a SetupDiSetDriverInstallParams.
    3. Repita el paso anterior hasta que haya procesado todos los controladores de la lista. Asegúrese de incrementar el parámetro MemberIndex a SetupDiEnumDriverInfo como se describe en la página de referencia de esa función.

    Un instalador puede establecer la marca DNF_BAD_DRIVER para uno o varios controladores de la lista de controladores, pero un instalador no debe borrar esa marca.

    Si uno o varios instaladores modifican correctamente la lista de controladores, Windows todavía tiene que llamar al controlador predeterminado. Por lo tanto, en este caso, un co-instalador devuelve NO_ERROR y un instalador de clase devuelve ERROR_DI_DO_DEFAULT.

  • Muestra su propia interfaz de usuario de selección de controladores y establece el controlador seleccionado.

    Solo un instalador de clase puede mostrar su propia interfaz de usuario de selección de controladores; Los co-instaladores no deben. Por ejemplo, un instalador de clase podría mostrar imágenes en lugar de listas textuales.

    Si el instalador de clase establece correctamente el controlador seleccionado, el instalador de clase devuelve NO_ERROR y Windows no llama al controlador predeterminado y, por tanto, no muestra la interfaz de selección predeterminada.

Si la marca DI_ENUMSINGLEINF se establece en los parámetros de instalación del dispositivo, DriverPath es una ruta de acceso de un único archivo INF en lugar de una ruta de acceso de un directorio. Un instalador solo debe usar ese único INF para compilar la lista de controladores.

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

Requisitos

Versión

Compatible con Microsoft Windows 2000 y versiones posteriores de Windows.

Encabezado

Setupapi.h (incluir Setupapi.h)

Consulte también

DIF_NEWDEVICEWIZARD_SELECT

SetupDiSelectDevice

SP_DEVINFO_DATA

SP_DEVINSTALL_PARAMS

SP_SELECTDEVICE_PARAMS