На главную страницу


View in English


Формат файла PIF в различных версиях Windows

Файлы описываемого формата применяются во всех существующих на сегодня версиях Windows. Ранее файлы сходного формата применялись в программных продуктах TopView и DesqView. Эти файлы предназначены для описания способа запуска приложений DOS в среде соответствующих операционных систем и графических оболочек.

Официально формат файла PIF является недокументированным. Формат, описанный в настоящем документе, получен экспериментальным путем. Автор не несет ответственности за возможные неточности в данном документе, а также за любой ущерб, вызванный применением сведений, приведенных в настоящем документе.

В Windows 1.X, 2.X, а также в TopView и DesqView PIF-файлы состояли только из основного раздела и имели длину 0171h байт. Впоследствии, начиная с Windows 3.0, в PIF-файлах появились дополнительные разделы. Для совместимости с более ранними версиями заголовок основного раздела расположился после данных раздела, по смещению 0171h от начала файла. Все разделы, кроме основного, могут отсутствовать. В этом случае недостающие данные принимают значения по умолчанию или берутся из других разделов. Все разделы, кроме основного, могут располагаться в произвольном порядке. Данные основного раздела всегда располагаются в начале файла. Минимальная длина PIF-файла, воспринимаемого всеми версиями Windows - 0187h байт (основной раздел и его заголовок). Все версии Windows, кроме NT и 2000, нормально воспринимают PIF-файлы длиной 0171h байт.

Структуру PIF-файла можно представить следующим образом:

Смещение от начала файла Длина Часть файла
0000h 0171h Основной раздел
0171h 0016h Заголовок основного раздела
0187h 0016h Заголовок первого раздела
019Dh   Первый раздел
  0016h Заголовок второго раздела
    Второй раздел
    ...
  0016h Заголовок последнего раздела
    Последний раздел

Чтение PIF-файла следует начинать с выяснения его длины. Если она равна 0171h, значит, это PIF-файл в формате Windows 1.X. В этом случае следует читать данные основного раздела с начала файла. Если длина превышает 0171h, следует читать заголовок основного раздела по смещению 0171h от начала файла. Дальнейшее чтение следует производить по данным из заголовка основного раздела.

На настоящий момент известны следующие разделы PIF-файла:

Имя раздела Длина данных Применение
MICROSOFT PIFEX 0171h Основной раздел, все ОС
WINDOWS 286 3.0 0006h Windows 3.X в стандартном режиме
WINDOWS 386 3.0 0068h Windows 3.X в расширенном режиме, 95, 98, NT, 2000
WINDOWS NT  3.1 008Eh Windows NT, 2000
WINDOWS NT  4.0 068Ch Windows NT 4.0, 2000
WINDOWS VMM 4.0 01ACh Windows 95, 98, NT 4.0, 2000
CONFIG  SYS 4.0 переменная Windows 95, 98
AUTOEXECBAT 4.0 переменная Windows 95, 98

Содержимое разделов PIF-файла представлено в следующей таблице.

Условные обозначения в графе "Применимость к версиям Windows":

Смещение от начала данных раздела Длина Значение по умолчанию Принимаемые значения Назначение Применимость к версиям Windows Примечание
1.X, 2.X 3.X в режиме: 95, 98 NT, 2000
Стан-
дарт-
ный
Рас-
ши-
рен-
ный

Заголовок раздела. Длина - 0016h

0000h 16     Имя раздела   S X 95 NT Кодировка ANSI, завершается нулевым символом.
0010h 2     Смещение заголовка следующего раздела от начала файла   S X 95 NT В последнем разделе принимает значение FFFFh.
0012h 2     Смещение начала данных раздела от начала файла   S X 95 NT  
0014h 2     Длина раздела   S X 95 NT В байтах.

Основной раздел. Длина - 0171h

