我遇到了一个简短的C++代码,旨在防止应用程序使用DLL注入窃取焦点.和C++一样,我遇到的问题是未定义的东西和缺少的库.
具体来说,这个常数是未定义的:SYSTEM_INFORMATION_CLASS.在这段代码中:
typedef NTSTATUS( WINAPI* PNT_QUERY_SYSTEM_INFORMATION ) (
__in SYSTEM_INFORMATION_CLASS SystemInformationClass,
__inout PVOID SystemInformation,
__in ULONG SystemInformationLength,
__out_opt PULONG ReturnLength
);
Run Code Online (Sandbox Code Playgroud)
在windows.h已经包含,所以它必须是别的东西丢失.当谷歌搜索时,我得到了很多关于获得CPU温度的结果,但是我看不出它应该包括在内...
如文档中所述,此枚举在Winternl.h头文件中定义.版本7.1 SDK的头文件中的定义是:
typedef enum _SYSTEM_INFORMATION_CLASS {
SystemBasicInformation = 0,
SystemPerformanceInformation = 2,
SystemTimeOfDayInformation = 3,
SystemProcessInformation = 5,
SystemProcessorPerformanceInformation = 8,
SystemInterruptInformation = 23,
SystemExceptionInformation = 33,
SystemRegistryQuotaInformation = 37,
SystemLookasideInformation = 45
} SYSTEM_INFORMATION_CLASS;
Run Code Online (Sandbox Code Playgroud)
这个NT API函数有点记录在案.您可以通过在线搜索找到其他值.至于如何使用这些其他价值,您可能需要实现信念的飞跃并依赖于您可以从网络搜索中找到的逆向工程信息.
使用未记录的功能是有风险的业务.如果Microsoft在将来的版本中更改或删除功能,请不要感到惊讶,从而破坏您的程序.在使用未记录的功能或记录为将来可能发生变化的功能之前,您可能需要三思而后行.同样,我链接到的文档会以这种方式向您发出警告:
在未来的Windows版本中,NtQuerySystemInformation可能会被更改或不可用.应用程序应使用本主题中列出的备用功能.