Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Power Basic

Страница: 1 |

 

  Вопрос: Как получить список работающих служб? (NT Service) Добавлено: 13.01.06 11:16  

Автор вопроса:  alex
Привет всем!
Как мне кажется надо просканировать определенные ветки реестра, только нигде не могу найти примера кода. В POFFS не нашел.. :-(

Ответить

  Ответы Всего ответов: 11  

Номер ответа: 1
Автор ответа:
 Dushes



ICQ: 249195431 

Вопросов: 8
Ответов: 110
 Профиль | | #1 Добавлено: 13.01.06 12:08
Товагищи, эта проблема архиважна и архипроста одновгеменно. Пгедлагаю для дела геовлюции использовать WMI.

Public Function TrimN(ByVal S) As String
On Error Resume Next
If InStr(S, vbNullChar) <> 0 Then S = Left(S, InStr(S, vbNullChar) - 1)
TrimN = Trim(S)
If TrimN = "" Then TrimN = ";(Не определено)"
End Function

Public Function EnumServices() As String
Dim Objs As Object, Obj As Object, S As String, I&
On Error GoTo 1
Set Objs = GetObject("WinMgmts:";).Instancesof("Win32_Service";)
For Each Obj In Objs
 If Not IsNull(Obj.Name) Then
  I = I + 1
  S = S & "Сервис " & I & ": " & TrimN(Obj.Caption) & " - " & TrimN(Obj.PathName) & " -> " & TrimN(Obj.State) & vbCrLf
 End If
Next
EnumServices = S
1 End Function

Ответить

Номер ответа: 2
Автор ответа:
 alex



Вопросов: 84
Ответов: 453
 Профиль | | #2 Добавлено: 13.01.06 12:15
Dushes

Речь идет о коде на PowerBASIC`e а не на VB!

Ответить

Номер ответа: 3
Автор ответа:
 Dushes



ICQ: 249195431 

Вопросов: 8
Ответов: 110
 Профиль | | #3 Добавлено: 13.01.06 13:30
Мда, и что у меня за привычка - не смотреть на раздел форума. А в Power Basic использовать этот же WMI объект никак низзя ?

Ответить

Номер ответа: 4
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #4 Добавлено: 13.01.06 13:52
Можно, но лучше не использовать.
Вообще, а не только в pb.

Ответить

Номер ответа: 5
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #5 Добавлено: 13.01.06 13:57
EnumServicesStatus не пробовал?

Ответить

Номер ответа: 6
Автор ответа:
 alex



Вопросов: 84
Ответов: 453
 Профиль | | #6 Добавлено: 13.01.06 14:02

EnumServicesStatus не пробовал?


Спасибо! В POFFS по этой функции сразу нашел код для PBCC


#Compile Exe
#Register None
#Include "win32api.inc"

#If Not %Def(%NULL)
%NULL=0
#EndIf

#If Not %Def(%SERVICE_KERNEL_DRIVER)
%SERVICE_KERNEL_DRIVER = &H00000001
#EndIf
#If Not %Def(%SERVICE_FILE_SYSTEM_DRIVER)
%SERVICE_FILE_SYSTEM_DRIVER = &H00000002
#EndIf
#If Not %Def(%SERVICE_INTERACTIVE_PROCESS)
%SERVICE_INTERACTIVE_PROCESS = &H00000100
#EndIf
#If Not %Def(%SERVICE_ADAPTER)
%SERVICE_ADAPTER = &H00000004
#EndIf
#If Not %Def(%SERVICE_RECOGNIZER_DRIVER)
%SERVICE_RECOGNIZER_DRIVER = &H00000008
#EndIf
#If Not %Def(%SERVICE_DRIVER)
%SERVICE_DRIVER = %SERVICE_KERNEL_DRIVER Or %SERVICE_FILE_SYSTEM_DRIVER Or %SERVICE_RECOGNIZER_DRIVER
#EndIf
#If Not %Def(%SERVICE_OWN_PROCESS_INTERACTIVE) 'whatever 8-)
%SERVICE_OWN_PROCESS_INTERACTIVE = %SERVICE_INTERACTIVE_PROCESS Or %SERVICE_WIN32_OWN_PROCESS
#EndIf
#If Not %Def(%SERVICE_TYPE_ALL)
%SERVICE_TYPE_ALL = %SERVICE_WIN32 Or %SERVICE_ADAPTER Or %SERVICE_DRIVER Or %SERVICE_INTERACTIVE_PROCESS
#EndIf

#If Not %Def(%SERVICE_CONTINUE_PENDING)
%SERVICE_CONTINUE_PENDING = &H00000005
#EndIf


Function PBMain() As Long
   Local lServiceManagerHandle As Long
   Local lResult As Long
   Local lBytesNeeded As Long 'bytes needed to enumerate remaining service entries
   Local lNumServicesReturned As Long 'number of services returned
   Local lResumeHandle As Long 'pointer to position in enum in case we need to re-alloc to enum all services
   Local i As Long
   Local lLinesPrinted As Long
   Dim tSrvStatus(256) As ENUM_SERVICE_STATUS   'enumerate up to 256 services

   'get service handle on local computer - services active database and ask for EnumServicesStatus
   lServiceManagerHandle = OpenSCManager( ByVal %NULL, ByVal %NULL, %SC_MANAGER_ENUMERATE_SERVICE )

   If lServiceManagerHandle = %NULL Then'an error happened
      Select Case GetLastError()
             Case %ERROR_ACCESS_DENIED
                Print "The requested access to the database was denied"
                GoSub do_theLines
             Case %ERROR_DATABASE_DOES_NOT_EXIST
                Print "The specified database does not exist"
                GoSub do_theLines
             Case %ERROR_INVALID_PARAMETER
                Print "The parameter you specified was invalid"
                GoSub do_theLines
             Case Else
                Print "Some other error occured..."
                GoSub do_theLines
      End Select
   Else
      'Enum all services
      lResult = EnumServicesStatus( lServiceManagerHandle, _
                                    %SERVICE_WIN32, _  'for kernel and file system use %SERVICE_DRIVER
                                    %SERVICE_ACTIVE, _ 'to check services in stopped status use %SERVICE_INACTIVE
                                    tSrvStatus(0), _ 'pointer to ENUM_SERVICE_STATUS array
                                    SizeOf(tSrvStatus(0)) * 256 , _ 'size in bytes of tSrvStatus buffer
                                    lBytesNeeded, _ 'points to number of bytes needed to enum all entries
                                    lNumServicesReturned, _ 'number of services returned
                                    lResumeHandle )
      If lResult = %NULL Then
         Select Case GetLastError()
                Case %ERROR_ACCESS_DENIED
                    Print "Handle does not have ENUM access"
                    GoSub do_theLines
                Case %ERROR_INVALID_HANDLE
                    Print "You passed an invalid handle"
                    GoSub do_theLines
                Case %ERROR_INVALID_DATA
                    Print "The parameter you specified was invalid"
                    GoSub do_theLines
                Case %ERROR_MORE_DATA
                    'there are more services than tSrvStatus() array can handle
                    're-alloc to lBytesNeeded and call EnumServicesStatus() again
                    'passing it the lResumeHandle to start where you left off -
                    'just allocate a sufficient buffer and you should never come here...
         End Select
      Else
         'enum services
         For i = 0 To lNumServicesReturned - 1
             Print "Service name : " + tSrvStatus(i).@lpServiceName
             GoSub do_theLines

             Print ";Display name : " + tSrvStatus(i).@lpDisplayName
             GoSub do_theLines

             'type of service
             Select Case tSrvStatus(i).ServiceStatus.dwServiceType
                    Case %SERVICE_WIN32_OWN_PROCESS
                        Print "Type         : SERVICE_WIN32_OWN_PROCESS"
                        GoSub do_theLines

                    Case %SERVICE_WIN32_SHARE_PROCESS
                        Print "Type         : SERVICE_WIN32_SHARE_PROCESS"
                        GoSub do_theLines

                    Case %SERVICE_KERNEL_DRIVER
                        Print "Type         : SERVICE_KERNEL_DRIVER"
                        GoSub do_theLines

                    Case %SERVICE_FILE_SYSTEM_DRIVER
                        Print "Type         : SERVICE_FILE_SYSTEM_DRIVER"
                        GoSub do_theLines

                    Case %SERVICE_INTERACTIVE_PROCESS
                        Print "Type         : SERVICE_INTERACTIVE_PROCESS"
                        GoSub do_theLines

                    Case %SERVICE_ADAPTER
                        Print "Type         : SERVICE_ADAPTER"
                        GoSub do_theLines

                    Case %SERVICE_RECOGNIZER_DRIVER
                        Print "Type         : SERVICE_RECOGNIZER_DRIVER"
                        GoSub do_theLines

                    Case %SERVICE_WIN32
                        Print "Type         : SERVICE_WIN32"
                        GoSub do_theLines

                    Case %SERVICE_TYPE_ALL
                        Print "Type         : SERVICE_TYPE_ALL"
                        GoSub do_theLines

                    Case %SERVICE_DRIVER
                        Print "Type        : SERVICE_DRIVER"
                        GoSub do_theLines

                    Case %SERVICE_OWN_PROCESS_INTERACTIVE
                        Print "Type         : SERVICE_OWN_PROCESS (Interactive)"
                        GoSub do_theLines

                    Case Else
                        Print "Type         : UNKNOWN - VALUE: " tSrvStatus(i).ServiceStatus.dwServiceType
                        GoSub do_theLines

            End Select
            'state of status
            Select Case tSrvStatus(i).ServiceStatus.dwCurrentState
                   Case %SERVICE_STOPPED
                        Print "Status       : SERVICE IS STOPPED"
                        GoSub do_theLines

                   Case %SERVICE_START_PENDING
                        Print "Status       : SERVICE IS STARTING"
                        GoSub do_theLines

                   Case %SERVICE_STOP_PENDING
                        Print "Status       : SERVICE IS STOPPING"
                        GoSub do_theLines

                   Case %SERVICE_RUNNING
                        Print "Status       : SERVICE IS RUNNING"
                        GoSub do_theLines

                   Case %SERVICE_CONTINUE_PENDING
                        Print "Status       : SERVICE CONTINUE PENDING"
                        GoSub do_theLines

                   Case %SERVICE_PAUSE_PENDING
                        Print "Status       : SERVICE PAUSE PENDING"
                        GoSub do_theLines

                   Case %SERVICE_PAUSED
                        Print "Status       : SERVICE IS PAUSED"
                        GoSub do_theLines
            End Select
            'there are more members in the SERVICE_STATUS type
            'check them out for additional useful info
            Print "-------------------------------------------------"
            GoSub do_theLines
        Next

      End If
      'Close the service handle
      Call CloseServiceHandle( lServiceManagerHandle )

    End If

       WaitKey$
    Exit Function

do_theLines:
   Incr lLinesPrinted
   If lLinesPrinted >= ScreenY -2 Then
      Print "--- MORE ---"
      lLinesPrinted = 0
      WaitKey$
   End If
   Return


End Function    

Ответить

Номер ответа: 7
Автор ответа:
 alex



Вопросов: 84
Ответов: 453
 Профиль | | #7 Добавлено: 13.01.06 14:34
И еще у меня вопрос. Можно ли программно остановить или убить службу, зная ее имя?

Ответить

Номер ответа: 8
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #8
Добавлено: 13.01.06 15:35
можно

Ответить

Номер ответа: 9
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #9 Добавлено: 13.01.06 16:18
shell "net stop имя_службы"

Ответить

Номер ответа: 10
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #10 Добавлено: 13.01.06 16:26
invoke ControlService, hService, SERVICE_CONTROL_STOP, addr serv_status

Ответить

Номер ответа: 11
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #11 Добавлено: 13.01.06 16:30
Только сначала надо
invoke OpenService, hManager, addr szServiceName, SERVICE_ALL_ACCESS

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам