Author Archives: ytmknd

UltraVNCの小技(10) — VNC Serverのビルド(1.0.9.6.2)

 

2012年2月に、UltraVNC 1.0.9.6.2 がリリースされています。

UltraVNC 1.0.9.6.2(のサーバ winvnc.exe)をソースコードからビルドする方法のメモです。
Windows 7(32bit版) 上で、VisualStudio 2010 の環境でビルドしています。

  1. ソースコードの取得(http://www.uvnc.com/downloads/ultravnc/100-download-ultravnc-10962.html)。
  2. Visual Studio で winvnc ディレクトリのプロジェクトファイル(winvnc.sln)を開く。同時にスタートアッププロジェクトに指定。
  3. 「配置プロジェクト(UltraVNC)」を削除(理由は後述)。
  4. 各プロジェクトのプロパティを開き「プラットフォームツールセット」を確認。「Intel C++ Compiler XE 12.01」になっていたら「v100」に変更。
  5. vncviewer プロジェクトにおいて「追加のインクルードディレクトリ」を編集。「vncviewer\omnithread」と「DirectX SDK」のヘッダの置き場所を追加。
  6. 同じく、vncviewer プロジェクトにおいて、「追加のライブラリディレクトリ」を編集。「DirectX SDK」のライブラリの置き場所を追加する。
  7. ビルドする。

注意点を幾つか。

  • ソリューションに「配置プロジェクト」が含まれるようになりました。加えて、サーバ、ビュアー、ユーティリティが同一ソリューションに纏めて含まれる構成になっています。ただし、「配置プロジェクト」自体を修正しなければビルドが通らない状態であり、「配置プロジェクト」もろとも、自分が不要なプロジェクトは削除してしまって問題ないと思われます(読み込みできない「uvnc_settings」プロジェクトなど)。それらは、後から単独でビルドすればよいでしょう。最低限、winvnc.exe と ini ファイルをクライアントに配置できれば、VNCサーバは動作します。
  • リリースビルド時に、生成したバイナリに署名する処理が追加されています。プロジェクトの「ビルドイベント」-「ビルド後イベント」のコマンドラインに処理が書かれています。削除するか、自前の証明書を用意して、これを使った処理に書き換える必要があります。

修正したソリューションファイル/ソースコード等を近日中にダウンロードできるようにする予定です。

 

ソースコードは、ここ からダウンロードできます。

ライセンスは、オリジナルの UltraVNC に準じます。

無保証です。

 

UltraVNCの小技(9) — VNC Serverのビルド(1.0.9.6.1)

UltraVNC 1.0.9.6.1 がリリースされています(ダウンロードページはこちら)。

プロジェクトに zlibstat が含まれるようになりました。

ただし、zlib (に含まれている関数)は、1.0.9.6 以前と同様に追加してやる必要があります。

こちら(1.0.9.5 でのビルド手順)を参考に zlib プロジェクトを追加すればビルドが通るはずです。

 

UltraVNCの小技(8) — VNC Serverのビルド(1.0.9.6)

UltraVNC 1.0.9.6 がリリースされています(ダウンロードページはこちら)。

ソースコードをダウンロードして気が付く点は、1.0.9.5 に含まれていた「libjpeg」が含まれなくなっている事です。

結果、「libjpeg-turbo-win」をビルドするために nasm(Netwide Assembler)が必要になります。1.0.9.5 までは、「libjpeg-turbo-win」の代わりに「libjpeg」を使うことで、nasm 無しでビルドすることが可能でした。

この点を除けば、winvnc.exe(サーバ)をビルドする上で 1.0.9.5 と大きな違いはない様です。

こちら(1.0.9.5 でのビルド手順)を参考に…。

 

UltraVNCの小技(7) — UltraVNC 1.0.9.5 と「Ctrl-Alt-Del」

リリースノート にもある通り、サーバが SendSAS API を利用するようになりました。「Ctrl-Alt-Del」キーが押された時(vncviewer上では「Send Ctrl+Alt+Del to host」ボタンが押された時)、呼べる場合は SendSAS API を、呼べない場合は cad.exe を起動するようなコードになっています。また、レジストリ設定が不十分な場合は修正してくれます(ダイアログが出ます)。
「UltraVNC をインストールしたけど Ctrl-Alt-Del キー押下時の動作が期待した通りでない」場合は、下記を確認しましょう。

  • v 1.0.9.5 (以降)をインストールしたか?
  • v 1.0.9.5 より古いバージョンなら、インストール時に「Download Vista addons files now」をチェックしたか?

この辺 も参考に。

UltraVNCの小技(6) — VNC Serverのビルド(1.0.9.5)

UltraVNC 1.0.9.5(のサーバ)をソースコードからビルドする方法のメモです。
Windows 7(32bit版) 上で、VisualStudio 2008 の環境でビルドしています。

  1. ソースコードの取得
  2. ソリューションを開く
      ソースコードを解凍したら、VisualStudioより、winvnc¥winvnc2008.sln を開きます(VS2008の場合)。

      「zlibstat」プロジェクトが読み込めない旨のエラーが出ますが、差し当たり無視します。
      また、デバッグに備えて、winvnc をスタートアッププロジェクトに指定しておきます。

  3. 「zlib」プロジェクト関連の設定
      ソリューションエクスプローラから「追加」−「既存のプロジェクト」をクリックし、zlib¥zlib.dsp を選択し、「zlib」プロジェクトを追加します(zlib フォルダは winvnc と同じ階層にある)。

      次に winvnc プロジェクトを右クリックし、「プロジェクトの依存関係」をクリックします。
      ダイアログが開いたら、依存先「zlib」にチェックを入れて「OK」ボタンを押します。

  4. libjpeg-turbo-win/libjpeg の設定(オプション)
      標準では libjpeg-turbo-win がビルドされて使われます。この際、ビルドに nasm(Netwide Assembler)が必要です。

      もし、何らかの理由で nasm が使えない場合は 「ソリューションのプロパティ」−「構成プロパティ」の「ビルド」項目で、 libjpeg-turbo-win のチェックを外し、 libjpeg のチェックを入れることで、nasm 無しでビルドできます(libjpeg-turbo-win の代わりに libjpeg を使います)。

  5. ビルド
      特に問題はないですが、リンクエラーが出る場合は、
      libjpeg-turbo-win のライブラリが作成済みかどうか確認しましょう。
  6. デバッグ
      特に問題はないです。「デバッグ開始」しましょう。

p.s. ソースコードは後日アップします(何も変えてませんが…)。

ソースコードは、ここ からダウンロードできます。

ライセンスは、オリジナルの UltraVNC に準じます。

無保証です。

UltraVNCの小技(5) — cad.exe の自作

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 に関して適切な設定でビルドした上に、出来たバイナリに対して署名をしなければなりません。

所謂「オレオレ証明書」を使ってお手軽に作る手順は、下記のようになります。

  1. ソリューションを用意し、上記のソースコードをビルドする準備を整えます。
  2. マニフェストの設定を行います。
    1. 「UACの実行レベル」を「requireAdministrator」に設定します。
    2. 「UACによるUI保護のバイパス」を「True」に設定します。
  3. ビルドし、EXEファイルを作成します。
  4. 「オレオレ証明書」ファイル(.cer)を作成します。Visual Studio コマンドプロンプトを起動し、下記を実行します。
     >makecert -r -pe -n "CN=Test Certificate - For SendSAS Use Only" -ss MY testcert.cer
  5. 「オレオレ証明書」ファイルを、開発用マシンにインストールします。
    >certmgr.exe -add testcert.cer -s -r localMachine root
    
  6. 実行ファイルに署名します
    >SignTool sign /v /s MY /n "Test Certificate - For SendSAS Use Only" /t http://timestamp.verisign.com/scripts/timestamp.dll "cad.exe"
    
  7. UltraVNC(サーバ)を実行するマシンの「信頼されたルート証明機関」証明書ストアにも、先ほど作成した「オレオレ証明書」をインストールします。
  8. 自作した cad.exe を、オリジナルのそれと入れ替えます。

「Ctrl-Alt-Del」を試しましょう。期待した動作になりましたでしょうか。 Continue reading

UltraVNCの小技(4) — cad.exe の導入

改造した UltraVNC を使っていて、一つ不便な事があります。
「Ctrl-Alt-Del」キーを押した時の動作はどうでしょうか(vncviewer上では「Send Ctrl+Alt+Del to host」ボタンを押した時の動作)。「Ctrl-alt-del require service, no permission」というダイアログが出て、受け付けてもらえないと思います。UltraVNC をサービスとして実行している時がそうです(正式版を使っている場合は、ログオンダイアログが表示されたり、画面が切り替わったりするでしょう)。
次は、この問題を解決します。

  1. 「cad.exe」(UltraVNC が利用する追加モジュール)を入手
      正式版のインストーラを使ってインストールする際に、「Download Vista addons files now」にチェックを入れればインストールされます。ライセンスは これ )。
      入手したら、UltraVNC の実行ファイルがあるフォルダに置きます。
  2. ファイルの配置場所の確認
      UltraVNC のファイル群が、Program Files 配下にあるか確認します。
      サービスから「あの」画面を呼ぶ為には、ファイル群は特権のあるフォルダ配下に置かなければなりません。
  3. グループポリシーの設定
      グループポリシーエディタを起動し、「コンピューターの構成」−「管理用テンプレート」−「Windows コンポーネント」−「Windows ログオンのオプション」を開きます。
      Vista/7 では、「ソフトウェアの Secure Attention Sequence を無効または有効にする」という項目があります。
      「状態」を「有効」に、「オプション」を「サービスとコンピューターの簡単操作アプリケーション」に設定します。

