Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Dos7book

.pdf
Скачиваний:
97
Добавлен:
09.02.2015
Размер:
5 Мб
Скачать
☆

Глава 9: Примеры композиции исполняемых файлов

иногда и в основной строке вызова испытуемой программы. Это можно делать через формальные параметры batch-файла (2.03-03). В показанном выше примере формальные параметры batch-файла для простоты не задействованы, требуемые

изменения предполагается вводить прямо в текст с помощью программы редактирования. После сохранения batch-файла с внесенными изменениями он снова готов к тестированию очередной функции испытуемой программы.

Вообще любая программа должна быть подвергнута трем сериям испытаний.

Испытания первой серии проверяют все функции испытуемой программы в нормальных условиях. Испытания второй серии проверяют реакцию испытуемой программы на неординарные условия: неверные спецификации, отсутствие обязательных параметров, недопустимые значения исходных данных. Наконец,

испытания третьей серии проверяют работоспособность программы в пределах того ограниченного разнообразия конфигураций компьютеров, которое предопределено ее назначением. Конкретный состав тестов, конечно, сильно зависит от характера задачи и масштаба притязаний, но принцип одинаков для всех программ, даже таких небольших, как предложенная в разделе 9.06 программа Reassign.com. Когда набранная Вами программа успешно пройдет все три серии испытаний, только тогда Вашу работу над ней можно будет считать законченной.

9.08Давайте попробуем написать драйвер

Внутри незнакомых компьютеров становится намного уютнее, когда RAM-диск со знакомой, загруженной Вами версией DOS всегда имеет одно и то же буквенное обозначение, например, букву R:. Это можно сделать с помощью драйвера, который заставит DOS выделить буквы для несуществующих, фиктивных дисков так, чтобы следующая выделяемая RAM-диску буква была бы именно той, которую Вы хотите назначить.

Известны по крайней мере 3 попытки написать такой драйвер. Не все получившиеся драйверы одинаково удачны, но те, которые удачны, не являются свободно распространяемыми, и их код не раскрыт. В данном разделе представлен ассемблерный текст драйвера, решающего ту же задачу, но не копирующего предыдущие попытки ее решения. Текст написан полностью заново специально для того, чтобы Вы с помощью отладчика DEBUG.EXE могли бы сделать себе такой

драйвер и между делом освоили бы основные особенности построения драйверов в DOS. Предлагаемый драйвер очень маленький: всего 503 байта. Для определенности давайте назовем его SkipDsk.sys.

– 529 –

Глава 9: Примеры композиции исполняемых файлов

Отладчик DEBUG.EXE создаст файл драйвера SkipDsk.sys в ходе исполнения команд файла SkipDsk.scr, который должен быть послан отладчику через перенаправление ввода, например, так:

Debug.exe < SkipDsk.scr

Файл SkipDsk.scr надо будет заранее набрать с помощью текстового редактора, как описано во вводной статье к главе 9, по представленному ниже тексту. Сопровождающие текст комментарии набирать не обязательно, но числовые

значения смещений справа от знаков точки с запятой все же лучше не опускать для упрощения последующей проверки и отладки.

a 0000

 

 

 

;************* Секция 1: заголовок драйвера

 

; 000 - место для адреса следующего драйвера

dw

FFFF,FFFF

 

; 004

- атрибуты драйвера (A.05-2)

dw

2202

 

; 006

- адрес входа в программу стратегии

dw

0031

 

; 008

- адрес входа в программу прерывания

dw

006E

 

; 00A

- число дисков, обращения от 058, 113

db

00

;00B - идентификатор (7 байтов) db 53,6B,69,70,44,73,6B

;************* Секция 2: данные

;012 - адрес запроса, обращения от 032, 073

;014 - сегмент запроса, обращение от 037

dw

0000,0000

 

 

 

; 016 - блок BPB (A.03-4), указан в 093 - 0С1

db

00,02,FF,01,00,01,40,00,00,22,F0,01,00

db

12,00,01,00,01,00,00,00,00,00,00,00

 

; 02F - метка, от строк 03D, 04D, 052, 087, 0D8

dw

FEFE

 

 

 

;****** Секция 3: резидентная программа стратегии

 

; 031 - указан в слове 006

 

CS:

 

;=031 Точка входа

mov

[0012],BX

;*032 Запомним смещение блока

CS:

 

; 036

данных запроса (A.05-3)

mov

[0014],ES

;*037 Запомним сегментный адрес

retf

 

; 03B

и вернем управление DOS

 

;******** Секция 4: отклик на "проверку носителя"

 

; 03C - адрес перехода со строки 084

– 530 –

Глава 9:

Примеры композиции исполняемых файлов

; 05C - адрес перехода со строки 06C

CS:

 

 

;=03C

Подготовлено ли в CS:002Fh

cmp byte ptr

[002F],FE

; 03D

смещение записи CDS?

jnb

008E

 

;*042

Возврат назад, если нет

mov

AH,52

 

; 044

Запросим "Список Списков"

int

21

 

; 046

Адрес возвращен в ES:BX

ES:

 

 

; 048

Загрузим адрес 1-й записи

les

BX,[BX+16]

; 049

CDS в регистры ES:BX

CS:

 

 

; 04C

Вычислим смещение CDS

add

BX,[002F]

;*04D

1-го фиктивного диска

CS:

 

 

; 051

FFh в ячейке 002Fh значит

mov byte ptr

[002F],FF

;*052

что проверка выполнялась

CS:

 

 

; 057

Считаем число записей CDS

mov

AH,[000A]

; 058

для фиктивных дисков

cmp

AH,01

 

;=05C

Сравним это число с 01h

jb

008E

 

;*05F

Выходим, если дисков нет

ES:

 

 

; 061

Внесем недействительные

mov word ptr

[BX+43],0000

; 062

атрибуты в запись CDS

add

BX,0058

 

; 067

Найдем следующую CDS

dec

AH

 

; 06A

Число оставшихся циклов

jmp

005C

 

;*06C

Повтор для следующей CDS

;******** Секция 5: программа прерывания

;06E - указан в слове 008

;08E - адрес перехода от 042, 05F, 082, 13C

pushf

 

;=06E

Точка входа

push

ES

; 06F

Сохраним состояния

push

BX

; 070

флагов и регистров

push

AX

; 071

 

CS:

 

; 072

Загрузим адрес данных

les

BX,[0012]

;*073

запроса в ES:BX

ES:

 

; 077

Зададим статус

mov word ptr

[BX+03],8007

; 078

"непригодный носитель"

ES:

 

; 07D

Проверим код операции

cmp byte ptr

[BX+02],01

; 07E

в блоке данных запроса

ja

008E

;*082

Выходим, если больше 01h

jz

003C

;*084

Если 01h, то - в секцию 4

CS:

 

; 086

Если меньше 01h, то эта

cmp byte ptr

[002F],FE

;*087

инициализация - первая?

jz

00C3

;*08C

Если да - к инициализации

pop

AX

;=08E

Восстановим

pop

BX

; 08F

состояния регистров

pop

ES

; 090

 

popf

 

; 091

Восстановим флаги

retf

 

; 092

и вернем управление DOS

 

 

 

– 531 –

 

Глава 9:

Примеры композиции исполняемых файлов

 

;******** Секция 6: адреса таблицы BPB для дисков

 

; 093 - упомянут в строках 11E, 12A

dw

0016,0016,0016,0016,0016,0016,0016,0016

dw

0016,0016,0016,0016,0016,0016,0016,0016

dw

0016,0016,0016,0016,0016,0016,0016,0016

 

;********** Секция 7: нерезидентная часть драйвера

 

; 0C3 - адрес перехода от строки 08C

push

DX

 

;=0C3

Сохраним

push

DS

 

; 0C4

состояния регистров

push

SI

 

; 0C5

 

cld

 

 

; 0C6

Счет - на приращение

ES:

 

 

; 0C7

Занесем в AH номер диска,

mov

AH,[BX+16]

; 0C8

который предлагает DOS

mov

AL,41

 

; 0CB

Преобразуем номер диска в

add

AL,AH

 

; 0CD

букву диска в AL

CS:

 

 

; 0CF

Заменим этой буквой диска

mov

[01E0],AL

;*0D0

букву в сообщении 2

mov

AL,58

 

; 0D3

Найдем смещение записи CDS

mul

AH

 

; 0D5

первого фиктивного диска

CS:

 

 

; 0D7

Запишем смещение

mov

[002F],AX

;*0D8

в ячейку CS:[002F]

 

