Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
A continuación se indican las directrices para usar las funciones generales de instalación (SetupXxx) y las funciones de instalación de dispositivos (SetupDiXxx) proporcionadas por SetupAPI:
Nunca asuma que el contenido del archivo de instalación está libre de errores o que un archivo de instalación que proporcionó no se ha modificado de forma malintencionada. 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 sistemas Microsoft Windows XP y versiones posteriores, puede llamar a SetupVerifyInfFile (que se describe en la documentación del SDK de Windows), que comprueba que no se ha modificado un archivo INF firmado digitalmente.
Pruebe siempre el valor devuelto de cada función SetupAPI. Si la función falla, 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 visualizació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 de SetupAPI finaliza 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 del SDK de Windows).
Si una función SetupAPI devuelve un identificador, el código debe comprobar que el valor devuelto sea INVALID_HANDLE_VALUE. Estas funciones no devuelven NULL.
Tenga en cuenta la siguiente diferencia entre las funciones SetupDiXxx y SetupXxx que permiten a quien realiza la llamada consultar el tamaño necesario de un búfer:
Si quien llama a una función SetupDiXxx realiza dicha consulta, GetLastError siempre devuelve ERROR_INSUFFICIENT_BUFFER.
Si quien llama a 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.