Ich konnte die Geräteklasse schließlich mit einem kleinen C ++ - Programm deinstallieren. Im folgenden Link befindet sich am Ende der Site ein C ++ - Code, den Sie vollständig löschen können, einschließlich des mit ClassGUID verknüpften ClassName.
https://www.osronline.com/showthread.cfm?link=168171
Ich habe auch den gleichen Code unten kopiert. Ich habe eine kleine MFC-Anwendung erstellt, um die Deinstallation durchzuführen.
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; }