labunix's blog

labunixのラボUnix

Windowsの不要なサービスを停止、無効化する

 

■Windowsの不要なサービスを停止、無効化する。
 「sc」や「net」では出来ないが、レジストリの「Start」キーの値で「自動/手動/無効」を判断できる。

 NT のブートを妨げるサービスまたはデバイスを無効にする方法
 http://support.microsoft.com/kb/165748

Boot        0x0
System      0x1
Automatic   0X2
Manual      0x3
Disabled    0x4

■サービス名とサービス表示名を引く。
 例)「ヘルプとサポート」

> sc getKeyName "Help and Support"
[SC] GetServiceKeyName SUCCESS  Name = helpsvc

> sc getDisplayName helpsvc
[SC] GetServiceDisplayName SUCCESS  Name = Help and Support

■変更しても良いかの判断は依存関係と、
 使用するかどうかの自身の判断、
 それにサービスの有効/無効に再起動が必要かどうかを含めた判断が必要。

> sc EnumDepend helpsvc
Enum: entriesRead  = 0

■例えば、以下のように依存関係のある「Remote Procedure Call (RPC)」は変更しない方が良い。

> sc EnumDepend RpcSs | find "Enum"
Enum: entriesRead  = 4
Enum: more data, need 5290 bytes

■私の環境では「ヘルプとサポート」を停止、かつ無効にしている。

> sc query helpsvc

SERVICE_NAME: helpsvc
        TYPE               : 20  WIN32_SHARE_PROCESS
        STATE              : 1  STOPPED
                                (NOT_STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 1077       (0x435)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

>reg query HKLM\System\CurrentControlSet\Services\helpsvc | find "Start"
    Start       REG_DWORD       0x4

■自動起動に変更する(再起動不要)。

> sc config helpsvc start= auto
[SC] ChangeServiceConfig SUCCESS

> sc qc helpsvc
[SC] GetServiceConfig SUCCESS

SERVICE_NAME: helpsvc
        TYPE               : 20  WIN32_SHARE_PROCESS
        START_TYPE         : 2   AUTO_START
        ERROR_CONTROL      : 1   NORMAL
        BINARY_PATH_NAME   : C:\WINDOWS\System32\svchost.exe -k netsvcs
        LOAD_ORDER_GROUP   :
        TAG                : 0
        DISPLAY_NAME       : Help and Support
        DEPENDENCIES       : RPCSS
        SERVICE_START_NAME : LocalSystem

> reg query HKLM\System\CurrentControlSet\Services\helpsvc | find "Start"
    Start       REG_DWORD       0x2

■自動なので、「ヘルプとサポート」を起動するとサービスも起動する。
 起動すると、「STATE」が「RUNNING」に変わる。

> net start | find /i "Help and Support"
   Help and Support

> sc query helpsvc

SERVICE_NAME: helpsvc
        TYPE               : 20  WIN32_SHARE_PROCESS
        STATE              : 4  RUNNING
                                (STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

■サービスの停止
 「net stop」コマンドに渡すのは、サービス名でもサービス表示名でも構わない。
 「STATE」は「STOPED」に変わる。

 ※【重要】
  「net stop」コマンドは停止するかエラー(タイムアウト/既に停止)になるまでプロンプトを返さない。
  「sc」は結果に関わらずプロンプトを返すので、使わない。

> net stop "Help and Support"
Help and Support サービスを停止中です.
Help and Support サービスは正常に停止されました。

> net stop helpsvc
Help and Support サービスを停止中です.
Help and Support サービスは正常に停止されました。

> sc query helpsvc

SERVICE_NAME: helpsvc
        TYPE               : 20  WIN32_SHARE_PROCESS
        STATE              : 1  STOPPED
                                (NOT_STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

■サービスの無効化

> sc config helpsvc start= disabled
[SC] ChangeServiceConfig SUCCESS

> sc query helpsvc

SERVICE_NAME: helpsvc
        TYPE               : 20  WIN32_SHARE_PROCESS
        STATE              : 1  STOPPED
                                (NOT_STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

■サービスの停止を確認。

> sc query state= inactive | find "helpsvc"
SERVICE_NAME: helpsvc

■サービスの無効を確認。

> reg query HKLM\System\CurrentControlSet\Services\helpsvc | find "Start"
    Start       REG_DWORD       0x4