Удаление драйвера устройства 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. Еще не пробовал код, так как знаю, что что-то упустил, просто не хватает опыта, чтобы его найти.

0 ответов

Другие вопросы по тегам