Windows Meta Dosyası - Windows Metafile

Windows Meta Dosyası ( WMF ), orijinal olarak 1990'larda Microsoft Windows için tasarlanmış bir görüntü dosyası biçimidir . Orijinal Windows Meta Dosyası biçimi aygıttan bağımsız (yerleştirme başlıklarıyla daha çok yapılmış olabilir gerçi) ve her iki içerebilir değildi vektör grafikleri ve bitmap bileşenleri. SVG dosyalarına benzer şekilde davranır . WMF dosyalarının yerini daha sonra cihaz bağımsızlığı sağlayan Gelişmiş Meta Dosyaları (EMF dosyaları) aldı. EMF dosyaları daha sonra EMF+ dosyaları aracılığıyla geliştirildi .

Esasen, bir meta dosyası, bir görüntüyü ekranda görüntülemek için çizim komutlarından, özellik tanımlarından ve grafik nesnelerinden oluşan bir kayıt listesi depolar. Kullanılan çizim komutları , Microsoft Windows'ta çizim için kullanılan Grafik Aygıt Arayüzü (GDI) API'sinin komutlarıyla yakından ilişkilidir .

Üç ana meta dosyası türü vardır - WMF, Windows 3.0'da tanıtılan 16 bitlik bir biçimdir . Word , PowerPoint ve Publisher gibi Microsoft Office uygulamaları için yerel vektör biçimidir . Windows Meta Dosyası Biçimi belirtiminin 2017 revizyonu 14 itibariyle, çevrimiçi okuma veya PDF olarak indirme için mevcuttur. WMF dosyalarının yerini alan EMF dosyaları aynı prensipte çalışır, sadece 32 bitlik bir dosya formatıdır ve aynı zamanda "yorum" kayıtlarına özel verilerin gömülmesine de izin verir. EMF+, EMF dosyalarının bir uzantısıdır ve bu yorum kayıtlarına gömülü olup, Windows GDI+'ya benzer komutlar, nesneler ve özellikler kullanarak görüntülere ve metinlere izin verir .

Tarih

Orijinal 16 bit WMF dosya biçimi, 1992 Windows 3.1 SDK belgelerinin 4. cildinde tam olarak belirtilmişti (en azından diğer birimlerdeki bireysel işlevlerin ve yapıların açıklamalarıyla birleştirilirse), ancak bu belirtim birkaç ayrıntı konusunda belirsizdi. Bu kılavuzlar, EULA veya diğer olağandışı lisans kısıtlamaları (sadece bir yazılım paketinin parçası olarak satın alınırsa yazılımın bir lisansa tabi olacağına dair genel bir uyarı) üzerinden tıklama yapılmadan kitapçılarda bulunan basılı kitaplar olarak yayınlandı .

Zamanla, bu tarihi spesifikasyonun varlığı büyük ölçüde unutuldu ve bazı alternatif uygulamalar, dosya biçimini mevcut WMF dosyalarından bulmak için tersine mühendisliğe başvurdu, bu zor ve hataya açıktı. Eylül 2006'da Microsoft, WMF dosya formatı spesifikasyonunu, Microsoft Açık Spesifikasyon Sözü bağlamında daha eksiksiz bir biçimde yayınladı ve dosya formatı uygulayıcılarına patent haklarını iddia etmeyeceğine söz verdi.

WMF dosyaları, temel cihaz bağımsızlığı sağlayan "yerleştirilebilir" bir dosya başlığının kullanılmasına rağmen, WMF dosyalarının cihaz bağımsızlığıyla ilgili gerçek sorunları olduğundan, daha sonra WMF dosyalarını 32-bit EMF dosyaları lehine kullanımdan kaldırdı. Microsoft, biçimi kullanan geliştiricilerin "meta dosyalarına [gömme] uygulama, konum veya yorum ölçekleme... Diğerleri meta dosyasına çeşitli uygulamaya özel bilgiler sağlayan başlıklar ekleyerek" büyük uyumluluk sorunlarına neden olduğunu tespit etti. Böylece, 1992'de Windows NT 3.1 ile Microsoft, Win32 API'sini temel alan ve aygıt bağımsızlığı içinde yerleşik olarak bulunan bir biçim olan Gelişmiş Meta Dosyası biçimini (EMF) tanıttı . — bunlar NT meta dosyaları olarak da biliniyordu. Windows XP ve GDI+'nın piyasaya sürülmesiyle, kayıt setinin önemli ölçüde artırılması gerekiyordu ve bu nedenle Microsoft, EMF+'yı mevcut EMF dosya biçiminin bir uzantısı olarak yayınladı.

Meta dosyası yapısı

Windows Meta Dosyalarının Karşılaştırılması – WMF dosyalarının EMF+ kayıtları içerebileceğini unutmayın

WMF, EMF ve EMF+ dosyalarının tümü, grafik çıktı üretmek için oynatılan bir dizi kayıttan oluşur. Bazı kayıtlar, grafiklerin nasıl çizileceğini belirlemek için kullanılan grafik nesneleri belirtebilen nesneleri tanımlar (örneğin, kalemler çizgilerin rengini ve genişliğini belirtir). Bu nesnelerin her biri meta dosyalarda depolanır ve meta dosyası işlenirken grafik nesnelerinin kullanımını izleyen bir nesne tablosuna yerleştirilir. Nesne tablosu, meta dosyası içinde tanımlanan grafiksel nesne yapılarıyla ilişkili bir dizin dizisidir .

WMF ve EMF dosyaları, nesne işlemeyi EMF dosyalarındaki EMF+ kayıtlarından farklı şekilde işler. Bir WMF ve EMF dosyası işlenirken, bir nesne tanımlandıktan sonra kayıtlar bir nesne tablosuna okunur. Bir nesne silinirse, nesne tablodan serbest bırakılır ve tanımlayıcı yeniden kullanılabilir. Özellikle kayıt oynatma sırasında özel olarak seçilene kadar bir nesne kullanılmayacaktır. Bu, aynı zamanda nesneyi bir nesne tanımlayıcısıyla birlikte kaydeden bir karma harita aracılığıyla ilişkisel bir dizi kullanan EMF+ dosyaları için farklıdır . Ancak, bir nesneyi silebilen WMF ve EMF dosyalarından farklı olarak, mevcut bir nesneyle aynı dizine sahip yeni bir nesne oluşturulduğunda, tablodaki giriş yeni nesne ile değiştirilir. Bir EMF dosyasının ayrıca kullanılmadan önce bir nesneyi özel olarak seçmesi gerekmez.

WMF

Orijinal ve yerleştirilebilir Windows meta dosyalarının yapıları

WMF dosyaları orijinal olarak aygıttan bağımsız olacak şekilde tasarlanmamıştır; bu, dosyayı, dosyanın kaydedildiği orijinal aygıttan farklı çıktı aygıtlarında oynatamayacağınız anlamına gelir. Bu soruna kısmi bir çözüm , sınırlayıcı bir doğrultucu, bir meta dosya sürümü, meta dosya boyutu, meta dosyadaki nesne sayısı ve boyut ekleyen "APM başlığı" adı verilen ek bir "yerleştirilebilir" başlık ekleyen Aldus Corporation tarafından icat edildi. meta dosyasındaki en büyük tek kaydın Bu daha sonra Windows 2000'den başlayarak Microsoft tarafından WMF formatına dahil edildi.

WMF dosyaları, bir dizi kontrol kaydıyla başlayan bir dizi kayıtla yapılandırılır: başlık kaydı, yukarıda belirtilen isteğe bağlı yerleştirilebilir kayıt ve dosya sonu kaydıyla biter .

Kontrol kayıtları tarafından kapsüllenenler, görüntünün kendisini oluşturan kayıtlardır. Bu kayıtlar , meta dosyası bu çıktı aygıtında "oynatılırken" bir aygıtın grafik ortamını oluşturan özelliklerin ve nesnelerin koleksiyonu olan oynatma aygıtı bağlamı olarak bilinen şey içinde çalışır .

Kontrol kayıtları dışındaki kayıtlar büyük ölçüde bitmap kayıtları, çizim kayıtları, nesne kayıtları, durum kayıtları ve kaçış kayıtları olarak gruplandırılabilir.

Bit eşlem kayıtları

Bitmap kayıtları, bitmap görüntülerini yönetir ve çıkarır .

isim Açıklama
META_BITBLT Bit blok aktarımının nasıl yapılacağını belirtir . Bu kayıtlar, kaynak veya bölge olarak kullanılacak bir bit eşlem belirtebilir.
META_DIBBITBLT Cihazdan bağımsız bir bitmap görüntüsünün bit blok aktarımının nasıl yapılacağını belirtir . Bu kayıtlar, kaynak veya bölge olarak kullanılacak bir bit eşlem belirtebilir.
META_DIBSTRETCHBITBLT Cihazdan bağımsız bir bitmap görüntüsünün bit blok aktarımının nasıl yapılacağını belirtir, ancak görüntünün genişletilmesine veya daraltılmasına izin verir. Bu kayıtlar, kaynak veya bölge olarak kullanılacak bir bit eşlem belirtebilir.
META_SETDIBTODEV Aygıttan bağımsız bir bitmap görüntüsünde bir piksel bloğu ayarlamak için rengi belirtir. Bu kayıtlar, kaynak veya bölge olarak kullanılacak bir bit eşlem belirtebilir.
META_STRETCHBLT Bit blok aktarımının nasıl yapılacağını belirtir, ancak görüntünün genişletilmesine veya daraltılmasına izin verir.
META_STRETCHDIB Cihazdan bağımsız bir bitmap görüntüsünün bit blok aktarımının nasıl yapılacağını belirtir, ancak görüntünün genişletilmesine veya daraltılmasına izin verir. Bu kayıtlar, kaynak veya bölge olarak kullanılacak bir bit eşlem belirtebilir.

Çizim kayıtları

Çizim kayıtları grafik çıktısı üretir.

isim Açıklama
META_ARC Eliptik bir yay çizer .
META_CHORD Bir akor çizer .
META_ELLIPSE Eliptik bir yay çizer .
META_EXTFLOODFILL Bir alanı fırçayla doldurur.
META_EXTTEXTOUT Kayıttan yürütme aygıtı bağlamının yazı tipi, arka plan rengi ve metin rengiyle metin çizin.
META_FILLREGION Bir bölgeyi belirtilen bir fırçayla doldurur.
META_FLOODFILL Bir alanı fırçayla doldurur.
META_FRAMEREGION Sayfanın bir bölgesinin çevresine fırçayla kenarlık çizer.
META_INVERTREGION Grafiğin bir bölgesini ters çevrilmiş renklerle boyar.
META_LINETO Oynatma aygıtı bağlamında tanımlanan çizim konumundan belirtilen bir noktaya yarı açık bir çizgi çizer .
META_PAINTREGION Oynatma aygıtı bağlamında belirtilen geçerli fırçayla bir bölgeyi boyayın.
META_PATBLT Oynatma aygıtı bağlamında belirtilen geçerli fırçayla bir bölgeyi boyayın ve ardından bir tarama işlemi kullanarak fırça rengini ve yüzey renklerini birleştirin .
META_PIE Bir elips ve iki radyal kesişimiyle sınırlanan pasta şeklinde bir kama çizin - çizgi, oynatma cihazı bağlamı aracılığıyla kalem seti aracılığıyla belirlenir ve pasta şekliyle sınırlanan alan, oynatma cihazının geçerli fırçası tarafından doldurulur bağlam.
META_POLYLINE Belirtilen bir dizideki noktaları birleştirerek bir dizi çizgi parçası çizer.
META_POLYGON Düz çizgilerle birbirine bağlanan iki veya daha fazla köşeden oluşan bir çokgen boyar . Çokgen, kalem kullanılarak ana hatları çizilir ve oynatma aygıtı bağlamında tanımlanan fırça ve çokgen doldurma modu kullanılarak doldurulur.
META_POLYPOLYGON Üst üste gelebilecek bir dizi kapalı çokgen boyar. Her çokgen kalem kullanılarak ana hatları çizilir ve oynatma aygıtı bağlamında tanımlanan fırça ve çokgen doldurma modu kullanılarak doldurulur.
META_RECTANGLE Kalem kullanılarak ana hatları çizilen ve fırça kullanılarak doldurulan ve oynatma aygıtı bağlamında tanımlanan fırça kullanılarak doldurulan bir dikdörtgen çizer.
META_ROUNDRECT Köşeleri yuvarlatılmış bir dikdörtgen çizer. Dikdörtgen kalem kullanılarak ana hatları çizilir ve fırça kullanılarak doldurulur ve oynatma aygıtı bağlamında tanımlanan fırça kullanılarak doldurulur.
META_SETPIXEL Belirtilen koordinatlardaki pikseli belirtilen renge ayarlar.
META_TEXTOUT Kayıttan yürütme aygıtı bağlamında tanımlanan yazı tipini, arka plan rengini ve metin rengini kullanarak belirtilen konumda bir karakter dizisi çıktısı verir.

Nesne kayıtları

Nesne kayıtları, grafik nesneleri oluşturur ve yönetir. WMF dosyalarında iki geniş nesne kategorisi vardır - grafik nesneleri ve yapı nesneleri. Yapı nesneleri bir WMF'de açıkça oluşturulmaz veya silinmez, karmaşık yapılar yerine bunlardır. Örneğin, BitmapCoreHeader, kendisi DeviceIn IndependentBitmap nesnesinin bir parçası olan, aygıttan bağımsız bir bitmap'in boyutları ve renk biçimi hakkında bilgi içerir. Bununla birlikte, bir grafik nesnesi, grafik çıktısı için parametreleri belirtir ve WMF'nin yeniden yürütülmesi sırasında, oynatma aygıtı bağlamını ayarlar.

Grafik nesneleri fırçalar (bir grafiğin bir alanının nasıl boyanacağını tanımlayan bir fırçanın stilini, rengini ve desenini tanımlar), yazı tipleri (metnin nasıl görüntüleneceğini etkileyen özellikleri tanımlar), paletler (renkleri aygıttan bağımsız değerler olarak belirtir, bir uygulama tarafından tanımlanır), kalemler (bir çizginin grafik özelliklerini belirtir) ve bölgeler (bir şekli tanımlayan çizgi ve eğri parçalarını belirtir).

isim Açıklama
META_CREATEBRUSHINDIRECT LogBrush (mantıksal fırça) nesnesinden bir fırça nesnesi oluşturur.
META_CREATEFONTINDIRECT Bir yazı tipi nesnesinden bir fırça nesnesi oluşturur.
META_CREATEPALETTE Bir palet nesnesi oluşturur.
META_CREATEPTERNBRUSH LogBrush (mantıksal fırça) nesnesinden bir fırça nesnesi oluşturur.
META_CREATEPENINDIRECT Bir kalem nesnesi oluşturur.
META_CREATEREGION Bir bölge nesnesi oluşturur.
META_DELETEOBJECT Bir nesneyi silin.
META_CREATEBRUSHINDIRECT LogBrush (mantıksal fırça) nesnesinden bir fırça nesnesi oluşturur.
META_DIBCREATEPATTERNBRUSH Aygıttan bağımsız bir bit eşlemden bir fırça nesnesi oluşturur.
META_SELECTCLIPREGION Geçerli kırpma bölgesi olacak bölge nesnesini belirtir .
META_SELECTOBJECT META_SELECTPALETTE ile ayarlanması gereken palet nesneleri dışındaki tüm grafik nesneleri üzerinde çalışan oynatma aygıtı bağlamı için geçerli nesne olacak nesneyi seçer.
META_SELECTPLAETTE Kayıttan yürütme aygıtı bağlamı için mantıksal paleti seçer.

Devlet kayıtları

Durum kayıtları, kayıttan yürütme aygıtı bağlamının grafik özelliklerini yönetir.

isim Açıklama
META_ANIMATEPALETTE Belirtilen Palet Nesnesi ile oynatma aygıtı bağlamında tanımlanan mantıksal palet içindeki girişleri yeniden tanımlar.
META_EXCLUDECLIPRECT Kayıttan yürütme aygıtı bağlamında tanımlanan kırpma bölgesini, mevcut kırpma bölgesi eksi belirtilen bir dikdörtgene ayarlar.
META_INTERSECTCLIPRECT Oynatma aygıtı bağlamında tanımlanan kırpma bölgesini, mevcut kırpma bölgesi ile belirtilen bir dikdörtgenin kesişimine ayarlar.
META_MOVETO Oynatma aygıtı bağlamındaki çıkış konumunu belirtilen bir noktaya ayarlar.
META_OFFSETCLIPRGN Oynatma aygıtı bağlamında tanımlanan kırpma bölgesini belirtilen ofsetlerle hareket ettirir.
META_OFFSETVIEWPORTORG Belirtilen yatay ve dikey ofsetlerle oynatma aygıtı bağlamında görünüm alanı orijinini hareket ettirir.
META_OFFSETWINDOWORG Çıktı penceresinin başlangıç ​​noktasını oynatma aygıtı bağlamında belirtilen yatay ve dikey ofsetlerle hareket ettirir.
META_REALIZEPALETTE Kayıttan yürütme aygıtı bağlamında tanımlanan mantıksal paletten girişleri sistem paletine eşler.
META_RESIZEPALETTE Kayıttan yürütme aygıtı bağlamında tanımlanan mantıksal paletin boyutunu yeniden tanımlar.
META_RESTOREDC Kayıttan yürütme aygıtı bağlamını önceden kaydedilmiş bir aygıt bağlamından geri yükler.
META_SAVEDC Daha sonra almak için oynatma cihazı bağlamını kaydeder.
META_SCALEVIEWPORTEXT Belirtilen çarpanlar ve bölenler tarafından oluşturulan oranları kullanarak oynatma aygıtı bağlamında tanımlanan görünüm alanının yatay ve dikey uzantılarını ölçekler.
META_SCALEWINDOWEXT Belirtilen çarpanlar ve bölenler tarafından oluşturulan oranları kullanarak oynatma aygıtı bağlamında tanımlanan çıktı penceresinin yatay ve dikey uzantılarını ölçekler.
META_SETBKCOLOR Oynatma aygıtı bağlamındaki arka plan rengini belirli bir renge ayarlar.
META_SETBKMODE Oynatma cihazı bağlamında arka plan karıştırma modunu ayarlar.
META_SETLAYOUT Kayıttan yürütme aygıtı bağlamında düzen yönünü tanımlar.
META_SETMAPMODE Oynatma cihazı bağlamında eşleme modunu tanımlar.
META_SETMAPPERFLAGS Yazı tipi eşleyicisinin mantıksal yazı tiplerini fiziksel yazı tipleriyle eşlediğinde kullandığı algoritmayı tanımlar.
META_SETPALENTRIES Oynatma aygıtı bağlamında tanımlanan mantıksal palet içindeki bir dizi girişte RGB renk değerlerini tanımlar.
META_SETPOLYFILLMODE Çokgenleri dolduran grafik işlemleri için oynatma aygıtı bağlamında çokgen doldurma modunu tanımlar.
META_SETRELABS Kullanılmamış kayıt.
META_SETROP2 Kayıttan yürütme aygıtı bağlamında ön plan tarama işlemi karıştırma modunu tanımlar.
META_SETSTRETCHBLTMODE Oynatma cihazı bağlamında bitmap uzatma modunu tanımlar.
META_SETTEXTALIGN Oynatma cihazı bağlamında metin hizalama değerlerini tanımlar.
META_SETTEXTCHAREXTRA Oynatma cihazı bağlamında metin yaslama için karakterler arası boşluk tanımlar.
META_SETTEXTCOLOR Kayıttan yürütme aygıtı bağlamında metnin ön plan rengini tanımlar.
META_SETTEXTJUSTIFICATION Yaslanmış metin dizesindeki karakterleri kesmek için eklenecek boşluk miktarını tanımlar.
META_SETVIEWPORTEXT Kayıttan yürütme aygıtı bağlamında görünümün yatay ve dikey uzantılarını tanımlar.
META_SETVIEWPORTORG Kayıttan yürütme aygıtı bağlamında görünüm alanı orijinini tanımlar.
META_SETWINDOWEXT Kayıttan yürütme aygıtı bağlamında çıktı penceresinin yatay ve dikey kapsamlarını tanımlar.
META_SETWINDOWORG Kayıttan yürütme aygıtı bağlamında çıkış penceresinin orijinini tanımlar.

Kaçış kayıtları

WMF jenerik kaçış kaydı

Kaçış kayıtları, başka bir şekilde WMF kayıt türü olarak tanımlanmayan kayıtlar aracılığıyla meta dosyası işlevselliğini genişletmenin bir yoludur. Her kaçış kaydı bir kayıt işlevi, bir kaçış işlevi ve potansiyel olarak kaçış verisi içerir.

Aşağıdaki kaçış kayıtları bir WMF dosyası oluşturur.

isim Açıklama
ABORTDOK Geçerli belgeyi işlemeyi durdurur.
BEGIN_PATH Bir yol açar.
CHECK_JPEGFORMAT Verilen JPEG görüntüsünü işleyip işleyemediğini belirler .
CHECK_PNGFORMAT Verilen PNG görüntüsünü işleyip işlemeyeceğini belirler .
CLIP_TO_PATH Geçerli PostScript kırpma yoluna bir işlev uygular.
CLOSE_CHANNEL ENDDOC ile aynı.
DOWNLOAD_FACE Çıktı aygıtında yazı tipi yüz adını ayarlar.
DOWNLOAD_HEADER PostScript prosedür setlerini indirir.
DRAW_PATTERNRECT Tanımlanmış bir desene sahip bir dikdörtgen çizer.
ENCAPSULATED POSTSCRİPT Rasgele kapsüllenmiş PostScript (EPS) verilerini doğrudan yazıcı sürücüsüne gönderir .
END_PATH Bir yolu bitirir.
ENDDOC Yazıcı sürücüsüne yeni bir yazdırma işinin bittiğini bildirir.
EPS_PRINTING EPS yazdırmanın başlangıcını ve bitişini belirtir.
EXTMETİNÇIKIŞ Seçili olan yazı tipini, arka plan rengini ve metin rengini kullanarak metin çizer.
GET_COLORTABLE Yazıcı sürücüsünden renk tablosu değerlerini alır.
GET_DEVICEUNITS Çıkış aygıtında şu anda yapılandırılmış aygıt birimlerini alır.
GET_EXTENDED_TEXTMETRICS Yazıcı sürücüsünde şu anda yapılandırılmış olan genişletilmiş metin ölçülerini alır.
GET_FACENAME Çıkış aygıtında şu anda yapılandırılmış olan yazı tipi yüz adını alır.
GET_PAIRKERNTABLE Çıkış aygıtında şu anda tanımlanmış olan yazı tipi karakter aralığı tablosunu alır.
GET_PHYSPAGESIZE Çıkış aygıtında seçili olan fiziksel sayfa boyutunu alır.
GET_PRINTINGOFFSET Gerçek yazdırma veya çizimin başladığı fiziksel sayfanın sol üst köşesinden ofseti alır.
GET_PS_FEATURESETTING Çıkış aygıtında desteklenen PostScript özellikleri hakkında bilgi için yazıcı sürücüsünü sorgular.
GET_SCALINGFACTOR Bir yazıcının x ekseni ve y ekseni için ölçeklendirme faktörlerini alır.
META_ESCAPE_ENHANCED_METAFILE Bir WMF meta dosyasına bir EMF meta dosyasını gömmek için kullanılır.
METAFILE_DRIVER Yazıcı sürücüsünü, çıktı aygıtındaki meta dosyaları desteği hakkında sorgular.
YENİÇERÇEVE Uygulamanın bir sayfaya yazmayı bitirdiğini yazıcı sürücüsüne bildirir.
SONRAKİ BAND Uygulamanın bir banda yazmayı bitirdiğini yazıcı sürücüsüne bildirir.
GEÇİŞ İsteğe bağlı verilerden yazıcı sürücüsüne geçer.
POSTSCRIPT_DATA Çıkış aygıtına rastgele PostScript verileri gönderir.
POSTSCRIPT_IDENTIFY Yazıcı sürücüsünü PostScript merkezli veya GDI merkezli moda ayarlar.
POSTSCRIPT_IGNORE Çıkış cihazına PostScript verilerini yoksaymasını bildirir.
POSTSCRIPT_INJECTION Bir PostScript akışına bir ham veri bloğu ekler.
POSTSCRIPT_PASSTHROUGH Rasgele verileri doğrudan, bu verileri yalnızca PostScript modundayken işlemesi beklenen bir yazıcı sürücüsüne gönderir.
OPEN_CHANNEL NULL belge ve çıktı dosya adıyla ve ham modda verilerle STARTDOC ile aynı şekilde davranır.
QUERY_DIBSUPPORT Yazıcı sürücüsünü, çıktı aygıtındaki DIB desteği hakkında sorgular.
QUERY_ESCSUPPORT Çıkış aygıtında belirli bir WMF kaçış işlevinin desteklenip desteklenmediğini belirlemek için yazıcı sürücüsünü sorgular.
SET_COLORTABLE Renk tablosu değerlerini ayarlar.
SET_COPYCOUNT Kopya sayısını ayarlar.
SET_LINECAP Çıkış aygıtına çizimde kullanılacak satır sonlandırma modunu belirtir.
SET_LINEKATIL Çıkış aygıtına çizimde kullanılacak çizgi birleştirme modunu belirtir.
SET_MITERLIMIT Çıkış aygıtına çizimde kullanılacak gönye bağlantılarının uzunluğu için sınırı ayarlar.
SPCLPASSTHROUGH2 Belgelerin özel prosedürleri ve diğer keyfi verileri belgelere dahil etmesini sağlar.
STARTDOC Yazıcı sürücüsüne yeni bir yazdırma işinin başladığını bildirir.

Bir yoktu majör açığı depolayan kaydın kendisinde iptal prosedürü kodunu İptal kaçış rekor etrafında kaçış kayıtlarında bulundu. Bu, Windows sistemlerini (bkz. CVE - 2005-4560 ) ve Wine projesini (bkz. CVE - 2006-0106 ) etkiledi . Secunia'ya göre , "Güvenlik açığı, özel hazırlanmış SETABORTPROC 'Escape' kayıtlarını içeren Windows Meta Dosyası dosyalarının ('.wmf') işlenmesindeki bir hatadan kaynaklanıyor. Bu tür kayıtlar, bir WMF dosyası başarısız oluyor." Windows 3.1 SDK belgelerine göre, SETABORTPROC kaçışı, WMF güvenlik açığı keşfedilmeden çok önce, Windows 3.1'de eski ve aynı adlı işlevle değiştirildi. Ancak, eski kaçış kodu, Windows 3.0 için yazılmış (veya en azından geriye dönük olarak uyumlu) 16 bit programlarla uyumluluk için korunmuştur. Bu değişiklik, Microsoft'un Windows NT için GDI'nin 32 bitlik yeniden uygulamasını oluşturduğu sırada yaklaşık olarak aynı anda gerçekleşti ve güvenlik açığının bu çaba sırasında ortaya çıkmış olması muhtemeldir.

Steve Gibson , Microsoft'u kasıtlı olarak kodlarına bir arka kapı uygulamakla suçladıktan sonra , Mark Russinovich bir çürütme sağladı ve şunları söyledi:

...biçim tasarlanırken her şey farklıydı. Windows 3.1'de "büyük" bellek modeli kodu doğası gereği konumdan bağımsızdır ve Windows hiçbir zaman yama uygulanmamıştır, bu nedenle hem Windows hem de bir uygulama bir uygulama işlevini WMF dosyasına kopyalayabilir ve aynı uygulama tarafından oynatıldığında çalışacağını varsayabilir. daha sonraki bir çalıştırma oturumu. Her halükarda, geliştiricilerin, iptal prosedürleriyle disk üstü meta dosyaları oluşturan uygulamaları öngördükleri açık değildir. Ayrıca, Microsoft'tan Stephen Toulouse'un Microsoft'un Steve'in iddialarını çürütmesinde belirttiği gibi, 1990'ların başındaki güvenlik ortamı bugünden çok farklıydı ve bir WMF dosyasında depolananlar da dahil olmak üzere tüm kodlar doğası gereği güvenilirdi.

Symantec Security Response, ABD'den Peter Ferrie de Gibson ile aynı fikirde değildi ve şunları kaydetti:

Gibson, SetAbortProc işleyicisini çalıştırmak için bir iş parçacığının oluşturulduğunu iddia etti. Aslında, işleyiciyi çalıştırmak için hiçbir iş parçacığı oluşturulmaz - bu, ayrıştırıcı tarafından çağrılan bir geri çağrıdır ve ayrıştırıcı, geri çağrı dönene kadar beklemek zorundadır, aksi takdirde işlevin tüm noktası (yazdırmayı iptal etmek için) kaybolur. . Gibson, kendi kabulüyle belgeleri okumadı (aslında, Microsoft'un Web sitesinde ücretsiz olarak bulunmasına rağmen onu bulamadığını iddia etti) ve cihaz bağlamının işlev işleyicisi için mevcut olmadığını iddia etti. . Elbette aygıt bağlamı, işlev işleyici tarafından kullanılabilir - kendisine iletilen iki parametreden biridir (yukarıya bakın) ve yazdırmayı iptal etmek için gereklidir. Son olarak Gibson, kontrol akışının Windows'a geri dönemediğini iddia etti. Yığına iletilen parametreleri döndüren ve atan işlevin bir meselesidir. Kayıt iyi oluşturulmuşsa, Windows daha önce olduğu gibi dosyayı ayrıştırmaya devam edecektir. ... Gibson, birçok şey hakkında tahminde bulunduğunu itiraf ediyor. Ne yazık ki, kötü tahmin etti. Sanırım artık daha iyi biliyoruz.

EMF

Windows Geliştirilmiş Meta Dosyası üstbilgileri

EMF dosyalarının üç olası başlık sürümü vardır. Orijinal başlıklar yalnızca görüntüler için bir kaptır, ikinci ve üçüncü sürüm orijinal başlığı kapsar ve bir piksel biçiminde kayıt ve OpenGL kayıtları için destek içerir ve üçüncü sürüm ikinci başlık uzantısını kapsar ve EMF'lerin EMF doğruluğunu ve ölçeklenebilirliğini artırır. Metrik sistemi kullanarak cihaz yüzeylerinin mesafelerini ölçme yeteneği ekler.

Her EMF başlığı bir EMR_HEADER kaydı ile başlar ve metafile görüntüsünün kaydedildiği cihazın ilgili özelliklerini kaydeder. Orijinal EMF başlığının 80 baytlık bir başlığı ve isteğe bağlı değişken uzunluklu açıklama dizisi vardır. Diğer meta dosyaları, orijinal başlığı içine alan uzantı alanları içerir. EmfMetafileHeaderExtension1orijinal EMF başlığından hemen sonra eklenen bir kayıttır, bir piksel formatı tanımlayıcısı olup olmadığını ve başlıktaki tanımlayıcı nesneye göre kayma olup olmadığını ve ayrıca meta dosyada OpenGL kayıtlarının olup olmadığını belirten bir alandır . Piksel biçimi tanımlayıcısı, çizim yüzeyinin özelliklerini ve bir pikselin RGBA'da kodlanıp kodlanmadığını veya bir renk tablosunda bir dizin olup olmadığını belirtir . EmfMetafileHeaderExtension2doğrudan EmfMetafileHeaderExtension1kayıttan sonra eklenen bir kayıttır ve cihaz yüzeyini mikrometre cinsinden ölçmek için X ve Y değerlerine sahip iki alan içerir.

WMF dosyaları gibi, kayıtlar da işleve göre sınıflandırılabilir, ancak EMF dosyalarında WMF dosyalarında olduğundan daha fazla kayıt türü vardır. Kayıtlar; kontrol, bitmap, kırpma, yorum, çizim, kaçış, nesne oluşturma, nesne işleme, OpenGL, yol parantez, durum ve dönüştürme kayıtları olarak sınıflandırılabilir.

EMF+

Windows XP'nin piyasaya sürülmesiyle , Gelişmiş Meta Dosyası Biçimi Artı Uzantıları (EMF+) biçimi tanıtıldı. EMF+, WMF/EMF'nin GDI'ye yapılan çağrıları depolamasıyla aynı şekilde GDI+ API'sine yapılan çağrıları seri hale getirmek için bir yol sağlar .

Olarak bilinen Windows Meta sıkıştırılmış sürümlerini de vardır Sıkıştırılmış Windows Meta dosyası (WMZ) ve Sıkıştırılmış Windows'un Gelişmiş Meta temelde (EMZ) Gzip WMF ve EMF buna dosyaları sıkıştırılmış.

Uygulamalar

WMF formatı, görüntüyü geri yüklemek için Windows GDI katmanı tarafından yürütülmek üzere tasarlanmıştır , ancak WMF ikili dosyaları bu görüntüyü oluşturan GDI grafik temellerinin tanımını içerdiğinden, WMF ikilisini oluşturan alternatif kitaplıklar tasarlamak mümkündür. dosyaları veya diğer grafik biçimlerine dönüştürün.

Ayrıca bakınız

Referanslar

Dış bağlantılar