विंडोज़ मेटाफ़ाइल

विंडोज़ मेटाफ़ाइल (WMF) एक छवि फ़ाइल स्वरूप है जिसे मूल रूप से 1990 के दशक में Microsoft Windows के लिए डिज़ाइन किया गया था। मूल विंडोज़ मेटाफ़ाइल प्रारूप डिवाइस-स्वतंत्र नहीं था (हालांकि प्लेसमेंट हेडर के साथ इसे और अधिक बनाया जा सकता था) और इसमें वेक्टर ग्राफिक्स और बिटमैप दोनों घटक शामिल हो सकते हैं। यह स्केलेबल वेक्टर ग्राफिक्स फ़ाइलों के समान कार्य करता है। WMF फ़ाइलों को बाद में एन्हांस्ड मेटाफ़ाइल्स (EMF फ़ाइलें) द्वारा प्रतिस्थापित किया गया, जो डिवाइस-स्वतंत्रता प्रदान करता था। EMF फ़ाइलें तब स्वयं EMF+ फ़ाइलों के माध्यम से संवर्धित की गईं।

अनिवार्य रूप से, एक मेटाफ़ाइल स्क्रीन पर एक छवि प्रदर्शित करने के लिए ड्राइंग कमांड, प्रॉपर्टी परिभाषाओं और ग्राफिक्स ऑब्जेक्ट्स से युक्त रिकॉर्ड्स की एक सूची संग्रहीत करता है। उपयोग किए गए ड्राइंग कमांड माइक्रोसॉफ्ट विंडोज में ड्राइंग के लिए उपयोग किए जाने वाले ग्राफ़िक्स डिवाइस इंटरफ़ेस  (जीडीआई) अप्लिकेशन प्रोग्रामिंग अंतरफलक के कमांड से निकटता से संबंधित हैं।

मेटाफ़ाइल्स के तीन प्रमुख प्रकार हैं - WMF एक 16-बिट प्रारूप है जिसे विंडोज़ 3.0 में पेश किया गया है। यह Microsoft Word, Microsoft PowerPoint और Microsoft प्रकाशक जैसे Microsoft Office अनुप्रयोगों के लिए मूल वेक्टर ग्राफिक्स है। विंडोज़ मेटाफ़ाइल प्रारूप विनिर्देश का संशोधन 14 ऑनलाइन पढ़ने या पीडीएफ के रूप में डाउनलोड करने के लिए उपलब्ध है। ईएमएफ फाइलें, जो डब्लूएमएफ फाइलों को प्रतिस्थापित करती हैं, उसी सिद्धांत पर काम करती हैं, केवल यह एक 32-बिट फ़ाइल प्रारूप है जो टिप्पणी रिकॉर्ड के भीतर निजी डेटा को एम्बेड करने की भी अनुमति देता है। ईएमएफ+ ईएमएफ फाइलों का एक विस्तार है और इन टिप्पणी रिकॉर्ड में एम्बेडेड है, जो विंडोज जीडीआई+ के समान कमांड, ऑब्जेक्ट और गुणों का उपयोग करके छवियों और टेक्स्ट की अनुमति देता है।

इतिहास
मूल 16 बिट WMF फ़ाइल स्वरूप 1992 Windows 3.1 SDK दस्तावेज़ के खंड 4 में पूरी तरह से निर्दिष्ट किया गया था (कम से कम यदि अन्य खंडों में व्यक्तिगत कार्यों और संरचनाओं के विवरण के साथ जोड़ा जाए), लेकिन वह विनिर्देश कुछ विवरणों के बारे में अस्पष्ट था। इन मैनुअलों को बिना किसी clickwrap अंत उपयोगकर्ता लाइसेंस समझौता या अन्य असामान्य लाइसेंसिंग प्रतिबंधों के किताबों की दुकानों में उपलब्ध मुद्रित पुस्तकों के रूप में प्रकाशित किया गया था (सिर्फ एक सामान्य चेतावनी कि यदि सॉफ्टवेयर बंडल के हिस्से के रूप में खरीदा जाता है, तो सॉफ्टवेयर एक के अधीन होगा)।

