Удалить класс устройств Windows в реестре

571
radar101

У меня есть .INF с дескриптором безопасности HKR ,, Безопасность ,, "D: P (A ;; GA ;;; SY) (A ;; GA ;;; BA)".

Я изменил этот дескриптор безопасности, чтобы удалить права администратора. Так что любой пользователь может открыть приложение. Однако это не сработает, если я не изменю класс устройства и ClassGUID в INF-файле.

Как я могу удалить класс устройства ранее установленного драйвера в Windows?

Я думаю, что ранее установленный дескриптор безопасности не удаляется, даже если я удалил драйвер из диспетчера устройств.

Я не могу переопределить дескриптор безопасности измененным INF-файлом.

0

1 ответ на вопрос

0
radar101

I was finally able to finally uninstall the device class using a small C++ program. In the following link, at the end of the site, there is a C++ code which you can delete driver completely including the ClassName Associated with the ClassGUID.

https://www.osronline.com/showthread.cfm?link=168171

I have also copied the same code below as well. I made a small MFC application to perform the uninstallation.

 HDEVINFO devs = INVALID_HANDLE_VALUE; SP_DEVINFO_LIST_DETAIL_DATA devInfoListDetail; SP_DEVINFO_DATA devInfo; unsigned int DeviceNo = 0; GUID cls; DWORD numClass = 0; TCHAR devID[MAX_DEVICE_ID_LEN]; SP_REMOVEDEVICE_PARAMS rmdParams; SetupDiClassGuidsFromNameEx ("ClassName", &cls, 1, &numClass, NULL, NULL); devs = SetupDiGetClassDevsEx (&cls, NULL, NULL, DIGCF_PRESENT, NULL, NULL, NULL); devInfo.cbSize = sizeof(devInfo); while (SetupDiEnumDeviceInfo (devs, DeviceNo++, &devInfo)) { devInfoListDetail.cbSize = sizeof(devInfoListDetail); if (!SetupDiGetDeviceInfoListDetail (devs, &devInfoListDetail) || CM_Get_Device_ID_Ex(devInfo.DevInst, devID, MAX_DEVICE_ID_LEN/* 200 */, 0, devInfoListDetail.RemoteMachineHandle)) { break; } rmdParams.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER); rmdParams.ClassInstallHeader.InstallFunction = DIF_REMOVE; rmdParams.Scope = DI_REMOVEDEVICE_GLOBAL; rmdParams.HwProfile = 0; SetupDiSetClassInstallParams (devs, &devInfo, &rmdParams.ClassInstallHeader,sizeof (rmdParams)); SetupDiCallClassInstaller (DIF_REMOVE, devs, &devInfo); } SetupDiDestroyDeviceInfoList(devs); DEVINST devRoot; if(CM_Locate_DevNode_Ex(&devRoot,NULL,CM_LOCATE_DEVNODE_NORMAL,NULL) != CR_SUCCESS) { goto final; } CM_Reenumerate_DevNode_Ex(devRoot, 0, NULL); final: return; }