Поделиться через


Функция DiRollbackDriver (newdev.h)

Функция DiRollbackDriver откатывает драйвер, установленный на указанном устройстве.

Синтаксис

BOOL DiRollbackDriver(
  [in]            HDEVINFO         DeviceInfoSet,
  [in]            PSP_DEVINFO_DATA DeviceInfoData,
  [in, optional]  HWND             hwndParent,
  [in]            DWORD            Flags,
  [out, optional] PBOOL            NeedReboot
);

Параметры

[in] DeviceInfoSet

Дескриптор набора сведений об устройстве , который содержит элемент сведений об устройстве, представляющий устройство, для которого выполняется откат драйвера.

[in] DeviceInfoData

Указатель на структуру SP_DEVINFO_DATA , представляющую конкретное устройство в указанном наборе сведений об устройстве, для которого выполняется откат драйвера.

[in, optional] hwndParent

Дескриптор окна верхнего уровня, которое DiRollbackDriver использует для отображения любого компонента пользовательского интерфейса, связанного с откатом драйвера для указанного устройства. Этот параметр является необязательным и может иметь значение NULL.

[in] Flags

Значение типа DWORD, которое может быть равно нулю или ROLLBACK_FLAG_NO_UI.

Как правило, этот флаг должен быть равен нулю, и в этом случае DiRollbackDriver не подавляет компоненты пользовательского интерфейса по умолчанию, связанные с откатом драйвера. Однако если для этого флага задано значение ROLLBACK_FLAG_NO_UI, DiRollbackDriver подавляет отображение компонентов пользовательского интерфейса, связанных с откатом драйвера.

[out, optional] NeedReboot

Указатель на значение типа BOOL, заданное DiRollbackDriver , чтобы указать, требуется ли перезагрузка системы для завершения отката. Этот параметр является необязательным и может иметь значение NULL.

Если параметр указан и для завершения отката требуется перезагрузка системы, DiRollbackDriver устанавливает значение TRUE. В этом случае вызывающий объект должен предложить пользователю перезапустить систему. Если этот параметр указан и для завершения установки не требуется перезапуск системы, DiRollbackDriver устанавливает значение FALSE.

Если параметр имеет значение NULL и для завершения отката требуется перезагрузка системы, DiRollbackDriver отображает диалоговое окно перезапуска системы.

Дополнительные сведения об этом параметре см. в следующем разделе Примечаний .

Возвращаемое значение

DiRollbackDriver возвращает значение TRUE , если функция успешно откатила драйвер для устройства; В противном случае DiRollbackDriver возвращает значение FALSE , а зарегистрированную ошибку можно получить, выполнив вызов GetLastError. Ниже приведены некоторые из наиболее распространенных значений ошибок, которые может возвращать GetLastError .

Код возврата Описание
ERROR_ACCESS_DENIED
Вызывающий объект не имеет прав администратора. По умолчанию Windows требует, чтобы вызывающий объект был иметь права администратора для отката пакета драйвера.
ERROR_IN_WOW64
Вызывающее приложение — это 32-разрядное приложение, которое пытается выполнить в 64-разрядной среде, что запрещено. Дополнительные сведения см. в статье Установка устройств в 64-разрядных системах.
ERROR_INVALID_FLAGS
Значение, указанное для параметра Flags , не равно нулю или ROLLBACK_FLAG_NO_UI.
ERROR_NO_MORE_ITEMS
Драйвер резервного копирования не задан для устройства.

Комментарии

Если для устройства установлен ранее установленный драйвер резервного копирования, откат драйвера для устройства заменяет драйвер, установленный в данный момент на устройстве, драйвером резервного копирования. Windows поддерживает не более одного драйвера резервного копирования для устройства. Windows устанавливает драйвер в качестве драйвера резервного копирования для устройства сразу после успешной установки драйвера на устройстве, и Windows определяет, что устройство работает правильно. Однако если драйвер не установлен на устройстве или устройство работает неправильно после установки, Windows не устанавливает драйвер в качестве драйвера резервного копирования для устройства. Дополнительные сведения о откате драйверов см. в разделе сведения о диспетчер устройств в центре справки и поддержки.

Если на указанном устройстве есть драйвер резервного копирования, DiRollbackDriver выполняет следующие операции:

  1. Если параметр Flags равен нулю, DiRollbackDriver предложит пользователю подтвердить, следует ли установить драйвер резервного копирования. В противном случае, если для параметра Flags задано значение ROLLBACK_FLAG_NO_UI, DiRollbackDriver установит драйвер резервного копирования, не запрашивая у пользователя подтверждение установки драйвера резервного копирования.
  2. DiRollbackDriver устанавливает драйвер резервного копирования. Драйвер устанавливается, если драйвер резервного копирования лучше подходит для устройства, чем драйвер, установленный на устройстве в данный момент.
  3. Если драйвер, заменяемый драйвером резервного копирования, не является драйвером папки "Входящие" и не установлен на других устройствах в системе, DiRollbackDriver удаляет драйвер из системы. DiRollbackDriver удаляет драйвер из системы, так как предполагается, что пользователь заменит драйвер только при наличии проблем с драйвером.
Если на указанном устройстве нет драйвера резервного копирования, DiRollbackDriver вызывает SetLastError , чтобы задать ERROR_NO_MORE_ITEMS ошибки, не удаляет установленный в данный момент драйвер и возвращает значение FALSE.

Как правило, приложения установки должны задать для параметра NeedRebootзначение NULL , чтобы система автоматически инициировала перезагрузку системы, если для завершения отката требуется перезагрузка. Приложение должно предоставлять указатель NeedReboot только в следующих случаях:

  • Чтобы завершить установку, приложение должно вызвать DiRollbackDriver несколько раз. В этом случае приложение должно зафиксировать, возвращается ли значение TRUENeedReboot любым из вызовов DiRollbackDriver , и, если да, предложить пользователю перезапустить систему после возврата окончательного вызова DiRollbackDriver .
  • Приложение должно выполнять необходимые операции, кроме вызова DiRollbackDriver, прежде чем произойдет перезагрузка системы. Если требуется перезагрузка системы, приложение должно завершить необходимые операции, а затем предложить пользователю перезапустить систему.
Чтобы установить новый драйвер для устройства вместо отката драйвера для устройства, вызовите DiInstallDriver или UpdateDriverForPlugAndPlayDevices.

Требования

Требование Значение
Минимальная версия клиента Доступно в Windows Vista и более поздних версиях Windows.
Целевая платформа Персональный компьютер
Верхняя часть newdev.h (включая Newdev.h)
Библиотека Newdev.lib
DLL Newdev.dll

См. также раздел

DiInstallDriver

UpdateDriverForPlugAndPlayDevices