Получил список активных служб с помощью EnumServicesStatus. Как узнать процесс, запустивший службу? (PID или хэндл) Спасибо!
Вариантов, наверное, несколько. Один из них: перебрать процессы и их модули, перебрать сервисы и получить QUERY_SERVICE_CONFIG::lpBinaryPathName, выбрать совпадения.
если это SERVICE_WIN32_OWN_PROCESS то в SYSTEM_PROCESSES есть такой ULONG InheritedFromProcessId а если SERVICE_WIN32_SHARE_PROCESS - то ProcessID в статусе
ух, разобрался! всем спасибо! нужно было EnumServicesStatusEx юзать, там в структуре ENUM_SERVICE_STATUS_PROCESS->SERVICE_STATUS_PROCESS есть dwProcessId!
Рано начал радоваться: списки полученные через EnumServicesStatusEx и EnumServicesStatus отличаются! EnumServicesStatusEx перечисляет не все службы? вызываю так: Код (Text): iRet=EnumServicesStatusExA( scHandle, 0, 0x00000030, 1, (LPBYTE)Buffer, dwSize, &dwSize, &dwNumServices, &dwResumeHandle, 0);
те, что часто юзаю - помню, пишу их значение сразу, так быстрее. забавно, что здесь всё работает! (см файл Procinfo.cpp) делаю всё аналогично - и ноль на массу!