偵測Windows系統裝置管理員中有黃色驚嘆號的裝置名稱

閱讀時間約 1 分鐘


說實在的,過去一兩年來,每天客戶都跟我抱怨﹔你那個甚麼爛系統,總是有裝置遺失的問題! 小弟實在不堪其擾,因為裝置管理員黃色驚嘆號的產生,也不一定真的是我們的問題,也常常是第三方周邊裝置不給力呀!


當Windows無法正確偵測周邊裝置狀態的時候,就會在裝置管理員該周邊的圖示上顯示一個黃色驚嘆號,英文就是Yellow Bang或是簡稱YB,表示該周邊的驅動程式安裝不完全或是處於無法正常工作的狀態。


由於這種周邊裝置不正常的狀態常常都是在壓力測試下才會發生,例如不斷地重開機、進出Modern Standby S3或是S4休眠狀態的時候,測試個幾千次才發生個幾次,這種狀況不太可能用人工的方式去檢查周邊裝置狀態,所以我們需要一個小程式,每次開機或是進出休眠狀態的時候去檢查,如果發生黃色驚嘆號,就離開壓力測試迴圈,並且回報那個裝置有問題。


在這邊我們透過WMI API才查詢系統周邊的狀況,其中主要就是呼叫IWbemServices 介面來存取 WMI 服務。透過Win32_PnPEntity類別,找出任何一個裝置的ConfigManagerErrorCode不等於0,如果不等於0,就表示該裝置處於不正常的狀態。


詳細的程式碼如下,提供大家做為參考。

//
// 使用WMI API來列出所有在裝置管理員中有黃色驚嘆號的裝置名稱。
//
#include <iostream>
#include <wbemidl.h>
#pragma comment(lib, "wbemuuid.lib")
#include <comdef.h>
#include <ctime>

using namespace std;

int main(int argc, char** argv)
{
HRESULT hres;

// Initialize COM.
hres = CoInitializeEx(0, COINIT_MULTITHREADED);
if (FAILED(hres))
{
cout << "Failed to initialize COM library. Error code = 0x"
<< hex << hres << endl;
return 1;
}

// Set general COM security levels.
hres = CoInitializeSecurity(
NULL,
-1,
NULL,
NULL,
RPC_C_AUTHN_LEVEL_DEFAULT,
RPC_C_IMP_LEVEL_IMPERSONATE,
NULL,
EOAC_NONE,
NULL);
if (FAILED(hres))
{
cout << "Failed to initialize security. Error code = 0x"
<< hex << hres << endl;
CoUninitialize();
return 1;
}

// Obtain the initial locator to WMI.
IWbemLocator* pLoc = NULL;
hres = CoCreateInstance(
CLSID_WbemLocator,
0,
CLSCTX_INPROC_SERVER,
IID_IWbemLocator,
(LPVOID*)&pLoc);
if (FAILED(hres))
{
cout << "Failed to create IWbemLocator object. "
<< "Error code = 0x"
<< hex << hres << endl;
CoUninitialize();
return 1;
}

// Connect to WMI through the IWbemLocator::ConnectServer method.
IWbemServices* pSvc = NULL;
hres = pLoc->ConnectServer(
_bstr_t(L"ROOT\\CIMV2"),
NULL,
NULL,
0,
NULL,
0,
0,
&pSvc);
if (FAILED(hres))
{
cout << "Could not connect. Error code = 0x"
<< hex << hres << endl;
pLoc->Release();
CoUninitialize();
return 1;
}

// Set the IWbemServices proxy so that impersonation
// of the user (client) occurs.
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);
if (FAILED(hres))
{
cout << "Could not set proxy blanket. Error code = 0x"
<< hex << hres << endl;
pSvc->Release();
pLoc->Release();
CoUninitialize();
return 1;
}

// Use the IWbemServices pointer to make requests of WMI.
IEnumWbemClassObject* pEnumerator = NULL;
hres = pSvc->ExecQuery(
bstr_t("WQL"),
bstr_t("SELECT * FROM Win32_PnPEntity WHERE ConfigManagerErrorCode <> 0"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator);
if (FAILED(hres))
{
cout << "Query for operating system name failed."
<< " Error code = 0x"
<< hex << hres << endl;
pSvc->Release();
pLoc->Release();
CoUninitialize();
return 1;
}

time_t current_time;
char c_time_string[20];

/* Get the current time. */
current_time = time(NULL);

/* Convert it to local time representation. */
strftime(c_time_string, sizeof(c_time_string), "%m/%d %H:%M:%S", localtime(&current_time));

// Get the data from the query.
IWbemClassObject* pclsObj = NULL;
ULONG uReturn = 0;
while (pEnumerator)
{
HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);
if (0 == uReturn)
{
wcout << c_time_string << " All device drivers are working fine!" << endl;
break;
}

VARIANT vtProp;
VariantInit(&vtProp);
//hr = pclsObj->Get(L"PNPDeviceID", 0, &vtProp, 0, 0);
//wcout << "PNP Device ID : " << vtProp.bstrVal << endl;
//VariantClear(&vtProp);

hr = pclsObj->Get(L"DeviceID", 0, &vtProp, 0, 0);
wcout << c_time_string << " Device ID : " << vtProp.bstrVal << endl;
VariantClear(&vtProp);

hr = pclsObj->Get(L"Name", 0, &vtProp, 0, 0);
wcout << c_time_string << " Device Name : " << vtProp.bstrVal << endl;
VariantClear(&vtProp);

pclsObj->Release();
}

