Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];

Вниз

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

 
Анатолий   (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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.046 c
1-1092298016
Cobalt
2004-08-12 12:06
2004.08.29
Приведение левой части к типу


14-1091987827
Дмитрий В. Белькевич
2004-08-08 21:57
2004.08.29
Тенденция, однако (о фильмах)


1-1092637990
1
2004-08-16 10:33
2004.08.29
События


4-1089840854
MIGUR
2004-07-15 01:34
2004.08.29
Как отследить нажатия левой и правой кнопки мыши


4-1090268200
shooter
2004-07-20 00:16
2004.08.29
Почтовые аттрибуты





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский