Здравствуйте, <Аноним>, Вы писали:
А>А никак нельзя без внедрениия в адресное пространство процесса, у которого нужно закрыть хэндл? например каким нибудь перечислением всех процесов и их хендлов? (ну, может это и не возможно, спрашиваю, как вариант
) Чтобы без внедрения dll обойтись.
Никак. Хэндлы объектов ядра ядра принадлежат только процессу. У процесса есть таблица хэндлов и функция CloseHandle закрывает хэндл именно в этой таблице процесса, из которого она вызывается. Поэтому, чтобы закрыть что-нибудь "ядерное" нужно вызвать функцию от имени процесса, которому принадлежит хэндл.
А>Дело вот в чем, спулер печати держит хендл \Device\Parallel0. Другими словами держит открытым LPT1 порт. Понятно, объект ядра — драйвер устройства параллельного порта \Device\Parallel0 может иметь и другие хендлы и в этом и в других процессах. Верее если б мог, небыло б и проблемы. Этот файл открывается OPEN_EXISTING только один раз и пока не закроется, больше никто на него хендлов не получит. А мне надо этот хендл, вот и пытаюсь отобрать у спулера.
А>Кстати, если есть возможность более цивилизовано его отобрать (ну послать спулеру какое нибудь сообщение на эту тему), то если знаете, подскажите. Вариант остановки службы спулера конечно срабатывает, но в моем случае неприемлем по условию из-за побочных еффектов (долго срабатывает, нарушает работу печати и др.).
Не знаю к сожалению. А если вы закроете хэндл, побочные эффекты не возникнут?

... << RSDN@Home 1.1.3 stable >>