我遇到了short C++ code designed to prevent applications from stealing focus using DLL injection。像往常一样使用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
);
windows.h
已经包含在内,因此必须缺少其他内容。当谷歌搜索时,我得到了很多关于获得CPU温度的结果,但是我看不出应该包括哪些......
答案 0 :(得分:5)
如documentation中所述,此枚举在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;
这个NT API函数有点记录在案。您可以通过在线搜索找到其他值。至于如何使用这些其他价值,您可能需要进行信仰的飞跃并依赖于您可以从网络搜索中找到的逆向工程信息。
使用未记录的功能是一项有风险的业务。如果Microsoft在将来的版本中更改或删除功能,请不要感到惊讶,从而破坏您的程序。在使用未记录的功能或记录为将来可能发生变化的功能之前,您可能需要三思而后行。同样,我链接到的文档会以这种方式向您发出警告:
在Windows的未来版本中,NtQuerySystemInformation可能会被更改或不可用。应用程序应使用本主题中列出的备用功能。
答案 1 :(得分:2)
最后,我使用some SYSTEM_INFORMATION_CLASS definition找到了search terms "typedef SYSTEM_INFORMATION_CLASS
"。虽然在发布这个时,我自己的问题是第3个结果......
这就是我所拥有的:
typedef enum _SYSTEM_INFORMATION_CLASS {
SystemBasicInformation,
SystemProcessorInformation,
SystemPerformanceInformation,
SystemTimeOfDayInformation,
SystemPathInformation,
SystemProcessInformation,
SystemCallCountInformation,
SystemDeviceInformation,
SystemProcessorPerformanceInformation,
SystemFlagsInformation,
SystemCallTimeInformation,
SystemModuleInformation,
SystemLocksInformation,
SystemStackTraceInformation,
SystemPagedPoolInformation,
SystemNonPagedPoolInformation,
SystemHandleInformation,
SystemObjectInformation,
SystemPageFileInformation,
SystemVdmInstemulInformation,
SystemVdmBopInformation,
SystemFileCacheInformation,
SystemPoolTagInformation,
SystemInterruptInformation,
SystemDpcBehaviorInformation,
SystemFullMemoryInformation,
SystemLoadGdiDriverInformation,
SystemUnloadGdiDriverInformation,
SystemTimeAdjustmentInformation,
SystemSummaryMemoryInformation,
SystemNextEventIdInformation,
SystemEventIdsInformation,
SystemCrashDumpInformation,
SystemExceptionInformation,
SystemCrashDumpStateInformation,
SystemKernelDebuggerInformation,
SystemContextSwitchInformation,
SystemRegistryQuotaInformation,
SystemExtendServiceTableInformation,
SystemPrioritySeperation,
SystemPlugPlayBusInformation,
SystemDockInformation,
SystemPowerInformation,
SystemProcessorSpeedInformation,
SystemCurrentTimeZoneInformation,
SystemLookasideInformation
} SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS;
无法编译任何内容,我无法确定它是否正确。我刚创建了新的.hpp
文件并将上面的代码添加到其中。
答案 2 :(得分:2)
看看这个:http://www.geoffchappell.com/studies/windows/km/ntoskrnl/api/ex/sysinfo/query.htm。
[Nt]|[Zw]QuerySystemInformation
和输入参数有很好的描述。