<Return[C]><Top>

ChangeServiceConfig

Declare Function Api_ChangeServiceConfig& Lib "advapi32" Alias "ChangeServiceConfigA" (ByVal Serv&, ByVal ServType&, ByVal StartType&, ByVal ErrCtrl&, ByVal BinPath$, ByVal LoadOrder$, TagId&, ByVal Depend$, ByVal ServStartNa$, ByVal PW$, ByVal DispName$)

Declare Function ChangeServiceConfig Lib "advapi32" Alias "ChangeServiceConfigA" (ByVal hService As Long, ByVal dwServiceType As Long, ByVal dwStartType As Long, ByVal dwErrorControl As Long, ByVal lpBinaryPathName As String, ByVal lpLoadOrderGroup As String, lpdwTagId As Long, ByVal lpDependencies As String, ByVal lpServiceStartName As String, ByVal lpPassword As String, ByVal lpDisplayName As String) As Long

サービスの構成パラメータを変更する。
オプション構成パラメータを変更するには、ChangeServiceConfig2 関数を使う。

パラメータ
hService
    [入力]サービスのハンドルを指定する。OpenService 関数または CreateService 関数が返したハンドルを指定し、これには

    SERVICE_CHANGE_CONFIG アクセス権が必要である。
dwServiceType
    [入力]サービスのタイプを指定する。既存のサービスタイプを変更しない場合は、SERVICE_NO_CHANGE を指定する。それ以外の場

    合は、次のいずれかのサービスタイプを指定する。

    タイプ                                                   

意味                                                                                                                        

    SERVICE_WIN32_OWN_PROCESS

サービスアプリケーションがそのアプリケーション専用のプロセス内で動作することを指定する。

    SERVICE_WIN32_SHARE_PROCESS

サービスアプリケーションが 1 つのプロセスを他のサービスと共有することを指定する。

    SERVICE_KERNEL_DRIVER

ドライバサービスを指定する。

    SERVICE_FILE_SYSTEM_DRIVER

ファイルシステムのドライバサービスを指定する。

    SERVICE_WIN32_OWN_PROCESS または SERVICE_WIN32_SHARE_PROCESS を指定する場合、次のタイプをともに指定することも

    できる。

    タイプ                                                   

意味                                                                                                                        

    SERVICE_INTERACTIVE_PROCESS

サービスアプリケーションのプロセスがデスクトップと相互作用できるようにする。

dwStartType
    [入力]サービスを開始する時期を指定する。既存の開始のタイプを変更しない場合は、SERVICE_NO_CHANGE を指定する。それ以

    外の場合、次のいずれかの開始タイプを指定する。

    値                                             

意味                                                                                                                                 

    SERVICE_ERROR_IGNORE

開始プログラムはエラーをログに記録しますが、開始操作を続行する。

    SERVICE_ERROR_NORMAL

 

開始プログラムはエラーをログに記録し、メッセージボックスをポップアップ表示するが、開始操作を続行する。

    SERVICE_ERROR_SEVERE

 

開始プログラムはエラーをログに記録します。直前に利用したときは正常であったことがわかっている構成を使って開始操作を行っている場合は、その開始操作を続行する。それ以外の場合、直前に利用したときは正常であった構成を使ってシステムを再起動する。

    SERVICE_ERROR_CRITICAL

 

可能であれば、開始プログラムはエラーをログに記録する。直前に利用したときは正常であったことがわかっている構成を使って開始操作を行っている場合は、その開始操作は失敗する。それ以外の場合、直前に利用したときは正常であった構成を使ってシステムを再起動する。

lpBinaryPathName
    [入力]サービスバイナリファイルの完全修飾パスを表す NULL で終わる文字列へのポインタを指定する。既存のパスを変更しない場合

    は NULL を指定する。パスに半角スペースが使われている場合は、正しく解釈されるように引用符で囲まなければならない。たとえば、

    "d:\\my share\\myservice.exe" というパスは、"\"d:\\my share\\myservice.exe\"" という形で指定しなければならない。
