首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何知道Windows中初始即插即用枚举何时完成

如何知道Windows中初始即插即用枚举何时完成
EN

Stack Overflow用户
提问于 2019-07-26 11:25:16
回答 1查看 86关注 0票数 0

我正在编写一个自动启动的Windows服务。我的服务似乎是在Windows完成硬件枚举之前就开始了,特别是USB闪存驱动器。有没有办法知道Windows什么时候完成了最初的硬件扫描?我非常肯定有,因为当扫描程序确定必须重新启动才能完成硬件安装时,资源管理器将显示提示。我已经想过睡很长一段时间了。我宁愿找到一个更优雅的解决方案。我使用C++开发Visual Studio2017,目标是Windows7和Windows10。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-30 11:02:31

我不知道这是否只是延迟了我的应用程序足够长的时间,让所有的驱动器都显示出来,或者它是在强迫驱动器显示出来。这是我的解决方案:

代码语言:javascript
复制
#define _WIN32_WINNT _WIN32_WINNT_WIN7

#include <windows.h>
#include <cfgmgr32.h>
#include <tchar.h>

#pragma comment(lib,"cfgmgr32.lib")

INT _tmain(){

    DEVINST diDevice = 0;

    CONFIGRET crErr = CM_Locate_DevInst(&diDevice,nullptr,CM_LOCATE_DEVNODE_NORMAL);

    if (crErr == CR_SUCCESS){

        crErr = CM_Reenumerate_DevNode(diDevice,CM_REENUMERATE_SYNCHRONOUS);

        if (crErr == CR_SUCCESS){

            _tprintf(TEXT("Finished enum\n"));

        }else{

            _tprintf(TEXT("Enum failed: %u\n"),(UINT)CM_MapCrToWin32Err(crErr,0));

        }

    }else{

        _tprintf(TEXT("Locate failed: %u\n"),(UINT)CM_MapCrToWin32Err(crErr,0));

    }

    return 0;

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57212754

复制
相关文章

相似问题

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