首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在将数据传输到PC时禁用windows中的USB存储设备

在将数据传输到PC时禁用windows中的USB存储设备
EN

Stack Overflow用户
提问于 2022-10-12 12:05:09
回答 1查看 69关注 0票数 0

我曾使用以下代码禁用Windows中的USB驱动器,但当数据从USB传输到PC时,它无法工作。在这个场景中,我请求您提供任何其他选项来禁用该设备。

代码语言:javascript
运行
复制
if (SetupDiSetClassInstallParams(m_hDevInfo, &spdd, (SP_CLASSINSTALL_HEADER*)&spPropChangeParams, sizeof(SP_PROPCHANGE_PARAMS)) == FALSE)
{
    printf("Not able to manage the status of the device.SetupDiSetClassInstallParams Failed at ErrorCode - %ld\n", GetLastError());
    writeLog("err", "Not able to manage the status of the device.SetupDiSetClassInstallParams Failed");
}
else if (!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, m_hDevInfo, &spdd))
{
    DWORD error = GetLastError();
    printf("Not able to manage the status of the device.SetupDiCallClassInstaller API Failed at Errorcode - %ld\n", error);
    
    writeLog("err", "Not able to manage the status of the device.SetupDiCallClassInstaller API Failed", error);
    {
        if (error == 13)
        {
            for (int i = 0; i < 100; i++)
            {
                writeLog("war", "Retrying");
                if (SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, m_hDevInfo, &spdd))
                {
                    printf("retry succeeded for disabling device\n");
                    writeLog("suc", "Retry succeeded for disabling device", GetLastError());
                    break;
                }
                printf("retry failed for disabling device\n");
                writeLog("err", "Retry failed for disabling device");
                Sleep(20);
            }
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-17 06:46:55

只需尝试在管理模板/系统/可移动存储访问/可移动磁盘中启用编辑组策略:手动拒绝读取访问。或者您可以使用Group使用程序(https://learn.microsoft.com/en-us/windows/win32/api/_policy/)。

您可以引用下面的代码来禁用读取访问。

代码语言:javascript
运行
复制
int denyRead(DWORD val)
{
    HKEY key;
    HKEY pol;
    //DWORD val = 1;
    DWORD disp = 0;
    GUID ext = REGISTRY_EXTENSION_GUID;
    CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
    CComPtr<IGroupPolicyObject> lgp;
    HRESULT hr = CoCreateInstance(CLSID_GroupPolicyObject, NULL, CLSCTX_INPROC_SERVER, IID_IGroupPolicyObject, (LPVOID*)&lgp);
    if (SUCCEEDED(lgp->OpenLocalMachineGPO(GPO_OPEN_LOAD_REGISTRY)))
    {
        if (SUCCEEDED(lgp->GetRegistryKey(GPO_SECTION_MACHINE, &key)))
        {
            //All Removable Storage classes: Deny All access
            RegCreateKeyExW(key, L"SOFTWARE\\Policies\\Microsoft\\Windows\\RemovableStorageDevices", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE | KEY_QUERY_VALUE, NULL, &pol, &disp);
            RegSetValueEx(pol, L"Deny_All", 0, REG_DWORD, (BYTE*)&val, sizeof(val));
            RegCreateKeyExW(key, L"SOFTWARE\\Policies\\Microsoft\\Windows\\RemovableStorageDevices\\{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE | KEY_QUERY_VALUE, NULL, &pol, &disp);
            //Removable Disks: Deny write access
            RegSetValueEx(pol, L"Deny_Write", 0, REG_DWORD, (BYTE*)&val, sizeof(val));
            //Removable Disks: Deny read access
            RegSetValueEx(pol, L"Deny_Read", 0, REG_DWORD, (BYTE*)&val, sizeof(val));
            //Removable Disks: Deny execute access
            RegSetValueEx(pol, L"Deny_Execute", 0, REG_DWORD, (BYTE*)&val, sizeof(val));
            RegCloseKey(key);
            hr = lgp->Save(TRUE, TRUE, &ext, const_cast<GUID*>(&CLSID_GPESnapIn));
            _com_error err(hr);
            wprintf(L"%s", err.ErrorMessage());
        }
    }
    lgp.Release();
    CoUninitialize();
    Sleep(1000);
    return 0;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74041539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档