<Return[E]><Top>

EnumServicesStatusEx

Declare Function Api_EnumServicesStatusEx& Lib "advapi32" Alias "EnumServicesStatusEx" (ByVal SCM&, ByVal InfoL As Struct_MembersOf_SC_ENUM_TYPE, ByVal ServT&, ByVal ServS&, ByVal Serv$, ByVal BufSz&, ByRef Need&, ByRef ServRTN&, ByRef hRes&, ByVal GrpNa$)

Declare Function EnumServicesStatusEx Lib "advapi32" Alias "EnumServicesStatusEx" (ByVal hSCManager As Long, ByVal InfoLevel As Struct_MembersOf_SC_ENUM_TYPE, ByVal dwServiceType As Long, ByVal dwServiceState As Long, ByVal lpServices As String, ByVal cbBufSize As Long, ByRef pcbBytesNeeded As Long, ByRef lpServicesReturned As Long, ByRef lpResumeHandle As Long, ByVal pszGroupName As String) As Long

サービス制御マネージャ(Service Control Manager:SCM)の指定されたデータベース内のサービスを列挙する。各サービスの名前とステータス、および指定された情報レベルに基づく追加のデータが提供される。
この関数は、EnumServicesStatus 関数の改訂版である。EnumServicesStatus 関数は、EnumServicesStatus と同じ情報に加えて、プロセス識別子と、サービスに関する追加のフラグを返する。さらに EnumServicesStatusEx を使うと、指定されたグループに所属するサービスを列挙できる。

hSCManager
    [入力]サービス制御マネージャのデータベースのハンドルを指定する。OpenSCManager 関数が返したハンドルを指定し、これには

    SC_MANAGER_ENUMERATE_SERVICE アクセス権が必要である。
InfoLevel
    [入力]取得するサービス属性を指定する。データベース内の各サービスの名前とサービスのステータス情報を取得するには、

    SC_ENUM_PROCESS_INFO を使います。lpServices パラメータは、 構造体の配列を受け取るバッファへのポインタである。このバッファ

    のサイズは、これらの構造体と、そのメンバが指す文字列を格納できるだけの十分の大きさでなければならない。
    現在、その他の値は定義されていない。
dwServiceType
    [入力]列挙するサービスのタイプを指定する。次の値を 1 つまたは複数指定する。

    値                           

意味                                                                                                                                              

    SERVICE_WIN32

 

SERVICE_WIN32_OWN_PROCESS タイプと SERVICE_WIN32_SHARE_PROCESS タイプのサービスを列挙する。

    SERVICE_DRIVER

SERVICE_KERNEL_DRIVER タイプと SERVICE_FILE_SYSTEM_DRIVER タイプのサービスを列挙する。

dwServiceState
    [入力]どの状態にあるサービスを列挙するかを指定する。次のいずれかの値を指定する。

    値

意味

    SERVICE_ACTIVE

 

 

次のいずれかの状態になっているサービスを列挙する。SERVICE_START_PENDING、SERVICE_STOP_PENDING、SERVICE_RUNNING、SERVICE_CONTINUE_PENDING、SERVICE_PAUSE_PENDING、SERVICE_PAUSED

    SERVICE_INACTIVE

SERVICE_STOPPED 状態のサービスを列挙する。

    SERVICE_STATE_ALL

値 SERVICE_ACTIVE と SERVICE_INACTIVE を組み合わせた状態のサービスを列挙する。

lpServices
    [出力]ステータス情報を受け取るバッファへのポインタを指定する。このデータの形式は、InfoLevel パラメータの値に依存する。
cbBufSize
    [入力]lpServices パラメータが指すバッファのサイズをバイト数で指定する。
pcbBytesNeeded
    [出力]残りのサービスエントリを返すために必要なバイト数を受け取る変数へのポインタを指定する。
lpServicesReturned
    [出力]返されたサービスエントリの数を受け取る変数へのポインタを指定する。
lpResumeHandle
    [入出力]入力時は、列挙の開始点を指定する変数へのポインタを指定する。EnumServicesStatusEx 関数を最初に呼び出すときは、

    この値を 0 に設定しなければならない。出力時は、この関数が成功するとこの値は 0 に設定される。ただし、この関数が 0 を返し、 関数

    が ERROR_MORE_DATA を返した場合、この値は、追加のデータを取得するために EnumServicesStatusEx 関数を呼び出す際に読み

    取るべき次のサービスエントリを示す。
pszGroupName
    [入力]ロード順序決定グループ名を指定する。このパラメータが文字列である場合、この文字列で指定されたグループに所属するサービ

    スのみが列挙される。このパラメータが空文字列である場合、どのグループにも所属しないサービスのみが列挙される。このパラメータが

    NULL である場合、グループの所属関係を無視し、すべてのサービスが列挙される。

戻り値
    関数が成功すると、0 以外の値が返る。
    関数が失敗すると、0 が返る。拡張エラー情報を取得するには、 関数を使う。次のエラーが返されることがある。
 

    エラーコード                                              

意味                                                                                                                     

    ERROR_ACCESS_DENIED

 

指定されたハンドルを開く際に、SC_MANAGER_ENUMERATE_SERVICE アクセス権が指定されていなかった。

    ERROR_MORE_DATA

 

バッファが小さすぎる。アクティブなデータベース内の一部のデータを取得できなかった。pcbBytesNeeded パラメータが指す変数に、残りのエントリを受け取るために必要なバイト数が格納される。

    ERROR_INVALID_PARAMETER

無効なパラメータ値を使った。

    ERROR_INVALID_HANDLE

このハンドルは無効である。

    ERROR_INVALID_LEVEL

InfoLevel パラメータに、サポートされていない値が指定されている。

    ERROR_SHUTDOWN_IN_PROGRESS

システムをシャットダウン中である。この関数を呼び出すことはできない。