Ctrl2cap

作成者: Mark Russinovich

Ctrl2cap のダウンロード
(48 KB)

概要

Ctrl2cap はカーネル モードのデバイス ドライバーであり、CapsLock キーで入力する文字を Ctrl キーの文字に変換するためにシステムのキーボード クラス ドライバーのフィルター処理を行います。私を含め、UNIX から Windows NT に移行したユーザーは、標準的な PC 用キーボードでは CapsLock キーが存在する場所に Ctrl キーが存在することに慣れているので、このようなユーティリティは快適に編集するうえで不可欠です。


インストールと使用方法

Ctrl2cap をインストールするには、Ctrl2cap のファイルを解凍したディレクトリから "ctrl2cap /install" というコマンドを実行します。アンインストールするには、「ctrl2cap /uninstall」と入力します。


Ctrl2cap のしくみ

Windows NT 4 では、Ctrl2cap のしくみは実際のところ、かなり簡単です。Ctrl2cap はキーボード クラス ドライバーにアタッチし、キーボードの読み取り要求を取得します。各要求に対し、I/O 完了コールバックをポストすると同時に、返されるスキャンコードを確認します。スキャンコードが CapsLock の場合、Ctrl2cap ではこのスキャンコードを左側の Ctrl キーに変換します。

Windows 2000 では、Ctrl2cap は、キーボード クラス デバイスの上にあるキーボード クラス デバイスのスタック内に配置された、WDM フィルター ドライバーです。これは、Windows 2000 DDK に含まれている kbfiltr サンプルとは対照的です。kbfiltr は、i8042 ポート デバイスとキーボード クラス デバイスの間に配置されています。Ctrl2cap をキーボード クラス デバイスの上に配置したのには、次のようないくつかの理由があります。

  • IRP_MJ_READ をインターセプトおよび操作するための Ctrl2cap のコードが、Windows NT 4 と Windows 2000 の間で共有されることになります。
  • INF ファイルを提供して、ユーザーにデバイス マネージャーにアクセスして Ctrl2cap をインストールしてもらう必要がありません。適切なレジストリ値 (キーボード クラス デバイスの HKLM\System\CurrentControlSet\Control\Class 内の UpperFilters 値) を変更すればよいだけです。

この手法のデメリットは、次のとおりです (これは、考え方によってメリットにもデメリットにもなります)。

  • デバイス マネージャーで INF ファイルを使用してインストールを行うわけではないので、Ctrl2cap ドライバー ファイルがマイクロソフトによってデジタル署名されていないことがユーザーに警告されません。

このケースに限って言えば、私はメリットがデメリットを上回っていると感じました。ただし、Ctrl2cap を手本として Windows 2000 用キーボード フィルターを作成する場合は、Windows 2000 DDK に含まれている kbfiltr サンプルをよく調査することを強くお勧めします。kbfiltr では、キー入力シーケンスにおけるインターセプトのタイミングのために、非常に容易にキーボード操作を入力ストリームに挿入できます。

詳細情報

フィルター ドライバー (他のドライバーの入力や出力を認識できるように他のドライバーにアタッチするドライバー) の作成に関する詳細については、次のリソースを参照してください。

  • Windows NT DDK および Windows 2000 DDK の \src\storage\filter\diskperf サンプル
  • Windows 2000 DDK の \src\input\kbfiltr サンプル
  • Mark Russinovich と Bryce Cogswell による、『Dr. Dobb's Journal』の 1997 年 2月号の記事「Examining the Windows NTFilesystem」(英語)
  • 同じく Sysinternals ツールで、ファイル システム フィルター ドライバーである Filemon

 

ダウンロード

Ctrl2cap のダウンロード
(48 KB)

 

ダウンロード

ダウンロード

Ctrl2cap のダウンロード
(48 KB)

 

動作環境

  • クライアント: Windows XP 以上
  • サーバー: Windows Server 2003 以上