Работа со службами Windows

Тема в разделе "WASM.WIN32", создана пользователем vg, 12 янв 2009.

  1. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Есть две функции для остановки и запуска служб соответственно
    Код (Text):
    1. StopService proc SvcName:DWORD
    2.     LOCAL schSCManager:SC_HANDLE
    3.     LOCAL schService:SC_HANDLE
    4.     LOCAL ssp:SERVICE_STATUS
    5.  
    6.     invoke OpenSCManager,0,0,SC_MANAGER_ALL_ACCESS ; Get a handle to the SCM database
    7.     .if eax!=0
    8.         mov schSCManager,eax
    9.         invoke OpenService,schSCManager,SvcName,SERVICE_ALL_ACCESS ; Get a handle to the service
    10.         .if
    11.             mov schService,eax
    12.             invoke ControlService,schService,SERVICE_CONTROL_STOP,addr ssp ; Stop the service
    13.             invoke CloseServiceHandle,schService
    14.         .endif
    15.         invoke CloseServiceHandle,schSCManager
    16.     .endif
    17.    
    18.     return 0
    19. StopService endp
    20.  
    21. StartSvc proc SvcName:DWORD
    22.     LOCAL schSCManager:SC_HANDLE
    23.     LOCAL schService:SC_HANDLE
    24.  
    25.     invoke OpenSCManager,0,0,SC_MANAGER_ALL_ACCESS ; Get a handle to the SCM database
    26.     .if eax!=0
    27.         mov schSCManager,eax
    28.         invoke OpenService,schSCManager,SvcName,SERVICE_ALL_ACCESS ; Get a handle to the service
    29.         .if
    30.             mov schService,eax
    31.             invoke StartService,schService,0,0 ; Start the service
    32.             invoke CloseServiceHandle,schService
    33.         .endif
    34.         invoke CloseServiceHandle,schSCManager
    35.     .endif
    36.    
    37.     return 0
    38. StartSvc endp
    При попытке запуска/остановки стандартных служб иногда получается, иногда нет. Не могу понять почему.
    Чего-то не хватает?

    Какие имена у стандартных служб Windows (то что указывается вторым параметром в OpenService)? Как их узнать? Это названия ключей в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services ?
     
  2. a1tus

    a1tus New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2009
    Сообщения:
    22
    >> Какие имена у стандартных служб Windows (то что указывается вторым параметром в OpenService)? Как их узнать? Это названия ключей в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services ?


    Копайте в сторону EnumServicesStatusEx или же вручную через реестр смотрите.
     
  3. SlyBit

    SlyBit New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2008
    Сообщения:
    43
    Листинг вроде правильный. Какой код ошибки?

    Посмотри примеры работы с сервисами из книги Побегайло "Системное программирование": http://slil.ru/26534407