刪除登錄中的 Windows 裝置類

刪除登錄中的 Windows 裝置類

我有一個帶有安全描述符 HKR,,Security,,"D:P(A;;GA;;;SY)(A;;GA;;;BA)" 的 .INF。

我更改了此安全描述符以刪除管理員權限。這樣任何用戶都可以打開該應用程式。但是,除非我更改 INF 檔案中的裝置類別和 ClassGUID,否則它不起作用。

如何刪除 Windows 中先前安裝的驅動程式的裝置類別?

我認為即使我從設備管理器中刪除了驅動程序,以前安裝的安全描述符也不會被刪除。

我無法使用修改後的 INF 檔案覆蓋安全描述符。

答案1

我終於能夠使用一個小的 C++ 程式來卸載設備類別。在以下連結中,在網站末尾,有一個 C++ 程式碼,您可以完全刪除驅動程序,包括與 ClassGUID 關聯的 ClassName。

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

我也複製了下面相同的程式碼。我製作了一個小型 MFC 應用程式來執行卸載。

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

相關內容