|
本帖最后由 Bluebells 于 2023-4-26 21:45 编辑
调用 NtQuerySystemInformation(ZwQuerySystemInformation), NtQuerySystemInformationEx(ZwQuerySystemInformationEx) 和 NtSetSystemInformation(ZwSetSystemInformation) 函数可以查询(设置)到很多系统信息. 而其中一个选项需要用到 SYSTEM_INFORMATION_CLASS, 但有很多 class 都没有文档化(未公开)
最近几天找到不少有关这些函数的信息, 故在此整理记录一下
先贴一个网址: https://www.geoffchappell.com/st ... formation_class.htm
上面网页的内容里有一个表格, 里面记录了各个 System Information classes 的值, 名称, 适用版本范围, 备注信息
再贴一个网址: https://github.com/yardenshafir/InformationClasses
这个网页的内容里又有一个表格, 里面记录了各个 System Information classes 适用于哪个函数...
最关键的是这个表格中有列出一些 class 所需的某特权
表格下面还有一些 class 的结构体信息
然后上传一个 NtQuerySystemInformation.h 文件, 里面详细记录了一些 System Information classes 的结构体的详细信息
NtQuerySystemInformation.txt
(57.66 KB, 下载次数: 3)
由于上传文件扩展名限制文件, 建议在下载后更改其扩展名, 以便一些文本编辑器的正确显示语法高亮
PS: 此文件下载自 https://gist.github.com/jNizM/ddf02494cd78e743eed776ce6164758f
最后再上传一个从 github 下载的 ntexapi.h
ntexapi.txt
(241.18 KB, 下载次数: 6)
由于上传文件扩展名限制文件, 建议在下载后更改其扩展名, 以便一些文本编辑器的正确显示语法高亮
PS: 其实 github 上可以下载到很多 ntexapi.h, 但我找到的这个里面有非常详细的信息
再啰嗦一下, 很多人都是使用 GetFirmwareEnvironmentVariable 函数加 GetFirmwareType 函数以获取系统的启动模式, 其实使用 NtQuerySystemInformation 函数的 SystemBootEnvironmentInformation class 更简易
PS: SystemBootEnvironmentInformation 需要 NT6.0 或以上版本
使用 SystemSecureBootInformation class 获取安全启动状态也很简易, 不需要启用 SE_SYSTEM_ENVIRONMENT_NAME 特权, 不需要固件环境变量的命名空间(GUID), 可惜的是这个 class 需要 NT6.2 或以上版本
|
|