<Return[O]><Top>

OpenService

Declare Function Api_OpenService& Lib "advapi32" Alias "OpenServiceA" (ByVal hSCManager&, ByVal lpServiceName$, ByVal dwDesiredAccess&)

Declare Function OpenService Lib "advapi32" Alias "OpenServiceA" (ByVal hSCManager As Long, ByVal lpServiceName As String, ByVal dwDesiredAccess As Long) As Long

既存のサービスのハンドルを開く。

hSCManager
    [入力]サービス制御マネージャのデータベースのハンドルを指定する。OpenSCManager 関数が返したハンドルを指定する。
lpServiceName
    [入力]開くサービスの名前を表す、NULL で終わる文字列へのポインタを指定する。この文字列の最大の長さは 256 文字である。

    サービス制御マネージャのデータベースは、ここで指定された大文字と小文字をそのまま維持する。ただし、サービス名を比較するときは、

    常に大文字と小文字を区別しない。スラッシュ(/)と円記号(\)は、サービス名に使えない。
dwDesiredAccess
    [入力]サービスに割り当てるアクセス権を指定する。要求されたアクセス権を許可する前に、システムは呼び出し側プロセスのアクセスト

    ークンと、サービスオブジェクトに関連付けられているセキュリティ記述子の随意アクセス制御リストを比較しする。
    STANDARD_RIGHTS_REQUIRED 定数は、サービスオブジェクトの次のアクセス権を認めている。

    標準的な権利                    

説明                                                                                                           

    DELETE

サービスを削除できるよう、DeleteService 関数の呼び出しを有効にする。

    READ_CONTROL

サービスオブジェクトのセキュリティ記述子を問い合わせできるよう、 関数の呼び出しを有効にする。

    WRITE_DAC |
    WRITE_OWNER

サービスオブジェクトのセキュリティ記述子を変更できるよう、 関数の呼び出しを有効にする。

    サービスオブジェクトの次のアクセスタイプのいずれか、またはすべてを指定することもできる。

    オブジェクトのアクセスタイプ                            

説明                                                                                                           

    SERVICE_ALL_ACCESS

この表に記載したすべてのアクセスタイプ、および STANDARD_RIGHTS_REQUIRED をセットする。

    SERVICE_CHANGE_CONFIG

サービスの構成を変更できるよう、ChangeServiceConfig 関数の呼び出しを有効にする。

    SERVICE_ENUMERATE_DEPENDENTS

このサービスに依存する他のすべてのサービスを列挙できるよう、EnumDependentServices 関数の呼び出しを有効にする。

    SERVICE_INTERROGATE

サービスに現在のステータスを報告することを指示できるよう、ControlService 関数の呼び出しを有効にする。

    SERVICE_PAUSE_CONTINUE

サービスを一時停止または続行できるよう、ControlService 関数の呼び出しを有効にする。

    SERVICE_QUERY_CONFIG

サービスの構成を問い合わせできるよう、QueryServiceConfig 関数の呼び出しを有効にする。

    SERVICE_QUERY_STATUS

サービスのステータスについてサービス制御マネージャに問い合わせできるよう、QueryServiceStatus 関数の呼び出しを有効にする。

    SERVICE_START

サービスを開始できるよう、StartService 関数の呼び出しを有効にする。

    SERVICE_STOP

サービスを停止できるよう、ControlService 関数の呼び出しを有効にする。

    SERVICE_USER_DEFINED_CONTROL

ユーザー定義の制御コードを指定できるよう、ControlService 関数の呼び出しを有効にする。

    次の一般的なアクセス権のうち任意のものを指定することもできる。

    一般的なアクセス権          

サービスのアクセスタイプ                                                                                                    

    GENERIC_READ

アクセスタイプ STANDARD_RIGHTS_READ、SERVICE_QUERY_CONFIG、SERVICE_QUERY_STATUS、SERVICE_ENUMERATE_DEPENDENTS を組み合わせる。

    GENERIC_WRITE

アクセスタイプ STANDARD_RIGHTS_WRITE と SERVICE_CHANGE_CONFIG を組み合わせる。

    GENERIC_EXECUTE

アクセスタイプ STANDARD_RIGHTS_EXECUTE、SERVICE_START、SERVICE_STOP、SERVICE_PAUSE_CONTINUE、SERVICE_INTERROGATE、SERVICE_USER_DEFINED_CONTROL を組み合わせる。

 

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

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

    エラーコード                                              

意味                                                                                                                      

    ERROR_ACCESS_DENIED

サービス制御マネージャの指定されたデータベースのハンドルに、サービスに対するアクセス権がない。

    ERROR_INVALID_HANDLE

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

    ERROR_INVALID_NAME

指定されたサービス名は無効である。

    ERROR_SERVICE_DOES_NOT_EXIST

指定されたサービスは存在しない。

 

解説
    返されたハンドルは、OpenService 関数を呼び出したプロセスにのみ有効である。CloseServiceHandle 関数を呼び出すと、このハンドルを

    閉じることができる。