0000h 1 00h   Не используется            
0001h 1 78h   Контрольная сумма 1 S X 95 NT В Windows 95/98 - всегда 78h, в остальных ОС - значение меняется. Никогда не проверяется.
0002h 30     Заголовок окна 1 S X 95 NT Кодировка OEM. Дополняется пробелами до 30 символов.
0020h 2 0280h в 32-разрядных ОС, 0080h в Windows 3.X, 0034h в Windows 1.X, 2.X.   Максимальный объем основной памяти в килобайтах 1 S X 95 NT Устанавливается PIF-редактором только в Windows 1.X, 2.X и стандартном режиме Windows 3.X, в остальных случаях принимает значение по умолчанию.
0022h 2 0000h в 32-разрядных ОС, 0080h в Windows 3.X, 0034h в Windows 1.X, 2.X.   Минимальный объем основной памяти в килобайтах 1 S X 95 NT
0024h 63     Имя запускаемого файла без параметров 1 S X 95 NT Может содержать полный путь. В кавычки не заключается. Завершается нулевым символом. Кодировка OEM.
0063h 2 0000h в 32-разрядных ОС, 0010h в остальных ОС 0001h Прямая модификация памяти. 1         Битовая маска. В Windows 1.X, 2.X бит 02h относится к параметру Screen Exchange - Graphics/Text.
0002h Графи-
ческий/мульти-
текстовый режим
1 S      
0004h Запретить переключение программы 1 S      
0008h Нет обмена экранами 1 S      
0010h Закрывать окно по завершении. 1 S X 95 NT
0040h Прямое взаимодействие с COM1 1 S      
0080h Прямое взаимодействие с COM2 1 S      
0065h 64     Рабочий каталог 1 S X 95 NT В кавычки не заключается. Завершается нулевым символом. Кодировка OEM.
00A5h 64     Строка параметров 1 S   95 NT Завершается нулевым символом. Кодировка OEM. В 32-разрядных ОС и в расширенном режиме Windows 3.X это значение используется только если отсутствует раздел, содержащий строку параметров для данной ОС.
00E5h 1 00h в 32-разрядных ОС, 7Fh в Windows 3.X.   ?? Номер видеорежима 1 S X     Не используется.
00E6h 1 01h   ?? Количество выделенных текстовых страниц видеопамяти 1 S X 95 NT Не используется.
00E7h 1 00h   ?? Первое используемое прерывание 1 S X 95 NT Не используется.
00E8h 1 FFh   ?? Последнее используемое прерывание 1 S X 95 NT Не используется.
00E9h 1 19h   ?? Высота экрана в символах 1 S X 95 NT Не используется.
00EAh 1 50h   ?? Ширина экрана в символах 1 S X 95 NT Не используется.
00EBh 1 00h   ?? Позиция окна по горизонтали           Не используется.
00ECh 1 00h   ?? Позиция окна по вертикали           Не используется.
00EDh 2 0007h 0007h ?? Номер последней текстовой видеостраницы 1 S X 95 NT Номер последней текстовой видеостраницы не используется. В Windows 1.X, 2.X бит 0010h относится к параметру Program Switch - Graphics/Multiple Text.
0010h Графи-
ческий/мульти-
текстовый режим
1 S      
00EFh 128 00...0000h   Не используется.            
016Fh 2 0000h в Windows 95/98, 20E0h в Windows NT/2000 и Windows 3.X, 60E0h в Windows 1.X, 2.X. 0010h Прямое взаимодействие с клавиатурой 1 S       Битовая маска. В Windows 1.X, 2.X бит 4000h всегда установлен, при установке параметра Directly Modify Screen одновременно устанавливаются биты 0080h и 0040h.
0020h ?? Использовать сопроцессор 1 S X   NT
0040h ?? Останавливаться в фоновом режиме 1 S X   NT
0080h Прямая запись текста на экран 1 S X   NT
2000h ?? Использовать подмену векторов прерываний 1 S X   NT
4000h Имеются параметры командной строки 1 S      

Раздел "WINDOWS 386 3.0". Длина данных - 0068h.

