[Wine-devel] [Wine-patches] [eter-2.0.0] [2/2] winspool.drv: Get default DEVMODEW. (eterbug #8821)[resend]

Dmitry Timoshkov dtimoshkov на etersoft.ru
Вт Янв 8 13:40:42 MSK 2013


Tatyana Fokina <tatyana на etersoft.ru> wrote:

> > Столько ненужного кода, только для того. чтобы избежать вызова
> > DEVMODEdupWtoA()
> > если DM_IN_BUFFER не установлен?
> >
> > pDevModeInputA = (fMode & DM_IN_BUFFER) ?
> > DEVMODEdupWtoA(pDevModeInput) : NULL;
> >
> > выглядит гораздо проще и понятнее.
> А вот здесь буду снова отстаивать свою точку зрения :)
> Весь смысл как раз в том, чтобы вызвать DEVMODEdupWtoA(), но перед этим 
> получив в pDevModeInput значения по умолчанию. Возможно реализация не 
> слишком изящна. Впрочем, если Вам кажется, что лучше оставть NULL, то 
> спорить не буду больше.

DM_IN_BUFFER установленный во флагах означает, что входной буфер содержит
настройки, которые драйвер принтера должен использовать для установки
начальных значений печати и параметров страницы. Соответственно, если
этот флаг не установлен, значит входной буфер или содержит просто мусор,
или NULL, или может указывать вообще в "небо" и чтение по этому адресу
в лучшем случае безвредно, а в худшем вызовет access violation (есть
и более мистические сценарии при чтении из страниц, обозначенных как
PAGE_GUARD). С другой стороны, почему создаются какие-то данные для
использования по умолчанию в прослойке вроде winspool.drv, а не в самом
драйвере принтера? И при этом данные передаются, но DM_IN_BUFFER не
устанавливается?

Насколько я понимаю, Вы обнаружили, что буфер с мусором конвертируется
в DEVMODEA, приводя к каким-то нежелательным побочным эффектам. При этом
Вы почему-то решили, что использование каких-то иных данных вместо мусора
будет лучше. Только непонятно почему, ведь драйвер принтера все равно
проигнорирует эти данные без DM_IN_BUFFER во флагах. Если драйвер все же
не проверяет этот флаг, и все равно использует входной буфер - это баг в
драйвере, и он должен быть исправлен, но насколько я вижу, wineps.drv все
делает правильно.

-- 
Dmitry.


Подробная информация о списке рассылки Wine-devel