<Return[E]><Top>

EnumDependentServices

Declare Function Api_EnumDependentServices& Lib "advapi32" Alias "EnumDependentServicesA" (ByVal hService&, ByVal dwServiceState&, lpServices As ENUM_SERVICE_STATUS, ByVal cbBufSize&, pcbBytesNeeded&, lpServicesReturned&)

Declare Function EnumDependentServices Lib "advapi32" Alias "EnumDependentServicesA" (ByVal hService As Long, ByVal dwServiceState As Long, lpServices As ENUM_SERVICE_STATUS, ByVal cbBufSize As Long, pcbBytesNeeded As Long, lpServicesReturned As Long) As Long

指定されたサービスに依存する他の各サービスの名前とステータスを列挙する。つまり、これらの依存サービスを動作させる前に、指定されたサービスを動作させておかなければならないことがわかる。

パラメータ
hService
    [入力]サービスのハンドルを指定する。OpenService 関数または CreateService 関数が返したハンドルを指定し、これには

    SERVICE_ENUMERATE_DEPENDENTS アクセス権が必要である。
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
    [出力]構造体の配列へのポインタを指定する。各構造体に、データベース内の各依存サービスに関する名前とサービスのステータス情

    報が格納される。バッファのサイズは、これらの構造体と、そのメンバが指す文字列を格納できるだけの十分な大きさでなければならない。
    この配列内のサービスの順序は、サービスの開始順序とは逆になっている。言い換えると、配列内の最初のサービスは最後に開始される

    ものであり、配列内の最後のサービスは最初に開始されるものである。
cbBufSize
    [入力]lpServices パラメータが指すバッファのサイズをバイト数で指定する。
pcbBytesNeeded
    [出力]サービスエントリの配列を格納するために必要なバイト数を受け取る変数へのポインタを指定する。LpServices パラメータが指すバ

    ッファが小さすぎて、この関数が失敗し、ERROR_MORE_DATA エラーが発生したことを表している場合にのみ、この変数は値を受け取

    る。それ以外の場合、このパラメータの内容は未定義である。
lpServicesReturned
    [出力]返されたサービスエントリの数を受け取る変数へのポインタを指定する。

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

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

    エラーコード                                    

意味                                                                                                                           

    ERROR_ACCESS_DENIED

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

    ERROR_INVALID_HANDLE

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

    ERROR_INVALID_PARAMETER

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

    ERROR_MORE_DATA

 

 

lpServices パラメータが指すバッファのサイズが足らない。この関数は、バッファ内に格納されたサービスエントリの実際の数を、lpServicesReturned パラメータが指す変数に書き込む。この関数は、すべてのサービスエントリを格納するために必要なバイト数を、pcbBytesNeeded パラメータが指す変数に書き込む。


解説
    返されるサービスエントリの順序は、グループの順序を考慮に入れた、実際のサービス開始順序とは逆になる。依存サービスを停止する必

    要がある場合、lpServices パラメータが指すバッファに書き込まれたエントリの順序を基にして、依存サービスを適切な順序で停止する。

 

参考
    SERVICE_STATUS 構造体
    ENUM_SERVICE_STATUS 構造体