首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CM_Request_Device_Eject与PNP_VetoIllegalDeviceRequest一起失败

CM_Request_Device_Eject与PNP_VetoIllegalDeviceRequest一起失败
EN

Stack Overflow用户
提问于 2021-10-01 22:00:16
回答 1查看 177关注 0票数 1

我试过下面的代码。当设备名称包含"San“时,它请求弹出,因为我已经插入了一个SanDisk USB驱动器。然而,它失败了,原因似乎是PNP_VetoIllegalDeviceRequest。我查了一下原因,此页说是

设备不支持指定的操作。

但我可以使用Windows菜单手动弹出SanDisk,因此原因似乎是荒谬的。我正确地调用了函数吗?在调用CM_Request_Device_Eject之前,我需要调用其他的东西吗?

输出是

代码语言:javascript
复制
....
SanDisk Ultra USB Device
Removing Sandisk
rejected.
type:8
name:USBSTOR\Disk&Ven_SanDisk&Prod_Ultra&Rev_1.00\....

代码是( Devinst的值是3)

代码语言:javascript
复制
    if (wcsstr(buffer, L"San") != 0)
    {
        wcout << "Removing Sandisk" << endl;
        PNP_VETO_TYPE vType;
        WCHAR vName[MAX_PATH];
        result = CM_Request_Device_Eject(Devinst, &vType, vName, MAX_PATH, NULL);

        if (result == CR_SUCCESS)
        {
            cout << "ejected" << endl;
        }
        else
        {
            wcout << "rejected." << endl;
            wcout << "type:"<< vType << endl;
            wcout << "name:" << vName << endl;
        }
    }
EN

回答 1

Stack Overflow用户

发布于 2021-10-01 23:16:12

在搜索完网页后,我找到了以下页面:https://www.winvistatips.com/threads/removal-of-usb-disk.179677/

发问者也有同样的错误,有一个答复说他需要调用父节点,而不是USB磁盘节点。所以,我按照下面的方式修改了代码,它起了作用。

代码语言:javascript
复制
        DEVINST parent;
        CM_Get_Parent(&parent, Devinst, NULL);

        PNP_VETO_TYPE vType;
        WCHAR vName[MAX_PATH];
        result = CM_Request_Device_Eject(parent, &vType, vName, MAX_PATH, NULL);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69412352

复制
相关文章

相似问题

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