Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » [решено] Получение списка хендлов к файлу

Ответить
Настройки темы
[решено] Получение списка хендлов к файлу

Аватара для Raistlin

Ветеран


Сообщения: 573
Благодарности: 28


Конфигурация

Профиль | Отправить PM | Цитировать


Как через Win32 узнать, есть ли открытые хендлы у файла? Хочется узнать, получится ли удалить файл, не производя собственно попытки его стереть.

-------
Magically yours
Raistlin


Отправлено: 18:40, 24-05-2005

 

Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


Обязательно самому писать? Если нет, советую:
http://www.sysinternals.com/ntw2k/freeware/handle.shtml
Ну и это можно посмотреть:
http://www.sysinternals.com/ntw2k/source/filemon.shtml

Отправлено: 12:15, 26-05-2005 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Raistlin

Ветеран


Сообщения: 573
Благодарности: 28

Профиль | Отправить PM | Цитировать


Handle выдаёт неполные данные. Возьмём, к примеру, nnCron. У него в составе библиотека есть, которая, очевидно, отвечает за отображение контекстного меню, — nnhook.dll. Если в сеансе работы вызвать контекстное меню, то до перезагрузки этот файл удалить невозможно. Но Handle никаких данных о хендлах к нему не выдаёт. Или я что-то недопонимаю здесь просто?

-------
Magically yours
Raistlin


Отправлено: 14:02, 06-09-2005 | #3


Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Raistlin
Цитата:
Или я что-то недопонимаю здесь просто?
...вот я тоже сейчас возможно чего-то недопонимаю,но почему бы не воспользоваться API-функцией EnumProcessModules ?
Ведь насколько я понял,под "открытым файлом" ты подразумеваешь некоторый запущенный исполняемый файл (.exe)...

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 15:21, 06-09-2005 | #4


Аватара для Raistlin

Ветеран


Сообщения: 573
Благодарности: 28

Профиль | Отправить PM | Цитировать


Цитата:
подразумеваешь некоторый запущенный исполняемый файл (.exe)
Нет, как раз не exe, "запущенность" exe проверить-то легко. А меня интересует "залоченность" файла, а именно dll. Такую информацию возможно получить с помощью этой функции? Если да, не мог бы ты объяснить на примере — как должна вызываться функция и как проинтерпретировать результат? А то сер я совсем в этом, тыкаюсь, как слепой котёнок… Заранее спасибо!

-------
Magically yours
Raistlin


Отправлено: 17:07, 06-09-2005 | #5


Пользователь


Сообщения: 117
Благодарности: 1

Профиль | Сайт | Отправить PM | Цитировать


А попробуй его открыть — Exclusive... (for r/w and w/o sharing flags)

Я так проверяю в аналогичной ситуации.
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:03, 07-09-2005 | #6


Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Raistlin
Теперь я вроде понял,что ты имеешь в виду (невозможность удаления библиотеки пока не перезагрузишь систему).
Значит,функция EnumProcessModules лишь перечисляет все модули,загруженные в адресное пространство конкретного процесса.
В твоём же случае необходимо,на мой взгляд,смотреть атрибуты файла, т.е. возможно,что у этой библиотеки выставлен атрибут FILE_ATTRIBUTE_READONLY ,который означает,что приложения не могут ни писать в этот файл,ни удалять его.
К примеру:
Код: Выделить весь код
var
 fAttrs : DWORD;
 fName : LPCTSTR;
begin
 fAttrs := GetFileAttributes('nnhook.dll');
if fAttrs = FILE_ATTRIBUTE_READONLY then
begin
 SetFileAttributes('nnhook.dll', FILE_ATTRIBUTE_NORMAL); 
end;
end;
...попробуй,может это поможет.

P.S. Если тебе всё-таки понадобится пример кода функции EnumProcessModules,напиши - приведём .

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 15:48, 07-09-2005 | #7


Аватара для Raistlin

Ветеран


Сообщения: 573
Благодарности: 28

Профиль | Отправить PM | Цитировать


Я воспользовался советом SergeCpp, вроде получилось:
Код: Выделить весь код
CreateFile(filename, GENERIC_WRITE, 1, 0, OPEN_EXISTING, 0, 0)
Возвращает -1, если файл заблокирован или с ним что-то не так, или хендл к нему, если можно открыть эксклюзивно на запись. Само собой, в последнем случае вызываем CloseHandle.

-------
Magically yours
Raistlin


Отправлено: 17:18, 07-09-2005 | #8


Пользователь


Сообщения: 117
Благодарности: 1

Профиль | Сайт | Отправить PM | Цитировать


А спасибо...

Ладно уж, я так, к слову...

Отправлено: 17:59, 07-09-2005 | #9


Аватара для Raistlin

Ветеран


Сообщения: 573
Благодарности: 28

Профиль | Отправить PM | Цитировать


Прощу прощения! Конечно, большое спасибо. Я долго раздумывал, писать такое неинформативное сообщение или нет , решил — не буду, так как в предыдущем посте я поблагодарил заранее. Надеюсь, ты меня простишь .
А вот и кое-что по теме. Похоже, проверить каталог на залоченность таким образом нельзя:
Код: Выделить весь код
CreateFile(dirname, GENERIC_WRITE, 1, 0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0)
возвращает хендл к каталогу, который открыт, скажем, в Far и удалён быть не может. Есть идеи?

-------
Magically yours
Raistlin


Отправлено: 15:57, 08-09-2005 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » [решено] Получение списка хендлов к файлу

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Время последнего обращения к файлу truvo Хочу все знать 1 23-11-2009 13:36
[решено] Как вернуть расширение файлу? vof44ik Хочу все знать 8 14-06-2009 00:12
[решено] Получение списка неизвестных ключей реестра morgan1991 AutoIt 5 07-03-2009 00:18
[решено] Получение Данных из таблицы(JS) System Failure Вебмастеру 3 26-05-2008 08:36
Драйвер - [решено] Как узнать устройстпо по .sys файлу? NordWest Microsoft Windows 2000/XP 7 09-11-2007 15:36




 
Переход