Как получить список устройств с желтым восклицательным знаком в диспетчере устройств Windows - c ++ - PullRequest
2 голосов
/ 17 февраля 2012

Я использую пример кода MSMI WMI, чтобы получить список устройств, которые отображаются в диспетчере устройств с желтым восклицательным знаком, но он только возвращает список всех должным образом Установленные устройства на машине. Может ли кто-нибудь здесь помочь мне решить эту проблему только с помощью C ++. Спасибо

    void GetUnKnownDeviceList()
{
    HRESULT hres;
    hres =  CoInitializeEx(0, COINIT_MULTITHREADED); 

    hres =  CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT,
                                 RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL); 

    IWbemLocator *pLoc = 0;
    hres = CoCreateInstance( CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID *) &pLoc);
    IWbemServices *pSvc = 0;                  

    hres = pLoc->ConnectServer(_bstr_t(L"ROOT\\CIMV2"),NULL,NULL,0,NULL,0,0,&pSvc);

    hres = CoSetProxyBlanket(pSvc, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE,  NULL, RPC_C_AUTHN_LEVEL_CALL,
                             RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE);       

    IEnumWbemClassObject* pEnumerator = NULL;    
    hres = pSvc->ExecQuery(
            bstr_t("WQL"), 
            // bstr_t("SELECT * FROM Win32_PnPEntity"), DOES NOT LIST DEVICES SHOWING WITH YELLOW EXCLAMATION MARK
            bstr_t("SELECT * FROM Win32_PnPEntity WHERE ConfigManagerErrorCode = 0"), // LIST ONLY PROPERLY INSTALLED DEVICES
            WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, 
            NULL,
            &pEnumerator);

    IWbemClassObject *pclsObj;
    ULONG uReturn = 0;
    while(1)
    {
        HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);
        VARIANT vtProp;
        hr = pclsObj->Get(L"Name", 0, &vtProp, 0, 0);
        TRACE("Device Name : %s\r\n\", vtProp.bstrVal);
        VariantClear(&vtProp);
        pclsObj->Release();
   }    

}

Ответы [ 3 ]

1 голос
/ 17 февраля 2012

Чтобы вывести список устройств, которые не работают, вам нужен запрос для всех устройств с ConfigManagerErrrorCode, отличным от 0, необходимо изменить предложение WQL на

SELECT * FROM Win32_PnPEntity WHERE ConfigManagerErrorCode <> 0
0 голосов
/ 27 октября 2014

можно использовать wmi с этим примером в c #:

/ Query the device list trough the WMI. If you want to get
// all the properties listen in the MSDN article mentioned
// below, use "select * from Win32_PnPEntity" instead!
ManagementObjectSearcher deviceList =
new ManagementObjectSearcher("Select Name, Status from Win32_PnPEntity");

// Any results? There should be!
if ( deviceList != null )
// Enumerate the devices
foreach ( ManagementObject device in deviceList.Get() )
{
    // To make the example more simple,
    string name = device.GetPropertyValue("Name").ToString();
    string status = device.GetPropertyValue("Status").ToString();

    // Uncomment these lines and use the "select * query" if you 
    // want a VERY verbose list
    // foreach (PropertyData prop in device.Properties)
    //    Console.WriteLine( "\t" + prop.Name + ": " + prop.Value);

    // More details on the valid properties:
    // http://msdn.microsoft.com/en-us/library/aa394353(VS.85).aspx
    Console.WriteLine( "Device name: {0}", name );  
    Console.WriteLine( "\tStatus: {0}", status );

    // Part II, Evaluate the device status.
    bool working = (( status == "OK" ) || ( status == "Degraded" )
        || ( status == "Pred Fail" ));

    Console.WriteLine( "\tWorking?: {0}", working );
}

http://www.codeproject.com/Articles/30031/Query-hardware-device-status-in-C

просто измените статус или ConfigManagerErrorCode, чтобы получить тип ошибки, которую вы ищете.

0 голосов
/ 19 февраля 2012

Почему бы вам не попробовать использовать setupapi для этого?Я думаю, что вы должны иметь возможность перечислять список устройств известных и неизвестных устройств с ним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...