Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.29;
Скачать: CL | DM;

Вниз

Закрыть хендл, принадлежащий чужому просессу.   Найти похожие ветки 

 
Анатолий   (2004-07-16 17:49) [0]

Доброго времени суток. Возникла необходимось убивать хендл, принадлежащий чужому процессу. Что-то подобное делается в ProcessExplorer: есть процес и список хендлов принадлежащих ему, можна выбрать, скажем, file - \Device\Floppy0 и закрыть. Может кто подскажет, как это можно реализовать в своем коде. Известно, какой процес искать и известно как называется файл, хендл которого надо закрыть.

Заранее спасибо.


 
Cobalt ©   (2004-07-17 09:23) [1]

А что за прога?


 
Анатолий   (2004-07-19 12:05) [2]

Прога - это Спулер печати. Spoolsv, служба. Она держит хендл \Device\Parallel0, другими словами открытый LPT1 порт. Мне надо открыть его самому, и, понятно, не могу. Такая ситуация, что службу остановить нельзя (ну, в принципе можно, но не желательно по условию задачи). Нужно как нибудь отобрать у спулера этот файл. Вот как ProcessExplorer, например, только из моего кода. Или вы знаете более цивилизованый метод? :)


 
Digitman ©   (2004-07-19 13:23) [3]


> Нужно как нибудь отобрать у спулера этот файл. Вот как ProcessExplorer,
> например


любопытно, каким образом ProcessExplorer "отбирает" какой-то там файл у кого-то


 
Анатолий   (2004-07-19 14:17) [4]

Мне и самому любопытно. Потому и спрашиваю. Факт следующий, ProcessExplorer может закрыть хендл принадлижащий тому или иному процессу.

Не знаю, что происходит с объектом ядра ФАЙЛ :), когда в ProcessExplorer выбрать CloseHandle на file - Device\Parallel0, который принадлежит поцессу Spoolsv. Или вернее что происходит с объектом ядра "драйвер устройства параллельного порта". Но факт в том, что после того как хендл на него (принадлежащий Spoolsv), закрыть из ProcessExplorer, я могу получить на него хендл из своего кода, а до этого не мог. (Не удивительно, Device\Parallel0 (LPT1) можно открыть только с ексклюзивным доступом, кто первый открыл, тому и будет).

Итак, как мне сделать из своего кода то-же, что юзер делает из ProcessExplorer? :)


 
Cobalt ©   (2004-07-19 16:25) [5]

А что за задача такая?
Может, подойдёт такой вариант - запускается твоя прога, захватывает файл. Запускается Служба печати (кстати, как она реагирует на захват файла?)
Твоя прога выполняет необходимые действия, закрывает файл.


 
VMcL ©   (2004-07-19 16:54) [6]

>>Анатолий  (19.07.04 14:17) [4]

Твоя программа долго работает? Может лучше просто перед началом её работы останавливать службу, а по окончании запускать снова?


 
VMcL ©   (2004-07-19 16:55) [7]

... естественно, программно.


 
default ©   (2004-07-19 17:05) [8]

закрыть хендл в чужом процессе можно через DuplicateHandle
для этого надо получить хендл чего-то в контексте целевого процесса
посмотрите в MSDN возможно предоставляются интерфейсы для этого дела...


 
Суслик ©   (2004-07-19 17:10) [9]


> закрыть хендл в чужом процессе можно через DuplicateHandle

а дальше что?


 
default ©   (2004-07-19 17:13) [10]

Суслик ©   (19.07.04 17:10) [9]
по сабжу вроде это и требуется...


 
Анатолий   (2004-07-19 17:55) [11]

Спасибо, default навел на мысль. Сейчас пробую реализовать. Мне главное хендл аккуратно закрыть, а спулер потом когда ему надо, попытается его получить.

Но если известно как забрать этот хендл у Спулера не насильно, а как-нибудь попросить, ну, послать ему сообщение, "закрой порт, если ты сам не печатаешь в него", то подскажите, это конечно було бы предпочтительнее. (Просто в 2000 винде Спулер держит хендл порта постоянно, он перехватывает все обращения к нему и сам обрабатывает, а мне нужно обойтись без его "услуг" :) )


 
VMcL ©   (2004-07-19 18:08) [12]

>>Анатолий  (19.07.04 17:55) [11]

Посмотри на MSDN. Возможно есть способ дать команду службе спулера через SCM, чтобы он освободил порт, а потом снова "забрал" себе.

Вот это может поможет: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/graphics/hh/graphics/splarch_6aecc065-5eb8-4145-9081-c7 418a466710.xml.asp



Страницы: 1 вся ветка

Текущий архив: 2004.08.29;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.023 c
14-1092302360
SiJack
2004-08-12 13:19
2004.08.29
Допустим есть идея для создания прибыльного сайта.


6-1087497769
juiceman
2004-06-17 22:42
2004.08.29
сетевой кабель подключен


1-1092418819
Gnec
2004-08-13 21:40
2004.08.29
Как сделать чтобы в memo язык сразу делался английским


1-1092455709
race1
2004-08-14 07:55
2004.08.29
окно и размер


14-1092064390
Art_Z
2004-08-09 19:13
2004.08.29
Я поступил в ВУЗ!Ура!!!