Собственно, возникла следующая проблема. Нужно создать устройство, которое было бы доступно из режима MS-DOS на NT-платформах — типа "LPT1:" или "COM". Т.е. имеется MS-DOS программа, которая выводин на печать некоторые данные — я хочу написать драйвер, который их перехватит, ну и дальше что-либо с ними сделает — перекодирует и пошлет на принтер, установленный в системе, или что-нибудь подобное.
MS-DOS программа выводит на печать именно на устройство — не на прямую через порты. И позволяет настроить порт для вывода на печать — в том числе и указать произвольное имя — хоть "NUL"!
Не могут ли господа подсказать, хотя бы в каком направлении копать? Обязателен ли для этого DDK?
Может, я ерундой занимаюсь, и есть готовые решения?
Здравствуйте, Master Gekus, Вы писали:
MG>Собственно, возникла следующая проблема. Нужно создать устройство, которое было бы доступно из режима MS-DOS на NT-платформах — типа "LPT1:" или "COM". Т.е. имеется MS-DOS программа, которая выводин на печать некоторые данные — я хочу написать драйвер, который их перехватит, ну и дальше что-либо с ними сделает — перекодирует и пошлет на принтер, установленный в системе, или что-нибудь подобное.
MG>MS-DOS программа выводит на печать именно на устройство — не на прямую через порты. И позволяет настроить порт для вывода на печать — в том числе и указать произвольное имя — хоть "NUL"!
MG>Не могут ли господа подсказать, хотя бы в каком направлении копать? Обязателен ли для этого DDK?
Я тут не большой специалист, но, насколько я понимаю, нужен драйвер, который создает символическую ссылку (например, "XYZ"), которая потом и будет видна в 3 кольце.
Здравствуйте, Master Gekus, Вы писали:
MG>Собственно, возникла следующая проблема. Нужно создать устройство, которое было бы доступно из режима MS-DOS на NT-платформах — типа "LPT1:" или "COM". Т.е. имеется MS-DOS программа, которая выводин на печать некоторые данные — я хочу написать драйвер, который их перехватит, ну и дальше что-либо с ними сделает — перекодирует и пошлет на принтер, установленный в системе, или что-нибудь подобное.
MG>MS-DOS программа выводит на печать именно на устройство — не на прямую через порты. И позволяет настроить порт для вывода на печать — в том числе и указать произвольное имя — хоть "NUL"!
MG>Не могут ли господа подсказать, хотя бы в каком направлении копать? Обязателен ли для этого DDK?
MG>Может, я ерундой занимаюсь, и есть готовые решения?
На сколько я знаю, решения есть (сам одно такое писал — Virtual Serial Port называлось), но они за деньги.
Драйвер нужен. И обрабатывать он должен уметь специфические для данного устройcтва IOCTLs.
А в usermode поюзать DefineDosDevice(). Как раз для создания symlink'а на DeviceObject драйвера в
месте, доступном для Win32 applications — "\??", известном также как "\DosDevices" и "\\.\".
Здравствуйте, Master Gekus, Вы писали:
MG>Собственно, возникла следующая проблема. Нужно создать устройство, которое было бы доступно из режима MS-DOS на NT-платформах — типа "LPT1:" или "COM". Т.е. имеется MS-DOS программа, которая выводин на печать некоторые данные — я хочу написать драйвер, который их перехватит, ну и дальше что-либо с ними сделает — перекодирует и пошлет на принтер, установленный в системе, или что-нибудь подобное.
Очень просто:
CreateIoDevice — создаем обьект устройства
IoCreateSymbolicLink — создать символическую ссылку в пространстве имен \DosDevices\
DDK просто обязателен
и еще тебе желательно прочитать книгу В.Солдатова "Программирование драйверов под windows"
Найдешь где скачать — мыль мне на ms-rem{at}yandex.ru
Здравствуйте, Master Gekus, Вы писали:
MG>Собственно, возникла следующая проблема. Нужно создать устройство, которое было бы доступно из режима MS-DOS на NT-платформах — типа "LPT1:" или "COM".
Не слушай ужасов про kernel-mode драйверы, которых тебе тут понаписали 16-разрядные DOS-программы в NT-линейке работают в VDM — Virtual DOS Machines. Есть специальный вид драйвера для VDM — это банальная 32-разрядная user-mode DLL, которая указывает, для каких действий VDM ее надо дергать, и соответствующим образом эти действия обрабатывает. Нечто вроде супервизора. Можно обрабатывать программные прерывания, обращения к портам и т.п.
Делать и отлаживать VDM-драйвер не в пример проще, чем kernel-mode драйвер, ибо он, во-первых, всю систему не уронит при ошибке, а во-вторых — может пользоваться практически всем набором Win32 API.