Windows Metafile

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索
Windows Metafile
拡張子 .wmf,.wmz
MIME Type image/wmf
開発者 マイクロソフト
初版 1990年(26年前) (1990
最新版 12 / 2016年7月14日(4か月前) (2016-07-14[1]
種別 画像ファイルフォーマット
包含物 Bitmaps among others
テンプレートを表示


Enhanced Metafile Format
拡張子 .emf, .emz
MIME Type image/emf
開発者 マイクロソフト
初版 1993年(23年前) (1993
最新版 12 / 2016年7月14日(4か月前) (2016-07-14[2]
種別 画像ファイルフォーマット
包含物 Bitmaps among others
テンプレートを表示

Windows MetafileWMF、ウィンドウズ メタファイル)はMicrosoft Windows上の画像ファイルフォーマットの1つであり、1990年代初期に設計された。しかし、World Wide Webの隆盛と共によく使われるようになっていったGIFJPEGに比較するとよく使われるとは言い難い。ベクトル画像フォーマットであり、ビットマップ画像を内部に含むことが可能となっている。基本的にWMFファイルはWindowsのグラフィック層であるGDIが実行すべき関数呼び出しのリストであって、それによって画像が再生される。GDI関数の中には例外処理のためにコールバック関数ポインタを引数にとるものがあるため、WMFファイルには実行可能コードが含まれることがある。その設計手法はUNIXにおけるPostScriptに似ている。

Windows 3.0で最初に導入されたWMFは16ビット形式であった。後に追加された32ビット版ではコマンドが追加されており、Enhanced Metafile (EMF) と呼ばれる。EMFはプリンタドライバのグラフィックス言語としても使われている。

2016年現在、WMFはリビジョン13.1 の仕様書がオンラインで参照およびダウンロードできる。[1]

また2016年現在、EMFはリビジョン12.0 の仕様書がオンラインで参照およびダウンロードできる。[2]

仕様と特許[編集]

オリジナルの16bit WMFファイル形式は1992年のWindows 3.1 SDKの[3]4巻に定義された。しかし仕様の一部は詳細があいまいな部分があった。これらのマニュアルは書籍として買い求めることができる。EULAや特別なライセンスの制限などは課されていない。(ソフトウエアの一部であり....という一般的な文言のみがあった)

時が経つにつれてこの歴史的な仕様書の存在は忘れられ、WMFファイルに対するリバースエンジニアリングが行われるようになったが、これには困難が伴い、正確さも欠いていた。 2006年9月にMicrosoftは再度WMFファイル形式の仕様をMicrosoft Open Specification Promiseの一環として公開[4]し、これを実装する者に対して特許権を行使しないことを約束した。

派生物[編集]

1993年に32bit版のWin32/GDIによるEnhanced Metafile (EMF) が登場し、これには数点のコマンドの拡張が含まれた。EMFはプリンタドライバーとやりとりするグラフィック言語としても利用された。Microsoftは、WMFはほぼ使用されず、拡張フォーマット (EMF) で代替することを推奨している。 Windows XPの公開に合わせてEnhanced Metafile Format Plus Extensions (EMF+)フォーマットが登場した。これにはGDI+ APIコールのシリアライズ機能が WMF/EMF と同様の方法で追加されている。

他に圧縮された形式のCompressed Windows Metafile (WMZ) とCompressed Enhanced Windows Metafile (EMZ) も存在する。[5]

EMZはEMFファイル形式をgzip圧縮したものである[要出典]


SetAbortProcの脆弱性問題[編集]

2005年11月、"SetAbortProc" GDI関数に脆弱性が発見された。この関数は印刷のスプーリングをキャンセルしたときのエラー処理ハンドラを登録するもので、ユーザーの許可なしで実行できる任意のコードをWMFファイルに追加可能にしている。

マイクロソフトは公式のパッチ(MS06-001) を2006年1月5日にリリースし、詳細は "マイクロソフト セキュリティ アドバイザリ 912840 Graphics Rendering Engine の脆弱性によりコードが実行される可能性がある" (912919)[6]で見ることができる。 古いバージョンのWindowsについてはパッチを提供していない。

セキュリティ専門家の は、この脆弱性がマイクロソフトが故意にWMFに仕込んだバックドアであると主張した。しかし、他のセキュリティ専門家はこれに異を唱えており、バックドアと呼ぶにはマイクロソフトが実際にこの脆弱性を利用して秘密裏にコンピュータにアクセスしたことを実証しなければならないとしている[7]。マイクロソフトの従業員であるMark Russinovich は、Gibsonの分析はいくつかの誤解に基づいていると説明している。

代替実装[編集]

WMFフォーマットはWindowsのGDIで実行されることで画像を再生する。しかし、WMF形式のファイルにはその画像を構成するGDIのグラフィックプリミティブの定義も含まれているので、他のライブラリを使ってWMFのバイナリファイルを描画させたり、他の画像フォーマットに変換できる。

一例として、BatikライブラリはWMFファイルを描画したり、SVGに変換したりできる。FreeHEP JavaライブラリのVector Graphicsパッケージでは、Java 2Dで描画されたものをEMFファイルとして保存できる。InkscapeXnViewもWMFとEMF形式でのエクスポートができる。

脚注[編集]

[ヘルプ]
  1. ^ a b MSDN Metafile Format”. 2016年11月24日閲覧。
  2. ^ a b MSDN Enhanced Metafile Format”. 2016年11月24日閲覧。
  3. ^ Microsoft Windows 3.1 Programmers Reference, Volume 4 Resources, Microsoft Press 1992, ISBN 1-55615-494-1, chapter 3 pp. 21-45
  4. ^ MS-WMF: Windows Metafile Format Specification”. 2008年6月1日閲覧。
  5. ^ Officeサポート 挿入および保存できるグラフィックス ファイルの種類
  6. ^ https://technet.microsoft.com/ja-jp/library/security/912840.aspx マイクロソフト セキュリティ アドバイザリ 912840 Graphics Rendering Engine の脆弱性によりコードが実行される可能性がある
  7. ^ 'Windows backdoor' theory causes kerfuffle CNET News - News Blogs

関連項目[編集]

外部リンク[編集]

チュートリアルなど[編集]

ライブラリ[編集]

  • Batik Java library: WMF to SVG transcoder package WMFメタファイルからSVGへの変換が可能
  • FreeHEP Java library: Vector graphics package EMFメタファイルからSVGへの変換およびJava2DからEMFへの変換をサポート
  • libWMF WMFメタファイルを読み込むライブラリ。表示やSVGへの変換が可能
  • libEMF POSIXシステム上でのベクター画像ファイルを生成するための描画ツールキットを提供するC/C++ライブラリ
  • wmf2svg WMFメタファイルからSVGへの変換を実装したJava用クラス