Win32_Service クラスの Change メソッド (Mbnapi.h)

CHANGEWMI クラス メソッドは、Win32_Serviceを変更します。

このトピックでは、マネージド オブジェクト形式 (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)

標準。 ユーザーへの通知が行われます。

重大 (2)

システムは、最後の適切な構成で再起動されます。

重大 (3)

正しい構成でシステムの再起動が試行されます。

StartMode [in]

Windows 基本サービスの開始モード。 詳細については、「解説」を参照してください。

ブート

オペレーティング システム ローダーによって起動されたデバイス ドライバー。 この値は、ドライバー サービスに対してのみ指定できます。

システム

オペレーティング システムの初期化プロセスによって開始されたデバイス ドライバー。 この値は、ドライバー サービスに対してのみ指定できます。

自動

システムの起動時に Service Control Manager によって自動的に開始されるサービス。

手動

プロセスが 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

サービスをローカル システムからネットワークに、またはネットワークからローカル システムに変更する場合、 StartPasswordNULL ではなく空の文字列 ("") である必要があります。

LoadOrderGroup [in]

関連付けられているグループ名。 読み込み順序グループはシステム レジストリに含まれており、サービスがオペレーティング システムに読み込まれる順序を決定します。 ポインターが NULL の場合、または空の文字列を指している場合、サービスはグループに属しません。 詳細については、「解説」を参照してください。

グループ間の依存関係は 、LoadOrderGroupDependencies パラメーターに一覧表示する必要があります。 読み込み順序付けグループ リスト内のサービスが最初に開始され、その後に読み込み順序グループ リストにないグループ内のサービスが続き、その後にグループに属していないサービスが続きます。 システム レジストリには、次の場所にある読み込み順序付けグループの一覧があります。

Hkey_local_machine\システム\CurrentControlSet\コントロール\ServiceGroupOrder

LoadOrderGroupDependencies [in]

このサービスを開始する前に開始する必要がある読み込み順序付けグループの一覧。 配列は 2 倍 null で終了します。 ポインターが NULL の場合、または空の文字列を指している場合、サービスには依存関係はありません。 サービスとサービス グループは同じ名前空間を共有するため、サービス名と区別するには、グループ名の前に SC_GROUP_IDENTIFIER (Winsvc.h ファイルで定義) 文字を付ける必要があります。 グループへの依存関係は、グループのすべてのメンバーを開始しようとした後に、グループの少なくとも 1 つのメンバーが実行されている場合に、このサービスを実行できることを意味します。

ServiceDependencies [in]

このサービスを開始する前に開始する必要があるサービスの名前を含むリスト。 配列は 2 倍 NULL で終了します。 ポインターが NULL の場合、または空の文字列を指している場合、サービスには依存関係はありません。 サービスへの依存関係は、依存するサービスが実行されている場合にのみ、このサービスを実行できることを示します。

戻り値

次の一覧に記載されている値の 1 つ、またはエラーを示すその他の値を返します。 その他のエラー コードについては、「 WMI エラー定数 」または 「WbemErrorEnum」を参照してください。 一般的な HRESULT 値については、「 システム エラー コード」を参照してください。

Success

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

このサービスを実行するアカウントが無効であるか、サービスを実行するためのアクセス許可がありません。

Status Service Exists

23

サービスは、システムから利用できるサービスのデータベースにあります。

サービスは既に一時停止しています

24

サービスは現在システムで一時停止されています。

その他

25 4294967295

解説

コンピューターが起動すると、すべての自動開始サービスも開始されます。 場合によっては、これらのサービスの 1 つがコンピューターと共に起動できないことがあります。 システムの起動時にサービスが失敗すると、コンピューターはサービス エラー制御コードの値に基づいてアクションを実行します。

ほとんどのサービスは、通常のエラー制御コードを使用してインストールされます。 無視エラー コードを使用してインストールされる例外の一部を次に示します。

  • ファイル レプリケーション サービス
  • スマート カード
  • セカンダリ ログオン
  • WMI

エラー コードを無視してインストールされたサービスの場合、サービスが失敗したことをユーザーに通知しません。 サービスを開始できなかったことを画面上で通知する場合は、WMI を使用してエラー制御コードを変更できます。 エラー コントロール コードは、コンピューターの起動にのみ適用されます。エラー コントロール コードは、コンピューターの実行後にサービスを停止してから再起動しようとすると使用されません。

場合によっては、特定のサービスを実行するアカウントの変更が必要になる場合があります。 たとえば、管理アカウントでサービスを実行できます。 これによりセキュリティの脆弱性が発生する可能性があるため、特権が少ないアカウントにサービスを切り替える可能性があります。 または、削除されようとしているアカウントでサービスが実行されている場合や、すべてのサーバーで特定のサービスが特定のアカウントで実行されるようにしたい場合があります。 Win32_Service クラスの Change メソッドを使用して、指定したユーザー アカウントで実行するサービスを構成できます。 アカウントを選択するときは、次の点に注意してください。

  • サービス アカウントとして使用されるアカウントには、サービスとしてログオンする権限が必要です。 この権限は、グループ ポリシーを使用して付与できます。

  • サービス アカウントとして使用されているアカウントは、ローカル、ドメイン、またはエンタープライズ管理者グループのメンバーにすることはできません。

  • サービスの各インスタンスは、一意のユーザー アカウントで実行する必要があります。 これにより、セキュリティが強化され、個々のサービス インスタンスの監査が可能になります。

  • サービスが対話型の場合、サービスは LocalSystem アカウントで実行する必要があります。

    LocalSystem は、一度に 1 つのウィンドウ ステーション (WinSta0) のみを表示して対話型にできるため、必須です。 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
ヘッダー
Mbnapi.h
MOF
CIMWin32.mof
[DLL]
CIMWin32.dll

関連項目

オペレーティング システム クラス

Win32_Service

WMI タスク: サービス