Я наткнулся на короткий код 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
Tomáš Zato - Reinstate Monica 4 Мар 2015 в 18:52

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. Приложения должны использовать альтернативные функции, перечисленные в этом разделе.

7
Axalo 3 Июн 2017 в 17:53

Взгляните на это: http: // www.geoffchappell.com/studies/windows/km/ntoskrnl/api/ex/sysinfo/query.htm.

Есть хорошее описание для [Nt]|[Zw]QuerySystemInformation и входных аргументов.

2
Jury 7 Июн 2017 в 15:15

Наконец, я нашел некоторое определение 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 и добавил к нему приведенный выше код.

3
Tomáš Zato - Reinstate Monica 4 Мар 2015 в 16:07