Win32_Service クラスの Change メソッド (Mbnapi.h) - TerminalService
CHANGEWMI クラス メソッドは、Win32_TerminalServiceを変更します。
このトピックでは、マネージド オブジェクト形式 (MOF) 構文を使用します。 このメソッドの使用方法の詳細については、「メソッドの 呼び出し」を参照してください。
構文
uint32 Change(
[in] string DisplayName,
[in] string PathName,
[in] uint32 ServiceType,
[in] uint32 ErrorControl,
[in] string StartMode,
[in] boolean DesktopInteract,
[in] string StartName,
[in] string StartPassword,
[in] string LoadOrderGroup,
[in] string LoadOrderGroupDependencies,
[in] string ServiceDependencies
);
パラメーター
-
DisplayName [in]
-
サービスの表示名。 この文字列の長さは最大 256 文字です。 名前は、サービス コントロール マネージャーで大文字と小文字が保持されます。 DisplayName の比較では、常に大文字と小文字が区別されません。
制約: Name プロパティと同じ値を受け入れます。
たとえば、"Atdisk" です。
-
PathName [in]
-
"\SystemRoot\System32\drivers\afd.sys" など、サービスを実装する実行可能ファイルへの完全修飾パス。
-
ServiceType [in]
-
それらを呼び出すプロセスに提供されるサービスの種類。
-
1 (0x1)
-
カーネル ドライバー
-
2 (0x2)
-
ファイル システム ドライバー
-
4 (0x4)
-
アダプター
-
8 (0x8)
-
認識エンジン ドライバー
-
16 (0x10)
-
独自のプロセス
-
32 (0x20)
-
プロセスの共有
-
256 (0x100)
-
対話型プロセス
ErrorControl [in]
起動時にこのサービスの起動に失敗した場合のエラーの重大度。 値は、障害が発生した場合にスタートアップ プログラムによって実行されるアクションを示します。 すべてのエラーはシステムによってログに記録されます。
0
無視。 スタートアップは続行されます。 サービスが失敗したことをユーザーに通知しません。
1
標準。 スタートアップは続行されます。 ユーザーがログオンする前に、ユーザーは "起動時に少なくとも 1 つのサービスまたはデバイスが失敗しました" という通知を受け取ります。
2
厳しい。 コンピューターは、既知の正常な構成で再起動を試みます。 サービスが再度失敗した場合は、起動が続行され、ユーザーに通知が送信されます。
3
重大 コンピューターは、既知の正常な構成で再起動を試みます。 サービスが再度失敗すると、スタートアップが停止します。
StartMode [in]
Windows 基本サービスの開始モード。 詳細については、「解説」を参照してください。
ブート
オペレーティング システム ローダーによって起動されたデバイス ドライバー。
システム
オペレーティング システムの初期化プロセスによって開始されたデバイス ドライバー。 この値は、ドライバー サービスに対してのみ指定できます。
自動
サービスは、システムの起動時にサービス コントロール マネージャーによって自動的に開始されます。 自動開始サービスは、ユーザーがコンピューターにログオンする前に開始され、ユーザーがコンピューターにログオンしなくても実行されます。
手動
プロセスが StartService メソッドを呼び出したときにサービス コントロール マネージャーによって開始されるサービス。 手動サービスは、ユーザー (またはスクリプト) によって明示的に開始する必要がありますが、ユーザーがログオフしても引き続き実行されます。 手動サービスは、多くの場合、オンデマンド サービスと呼ばれます。
無効
開始できなくなったサービス。 無効なサービスを開始するには、最初にスタートアップ オプションを [自動] または [手動] に変更する必要があります。
DesktopInteract [in]
True の場合、サービスはデスクトップ上のウィンドウを作成または通信できます。
StartName [in]
サービスが実行されるアカウント名。 サービスの種類によっては、アカウント名が DomainName\Username または .\Username の形式である場合があります。 サービス プロセスは、実行時にこれら 2 つの形式のいずれかを使用してログに記録されます。 アカウントが組み込みのドメインに属している場合は、.\Username を指定できます。 NULL を指定すると、サービスは LocalSystem アカウントとしてログオンされます。 カーネルまたはシステム レベルのドライバーの場合、 StartName には、入力および出力 (I/O) システムがデバイス ドライバーの読み込みに使用するドライバー オブジェクト名 (つまり、\FileSystem\Rdr または \Driver\Xns) が含まれます。 NULL を指定すると、"DWDOM\管理" などのサービス名に基づいて、I/O システムによって作成された既定のオブジェクト名でドライバーが実行されます。
ユーザー プリンシパル名 (UPN) 形式を使用して StartName を指定することもできます ( たとえば、Username@DomainName)。
StartPassword [in]
StartName パラメーターで指定されたアカウント名のパスワード。 パスワードを変更しない場合は NULL を 指定します。 サービスがパスワードを持っていない場合は、空の文字列を指定します。
Note
サービスをローカル システムからネットワークに、またはネットワークからローカル システムに変更する場合、 StartPassword は NULL ではなく空の文字列 ("") である必要があります。
LoadOrderGroup [in]
関連付けられているグループ名。 読み込み順序グループはシステム レジストリに含まれており、サービスがオペレーティング システムに読み込まれる順序を決定します。 ポインターが NULL の場合、または空の文字列を指している場合、サービスはグループに属しません。 詳細については、「解説」を参照してください。
グループ間の依存関係は 、LoadOrderGroupDependencies パラメーターに一覧表示する必要があります。 読み込み順序付けグループ リスト内のサービスが最初に開始され、その後に読み込み順序グループ リストにないグループ内のサービスが続き、その後にグループに属していないサービスが続きます。 システム レジストリには、次の場所にある読み込み順序付けグループの一覧があります。
Hkey_local_machine\システム\CurrentControlSet\コントロール\ServiceGroupOrder
LoadOrderGroupDependencies [in]
このサービスを開始する前に開始する必要がある読み込み順序付けグループの一覧。 配列は null で終わる 2 倍です。 ポインターが NULL の場合、または空の文字列を指している場合、サービスには依存関係はありません。 サービスとサービス グループは同じ名前空間を共有するため、サービス名と区別するには、グループ名の前に SC_GROUP_IDENTIFIER (Winsvc.h ファイルで定義) 文字を付ける必要があります。 グループへの依存関係は、グループのすべてのメンバーを開始しようとした後に、グループの少なくとも 1 つのメンバーが実行されている場合に、このサービスを実行できることを意味します。
ServiceDependencies [in]
このサービスを開始する前に開始する必要があるサービスの名前を含むリスト。 配列は 2 倍 NULL で終了します。 ポインターが NULL の場合、または空の文字列を指している場合、サービスには依存関係はありません。 サービスへの依存関係は、依存するサービスが実行されている場合にのみ、このサービスを実行できることを示します。
戻り値
次の一覧に記載されている値の 1 つ、またはエラーを示すその他の値を返します。 その他のエラー コードについては、「 WMI エラー定数 」または 「WbemErrorEnum」を参照してください。 一般的な HRESULT 値については、「 システム エラー コード」を参照してください。
-
0
-
要求が受け入れられました。
-
1
-
要求はサポートされていません。
-
2
-
ユーザーは必要なアクセス権を持っていませんでした。
-
3
-
そのサービスは、実行中の他のサービスが依存しているので停止できません。
-
4
-
要求された制御コードは有効でないか、またはサービスを受け入れ可能ではありません。
-
5
-
サービスの状態 (Win32_BaseServiceのため、要求された制御コードをサービスに送信できません。State プロパティ) は、0、1、または 2 と等しくなります。
-
6
-
サービスは開始されていません。
-
7
-
サービスは適切な時間内に開始要求に応答しませんでした。
-
8
-
サービスの開始時に不明なエラーが発生しました。
-
9
-
サービス実行可能ファイルへのディレクトリ パスが見つかりませんでした。
-
"10"
-
サービスは既に実行されています。
-
11
-
新しいサービスを追加するデータベースはロックされています。
-
12
-
このサービスが依存する依存関係がシステムから削除されました。
-
13
-
サービスは依存関係のあるサービスから必要なサービスを見つけられませんでした。
-
14
-
サービスはシステムから無効になっています。
-
15
-
サービスにはシステムで実行するための正しい認証がありません。
-
16
-
このサービスはシステムから削除されています。
-
17
-
サービスに実行スレッドがありません。
-
18
-
サービスは起動時に循環依存関係を持ちます。
-
19
-
サービスは同じ名前で実行されています。
-
20
-
サービス名に無効な文字が含まれています。
-
21
-
無効なパラメーターがサービスに渡されました。
-
22
-
このサービスを実行するアカウントが無効であるか、サービスを実行するためのアクセス許可がありません。
-
23
-
サービスは、システムから利用できるサービスのデータベースにあります。
-
24
-
サービスは現在システムで一時停止されています。
解説
コンピューターが起動すると、すべての自動開始サービスも開始されます。 場合によっては、これらのサービスの 1 つがコンピューターと共に起動できないことがあります。 システムの起動時にサービスが失敗すると、コンピューターはサービス エラー制御コードの値に基づいてアクションを実行します。
ほとんどのサービスは、通常のエラー制御コードを使用してインストールされます。 無視エラー コードを使用してインストールされる例外の一部を次に示します。
- ファイル レプリケーション サービス
- スマート カード
- セカンダリ ログオン
- WMI
エラー コードを無視してインストールされたサービスの場合、サービスが失敗したことをユーザーに通知しません。 サービスを開始できなかったことを画面上で通知する場合は、WMI を使用してエラー制御コードを変更できます。 エラー コントロール コードは、コンピューターの起動にのみ適用されます。エラー コントロール コードは、コンピューターの実行後にサービスを停止してから再起動しようとすると使用されません。
場合によっては、特定のサービスを実行するアカウントの変更が必要になる場合があります。 たとえば、管理アカウントでサービスを実行できます。 これによりセキュリティの脆弱性が発生する可能性があるため、特権が少ないアカウントにサービスを切り替える可能性があります。 または、削除されようとしているアカウントでサービスが実行されている場合や、すべてのサーバーで特定のサービスが特定のアカウントで実行されるようにしたい場合があります。 Win32_TerminalService クラスの Change メソッドを使用して、指定したユーザー アカウントで実行するサービスを構成できます。 アカウントを選択するときは、次の点に注意してください。
サービス アカウントとして使用されるアカウントには、サービスとしてログオンする権限が必要です。 この権限は、グループ ポリシーを使用して付与できます。
サービス アカウントとして使用されているアカウントは、ローカル、ドメイン、またはエンタープライズ管理者グループのメンバーにすることはできません。
サービスの各インスタンスは、一意のユーザー アカウントで実行する必要があります。 これにより、セキュリティが強化され、個々のサービス インスタンスの監査が可能になります。
サービスが対話型の場合、サービスは LocalSystem アカウントで実行する必要があります。
一度に表示および対話可能なウィンドウ ステーション (WinSta0) は 1 つだけであるため、LocalSystem が必要です。 LocalSystem 以外のアカウントでサービスが実行されている場合、サービスは、非表示ウィンドウである Service-0x03e7$\Default ウィンドウ ステーションで実行されます。 このウィンドウ ステーションで実行されているサービスは、入力または表示出力を受信できません。
サービスにアカウントを割り当てると、SCM は割り当てを行う前に、そのアカウントの正しいパスワードを必要とします。 正しくないパスワードを指定すると、SCM はアカウントを拒否します。 LocalSystem、LocalService、または NetworkService アカウントを使用してサービス アカウントを構成する場合、これらのアカウントにはパスワードがないため、アカウント パスワードを指定する必要はありません。
SCM は、アカウント パスワードをサービス データベースに格納します。 ただし、パスワードが割り当てられると、SCM では、サービス データベースに格納されているパスワードと Active Directory のユーザー アカウントに割り当てられたパスワードが一致し続けます。 その結果、次のような状況が発生する可能性があります。
- .特定のユーザー アカウントで実行するようにサービスを構成します。
- サービスは、現在のアカウント パスワードを使用して、そのアカウントで起動します。
- ユーザー アカウントのパスワードを変更します。
- サービスは引き続き実行されます。 ただし、サービスが停止した場合、SCM は古い無効なパスワードを引き続き使用するため、サービスを再起動できません。 Active Directory でパスワードを変更しても、サービス データベースに格納されているパスワードは変更されません。
通常のユーザー アカウントでサービスを実行する場合は、ユーザー アカウントのパスワードが変更されるたびに、それらのサービス パスワードを更新する必要があります。 これは、そのアカウントで実行されているサービスや、そのアカウントで実行されているサービスを持つコンピューターがわからない場合は、特に時間がかかる場合があります。 幸いにも、WMI を使用して、すべてのコンピューターでサービス アカウントをチェックし、必要に応じてサービス アカウントのパスワードを変更できます。
Win32_LoadOrderGroup パラメーターは、実行依存関係を定義するシステム サービスのグループを表します。 サービスは相互に依存するため、Load Order Group で指定された順序でサービスを開始する必要があります。 これらの依存サービスを正しく機能させるには、継続元サービスが存在する必要があります。
サービスをネットワーク サービスからローカル システムに変更するには、 StartName パラメーターと StartPassword パラメーターに次の値を指定する必要があります。
StartName = "LocalSystem"
StartPassword = "" // - empty string, not NULL
サービスをローカル システム サービスからネットワークに変更するには、 StartName パラメーターと StartPassword パラメーターに次の値を指定する必要があります。
StartName = "NT AUTHORITY\NetworkService"
StartPassword = "" // - empty string, not NULL
例
次の VBScript は、サービスのサービス アカウントを、指定されたユーザー アカウントで実行されているから LocalSystem に変更します。
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery _
("SELECT * FROM Win32_Service WHERE StartName = '.\\NetSvc'")
For Each objService in colServices
errServiceChange = objService.Change _
( , , , , , , ".\LocalSystem" , "")
Next
次の VBScript は、Netsvc で実行されているすべてのスクリプトのサービス アカウント パスワードを変更します
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery _
("SELECT * FROM Win32_Service WHERE StartName = '.\\NetSvc'")
For Each objservice in colServiceList
errReturn = objService.Change( , , , , , , , "password")
Next
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント |
Windows Vista |
サポートされている最小のサーバー |
Windows Server 2008 |
名前空間 |
Root\CIMv2\TerminalServices |
ヘッダー |
|
MOF |
|
[DLL] |
|