微软有一个比较实用的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