;******* Секция 8: считывание из командной строки

;0E2 - адрес перехода от строки 0E7

;0E9 - адрес перехода от строки 0EE

ES:

 

; 0DB

Указатель на аргументы

lds

SI,[BX+12]

; 0DC

командной строки в DS:SI

mov

DX,013F

;*0DF

Смещение 1-го сообщения

lodsb

 

;=0E2

Загрузим в AL знак и

cmp

AL,20

; 0E3

организуем цикл поиска

jb

00F8

;*0E5

первого пробела после

ja

00E2

;*0E7

имени драйвера

lodsb

 

;=0E9

Загрузим в AL знак и

cmp

AL,20

; 0EA

организуем цикл поиска

jb

00F8

;*0EC

первой значащей буквы

jz

00E9

;*0EE

после первого пробела

cmp

AL,43

; 0F0

Буква меньше чем C: ?

jb

00F8

;*0F2

Если да, то - в секцию 9

cmp

AL,59

; 0F4

Буква меньше чем Y: ?

jbe

0102

;*0F6

Если да, то - в секцию 10

 

;********* Секция 9: выведение на экран сообщений

 

; 0F8 - переходы от строк 0E5, 0EC, 0F2, 10C

push

CS

;=0F8

Подготовим DS = CS для

pop

DS

; 0F9

адресации сообщений

mov

AH,09

; 0FA

Вызовем функцию выведения

 

 

 

– 532 –

 

Глава 9:

Примеры композиции исполняемых файлов

int

21

; 0FC

сообщений на

экран

mov

AL,00

; 0FE После ошибки - 0 дисков

jmp

010E

;*100 Готовимся к возврату

â DOS

 

;************* Секция 10: размер резидентной части

;102 - адрес перехода со строки 0F6

;10E - адрес перехода со строки 100

inc

AL

 

;=102

Получим букву RAM-диска

mov

DX,01C3

; 104

Смещение 2-го сообщения

CS:

 

 

; 107

Рассчитаем число дисков

sub

AL,[01E0]

;*108

которое надо запросить

jb

00F8

;*10C

Если меньше 0, то ошибка

ES:

 

 

;=10E

Запишем число дисков

mov

[BX+0D],AL

; 10F

в блок данных запроса

CS:

 

 

; 112

Запишем число дисков

mov

[000A],AL

; 113

в заголовок драйвера

mov

AH,00

; 116

Вычислим смещение для

cmp

AL,00

; 118

указателя на 1-й байт

jz

0121

;*11A

после резидентной части

shl

AX,1

; 11C

драйвера по формуле

add

AX,0093

;*11E

(2*AX + 093h)

;************* Секция 11: заполнение блока запроса

; 121 - адрес перехода со строки 11A

ES:

 

 

;=121

Запишем размер резидентной

mov

[BX+0E],AX

; 122

части в блок запроса

ES:

 

 

; 125

Припишем сегмент к размеру

mov

[BX+10],CS

; 126

резидентной части

ES:

 

 

; 129

Смещение для указателей на

mov word ptr

[BX+12],0093

;*12A

на BPB фиктивных дисков

ES:

 

 

; 12F

Припишем сегмент к

mov

[BX+14],CS

; 130

указателям на BPB

ES:

 

 

; 133

Объявим успех в статусе

mov word ptr

[BX+03],0100

; 134

в блоке данных запроса

pop

SI

 

; 139

Восстановим

pop

DS

 

; 13A

состояния регистров

pop

DX

 

; 13B

 

jmp

008E

;*13C

Перейдем для возврата DOS

;*********** Секция 12: сообщения об ошибках

; 13F - 1-е сообщение, указано в строке 0DF

db

0D

0A "SkipDsk: diskletter isn" 27 "t found"

db

20

"or out of range" 0D 0A

db

"Example:" 0A "device=A:\SkipDsk.sys Q:"

db

0D

0A 09 09 09 "Q: - diskletter (C: - Y:)"

db

20

"to be skipped" 0D 0A 0A 24

;1C3 - 2-е сообщение, указано в строке 104

–533 –

Глава 9: Примеры композиции исполняемых файлов

db

 

0D 0A "SkipDsk: diskletters

below" 20

 

;

1E0

-

заменяемая буква диска, от 0D0, 108

db

 

"A: are assigned yet" 0D 0A

