<Return[E]><Top>

EnumServicesStatus

Declare Function Api_EnumServicesStatus& Lib "advapi32" Alias "EnumServicesStatusA" (ByVal hSCManager&, ByVal dwServiceType&, ByVal dwServiceState&, lpServices As Any, ByVal cbBufSize&, pcbbNeeded&, lpReturned&, lpResumeHandle&)

Declare Function EnumServicesStatus Lib "advapi32.dll" Alias "EnumServicesStatusA" (ByVal hSCManager As Long, ByVal dwServiceType As Long, ByVal dwServiceState As Long, lpServices As Any, ByVal cbBufSize As Long, pcbBytesNeeded As Long, lpServicesReturned As Long, lpResumeHandle As Long) As Long

サービス制御マネージャ(Service Control Manager:SCM)の指定されたデータベース内のサービスを列挙 する。

パラメータ
hSCManager
    [入力]サービス制御マネージャのデータベースのハンドルを指定する。

    OpenSCManager 関数が返したハンドルを指定し、これには SC_MANAGER_ENUMERATE_SERVICE アクセス権が必要である。
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
    [出力]ENUM_SERVICE_STATUS 構造体の配列を格納するバッファへのポインタを指定する。

    各構造体に、データベース内の各サービスに関する名前とサービスのステータス情報が格納される。

    バッファのサイズは、これらの構造体と、そのメンバが指す文字列を格納できるだけの十分な大きさでなければならない。
cbBufSize
    [入力]lpServices パラメータが指すバッファのサイズをバイト数で指定する。
pcbBytesNeeded
    [出力]残りのサービスエントリを返すために必要なバイト数を受け取る変数へのポインタを指定する。
lpServicesReturned
    [出力]返されたサービスエントリの数を受け取る変数へのポインタを指定する。
lpResumeHandle
    [入出力]入力時は、列挙の開始点を指定する変数へのポインタを指定する。

    この関数を最初に呼び出すときは、この値を 0 に設定しなければならない。出力時は、この関数が成功するとこの値が 0 に設定される。

    しかし、この関数が 0 を返し、GetLastError 関数が ERROR_MORE_DATA を返した場合、この値は、追加のデータを取得するために

    この関数を呼び出す際に読み取るべき次のサービスエントリを示す。


戻り値
    関数が成功すると、0 以外の値が返る。
    関数が失敗すると、0 が返る。拡張エラー情報を取得するには、GetLastError 関数を使う。
    サービス制御マネージャは次のエラーコードを設定することがある。サービス制御マネージャが呼び出したレジストリ関数は、その他の

    エラーコードを設定することがある。

    エラーコード                                  

意味                                                                                                                     

    ERROR_ACCESS_DENIED

指定されたハンドルを開く際に、SC_MANAGER_ENUMERATE_SERVICE アクセス権が指定

 

されていない。

    ERROR_INVALID_HANDLE

指定されたハンドルは無効。

    ERROR_INVALID_PARAMETER

指定されたパラメータは無効。

    ERROR_MORE_DATA

lpServices パラメータが指すバッファに収容しきれないサービスエントリが存在する。

 

このバッファに書きこまれたサービスエントリの実際の数は、lpServicesReturned パラメータに書き込

 

まれる。残りのエントリを取得するために必要なバイト数は、pcbBytesNeeded パラメータに書き込まれ

 

る。読み取るべき次のサービスエントリを示す lpResumeHandle パラメータを使って

 

EnumServicesStatus 関数をもう一度呼び出すと、残りのサービスエントリを列挙できる。