ドライバをロード/アンロードできるCUIのツール

XP以降のWindowsには標準でscというコマンドがあって、これを使うとドライバをロードしたりアンロードしたりすることができる。

以下に __empty.sys を登録・開始する例と、停止・登録解除する例を示す。まず起動まで。

>sc create __empty binpath= C:\Users\vm\Desktop\__empty.sys type= kernel start= system
[SC] CreateService SUCCESS

>sc start __empty

SERVICE_NAME: __empty
        TYPE               : 1  KERNEL_DRIVER
        STATE              : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0
        PID                : 0
        FLAGS              :

STATE=RUNNINGということで問題なし。次は停止と登録解除。

>sc stop __empty

SERVICE_NAME: __empty
        TYPE               : 1  KERNEL_DRIVER
        STATE              : 1  STOPPED
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

>sc delete __empty
[SC] DeleteService SUCCESS

STATE=STOPPEDということで問題なし。


非常にcoolだ。binpathの指定にフルパスを渡さなければいけないのが難点だが、これは適当なラッパのスクリプトでも噛ませてあげれば良さそう。これがあれば ldsys とかいらない。


優秀なサーバ管理者なら気づいていたはずだ\(^o^)/


以下はVista SP1でのヘルプ。

>ver
Microsoft Windows [Version 6.0.6001]

>sc create
説明:
        レジストリおよびサービス データベースのサービス エントリを作成します。
使用法:
        sc <server> create [サービス名] [binPath= ] <オプション1>
        <オプション2>...

オプション:
注意: オプション名には等号が含まれています。
      等号と値の間にはスペースが必要です。
 type= <own|share|interact|kernel|filesys|rec>
       (既定値 = own)
 start= <boot|system|auto|demand|disabled|delayed-auto>
       (既定値 = demand)
 error= <normal|severe|critical|ignore>
       (既定値 = normal)
 binPath= <BinaryPathName>
 group= <LoadOrderGroup>
 tag= <yes|no>
 depend= <依存関係 (スラッシュ (/) で区切られています)>
 obj= <AccountName|ObjectName>
       (既定値 = LocalSystem)
 DisplayName= <表示名>
 password= <パスワード>

>sc delete
説明:
        レジストリからサービス エントリを削除します。
        サービスが実行しているか、または別の処理がサービスに対して
        オープン ハンドルを持っている場合は、そのサービスは単に
        削除するようにマークされます。
使用法:
        sc <サーバー> delete [サービス名]