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
関数を呼び出すと、このハンドルを
閉じることができる。 |