Как изменить принтер по умочанию для процесса ?

Любые обсуждения, не нарушающие правил форума.

Модератор: Модераторы

Как изменить принтер по умочанию для процесса ?

Сообщение debi12345 » 22.05.2013 19:31:49

Задача :
- имеем вэбаппликуху печатающую (формат А4) удаленные ЭКСЕЛЬ-фалы полученные через выбкомпоненты МС Оффис - в неуправляемом (без возможнсти выбрать принтер) режиме - еснно в таком режиме на принтер по умолчанию (и именно это принтер есть умолчание в системе)
- а также имеем апликуху ВСЕГДА (нет опций изменить) печающую на принтер по-умолчанию

Проблема :
- 2-я прога заточена строго под узколенточный термопринтер то есть А4-задания от 1-й проги на ней - ну понятно что будет :)

Вопрос : как заставить 2-ю прогу считать принтером по умолчанию термопринтер, в реале имея по умолчанию нормальный принтер ? Немножко погуглил и появились идейки. Поможет ли здесь помочь внедрение в процесс 2-й проги с целью подменить winspool:OpenPrinter так чтобы она всегда окрывала термопринтер ? Я с внедрениями и хуками не связывался - может кто что-нибудь посоветовать ?

ПС:
Передалать что 1-ю, что 2-ю проги нереально - они не наши.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Как изменить принтер по умочанию для процесса ?

Сообщение debi12345 » 23.05.2013 22:13:50

Хм, задача по сути есть написание вируса. AVAST бьет во все колокола :)
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Как изменить принтер по умочанию для процесса ?

Сообщение trengtor » 23.05.2013 22:38:23

Аваст на всё подряд трепыхается...
Аватара пользователя
trengtor
новенький
 
Сообщения: 77
Зарегистрирован: 03.05.2013 08:57:43
Откуда: Москва

Re: Как изменить принтер по умочанию для процесса ?

Сообщение Padre_Mortius » 23.05.2013 23:19:28

Хм, задача по сути есть написание вируса.

И при чем тут вирус? Я бы сказал, что это больше походит на написание своего диспетчера печати или виртуального принтера с продвинутыми настройками
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Как изменить принтер по умочанию для процесса ?

Сообщение debi12345 » 24.05.2013 00:07:17

И при чем тут вирус?

Задача решается примерно так :
1) по названию экзешника в спсике процессов ищется нужная программа, запоминается ее PID
2) по этому PID подключаемся к адресному пространстсву этому процессу
3) в таблице импорта процесса ищем релокацию к winspool!OpenPrinterW
4) в месте этой (точнее - почти любой) релокации из-за дизайна WIN API всегда есть дыра (из NOP и прочего пустого кода), в которой прописывется переход на подменяюший код (содержайщийся в DLL, в которой есть функция с фрэймом вызова, аналогичным OpenPrinterW)
5) подменющий код из этой DLL отрабатывает в новом трэде

По факту это самый наворочненный вариант "PROCESS INJECTING"-а - выполняющий нужное нам действие не глобально (что вызовет глобаьные тромоза и в случае вируса - даст повод его поискать ) - а лишь пока работает инжектирванный процесс. Типично вирусный способ получеия управления :)
ПС:
подменять OpenPrinterW можно не всегда - некотрые слжные печаталки (M$WORD,..) до открытия (получени хэндлера) принтера успевают прочитать его свойства до открывания,чтоы подготовитт здаание печати под его сойсова - разрешение, поля,.. ПОэтому перенаправив задание для маатричнго принтера на лазерку - получил в несколько раз (кратнсть разрешени этих типов принтеров) уменьшенную "картинку". С другой стороны, вызов "kernel32!GetProifileStringW/A" получения имени текущего принтера по умолчанию (чтобы его подменить) почему-то не хукается (их M$ WORDа).
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)


Вернуться в Потрепаться

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16

Рейтинг@Mail.ru