0A 24

 

;

1F7

-

контрольная точка, конец драйвера

m 0000 L01F7 0100 n SkipDsk.sys

rBX 0000 rCX 01F7 w

q

В отличие от обычных исполняемых файлов, драйверы загружаются начиная со смещения 0000h, то есть без резервирования места для префикса сегмента программы (PSP, A.07-1). Именно поэтому приведенный выше текст начат с команды "a 0000", а не как обычно с "a 100". Если стартовый адрес ассемблирования указать неправильно, то неизбежно возникает путаница при расчете смещений для ссылок и адресов переходов.

Еще одно специфическое свойство драйверов для DOS состоит в том, что у них две точки входа, причем ни одна из них не совпадает со стартовым адресом размещения кода драйвера в памяти. Первая точка входа относится к программе стратегии, которая служит для приема блока данных запроса и для инициализации исполнения этого запроса тем физическим устройством, которое драйвер обслуживает. Вторая точка входа относится к так называемой программе прерывания, используемой для сбора результатов и формирования ответа на каждый ранее выданный запрос. Во время между вызовами упомянутых программ, входящих в состав драйвера, операционная система и соответствующие физические устройства работают независимо и делают каждый свое дело. Адреса точек входа должны быть объявлены в строго определенном месте в заголовке драйвера: для программы стратегии - в слове со смещением 0006h, для программы прерывания - в слове со смещением 0008h. Эти и другие обязательные элементы драйверного заголовка перечислены в таблице A.05-1.

Резидентная часть программы стратегии у драйвера SkipDsk.sys составляет секцию 3 приведенного выше ассемблерного текста. Она очень проста и включает

лишь операции записи сегментного адреса и смещения блока данных запроса (A.05-3) в приготовленное место в секции данных. Нерезидентной части у данной программы стратегии вообще нет.

Все действия по подготовке ответов на запросы DOS исполняются программой прерывания, которая начинается в секции 5. Сначала в стеке сохраняются

– 534 –

Глава 9: Примеры композиции исполняемых файлов

состояния флагов и регистров процессора: это тоже является специфической обязанностью каждого драйвера. Затем проверяется код запрашиваемой операции. Поскольку драйвер SkipDsk.sys "обслуживает" только фиктивные диски, постольку операции с кодом больше 01h должны всегда кончаться возвратом в DOS со статусом "непригодный носитель". Но операции с кодами 00h и 01h вызывают исполнение команд, показанных в секциях 7 - 11 или в секции 4.

Первый запрос DOS к драйверу всегда содержит команду инициализации с кодом 00h. Поскольку инициализация запрашивается только один раз сразу после загрузки драйвера, постольку соответствующие секции 7 – 11 находятся за пределами резидентной части драйвера. Секция 7 подготавливает данные для последующего использования, секция 8 считывает из командной строки букву диска – последнюю, которую надо пропустить, секция 9 всегда стоит наготове для выведения сообщений об ошибках на экран. Тексты сообщений об ошибках заготовлены заранее в секции 12. В секции 10 рассчитывается число фиктивных дисков, которые надо создать, а также размер резидентной части драйвера. В секции 11 блок данных запроса заполняется данными, которые надо возвратить операционной системе. В соответствии с этими данными DOS дополнит свои таблицы DPB (A.03-1) и CDS (A.03-3) так, что буквы фиктивных дисков, включая ту букву, которая заявлена в командной строке, будут считаться занятыми. Когда позднее предложение к инициализации будет послано драйверу RAM-диска, ему будет выделена следующая свободная буква, которая заранее предопределена драйвером SkipDsk.sys.

В момент назначения буквы RAM-диску те фиктивные диски, которые "выдуманы" драйвером SkipDsk.sys, операционная система должна считать полноценными и действующими. Однако потом такой статус фиктивных дисков становится помехой для назначения буквенных обозначений сетевым и IFS-дискам. Список доступных дисков оказывается забит "мусором", в котором трудно разобраться. Поэтому перед драйвером SkipDsk.sys ставится следующая задача: аннулировать действительный статус фиктивных дисков. Чтобы решить эту задачу, драйвер SkipDsk.sys должен быть вызван на исполнение хотя бы еще один раз.