0000h 2 0280h   Максимальный объем основной памяти в килобайтах, который может занять приложение     X 95 NT Для 32-разрядных ОС авто - 640 и более, для Windows 3.X выделить всю память - FFFFh.
0002h 2 0000h в 32-разрядных ОС, 0080h в Windows 3.X   Запрашиваемый объем основной памяти в килобайтах     X 95 NT Для 32-разрядных ОС авто - 0, для Windows 3.X выделить всю память - FFFFh.
0004h 2 0064h   Активный приоритет     X 95 NT Диапазон значений: 1-10000.
0006h 2 0032h   Фоновый приоритет     X 95 NT
0008h 2 FFFFh в 32-разрядных ОС, 0400h в Windows 3.X   Максимальный объем памяти EMS в килобайтах, который может занять приложение     X 95 NT Максимальное значение - 16384, авто для 32-разрядных ОС или выделить всю для Windows 3.X - FFFFh.
000Ah 2 0000h   Запрашиваемый объем памяти EMS     X 95 NT Максимальное значение - 16384, авто для 32-разрядных ОС - 0, выделить всю для Windows 3.X - FFFFh.
000Ch 2 FFFFh в 32-разрядных ОС, 0400h в Windows 3.X   Максимальный объем памяти XMS в килобайтах, который может занять приложение     X 95 NT Максимальное значение - 16384, авто для 32-разрядных ОС или выделить всю для Windows 3.X - FFFFh.
000Eh 2 0000h   Запрашиваемый объем памяти XMS     X 95 NT Максимальное значение - 16384, авто для 32-разрядных ОС - 0, выделить всю для Windows 3.X - FFFFh.
0010h 4 00021002h 00000001h Разрешить выход, когда активна     X     Битовая маска. В 32-разряюных ОС бит 00001000h отключается, когда установлен максимальный приоритет.
00000002h Продолжение работы в фоновом режиме     X 95 NT
00000004h Исключительное выполнение     X    
00000008h Полноэкранный режим     X 95 NT
00000020h Не использовать Alt+Tab     X 95 NT
00000040h Не использовать Alt+Esc     X 95 NT
00000080h Не использовать Alt+Space     X 95 NT
00000100h Не использовать Alt+Enter     X 95 NT
00000200h Не использовать Alt+PrtSc     X 95 NT
00000400h Не использовать PrtSc     X 95 NT
00000800h Не использовать Ctrl+Esc     X 95 NT
00001000h Определять время простоя     X 95 NT
00002000h Не использовать HMA     X 95 NT
00004000h Использовать быстрый вызов     X 95 NT
00008000h Память EMS заблокирована     X    
00010000h Память XMS заблокирована     X    
00020000h Быстрая вставка     X 95 NT
00040000h Блокировать память программы     X    
00080000h Защита памяти       95 NT
00100000h Свернутое окно     X 95 NT
00200000h Развернутое окно     X 95 NT
00800000h Режим MS-DOS       95  
01000000h Не давать обнаружить Windows       95  
04000000h Не предлагать автоматически переход в режим MS-DOS       95  
10000000h Не предупреждать перед переходом в режим MS-DOS       95  
0014h 2 001Fh 0001h Эмулировать видео ROM     X 95 NT Битовая маска.
0002h Не проверять порты: текст     X 95 NT
0004h Не проверять порты: графика низкого разрешения     X 95 NT
0008h Не проверять порты: графика высокого разрешения     X 95 NT
0010h Видеопамять: текст     X 95 NT
0020h Видеопамять: графика низкого разрешения     X    
0040h Видеопамять: графика высокого разрешения     X    
0080h Удерживать видеопамять     X    
0016h 2 0000h   Неизвестно            
0018h 2 0000h   Скан-код клавиши быстрого вызова.     X 95 NT Cм. Microsoft KB Q37617.
001Ah 2 0000h 0003h Клавиша-модификатор быстрого вызова: Shift     X 95 NT Битовая маска.
0004h Клавиша-модификатор быстрого вызова: Ctrl     X 95 NT
0008h Клавиша-модификатор быстрого вызова: Alt     X 95 NT
001Ch 2 0000h 000Fh Применять клавишу быстрого вызова     X 95 NT  
001Eh 2 0000h 0001h Признак расширенного скан-кода клавиши быстрого вызова     X 95 NT  
0020h 2 0000h, 0064h в Windows NT   Неизвестно         NT  
0022h 2 0000h, 0032h в Windows NT   Неизвестно         NT  
0024h 4 00000000h   Неизвестно            
0028h 64     Строка параметров     X 95 NT Завершается нулевым символом. Кодировка OEM. В Windows 95/98/NT/2000 имеется ошибка, из-за которой строка параметров сохраняется в кодировке ANSI, кроме того, в Windows 95/98 программе передается это значение, еще раз преобразованное в кодировку ANSI.

