我遇到了如下问题:
1、在Win2000中,在设备管理器中将某一硬件卸载,并在winnt\inf目录下将其INF文件删除,在winnt\system32\drivers目录下将其.sys文件删除。
2、这时用UpdateDriverForPlugAndPlayDevices安装这一硬件的驱动不成功,但我可以用SetupCopyOEMInf来安装其INF文件,这时重启系统或在设备管理器中进行扫描硬件改动,此硬件的驱动才能装上。请问用程序怎样实现扫描硬件改动的功能?
或者用什么其它的方法来实现我的第二个步骤可以不重启系统或扫描就可以实现驱动的安装?

解决方案 »

  1.   

    先用CM_Locate_DevNode得到设备管理树的根结点,然后用CM_Reenumerate_DevNode以这个根结点为参数刷新它就搞定!在MSDN里面可以查到这两个函数的用法,相关的知识里面也有。
      

  2.   

    楼主能说详细一点吗?能不能贴上代码,我把它整理到精华贴和FAQ并把分反结给你
      

  3.   

    #include <cfgmgr32.h>BOOL ScanForHardwareChange()
    {
        DEVINST devInst;
        CONFIGERT status;
        
        //得到设备管理树的根结点
        status = CM_Locate_DevNode(&devInst,NULL,CM_LOCATE_DEVNODE_NARMAL);
        if (status!=CR_SUCCESS)
        {
            printf("CM_Locate_DevNode failed: %x\n",status);
            return FALSE;
        }    //刷新
        status = CM_Reenumerate_DevNode(devInst,0);
        if (status !=CR_SUCCESS)
        {
            printf("CM_Reenumerate_DevNode failed: %x\n",status);
            return FALSE;
        }
        return TRUE;
    }
    直接使用这个函数就可以了。如果电脑上没有安装DDK,也可以通过引用cfgmgr32.dll,里面已经封装了这两个函数。
      

  4.   

    我想把api for windows 全看一遍好么?
      

  5.   

    xp啊,偶有很多帖子自己回答的,还代解决方案/代码的,可是上次清贴,都被CSDN作为没有解题的帖子,扣了信誉分5555