Windows Metafile

**Windows Metafile** ( **WMF** ) adalah format file gambar yang awalnya dirancang untuk Microsoft Windows pada tahun 1990-an. Format Windows Metafile asli tidak bergantung pada perangkat (meskipun bisa dibuat lebih dengan header penempatan) dan mungkin berisi grafik vektor dan komponen bitmap . Itu bertindak dengan cara yang mirip dengan file SVG . File WMF kemudian digantikan oleh **Enhanced Metafiles** (file EMF) yang menyediakan kemandirian perangkat. File EMF kemudian ditingkatkan sendiri melalui file **EMF +** .

Pada dasarnya, metafile menyimpan daftar record yang terdiri dari perintah gambar, definisi properti, dan objek grafik untuk menampilkan gambar di layar. Perintah menggambar yang digunakan terkait erat dengan perintah API Antarmuka Perangkat Grafik (GDI) yang digunakan untuk menggambar di Microsoft Windows.

Ada tiga jenis utama metafile - WMF adalah format 16-bit yang diperkenalkan di Windows 3.0 . Ini adalah format vektor asli untuk aplikasi Microsoft Office seperti Word , PowerPoint , dan Publisher . Mulai 2017 revisi 14 dari spesifikasi Windows Metafile Format tersedia untuk dibaca online atau diunduh sebagai PDF.  File EMF, yang menggantikan file WMF, bekerja dengan prinsip yang sama hanya saja itu adalah format file 32-bit yang juga memungkinkan penyematan data pribadi dalam catatan "komentar".  EMF + adalah ekstensi untuk file EMF dan disematkan dalam catatan komentar ini, memungkinkan gambar dan teks menggunakan perintah, objek, dan properti yang mirip dengan Windows GDI + .

## Sejarah
Format file WMF 16 bit asli sepenuhnya ditentukan dalam volume 4 dokumentasi SDK Windows 3.1 1992  (setidaknya jika digabungkan dengan deskripsi fungsi dan struktur individu di volume lain), tetapi spesifikasi itu tidak jelas tentang a sedikit detail. Manual ini diterbitkan sebagai buku cetak yang tersedia di toko buku tanpa klik melalui EULA atau batasan lisensi tidak biasa lainnya (hanya peringatan umum bahwa jika dibeli sebagai bagian dari bundel perangkat lunak, perangkat lunak akan tunduk pada salah satunya).

Seiring waktu keberadaan spesifikasi bersejarah itu sebagian besar dilupakan dan beberapa implementasi alternatif menggunakan rekayasa terbalik untuk mengetahui format file dari file WMF yang ada, yang sulit dan rawan kesalahan.  Pada bulan September 2006, Microsoft kembali menerbitkan spesifikasi format file WMF dalam bentuk yang lebih lengkap  dalam konteks Microsoft Open Specification Promise , berjanji untuk tidak menegaskan hak paten kepada pelaksana format file.

Microsoft kemudian menghentikan file WMF dan mendukung file EMF 32-bit karena file WMF memiliki masalah nyata dengan kemandirian perangkat, meskipun menggunakan header file "placeable" yang memberikan kemandirian perangkat dasar. Microsoft menemukan bahwa pengembang yang menggunakan format tersebut adalah "[embedding] aplikasi, lokasi, atau komentar skala di metafile ... Yang lain menambahkan header ke metafile yang menyediakan berbagai informasi khusus aplikasi", menyebabkan masalah kompatibilitas utama.  Jadi, pada tahun 1992 dengan Windows NT 3.1 , Microsoft memperkenalkan format Enhanced Metafile (EMF)  - format yang didasarkan pada Win32 API dan yang mereka gunakan untuk kemandirian perangkat bawaan.   - ini juga dikenal sebagai metafile NT.  Dengan dirilisnya Windows XP dan GDI +, kumpulan catatan harus ditingkatkan secara signifikan sehingga Microsoft merilis EMF + sebagai perpanjangan dari format file EMF yang ada.

## Struktur metafile

File WMF, EMF dan EMF + semuanya terdiri dari serangkaian rekaman yang diputar ulang untuk menghasilkan keluaran grafis. Beberapa catatan menentukan objek yang dapat menentukan objek grafis yang digunakan untuk menentukan bagaimana grafik harus digambar (misalnya pena menentukan warna dan lebar garis). Masing-masing objek ini disimpan dalam metafile dan ditempatkan ke dalam tabel objek, yang melacak penggunaan objek grafik saat memproses metafile. Tabel objek adalah larik indeks asosiatif ke struktur objek grafis yang ditentukan dalam metafile.

File WMF dan EMF menangani pemrosesan objek secara berbeda dengan catatan EMF + dalam file EMF. Saat file WMF dan EMF sedang diproses, catatan dibaca ke dalam tabel objek setelah objek ditentukan. Jika sebuah objek dihapus maka objek tersebut dilepaskan dari tabel dan pengenal dapat digunakan kembali. Khususnya sebuah objek tidak akan digunakan sampai secara khusus dipilih selama playback rekaman.   Ini berbeda untuk file EMF +, yang juga menggunakan array asosiatif melalui peta hash yang merekam objek bersama dengan pengenal objek. Namun, tidak seperti file WMF dan EMF yang dapat menghapus objek, saat objek baru dibuat yang memiliki indeks yang sama dengan objek yang sudah ada, entri dalam tabel diganti dengan objek baru. File EMF juga tidak perlu secara khusus memilih objek sebelum digunakan.

