На самом деле, все печально. Дело в том, что драйвера принтеров бывают как kernel mode, так и user mode. Если с kernel mode перехватом все понятно (и хорошо описано у Фень Юаня), то вот с перехватом user mode драйвера принтера я как то не сталкивался. Хотя, наверное, ничего невозможного нет.
Впрочем, может можно как то со спулером поизвращаться? Возможно, поможет Print Processor. Хотя это только предположение.
H>Нужно перехватить информацию посылаемую на принтер и сохранить в виде bmp(jpg) на диске при этом не мешая работе принтера.
Здравствуйте, Andrew S, Вы писали:
AS>Mirror драйвер принтера Шутка, конечно.
AS>На самом деле, все печально. Дело в том, что драйвера принтеров бывают как kernel mode, так и user mode. Если с kernel mode перехватом все понятно (и хорошо описано у Фень Юаня), то вот с перехватом user mode драйвера принтера я как то не сталкивался. Хотя, наверное, ничего невозможного нет.
user mode printer driver общается напрямую с портом через WritePrinter (e.g. RAW, EMF, TEXT, postscript )
соотв. можно попробовать встроиться на уровень пониже типа монитора порта (see Writing a Print Monitor), правда со всеми вытекающими неудобствами
AS>Впрочем, может можно как то со спулером поизвращаться? Возможно, поможет Print Processor. Хотя это только предположение.
действительно PP это тоже user mode DLL который переводит что нужно как раз в формат понятный для монитора порта
H>>Нужно перехватить информацию посылаемую на принтер и сохранить в виде bmp(jpg) на диске при этом не мешая работе принтера.
хотя можно попытаться выдернуть инфу о том, что печатают через EMF ф-ии PP и поработать с EMF поплотнее напрямую?
... << RSDN@Home 1.1 beta 1 >>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Re[3]: Как перехватить информацию пересылаемую на принтер
Можно. Модифицируется внутренняя таблица функций DDI, указатель на которую (ppdev) содержится в контексте (dc)устройства. Как все это делается + рабочий пример — проще посмотреть в указанном источнике.
Но — это на мой взгляд крайняя мера. Возможно, вам помогут предложенные user-mode методы.
H>Andrew S H>и хорошо описано у Фень Юаня H>А конкретнее можно?
Я посмотрел и нашел, что при печати создается фаил .spl в каталоге Windows\System32\spool\Printers\
Так вот кажется там есть вся информация посылаемая на принтер.
Только вот формат файла неизвестен.
Может кто знает формат .SPL файла
Re[5]: Как перехватить информацию пересылаемую на принтер
Здравствуйте, Hekko, Вы писали:
H>Я посмотрел и нашел, что при печати создается фаил .spl в каталоге Windows\System32\spool\Printers\ H>Так вот кажется там есть вся информация посылаемая на принтер. H>Только вот формат файла неизвестен. H>Может кто знает формат .SPL файла
в НТ спулер создает 2 файла для спулинга:
.shв содержит параметры а .spl — графкоманды
формат .spl ФеньЯнь характеризует как мета-EMF:
файл состоит из посл метазаписей которые начинаются с 32-bit type ID and 32-bit size полей после которых следуют данные переменного размера...
for details use EmfScope utility from his book (programmin GDI)
... << RSDN@Home 1.1 beta 1 >>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Re[6]: Как перехватить информацию пересылаемую на принтер
Немного не так. Этот файл может быть как EMF, так и TEXT или RAW. В случае RAW содержание зависит от модели принтера. Например, все PostScript (eq нормальные сетевые принтеры) пользуются raw форматом. Так же сказано, что форматы файлов спулера недокументированы. Для работы с форматом EMF есть функции GdixxxEMF.
V>формат .spl ФеньЯнь характеризует как мета-EMF: V>
V>файл состоит из посл метазаписей которые начинаются с 32-bit type ID and 32-bit size полей после которых следуют данные переменного размера...
V>for details use EmfScope utility from his book (programmin GDI)
Не знаю, но, имхо, это нехорошие методы.
H>Ладно. А возможно ли перехватить эти 2 файла и сохранить их, а потом если потребуется снова послать их на печать?
Здравствуйте, Hekko, Вы писали:
H>Нужно перехватить информацию посылаемую на принтер и сохранить в виде bmp(jpg) на диске при этом не мешая работе принтера.
Скорее всего это не очень сложно сделать. У меня тоже подобная задача, но я пока не нашел решение. Вот посмотрел http://www.doc-q-manager.com этот продукт. Он как раз работает с очередями. Те можно копировать, переносить, просматривать документы в очереди.
Re: Как перехватить информацию пересылаемую на принтер
Поправьте меня, если я ошибаюсь.
Есть мысля использовать перехват вызова функций API (вроде APISpy),
внедряя через хуки свою dll в требуемый процесс. Тогда можно отследить
получение DC принтера и, соответственно, без проблем снять с него
изображение.
Posted via RSDN NNTP Server 1.7 beta
Re[2]: Как перехватить информацию пересылаемую на принтер
Здравствуйте, Ужасть бухгалтера, Вы писали:
УБ> Поправьте меня, если я ошибаюсь. УБ> Есть мысля использовать перехват вызова функций API (вроде APISpy), УБ>внедряя через хуки свою dll в требуемый процесс. Тогда можно отследить УБ>получение DC принтера и, соответственно, без проблем снять с него УБ>изображение.
все возможно, как известно
но есть правильные способы и есть через разные места с соотв. побочными эффектами имеющими свойство вылазить когда никто к этому не готов
... << RSDN@Home 1.1 beta 1 >>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Re[2]: Как перехватить информацию пересылаемую на принтер
Здравствуйте, Andrew S, Вы писали:
AS>Mirror драйвер принтера Шутка, конечно.
AS>На самом деле, все печально. Дело в том, что драйвера принтеров бывают как kernel mode, так и user mode. Если с kernel mode перехватом все понятно (и хорошо описано у Фень Юаня)
Чего за труд такой, труд Фень Юаня ?
, то вот с перехватом user mode драйвера принтера я как то не сталкивался. Хотя, наверное, ничего невозможного нет. AS>Впрочем, может можно как то со спулером поизвращаться? Возможно, поможет Print Processor. Хотя это только предположение.
H>>Нужно перехватить информацию посылаемую на принтер и сохранить в виде bmp(jpg) на диске при этом не мешая работе принтера.
Осмысление бессмысленности имеет определенныей смысл !
Re[3]: Как перехватить информацию пересылаемую на принтер
Есть два реальных способа:
1) Реализовать User-Mode Rendering DLL (см DDK Docz) и через DrvSplWritePrinter иметь весь поток принтера — это если дривер kernel mode
2) А если дривер — user mode, то просто faked dll вместо него всавить и весь Drv* DDI иметь во все места =)
Re[4]: Как перехватить информацию пересылаемую на принтер
Здравствуйте, Kola, Вы писали:
K>Есть два реальных способа: K>1) Реализовать User-Mode Rendering DLL (см DDK Docz) и через DrvSplWritePrinter иметь весь поток принтера — это если дривер kernel mode K>2) А если дривер — user mode, то просто faked dll вместо него всавить и весь Drv* DDI иметь во все места =)
Господа, простите за повторение, не подскажите ли — решилась ли проблема с перехватом данных, идущих на принтер ? если дописали виртуальный драйвер, то поделитесь опытом — в какой мод хотя бы лезть, так как я уже просто потерялся в этих драйверах, я уже скоро DDK и раздел GDI буду знать наизусть, но понимание отчего-то так и не приходит ....
спасибо за помошь заранее
Re[3]: Как перехватить информацию пересылаемую на принтер
Здравствуйте, Valerio, Вы писали:
УБ>>Тогда можно отследить УБ>>получение DC принтера и, соответственно, без проблем снять с него УБ>>изображение.
V>все возможно, как известно
интересно было бы узнать как можно получить информацию с DC принтера, ибо ни один вариант копирования с него не работает. Для экранных DC все ок.