// Cleanup.
pSvc->Release();
pLoc->Release();
pEnumerator->Release();
CoUninitialize();

return 0;
}


需要注意的是,無論重新開機或是從休眠模式喚醒的情況下,Windows都需要一段時間重新偵測周邊裝置,所以我們必須要等待一段時間之後,再詢問周邊裝置的狀態,而不是立刻執行詢問狀態。這個時間會依據周邊裝置不同,而有所不同,特別是系統忙碌的狀況下,有些USB裝置,甚至會偵測個好幾十秒,都不一定有回應,所以我們建議等個兩三分鐘之後,再開始詢問。


至於重新開機與休眠模式壓力測試的工具,大部分人都是使用微軟所提供的pwrtest的工具,在這邊就不贅述。希望大家都能輕鬆通過系統壓力測試。

avatar-img
4會員
9內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Gary Hu的沙龍 的其他內容
透過C#取得臺灣證券交易所與證券櫃檯買賣中心OpenAPI公司治理與財務報表等資料進行分析。
利用C#爬蟲查詢每日的小台指散戶多空比
透過C#去證券櫃檯買賣中心爬取買賣日報表的程式介紹
透過C#實作台灣證券交易所買賣日報表查詢機器人
本文將討論在EWDK或WDK環境下如何取得時區差值與日光節約時間開啟與否的相關資訊,並記錄下相關研究結果。
身為會寫一點程式碼的工程師,量化交易投資無疑是最具吸引力的投資方式。試想只要寫個小程式定期去追蹤股市大盤交易指數,然後自動下單買入賣出,就會賺進源源不絕的財富,光用想的口水都快流下來了。 坐而言不如起而行。這邊有幾個小問題需要克服: 即時報價 下單買賣 交易策略
透過C#取得臺灣證券交易所與證券櫃檯買賣中心OpenAPI公司治理與財務報表等資料進行分析。
利用C#爬蟲查詢每日的小台指散戶多空比
透過C#去證券櫃檯買賣中心爬取買賣日報表的程式介紹
透過C#實作台灣證券交易所買賣日報表查詢機器人
本文將討論在EWDK或WDK環境下如何取得時區差值與日光節約時間開啟與否的相關資訊,並記錄下相關研究結果。
身為會寫一點程式碼的工程師,量化交易投資無疑是最具吸引力的投資方式。試想只要寫個小程式定期去追蹤股市大盤交易指數,然後自動下單買入賣出,就會賺進源源不絕的財富,光用想的口水都快流下來了。 坐而言不如起而行。這邊有幾個小問題需要克服: 即時報價 下單買賣 交易策略
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
資訊由宇翔資訊提供在現代工作環境中,專業電腦是提高生產力和工作效率的關鍵工具。無論是設計師、工程師、數據科學家還是其他專業人士,選擇一台性能優異的電腦對於完成複雜的工作任務至關重要。本文將介紹專業電腦的選購指南、性能特點、品牌推薦以及維護建議,幫助您選擇和維護合適的專業電腦。
資訊由宇翔資訊提供筆電是現代生活和工作中不可或缺的工具,然而,隨著使用時間的增加,各種故障問題也不可避免地出現。了解一些基本的筆電維修知識,不僅可以節省維修費用,還能延長筆電的使用壽命。本文將介紹筆電常見故障的診斷和修復方法,以及一些維護建議。
Thumbnail
在尋找電腦維修推薦時,應注意選擇有良好口碑和正面評價的維修店,確認其技術專業度和服務品質。檢查店家的維修保固和費用透明度,以避免隱藏費用。此外,了解維修店是否使用原廠零件,以及其客戶服務的反應速度和解決問題的能力。透過朋友推薦或查看線上評價來確保選擇可靠的維修服務。
Thumbnail
這篇文章記錄了一次特殊的電腦維修案例,客戶電腦出現無法上網和不定時當機後無法開機的問題。文章詳細描述了維修過程和最終的結論......
Thumbnail
2012年,是平板電腦開始新起的一年,同時微軟也在這年推了名為Windows 8的作業系統,想和iOS與Android在平板市場分一杯羹,只不過這並沒有引起多大回響,反而是招來許多使用者的的不滿和抱怨。就近,這套系統真的有大家說的這麼不堪嗎?
Thumbnail
最近微軟為了推廣 Windows 11,除了定出2025/10/14為 Windows 10的最後更新日之外,還會在開機時顯示全螢幕「廣告」,全螢幕到用戶任何事都不能做,有些人還會被嚇到以為要強制升級 Windows 11,就算畫面上寫著「您的電腦並不符合升級至 Windows 11 的資格」
Thumbnail
1. 資料救援 常見原因包括誤刪資料、筆電損壞或資料覆寫等,這些情況下需要進行資料救援以恢復重要文件。 2. 螢幕問題 如果螢幕出現黑屏、白屏、雜訊或閃爍等情況,則需要進行螢幕維修。 3. 無法開關機 按下電源鍵無反應、卡在開機畫面、或不停重啟等問題,需要進行電源系統的檢查和維修。 4.
Thumbnail
Windows Clarity 是一種網站分析產品,讓網站設計師、開發人員可藉由它,更容易觀察用戶在網站的操作行為,協助更快速的優化網站,加強網頁的轉換效果與商業目標的達成。本文將介紹 Windows Clarity 應該如何使用,強化分析能力與優化網站效益。
Thumbnail
如果 watch 沒有放在元件最外層,可能會導致元件 onUnmounted 後watch不會自動解除,至於該怎麼辦,就讓我們娓娓道來。( ´ ▽ ` )ノ
Thumbnail
上班第一天甚至還問隔壁同事電腦如何開機,每天過得像電腦白癡一般,偏偏電腦又常常起飛 (風扇運轉像是要起飛了) 無奈對面即便是MIS都鎮不住...除了綠色乖乖外,與大家分享新入手電腦設置與一些效率TIPS!
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
資訊由宇翔資訊提供在現代工作環境中,專業電腦是提高生產力和工作效率的關鍵工具。無論是設計師、工程師、數據科學家還是其他專業人士,選擇一台性能優異的電腦對於完成複雜的工作任務至關重要。本文將介紹專業電腦的選購指南、性能特點、品牌推薦以及維護建議,幫助您選擇和維護合適的專業電腦。
資訊由宇翔資訊提供筆電是現代生活和工作中不可或缺的工具,然而,隨著使用時間的增加,各種故障問題也不可避免地出現。了解一些基本的筆電維修知識,不僅可以節省維修費用,還能延長筆電的使用壽命。本文將介紹筆電常見故障的診斷和修復方法,以及一些維護建議。
Thumbnail
在尋找電腦維修推薦時,應注意選擇有良好口碑和正面評價的維修店,確認其技術專業度和服務品質。檢查店家的維修保固和費用透明度,以避免隱藏費用。此外,了解維修店是否使用原廠零件,以及其客戶服務的反應速度和解決問題的能力。透過朋友推薦或查看線上評價來確保選擇可靠的維修服務。
Thumbnail
這篇文章記錄了一次特殊的電腦維修案例,客戶電腦出現無法上網和不定時當機後無法開機的問題。文章詳細描述了維修過程和最終的結論......
Thumbnail
2012年,是平板電腦開始新起的一年,同時微軟也在這年推了名為Windows 8的作業系統,想和iOS與Android在平板市場分一杯羹,只不過這並沒有引起多大回響,反而是招來許多使用者的的不滿和抱怨。就近,這套系統真的有大家說的這麼不堪嗎?
Thumbnail
最近微軟為了推廣 Windows 11,除了定出2025/10/14為 Windows 10的最後更新日之外,還會在開機時顯示全螢幕「廣告」,全螢幕到用戶任何事都不能做,有些人還會被嚇到以為要強制升級 Windows 11,就算畫面上寫著「您的電腦並不符合升級至 Windows 11 的資格」
Thumbnail
1. 資料救援 常見原因包括誤刪資料、筆電損壞或資料覆寫等,這些情況下需要進行資料救援以恢復重要文件。 2. 螢幕問題 如果螢幕出現黑屏、白屏、雜訊或閃爍等情況,則需要進行螢幕維修。 3. 無法開關機 按下電源鍵無反應、卡在開機畫面、或不停重啟等問題,需要進行電源系統的檢查和維修。 4.
Thumbnail
Windows Clarity 是一種網站分析產品,讓網站設計師、開發人員可藉由它,更容易觀察用戶在網站的操作行為,協助更快速的優化網站,加強網頁的轉換效果與商業目標的達成。本文將介紹 Windows Clarity 應該如何使用,強化分析能力與優化網站效益。
Thumbnail
如果 watch 沒有放在元件最外層,可能會導致元件 onUnmounted 後watch不會自動解除,至於該怎麼辦,就讓我們娓娓道來。( ´ ▽ ` )ノ
Thumbnail
上班第一天甚至還問隔壁同事電腦如何開機,每天過得像電腦白癡一般,偏偏電腦又常常起飛 (風扇運轉像是要起飛了) 無奈對面即便是MIS都鎮不住...除了綠色乖乖外,與大家分享新入手電腦設置與一些效率TIPS!