Кто живёт у нас в системе, или, как просмотреть полный список сервисных процессов в Windows
Маленькая программа для отображения полного списка установленных сервисных процессов
Не секрет, что список сервисных процессов (служб), отображаемый Windows (например, при помощи консоли services.msc
), является далеко не полным. Когда-то давно меня заинтересовало, как же можно посмотреть, какие службы/драйвера/системные процессы живут в системе.
Самое простое решение — открыть Редактор реестра (regedit
) и посмотреть. Список сервисов и не только находится в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
. Однако по тем данным, которые представлены в реестре, трудно определить, какая из служб работает в данный момент времени, чем она является (напрмер, драйвером ядра или драйвером файловой системы) и т.п.
В Microsoft Windows Recovery Console есть команда, listsvc
, позволяющая получить полный список сервисных процессов. Мне стало интересно написать что-то подобное, и вот результат:
- /*-------------------------------------------------------------------------*/
- #include <windows.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- /*-------------------------------------------------------------------------*/
- const char* unknown_error = "<Unknown error!>";
- const char* get_error_code(DWORD dwCode)
- {
- const char* msgbuf;
- return (!FormatMessage(
- FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwCode,
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&msgbuf,
- 0, NULL
- )
- ) ? unknown_error : msgbuf;
- }
- /*-------------------------------------------------------------------------*/
- const char* servicetypes[] = {
- "File System Driver",
- "Kernel Driver",
- "Own Process",
- "Share Process",
- "Unknown"
- };
- /*-------------------------------------------------------------------------*/
- const char* get_service_type(DWORD dwType)
- {
- size_t i = 4;
- &