如何在电脑重新启动时检查windows设备的状态?

如何在电脑重新启动时检查windows设备的状态?,windows,driver,device,reboot,Windows,Driver,Device,Reboot,我想检查每个设备(如wifi或bluetooth)的状态,知道它们是否正常工作,或者在重新启动压力测试时丢失,如何获取设备状态(如设备管理中的设备属性)?windows是否有API获取该状态?获取需要调用的设备状态 对于getDEVINST-dnDevInst,您可以枚举使用+或可选使用+的所有设备 例如: void enumDN(DEVINST dnDevInst) { union { PVOID buf; PBYTE pb; PWSTR

我想检查每个设备(如wifi或bluetooth)的状态,知道它们是否正常工作,或者在重新启动压力测试时丢失,如何获取设备状态(如设备管理中的设备属性)?windows是否有API获取该状态?

获取需要调用的设备状态

对于get
DEVINST-dnDevInst
,您可以枚举使用+或可选使用+的所有设备

例如:

void enumDN(DEVINST dnDevInst)
{
    union {
        PVOID buf;
        PBYTE pb;
        PWSTR sz;
    };

    ULONG cb = 0, rcb = 256;

    static volatile UCHAR guz;

    PVOID stack = alloca(guz);

    WCHAR Name[MAX_DEVICE_ID_LEN];

    CONFIGRET err;

    if (CM_Get_Device_ID(dnDevInst, Name, RTL_NUMBER_OF(Name), 0) == CR_SUCCESS)
    {
        DEVPROPTYPE PropertyType;
        ULONG Status, ulProblemNumber;

        if (CM_Get_DevInst_Status(&Status, &ulProblemNumber, dnDevInst, 0) == CR_SUCCESS)
        {
            PWSTR FriendlyName = NULL;
            do 
            {
                if (cb < rcb)
                {
                    rcb = cb = RtlPointerToOffset(buf = alloca(rcb - cb), stack);
                }

                if ((err = CM_Get_DevNode_PropertyW(dnDevInst, &DEVPKEY_Device_FriendlyName, 
                    &PropertyType, pb, &rcb, 0)) == CR_SUCCESS)
                {
                    if (PropertyType == DEVPROP_TYPE_STRING)
                    {
                        FriendlyName = sz;
                    }
                }

            } while (err == CR_BUFFER_SMALL);

            DbgPrint("%08x %S %S\n", Status, Name, FriendlyName);
        }
    }

    if ((err = CM_Get_Child(&dnDevInst, dnDevInst, 0)) == CR_SUCCESS)
    {
        do 
        {
            enumDN(dnDevInst);

        } while ((err = CM_Get_Sibling(&dnDevInst, dnDevInst, 0)) == CR_SUCCESS);
    }
}

void enumDN()
{
    DEVINST dnDevInst;
    if (CM_Locate_DevInstW(&dnDevInst, NULL, 0) == CR_SUCCESS)
    {
        enumDN(dnDevInst);
    }
}
void enumDN(DEVINST dnDevInst)
{
联合{
pvoidbuf;
PBYTE-pb;
PWSTR sz;
};
ULONG cb=0,rcb=256;
静态挥发性UCHAR-guz;
PVOID stack=alloca(guz);
WCHAR名称[最大设备ID长度];
配置错误;
如果(CM_获取设备_ID(dnDevInst,名称,RTL_编号(名称),0)=CR_成功)
{
DEVPROPTYPE属性类型;
ULONG状态、ulProblemNumber;
如果(CM_获取设备状态(&Status,&ulProblemNumber,dnDevInst,0)=CR_成功)
{
PWSTR FriendlyName=NULL;
做
{
如果(cb