Повторную активизацию драйвера SkipDsk.sys удобно произвести при поступлении от DOS запроса на операцию "проверка носителя" (код 01h), потому что эта операция предшествует всем другим запросам, обращенным к дисководам на сменных дисках, а также потому что проверка носителя будет автоматически запрошена после окончания интерпретации строк файла CONFIG.SYS. В ответ на этот запрос драйвер SkipDsk.sys исполняет команды из своей резидентной секции 4. Они определяют адрес CDS-записи, соответствующей первому фиктивному диску, а затем вписывают во все CDS-записи фиктивных дисков слово атрибутов 0000h. Логические диски с таким словом атрибутов считаются недействительными, они не отображаются в списке доступных дисков, и соответствующие им буквенные обозначения могут быть задействованы другими драйверами.

– 535 –

Глава 9: Примеры композиции исполняемых файлов

Когда прежняя буква фиктивного диска предоставлена другому драйверу, тогда снова вписывать слово атрибутов 0000h в ту же CDS-запись уже нельзя. Во избежание этого одна из команд секции 4 заносит в ячейку со смещением 02Fh метку FFh. Наличие этой метки проверяется при каждом вызове программы прерывания драйвера SkipDsk.sys, чтобы предотвратить многократное исполнение как инициализации, так и цикла вписывания атрибутов. Благодаря тому любые

повторные обращения не нарушат правильное функционирование других драйверов, получивших в свое распоряжение прежние буквы фиктивных дисков.

Более детальные объяснения роли отдельных команд приведены в комментариях к строкам файла SkipDsk.scr.

Как в большинстве других ассемблерных текстов, в файле SkipDsk.scr необходимо обратить внимание на пустую строку, девятую от конца файла. Она вызывает выход отладчика DEBUG.EXE из режима ассемблирования и потому обязательно должна быть в набранном Вами тексте. Следующая строка с командой "m" (6.05-11) смещает весь транслированный машинный код на 100h байт дальше, освобождая тем самым область PSP. Только после этого можно командой "n" (6.05-12) назначить имя для создаваемого драйвера, потому что оно записывается как раз в область PSP. В заключительных шести строках файла SkipDsk.scr длина создаваемого драйвера вносится в регистры BX:CX, после чего драйвер SkipDsk.sys записывается на диск командой "w" (6.05-19).

Сформированный драйвер SkipDsk.sys нельзя считать пригодным к использованию без тщательной проверки выводимого отладчиком листинга, о которой написано в разделе 9.07-01. Последнее смещение в левой колонке листинга выводится в ответ на пустую строку, девятую от конца ассемблерного текста. Поскольку ассемблирование было начато с адреса 0000, постольку последнее значение смещения должно быть 01F7h, то есть точно равным полной длине создаваемого драйвера, указываемой в 8-й и 3-й строках от конца ассемблерного текста. Если листинг не выявляет никаких ошибок, то созданный драйвер SkipDsk.sys имеет шансы успешно пройти тестирование.

При проведении испытаний нужно принять во внимание, что ради достижения простоты и малого размера драйвера SkipDsk.sys его способности намеренно ограничены. Он не допускает наличия косой черты перед буквой диска в командной строке, не допускает замены пробелов в командной строке знаками табуляции (09h). Он не может перераспределять буквы дисков, которые уже назначены. Наконец, он не сможет работать с версиями DOS ниже MS-DOS4.0.

В практике пользования драйвером SkipDsk.sys переназначение букв, выделенных фиктивным дискам, может потребоваться до завершения интерпретации файла Config.sys. В таких случаях запрос операции "проверка носителя" надо спровоцировать намеренно, например, как это сделано в третьей строке следующего фрагмента файла Config.sys:

– 536 –

Глава 9: Примеры композиции исполняемых файлов

devicehigh=\DOS\DRV\SkipDsk.sys Q: devicehigh=\DOS\DRV\Ramdrive.sys 2400 /E install=\Command.com nul /low /f /c vol Q:

В приведенном примере буква Q: будет выделена последнему фиктивному диску, а RAM-диск получит следующую букву R:. В последней строке обращение командного интерпретатора к фиктивному диску Q: заставит DOS послать драйверу SkipDsk.sys запрос операции "проверка носителя". С этого момента все буквы, выделенные фиктивным дискам, станут свободными и могут быть повторно выделены другим драйверам, которые загружаются позднее командами "Install" или "Installhigh". Еще один подобный пример использования драйвера SkipDsk.sys показан в разделе 9.09-01.

