Re[3]: Закрыть хендл, принадлежащий чужому процессу.
От: Zhukov  
Дата: 19.07.04 23:25
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>А никак нельзя без внедрениия в адресное пространство процесса, у которого нужно закрыть хэндл? например каким нибудь перечислением всех процесов и их хендлов? (ну, может это и не возможно, спрашиваю, как вариант ) Чтобы без внедрения dll обойтись.


Никак. Хэндлы объектов ядра ядра принадлежат только процессу. У процесса есть таблица хэндлов и функция CloseHandle закрывает хэндл именно в этой таблице процесса, из которого она вызывается. Поэтому, чтобы закрыть что-нибудь "ядерное" нужно вызвать функцию от имени процесса, которому принадлежит хэндл.

А>Дело вот в чем, спулер печати держит хендл \Device\Parallel0. Другими словами держит открытым LPT1 порт. Понятно, объект ядра — драйвер устройства параллельного порта \Device\Parallel0 может иметь и другие хендлы и в этом и в других процессах. Верее если б мог, небыло б и проблемы. Этот файл открывается OPEN_EXISTING только один раз и пока не закроется, больше никто на него хендлов не получит. А мне надо этот хендл, вот и пытаюсь отобрать у спулера.




А>Кстати, если есть возможность более цивилизовано его отобрать (ну послать спулеру какое нибудь сообщение на эту тему), то если знаете, подскажите. Вариант остановки службы спулера конечно срабатывает, но в моем случае неприемлем по условию из-за побочных еффектов (долго срабатывает, нарушает работу печати и др.).


Не знаю к сожалению. А если вы закроете хэндл, побочные эффекты не возникнут?
... << RSDN@Home 1.1.3 stable >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.