Remover classe de dispositivos do Windows no registro

0

Eu tenho um .INF com um descritor de segurança HKR , Segurança , "D: P (A ;;;;; SY) (A ;; GA ;;; BA)".

Alterei este descritor de segurança para remover os direitos de administrador. Para que qualquer usuário possa abrir o aplicativo. No entanto, ele não funciona a menos que eu mude a classe de dispositivo e ClassGUID no arquivo INF.

Como posso remover a classe de dispositivo do driver instalado anteriormente no Windows?

Acho que o descritor de segurança instalado anteriormente não é excluído, embora eu tenha excluído o driver do gerenciador de dispositivos.

Não consigo sobrescrever o descritor de segurança com o arquivo INF modificado.

    
por radar101 13.10.2015 / 07:46

1 resposta

0

Finalmente consegui finalmente desinstalar a classe de dispositivos usando um pequeno programa C ++. No link a seguir, no final do site, há um código C ++ que você pode excluir completamente o driver incluindo o ClassName associado ao ClassGUID.

link

Eu também copiei o mesmo código abaixo. Eu fiz um pequeno aplicativo MFC para executar a desinstalação.

    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;
 }
    
por 15.10.2015 / 07:12