OpenSCManagerA 関数 (winsvc.h)
指定したコンピューターでサービス コントロール マネージャーへの接続を確立し、指定したサービス コントロール マネージャー データベースを開きます。
構文
SC_HANDLE OpenSCManagerA(
[in, optional] LPCSTR lpMachineName,
[in, optional] LPCSTR lpDatabaseName,
[in] DWORD dwDesiredAccess
);
パラメーター
[in, optional] lpMachineName
対象のコンピューターの名前。 ポインターが NULL であるか、空の文字列を指している場合、関数はローカル コンピューター上のサービス コントロール マネージャーに接続します。
[in, optional] lpDatabaseName
サービス コントロール マネージャー データベースの名前。 このパラメーターは、SERVICES_ACTIVE_DATABASEに設定する必要があります。 NULL の場合、SERVICES_ACTIVE_DATABASE データベースは既定で開かれます。
[in] dwDesiredAccess
サービス コントロール マネージャーへのアクセス。 アクセス権の一覧については、「 サービス セキュリティとアクセス権」を参照してください。
要求されたアクセス権を付与する前に、システムは、呼び出し元プロセスのアクセス トークンを、サービス制御マネージャーに関連付けられているセキュリティ記述子の随意アクセス制御リストと照合します。
SC_MANAGER_CONNECTアクセス権は、この関数を呼び出すことによって暗黙的に指定されます。
戻り値
関数が成功した場合、戻り値は、指定されたサービス 制御マネージャー データベースへのハンドルです。
関数が失敗した場合は、返される値は NULL です。 詳細なエラー情報を得るには、GetLastError を呼び出します。
SCM では、次のエラー コードを設定できます。 その他のエラー コードは、SCM によって呼び出されるレジストリ関数によって設定できます。
リターン コード | 説明 |
---|---|
|
要求されたアクセスが拒否されました。 |
|
指定されたデータベースが存在しません。 |
注釈
プロセスで OpenSCManager 関数を使用してサービス コントロール マネージャー データベースへのハンドルを開くと、システムは要求されたアクセス権を付与する前にセキュリティ チェックを実行します。 詳細については、「 サービス セキュリティとアクセス権」を参照してください。
現在のユーザーが別のコンピューター上のサービスに接続するときに適切なアクセス権を持っていない場合、 OpenSCManager 関数の呼び出しは失敗します。 サービスにリモートで接続するには、LOGON32_LOGON_NEW_CREDENTIALSを使用して LogonUser 関数を呼び出し、OpenSCManager を呼び出す前に ImpersonateLoggedOnUser を呼び出します。 サービスへのリモート接続の詳細については、「 サービスと RPC/TCP」を参照してください。
CreateService 関数で使用できるデータベース ハンドルを開くことができるのは、管理者特権を持つプロセスのみです。
返されるハンドルは、 OpenSCManager 関数を呼び出したプロセスに対してのみ有効です。 CloseServiceHandle 関数を呼び出すことで閉じることができます。
例
例については、「 サービスの構成の変更」を参照してください。
注意
winsvc.h ヘッダーは、OpenSCManager をエイリアスとして定義し、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 エンコードに依存しないエイリアスをエンコードニュートラルでないコードと組み合わせて使用すると、コンパイルまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP (デスクトップ アプリのみ) |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
対象プラットフォーム | Windows |
ヘッダー | winsvc.h (Windows.h を含む) |
Library | Advapi32.lib |
[DLL] | Advapi32.dll |