SYSTEM_INFORMATION_CLASS 在哪里定义的?
Where is SYSTEM_INFORMATION_CLASS defined?
我遇到了 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 温度的结果,但我看不到我应该在其中包含什么...
终于找到了some SYSTEM_INFORMATION_CLASS definition using search terms "typedef SYSTEM_INFORMATION_CLASS
"。尽管在发布此消息时,我自己的问题是第三个结果...
这是我得到的:
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
文件并添加了上面的代码。
如 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 在未来的版本中更改或删除功能,从而破坏您的程序,请不要感到惊讶。在使用未记录的功能或记录为将来可能更改的功能之前,您可能需要三思。同样,我链接到的文档确实以这种方式警告您:
NtQuerySystemInformation may be altered or unavailable in future versions of Windows. Applications should use the alternate functions listed in this topic.
看看这个:http://www.geoffchappell.com/studies/windows/km/ntoskrnl/api/ex/sysinfo/query.htm。
[Nt]|[Zw]QuerySystemInformation
和输入参数有很好的描述。
我遇到了 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 温度的结果,但我看不到我应该在其中包含什么...
终于找到了some SYSTEM_INFORMATION_CLASS definition using search terms "typedef SYSTEM_INFORMATION_CLASS
"。尽管在发布此消息时,我自己的问题是第三个结果...
这是我得到的:
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
文件并添加了上面的代码。
如 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 在未来的版本中更改或删除功能,从而破坏您的程序,请不要感到惊讶。在使用未记录的功能或记录为将来可能更改的功能之前,您可能需要三思。同样,我链接到的文档确实以这种方式警告您:
NtQuerySystemInformation may be altered or unavailable in future versions of Windows. Applications should use the alternate functions listed in this topic.
看看这个:http://www.geoffchappell.com/studies/windows/km/ntoskrnl/api/ex/sysinfo/query.htm。
[Nt]|[Zw]QuerySystemInformation
和输入参数有很好的描述。