Удаление драйвера устройства PNP после / во время процесса удаления
Попытка удалить файл.ini драйвера из хранилища драйверов и удалить хранилище с компьютера. После запуска удаления, Windows показывает ошибку драйвера устройства, и я должен вручную удалить его с помощью pnputil. Необходимо добавить это к деинсталлятору, чтобы он выполнял чистую деинсталляцию. Я унаследовал этот код.
Искал код, который бы работал, однако я новичок и немного не в себе. Я нашел и добавил код отсюда: /questions/7478818/udalenie-ustrojstva-windows-s-ispolzovaniem-c/7478825#7478825 опубликованный Брэндоном Бирденом, но не знаю точно, как его использовать. Существующий код:
// Delete our driver.
//
hComponent = OpenService(hSCM, DRIVER_NAME, SERVICE_ALL_ACCESS);
bool fDriverRemoved = false;
if (hComponent)
{
ControlService(hComponent, SERVICE_STOP, &ss);
if (DeleteService(hComponent))
fDriverRemoved = true;
CloseServiceHandle(hComponent);
}
else if (GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST)
fDriverRemoved = true;
if (!fDriverRemoved)
_ErrBox(PROBLEM_WITH_DRIVER);
CloseServiceHandle(hSCM);
Добавлен код с примечанием:
//Added to remove driver from PNP and Driver store to avoid "Driver
Error" After uninstall of program.
//copied from Stackru
// Get all of the devices
//This enumeration does not work in general, instead passing
//complete id of the device is probably best.
//It is helpful to know the vendor and device ID
PCTSTR enumType = "PORTS";
HDEVINFO devs = NULL;
devs = SetupDiGetClassDevs(NULL, enumType, 0, DIGCF_ALLCLASSES);
// Loop through the devices
DWORD devCount = 0;
SP_DEVINFO_DATA devInfo;
int enumeratingDevices = 1;
/*This line is essential*/
devInfo.cbSize = sizeof(SP_DEVINFO_DATA);
while (enumeratingDevices) {
enumeratingDevices = SetupDiEnumDeviceInfo(devs, devCount, &devInfo);
Uninstall each device
if (enumeratingDevices) {
SetupDiRemoveDevice(devs, &devInfo);
devCount++;
}
}
//Clean up
SetupDiDestroyDeviceInfoList(devs);
Я могу найти идентификатор устройства и имя, как указано в pnputil / e. Еще не пробовал код, так как знаю, что что-то упустил, просто не хватает опыта, чтобы его найти.