我调用Setup函数可以禁用和启用一些指定的设备,例如USB、通讯端口、网卡等,枚举,禁用,解禁等功能也实现了 
现在想要的是在每次枚举我所管理的设备前先判断它的当前状态,是否已被禁用了。禁用为0,否则是1 
想用SetupDiGetDeviceInstallParams实现,编译也没错, 
if(!SetupDiGetDeviceInstallParams(hDevInfo[j],&DeviceInfoData,(PSP_DEVINSTALL_PARAMS)&DeviceInstallParams)) 
  m_List.SetItemText(i,3,_T("0")); 
else 
  m_List.SetItemText(i,3,_T("1")); 
但却不管设备有没有解禁,输出的都是0,请问是怎么回事 

解决方案 »

  1.   

    我是分类列出的各种设备,所以用到了hDevInfo[j]这个数组,我再把用到的一些参数附上:
    HDEVINFO hDevInfo[6];//句柄
    SP_DEVINFO_DATA DeviceInfoData;//该结构体定义了一个设备,设备信息集
    SP_DRVINSTALL_PARAMS  DeviceInstallParams;
    hDevInfo[3] = SetupDiGetClassDevs(
    (LPGUID)&GUID_DEVCLASS_PORTS,
    0, 
    0,
    DIGCF_PRESENT);DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
      

  2.   

    当然如果可以的话,也可以不用SetupDiGetDeviceInstallParams,只要能实现就行
      

  3.   

    SetupDiGetDeviceInstallParams获得指定设备的安装信息
    看看这个CM_Get_DevNode_Status
      

  4.   

    CM_Get_DevNode_Status我也试过了,我是这样做的(我看网上也有人用这个),但也是不行
    DWORD Status,Problem;
    SP_DEVINFO_DATA DeviceInfoData;
    if (CM_Get_DevNode_Status(&Status, &Problem,DeviceInfoData.DevInst,0) == CR_SUCCESS) 
        m_List.SetItemText(i,3,_T("1"));
    else
        m_List.SetItemText(i,3,_T("0"));编译没有错误,但却不管设备有没有禁止他都输出1大家帮帮忙啊
      

  5.   

    http://hi.baidu.com/lbird/blog/item/8878b6ec5378e13f27979118.html
    看看对楼主有帮助么?
      

  6.   

    代码里面有俩个函数
    IsDisableable

    IsDisabled
    我没有测试,楼主好好看看加油
      

  7.   

    实现不了啊,还是我说的那个问题,CM_Get_DevNode_Status前两个参数是干什么用的啊
      

  8.   

    我禁用时用到了SetupDiSetClassInstallParams和SetupDiChangeState,检测状态时是不是得用SetupDiGetClassInstallParams?
    大侠们帮帮忙啊
    分不够可以再加