system-info
Описание
info - лёгкий C-модуль, который собирает информацию о железе и программном обеспечении под Windows исключительно через Windows API и реестр Windows. Модуль не использует WMI, WMIC, OLE и COM в какой-либо форме. Все данные читаются прямыми вызовами Win32 API и запросами к реестру, что делает модуль быстрым, свободным от зависимостей и простым для аудита. Все wide-строки транскодируются во внутреннем представлении в UTF-8, поэтому потребитель работает с обычными char-буферами.
Модуль предоставляет плоский data-oriented API: каждая функция заполняет буфер или структуру, переданную вызывающим кодом, и возвращает количество элементов или статус. Нет глобальных переменных, нет внутренних аллокаций, живущих дольше вызова, нет потоков и нет последовательности инициализации/завершения - функцию можно вызвать в любой момент, и повторные вызовы безопасны. Исходники не зависят от конкретного компилятора в рамках тулчейна MinGW-w64: одни и те же файлы собираются как C через gcc и как C++ через g++ без каких-либо изменений (публичный заголовок обёрнут в extern "C"). В репозитории также находится test_info - небольшое консольное демо-приложение, которое линкует модуль и выводит собранные данные; демо вторично, модуль является основным результатом и может использоваться в любом C/C++ проекте.
Используемые модули
- kernel32.dll - доступ к реестру, системная информация, состояние памяти, время, перечисление дисков, динамическая загрузка ntdll.dll
- advapi32.dll - Service Control Manager: перечисление служб и запрос конфигурации
- user32.dll - перечисление мониторов, раскладки клавиатуры, виртуальный экран, список raw input устройств
- gdi32.dll - возможности устройств: DPI, глубина цвета, частота обновления
- psapi.dll - перечисление модулей процесса, перечисление ядра драйверов
- version.dll - имена языков раскладок клавиатуры
- setupapi.dll - перечисление устройств сетевого класса
- ntdll.dll - RtlGetVersion для реальной версии ОС (загружается динамически в рантайме, не линкуется)
Технологии
- Язык: C/C++
- Компилятор: MinGW-w64 gcc/g++ (x86_64)
- Платформа: Windows 10 / 11, x64
- API: Win32 API, реестр Windows, SetupAPI, PSAPI, Toolhelp32
- Зависимости: отсутствуют - только системные DLL, без сторонних библиотек
- Кодировка вывода: UTF-8 (все wide-строки транскодируются через WideCharToMultiByte)
- Лицензия GNU AGPL v3 (Affero GPL)