Раздел "WINDOWS 286 3.0". Длина данных - 0006h.

0000h 2 0400h   Максимальный объем памяти XMS   S       Максимальное значение - 16384, выделить всю - FFFFh.
0002h 2 0000h   Запрашиваемый объем памяти XMS   S       Максимальное значение - 16384, выделить всю - FFFFh.
0004h 2 0000h 0001h Не использовать Alt+Tab   S       Битовая маска.
0002h Не использовать Alt+Esc   S      
0004h Не использовать Alt+PrtSc   S      
0008h Не использовать PrtSc   S      
0010h Не использовать Ctrl+Esc   S      
0020h Не сохранять экран   S      
4000h Прямое взаимодействие с COM3   S      
8000h Прямое взаимодействие с COM4   S      

Раздел "WINDOWS VMM 4.0". Длина данных - 01ACh.

0000h 88 00...0000h   Неизвестно            
0058h 80 PIFMGR.DLL   Имя файла, содержащего значок       95 NT Кодировка ANSI, длинное имя без кавычек, может содержать полный путь, завершается нулевым символом.
00A8h 2 0000h   Номер значка       95 NT Первый значок в файле имеет номер 0.
00AAh 2 0002h 0002h Продолжать работу в фоновом режиме       95 NT Битовая маска.
0010h Не предупреждать при завершении       95 NT
0020h Не использовать Заставку       95 NT
00ACh 10 00...0000h   Неизвестно            
00B6h 2 0032h   Приоритет       95 NT Число от 0 до 100, 0 - максимальный приоритет, 100 - минимальный.
00B8h 2 0001h 0001h Эмулировать видео-ПЗУ       95 NT Битовая маска.
0080h Не выделять видеопамять динамически       95 NT
0100h Полноэкранный режим       95 NT
00BAh 8 00...0000h   Неизвестно            
00C2h 2 0000h   Количество текстовых строк в окне       95   Авто - 0, или соответствующее число (25, 43 или 50).
00C4h 2 0001h 0001h Быстрая вставка       95 NT Битовая маска.
0020h Не использовать Alt+Tab       95 NT
0040h Не использовать Alt+Esc       95 NT
0080h Не использовать Alt+Space       95 NT
0100h Не использовать Alt+Enter       95 NT
0200h Не использовать Alt+PrtSc       95 NT
0400h Не использовать PrtSc       95 NT
0800h Не использовать Ctrl+Esc       95 NT
00C6h 2 0000h   Неизвестно            
00C8h 2 0005h   Неизвестно       95 NT  
00CAh 2 0019h   Неизвестно       95 NT  
00CCh 2 0003h   Неизвестно       95 NT  
00CEh 2 00C8h   Неизвестно       95 NT  
00D0h 2 03E8h   Неизвестно       95 NT  
00D2h 2 0002h   Неизвестно       95 NT  
00D4h 2 000Ah   Неизвестно       95 NT  
00D6h 2 0001h 0001h Не использовать мышь для выделения       95   Битовая маска.
0002h Монопольное использование мыши       95 NT
00D8h 6 00...0000h   Неизвестно            
00DEh 2 001Ch 0004h Использовать растровые шрифты       95 NT Битовая маска.
0008h Использовать TrueType шрифты       95 NT
0010h Автоматически выбирать размер шрифта       95 NT
0400h Текущий шрифт - растровый       95 NT
0800h Текущий шрифт - TrueType       95 NT
00E0h 2 0000h   Неизвестно            
00E2h 2 0000h   Размер текущего шрифта по горизонтали (только для растровых шрифтов).       95 NT Авто или TrueType - 0000h, растровый шрифт - размер по горизонтали в пикселах.
00E4h 2 0000h   Размер текущего шрифта по вертикали.       95 NT Авто - любое значение, иначе размер по вертикали в пикселах.
00E6h 2 0000h   Размер текущего шрифта по горизонтали.       95 NT Авто - любое значение, иначе размер по горизонтали в пикселах.
00E8h 2 0000h   Размер текущего шрифта по вертикали.       95 NT Авто - любое значение, иначе размер по вертикали в пикселах.
00EAh 32 Terminal   Название растрового шрифта       95 NT Не используется, заканчивается нулевым символом.
010Ah 32 Lucida Console   Название шрифта TrueType       95 NT Не используется, заканчивается нулевым символом.
012Ah 2 04E3h в Windows NT/2000, 0000h в Windows 95/98   Неизвестно         NT  
012Ch 2 0003h 0001h Неизвестно       95 NT Битовая маска.
0002h Показывать панель инструментов       95 NT
012Eh 2 0000h 0001h Не восстанавливать параметры при запуске       95 NT  
0130h 2 0000h   ?? Размер экрана по горизонтали в символах       95   После первого запуска программы значение становится равным 80.
0132h 2 0000h   ?? Размер экрана по вертикали в символах       95   После первого запуска программы значение становится равным 25.
0134h 2 0000h   Размер клиентской области окна по горизонтали       95   В пикселах.
0136h 2 0000h   Размер клиентской области окна по вертикали       95   В пикселах.
0138h 2 0000h   Размер окна по горизонтали       95   В пикселах.
013Ah 2 0000h   Размер окна по вертикали       95   В пикселах.
013Ch 2 0016h   Неизвестно       95 NT  
013Eh 2 0000h 0002h При последнем запуске окно было развернуто       95   Битовая маска. Если данное значение не установлено, значение по смещению 0140h не интерпретируется.
0140h 2 0001h 0001h При последнем запуске окно было нормального размера       95   Не является битовой маской. Значение 0002h интерпретируется как развернутое окно.
0002h При последнем запуске окно было свернуто       95  
0003h При последнем запуске окно было развернуто       95  
0142h 2 FFFFh   Неизвестно       95    
0144h 2 FFFFh   Неизвестно       95    
0146h 2 FFFFh   Положение правой границы окна в развернутом состоянии       95   В пикселах, если данное значение меньше или равно положению левой границы, и значения по смещениям 013Eh, 0140h указывают на то, что окно было развернуто, считается, что параметры окна не сохранялись, и используются значения по умолчанию.
0148h 2 FFFFh   Положение нижней границы окна в развернутом состоянии       95   В пикселах, если данное значение меньше или равно положению верхней границы, и значения по смещениям 013Eh, 0140h указывают на то, что окно было развернуто, считается, что параметры окна не сохранялись, и используются значения по умолчанию.
014Ah 2 0000h   Положение левой границы окна       95   В пикселах.
014Ch 2 0000h   Положение верхней границы окна       95   В пикселах.
014Eh 2 0000h   Положение правой границы окна в нормальном состоянии       95   В пикселах, если данное значение меньше или равно положению левой границы, и значения по смещениям 013Eh, 0140h указывают на то, что окно не было развернуто, считается, что параметры окна не сохранялись, и используются значения по умолчанию.
0150h 2 0000h   Положение нижней границы окна в нормальном состоянии       95   В пикселах, если данное значение меньше или равно положению верхней границы, и значения по смещениям 013Eh, 0140h указывают на то, что окно не было развернуто, считается, что параметры окна не сохранялись, и используются значения по умолчанию.
0152h 4 00000000h   Неизвестно            
0156h 80     Имя bat-файла       95 NT Кодировка OEM, может содержать полный путь, длинное имя, включающее пробелы, должно быть заключено в кавычки, завершается нулевым символом.
01A6h 2 0000h   Объем памяти для переменных среды       95 NT Авто - 0, иначе объем памяти в килобайтах, max - 4096.
01A8h 2 0000h   Объем памяти DPMI       95 NT Авто - 0, иначе объем памяти в килобайтах, max - 16384.
01AAh 2 0001h   Неизвестно       95 NT  

