Eliminar la clase de dispositivo de Windows en el registro

Eliminar la clase de dispositivo de Windows en el registro

Tengo un .INF con un descriptor de seguridad HKR,,Security,,"D:P(A;;GA;;;SY)(A;;GA;;;BA)".

Cambié este descriptor de seguridad para eliminar los derechos de administrador. Para que cualquier usuario pueda abrir la aplicación. Sin embargo, no funciona a menos que cambie la clase de dispositivo y ClassGUID en el archivo INF.

¿Cómo puedo eliminar la clase de dispositivo del controlador previamente instalado en Windows?

Creo que el descriptor de seguridad instalado previamente no se elimina aunque eliminé el controlador del administrador de dispositivos.

No puedo anular el descriptor de seguridad con el archivo INF modificado.

Respuesta1

Finalmente pude desinstalar la clase de dispositivo usando un pequeño programa C++. En el siguiente enlace, al final del sitio, hay un código C++ que puede eliminar completamente el controlador, incluido el ClassName asociado con el ClassGUID.

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

También copié el mismo código a continuación. Creé una pequeña aplicación MFC para realizar la desinstalación.

    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;
 }

información relacionada