裝置管理器總結

2021-08-09 02:40:39 字數 1113 閱讀 2290

enable和disable的問題都解決了,剩下的問題都是關於怎麼生成裝置樹並呈現出來的問題,windows作業系統應該有現成的庫函式或者api呼叫,能把整個一棵樹一次性調出。但是c#開發環境下很少使用指標鍊錶的概念,就算系統中有這麼一棵樹,那麼也應該是用鍊錶串起來的,在c#這邊我們要怎麼接收呢?官方文件應該有說明,去官網文件去找找。於是去看了msdn的文件,找了一大堆看似可用的介面,不知道怎麼驗證呼叫函式會產生什麼樣的結果,以及何時何處呼叫函式,一無所知。於是把視線重新轉回到「怎麼樣生成樹?windows關於裝置這一部分內部設計結構到底是什麼樣子的?」上來。

誤打誤撞,發現了一本名叫《windows程式設計》的一本書,意識到我的問題應該是與windows程式設計相關,於是打算靜下心來認真拜讀這本巨作。主要有兩版:第五版和第六版,均在網上找到了相關資源。第五版出版時間在2023年,很早了,限於時代因素的影響,該書並沒有涉及到距離我們很近的windows 7、windows 8以及windows 10,但依然具有很高的可讀性。算是第一次接觸windows程式設計,書本裡邊的很多概念都異常新穎,同時也進一步了解了mfc的概念,想有時間重新把作業系統相關的書讀讀。第六版的windows程式設計主要講c#怎麼編寫windows8環境下的程式,跳過。於是看了一天的windows程式設計,收穫是不小,但是還是沒能把問題解決了,感覺越走越遠。

不能這麼下去了,一點動靜都沒有,得想辦法解決問題了,應該是走偏了,重新回到正軌上來。重新審視問題:我是要拿到裝置樹,而裝置樹是由裝置節點構成的,所以我們得拿到每乙個節點的值。找到c版的裝置管理器,好好研讀原始碼,要怎麼做。找到生成樹的**位置,一行一行往過走,記錄了很多函式,來回跳,太難除錯了,並且文件對這些函式的釋義也不清不楚。c語言版的裝置管理器(含bug)就這樣走了一天,做得異常痛苦。然而並沒有什麼進展。

真的不能這麼下去了,得理清原始碼的邏輯,然後翻譯為c#版的,這就搞定了。仔細理清了邏輯,發現其實獲取父節點的這個操作並不是實際意義上存在這麼一種父節點,而是邏輯上的父子關係。早先是先入為主了。所以大體思路是,找到子節點,自然能找到父節點,而沒必要從父節點開始進行廣度優先遍歷,加大讀取難度。著手開始做,首先整體把子節點遍歷,提取出父節點,此時可以使用字典,省去了去重部分的編寫,而後再將子節點找到對應的父節點插進去。所用到api函式的c#封裝也可以在網上找到對應的實現,姑且把這部分歸結於不熟練吧。至此,簡易版裝置管理器做完了。

Powershell 檢測裝置管理器

下圖為其中乙個裝置的詳細資訊 name存在且 pnpclass 為 null 的裝置為其他裝置 other devices status 為 error 的裝置為未正常工作裝置 yellow bang pnpclass 表示裝置所屬類 通過比較資料的改變來檢測裝置的變化 function catch...

Linux udev 使用者空間裝置管理器

參考文獻 維基百科 udev官方文件 ibm developerworks 中國 本章正文 udev 是linux kernel 2.6系列的裝置管理器。它主要的功能是管理 dev目錄底下的裝置節點。它同時也是用來接替devfs及hotplug的功能,這意味著它要在新增 刪除硬體時處理 dev目錄以...

獲取裝置管理器的資訊

有些時候需要先獲取裝置管理器裡面的硬體資訊,才能執行對應的操作,簡單的鼓搗了一下,貼出來共享。具體有兩個方法,大致來說差不多,流程一樣 懶得整理了,直接貼出來原始體。printdeviceinfo.cpp 定義控制台應用程式的入口點。include stdafx.h include include ...