Раздел "CONFIG  SYS 4.0"

0000h       Содержимое файла Config.sys       95   Кодировка ANSI, каждая строка заканчивается последовательностью 0D0Ah.

Раздел "AUTOEXECBAT 4.0"

0000h       Содержимое файла Autoexec.bat       95   Кодировка ANSI, каждая строка заканчивается последовательностью 0D0Ah.

Раздел "WINDOWS NT  3.1". Длина данных - 008Eh

0000h 2 0000h 0010h Эмуляция совместимого аппаратного таймера         NT Битовая маска.
0002h 10 00...0000h   Неизвестно            
000Ch 64 %SystemRoot% \SYSTEM32 \CONFIG.NT   Имя файла, используемого в качестве Config.sys         NT Кодировка ANSI, заканчивается нулевым символом.
004Ch 64 %SystemRoot% \SYSTEM32 \AUTOEXEC.NT   Имя файла, используемого в качестве Autoexec.bat         NT Кодировка ANSI, заканчивается нулевым символом.
008Ch 2 0000h   Неизвестно            

Раздел "WINDOWS NT  4.0". Длина данных - 068Ch

0000h 4 00000000h   Неизвестно            
0004h 256     Имя запускаемого файла с параметрами         NT Кодировка Unicode, завершается нулевым символом, может содержать полный путь, длинное имя, включающее пробелы, заключается в кавычки. Этот параметр используется только в том случае, если значение по смещению 0104h совпадает (после преобразования кодировки) со значением, составленным из имени файла из основного раздела и строки параметров из раздела "WINDOWS VMM 4.0", если этот раздел существует, или из основного раздела, если нет.
0104h 128     Имя запускаемого файла с параметрами         NT Кодировка ANSI, завершается нулевым символом, может содержать полный путь, длинное имя, включающее пробелы, заключается в кавычки. См. примечание к значению по смещению 0004h.
0184h 240 Меняется   Неизвестно         NT Скорее всего, случайные значения
0274h 160     Имя PIF-файла         NT Кодировка Unicode, завершается нулевым символом, содержит полный путь, длинное имя без кавычек.
0314h 80     Имя PIF-файла         NT Кодировка ANSI, завершается нулевым символом, содержит полный путь, длинное имя без кавычек.
0364h 60     Заголовок окна         NT Кодировка Unicode, завершается нулевым символом. Этот параметр используется только в том случае, если значение по смещению 03A0h совпадает (после преобразования кодировки) со значением из основного раздела.
03A0h 30     Заголовок окна         NT Кодировка ANSI, завершается нулевым символом. См. примечание к значению по смещению 0364h.
03BEh 160 PIFMGR.DLL   Имя файла, содержащего значок         NT Кодировка Unicode, завершается нулевым символом, может содержать полный путь, длинное имя без кавычек. Этот параметр используется только в том случае, если значение по смещению 045Eh совпадает (после преобразования кодировки) со значением из раздела "WINDOWS VMM 4.0", или если этот раздел отсутствует.
045Eh 80 PIFMGR.DLL   Имя файла, содержащего значок         NT Кодировка ANSI, завершается нулевым символом, может содержать полный путь, длинное имя без кавычек. См. примечание к значению по смещению 036Eh.
04AEh 128     Имя рабочего каталога         NT Кодировка Unicode, завершается нулевым символом, длинное имя, включающее пробелы, заключается в кавычки. Этот параметр используется только в том случае, если значение по смещению 052Eh совпадает (после преобразования кодировки) со значением из основного раздела.
052Eh 64     Имя рабочего каталога         NT Кодировка ANSI, завершается нулевым символом, длинное имя, включающее пробелы, заключается в кавычки. См. примечание к значению по смещению 04AEh.
056Eh 286 00...0000h   Неизвестно            

Эта страница обновлялась в последний раз 13 фев 2000 г.
© 2000 Сергей Мерзликин
Пишите: