Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как определить открыт ли файл, если да то чем... Как определить открыт ли файл. 
V
    Опции темы
RUVATA
Дата 14.1.2011, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 24.8.2010

Репутация: нет
Всего: нет



Всем доброго времени суток...
Проблема казалось бы банальная...
Программе необходимо поработать с некоторым файлом, а он не всегда может быть доступен, т.е. он может быть занят, открыт другим приложением, или даже приложением другого пользователя (если файл доступен по сети)...
С этим в принципе можно разобраться, с помощью обработки исключений при инициализации экземпляра класса FileStream, пытаясь получить исключительную привилегию
Код

  Try
        Dim test As FileStream = File.Open("F:\Test.txt", FileMode.Open, FileAccess.ReadWrite, FileShare.None)
        Catch ex As Exception
            If ex.TargetSite.Name = "WinIOError" Then MsgBox("файл занят другим приложением")
  End Try

 Как-то так...
Но вот как узнать каким... я уже и не говорю про "разблокировать"... хотя бы узнать каким...
Я уже 2 дня рыскаю в поисках ответа, и все в конце концов сводится к использованию API из "ntdll.dll", там "танцы с бубнами" чуть-ли не на accемблере надо выкручивать... опросчик открытых в системе файлов на 1000 строк кода... Sad
Неужели все так плохо ?
И в NetFramework нет ничего подходящего для получения подобного результата,
Ну не там, так через WMI как-нь-ть ?...
Need help!
Суть: Узнать/получить Handle известного открытого файла, определить какие процессы его юзают.
PM MAIL   Вверх
jonie
Дата 14.1.2011, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



RUVATA, вам надо гуглить про NtQuerySystemInformation функцию из ntdll.dll а также про NtQueryInformationThread, NtQueryInformationProcess, NtQueryDirectoryObject ....

вот тут инфа имеется:
http://undocumented.ntinternals.net/

http://wj32.wordpress.com/2009/04/25/ntque...ses-by-hooking/


а вот нашел кой че готовое: http://www.codeproject.com/KB/shell/OpenedFileFinder.aspx
http://forum.sysinternals.com/topic18892.html
но вероятно придется допиливать.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
RUVATA
Дата 15.1.2011, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 24.8.2010

Репутация: нет
Всего: нет



Да, спасибо, но я же и говорю что все приводит у "танцам с бубнами" вокруг ntdll.dll
Конечно хочется понять суть... но проблема похоже совсем не тривиальная хотя и банальна на первый взгляд,
Потому я пошел другим путем, есть такая утилита от Windows SysInternals - Handle
С ее помощью как раз получается то что надь... но только на платформах WinNT
Windows Vista и Windows 7 ей уже не поддаются, потому вопрос по прежнему открыт,
 так как мое детище и на 7-ке работать должно.
PM MAIL   Вверх
jonie
Дата 16.1.2011, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



unlocker теперь поддерживает коммандную строку. Пробуйте его ковырять, или ковыряйте ntdll.dll ....


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
RUVATA
Дата 20.1.2011, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 24.8.2010

Репутация: нет
Всего: нет



А ларчик-то очень просто открывался...
Вопрос поднимался на нескольких форумах посвященных программированию и администрированию,
и никто ни где так и не дал правильного ответа на вопрос "Как определить Используется ли вот этот файл, и если да, то кем?"
а вот вам и ответ...
и не надо блукать вокруг Windows API, копировать Handles, и иными способами извращаться...
так как Microsoft предусмотрительно начиная с версии NT, в составе системных утилит предоставляет нам openfiles.exe
которая банально уже из самого названия понятно, предназначена для предоставления информации об OPENFILES

user posted image

Данная утилита определяет привилегии запустившего ее пользователя, достаточные или нет для получения такой информации.
и по запросу с аргументом \Query (по умолчанию, можно аргумент опустить) выдает нам все что мы так жаждали увидеть.
В изначальном состоянии данная утилита находится в режиме отображения информации исключительно об открытых по сети файлов...
но изменив значения флага \Local отвечающего за "построение списка объектов" ...

user posted image

... и изменить его используя аргумент /Local on
параметры вступят в силу после перезагрузки системы...

вуаля! ... обращаемся к openfiles.exe.. и с ее StandartOutput
снимаем таблицу следующего содержания

user posted image

Это сообщение отредактировал(а) RUVATA - 21.1.2011, 12:11
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0684 ]   [ Использовано запросов: 23 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.