もう一度、「Ctrl-Alt-Del」キーを試しましょう。期待した動作になったのではないでしょうか。

Continue reading

UltraVNCの小技(3) — VNC Serverのビルド(1.0.8.2)

ここまで触れてませんでしたが、UltraVNC(のサーバ)をソースコードからビルドしてみます。

私が幾つかの点で躓いたので、そのメモです。
以下は、Windows 7(32bit版) 上で、VisualStudio 2008 の環境でビルドしています。

  1. ソースコードの取得
      UltraVNCのサイトからダウンロードします。
      一つ前の安定版である 1.0.8.2 を取得します。
      私は、最新バージョンの 1.0.9.5 は上手くビルドすることが出来ませんでした(必要なファイルが幾つか無いようです)。
      (バージョンの 1.0.9.5 のビルドは こちら を参照)

      http://www.uvnc.com/download/1082/
  2. ソリューションを開く
      ソースコードを解凍したら、VisualStudioより、winvnc¥winvnc.sln を開きます。
      いきなり、一部読み込めないプロジェクトがある旨のエラーが出ますが、無くても何とかなります。ソリューションを開いた後で削除してしまいましょう。

      また、デバッグに備えて、winvnc をスタートアッププロジェクトに指定しておきます。

  3. ビルド
      ソリューションのビルドを実行します。

      「ファイルが使用中で書き込めない」旨のエラーが発生した場合は、めげずに再度ビルドを実行します。
      何度かビルドを実行すれば、実行ファイル等が生成されるでしょう(競合の理由は謎です…)。

  4. デバッグ(の前に幾つか設定)
      ビルドが通せるようになっても、更に UAC 関連の設定が必要です(設定してないと「開始できません。アプリケーション構成が正しくないため、このアプリケーションの開始に失敗しました」エラーが出ます)。
      winvnc のプロパティページから「リンカ」−「マニフェスト ファイル」の設定を開きます。
      「UACの実行レベル」が「asInvoker」になっているので「requireAdministrator」に変更します。
      「winvnc.exe」の manifest ファイルと requestedExecutionLevel が一致しない旨の警告が出る場合は、これも「requireAdministrator」に変更します。

      ちなみに、私の環境では、「winvnc.exe.x64.manifest」が使われたりして、アーキテクチャが「AMD64」になってて更に怒られるので、ここらも「X86」に変更しました(プラットフォームは 「Win32」 になっているのに何故?)。尚、可能であれば、winvncリソース中の名前を「winvnc.exe.x86.manifest」に変更した上で、修正した方がよいでしょう。

      再度ビルドしたら、VisualStudio 上でデバッグできるようになっています。「デバッグ開始」しましょう。

    p.s. VNCViewer は、ビルドに関して引っ掛かる部分はありません。サクッとビルドできます。