समय के साथ उस ऐतिहासिक विनिर्देश के अस्तित्व को काफी हद तक भुला दिया गया और कुछ वैकल्पिक कार्यान्वयनों ने मौजूदा WMF फ़ाइलों से फ़ाइल प्रारूप का पता लगाने के लिए रिवर्स इंजीनियरिंग का सहारा लिया, जो कठिन और त्रुटि प्रवण था। सितंबर 2006 में, Microsoft ने WMF फ़ाइल प्रारूप विनिर्देश को अधिक पूर्ण रूप में फिर से प्रकाशित किया माइक्रोसॉफ्ट ओपन विशिष्टता वादा के संदर्भ में, फ़ाइल प्रारूप कार्यान्वयनकर्ताओं पर पेटेंट अधिकारों का दावा नहीं करने का वादा किया गया है। माइक्रोसॉफ्ट ने बाद में 32-बिट ईएमएफ फाइलों के पक्ष में डब्लूएमएफ फाइलों को खारिज कर दिया क्योंकि डब्लूएमएफ फाइलों में डिवाइस स्वतंत्रता के साथ वास्तविक समस्याएं थीं, प्लेसेबल फ़ाइल हेडर के उपयोग के बावजूद जो बुनियादी डिवाइस स्वतंत्रता प्रदान करती थी। माइक्रोसॉफ्ट ने पाया कि जो डेवलपर्स प्रारूप का उपयोग करते हैं, वे मेटाफ़ाइल्स में एप्लिकेशन, स्थान, या स्केलिंग टिप्पणियां [एम्बेडिंग] कर रहे थे... अन्य ने मेटाफ़ाइल में हेडर जोड़े जो विभिन्न एप्लिकेशन-विशिष्ट जानकारी प्रदान करते थे, जिससे प्रमुख संगतता समस्याएं पैदा हुईं। इस प्रकार, 1992 में Windows NT 3.1 के साथ, Microsoft ने उन्नत मेटाफ़ाइल प्रारूप (EMF) पेश किया रेफरी नाम = rfc7903 > - एक प्रारूप जो Win32 API पर आधारित था और जिसके साथ उन्होंने डिवाइस की स्वतंत्रता को अंतर्निहित किया था। रेफरी नाम = पेश किया गया > - इन्हें एनटी मेटाफ़ाइल्स के रूप में भी जाना जाता था। विन्डोज़ एक्सपी और जीडीआई+ की रिलीज़ के साथ, रिकॉर्ड्स के सेट को काफी बढ़ाना पड़ा और इसलिए माइक्रोसॉफ्ट ने मौजूदा ईएमएफ फ़ाइल प्रारूप के विस्तार के रूप में ईएमएफ+ जारी किया।

मेटाफ़ाइल संरचना
WMF, EMF और EMF+ फ़ाइलें सभी रिकॉर्ड की एक श्रृंखला से बनी होती हैं जिन्हें ग्राफिकल आउटपुट उत्पन्न करने के लिए चलाया जाता है। कुछ रिकॉर्ड वस्तुओं को परिभाषित करते हैं जो ग्राफिकल वस्तुओं को निर्दिष्ट कर सकते हैं जिनका उपयोग यह निर्धारित करने के लिए किया जाता है कि ग्राफिक्स कैसे बनाया जाना चाहिए (उदाहरण के लिए पेन लाइनों का रंग और चौड़ाई निर्दिष्ट करते हैं)। इनमें से प्रत्येक ऑब्जेक्ट को मेटाफ़ाइल्स में संग्रहीत किया जाता है और एक ऑब्जेक्ट तालिका में रखा जाता है, जो मेटाफ़ाइल को संसाधित करते समय ग्राफिक ऑब्जेक्ट्स के उपयोग को ट्रैक करता है। ऑब्जेक्ट तालिका मेटाफ़ाइल के भीतर परिभाषित ग्राफ़िकल ऑब्जेक्ट संरचनाओं के अनुक्रमितों की एक सहयोगी सरणी है।

WMF और EMF फ़ाइलें EMF फ़ाइलों में EMF+ रिकॉर्ड की तुलना में ऑब्जेक्ट प्रोसेसिंग को अलग ढंग से संभालती हैं। चूंकि WMF और EMF फ़ाइल को संसाधित किया जा रहा है, किसी ऑब्जेक्ट को परिभाषित करने के बाद रिकॉर्ड्स को ऑब्जेक्ट तालिका में पढ़ा जाता है। यदि कोई ऑब्जेक्ट हटा दिया जाता है तो ऑब्जेक्ट को तालिका से मुक्त कर दिया जाता है और पहचानकर्ता का पुन: उपयोग किया जा सकता है। विशेष रूप से किसी ऑब्जेक्ट का उपयोग तब तक नहीं किया जाएगा जब तक कि उसे रिकॉर्ड प्लेबैक के दौरान विशेष रूप से चयनित न किया जाए। यह EMF+ फ़ाइलों के लिए भिन्न है, जो  हैश मैप  के माध्यम से एक सहयोगी सरणी का भी उपयोग करता है जो ऑब्जेक्ट को ऑब्जेक्ट पहचानकर्ता के साथ रिकॉर्ड करता है। हालाँकि, WMF और EMF फ़ाइलों के विपरीत, जो किसी ऑब्जेक्ट को हटा सकती हैं, जब एक नया ऑब्जेक्ट बनाया जाता है जिसका इंडेक्स मौजूदा ऑब्जेक्ट के समान होता है, तो तालिका में प्रविष्टि को नए ऑब्जेक्ट से बदल दिया जाता है। ईएमएफ फ़ाइल को उपयोग करने से पहले विशेष रूप से किसी ऑब्जेक्ट का चयन करने की आवश्यकता नहीं होती है।

डब्लूएमएफ
WMF फ़ाइलें मूल रूप से डिवाइस स्वतंत्र होने के लिए डिज़ाइन नहीं की गई थीं, जिसका अर्थ है कि आप फ़ाइल को आउटपुट डिवाइस पर प्लेबैक नहीं कर सकते थे जो मूल डिवाइस से भिन्न था जिस पर फ़ाइल रिकॉर्ड की गई थी। इस समस्या का आंशिक समाधान एल्डस कॉर्पोरेशन द्वारा आविष्कार किया गया था, जिसने एक अतिरिक्त प्लेसेबल हेडर जोड़ा, जिसे एपीएम हेडर कहा जाता है। जिसमें एक बाउंडिंग आयत, एक मेटाफ़ाइल संस्करण, मेटाफ़ाइल आकार, मेटाफ़ाइल में ऑब्जेक्ट की संख्या और मेटाफ़ाइल में सबसे बड़े एकल रिकॉर्ड का आकार जोड़ा गया। इसे बाद में माइक्रोसॉफ्ट द्वारा विंडोज 2000 में शुरू करके WMF प्रारूप में शामिल किया गया। WMF फ़ाइलें रिकॉर्ड की एक श्रृंखला द्वारा संरचित होती हैं, जो कई नियंत्रण रिकॉर्ड से शुरू होती हैं: हेडर रिकॉर्ड, उपर्युक्त वैकल्पिक स्थानयोग्य रिकॉर्ड, और फ़ाइल रिकॉर्ड के अंत तक समाप्त हो गया। नियंत्रण रिकॉर्ड द्वारा संपुटित वे रिकॉर्ड होते हैं जो स्वयं छवि बनाते हैं। ये रिकॉर्ड प्लेबैक डिवाइस संदर्भ के रूप में जाने जाते हैं, जो गुणों और वस्तुओं का संग्रह है जो डिवाइस के ग्राफिकल वातावरण को बनाते हैं क्योंकि मेटाफ़ाइल को इस आउटपुट डिवाइस पर वापस चलाया जा रहा है। नियंत्रण रिकॉर्ड के अलावा अन्य रिकॉर्ड को बड़े पैमाने पर बिटमैप रिकॉर्ड, ड्राइंग रिकॉर्ड, ऑब्जेक्ट रिकॉर्ड, राज्य रिकॉर्ड और एस्केप रिकॉर्ड में समूहीकृत किया जा सकता है।

बिटमैप रिकॉर्ड
बिटमैप रिकॉर्ड बिटमैप छवियों का प्रबंधन और आउटपुट करते हैं।

ड्राइंग रिकॉर्ड
ड्राइंग रिकॉर्ड ग्राफ़िक्स आउटपुट उत्पन्न करते हैं।

ऑब्जेक्ट रिकॉर्ड
ऑब्जेक्ट रिकॉर्ड ग्राफ़िक्स ऑब्जेक्ट बनाते और प्रबंधित करते हैं। WMF फ़ाइलों में ऑब्जेक्ट की दो व्यापक श्रेणियाँ हैं - ग्राफ़िक्स ऑब्जेक्ट और संरचना ऑब्जेक्ट। WMF में संरचना वस्तुएं स्पष्ट रूप से बनाई या हटाई नहीं जाती हैं, वे जटिल संरचनाओं के बजाय होती हैं। उदाहरण के लिए, BitmapCoreHeader में डिवाइस-स्वतंत्र बिटमैप के आयाम और रंग प्रारूप के बारे में जानकारी होती है, जो स्वयं एक डिवाइस इंडिपेंडेंट बिटमैप ऑब्जेक्ट का हिस्सा है। हालाँकि, एक ग्राफ़िक्स ऑब्जेक्ट, ग्राफ़िक्स आउटपुट के लिए पैरामीटर निर्दिष्ट करता है और WMF के प्लेबैक के दौरान यह प्लेबैक डिवाइस संदर्भ सेट करता है। ग्राफ़िक्स ऑब्जेक्ट ब्रश हो सकते हैं (ब्रश की शैली, रंग और पैटर्न को परिभाषित करता है जो ग्राफ़िक के एक क्षेत्र को कैसे पेंट करना है परिभाषित करता है), फ़ॉन्ट (गुणों को परिभाषित करता है जो टेक्स्ट को प्रदर्शित करने के तरीके को प्रभावित करता है), पैलेट (रंगों को डिवाइस-स्वतंत्र मान के रूप में निर्दिष्ट करता है), एक एप्लिकेशन द्वारा परिभाषित), पेन (एक रेखा की ग्राफिकल विशेषताओं को निर्दिष्ट करता है), और क्षेत्र (जो रेखा और वक्र खंडों को निर्दिष्ट करते हैं जो एक आकृति को परिभाषित करते हैं)।

राज्य अभिलेख
राज्य रिकॉर्ड प्लेबैक डिवाइस संदर्भ के ग्राफ़िक्स गुणों का प्रबंधन करते हैं।

एस्केप रिकॉर्ड
एस्केप रिकॉर्ड उन रिकॉर्ड्स के माध्यम से मेटाफ़ाइल कार्यक्षमता को बढ़ाने का एक साधन है जिन्हें अन्यथा WMF रिकॉर्ड प्रकार के रूप में परिभाषित नहीं किया गया है। प्रत्येक एस्केप रिकॉर्ड में एक रिकॉर्ड फ़ंक्शन, एक एस्केप फ़ंक्शन और संभावित रूप से एस्केप डेटा होता है।

निम्नलिखित एस्केप रिकॉर्ड एक WMF फ़ाइल बनाते हैं।

एबॉर्ट एस्केप रिकॉर्ड के आसपास एस्केप रिकॉर्ड में एक विंडोज़ मेटाफ़ाइल भेद्यता पाई गई थी, जो एबॉर्ट प्रक्रिया कोड को रिकॉर्ड के भीतर ही संग्रहीत करता है। इससे विंडोज़ सिस्टम प्रभावित हुआ (देखें)। ) और वाइन (सॉफ़्टवेयर)  (देखें ). सिकुनिया के अनुसार, भेद्यता विशेष रूप से तैयार किए गए SETABORTPROC 'एस्केप' रिकॉर्ड वाले विंडोज मेटाफ़ाइल फ़ाइलों ('.wmf') को संभालने में त्रुटि के कारण होती है। WMF फ़ाइल का रेंडरिंग विफल होने पर ऐसे रिकॉर्ड मनमाने उपयोगकर्ता-परिभाषित फ़ंक्शन को निष्पादित करने की अनुमति देते हैं। Windows 3.1 SDK दस्तावेज़ के अनुसार, WMF भेद्यता की खोज से बहुत पहले, SETABORTPROC एस्केप अप्रचलित हो गया था और Windows 3.1 में उसी नाम के फ़ंक्शन द्वारा प्रतिस्थापित कर दिया गया था। हालाँकि, अप्रचलित एस्केप कोड को विंडोज 3.0 के लिए लिखे गए (या कम से कम बैकवर्ड संगत) 16 बिट प्रोग्राम के साथ संगतता के लिए बरकरार रखा गया था। यह परिवर्तन लगभग उसी समय हुआ जब Microsoft Windows NT के लिए GDI का 32 बिट पुनः कार्यान्वयन बना रहा था, और यह संभावना है कि इस प्रयास के दौरान भेद्यता उत्पन्न हुई।

स्टीव गिब्सन (कंप्यूटर प्रोग्रामर) द्वारा माइक्रोसॉफ्ट पर जानबूझकर उनके कोड में पिछले दरवाजे (कंप्यूटिंग) को लागू करने का आरोप लगाने के बाद, मार्क रुसिनोविच ने एक खंडन प्रदान किया, और कहा कि:

"...things were different when the format was architected. In the Windows 3.1 “large” memory model code is inherently location-independent and Windows was never patched, so both Windows and an application could simply copy an application function into the WMF file and assume it would work when played back by the same application in a later run session. In any case, its not clear that the developers envisioned applications creating on-disk metafiles with abort procedures. Also, as Microsoft’s Stephen Toulouse pointed out in Microsoft’s rebuttal to Steve’s claims, the security landscape in the early 1990s was very different than today and all code, including that stored in a WMF file, was inherently trusted."

सिमेंटेक सिक्योरिटी रिस्पांस, यूएसए के पीटर फेरी भी गिब्सन से असहमत थे, उन्होंने कहा:

"Gibson claimed that a thread is created to run the SetAbortProc handler. In fact, no thread is created to run the handler – it is a callback, which is called by the parser, and the parser has to wait until the callback returns, otherwise the whole point of the function (to abort the printing) is lost. By his own admission, Gibson did not read the documentation (in fact, he claimed that he couldn’t find it, although it is freely available on Microsoft’s Web site), and he claimed that the device context is not available to the function handler. Of course the device context is available to the function handler &mdash; it is one of the two parameters that is passed to it (see above), and it is required in order to abort the printing. Finally, Gibson claimed that the control flow could not return to Windows. It is simply a matter of the function returning and discarding the parameters that were passed on the stack. If the record is well formed, Windows will continue to parse the file, as before. ... Gibson admits that he was guessing about a number of things. Unfortunately, he guessed poorly. I guess we know better now."

ईएमएफ
ईएमएफ फाइलों में हेडर के तीन संभावित संस्करण हैं। मूल हेडर केवल छवियों के लिए एक कंटेनर है, दूसरा और तीसरा संस्करण मूल हेडर को समाहित करता है और इसमें एक पिक्सेल प्रारूप रिकॉर्ड और ओपनजीएल रिकॉर्ड के लिए समर्थन शामिल है, और तीसरा संस्करण दूसरे हेडर एक्सटेंशन को समाहित करता है और ईएमएफ की सटीकता और स्केलेबिलिटी को बढ़ाता है। मीट्रिक प्रणाली का उपयोग करके डिवाइस की सतहों की दूरी मापने की क्षमता जोड़ता है। प्रत्येक EMF हेडर एक EMR_HEADER रिकॉर्ड से शुरू होता है, और उस डिवाइस के प्रासंगिक गुणों को रिकॉर्ड करता है जिस पर मेटाफ़ाइल छवि रिकॉर्ड की गई थी। मूल ईएमएफ हेडर में 80 बाइट हेडर और एक वैकल्पिक चर लंबाई विवरण स्ट्रिंग है। अन्य मेटाफ़ाइलों में एक्सटेंशन फ़ील्ड होते हैं, जो मूल हेडर को समाहित करते हैं।  एक रिकॉर्ड है जो सीधे मूल ईएमएफ हेडर के बाद डाला जाता है, यह निर्दिष्ट करता है कि हेडर के भीतर एक पिक्सेल प्रारूप डिस्क्रिप्टर और डिस्क्रिप्टर ऑब्जेक्ट का ऑफसेट है या नहीं, साथ ही एक फ़ील्ड जो निर्दिष्ट करता है कि मेटाफ़ाइल में ओपनजीएल रिकॉर्ड मौजूद हैं या नहीं। पिक्सेल प्रारूप डिस्क्रिप्टर ड्राइंग सतह की क्षमताओं को निर्दिष्ट करता है और क्या पिक्सेल आरजीबीए रंग मॉडल में एन्कोड किया गया है या रंग तालिका में एक सूचकांक है।   एक रिकॉर्ड है जो सीधे इसके बाद डाला जाता है   रिकॉर्ड करें, और इसमें डिवाइस की सतह को माइक्रोमीटर में मापने के लिए X और Y मान वाले दो फ़ील्ड शामिल हैं। WMF फ़ाइलों की तरह, रिकॉर्ड को फ़ंक्शन द्वारा वर्गीकृत किया जा सकता है, हालाँकि WMF फ़ाइलों की तुलना में EMF फ़ाइलों में अधिक रिकॉर्ड प्रकार होते हैं। रिकॉर्ड्स को नियंत्रण, बिटमैप, क्लिपिंग, टिप्पणी, ड्राइंग, एस्केप, ऑब्जेक्ट निर्माण, ऑब्जेक्ट हेरफेर, ओपनजीएल, पथ ब्रैकेट, स्थिति और ट्रांसफ़ॉर्म रिकॉर्ड के रूप में वर्गीकृत किया जा सकता है।

ईएमएफ+
Windows XP की रिलीज़ के साथ, उन्नत मेटाफ़ाइल प्रारूप प्लस एक्सटेंशन (EMF+) प्रारूप पेश किया गया था। EMF+ GDI+ API पर कॉल को उसी तरह क्रमबद्ध करने का एक तरीका प्रदान करता है जैसे WMF/EMF GDI पर कॉल को संग्रहीत करता है।

विंडोज़ मेटाफ़ाइल्स के संपीड़ित संस्करण भी हैं जिन्हें संपीड़ित विंडोज़ मेटाफ़ाइल (डब्लूएमजेड) और संपीड़ित विंडोज़ एन्हांस्ड मेटाफ़ाइल (ईएमजेड) के रूप में जाना जाता है। जो मूल रूप से gzip संपीड़ित WMF और EMF फ़ाइलें हैं।

कार्यान्वयन
WMF प्रारूप को छवि को पुनर्स्थापित करने के लिए Windows GDI परत द्वारा निष्पादित करने के लिए डिज़ाइन किया गया था, लेकिन चूंकि WMF बाइनरी फ़ाइलों में GDI ग्राफिक प्राइमेटिव की परिभाषा होती है जो इस छवि का निर्माण करती है, इसलिए वैकल्पिक पुस्तकालयों को डिज़ाइन करना संभव है जो WMF बाइनरी प्रस्तुत करते हैं फ़ाइलें या उन्हें अन्य ग्राफ़िक प्रारूपों में परिवर्तित करें।

यह भी देखें

 * परिशिष्ट भाग
 * वेक्टर मार्कअप भाषा (VML)
 * स्केलेबल वेक्टर ग्राफिक्स (एसवीजी)

बाहरी संबंध

 * Windows Metafile Format Specification from Microsoft
 * Metafiles – Windows applications
 * File Format Summary at fileformat.info
 * Windows Metafile FAQ