微軟有一個比較實用的Native接口:NtQuerySystemInformation,具體可以參考微軟msdn官方文檔:NtQuerySystemInformation, 是一個系統函數,用于收集特定于所提供的指定種類的系統信息。ProcessHacker等工具使用NtQuerySystemInformation這個函數獲取當前系統的處理器CPU核數,系統進程信息(包括CPU使用率、IO等)。
Native API乃Windows用戶模式中為上層Win32 API提供接口的本機系統服務。平常我們總是調用MS為我們提供的公用的Win32 API函數來實現來實現我們系統的功能。今天我們要談的是如何通過本機系統服務(Native API)來探測本機系統信息。當然,微軟沒有為我們提供關于本機系統服務的文檔 (Undocumented),也就是不會為對它的使用提供任何的保證,所以我們不提倡使用Native API來開發軟件。不過在特殊情況下,本機系統服務卻為我們提供了通向“秘密”的捷徑,詳細介紹了NtQuerySystemInformation的技術秘密。
使用 NTQuerySystemInformation 列出 Windows 進程
有一篇文章介紹了使用 NTQuerySystemInformation 列出 Windows 進程,具體地址為:Windows Process Listing using NTQuerySystemInformation,對應Github代碼地址為:WinAPI-RedBlue
具體的位置為:WinAPI-RedBlue/Process Listing/NT Query System Api/
下載WinAPI-RedBlue源代碼后,對應目錄結果如下:
使用VS2022打開【WinAPI-RedBlue\Process Listing】下的Process Listing.sln解決方案工程文件,然后運行其中的NT Query System Api
項目,可以獲取當前系統中所有運行的進程信息,如下圖所示:
參考資料
- NtQuerySystemInformation函數
- Windows Process Listing using NTQuerySystemInformation
- Breaking Down System Routines #2 [NtQuerySystemInformation]
- procprv.c