### WMF

File WMF awalnya tidak dirancang untuk menjadi perangkat independen, artinya Anda tidak dapat memutar file pada perangkat output yang berbeda dari perangkat asli tempat file direkam. Solusi parsial untuk masalah ini ditemukan oleh Aldus Corporation , yang menambahkan header "placeable" tambahan, yang disebut "header APM",  yang menambahkan pembatas pembatas, versi metafile, ukuran metafile, jumlah objek di metafile dan ukuran rekor tunggal terbesar di metafile.   Ini kemudian dimasukkan ke dalam format WMF oleh Microsoft, dimulai pada Windows 2000.

File WMF disusun oleh serangkaian record, dimulai dengan sejumlah record kontrol: record header,   record placeable opsional yang disebutkan sebelumnya,  dan diakhiri dengan akhir record file .

Dienkapsulasi oleh catatan kontrol adalah catatan yang menyusun gambar itu sendiri. Rekaman ini bekerja dalam apa yang dikenal sebagai *konteks perangkat pemutaran* , yang merupakan kumpulan properti dan objek yang membentuk lingkungan grafis perangkat saat metafile sedang "diputar" ke perangkat keluaran ini.

Rekaman selain catatan kontrol dapat dikelompokkan ke dalam catatan bitmap, catatan gambar, catatan objek, catatan status dan catatan escape.

#### Catatan bitmap
Catatan bitmap mengelola dan mengeluarkan gambar bitmap .

#### Catatan gambar
Catatan gambar menghasilkan keluaran grafik.

#### Catatan objek
Rekaman objek membuat dan mengelola objek grafik. Dalam file WMF ada dua kategori objek - objek grafik dan objek struktur. Objek struktur tidak dibuat atau dihapus secara eksplisit dalam WMF, melainkan struktur yang kompleks. Misalnya, BitmapCoreHeader berisi informasi tentang dimensi dan format warna dari bitmap yang tidak bergantung perangkat,  yang merupakan bagian dari objek DeviceIndependentBitmap.  Sebuah objek grafis, bagaimanapun, menentukan parameter untuk output grafis dan selama pemutaran dari WMF itu mengatur konteks perangkat pemutaran.

Objek grafik dapat berupa *kuas* (menentukan gaya, warna, dan pola kuas yang menentukan cara melukis area grafik), *font* (menentukan properti yang memengaruhi cara teks ditampilkan), *palet* (menentukan warna sebagai nilai yang tidak bergantung perangkat, ditentukan oleh aplikasi), *pena* (menentukan atribut grafis dari sebuah garis), dan *daerah* (yang menentukan segmen garis dan kurva yang menentukan bentuk).

#### Catatan negara
Catatan negara mengelola properti grafis dari konteks perangkat pemutaran.

#### Catatan melarikan diri

Rekaman melarikan diri adalah cara untuk memperluas fungsionalitas metafile melalui catatan yang tidak didefinisikan sebagai tipe catatan WMF. Setiap rekaman pelolosan berisi fungsi rekam, fungsi pelolosan, dan kemungkinan data pelolosan.

Rekaman pelolosan berikut membuat file WMF

Ada kerentanan utama yang ditemukan dalam catatan pelarian di sekitar catatan pelarian Abort, yang menyimpan kode prosedur pembatalan di dalam catatan itu sendiri. Sistem Windows yang terpengaruh ini (lihat CVE - 2005-4560 ) dan proyek Wine (lihat CVE - 2006-0106 ). Menurut Secunia , "Kerentanan ini disebabkan karena kesalahan dalam penanganan file Windows Metafile ('.wmf') yang berisi catatan 'Escape' SETABORTPROC yang dibuat secara khusus. Catatan semacam itu memungkinkan fungsi yang ditentukan pengguna sewenang-wenang dijalankan saat rendering file WMF gagal. "  Menurut dokumentasi SDK Windows 3.1, pelarian SETABORTPROC sudah usang dan digantikan oleh fungsi dengan nama yang sama di Windows 3.1, jauh sebelum kerentanan WMF ditemukan.  Namun kode melarikan diri usang dipertahankan untuk kompatibilitas dengan program 16 bit yang ditulis untuk (atau setidaknya kompatibel dengan) Windows 3.0. Perubahan ini terjadi kira-kira pada waktu yang sama ketika Microsoft membuat implementasi ulang GDI 32 bit untuk Windows NT, dan kemungkinan kerentanan terjadi selama upaya ini.

Setelah Steve Gibson dari Gibson Research Corporation menuduh Microsoft sengaja menerapkan pintu belakang ke dalam kode mereka,   Mark Russinovich memberikan bantahan, dan menyatakan bahwa:

## Pranala luar

* Spesifikasi Format Metafile Windows dari Microsoft
* Metafiles - Aplikasi Windows
* Ringkasan Format File di fileformat.info
* FAQ Windows Metafile