UltraVNC で「Ctrl-Alt-Del」を可能にするための「cad.exe」ですが、残念ながらソースコードが付いていません(大人の事情で)。
「cad.exe」は簡単に自作する事が出来ます(動作環境にやや制約がでますが)。
これで、オープンソースになります。
《参考リンク》http://blogs.msdn.com/b/itasupport/archive/2009/09/16/sendsas-step-by-step.aspx
ここに出てくる SAS は「secure attention sequence 」の略で、デフォルトは「Ctrl-Alt-Del」キーの同時押しです。Windows 7(2008 R2も) では、SAS をシミュレートするための SendSAS という API と、これを実現する sas.dll を最初から内蔵しており、追加ソフトウェア無しで API を利用できます( この記事 を参照)。
自作の cad.exe のソースコードは、実質1行です。
// (my)cadexe.cpp #include "stdafx.h" #include <windows.h> #include<sas.h> int _tmain(int argc, _TCHAR* argv[]) { SendSAS(false); // サービスから呼び出す場合は、false を渡す。 return 0; }
更に、SendSAS API を適切に実行するためには、UAC に関して適切な設定でビルドした上に、出来たバイナリに対して署名をしなければなりません。
所謂「オレオレ証明書」を使ってお手軽に作る手順は、下記のようになります。
- ソリューションを用意し、上記のソースコードをビルドする準備を整えます。
- マニフェストの設定を行います。
- 「UACの実行レベル」を「requireAdministrator」に設定します。
- 「UACによるUI保護のバイパス」を「True」に設定します。
- ビルドし、EXEファイルを作成します。
- 「オレオレ証明書」ファイル(.cer)を作成します。Visual Studio コマンドプロンプトを起動し、下記を実行します。
>makecert -r -pe -n "CN=Test Certificate - For SendSAS Use Only" -ss MY testcert.cer
- 「オレオレ証明書」ファイルを、開発用マシンにインストールします。
>certmgr.exe -add testcert.cer -s -r localMachine root
- 実行ファイルに署名します
>SignTool sign /v /s MY /n "Test Certificate - For SendSAS Use Only" /t http://timestamp.verisign.com/scripts/timestamp.dll "cad.exe"
- UltraVNC(サーバ)を実行するマシンの「信頼されたルート証明機関」証明書ストアにも、先ほど作成した「オレオレ証明書」をインストールします。
- 自作した cad.exe を、オリジナルのそれと入れ替えます。
「Ctrl-Alt-Del」を試しましょう。期待した動作になりましたでしょうか。
《再度、参考リンク》http://blogs.msdn.com/b/itasupport/archive/2009/09/16/sendsas-step-by-step.aspx
上記サイトの内容を、全面的に参照させて頂きました(そのままとも言う…)。