Я наткнулся на короткий код 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
);
windows.h
уже включен, поэтому, должно быть, чего-то еще не хватает. Когда я погуглил, я получил много результатов о температуре процессора, но я не вижу, что мне в них включать ...
3 ответа
Как указано в документации, это перечисление определено в заголовочном файле Winternl.h
. Определение в файле заголовка из SDK версии 7.1:
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 может быть изменен или недоступен в будущих версиях Windows. Приложения должны использовать альтернативные функции, перечисленные в этом разделе.
Взгляните на это: http: // www.geoffchappell.com/studies/windows/km/ntoskrnl/api/ex/sysinfo/query.htm.
Есть хорошее описание для [Nt]|[Zw]QuerySystemInformation
и входных аргументов.
Наконец, я нашел некоторое определение SYSTEM_INFORMATION_CLASS с использованием < a href = "https://www.google.cz/search?q=typedef%20SYSTEM_INFORMATION_CLASS" rel = "nofollow"> условия поиска " 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
и добавил к нему приведенный выше код.
Похожие вопросы
Новые вопросы
c++
C ++ - это язык программирования общего назначения. Первоначально он был разработан как расширение C и имеет аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде (который должен быть) скомпилирован с помощью компилятора C ++. Используйте тег для конкретной версии для вопросов, связанных с конкретной версией стандарта [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] или [C ++ 23] и т. Д. .