lpLoadOrderGroup
    [入力]このサービスが所属しているロード順序決定グループの名前を表す、NULL で終わる文字列へのポインタを指定する。既存のグ

    ループを変更しない場合は、NULL を指定する。サービスがどのグループにも所属していない場合は、空文字列を指定する。
lpdwTagId
    [出力]タグ値を受け取る変数へのポインタを指定する。このタグ値は、lpLoadOrderGroup パラメータで指定されたグループで一意の値

    である。既存のタグを変更しない場合は、NULL を指定する。
    次のレジストリキーの GroupOrderList 値でタグ順序ベクタを指定すると、タグを使って、ロード順序決定グループ内のでサービスの開始順

    序を決めることができる。
    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control
    開始タイプが SERVICE_BOOT_START または SERVICE_SYSTEM_START であるドライバサービスでのみ、タグが評価される。
lpDependencies
    [入力]NULL で区切られた複数のサービス名またはロード順序決定グループからなる、2 つの NULL で終わる配列へのポインタを指定

    する。システムはこのサービスを開始する前に、この配列内で列挙されたサービスやグループを開始しておかなければならない(グループに対

    する依存性とは、そのグループのすべてのメンバを開始しようと試みた後、そのメンバのうち少なくとも 1 つが動作している状態でのみ、この

    サービスを実行できることを意味する)。既存の依存性を変更しない場合は NULL を指定する。サービスに依存性がない場合は、空文字

    列を指定する。
    グループ名のプリフィックスとして SC_GROUP_IDENTIFIER を記述しなければならない。その結果、グループ名とサービス名を区別できる

    ようになる。サービス名とサービスグループ名は同じ名前空間を共有しているからである。
lpServiceStartName
    [入力]サービス名を表す NULL で終わる文字列へのポインタを指定する。既存の名前を変更しない場合は NULL を指定する。サービ

    スタイプが SERVICE_WIN32_OWN_PROCESS である場合、DomainName\UserName 形式のアカウント名を使います。サービスプロ

    セスは、このユーザーとしてログオンすることになる。このアカウントがビルトインドメインに所属している場合、.\UserName を指定できる。サ

    ービスタイプが SERVICE_WIN32_SHARE_PROCESS である場合、LocalSystem アカウントを指定しなければなりません。
    サービスタイプが SERVICE_KERNEL_DRIVER または SERVICE_FILE_SYSTEM_DRIVER である場合、システムがデバイスドライバを

    ロードするために使うオブジェクト名がドライバ名になる。I/O システムが作成した既定のオブジェクト名をドライバ名として使うことを予定してい

    る場合、NULL を指定する。
lpPassword
    [入力]lpServiceStartName パラメータで指定されたアカウントに対するパスワードを表す、NULL で終わる文字列へのポインタを指定す

    る。パスワードを変更しない場合は NULL を指定する。サービスにパスワードが割り当てられていない場合は、空文字列を指定する。
    ドライバサービスではパスワードは無視される。
lpDisplayName
    [入力]アプリケーションがユーザーに対してサービスを識別するために使う表示名を表す、NULL で終わる文字列へのポインタを指定す

    る。この文字列の最大の長さは 256 文字である。サービス制御マネージャは、ここで指定された大文字と小文字をそのまま維持する。た

    だし、表示名を比較するときは、常に大文字と小文字を区別しない。

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

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

 

解説
    ChangeServiceConfig 関数は、サービス制御マネージャのデータベース内で、指定されたサービスの構成情報を変更する。

    QueryServiceConfig 関数を使うと、現在の構成情報を取得できる。
    現在動作中のサービスの構成を変更した場合、lpDisplayName パラメータを除き、そのサービスを停止するまで変更結果は有効にならな

    い。
    開始プログラムはロード順序決定グループを使って、複数のサービスからなるグループを、リスト内のほかのグループに対して指定された相

    対順序でロードする。ロード順序決定グループのリストは、次のレジストリキーの ServiceGroupOrder 値に保持されている。
    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control