Служба

Тема в разделе "WASM.WIN32", создана пользователем RamMerLabs, 6 авг 2007.

  1. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    Получил список активных служб с помощью EnumServicesStatus.
    Как узнать процесс, запустивший службу? (PID или хэндл)
    Спасибо!
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    А разве он гдето сохраняется?...
     
  3. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    вот об этом я и хотел бы узнать.

    Process Explorer определяет список служб, запущенных процессом.
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Вариантов, наверное, несколько.
    Один из них: перебрать процессы и их модули, перебрать сервисы и получить QUERY_SERVICE_CONFIG::lpBinaryPathName, выбрать совпадения.
     
  5. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    имхо, кривоватый метод.
    но и на этом спасибо!
    буду дальше копать
     
  6. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    если это SERVICE_WIN32_OWN_PROCESS то в SYSTEM_PROCESSES есть такой ULONG InheritedFromProcessId
    а если SERVICE_WIN32_SHARE_PROCESS - то ProcessID в статусе
     
  7. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    ух, разобрался!
    всем спасибо!

    нужно было EnumServicesStatusEx юзать, там в структуре ENUM_SERVICE_STATUS_PROCESS->SERVICE_STATUS_PROCESS есть dwProcessId!
     
  8. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    Рано начал радоваться: списки полученные через EnumServicesStatusEx и EnumServicesStatus отличаются!

    EnumServicesStatusEx перечисляет не все службы?
    вызываю так:

    Код (Text):
    1. iRet=EnumServicesStatusExA(
    2.                 scHandle,
    3.                 0,
    4.                 0x00000030,
    5.                 1,
    6.                 (LPBYTE)Buffer,
    7.                 dwSize,
    8.                 &dwSize,
    9.                 &dwNumServices,
    10.                 &dwResumeHandle,
    11.                 0);
     
  9. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    никто не подскажет?
     
  10. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Ищи проблему в коде.

    ЗЫ А почему не любишь символьные константы (SERVICE_WIN32, etc.)?
     
  11. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    те, что часто юзаю - помню, пишу их значение сразу, так быстрее.

    забавно, что здесь всё работает!
    (см файл Procinfo.cpp)
    делаю всё аналогично - и ноль на массу!