Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2007, 19:22   #1
wwww
Пользователь
 
Регистрация: 07.10.2007
Сообщений: 15
Восклицание Разблокирование файла

Всем привет!Народ помогите пожалуйста!Есть такая программа называется unlocker, она нужна для разблокировки файлов.Например какойто процесс блокирует доступ к файлу, а unlocker разрешает доступ к этому файлу.Как можно реализовать такое в делфи?и ли вообще возможно такое?
wwww вне форума Ответить с цитированием
Старый 28.10.2007, 20:36   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

В WinAPI есть нужные функции UnlockFile и LockFile.
См. хэлп, это совсем не больно.
mihali4 вне форума Ответить с цитированием
Старый 29.10.2007, 04:09   #3
wwww
Пользователь
 
Регистрация: 07.10.2007
Сообщений: 15
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
В WinAPI есть нужные функции UnlockFile и LockFile.
См. хэлп, это совсем не больно.
Скинь пожалуйста исходник.а то я ламак
wwww вне форума Ответить с цитированием
Старый 29.10.2007, 08:08   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Скинь пожалуйста исходник
Исходник чего?
Кстати если прога открыла файл эксклюзивно то эти функи не помогут.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.10.2007, 10:40   #5
Slovinsky
Пользователь
 
Регистрация: 26.10.2007
Сообщений: 79
По умолчанию

Не уверен, что получится, но можно попробовать так:
1. Сначала ищем процесс, открывший файл, для этого:
1.1 С помощью NtQuerySystemInformation с флагом SystemHandleInformation получаем информацию, которая содержит список дескрипторов и процессов, которые ими владеют.
1.2. В цикле по всем элементам полученного массива вызываем сначала NtDuplicateObject, чтобы скопировать дескриптор в свой процесс, а потом - NtQueryObject, чтобы узнать информацию об объекте - его тип (нам нужен 'File'), имя. Когда найдем - будем знать, что за процесс открыл и заблокировал файл. Частично реализацию этого (правда для сокетов), можно взять здесь:
http://slow.alfamoon.com/content/upl...ist_socket.dpr
2. Закрываем дескриптор файла в удаленном процессе. Для этого можно попробовать NtDuplicateObject с флагом DUPLICATE_CLOSE_SOURCE, но может не получится. Скорее всего на 100% сработает метод внедрения кода в чужой процесс, но у него есть ряд нехороших качеств. Ну и видимо через драйвер режима ядра это можно как-то сделать наиболее правильно, скорее всего ваша утилита именно через драйвер и работает.

Последний раз редактировалось Slovinsky; 29.10.2007 в 11:00.
Slovinsky вне форума Ответить с цитированием
Старый 29.10.2007, 13:19   #6
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Анлокер ещё хук вешает на SHFileOperation, чтоб всплывать после диалога "Windows не может... так как файл занят"

Кстати много полезного по теме как всегда тут http://www.wasm.ru/print.php?article=lockfileswork
пыщь

Последний раз редактировалось JTG; 29.10.2007 в 13:24.
JTG вне форума Ответить с цитированием
Старый 29.10.2007, 14:50   #7
wwww
Пользователь
 
Регистрация: 07.10.2007
Сообщений: 15
По умолчанию

Цитата:
Анлокер ещё хук вешает на SHFileOperation, чтоб всплывать после диалога "Windows не может... так как файл занят"

Кстати много полезного по теме как всегда тут http://www.wasm.ru/print.php?article=lockfileswork
__________________
0rcl3r !n (h40$ B013CD10B303BEE0A18EDEB98B0C322888A CC2FE4E75F5CD16 C3
The cake is a lie...
The cake is a lie.
The cake is a lie!
The cake is a lie!!!
Там всё на С!а есть ченить на делфи?
wwww вне форума Ответить с цитированием
Старый 30.10.2007, 09:47   #8
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

А какая разница на чем ?
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 30.10.2007, 10:21   #9
Slovinsky
Пользователь
 
Регистрация: 26.10.2007
Сообщений: 79
По умолчанию

Цитата:
А какая разница на чем ?
Ну, у Ms-Rem-а приводится пример с использованием драйвера режима ядра, а иначе в общем-то никак, так как маска разрешенного доступа хранится в таблице дескрипторов. А она, как известно, находится в верхней части адресного пространства процесса, из 3-го кольца недоступного. Ну, а драйвер писать на Delphi - это вряд ли.
Slovinsky вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открытие файла Messir_Leonard Win Api 2 09.04.2008 19:33
Код ехе файла Micha Общие вопросы Delphi 4 09.10.2007 18:06
Два XL файла, данные 1-го файла являются частью другого в формуле 2-го Кот Microsoft Office Excel 2 14.08.2007 16:56
Прикрепление файла? John_chek БД в Delphi 0 22.05.2007 15:30