Spooler Sub System Process и OKI Printer driver это две большие разницы, верно?
этого же не было ясно из поста... сказал бы мол spoolsv и точка
а что не говорит в плане ошибки?
не знаю с какими целями тебе нужно внедриться в именно этот процесс
по поводу слежения за спулером и его деятельностью, есть вариант написать драйвер фильтрующий всю активность между системой и движком печати, используется тот же подход что и при фильтрации GDI (mirror driver sample from DDK).
суть — все GDI API которым ты будешь рисовать на контексте печати будет проходить через твой драйвер и ты уже решаешь что с этим делать.
если же у тебя другие цели, вроде отлова текста сообщения, поделись, может подскажет кто в чем дело
M>Этот процесс — Spooler Sub System Process ...
M>Если не системный, то почему глобал хук на него срабатывает?
M> V>>там тебе и покажут процесс куда надо внедрять хук, ИМХО
M>А хук вешается не на процесс а на его поток .... а если spooler создаст новый поток и там выведет сообщение..?
... << RSDN@Home 1.0 beta 4 >>
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.
Здравствуйте, Valerio, Вы писали:
V>Здравствуйте, Myckyc, Вы писали:
V>Spooler Sub System Process и OKI Printer driver это две большие разницы, верно? V>этого же не было ясно из поста... сказал бы мол spoolsv и точка
V>а что не говорит в плане ошибки?
V>не знаю с какими целями тебе нужно внедриться в именно этот процесс
V>по поводу слежения за спулером и его деятельностью, есть вариант написать драйвер фильтрующий всю активность между системой и движком печати, используется тот же подход что и при фильтрации GDI (mirror driver sample from DDK).
V>суть — все GDI API которым ты будешь рисовать на контексте печати будет проходить через твой драйвер и ты уже решаешь что с этим делать.
V>если же у тебя другие цели, вроде отлова текста сообщения, поделись, может подскажет кто в чем дело
Спасибо, Valerio, что обратили внимание на мой вопрос ...
Сейчас обьясню по подробнее ... из драйвера оки, а именно:
— если под W2k и WINNT ,то из процесса CSRSS.EXE;
— если под Win98 ,то из процесса Spooler Sub System Process
вылезает сообщение .. типа мало тонера .. при печати ... операторы нервничают .. средствами OKI Монитора сообщение убирается, но через некоторое время вылезает опять .. (
под W2k внедряестя в адресное пространство CSRSS.exe модуль с хуком
с помощью CreateRemoteThread ... под Win98 ... этой функции нет
... (
что делать..
skip
M>Спасибо, Valerio, что обратили внимание на мой вопрос ...
всегда рад помочь, особенно если это оценится, например таким вежливым ответом
M>Сейчас обьясню по подробнее ... из драйвера оки, а именно: M>- если под W2k и WINNT ,то из процесса CSRSS.EXE; M>- если под Win98 ,то из процесса Spooler Sub System Process M> вылезает сообщение .. типа мало тонера .. при печати ... операторы нервничают .. средствами OKI Монитора сообщение убирается, но через некоторое время вылезает опять .. (
M>под W2k внедряестя в адресное пространство CSRSS.exe модуль с хуком M>с помощью CreateRemoteThread ... под Win98 ... этой функции нет M>... ( M> что делать..
заинтересовали проблемой, отвлекся и все же нашел решение, чутье не обмануло надеюсь
коротко говоря решение здесь где-то в районе printer monitor
(в разделе Customizing Print Spooler Components — неплохо звучит да?!
как раз кажется для Вас)
примеры есть в WinDDK, конкретно смотрите \src\print\monitors\
и топики language and port monitors in the DDK
там точно есть что-то типа PORT_STATUS_TONER_LOW, см исходники
---
это простой вариант, если чистое Win32.. может быть так пойдет по-быстрому:
висит себе фоновый процесс-монитор который следит за появлением окошка в процессе spoolsv (non zero HWND count is criterion) и затем пытается понять это твое окно с сообщением о тонере или нет. вероятно Вы и пытались поставить хуки для отслеживания появления окна (насчет что хук поставить невозможно совершенно утверждать не буду, это к Васкецову и Ко).
Можно не пытаться ставить хуки а просто считать кол-во хэндлов окошек и пытаться
определить плохое ли это окно по-другому. Как? возможны варианты начиная с WM_GETTEXT и сверки заголовка окна, если ты затачиваешь под конкретное приложение конкретной версии.
А проверять по таймеру тому же.. Вряд ли за 3-5 сек если окно появится и исчезнет пользователь будет сильно нервничать, а ведь можно еще какой-нибудь ему стиль окна SW_HIDE подсунуть при первом появлении и так и оставить, не знаю деталей у Вас.
удачи, напишите к чему пришли
Валерий
... << RSDN@Home 1.0 beta 4 >>
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.
Здравствуйте, Valerio, Вы писали:
V>skip
M>>Спасибо, Valerio, что обратили внимание на мой вопрос ... V>всегда рад помочь, особенно если это оценится, например таким вежливым ответом
V>заинтересовали проблемой, отвлекся и все же нашел решение, чутье не обмануло надеюсь
V>коротко говоря решение здесь где-то в районе printer monitor V>(в разделе Customizing Print Spooler Components — неплохо звучит да?! V>как раз кажется для Вас)
.......................
........................
V>удачи, напишите к чему пришли V>Валерий
У меня несколько вопросов:
1. V> ... висит себе фоновый процесс-монитор который следит за появлением окошка в процессе spoolsv (non zero HWND count is criterion) ...
Это в смысле по таймеру запускать FindWindow ?? ... (к стати я пробовал, работает .. но идея с таймером
не стильно как-то ...душа хочет сразу ... в принципе если ничего не получится так и сделаю ...
2. V>... а ведь можно еще какой-нибудь ему стиль окна SW_HIDE подсунуть при первом появлении и так и оставить.
А что есть способ сделать окно чужого?! приложения SW_HIDE ??
3. V>коротко говоря решение здесь где-то в районе printer monitor V>(в разделе Customizing Print Spooler Components — неплохо звучит да?! V>как раз кажется для Вас) V>примеры есть в WinDDK, конкретно смотрите \src\print\monitors\ V>и топики language and port monitors in the DDK
skip
M> Это в смысле по таймеру запускать FindWindow ?? ... (к стати я пробовал, работает .. но идея с таймером M> не стильно как-то ...душа хочет сразу ... в принципе если ничего не получится так и сделаю ...
да некрасиво я предупредил... зато быстро, "дешево и сердито" а как еще?
M>2. V>... а ведь можно еще какой-нибудь ему стиль окна SW_HIDE подсунуть при первом появлении и так и оставить. M> А что есть способ сделать окно чужого?! приложения SW_HIDE ??
конечно!!! если хэндл окна нашел то ему стиль даже менять не надо, вызови ShowWindows(SW_HIDE)/UpdateWindow и порядок!
M>3. V>коротко говоря решение здесь где-то в районе printer monitor M> V>(в разделе Customizing Print Spooler Components — неплохо звучит да?! M> V>как раз кажется для Вас) M> V>примеры есть в WinDDK, конкретно смотрите \src\print\monitors\ M> V>и топики language and port monitors in the DDK
M> Что такое WinDDK .. и где искать ...?
это Driver Development Kit — раньше (до октября) был доступен для скачивания с МС www.microsoft.com/ddk
сейчас опять только в подписке МСДН но это не большая проблема, тем более что есть МСДН онлайн, а примеры можно выслать
боюсь что тогда вариант с драйвером будет тяжел для Вас, но с другой стороны все исходники есть и если есть время освоить что-то новое страшное и неизвестное — вперед!
... << RSDN@Home 1.0 beta 4 >>
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.
А>>Но и в smss.exe и в csrss мне тоже удавалось загружать свою библиотеку через CreateRemoteThread V>Проверю дома, уж больно сказочно звучит. V>Проверять буду просто: CreateRemoteThread(ZwClose), закроется хэндл — круто.
Проверил на Windows 2000 AS + SP3.
Все как и предполагалось (я когда-то это уже пытался делать, вот снова решил проверить, дабы развеять сомнения).
1) Брал привилегии.
2) Открывался процесс с правами доступа PROCESS_QUERY_INFORMATION | PROCESS_CREATE_THREAD | PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_VM_OPERATION. Тут все OK.
3) CreateRemoteThread(hProcess,0,0,(LPTHREAD_START_ROUTINE)&ZwClose,(PVOID)wcstoul(argv[2],0,10),0,0);
argv[1] — был идентификатор процесса, потому тут — 2.
Вот тут начались приколы.
Если CSRSS или WINLOGON или еще чего — все нормально отрабатывало.
Если SMSS — возвращается NULL, а GetLastError() дает 8 (при чем тут именно 8 — не ясно).
Потому возможность успешного вызова CreateRemoteThread для NATIVE-процессов мне кажется нереальной (возможно, из-за уведомления CSRSS о новом потоке), а я сам для загрузки потока в SMSS использую RtlCreateUserThread.
Здравствуйте, SergH, Вы писали:
SH>Driver Development Kit. Искать на сайте MS. Для разных Wind-ов разные DDK, свободно распространяются все, кроме XP.
Все, кончились бесплатные DDK. Теперь есть только один Windows DDK, который распространяется на CD. Сам диск, как написано на сайте, бесплатный, а деньги берутся только за пересылку. Пересылка, должен сказать, a little bit overpriced.
Что меняется в ситеме если она работает без Session Manager (smss.exe) — ну например мы его убили.
Мне интересны последствия ... Скажу сразу Windows работат нормально и я не замечаю каких либо изменений.
Здравствуйте, Whisperer, Вы писали:
W>Что меняется в ситеме если она работает без Session Manager (smss.exe) — ну например мы его убили.
Как минимум, новые процессы поддержки подсистем не создаются (после конца загрузки SMSS этим занимается).
Еще можно WINLOGON кильнуть безболезненно (но для этого, как оказалось, SMSS снимать не обязательно, достаточно все хэндлы на процессы в SMSS закрыть, там на WINLOGON и CSRSS только).
По идее, это еще Session Manager, с этим тоже облом будет, с сессиями, то есть.
В однопользовательской системе, если POSIX-ов всяких нет и если NTVDM все обучены в одном процессе запускаться — фактически — все как работало, так и работает. Моя имха такая, если и ошибся, то, надеюсь, несильно.
Все таки кое-где ошибся, исправляюсь где могу и добавляю что еще (не)будет.
1) NTVDM для WOW и DOS запускается явно, код, читающий из реестра из WOW параметры ее запуска, вызывается из CreateProcess. То есть, тут SMSS не работает.
2) У него есть определенные отладочные интерфейсы (порты \DbgSsApiPort и \DbgUiApiPort), которые также не будут работать (правда, внутри SMSS отладка реализуется AFAIK фактически как отдельная подсистема).