UltraVNCの小技(2) — 簡易インストーラの作成

改造したUltraVNC(サーバ)ですが、当然ながらインストールしないと話になりません。

という訳で、至極簡単なインストーラをバッチファイル(!)で作成してみました。

やることは、3つだけ。

  1. 必要なファイルのコピー
  2. Windows ファイアウォールの設定
  3. UltraVNCサービスの設定(登録と起動)

echo off
REM UltraVNC installer Modoki ver. 0.02

SET TARGETFOLDER=%ProgramFiles%\UltraVNC
SET EXEFILE=winvnc_32.exe
SET INIFILE=ultravnc.ini
SET DLLFILES=authadmin.dll authSSP.dll ldapauth.dll ldapauth9x.dll ldapauthnt4.dll logging.dll logmessages.dll vnchooks.dll workgrpdomnt4.dll
SET FILES=%EXEFILE% %INIFILE% %DLLFILES%
SET WINVNCSERVICE=uvnc_service
SET WINVNCPORT=5900
SET ALLOWIP=192.168.0.0/24

SET PWD=%~d0%~p0

REM *** ターゲットフォルダ内にファイルをコピー ***
mkdir "%TARGETFOLDER%"
for %%f in ( %FILES% ) do (
copy "%PWD%%%f" "%TARGETFOLDER%¥%%f"
if errorlevel 1 goto :ERROR
)

REM *** Windowsファイアウォールの設定 ***
for %%i in ( %ALLOWIP% ) do (
netsh advfirewall firewall add rule name=%WINVNCSERVICE% dir=in protocol=tcp remoteip=%%i localport=%WINVNCPORT% action=allow
)

REM *** UltraVNCサービスの登録と起動 ***
sc create %WINVNCSERVICE% binpath= "%TARGETFOLDER%\%EXEFILE% -service" start= auto
if errorlevel 1 goto :ERROR
sc start %WINVNCSERVICE%
if errorlevel 1 goto :ERROR

:SUCCESS
echo Success.
pause
goto :END

:ERROR
echo Error!
pause
goto :END

:END

「管理者として実行」してください(Vista/7等)。

ultravnc.ini ファイルは、uvnc_settings.exe を使って作成しましょう。

アンインストールは手作業で、というか、インストーラを元にして直ぐアンインストールバッチが書けますね。

UltraVNCの小技(1) — メニューの不要な項目を隠す

とても高機能で便利なUltraVNCですが、自分以外の人に使って貰おうとすると「この機能は触らせたくないな〜」と思う事も多々あります(サーバ起動後にタスクトレイのメニューからアクセスできる「Close VNC Connections」などの項目は、その筆頭)。という訳で、触らせたくなければメニューから隠してしまえ、というコロンブスの卵的なアイデア。

  1. UltraVNCのソースコードを取得し、解凍したら、VisualStudioで winvnc¥winvnc.sln を開きます。
  2. リソースビューから「IDR_TRAYMENU」を開けば、目的のメニューを編集することができます(下図を参照)。
  3. メニュー中の不要な項目を削除し、ビルドすればOK(ビルドに関しては こちら を参照)。

これで、誤操作を未然に防ぐことができます。

ソースコードは、ここ からダウンロードできます。

ライセンスは、オリジナルの UltraVNC に準じます。

無保証です。