Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Ниже приведены рекомендации по использованию общих функций установки (SetupXxx) и функций установки устройств (SetupDiXxx), предоставляемых SetupAPI:
Никогда не предполагайте, что содержимое установочного файла является безошибочным, или что предоставленный вами установочный файл не был изменен вредоносным образом. Поэтому всегда проверяйте все сведения, полученные из функций SetupAPI. Убедитесь, что строки имеют допустимую длину, что буферы имеют допустимый размер, а значения индекса находятся в допустимом диапазоне.
При написании приложений установки для установок в системах Microsoft Windows XP и более поздних версий можно вызвать SetupVerifyInfFile (описано в документации по пакету SDK для Windows), который проверяет, что цифровой подписанный INF-файл не был изменен.
Всегда проверяйте возвращаемое значение каждой функции SetupAPI. Если функция завершается ошибкой, код должен вызвать GetLastError , чтобы получить код ошибки, определяющий сбой. Возвращенные коды ошибок можно определить в Winerror.h или Setupapi.h. Перед вызовом FormatMessage с FORMAT_MESSAGE_FROM_SYSTEM для создания текстового отображения всегда используйте макрос HRESULT_FROM_SETUPAPI (определенный в Winerror.h), чтобы преобразовать возвращаемое значение в значение HRESULT. Если функция SetupAPI успешно возвращается, код не должен вызывать GetLastError. (Функции GetLastError и FormatMessage вместе с системными кодами ошибок описаны в документации по пакету SDK для Windows.)
Если функция SetupAPI возвращает дескриптор (handle), ваш код должен проверить возвращаемое значение INVALID_HANDLE_VALUE. Такие функции не возвращают NULL.
Обратите внимание на следующее различие между функциями SetupDiXxx и SetupXxx , которые позволяют вызывающему объекту запрашивать требуемый размер буфера:
Если вызывающий объект функции SetupDiXxx делает такой запрос, GetLastError всегда возвращает ERROR_INSUFFICIENT_BUFFER.
Если вызывающий объект функции SetupXxx делает такой запрос, GetLastError возвращает NO_ERROR если длина буфера не указана или ERROR_INSUFFICIENT_BUFFER, если буфер был указан слишком мал.