Изучите EXE-файл, чтобы определить, является ли он исполняемым пользователем или системной службой - PullRequest
0 голосов
/ 12 апреля 2020

Есть ли способ проверить EXE-файл (PE-заголовок и т. Д. c.), Чтобы определить, является ли файл системной службой или исполняемым пользователем?

У меня есть набор приложений, который включает в себя несколько системные сервисные модули и многое другое, вероятно, будет добавлено в будущем, так как мы поддерживаем больше устройств. Я хочу иметь возможность просматривать все EXE-файлы в папке, определять, какие из них являются службами, и получать информацию об их состоянии выполнения и версии для отображения пользователю без необходимости заранее «знать» указанные имена файлов c.

Ответы [ 3 ]

1 голос
/ 13 апреля 2020

Перечислите список служб (Windows API или реестр [HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services]) и проверьте, соответствует ли их путь к EXE какой-либо из файлов в интересующей вас папке .

0 голосов
/ 27 апреля 2020

Есть heuristi c, который будет работать большую часть времени, хотя может не работать с обеих сторон.

Если двоичный файл импортирует StartServiceCtrlDispatcherA или StartServiceCtrlDispatcherW, он, вероятно, сможет работать как услуга, если нет, то вряд ли.

Вероятность задержки импорта или GetProcAddress для этого API маловероятна. Наиболее вероятное предостережение заключается в том, что двоичный файл службы может полагаться на другой двоичный файл для вызова StartServiceCtrlDispatcher. Как частный случай, это может быть svchost на основе.

0 голосов
/ 12 апреля 2020

Это невозможно. Вполне возможно, и даже часто, создавать исполняемые файлы, которые можно запускать либо как службу, либо как стандартный процесс.

Если вы управляете созданием всех исполняемых файлов, вы можете пометить их самостоятельно, например, с пользовательским ресурсом, чтобы указать, для чего предназначен файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...