9.09Адаптивная загрузка на незнакомый компьютер.

Предлагаемые в этом разделе варианты конфигурационных файлов

CONFIG.SYS и AUTOEXEC.BAT, помимо обычной загрузки MS-DOS7, позволяют перебазировать действующую MS-DOS7 на RAM-диск или на физический диск, а также осуществить загрузку без драйверов, применяемую для тестирования памяти компьютера и для смены прошивок микросхем памяти BIOS.

Главная особенность предлагаемых здесь конфигурационных файлов состоит в том, что выбор лучшего из альтернативных вариантов загрузки пользователь сможет сделать не "вслепую", а на основании результатов тестирования. Если Вы предпочитаете перебазирование MS-DOS7 на RAM-диск, то его объем будет определен по результатам исследования доступной XMS-памяти. Если Вы предпочтете перебазирование MS-DOS7 на физический диск, то заранее узнаете, какие диски имеются в компьютере, их объем и процент занятого дискового пространства на каждом из записываемых дисков.

Проведение тестирования в то время, когда загрузка операционной системы еще не закончена, неизбежно сопряжено с рядом ограничений. Из-за них здесь нельзя воспроизвести те же процедуры, которые реализованы в файле DISK.BAT (9.03-02). По той же причине не удается обойтись без привлечения драйверов и программ, не входящих в комплект поставки MS-DOS7. С другой стороны, для тестирования в процессе загрузки можно принять ряд упрощающих допущений. В частности, допустимо считать, что исследование проводится с загрузочного диска, что структура каталогов на этом диске известна, и что известно, какие операции на каждом этапе загрузки DOS еще не осуществлены. Благодаря последнему допущению, кстати, нет необходимости включать в перечень исследуемых дисков RAM-диски и дисководы CD-ROM.

Предлагаемые здесь конфигурационные файлы предназначены для обеспечения загрузки MS-DOS7 со сменного носителя на AT-совместимые компьютеры с

– 537 –

Глава 9: Примеры композиции исполняемых файлов

заранее неизвестным составом оборудования. Предоставляемая возможность

адаптировать процесс загрузки к оперативно выясняемым особенностям каждого конкретного компьютера экономит много времени при проведении сложных восстановительных работ.

9.09-01 Файл CONFIG.SYS: подготовка адаптивной загрузки.

Предлагаемая здесь версия файла CONFIG.SYS предоставляет выбор из пяти вариантов загрузки MS-DOS7, показанных ниже в тексте файла в разделе [menu]. Некоторые из вариантов включают исполнение таких операций, которые не могут быть реализованы стандартными средствами MS-DOS7. В частности, создание RAM-диска адаптируемого объема обеспечивается свободно распространяемым драйвером TDSK.EXE (5.05-02) версии 2.42. Точных аналогов этот драйвер не имеет. Кроме того, привлечен драйвер SKIPDSK.SYS (9.08), который Вы могли бы сотворить самостоятельно. Потенциально он может быть заменен платным драйвером JDRIVE.SYS фирмы JAMSOFT.

Справочные материалы по остальным примененным драйверам приведены в главе 5. Эти драйверы либо входят в поставку Windows-95/98, либо имеют близкие аналоги, и их отбор не столь критичен. Конечно, каждая замена должна сопровождаться корректировкой параметров командной строки так, как того требует конкретный драйвер.

Ниже приведен текст предлагаемой версии файла CONFIG.SYS.

[menu]

 

numlock off

 

menuitem=L047, User-configurable

real mode

menuitem=L048, User-configurable

V86 mode

menuitem=L029, Quick boot in real mode

menuitem=L031, Quick boot in V86

mode

menuitem=L104, Real mode without

drivers

menudefault=L029,20

 

[L047] device=\DOS\DRV\Himem.sys /v device=\DOS\DRV\Umbpci.sys include=L104

country=007,866,\DOS\DRV\Country.sys

devicehigh=\DOS\DRV\Dblbuff.sys

devicehigh=\DOS\DRV\Ifshlp.sys

devicehigh=\DOS\DRV\Setver.exe devicehigh=\DOS\DRV\Dvs.sys /D:CD001 devicehigh=\DOS\DRV\Skipdsk.sys Q:

– 538 –

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]