Метафайл Windows - Windows Metafile - Wikipedia
Метафайл Windows (WMF) является формат файла изображения изначально разработан для Майкрософт Виндоус в 1990-е гг. Исходный формат метафайла Windows не был независимым от устройства (хотя его можно было сделать в большей степени с помощью заголовков размещения) и мог содержать оба векторная графика и битовая карта составные части. Он действует аналогично SVG файлы. Файлы WMF были позже заменены Расширенные метафайлы (Файлы EMF), которые обеспечивали независимость от устройства. Файлы EMF затем были улучшены с помощью ЭДС + файлы.
По сути, метафайл хранит список записей, состоящий из команд рисования, определений свойств и графических объектов для отображения изображения на экране.[1] Используемые команды рисования тесно связаны с командами Интерфейс графического устройства (GDI) API используется для рисования в Microsoft Windows.
Существует три основных типа метафайлов: WMF - это 16 бит формат введен в Windows 3.0. Это родной векторный формат за Microsoft Office такие приложения, как Слово, Силовая установка, и Издатель. По состоянию на 2017 год[Обновить] Версия 14 спецификации формата метафайлов Windows доступна для чтения в Интернете или для скачивания в формате PDF.[2] Файлы EMF, которые заменили файлы WMF, работают по тому же принципу, только это 32-битный формат файла, который также позволяет встраивать личные данные в записи «комментариев».[3] EMF + - это расширение для файлов EMF, встроенное в эти записи комментариев, что позволяет отображать изображения и текст с помощью команд, объектов и свойств, аналогичных Windows. GDI +.[4]
История
Исходный 16-битный формат файла WMF был полностью указан в томе 4 документации Windows 3.1 SDK 1992 г.[5] (по крайней мере, в сочетании с описанием отдельных функций и структур в других томах), но эта спецификация была расплывчатой в отношении некоторых деталей. Эти руководства были опубликованы в виде печатных книг, доступных в книжных магазинах без Пролистать EULA или другие необычные лицензионные ограничения (просто общее предупреждение о том, что в случае приобретения как части программного пакета, на программное обеспечение будут распространяться такие ограничения).
Со временем о существовании этой исторической спецификации было в значительной степени забыто, и некоторые альтернативные реализации прибегли к обратному проектированию для определения формата файла из существующих файлов WMF, что было сложно и подвержено ошибкам.[6] В сентябре 2006 года Microsoft снова опубликовала спецификацию формата файла WMF в более полной форме.[7] в контексте Обещание открытой спецификации Microsoft, обещая не отстаивать патентные права разработчикам форматов файлов.[8]
Позднее Microsoft отказалась от файлов WMF в пользу 32-разрядных файлов EMF, поскольку файлы WMF имели реальные проблемы с независимостью от устройства, несмотря на использование «размещаемого» заголовка файла, который обеспечивал базовую независимость от устройства. Microsoft обнаружила, что разработчики, использующие этот формат, «[встраивали] приложение, расположение или масштабирование комментариев в метафайлы ... Другие добавляли в метафайл заголовки, которые предоставляли различную информацию о приложении», что приводило к серьезным проблемам совместимости.[9] Таким образом, в 1992 г. Windows NT 3.1, Microsoft представила формат расширенного метафайла (EMF)[10] - формат, основанный на Win32 API и встроенная независимость устройства.[11][9] - они также были известны как метафайлы NT.[12] С выпуском Windows XP и GDI + набор записей пришлось значительно увеличить, и поэтому Microsoft выпустила EMF + как расширение существующего формата файлов EMF.[10][13]
Структура метафайла
Файлы WMF, EMF и EMF + состоят из серии записей, которые воспроизводятся для создания графического вывода. Некоторые записи определяют объекты, которые могут указывать графические объекты, используемые для определения способа рисования графики (например, перья определяют цвет и ширину линий). Каждый из этих объектов хранится в метафайлах и помещается в таблицу объектов, которая отслеживает использование графических объектов при обработке метафайла. Таблица объектов - это ассоциативный массив индексов структур графических объектов, определенных в метафайле.
Файлы WMF и EMF обрабатывают объекты иначе, чем записи EMF + в файлах EMF. В процессе обработки файлов WMF и EMF записи считываются в таблицу объектов после определения объекта. Если объект удален, объект удаляется из таблицы, и идентификатор можно использовать повторно. Примечательно, что объект не будет использоваться, пока он не будет специально выбран во время воспроизведения записи.[14][15] Это отличается от файлов EMF +, которые также используют ассоциативный массив через хэш-карта который записывает объект вместе с идентификатором объекта. Однако, в отличие от файлов WMF и EMF, которые могут удалять объект, когда создается новый объект, имеющий тот же индекс, что и существующий объект, запись в таблице заменяется новым объектом. EMF-файлу также не нужно специально выбирать объект перед его использованием.[16]
WMF
Файлы WMF изначально не проектировались как независимые от устройств, что означает, что вы не могли воспроизводить файл на устройствах вывода, отличных от исходного устройства, на котором файл был записан. Частичное решение этой проблемы было изобретено Aldus Corporation, который добавил дополнительный "размещаемый" заголовок, который называется "заголовок APM",[18] который добавил ограничивающий прямоугольник, версию метафайла, размер метафайла, количество объектов в метафайле и размер самой большой отдельной записи в метафайле.[19][20] Позднее он был включен в формат WMF Microsoft, начиная с Windows 2000.[21]
Файлы WMF структурированы сериями записей, начиная с нескольких контрольных записей: записи заголовка,[19][22] вышеупомянутая необязательная размещаемая запись, [23] и закончил конец файла записывать.[19][24]
Контрольные записи инкапсулируют записи, составляющие само изображение. Эти записи работают в так называемом контекст устройства воспроизведения, который представляет собой набор свойств и объектов, составляющих графическую среду устройства, когда метафайл «воспроизводится» на этом устройстве вывода.[25]
Записи, отличные от записей управления, можно в значительной степени сгруппировать в записи растровых изображений, записи чертежей, записи объектов, записи состояния и записи перехода.
Записи растровых изображений
Управление и вывод растровых записей растровые изображения.
Имя | Описание |
---|---|
META_BITBLT | Определяет, как сделать передача битового блока. Эти записи могут указывать растровое изображение для использования в качестве источника или региона.[26] |
META_DIBBITBLT | Определяет, как выполнить передачу битового блока независимое от устройства растровое изображение изображение. Эти записи могут указывать растровое изображение для использования в качестве источника или региона.[27] |
META_DIBSTRETCHBITBLT | Определяет, как выполнить передачу битового блока независимого от устройства растрового изображения, но позволяет увеличивать или уменьшать изображение. Эти записи могут указывать растровое изображение для использования в качестве источника или региона.[28] |
META_SETDIBTODEV | Задает цвет для установки блока пикселей в независимом от устройства растровом изображении. В этих записях можно указать растровое изображение для использования в качестве источника или регион.[29] |
META_STRETCHBLT | Определяет, как выполнять передачу битовых блоков, но допускает расширение или сжатие изображения.[30] |
META_STRETCHDIB | Определяет, как выполнить передачу битового блока независимого от устройства растрового изображения, но позволяет увеличивать или уменьшать изображение. Эти записи могут указывать растровое изображение для использования в качестве источника или региона.[31] |
Записи чертежей
Записи чертежей производят вывод графики.
Имя | Описание |
---|---|
META_ARC | Рисует эллиптический тренажер дуга.[32] |
META_CHORD | Рисует аккорд.[33] |
META_ELLIPSE | Рисует эллиптический тренажер дуга.[34] |
META_EXTFLOODFILL | Заполняет область кистью.[35] |
META_EXTTEXTOUT | Нарисуйте текст со шрифтом, цветом фона и цветом текста в контексте устройства воспроизведения.[36] |
META_FILLREGION | Заполняет область указанной кистью.[37] |
META_FLOODFILL | Заполняет область кистью.[38] |
META_FRAMEREGION | Обводит кистью границу вокруг области страницы.[39] |
МЕТА_ИНВЕРТРЕГИОН | Закрашивает область изображения инвертированными цветами.[40] |
META_LINETO | Рисует полуоткрытый линия от позиции рисования, определенной в контексте устройства воспроизведения, до указанной точки.[41] |
META_PAINTREGION | Нарисуйте область текущей кистью, указанной в контексте устройства воспроизведения.[42] |
META_PATBLT | Нарисуйте область текущей кистью, указанной в контексте устройства воспроизведения, а затем объедините цвет кисти и цвет (а) поверхности, используя растровая операция.[43] |
META_PIE | Нарисуйте клин в форме пирога, ограниченный пересечением эллипса и двух радиалов - линия задается с помощью пера, установленного через контекст устройства воспроизведения, а область, ограниченная формой пирога, заполняется текущей кистью устройства воспроизведения контекст.[44] |
МЕТА_POLYLINE | Рисует серию сегментов линий, соединяя точки в указанном массиве.[45] |
МЕТА_ПОЛИГОН | Красит многоугольник состоящий из двух или более вершины соединены прямыми линиями. Многоугольник обводится пером и заполняется с помощью кисти и режима заливки многоугольника, которые определены в контексте устройства воспроизведения.[46] |
МЕТА_POLYPOLYGON | Рисует серию замкнутых многоугольников, которые могут перекрываться. Каждый многоугольник очерчен с помощью пера и заполнен с помощью кисти и режима заливки многоугольника, которые определены в контексте устройства воспроизведения.[47] |
META_RECTANGLE | Закрашивает прямоугольник, очерченный пером, заполненный кистью и заполненный кистью, определенной в контексте устройства воспроизведения.[48] |
META_ROUNDRECT | Закрашивает прямоугольник со скругленными углами. Прямоугольник обводится пером, заполняется кистью и заполняется кистью, определенной в контексте устройства воспроизведения.[49] |
META_SETPIXEL | Устанавливает пиксель с указанными координатами на указанный цвет.[50] |
META_TEXTOUT | Выводит строка символов в указанном месте, используя шрифт, цвет фона и цвет текста, которые определены в контексте устройства воспроизведения.[51] |
Записи об объектах
Записи объектов создают графические объекты и управляют ими. В файлах WMF есть две широкие категории объектов - графические объекты и объекты структуры. Объекты структуры не создаются и не удаляются в WMF явно, а вместо сложных структур. Например, BitmapCoreHeader содержит информацию о размерах и цветовом формате независимого от устройства растрового изображения,[52] который сам является частью объекта DeviceIndependentBitmap.[53] Однако графический объект определяет параметры для вывода графики, а во время воспроизведения WMF он устанавливает контекст устройства воспроизведения.[54]
Графические объекты могут быть кисти (определяет стиль, цвет и узор кисти, которые определяют, как закрашивать область изображения), шрифты (определяет свойства, влияющие на отображение текста), палитры (определяет цвета как независимые от устройства значения, определенные приложением), ручки (задает графические атрибуты линии) и регионы (которые определяют отрезки линии и кривой, определяющие форму).[54]
Имя | Описание |
---|---|
META_CREATEBRUSHINDIRECT | Создает объект кисти из объекта LogBrush (логическая кисть).[55] |
META_CREATEFONTINDIRECT | Создает объект кисти из объекта шрифта.[56] |
META_CREATEPALETTE | Создает объект палитры. |
META_CREATEPATTERNBRUSH[57] | Создает объект кисти из объекта LogBrush (логическая кисть).[58] |
META_CREATEPENINDIRECT | Создает объект пера.[59] |
META_CREATEREGION | Создает объект региона.[60] |
META_DELETEOBJECT | Удалить объект.[61] |
META_CREATEBRUSHINDIRECT | Создает объект кисти из объекта LogBrush (логическая кисть).[62] |
META_DIBCREATEPATTERNBRUSH | Создает объект кисти из независимого от устройства растрового изображения.[63] |
META_SELECTCLIPREGION | Определяет объект региона, который будет текущим область отсечения.[64] |
META_SELECTOBJECT | Выбирает объект, который будет текущим объектом для контекста устройства воспроизведения, который работает со всеми графическими объектами, кроме объектов палитры, которые должны быть установлены с помощью META_SELECTPALETTE.[65] |
META_SELECTPLAETTE | Выбирает логическую палитру для контекста устройства воспроизведения.[66] |
Государственные записи
Записи состояния управляют графическими свойствами контекста устройства воспроизведения.[67]
Имя | Описание |
---|---|
META_ANIMATEPALETTE | Переопределяет записи в логической палитре, которая определяется в контексте устройства воспроизведения с помощью указанного объекта палитры.[68] |
META_EXCLUDECLIPRECT | Устанавливает область отсечения, которая определена в контексте устройства воспроизведения, равной существующей области отсечения за вычетом указанного прямоугольника.[69] |
META_INTERSECTCLIPRECT | Устанавливает область отсечения, которая определена в контексте устройства воспроизведения, на пересечение существующей области отсечения и указанного прямоугольника.[70] |
META_MOVETO | Устанавливает позицию вывода в контексте устройства воспроизведения в указанную точку.[71] |
META_OFFSETCLIPRGN | Перемещает область отсечения, определенную в контексте устройства воспроизведения, на указанные смещения.[72] |
META_OFFSETVIEWPORTORG | Перемещает начало координат области просмотра в контексте устройства воспроизведения на заданные горизонтальные и вертикальные смещения.[73] |
META_OFFSETWINDOWORG | Перемещает исходную точку окна вывода в контексте устройства воспроизведения на заданные горизонтальные и вертикальные смещения.[74] |
META_REALIZEPALETTE | Сопоставляет записи из логической палитры, которая определена в контексте устройства воспроизведения, с системной палитрой.[75] |
META_RESIZEPALETTE | Повторно определяет размер логической палитры, определенной в контексте устройства воспроизведения.[76] |
META_RESTOREDC | Восстанавливает контекст устройства воспроизведения из ранее сохраненного контекста устройства.[77] |
META_SAVEDC | Сохраняет контекст устройства воспроизведения для последующего извлечения.[78] |
META_SCALEVIEWPORTEXT | Масштабирует горизонтальную и вертикальную границы области просмотра, которая определена в контексте устройства воспроизведения, используя отношения, сформированные указанными множителями и делителями.[79] |
META_SCALEWINDOWEXT | Масштабирует горизонтальные и вертикальные пределы окна вывода, которое определено в контексте устройства воспроизведения, с использованием соотношений, образованных указанными множителями и делителями.[80] |
META_SETBKCOLOR | Устанавливает заданный цвет фона в контексте устройства воспроизведения.[81] |
META_SETBKMODE | Устанавливает режим фонового микширования в контексте устройства воспроизведения.[82] |
META_SETLAYOUT | Определяет ориентацию макета в контексте устройства воспроизведения.[83] |
META_SETMAPMODE | Определяет режим сопоставления в контексте устройства воспроизведения.[84] |
META_SETMAPPERFLAGS | Определяет алгоритм, который использует средство сопоставления шрифтов при сопоставлении логических шрифтов с физическими шрифтами.[85] |
META_SETPALENTRIES | Определяет значения цвета RGB в диапазоне записей в логической палитре, которая определяется в контексте устройства воспроизведения.[86] |
META_SETPOLYFILLMODE | Определяет режим заливки многоугольника в контексте устройства воспроизведения для графических операций заливки многоугольников.[87] |
META_SETRELABS | Неиспользованная запись.[88] |
META_SETROP2 | Определяет режим смешивания работы с растром переднего плана в контексте устройства воспроизведения.[89] |
META_SETSTRETCHBLTMODE | Определяет режим растяжения растрового изображения в контексте устройства воспроизведения.[90] |
META_SETTEXTALIGN | Определяет значения выравнивания текста в контексте устройства воспроизведения.[91] |
META_SETTEXTCHAREXTRA | Определяет межсимвольный интервал для выравнивания текста в контексте устройства воспроизведения.[92] |
META_SETTEXTCOLOR | Определяет цвет переднего плана текста в контексте устройства воспроизведения.[93] |
META_SETTEXTJUSTIFICATION | Определяет количество места, которое нужно добавить для разрыва символов в строке выровненного текста.[94] |
META_SETVIEWPORTEXT | Определяет горизонтальную и вертикальную границы области просмотра в контексте устройства воспроизведения.[95] |
META_SETVIEWPORTORG | Определяет источник области просмотра в контексте устройства воспроизведения.[96] |
META_SETWINDOWEXT | Определяет размеры окна вывода по горизонтали и вертикали в контексте устройства воспроизведения.[97] |
META_SETWINDOWORG | Определяет источник окна вывода в контексте устройства воспроизведения.[98] |
Записи о побегах
Escape-записи - это средство расширения функциональности метафайлов с помощью записей, которые иначе не определены как тип записи WMF. Каждая escape-запись содержит функцию записи, escape-функцию и потенциально управляющие данные.
Следующие escape-записи составляют файл WMF.
Имя | Описание |
---|---|
ABORTDOC | Останавливает обработку текущего документа. [99] |
BEGIN_PATH | Открывает путь.[100] |
CHECK_JPEGFORMAT | Определяет, может ли он справиться с заданным JPEG изображение.[101] |
CHECK_PNGFORMAT | Определяет, может ли он справиться с заданным PNG изображение.[102] |
CLIP_TO_PATH | Применяет функцию к текущему PostScript обтравочный контур.[103] |
CLOSE_CHANNEL | То же, что и ENDDOC.[104] |
DOWNLOAD_FACE | Устанавливает имя шрифта на устройстве вывода.[105] |
DOWNLOAD_HEADER | Загружает наборы процедур PostScript.[106] |
DRAW_PATTERNRECT | Рисует прямоугольник с заданным узором.[107] |
ENCAPSULATED_POSTSCRIPT | Посылает произвольно инкапсулированный PostScript (EPS) данные напрямую в драйвер принтера.[108] |
END_PATH | Заканчивает путь.[109] |
ENDDOC | Уведомляет драйвер принтера о завершении нового задания на печать.[110] |
EPS_PRINTING | Указывает начало и конец печати EPS.[111] |
EXTTEXTOUT | Рисует текст, используя текущий выбранный шрифт, цвет фона и цвет текста.[112] |
GET_COLORTABLE | Получает значения таблицы цветов из драйвера принтера.[113] |
GET_DEVICEUNITS | Получает единицы устройства, в настоящее время настроенные на устройстве вывода.[114] |
GET_EXTENDED_TEXTMETRICS | Получает расширенные текстовые метрики, которые в настоящее время настроены в драйвере принтера.[115] |
GET_FACENAME | Получает имя шрифта, настроенное в настоящее время на устройстве вывода.[116] |
GET_PAIRKERNTABLE | Получает керн шрифта таблица, определенная в данный момент на устройстве вывода.[117] |
GET_PHYSPAGESIZE | Извлекает физический размер страницы, выбранный в данный момент на устройстве вывода.[118] |
GET_PRINTINGOFFSET | Получает смещение от верхнего левого угла физической страницы, где начинается фактическая печать или рисунок.[119] |
GET_PS_FEATURESETTING | Запрашивает у драйвера принтера информацию о функциях PostScript, поддерживаемых устройством вывода.[120] |
GET_SCALINGFACTOR | Получает коэффициенты масштабирования для оси x и оси y принтера.[121] |
META_ESCAPE_ENHANCED_METAFILE | Используется для встраивания метафайла EMF в метафайл WMF.[122] |
МЕТАФИЛЬ_ДРАЙВЕР | Запрашивает драйвер принтера о поддержке метафайлов на устройстве вывода.[123] |
NEWFRAME | Уведомляет драйвер принтера о том, что приложение завершило запись на страницу.[124] |
NEXTBAND | Уведомляет драйвер принтера о том, что приложение завершило запись в полосу.[125] |
ПРОЙТИ ЧЕРЕЗ | Передает произвольные данные в драйвер принтера.[126] |
POSTSCRIPT_DATA | Отправляет произвольные данные PostScript на устройство вывода.[127] |
POSTSCRIPT_IDENTIFY | Устанавливает драйвер принтера в режим PostScript или GDI.[128] |
POSTSCRIPT_IGNORE | Сообщает устройству вывода игнорировать данные PostScript.[129] |
POSTSCRIPT_INJECTION | Вставляет блок необработанных данных в поток PostScript.[130] |
POSTSCRIPT_PASSTHROUGH | Отправляет произвольные данные непосредственно в драйвер принтера, который, как ожидается, будет обрабатывать эти данные только в режиме PostScript.[131] |
OPEN_CHANNEL | Действует так же, как STARTDOC, с документом NULL и выходным именем файла, а также данными в необработанном режиме.[132] |
QUERY_DIBSUPPORT | Запрашивает драйвер принтера о поддержке DIB на устройстве вывода.[133] |
QUERY_ESCSUPPORT | Запрашивает драйвер принтера, чтобы определить, поддерживается ли конкретная escape-функция WMF на устройстве вывода.[134] |
SET_COLORTABLE | Устанавливает значения таблицы цветов.[135] |
SET_COPYCOUNT | Устанавливает количество копий.[136] |
SET_LINECAP | Задает режим окончания строки для использования при выводе на устройство вывода.[137] |
SET_LINEJOIN | Задает режим соединения линий для использования при рисовании на устройстве вывода.[138] |
SET_MITERLIMIT | Устанавливает предел длины угловых соединений для использования в чертеже на устройстве вывода.[139] |
SPCLPASSTHROUGH2 | Позволяет документам включать частные процедуры и другие произвольные данные в документы.[140] |
STARTDOC | Уведомляет драйвер принтера о запуске нового задания на печать.[141] |
Был главная уязвимость находится в escape-записях вокруг escape-записи Abort, которая хранит код процедуры отмены внутри самой записи. Это затронуло системы Windows (см. CVE -2005-4560 ) и Винный проект (видеть CVE -2006-0106 ). В соответствии с Secunia, "Уязвимость вызвана ошибкой в обработке файлов метафайлов Windows ('.wmf'), содержащих специально созданные записи SETABORTPROC 'Escape'. Такие записи позволяют выполнять произвольную пользовательскую функцию при рендеринге файла WMF терпит неудачу ".[142] Согласно документации SDK Windows 3.1, escape-код SETABORTPROC был устаревшим и заменен одноименной функцией в Windows 3.1 задолго до того, как была обнаружена уязвимость WMF.[143] Однако устаревший escape-код был сохранен для совместимости с 16-битными программами, написанными для (или, по крайней мере, обратно совместимыми с) Windows 3.0. Это изменение произошло примерно в то же время, когда Microsoft создавала 32-битную повторную реализацию GDI для Windows NT, и вполне вероятно, что уязвимость возникла во время этой попытки.
После Стив Гибсон из Gibson Research Corporation обвинил Microsoft в преднамеренном внедрении задняя дверь в их код,[144][145] Марк Руссинович представили опровержение и заявили, что:
... все было по-другому, когда создавался формат. В Windows 3.1 код модели «большой» памяти по своей природе не зависит от местоположения, и Windows никогда не обновлялась, поэтому и Windows, и приложение могли просто скопировать функцию приложения в файл WMF и предположить, что она будет работать при воспроизведении одним и тем же приложением в более поздний сеанс запуска. В любом случае неясно, предполагали ли разработчики приложения, создающие метафайлы на диске с процедурами прерывания. Кроме того, как отметил Стивен Тулуза из Microsoft в Опровержение Microsoft По утверждениям Стива, ландшафт безопасности в начале 1990-х сильно отличался от сегодняшнего, и всему коду, включая тот, который хранится в файле WMF, по своей сути доверяли.[146]
Питер Ферри из Symantec Security Response, США, также не согласен с Гибсоном, отметив, что:
Гибсон утверждал, что создается поток для запуска обработчика SetAbortProc. Фактически, никакой поток для запуска обработчика не создается - это обратный вызов, который вызывается анализатором, и синтаксический анализатор должен ждать, пока обратный вызов не вернется, в противном случае весь смысл функции (для прерывания печати) теряется. . По его собственному признанию, Гибсон не читал документацию (на самом деле он утверждал, что не смог ее найти, хотя она находится в свободном доступе на веб-сайте Microsoft), и он утверждал, что контекст устройства недоступен для обработчика функций. . Конечно, контекст устройства доступен обработчику функции - это один из двух параметров, которые ему передаются (см. Выше), и он необходим для прерывания печати. Наконец, Гибсон заявил, что поток управления не может вернуться в Windows. Это просто вопрос функции, возвращающей и отбрасывающей параметры, которые были переданы в стек. Если запись сформирована правильно, Windows продолжит анализ файла, как и раньше. ... Гибсон признает, что догадывался о нескольких вещах. К сожалению, он плохо угадал. Думаю, теперь мы знаем лучше.[147]
ЭДС
Файлы EMF имеют три возможных версии заголовков. Исходные заголовки - это просто контейнер для изображений, вторая и третья версии инкапсулируют исходный заголовок и содержат запись формата пикселей и поддержку записей OpenGL, а третья версия инкапсулирует второе расширение заголовка и увеличивает точность EMF и масштабируемость EMF, поскольку это добавлена возможность измерения расстояний до поверхностей устройства в метрической системе.[148]
Каждый заголовок EMF начинается с записи EMR_HEADER и записывает соответствующие свойства устройства, на котором было записано изображение метафайла. Исходный заголовок EMF имеет 80-байтовый заголовок и дополнительную строку описания переменной длины.[149] Другие метафайлы содержат поля расширения, которые инкапсулируют исходный заголовок. EmfMetafileHeaderExtension1
- это запись, которая вставляется непосредственно после исходного заголовка EMF, указывает, есть ли дескриптор формата пикселя и смещение объекта дескриптора в заголовке, а также поле, которое указывает, если OpenGL записи существуют в метафайле.[150] Дескриптор формата пикселя определяет возможности поверхности рисования и кодируется ли пиксель в RGBA или является индексом в таблице цветов.[151] EmfMetafileHeaderExtension2
это запись, которая вставляется сразу после EmfMetafileHeaderExtension1
запись, и он содержит два поля со значениями X и Y для измерения поверхности устройства в микрометрах.[152]
Как и файлы WMF, записи можно классифицировать по функциям, однако в файлах EMF больше типов записей, чем в файлах WMF. Записи могут быть классифицированы как элементы управления, растровые изображения, обрезки, комментарии, рисование, экранирование, создание объекта, манипулирование объектами, OpenGL, скобки пути, записи состояния и преобразования.
ЭДС +
С выходом Windows XP, то Расширенный формат метафайлов плюс расширения Был введен формат (EMF +). EMF + предоставляет способ сериализации вызовов к GDI + API так же, как WMF / EMF хранит вызовы GDI.
Существуют также сжатые версии метафайлов Windows, известные как Сжатый метафайл Windows (WMZ) и Сжатый расширенный метафайл Windows (EMZ),[153] которые в основном gzip сжатые файлы WMF и EMF соответственно.
Реализации
Формат WMF был разработан для выполнения на уровне Windows GDI для восстановления изображение, но поскольку двоичные файлы WMF содержат определение графических примитивов GDI, составляющих это изображение, можно разработать альтернативные библиотеки, которые отображают двоичные файлы WMF или конвертируют их в другие графические форматы.
Смотрите также
Рекомендации
- ^ Формат метафайлов Windows (PDF), Microsoft, стр. 16
- ^ «[MS-WMF]: формат метафайлов Windows». MSDN. 2015-06-30. Получено 2015-07-26.
- ^ [MS-EMF]: расширенный формат метафайлов (PDF), Microsoft, стр. 17
- ^ [MS-EMFPLUS]: расширенный формат метафайлов плюс расширения (PDF), Microsoft, стр. 19
- ^ Справочник программистов Microsoft Windows 3.1, ресурсы тома 4, Microsoft Press 1992, ISBN 1-55615-494-1, глава 3, с. 21-45
- ^ Каолан Макнамара. "Справочник по метафайлу окна (wmf)". Получено 2008-06-01.
Эти коды операций не реализованы по той причине, что я не знаю, что они собой представляют, нет известной документации.
- ^ «[MS-WMF]: спецификация формата метафайлов Windows». Получено 2008-06-01.
- ^ «Обещание открытой спецификации Microsoft». Получено 2008-06-01.
- ^ а б Расширенные метафайлы в Win32, Microsoft Developer Network Technology Group, 10 июня 1993 г.
- ^ а б Леонард, Шон (сентябрь 2016 г.). «Метафайлы Windows». Типы Windows Image Media. IETF. п. 1. Дои:10.17487 / RFC7903. ISSN 2070-1721. RFC 7903. Получено 8 февраля, 2020.
- ^ «ЭДС», Формат файла, Aspose Pty Ltd, получено 2020-01-20
- ^ Петцольд, Чарльз (11 октября 1994 г.), «Метафайлы NT и объекты GDI», Журнал ПК, стр. 343–347
- ^ Поляков, Алексей; Брусенцев, Виталий (2005). Программирование графики с помощью GDI + и DirectX. Публикация A-List. п. 68. ISBN 1-931769-39-7.
- ^ «3.1.4.1 Таблица объектов WMF», [MS-WMF]: расширенный формат метафайлов (PDF), Microsoft, стр. 187
- ^ «3.1.1.1 Таблица объектов EMF», [MS-EMF]: спецификация формата метафайлов Windows (PDF), Microsoft, стр. 212-214
- ^ [MS-EMFPLUS]: расширенный формат метафайлов плюс расширения (PDF), Microsoft, стр. 204–205.
- ^ «Рисунок 1. Структуры исходных и размещаемых метафайлов Windows», Формат метафайлов Windows (PDF), Microsoft, стр. 17
- ^ Q66949: ИНФОРМАЦИЯ: функции метафайлов Windows и размещаемые метафайлы Aldus, Microsoft - через Архив базы знаний: архив ранней базы знаний Майкрософт
- ^ а б c «1.3.1 Структура метафайла», Формат метафайлов Windows (PDF), Microsoft, стр. 17
- ^ "2.3.2.3 Запись META_PLACEABLE", Формат метафайлов Windows (PDF), Microsoft, стр. 115
- ^ Формат метафайлов Windows (PDF), Microsoft, стр. 55,
<55> Раздел 2.3.2.3: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51 и Windows 95: Эта функция не поддерживается.
- ^ "2.3.2.2 Запись MTF_HEADERRECORD", Формат метафайлов Windows (PDF), Microsoft, стр. 114
- ^ "2.3.2.2 Запись MTF_HEADERRECORD", Формат метафайлов Windows (PDF), Microsoft, стр. 114
- ^ «2.3.2.1 Запись MTF_EOF», Формат метафайлов Windows (PDF), Microsoft, стр. 114
- ^ «1.1 Глоссарий», [MS-WMF]: спецификация формата метафайлов Windows (PDF), Microsoft, стр. 13, получено 2020-01-24
- ^ «2.3.1.1 Запись META_BITBLT», [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 101–103, получено 2020-01-24
- ^ «2.3.1.2 Запись META_DIBBITBLT», [MS-WMF]: спецификация формата метафайлов Windows (PDF), Microsoft, стр. 103-106, получено 2020-01-24
- ^ «2.3.1.3 Запись META_DIBSTRETCHBITBLT», [MS-WMF]: спецификация формата метафайлов Windows (PDF), Microsoft, стр. 106-108, получено 2020-01-24
- ^ "2.3.1.4 Запись META_SETDIBTODEV", [MS-WMF]: спецификация формата метафайлов Windows (PDF), Microsoft, стр. 108-109, получено 2020-01-24
- ^ "2.3.1.5 Запись META_STRETCHBLT", [MS-WMF]: спецификация формата метафайлов Windows (PDF), Microsoft, стр. 109-110, получено 2020-01-24
- ^ «2.3.1.6 Запись META_STRETCHDIB», [MS-WMF]: спецификация формата метафайлов Windows (PDF), Microsoft, стр. 103-106, получено 2020-01-24
- ^ «2.3.3.1 Запись META_ARC», [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 101–103, получено 2020-01-24
- ^ «2.3.3.2 Запись META_CHORD», [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 117–118, получено 2020-01-24
- ^ «2.3.3.3 Запись META_ELLIPSE», [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 119, получено 2020-01-24
- ^ "2.3.3.4 Запись META_EXTFLOODFILL", [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 119–120, получено 2020-01-24
- ^ «2.3.3.5 Запись META_EXTTEXTOUT», [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 119–120, получено 2020-01-24
- ^ "2.3.3.6 Запись META_FILLREGION", [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 121, получено 2020-01-24
- ^ "2.3.3.7 Запись META_FLOODFILL", [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 119–120, получено 2020-01-24
- ^ "2.3.3.8 Запись META_FRAMEREGION", [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 122–123, получено 2020-01-24
- ^ "2.3.3.9 Запись META_INVERTREGION", [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 123, получено 2020-01-24
- ^ "2.3.3.10 Запись META_LINETO", [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 123–124, получено 2020-01-24
- ^ "2.3.3.11 Запись META_PAINTREGION", [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 124, получено 2020-01-24
- ^ "2.3.3.12 Запись META_PATBLT", [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 124–125, получено 2020-01-24
- ^ «2.3.3.13 Запись META_PIE», [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 125–126, получено 2020-01-24
- ^ "2.3.3.14 Запись META_POLYLINE", [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 126, получено 2020-01-24
- ^ "2.3.3.15 Запись META_POLYGON", [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 127, получено 2020-01-24
- ^ "2.3.3.16 Запись META_POLYPOLYGON", [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 127–128, получено 2020-01-24
- ^ "2.3.3.17 Запись META_RECTANGLE", [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 127–128, получено 2020-01-24
- ^ "2.3.3.18 Запись META_ROUNDRECT", [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 128–129, получено 2020-01-24
- ^ "2.3.3.19 Запись META_SETPIXEL", [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 129–130, получено 2020-01-24
- ^ "2.3.3.20 Запись META_TEXTOUT", [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 130, получено 2020-01-24
- ^ "2.2.2.2. Объект BitmapCoreHeader", [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 85, получено 2020-01-25
- ^ "2.2.2.9. Объект DeviceIndependentBitmap", [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 91, получено 2020-01-25
- ^ а б «2.2.1. Графические объекты», [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 79, получено 2020-01-25
- ^ "2.3.4.1 Запись META_CREATEBRUSHINDIRECT", [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 131–132, получено 2020-01-25
- ^ "2.3.4.2 Запись META_CREATEFONTINDIRECT", [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 132, получено 2020-01-25
- ^ "2.3.4.4 Запись META_CREATEPATTERNBRUSH", [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 133–135, получено 2020-01-25
- ^ "2.3.4.3 Запись META_CREATEPALETTE", [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 132–133, получено 2020-01-25
- ^ "2.3.4.5 Запись META_CREATEPENINDIRECT", [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 134–135, получено 2020-01-25
- ^ "2.3.4.6 Запись META_CREATEREGION", [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 135, получено 2020-01-25
- ^ "2.3.4.7 Запись META_DELETEOBJECT", [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 135, получено 2020-01-25
- ^ "2.3.4.8 Запись META_CREATEBRUSHINDIRECT", [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 135–136, получено 2020-01-25
- ^ "2.3.4.9 Запись META_DIBCREATEPATTERNBRUSH", [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 136–137, получено 2020-01-25
- ^ "2.3.4.10 Запись META_SELECTCLIPREGION", [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 137, получено 2020-01-25
- ^ "2.3.4.11 Запись META_SELECTOBJECT", [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 137–138, получено 2020-01-25
- ^ "2.3.4.11 Запись META_SELECTPLAETTE", [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 139, получено 2020-01-25
- ^ «2.3.5 Типы записей состояния», [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 138, получено 2020-01-28
- ^ «2.3.5.1 Запись META_ANIMATEPALETTE», [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 140, получено 2020-01-28
- ^ "2.3.5.2 Запись META_EXCLUDECLIPRECT", [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 140–141, получено 2020-01-28
- ^ "2.3.5.3 Запись META_INTERSECTCLIPRECT", [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 141–142, получено 2020-01-28
- ^ «2.3.5.1 Запись META_MOVETO», [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 142, получено 2020-01-28
- ^ "2.3.5.4 Запись META_OFFSETCLIPRGN", [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 142–143, получено 2020-01-28
- ^ "2.3.5.5 Запись META_OFFSETVIEWPORTORG", [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 143, получено 2020-01-28
- ^ "2.3.5.6 Запись META_OFFSETWINDOWORG", [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 131–132, получено 2020-01-28
- ^ "2.3.5.7 Запись META_REALIZEPALETTE", [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 143–144, получено 2020-01-28
- ^ "2.3.5.8 Запись META_RESIZEPALETTE", [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 144, получено 2020-01-28
- ^ "2.3.5.9 Запись META_RESTOREDC", [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 145, получено 2020-01-28
- ^ "2.3.5.10 Запись META_SAVEDC", [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 145, получено 2020-01-28
- ^ "2.3.5.11 Запись META_SCALEVIEWPORTEXT", [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 145–146, получено 2020-01-28
- ^ "2.3.5.12 Запись META_SCALEWINDOWEXT", [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 146–147, получено 2020-01-28
- ^ "2.3.5.13 Запись META_SETBKCOLOR", [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 147, получено 2020-01-28
- ^ "2.3.5.14 Запись META_SETBKMODE", [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 147–148, получено 2020-01-28
- ^ "2.3.5.15 Запись META_SETLAYOUT", [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 148, получено 2020-01-28
- ^ "2.3.5.16 Запись META_SETMAPMODE", [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 148–149, получено 2020-01-28
- ^ "2.3.5.17 Запись META_SETMAPPERFLAGS", [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 131–132, получено 2020-01-28
- ^ "2.3.5.18 Запись META_ANIMATEPALETTE", [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 149, получено 2020-01-28
- ^ "2.3.5.19 Запись META_SETPALENTRIES", [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 149–150, получено 2020-01-28
- ^ "2.3.5.20 Запись META_SETRELABS", [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 150, получено 2020-01-28
- ^ "2.3.5.21 Запись META_SETROP2", [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 151, получено 2020-01-28
- ^ «2.3.5.1 Запись META_SETSTRETCHBLTMODE», [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 151–152, получено 2020-01-28
- ^ "2.3.5.22 Запись META_SETTEXTALIGN", [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 152, получено 2020-01-28
- ^ «2.3.5.1 Запись META_SETTEXTCHAREXTRA», [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 152–153, получено 2020-01-28
- ^ "2.3.5.23 Запись META_SETTEXTCOLOR", [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 153, получено 2020-01-28
- ^ "2.3.5.24 Запись META_SETTEXTJUSTIFICATION", [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 153–154, получено 2020-01-28
- ^ "2.3.5.25 Запись META_SETVIEWPORTEXT", [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 154, получено 2020-01-28
- ^ "2.3.5.26 Запись META_SETVIEWPORTORG", [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 154–155, получено 2020-01-28
- ^ "2.3.5.27 Запись META_SETWINDOWEXT", [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 155, получено 2020-01-28
- ^ "2.3.5.28 Запись META_SETWINDOWORG", [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 155, получено 2020-01-28
- ^ «2.3.6.2. Запись ABORTDOC», [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 158–159, получено 2020-01-28
- ^ "2.3.6.3. Запись BEGIN_PATH", [MS-WMF]: спецификация формата метафайлов Windows (PDF), п. 159, получено 2020-01-28
- ^ «2.3.6.4. Запись CHECK_JPEGFORMAT», [MS-WMF]: спецификация формата метафайлов Windows (PDF), стр. 159–160, получено 2020-01-28
- ^ «2.3.6.5. Запись CHECK_PNGFORMAT», [MS-WMF]: Windows Metafile Format Specification (PDF), п. 160, получено 2020-01-28
- ^ "2.3.6.6. CLIP_TO_PATH Record", [MS-WMF]: Windows Metafile Format Specification (PDF), п. 160, получено 2020-01-28
- ^ "2.3.6.7. CLOSE_CHANNEL Record", [MS-WMF]: Windows Metafile Format Specification (PDF), п. 162, получено 2020-01-28
- ^ "2.3.6.8. DOWNLOAD_FACE Record", [MS-WMF]: Windows Metafile Format Specification (PDF), стр. 162–163, получено 2020-01-28
- ^ "2.3.6.9. DOWNLOAD_HEADER Record", [MS-WMF]: Windows Metafile Format Specification (PDF), pp. 158–159, получено 2020-01-28
- ^ "2.3.6.10. DRAW_PATTERNRECT Record", [MS-WMF]: Windows Metafile Format Specification (PDF), стр. 163–164, получено 2020-01-28
- ^ "2.3.6.11. ENCAPSULATED_POSTSCRIPT Record", [MS-WMF]: Windows Metafile Format Specification (PDF), п. 164, получено 2020-01-28
- ^ "2.3.6.12. END_PATH Record", [MS-WMF]: Windows Metafile Format Specification (PDF), стр. 164–165, получено 2020-01-28
- ^ "2.3.6.13. ENDDOC Record", [MS-WMF]: Windows Metafile Format Specification (PDF), п. 165, получено 2020-01-28
- ^ "2.3.6.14. EPS_PRINTING Record", [MS-WMF]: Windows Metafile Format Specification (PDF), стр. 165–166, получено 2020-01-28
- ^ "2.3.6.15. EXTTEXTOUT Record", [MS-WMF]: Windows Metafile Format Specification (PDF), pp. 166–167, получено 2020-01-28
- ^ "2.3.6.16. GET_COLORTABLE Record", [MS-WMF]: Windows Metafile Format Specification (PDF), стр. 167–168, получено 2020-01-28
- ^ "2.3.6.17. GET_DEVICEUNITS Record", [MS-WMF]: Windows Metafile Format Specification (PDF), п. 168, получено 2020-01-28
- ^ "2.3.6.18. GET_EXTENDED_TEXTMETRICS Record", [MS-WMF]: Windows Metafile Format Specification (PDF), стр. 168–169, получено 2020-01-28
- ^ "2.3.6.19. GET_FACENAME Record", [MS-WMF]: Windows Metafile Format Specification (PDF), п. 169, получено 2020-01-28
- ^ "2.3.6.20. GET_PAIRKERNTABLE Record", [MS-WMF]: Windows Metafile Format Specification (PDF), стр. 169–170, получено 2020-01-28
- ^ "2.3.6.21. GET_PHYSPAGESIZE Record", [MS-WMF]: Windows Metafile Format Specification (PDF), п. 170, получено 2020-01-28
- ^ "2.3.6.22. GET_PRINTINGOFFSET Record", [MS-WMF]: Windows Metafile Format Specification (PDF), стр. 170–171, получено 2020-01-28
- ^ "2.3.6.23. GET_PS_FEATURESETTING Record", [MS-WMF]: Windows Metafile Format Specification (PDF), п. 171, получено 2020-01-28
- ^ "2.3.6.24. GET_SCALINGFACTOR Record", [MS-WMF]: Windows Metafile Format Specification (PDF), pp. 171–172, получено 2020-01-28
- ^ "2.3.6.25. META_ESCAPE_ENHANCED_METAFILE Record", [MS-WMF]: Windows Metafile Format Specification (PDF), стр. 172–173, получено 2020-01-28
- ^ "2.3.6.26. METAFILE_DRIVER Record", [MS-WMF]: Windows Metafile Format Specification (PDF), pp. 173–174, получено 2020-01-28
- ^ "2.3.6.27. NEWFRAME Record", [MS-WMF]: Windows Metafile Format Specification (PDF), стр. 174–175, получено 2020-01-28
- ^ "2.3.6.28. NEXTBAND Record", [MS-WMF]: Windows Metafile Format Specification (PDF), стр. 174–175, получено 2020-01-28
- ^ "2.3.6.29. PASSTHROUGH Record", [MS-WMF]: Windows Metafile Format Specification (PDF), п. 175, получено 2020-01-28
- ^ "2.3.6.30. POSTSCRIPT_DATA Record", [MS-WMF]: Windows Metafile Format Specification (PDF), п. 176, получено 2020-01-28
- ^ "2.3.6.31. POSTSCRIPT_IDENTIFY Record", [MS-WMF]: Windows Metafile Format Specification (PDF), стр. 176–177, получено 2020-01-28
- ^ "2.3.6.32. POSTSCRIPT_IGNORE Record", [MS-WMF]: Windows Metafile Format Specification (PDF), п. 177, получено 2020-01-28
- ^ "2.3.6.33. POSTSCRIPT_INJECTION Record", [MS-WMF]: Windows Metafile Format Specification (PDF), стр. 177–178, получено 2020-01-28
- ^ "2.3.6.34. POSTSCRIPT_PASSTHROUGH Record", [MS-WMF]: Windows Metafile Format Specification (PDF), п. 178, получено 2020-01-28
- ^ "2.3.6.35. OPEN_CHANNEL Record", [MS-WMF]: Windows Metafile Format Specification (PDF), п. 179, получено 2020-01-28
- ^ "2.3.6.36. QUERY_DIBSUPPORT Record", [MS-WMF]: Windows Metafile Format Specification (PDF), стр. 179–180, получено 2020-01-28
- ^ "2.3.6.37. QUERY_ESCSUPPORT Record", [MS-WMF]: Windows Metafile Format Specification (PDF), п. 180, получено 2020-01-28
- ^ "2.3.6.38. SET_COLORTABLE Record", [MS-WMF]: Windows Metafile Format Specification (PDF), стр. 180–181, получено 2020-01-28
- ^ "2.3.6.39. SET_COPYCOUNT Record", [MS-WMF]: Windows Metafile Format Specification (PDF), п. 181, получено 2020-01-28
- ^ "2.3.6.40. SET_LINECAP Record", [MS-WMF]: Windows Metafile Format Specification (PDF), pp. 181–182, получено 2020-01-28
- ^ "2.3.6.41. SET_LINEJOIN Record", [MS-WMF]: Windows Metafile Format Specification (PDF), стр. 182–183, получено 2020-01-28
- ^ "2.3.6.42. SET_MITERLIMIT Record", [MS-WMF]: Windows Metafile Format Specification (PDF), п. 183, получено 2020-01-28
- ^ "2.3.6.43. SPCLPASSTHROUGH2 Record", [MS-WMF]: Windows Metafile Format Specification (PDF), стр. 183–184, получено 2020-01-28
- ^ "2.3.6.44. STARTDOC Record", [MS-WMF]: Windows Metafile Format Specification (PDF), п. 184, получено 2020-01-28
- ^ "Microsoft Windows WMF "SETABORTPROC" Arbitrary Code Execution". Secunia. Secunia Advisory: SA18255. Архивировано из оригинал on January 2, 2006.
- ^ Pscript-Supported Escapes, Microsoft, получено 2020-01-28
- ^ "The Windows MetaFile Backdoor?". GRC Security сейчас! (Подкаст). Gibson Research Corporation. 12 января 2006 г.. Получено 2020-01-28.
- ^ Гибсон, Стив (January 12, 2006), "Re: You won't want to miss tonight's Security Now!, #22", grc.news.feedback, получено 2020-01-28
- ^ Руссинович Марк (January 18, 2006), «Внутри бэкдора WMF», TechNet, Microsoft – via Microsoft Tech Community
- ^ Ферри, Питер (2 февраля 2006 г.), Внутри формата мета-файлов Windows (PDF), Бюллетень вирусов, получено 2020-01-24 - через Symantec
- ^ "1.3.1. Metafile Structure", [MS-EMF]: Enhanced Metafile Format (PDF), Microsoft, pp. 17–18
- ^ "2.3.4.2.1 EmfMetafileHeader Record", [MS-EMF]: Enhanced Metafile Format (PDF), Microsoft, p. 120
- ^ "2.2.10 HeaderExtension1 Object", [MS-EMF]: Enhanced Metafile Format (PDF), Microsoft, pp. 57–58
- ^ "2.2.22 PixelFormatDescriptor Object", [MS-EMF]: Enhanced Metafile Format (PDF), Microsoft, pp. 68–71
- ^ "2.3.4.2.3 EmfMetafileHeaderExtension2 Record", [MS-EMF]: Enhanced Metafile Format (PDF), Microsoft, pp. 122–124
- ^ "You receive a "This file is an unsupported graphic format" error message when you try to insert a picture into a PowerPoint for Mac presentation". Microsoft. Архивировано из оригинал на 2014-04-19. Получено 2014-04-19.