ドライバをロード/アンロードできる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 [サービス名]