Compartir vía


Directrices para usar SetupAPI

Las siguientes son directrices para usar las funciones generales de instalación (SetupXxx) y las funciones de instalación de dispositivos (SetupDiXxx) proporcionadas por SetupAPI:

  • Nunca supongamos que el contenido del archivo de instalación no tiene errores o que un archivo de instalación que proporcionó no se ha modificado malintencionadamente. Por lo tanto, valide siempre toda la información recibida de las funciones setupAPI. Compruebe que las cadenas tienen una longitud válida, que los búferes tienen un tamaño válido y que los valores de índice están dentro de un intervalo válido.

  • Al escribir aplicaciones de instalación para instalaciones en Microsoft Windows XP y sistemas posteriores, puede llamar a SetupVerifyInfFile (descrito en la documentación de Windows SDK), que comprueba que no se ha modificado un archivo INF firmado digitalmente.

  • Pruebe siempre el valor devuelto de cada función SetupAPI. Si se produce un error en la función, el código debe llamar a GetLastError para obtener un código de error que identifique el error. Los códigos de error devueltos se pueden definir en Winerror.h o Setupapi.h. Antes de llamar a FormatMessage con FORMAT_MESSAGE_FROM_SYSTEM para crear una presentación de texto, use siempre la macro HRESULT_FROM_SETUPAPI (definida en Winerror.h) para convertir el valor devuelto en un valor HRESULT. Si una función SetupAPI se devuelve correctamente, el código no debe llamar a GetLastError. (Las funciones GetLastError y FormatMessage , junto con los códigos de error del sistema, se describen en la documentación de Windows SDK).

  • Si una función SetupAPI devuelve un identificador, el código debe comprobar si hay un valor devuelto de INVALID_HANDLE_VALUE. Estas funciones no devuelven NULL.

  • Tenga en cuenta la siguiente diferencia entre las funciones SetupDiXxx y SetupXxx que permiten a un autor de llamada consultar el tamaño necesario de un búfer:

    • Si el autor de la llamada de una función SetupDiXxx realiza dicha consulta, GetLastError siempre devuelve ERROR_INSUFFICIENT_BUFFER.

    • Si el autor de la llamada de una función SetupXxx realiza dicha consulta, GetLastError devuelve NO_ERROR si no se especificó ninguna longitud del búfer o ERROR_INSUFFICIENT_BUFFER si se especificó un búfer demasiado pequeño.